USP_DATAFORMTEMPLATE_EDIT_RECONCILIATIONCLOSESHIFT

The save procedure used by the edit dataform template "Reconciliation Close Shift Edit Data Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter indicating the ID of the record being edited.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@STARTINGCASH money IN Starting balance
@ACTUALCASH money IN Cash deposit
@COMMENT nvarchar(max) IN Comment
@OTHERRECEIPTS xml IN Other receipts

Definition

Copy

                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_RECONCILIATIONCLOSESHIFT (
                        @ID uniqueidentifier,
                        @CHANGEAGENTID uniqueidentifier = null,
                        @STARTINGCASH money,
                        @ACTUALCASH money,
                        @COMMENT nvarchar(max),
                        @OTHERRECEIPTS xml
                    )
                    as
                        set nocount on;

                        declare @APPUSERID uniqueidentifier;
                        select @APPUSERID = APPUSERID from dbo.RECONCILIATION where ID = @ID;

                        -- Check if there are pending orders with application user
                        if exists (
                            select SALESORDERPAYMENT.ID 
                            from dbo.SALESORDERPAYMENT
                            inner join dbo.SALESORDER 
                                on SALESORDERPAYMENT.SALESORDERID = SALESORDER.ID
                            where 
                                SALESORDERPAYMENT.RECONCILIATIONID is null 
                                and SALESORDER.STATUSCODE <> 1
                                and SALESORDERPAYMENT.APPUSERID = @APPUSERID
                                and SALESORDER.SALESMETHODTYPECODE <> 3
                        )
                        begin
                            raiserror('ERR_RECONCILIATION_PENDINGORDEREXISTS', 13, 1);
                            return 1;
                        end

                        if @CHANGEAGENTID is null  
                            exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output

                        declare @CURRENTDATE datetime = getdate();
                        declare @CLIENTDATETIME datetime = dbo.UFN_TIMEZONEENTRY_GETSYSTEMDEFAULTDATEWITHTIMEOFFSET(getutcdate(), 1);

                        begin try

                            -- update RECONCILIATION table
                            update dbo.[RECONCILIATION] 
                            set
                                [STARTINGCASH] = @STARTINGCASH,
                                [ACTUALCASH] = @ACTUALCASH,
                                [COMMENT] = @COMMENT,
                                [RECONCILIATIONDATE] = @CLIENTDATETIME,
                                [CHANGEDBYID] = @CHANGEAGENTID,
                                [DATECHANGED] = @CURRENTDATE
                            where [ID] = @ID;

                            -- update SALESORDERPAYMENT table
                            declare @STATUSCODE tinyint
                            select @STATUSCODE = STATUSCODE 
                            from dbo.RECONCILIATION 
                            where ID = @ID 

                            -- only update SALESORDERPAYMENT table when
                            -- current conciliation is open
                            if @STATUSCODE = 0
                            begin
                                update dbo.SALESORDERPAYMENT with (rowlock)
                                set
                                    RECONCILIATIONID = @ID,
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CURRENTDATE
                                from dbo.[SALESORDERPAYMENT]
                                where 
                                    SALESORDERPAYMENT.RECONCILIATIONID is null and
                                    SALESORDERPAYMENT.DONOTRECONCILE = 0 and
                                    SALESORDERPAYMENT.APPUSERID = @APPUSERID

                -- update reservation security deposit payment table
                                update dbo.RESERVATIONSECURITYDEPOSITPAYMENT with (rowlock)
                                set
                                    RECONCILIATIONID = @ID,
                                    CHANGEDBYID = @CHANGEAGENTID,
                                    DATECHANGED = @CURRENTDATE
                                from dbo.[RESERVATIONSECURITYDEPOSITPAYMENT]
                                inner join dbo.[SALESORDER]
                                    on [RESERVATIONSECURITYDEPOSITPAYMENT].[RESERVATIONID] = [SALESORDER].[ID]
                                where 
                                    RESERVATIONSECURITYDEPOSITPAYMENT.RECONCILIATIONID is null
                                    and RESERVATIONSECURITYDEPOSITPAYMENT.APPUSERID = @APPUSERID
                                    and [SALESORDER].[SALESMETHODTYPECODE] <> 2;


                                update dbo.[CREDITPAYMENT]
                                set
                                    [RECONCILIATIONID] = @ID,
                                    [CHANGEDBYID] = @CHANGEAGENTID,
                                    [DATECHANGED] = @CURRENTDATE
                                where 
                                    [CREDITPAYMENT].[RECONCILIATIONID] is null and 
                                    [CREDITPAYMENT].[APPUSERID] = @APPUSERID and
                                    [CREDITPAYMENT].[REFUNDPROCESSED] = 1;
                            end

                            -- update RECONCILIATIONDETAIL table

                            -- build a temporary table containing the values from the XML
                            declare @TempTbl table (
                                ID uniqueidentifier default null,
                                PAYMENTMETHODCODE int,
                                CREDITTYPECODEID uniqueidentifier,
                                OTHERPAYMENTMETHODCODEID uniqueidentifier,
                                QUANTITY int,
                                ISREFUND bit
                            );

                            insert into @TempTbl 
                            select 
                                [ID],
                                [PAYMENTMETHODCODE], 
                                [CREDITTYPECODEID],
                                [OTHERPAYMENTMETHODCODEID],
                                [QUANTITY],
                                [ISREFUND]
                            from dbo.[UFN_RECONCILIATION_GETOTHERRECEIPTS_FROMITEMLISTXML](@OTHERRECEIPTS)
                            where 
                                ([QUANTITY] <> 0 or [EXPECTED] <> 0) and
                                [ISLABEL] = 0

                            update @TempTbl set ID = newid() where (ID is null) or (ID = '00000000-0000-0000-0000-000000000000');
                            update @TempTbl set CREDITTYPECODEID = null where CREDITTYPECODEID = '00000000-0000-0000-0000-000000000000';
                            update @TempTbl set OTHERPAYMENTMETHODCODEID = null where OTHERPAYMENTMETHODCODEID = '00000000-0000-0000-0000-000000000000';

                            if @@Error <> 0
                                return 1;

                            declare @contextCache varbinary(128);
                            declare @e int;

                            -- cache current context information 
                            set @contextCache = CONTEXT_INFO();

                            -- set CONTEXT_INFO to @CHANGEAGENTID 
                            if not @CHANGEAGENTID is null
                                set CONTEXT_INFO @CHANGEAGENTID;

                            -- delete any items that no longer exist in the XML table
                            delete from dbo.[RECONCILIATIONDETAIL] 
                            where [RECONCILIATIONID] = @ID and 
                                [ID] not in (select ID from @TempTbl)    

                            -- delete refund
                            if @ID not in (select [ID] from @TempTbl where [ISREFUND] = 1) and exists (select [ID] from dbo.[RECONCILIATIONCREDITDETAIL] where [ID] = @ID)
                                exec dbo.USP_RECONCILIATIONCREDITDETAIL_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID

                            select @e=@@error;

                            -- reset CONTEXT_INFO to previous value 
                            if not @contextCache is null
                                set CONTEXT_INFO @contextCache;

                            if @e <> 0
                                return 2;

                            -- update the items that exist in the XML table and the db
                            update dbo.[RECONCILIATIONDETAIL]
                            set [RECONCILIATIONDETAIL].[QUANTITY]= [temp].QUANTITY,
                                [RECONCILIATIONDETAIL].CHANGEDBYID = @CHANGEAGENTID,
                                [RECONCILIATIONDETAIL].DATECHANGED = @CURRENTDATE 
                            from @TempTbl as [temp]
                            where 
                                [temp].ID = [RECONCILIATIONDETAIL].ID and
                                (
                                    ([RECONCILIATIONDETAIL].[QUANTITY] <> [temp].[QUANTITY]) or 
                                    ([RECONCILIATIONDETAIL].[QUANTITY] is null and [temp].[QUANTITY] is not null) or 
                                    ([RECONCILIATIONDETAIL].[QUANTITY] is not null and [temp].[QUANTITY] is null
                                ) and
                                [temp].[ISREFUND] = 0;

                            --Update refund
                            update dbo.[RECONCILIATIONCREDITDETAIL]
                            set 
                                [RECONCILIATIONCREDITDETAIL].[QUANTITY]= [temp].QUANTITY,
                                [RECONCILIATIONCREDITDETAIL].CHANGEDBYID = @CHANGEAGENTID,
                                [RECONCILIATIONCREDITDETAIL].DATECHANGED = @CURRENTDATE 
                            from @TempTbl as [temp]
                            where [temp].ID = [RECONCILIATIONCREDITDETAIL].ID
                                and [temp].[ISREFUND] = 1;

                            if @@Error <> 0
                                return 3;    

                            -- insert new items
                            insert into [RECONCILIATIONDETAIL] (
                                [ID],
                                [RECONCILIATIONID],
                                [PAYMENTMETHODCODE],
                                [QUANTITY],
                                [CREDITTYPECODEID],
                                [OTHERPAYMENTMETHODCODEID],
                                [ADDEDBYID], 
                                [CHANGEDBYID], 
                                [DATEADDED], 
                                [DATECHANGED]
                            )
                            select [ID],
                                @ID
                                [PAYMENTMETHODCODE],
                                [QUANTITY],
                                [CREDITTYPECODEID],
                                [OTHERPAYMENTMETHODCODEID],
                                @CHANGEAGENTID
                                @CHANGEAGENTID
                                @CURRENTDATE
                                @CURRENTDATE
                            from @TempTbl as [temp]
                            where 
                                not exists (select ID from dbo.[RECONCILIATIONDETAIL] as data where data.ID = [temp].ID) and
                                [temp].[ISREFUND] = 0

                            --Insert refund
                            if @ID in (select [ID] from @TempTbl where [ISREFUND] = 1) and not exists (select [ID] from dbo.[RECONCILIATIONCREDITDETAIL] where [ID] = @ID)
                                insert into [RECONCILIATIONCREDITDETAIL] (
                                    [ID],
                                    [QUANTITY],
                                    [ADDEDBYID], 
                                    [CHANGEDBYID], 
                                    [DATEADDED], 
                                    [DATECHANGED]
                                )
                                select 
                                    [ID],
                                    [QUANTITY],
                                    @CHANGEAGENTID
                                    @CHANGEAGENTID
                                    @CURRENTDATE
                                    @CURRENTDATE
                                from @TempTbl as [temp]
                                where 
                                    [temp].[ID] = @ID and 
                                    [temp].[ISREFUND] = 1

                            if @@Error <> 0
                                return 4;

                        end try
                        begin catch
                            exec dbo.USP_RAISE_ERROR
                            return 1
                        end catch

                    return 0;