USP_DATAFORMTEMPLATE_EDIT_REVENUEBENEFITS2

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@BENEFITS xml IN
@BENEFITSWAIVED bit IN
@PERCENTAGEBENEFITS xml IN
@ADJUSTMATCHINGGIFTCLAIMS tinyint IN
@UPDATEGIFTFEEOPTION bit IN

Definition

Copy


                CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_REVENUEBENEFITS2
                    (
                        @ID uniqueidentifier,
                        @CHANGEAGENTID uniqueidentifier = null,
                        @BENEFITS xml,
                        @BENEFITSWAIVED bit,
                        @PERCENTAGEBENEFITS xml,
                        @ADJUSTMATCHINGGIFTCLAIMS tinyint,
                        @UPDATEGIFTFEEOPTION bit
                    )
                as
                begin
                    set nocount on;

                    begin try
                        declare @CHANGEDATE datetime;
                        set @CHANGEDATE = getdate();

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

                        declare @POSTSTATUSCODE tinyint;
                        declare @POSTDATE datetime;
                        declare @REVENUETRANSACTIONCURRENCYID uniqueidentifier;
                        declare @REVENUEBASECURRENCYID uniqueidentifier;
                        declare @REVENUETRANSACTIONCODE tinyint;
                        declare @ORIGINALTOTALBENEFITVALUE money = 0
                        declare @CONSTITUENTID uniqueidentifier;
                        select
                            @ORIGINALTOTALBENEFITVALUE = coalesce(sum(TRANSACTIONTOTALVALUE), 0)
                        from dbo.REVENUEBENEFIT
                        where REVENUEID = @ID;

                        if @UPDATEGIFTFEEOPTION is null
                            set @UPDATEGIFTFEEOPTION = 0;

                        select 
                            @POSTSTATUSCODE = case when FINANCIALTRANSACTION.POSTSTATUSCODE = 3 then 2 when FINANCIALTRANSACTION.POSTSTATUSCODE = 2 then 0 else 1 end,
                            @POSTDATE = FINANCIALTRANSACTION.POSTDATE,
                            @REVENUETRANSACTIONCURRENCYID = FINANCIALTRANSACTION.TRANSACTIONCURRENCYID,
                            @REVENUEBASECURRENCYID = isnull(REVENUE_EXT.NONPOSTABLEBASECURRENCYID, CURRENCYSET.BASECURRENCYID),
                            @REVENUETRANSACTIONCODE = FINANCIALTRANSACTION.TYPECODE,
                            @CONSTITUENTID = FINANCIALTRANSACTION.CONSTITUENTID
                        from 
                            dbo.FINANCIALTRANSACTION
                            inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
                            inner join dbo.PDACCOUNTSYSTEM on FINANCIALTRANSACTION.PDACCOUNTSYSTEMID = PDACCOUNTSYSTEM.ID
                            inner join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID
                        where 
                            FINANCIALTRANSACTION.ID = @ID
                            and FINANCIALTRANSACTION.DELETEDON is null

                        if @BENEFITSWAIVED = 0 -- Grid is not empty(not waived)

                        begin

                            insert into dbo.BENEFITCONSTITUENTDECLINED
                            (
                                BENEFITID,
                                CONSTITUENTID,
                                ADDEDBYID, 
                                CHANGEDBYID, 
                                DATEADDED, 
                                DATECHANGED
                            )
                            select 
                                REVENUEBENEFIT.BENEFITID,
                                @CONSTITUENTID,
                                @CHANGEAGENTID
                                @CHANGEAGENTID
                                @CHANGEDATE
                                @CHANGEDATE                        
                            from dbo.REVENUEBENEFIT
                            where
                                REVENUEBENEFIT.REVENUEID = @ID and
                                -- Benefit has been deleted

                                REVENUEBENEFIT.BENEFITID not in
                                (
                                    select 
                                        T.benefits.value('(BENEFITID)[1]','uniqueidentifier')                        
                                    from @BENEFITS.nodes('/BENEFITS/ITEM') T(benefits)
                                )
                                and
                                -- Record does not already exist

                                REVENUEBENEFIT.BENEFITID not in
                                (
                                    select BCD.BENEFITID
                                    from dbo.BENEFITCONSTITUENTDECLINED BCD
                                    where BCD.CONSTITUENTID = @CONSTITUENTID
                                )
                                and
                                exists
                                -- One of the revenue splits is a membership, that contains this benefit

                                ( 
                                    select 1 from dbo.REVENUEBENEFIT RBSUB
                                    inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTION.ID = RBSUB.REVENUEID
                                    inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
                                    inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
                                    inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
                                    inner join dbo.MEMBERSHIPTRANSACTION on MEMBERSHIPTRANSACTION.REVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID
                                    inner join dbo.MEMBERSHIPLEVEL on MEMBERSHIPTRANSACTION.MEMBERSHIPLEVELID=MEMBERSHIPLEVEL.ID
                                    inner join dbo.MEMBERSHIPLEVELBENEFIT on MEMBERSHIPLEVELBENEFIT.MEMBERSHIPLEVELID = MEMBERSHIPLEVEL.ID
                                    where 
                                        RBSUB.BENEFITID = REVENUEBENEFIT.BENEFITID and 
                                        RBSUB.REVENUEID = @ID and
                                        MEMBERSHIPLEVELBENEFIT.BENEFITID = REVENUEBENEFIT.BENEFITID and
                                        FINANCIALTRANSACTION.DELETEDON is null and
                                        FINANCIALTRANSACTIONLINEITEM.DELETEDON is null and
                                        FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1
                                )

                            -- If benefit is added constituent is no longer declining it

                            delete from dbo.BENEFITCONSTITUENTDECLINED
                            where
                                CONSTITUENTID = @CONSTITUENTID
                                and BENEFITID in
                                (
                                    select T.c.value('(BENEFITID)[1]','uniqueidentifier')                        
                                    from @BENEFITS.nodes('/BENEFITS/ITEM') T(c)
                                )
                                and BENEFITID not in
                                (
                                    select BENEFITID
                                    from dbo.REVENUEBENEFIT RBSUB
                                    where RBSUB.REVENUEID = @ID
                                )

                        end

                        declare @TOTALBENEFITSXML xml;
                        set @TOTALBENEFITSXML = dbo.UFN_REVENUEDETAIL_JOINBENEFITS(@BENEFITS, @PERCENTAGEBENEFITS);

                        --Remove benefits if they are waived

                        if @BENEFITSWAIVED = 1
                            set @TOTALBENEFITSXML = null;

                        --Update the organization total value, transaction total value, and exchange rates in the @TOTALBENEFITS XML.

                        set @TOTALBENEFITSXML = dbo.UFN_REVENUEBENEFIT_CONVERTAMOUNTSINXML_2(@TOTALBENEFITSXML,@REVENUETRANSACTIONCURRENCYID,@REVENUEBASECURRENCYID);
                        exec dbo.USP_REVENUE_GETBENEFITS_4_UPDATEFROMXML @ID, @TOTALBENEFITSXML, @CHANGEAGENTID, @CHANGEDATE;

                        declare @TOTALBENEFITS money;
                        declare @ORIGINALRECEIPTAMOUNT money;
                        declare @RECEIPTAMOUNT money;
                        declare @ISPLEDGEPAYMENT bit;
                        select 
                            @TOTALBENEFITS = sum(FINANCIALTRANSACTIONLINEITEM.TRANSACTIONAMOUNT)
                        from dbo.FINANCIALTRANSACTIONLINEITEM
                        inner join dbo.REVENUEBENEFIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUEBENEFIT_EXT.ID
                        where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID and REVENUEBENEFIT_EXT.BENEFITTYPECODE = 1;

                        if @BENEFITSWAIVED = 1
                            set @TOTALBENEFITS = 0;

                        -- Calculate the needed adjustment for event applications to receipt amount.

                        declare @EVENTAPPLICATIONADJUSTMENTS table
                        (
                          EVENTAPPLICAITONAMOUNT money,
                          EVENTAPPLICAITONRECEIPTAMOUNT money
                        )            
                        insert into @EVENTAPPLICATIONADJUSTMENTS (
                            EVENTAPPLICAITONAMOUNT,
                            EVENTAPPLICAITONRECEIPTAMOUNT
                        )
                        select  
                            FINANCIALTRANSACTIONLINEITEM.BASEAMOUNT,
                            dbo.UFN_EVENTREGISTRANT_GETRECEIPTAMOUNT_NOBENEFITS(
                                REGISTRANT.ID,
                                FINANCIALTRANSACTION.DATE,
                                FINANCIALTRANSACTIONLINEITEM.BASEAMOUNT,
                                FINANCIALTRANSACTION.TRANSACTIONCURRENCYID,
                                isnull(REVENUE_EXT.NONPOSTABLEBASECURRENCYID, CURRENCYSET.BASECURRENCYID),
                                FINANCIALTRANSACTION.BASEEXCHANGERATEID,
                                0,
                                0,
                                FINANCIALTRANSACTION.ID
                            )
                        from dbo.FINANCIALTRANSACTION
                            inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
                            inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
                            inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
                            inner join dbo.PDACCOUNTSYSTEM on FINANCIALTRANSACTION.PDACCOUNTSYSTEMID = PDACCOUNTSYSTEM.ID
                            inner join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID
                            inner join dbo.EVENTREGISTRANTPAYMENT on EVENTREGISTRANTPAYMENT.PAYMENTID = FINANCIALTRANSACTIONLINEITEM.ID
                            inner join dbo.REGISTRANT on REGISTRANT.ID = EVENTREGISTRANTPAYMENT.REGISTRANTID
                            inner join dbo.REGISTRANTREGISTRATION on REGISTRANTREGISTRATION.REGISTRANTID = REGISTRANT.ID
                        where
                            REVENUESPLIT_EXT.TYPECODE = 1 and 
                            REVENUESPLIT_EXT.APPLICATIONCODE = 1 and 
                            FINANCIALTRANSACTION.ID = @ID and
                            FINANCIALTRANSACTION.DELETEDON is null and
                            FINANCIALTRANSACTIONLINEITEM.DELETEDON is null and
                            FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1 and
                            -- Don't include registrations whose fees were waived

                            REGISTRANTREGISTRATION.AMOUNT > 0 and
                            (
                                select sum(AMOUNT) 
                                from dbo.REGISTRANTREGISTRATION 
                                where REGISTRANTREGISTRATION.REGISTRANTID = EVENTREGISTRANTPAYMENT.REGISTRANTID
                            ) > 0;


                        declare @EVENTAPPLICATIONADJUSTMENT money
                        select 
                            @EVENTAPPLICATIONADJUSTMENT = 
                                sum(EVENTAPPLICAITONAMOUNT) - sum(EVENTAPPLICAITONRECEIPTAMOUNT)
                        from @EVENTAPPLICATIONADJUSTMENTS

                        if exists
                        (
                        select top 1 FINANCIALTRANSACTION.ID
                        from dbo.FINANCIALTRANSACTION
                            inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
                            inner join dbo.INSTALLMENTPAYMENT on FINANCIALTRANSACTIONLINEITEM.ID = INSTALLMENTPAYMENT.PAYMENTID
                        where FINANCIALTRANSACTION.ID = @ID
                        )
                        begin
                            set @ISPLEDGEPAYMENT = 1
                        end
                        else
                        begin
                            set @ISPLEDGEPAYMENT = 0
                        end

                        select  @ORIGINALRECEIPTAMOUNT = REVENUE_EXT.RECEIPTAMOUNT,
                                @RECEIPTAMOUNT = case @ISPLEDGEPAYMENT
                                    when 0 then FINANCIALTRANSACTION.TRANSACTIONAMOUNT - coalesce(@EVENTAPPLICATIONADJUSTMENT, 0) - coalesce(@TOTALBENEFITS, 0)
                                    when 1 then REVENUE_EXT.RECEIPTAMOUNT - coalesce(@EVENTAPPLICATIONADJUSTMENT, 0) - (coalesce(@TOTALBENEFITS, 0) - @ORIGINALTOTALBENEFITVALUE)
                                end
                        from dbo.FINANCIALTRANSACTION
                        inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
                        where FINANCIALTRANSACTION.ID = @ID
                            and FINANCIALTRANSACTION.DELETEDON is null;

                        if @RECEIPTAMOUNT < 0 set @RECEIPTAMOUNT = 0;

                        if @RECEIPTAMOUNT <> @ORIGINALRECEIPTAMOUNT
                            exec dbo.USP_REVENUE_UPDATERERECEIPTS @ID, @CHANGEAGENTID, @CHANGEDATE;                                                                      

                        update dbo.REVENUE_EXT
                            set 
                                BENEFITSWAIVED = @BENEFITSWAIVED,
                                RECEIPTAMOUNT = case when @REVENUETRANSACTIONCODE in (0,7) then @RECEIPTAMOUNT else @ORIGINALRECEIPTAMOUNT end,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CHANGEDATE
                            where ID = @ID;

                        --update gl distributions

                        if @REVENUETRANSACTIONCODE = 0 or @REVENUETRANSACTIONCODE = 1 or @REVENUETRANSACTIONCODE = 5
                        begin
                          delete from dbo.BENEFITGLDISTRIBUTION where REVENUEID = @ID and OUTDATED = 0;
                          if @POSTSTATUSCODE <> 2
                          begin
                              exec dbo.USP_SAVE_BENEFITGLDISTRIBUTION_FINANCIALTRANSACTION @ID, @CHANGEAGENTID, @CHANGEDATE              
                          end
                        end

                        -- update installment receipt amounts

                        declare @REMAININGPLEDGEBALANCE money = dbo.UFN_PLEDGE_GETBALANCE(@ID) - @TOTALBENEFITS
                        declare @INSTALLMENTID uniqueidentifier
                        declare @INSTALLMENTAMOUNT money

                        declare cur cursor fast_forward
                        for
                            select INSTALLMENT.ID
                            from dbo.INSTALLMENT
                                inner join dbo.INSTALLMENTSPLIT on INSTALLMENTSPLIT.INSTALLMENTID = INSTALLMENT.ID
                                left join dbo.INSTALLMENTSPLITPAYMENT on INSTALLMENTSPLITPAYMENT.INSTALLMENTSPLITID = INSTALLMENTSPLIT.ID
                            where REVENUEID = @ID and INSTALLMENTSPLITPAYMENT.ID is null
                            order by SEQUENCE desc

                        open cur
                        fetch next from cur into @INSTALLMENTID
                        while @@FETCH_STATUS = 0
                        begin
                            select @INSTALLMENTAMOUNT = AMOUNT
                            from dbo.INSTALLMENT
                            where ID = @INSTALLMENTID

                            if @REMAININGPLEDGEBALANCE < @INSTALLMENTAMOUNT
                            begin
                                update dbo.INSTALLMENT
                                set RECEIPTAMOUNT = @REMAININGPLEDGEBALANCE
                                where ID = @INSTALLMENTID
                            end

                            set @REMAININGPLEDGEBALANCE = @REMAININGPLEDGEBALANCE - @INSTALLMENTAMOUNT
                            if @REMAININGPLEDGEBALANCE < 0
                                set @REMAININGPLEDGEBALANCE = 0

                            fetch next from cur into @INSTALLMENTID
                        end
                        close cur
                        deallocate cur

                        -- Redefault pledge receipt amounts

                        exec dbo.USP_INSTALLMENTS_DEFAULTRECEIPTAMOUNTS @ID, @CHANGEAGENTID

                    if @ADJUSTMATCHINGGIFTCLAIMS = 2
                    begin
                        exec dbo.USP_MATCHINGGIFTCLAIM_AMOUNT_UPDATE @ID, @TOTALBENEFITS, @ORIGINALTOTALBENEFITVALUE, @ADJUSTMATCHINGGIFTCLAIMS, @CHANGEAGENTID, @CHANGEDATE
                    end
                        if @UPDATEGIFTFEEOPTION = 1 and exists (select 1 from dbo.GIFTFEEOVERRIDEREASONCODE where ISPAYMENTEDITDEFAULT=1 and ACTIVE=1)
                        begin
                            exec dbo.USP_REVENUE_UPDATEPAYMENTGIFTFEE @ID, @CONSTITUENTID, @CHANGEAGENTID

                            delete JOURNALENTRY
                            from dbo.JOURNALENTRY 
                            inner join dbo.JOURNALENTRY_EXT on JOURNALENTRY.ID = JOURNALENTRY_EXT.ID
                            inner join dbo.FINANCIALTRANSACTIONLINEITEM on JOURNALENTRY.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID
                            where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
                                and JOURNALENTRY_EXT.OUTDATED = 0
                                and JOURNALENTRY_EXT.TABLENAMECODE = 8
                                and FINANCIALTRANSACTIONLINEITEM.POSTSTATUSCODE != 2
                                and FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1;

                            if @POSTSTATUSCODE = 0
                            begin
                                declare @ADJUSTMENTDATE datetime = @CHANGEDATE;
                                declare @ADJUSTMENTPOSTDATE datetime = @POSTDATE;
                                declare @ADJUSTMENTPOSTSTATUSCODE tinyint = 1;
                                declare @ADJUSTMENTREASONCODEID uniqueidentifier = null;
                                declare @ADJUSTMENTREASON nvarchar(300) = '';

                                select @ADJUSTMENTDATE = GIFTFEEADJUSTMENT.DATE
                                    ,@ADJUSTMENTPOSTDATE = GIFTFEEADJUSTMENT.POSTDATE
                                    ,@ADJUSTMENTPOSTSTATUSCODE = GIFTFEEADJUSTMENT.POSTSTATUSCODE
                                    ,@ADJUSTMENTREASONCODEID = GIFTFEEADJUSTMENT.REASONCODEID
                                    ,@ADJUSTMENTREASON = GIFTFEEADJUSTMENT.REASON
                                from dbo.GIFTFEEADJUSTMENT
                                where GIFTFEEADJUSTMENT.REVENUEID = @ID and POSTSTATUSCODE <> 0;

                                exec dbo.USP_SAVE_GIFTFEEADJUSTMENT 
                                    @ID
                                    null
                                    @CHANGEAGENTID
                                    @CHANGEDATE
                                    @ADJUSTMENTDATE
                                    @ADJUSTMENTPOSTDATE
                                    @ADJUSTMENTREASON
                                    default
                                    @ADJUSTMENTREASONCODEID
                                    @ADJUSTMENTPOSTSTATUSCODE;
                            end

                            if @POSTSTATUSCODE <> 2
                            begin
                                exec dbo.USP_SAVE_GIFTFEEGLDISTRIBUTION @ID, @CHANGEAGENTID, @CHANGEDATE;
                            end
                        end
                    end try
                    begin catch
                        exec dbo.USP_RAISE_ERROR;
                        return 1;
                    end catch

                    return 0;
                end