USP_DATAFORMTEMPLATE_EDIT_COMPLETEDORDER_PATRON

The save procedure used by the edit dataform template "Completed Order Patron 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.
@CONSTITUENTID uniqueidentifier IN Patron
@SAMEASPATRON bit IN
@CREATEADJUSTMENT bit IN
@ADJUSTMENTREASONCODEID uniqueidentifier IN Reason
@PREVIOUSCONSTITUENTID uniqueidentifier IN

Definition

Copy


                CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_COMPLETEDORDER_PATRON (
                    @ID uniqueidentifier,
                    @CHANGEAGENTID uniqueidentifier = null,
                    @CONSTITUENTID uniqueidentifier,
                    @SAMEASPATRON bit,
                    @CREATEADJUSTMENT bit,
                    @ADJUSTMENTREASONCODEID uniqueidentifier,
                    @PREVIOUSCONSTITUENTID uniqueidentifier
                )
                as

                    set nocount on;

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

                    declare @CURRENTDATE datetime
                    set @CURRENTDATE = getdate()

                    declare @PDACCOUNTSYSTEMID uniqueidentifier;
                    declare @ALLOWGLDISTRIBUTIONS bit;

                    select
                        @PDACCOUNTSYSTEMID = ID,
                        @ALLOWGLDISTRIBUTIONS = ALLOWGLDISTRIBUTIONS
                    from
                        dbo.UFN_PDACCOUNTSYSTEM_DEFAULTORSYSTEM();

                    begin try

                        if @SAMEASPATRON = 1
                        begin
                            update dbo.SALESORDER with (rowlock) set
                                CONSTITUENTID = @CONSTITUENTID,
                                RECIPIENTID = @CONSTITUENTID,
                                ADDRESSID = (select top(1) ID from dbo.ADDRESS where CONSTITUENTID = @CONSTITUENTID and ISPRIMARY = 1 and DONOTMAIL = 0),
                                PHONEID = (select top(1) ID from dbo.PHONE where PHONE.CONSTITUENTID = @CONSTITUENTID and PHONE.ISPRIMARY = 1 and DONOTCALL = 0),
                                EMAILADDRESSID = (select top(1) ID from dbo.EMAILADDRESS where CONSTITUENTID = @CONSTITUENTID and ISPRIMARY = 1 and DONOTEMAIL = 0),
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CURRENTDATE
                            where ID = @ID
                        end

                        else
                        begin
                            update dbo.SALESORDER with (rowlock) set
                                CONSTITUENTID = @CONSTITUENTID,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CURRENTDATE
                            where ID = @ID
                        end

                        -- Update the constituent on 'Order' type revenue transactions for this Sales Order

                        -- Stash the revenue id's in a table so we only hit the sales order table once

                        declare @ORDERREVENUE table(ID uniqueidentifier)

                        insert into @ORDERREVENUE
                        select
                            REVENUE.ID
                        from dbo.REVENUE with (nolock)
                        inner join dbo.SALESORDER
                            on REVENUE.ID = SALESORDER.REVENUEID
                        where SALESORDER.ID = @ID

                        update R with (rowlock) set
                            CONSTITUENTID = @CONSTITUENTID
                        from dbo.REVENUE R
                        where ID in (select ID from @ORDERREVENUE)

                        -- Update recognition credits if necessary

                        update RR with (rowlock) set
                            CONSTITUENTID = @CONSTITUENTID
                        from dbo.REVENUERECOGNITION RR
                        inner join dbo.REVENUESPLIT
                            on RR.REVENUESPLITID = REVENUESPLIT.ID
                        where REVENUESPLIT.REVENUEID in (select ID from @ORDERREVENUE)
                        and RR.CONSTITUENTID = @PREVIOUSCONSTITUENTID

                        -- Update the constituent on all refunds and refund payment revenues

                        -- Stash the credit id's in a table so we only have to mine that table once for multiple updates

                        declare @ORDERREFUNDS table(ID uniqueidentifier)

                        insert into @ORDERREFUNDS
                        select FT.ID
                        from dbo.FINANCIALTRANSACTION FT
                        inner join dbo.CREDIT_EXT EXT on FT.ID = EXT.ID
                        left join dbo.SALESORDER SO on SO.REVENUEID = FT.PARENTID
                        where isnull(SO.ID, EXT.SALESORDERID) = @ID

                        update dbo.FINANCIALTRANSACTION set
                            CONSTITUENTID = @CONSTITUENTID,
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CURRENTDATE
                        where ID in (
                            select ID from @ORDERREFUNDS

                            union all

                            select CREDITPAYMENT.REVENUEID as ID
                            from dbo.CREDITPAYMENT
                            inner join @ORDERREFUNDS as REFUNDS on REFUNDS.ID = CREDITPAYMENT.CREDITID
                        );

                        -- update all sales order payment revenues

                        exec dbo.USP_SALESORDER_UPDATEPAYMENTCONSTITUENT @ID, @CHANGEAGENTID;

                        if @CREATEADJUSTMENT = 1
                        begin

                            declare @ADJUSTMENTREASON nvarchar(300),
                                    @REVENUEID uniqueidentifier,
                                    @REVENUEDATE datetime,
                                    @REVENUEPOSTDATE datetime;

                            set @ADJUSTMENTREASON = (select DESCRIPTION from dbo.ADJUSTMENTREASONCODE where ID = @ADJUSTMENTREASONCODEID)

                            declare POSTED_PAYMENTS cursor local fast_forward for
                            select
                                REVENUE.ID,
                                REVENUE.DATE,
                                REVENUE.POSTDATE
                            from dbo.REVENUE with (nolock)
                            inner join dbo.SALESORDERPAYMENT
                                on REVENUE.ID = SALESORDERPAYMENT.PAYMENTID
                            inner join dbo.REVENUEPOSTED
                                on REVENUEPOSTED.ID = REVENUE.ID
                            where SALESORDERPAYMENT.SALESORDERID = @ID

                            open POSTED_PAYMENTS

                            fetch next from POSTED_PAYMENTS into @REVENUEID, @REVENUEDATE, @REVENUEPOSTDATE

                            while @@fetch_status = 0
                            begin

                                exec dbo.USP_SAVE_ADJUSTMENT 
                                    @REVENUEID
                                    null
                                    @CHANGEAGENTID
                                    @CURRENTDATE,
                                    @REVENUEDATE,
                                    @REVENUEPOSTDATE,
                                    @ADJUSTMENTREASON,
                                    0,
                                    @ADJUSTMENTREASONCODEID

                                if @ALLOWGLDISTRIBUTIONS = 1            
                                    exec dbo.USP_SAVE_REVENUEGLDISTRIBUTION    @REVENUEID, @CHANGEAGENTID, @CURRENTDATE

                                fetch next from POSTED_PAYMENTS into @REVENUEID, @REVENUEDATE, @REVENUEPOSTDATE
                            end
                            --When a cursor is used, it should be explicitly closed/deallocated in case of blocking or USP running long

                            close POSTED_PAYMENTS;
                            deallocate POSTED_PAYMENTS;

                        end


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

                return 0;