USP_DATAFORMTEMPLATE_EDIT_REVENUE_SPLIT_2

The save procedure used by the edit dataform template "Revenue Split Edit 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.
@REVENUEAMOUNT money IN Total amount
@SPLITS xml IN
@CONSTITUENTISINDIVIDUAL bit IN Constituent is individual

Definition

Copy


                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_REVENUE_SPLIT_2
                    (
                        @ID uniqueidentifier,
                        @CHANGEAGENTID uniqueidentifier = null,
                        @REVENUEAMOUNT money,
                        @SPLITS xml,
                        @CONSTITUENTISINDIVIDUAL bit
                    )
                    as 
                        set nocount on;

                        declare @TRANSACTIONTYPECODE tinyint;
                        declare @CHANGEDATE datetime;
                        set @CHANGEDATE = getdate();

                        --Set currency parameters for backwards compatibility

                        declare @ORGANIZATIONCURRENCYID uniqueidentifier;
                        set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

                        select @TRANSACTIONTYPECODE = REVENUE.TYPECODE from dbo.FINANCIALTRANSACTION REVENUE where REVENUE.ID = @ID and REVENUE.DELETEDON is null;

                        if @TRANSACTIONTYPECODE = 1
                            raiserror('NOTVALIDFORPLEDGE',13,1)

                        if @TRANSACTIONTYPECODE = 3
                            raiserror('NOTVALIDFORMGPLEDGE',13,1)

                        declare @SPLITSCHANGED bit
                        --verify if splits have changed. Ignore any null designation splits from membership transactions, for consistency with the load split logic.

                        set @SPLITSCHANGED = dbo.UFN_CHECKDETAIL_SPLITSCHANGED_EXCLUDEMEMBERSHIP(@ID, @SPLITS)

                        -- track changes for RG in the RG amendment table

                        if @TRANSACTIONTYPECODE = 2 and @SPLITSCHANGED = 1
                        begin
                           declare @OLDSPLITS xml;
                           declare @DESIGNATIONS xml;

                           --load the OLDSPLITS excluding empty designations in order to keep them consistent with the load

                           set @OLDSPLITS = (select * from dbo.UFN_REVENUE_GETSPLITS_2(@ID) SPLIT
                                                      where SPLIT.DESIGNATIONID is not null
                                             for xml raw('ITEM'),type,elements,root('SPLITS'),BINARY BASE64);

                           --process the designations

                           exec dbo.USP_REVENUE_GETSPLITS_MERGEDESIGNATIONSTOXML @SPLITS, @OLDSPLITS, @DESIGNATIONS output;

                           insert into dbo.RECURRINGGIFTAMENDMENT(ID,FINANCIALTRANSACTIONID,AMENDMENTTYPECODE,DATE,DESIGNATIONS,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
                           values (newid(),@ID,2,@CHANGEDATE,@DESIGNATIONS,@CHANGEAGENTID,@CHANGEAGENTID,@CHANGEDATE,@CHANGEDATE)
                        end

                        -- if the designations have changed, clear any user-defined gl distributions for this revenue record


                            -- check to see if designations have changed

                            if @SPLITSCHANGED = 1
                            -- clear the user-defined gl distributions

                            begin
                                --Cache CONTEXT INFO

                                declare @contextCache varbinary(128);
                                set @contextCache = CONTEXT_INFO();

                                if not @CHANGEAGENTID is null
                                    set CONTEXT_INFO @CHANGEAGENTID;

                                    --delete from REVENUEGLDISTRIBUTION

                                    delete JE from  dbo.JOURNALENTRY JE
                                    inner join  dbo.FINANCIALTRANSACTIONLINEITEM FTLI on JE.FINANCIALTRANSACTIONLINEITEMID = FTLI.ID  
                                    inner join  dbo.JOURNALENTRY_EXT JEX on JE.ID = JEX.ID
                                    and JEX.TABLENAMECODE = 1 and FTLI.FINANCIALTRANSACTIONID = @ID;

                                if @TRANSACTIONTYPECODE = 1
                                    --delete from WRITEOFFGLDISTRIBUTION

                                    delete JE from  dbo.JOURNALENTRY JE
                                    inner join  dbo.FINANCIALTRANSACTIONLINEITEM FTLI on JE.FINANCIALTRANSACTIONLINEITEMID = FTLI.ID  
                                    inner join  dbo.JOURNALENTRY_EXT JEX on JE.ID = JEX.ID
                                    and JEX.TABLENAMECODE = 12 and JEX.WRITEOFFID in (select WO.ID from dbo.WRITEOFF WO where WO.REVENUEID = @ID);
                                else
                                begin    
                                    --delete from STOCKSALEGLDISTRIBUTION

                                    delete JE from dbo.JOURNALENTRY JE  
                                    inner join  dbo.FINANCIALTRANSACTIONLINEITEM FTLI on JE.FINANCIALTRANSACTIONLINEITEMID = FTLI.ID
                                    inner join  dbo.JOURNALENTRY_EXT JEX on JE.ID = JEX.ID  
                                    and JEX.TABLENAMECODE = 11 and JEX.LOGICALREVENUEID = @ID;

                                    --delete from PROPERTYDETAILGLDISTRIBUTION

                                    delete JE from  dbo.JOURNALENTRY JE
                                    inner join  dbo.FINANCIALTRANSACTIONLINEITEM FTLI on JE.FINANCIALTRANSACTIONLINEITEMID = FTLI.ID
                                    inner join  dbo.JOURNALENTRY_EXT JEX on JE.ID = JEX.ID
                                    inner join  dbo.FINANCIALTRANSACTION FT on FT.ID = FTLI.FINANCIALTRANSACTIONID
                                    where JEX.TABLENAMECODE = 10 
                                    and (JEX.PROPERTYDETAILID = @ID or (JEX.PROPERTYDETAILID is null and FT.ID = @ID))
                                end

                                --Restore CONTEXT_INFO

                                if not @contextCache is null
                                    set CONTEXT_INFO @contextCache;
                            end

                        -- check to see if the revenue record needs to be re-acknowledged                            

                        if (coalesce((select top 1 REACKNOWLEDGEREVENUE from dbo.ACKNOWLEDGEMENTPREFERENCE), 0)) = 1
                        begin

                            -- if designations have changed, mark the revenue letters for this record out of date, if necessary

                            if dbo.UFN_CHECKDETAIL_SPLITSCHANGED(@ID, @SPLITS) = 1
                                exec dbo.USP_REVENUELETTER_SETREACKNOWLEDGEMENTS @ID, @CHANGEAGENTID;                     

                        end

                        declare @ISSPONSORSHIPRECURRINGADDITIONALGIFT bit = 0;
                        set @ISSPONSORSHIPRECURRINGADDITIONALGIFT =  dbo.UFN_RECURRINGGIFT_ISSPONSORSHIPRECURRINGADDITIONALGIFT(@ID); 

                        -- Set the IDs for any blank entries in the splits XML so that it can associate the declines with gift aid

                        -- flag with the generated splits.  Also, pull in the existing value for declines gift aid if it wasn't passed

                        -- in the xml.

                        set @SPLITS = (    select 
                                            case when SPLITS.[ID] is null or SPLITS.[ID] = '00000000-0000-0000-0000-000000000000' then newid() else SPLITS.[ID] end [ID],
                             SPLITS.[AMOUNT],
                                            SPLITS.[APPLICATIONCODE],
                                            SPLITS.[DESIGNATIONID],
                                            case @ISSPONSORSHIPRECURRINGADDITIONALGIFT 
                                                when 0 then SPLITS.[TYPECODE]
                                            else 17
                                            end as TYPECODE,
                                            case when SPLITS.[DECLINESGIFTAID] is null then REVENUESPLITGIFTAID.DECLINESGIFTAID else SPLITS.DECLINESGIFTAID end DECLINESGIFTAID,

                                            --Set currency parameters for backwards compatibility

                                            case
                                                when SPLITS.[TRANSACTIONCURRENCYID] is null then
                                                    @ORGANIZATIONCURRENCYID
                                                else
                                                    SPLITS.[TRANSACTIONCURRENCYID]
                                            end [TRANSACTIONCURRENCYID]
                                        from dbo.UFN_REVENUE_GETSPLITS_2_FROMITEMLISTXML(@SPLITS) SPLITS
                                        left join dbo.REVENUESPLITGIFTAID on SPLITS.ID = REVENUESPLITGIFTAID.ID
                                        for xml raw('ITEM'),type,elements,root('SPLITS'),BINARY BASE64);

                        declare @SPLITSAMOUNTMODIFIED table
                        (
                            ID uniqueidentifier
                        );

                        declare @REVENUECATEGORYCOUNT int = 0;
                        declare @REVENUECATEGORYID uniqueidentifier = null

                        -- @SPLITSAMOUNTMODIFIED is used to see which splits need to have their recognition credits reset.  That only occurs

                        -- for pledges and recurring gifts.

                        -- JamesWill WI176241 Also check to see if the revenue category should be copied around 

                        if @TRANSACTIONTYPECODE in (1, 2)
                        begin
                            insert into @SPLITSAMOUNTMODIFIED (ID)
                            select
                                SPLITS.ID
                            from dbo.UFN_REVENUE_GETSPLITS_2_FROMITEMLISTXML(@SPLITS) SPLITS
                            where
                                not exists (select 1 from dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT where REVENUESPLIT.ID = SPLITS.ID and REVENUESPLIT.DELETEDON is null and REVENUESPLIT.TYPECODE <> 1) or
                                SPLITS.AMOUNT <> (select REVENUESPLIT.BASEAMOUNT from dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT where REVENUESPLIT.ID = SPLITS.ID and REVENUESPLIT.DELETEDON is null and REVENUESPLIT.TYPECODE <> 1);

                            select top 1 @REVENUECATEGORYID = REVENUECATEGORY.GLREVENUECATEGORYMAPPINGID
                            from dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT
                            inner loop join dbo.REVENUECATEGORY on REVENUECATEGORY.ID = REVENUESPLIT.ID
                            where REVENUESPLIT.FINANCIALTRANSACTIONID = @ID
                                and REVENUESPLIT.DELETEDON is null
                                and REVENUESPLIT.TYPECODE <> 1;

                            select @REVENUECATEGORYCOUNT = count(distinct REVENUECATEGORY.GLREVENUECATEGORYMAPPINGID)
                            from dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT
                            inner loop join dbo.REVENUECATEGORY on REVENUECATEGORY.ID = REVENUESPLIT.ID
                            where REVENUESPLIT.FINANCIALTRANSACTIONID = @ID
                                and REVENUESPLIT.DELETEDON is null
                                and REVENUESPLIT.TYPECODE <> 1

                            --Only set the revenue category on the splits if we can correctly infer what that should be 

                            --(i.e., all the existing splits have the same category). So there should only be 1 distinct category

                            --(If there are 0, that means that there shouldn't be a revenue category but also that there aren't currently any. 

                            --so we shouldn't need to delete anything).

                            if @REVENUECATEGORYCOUNT <> 1 
                                set @REVENUECATEGORYID = null;
                        end
                        exec dbo.USP_REVENUE_SPLIT_EDIT_SAVE_2 @ID, @CHANGEAGENTID, @CHANGEDATE, @REVENUEAMOUNT, @SPLITS;

                        -- On Pledges and Recurring Gifts, reset recognition credits for splits whose amounts changed

                        if @TRANSACTIONTYPECODE in (1, 2)
                        begin
                            -- Reset recognition credits for splits whose amount changed

                            declare @SPLITID uniqueidentifier
                            declare SPLITSCURSOR cursor local fast_forward for
                                select ID from @SPLITSAMOUNTMODIFIED;

                            open SPLITSCURSOR;
                            fetch next from SPLITSCURSOR into @SPLITID;

                            while (@@FETCH_STATUS = 0)
                            begin
                                --Cache CONTEXT INFO and remove old recognition credits

                                declare @contextCacheRecognitionCreditClear varbinary(128);
                                set @contextCacheRecognitionCreditClear = CONTEXT_INFO();
                                set CONTEXT_INFO @CHANGEAGENTID;

                                delete from dbo.REVENUERECOGNITION
                                where REVENUESPLITID = @SPLITID;

                                if not @contextCacheRecognitionCreditClear is null
                                    set CONTEXT_INFO @contextCacheRecognitionCreditClear;

                                exec dbo.[USP_REVENUEDETAIL_CREATERECOGNITIONS] @SPLITID, @CHANGEAGENTID, @CHANGEDATE;
                                fetch next from SPLITSCURSOR into @SPLITID;
                            end

                            close SPLITSCURSOR;
                            deallocate SPLITSCURSOR;                            

                            --JamesWill WI176241 Check to see if the revenue category should be copied to newly created splits 

                            if not @REVENUECATEGORYID is null
                            begin
                                insert into dbo.REVENUECATEGORY(ID, GLREVENUECATEGORYMAPPINGID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                                select 
                                    REVENUESPLIT.ID,
                                    @REVENUECATEGORYID,
                                    @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE 
                                from dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT 
                                left join dbo.REVENUECATEGORY [CATEGORY] on [CATEGORY].ID = REVENUESPLIT.ID
                                where [CATEGORY].ID is null and REVENUESPLIT.FINANCIALTRANSACTIONID = @ID
                                    and REVENUESPLIT.DELETEDON is null and REVENUESPLIT.TYPECODE <> 1
                            end
                        end

                        if @TRANSACTIONTYPECODE = 1 
                            exec dbo.USP_PLEDGE_FIXDEPENDENTSPLITS @ID, @CHANGEAGENTID, @CHANGEDATE;

                        if @SPLITSCHANGED = 1
                        begin
                            exec dbo.USP_REVENUE_CLEARANDADDCAMPAIGNS @REVENUEID = @ID
                                @CHANGEAGENTID = @CHANGEAGENTID,
                                @CHANGEDATE = @CHANGEDATE
                        end

                        --Gift Aid is for UK only

                        if dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('9568A6C2-F7AA-45fd-8F54-21FE9654EE2D') = 1
                        begin
                            declare @DATE datetime, @APPEALID uniqueidentifier, @PAYMENTMETHODCODE tinyint;
                            declare @CREDITTYPECODEID uniqueidentifier;
                            select
                                @DATE = cast(REVENUE.DATE as datetime),
                                @APPEALID = REVENUE_EXT.APPEALID,
                                @PAYMENTMETHODCODE = REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE
                            from dbo.FINANCIALTRANSACTION REVENUE
                            inner join dbo.REVENUE_EXT on REVENUE.ID = REVENUE_EXT.ID
                            inner join dbo.REVENUEPAYMENTMETHOD on REVENUE.ID = REVENUEPAYMENTMETHOD.REVENUEID
                            where REVENUE.ID = @ID and REVENUE.DELETEDON is null;

                            if @PAYMENTMETHODCODE = 2
                                select @CREDITTYPECODEID = CREDITCARD.CREDITTYPECODEID 
                                from dbo.REVENUE
                                inner join dbo.REVENUEPAYMENTMETHOD on REVENUE.ID = REVENUEPAYMENTMETHOD.REVENUEID
                                left join dbo.REVENUESCHEDULE on REVENUE.ID = REVENUESCHEDULE.ID
                                left join dbo.CREDITCARD on CREDITCARD.ID = REVENUESCHEDULE.CREDITCARDID
                                where REVENUE.ID = @ID;

                            declare @SPLITSDECLININGGIFTAID xml
                            set @SPLITSDECLININGGIFTAID = (    select
                                                                ID as REVENUESPLITID
                                                            from dbo.UFN_REVENUE_GETSPLITS_FROMITEMLISTXML(@SPLITS)
                                                            where DECLINESGIFTAID = 1
                                                            for xml raw('ITEM'),type,elements,root('SPLITSDECLININGGIFTAID'),BINARY BASE64)

                            exec dbo.USP_GIFTAIDREVENUESPLIT_ADDUPDATESPLITS @ID, @APPEALID, @PAYMENTMETHODCODE, @CREDITTYPECODEID, @CHANGEAGENTID, @DATE, @TRANSACTIONTYPECODE, @SPLITSDECLININGGIFTAID
                        end

                        return 0;