USP_REVENUESPLITGIFTAID_UPDATEGLDISTRIBUTIONS_FORREVENUE

Updates GL distributions for a revenue record.

Parameters

Parameter Parameter Type Mode Description
@REVENUEID uniqueidentifier IN
@OLDGIFTAID xml IN
@ORIGINALDONOTPOST bit IN
@NEWDONOTPOST bit IN
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN

Definition

Copy


            CREATE procedure dbo.USP_REVENUESPLITGIFTAID_UPDATEGLDISTRIBUTIONS_FORREVENUE
            (
                @REVENUEID uniqueidentifier,
                @OLDGIFTAID xml,
                @ORIGINALDONOTPOST bit,
                @NEWDONOTPOST bit,
                @CHANGEAGENTID uniqueidentifier = null,
                @CHANGEDATE datetime = null
            )
            with execute as owner
            as
            begin
                set nocount on;

                if @CHANGEDATE is null
                    set @CHANGEDATE = getdate();

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

                declare @REVENUESPLITGIFTAIDID uniqueidentifier;
                declare @OLDDESIGNATIONID uniqueidentifier;
                declare @OLDGLREVENUECATEGORYMAPPINGID uniqueidentifier;
                declare @OLDSTATUS nvarchar(30);
                declare @NEWDESIGNATIONID uniqueidentifier;
                declare @NEWGLREVENUECATEGORYMAPPINGID uniqueidentifier;
                declare @NEWSTATUS nvarchar(30);
                declare @GENERATEDISTRIBUTIONSFROMPOSTSTATUSCHANGE bit;
                declare @TAXCLAIMNUMBER nvarchar(10);

                declare GL_CURSOR cursor local fast_forward for
                    select 
                        T.c.value('(ID)[1]','uniqueidentifier') as ID, 
                        T.c.value('(DESIGNATIONID)[1]','uniqueidentifier') as DESIGNATIONID, 
                        T.c.value('(GLREVENUECATEGORYMAPPINGID)[1]','uniqueidentifier') as GLREVENUECATEGORYMAPPINGID, 
                        T.c.value('(STATUS)[1]','nvarchar(30)') as STATUS
                    from @OLDGIFTAID.nodes('/GIFTAIDQUALIFICATIONSTATUS/ITEM') T(c)

                open GL_CURSOR;

                fetch next from GL_CURSOR into @REVENUESPLITGIFTAIDID, @OLDDESIGNATIONID, @OLDGLREVENUECATEGORYMAPPINGID, @OLDSTATUS;

                while (@@FETCH_STATUS = 0)
                begin
                    set @GENERATEDISTRIBUTIONSFROMPOSTSTATUSCHANGE = 0;
                    set @TAXCLAIMNUMBER = '';

                    select 
                        @NEWDESIGNATIONID = REVENUESPLIT_EXT.DESIGNATIONID,
                        @NEWGLREVENUECATEGORYMAPPINGID = coalesce(REVENUECATEGORY.GLREVENUECATEGORYMAPPINGID, '00000000-0000-0000-0000-000000000000'),
                        @NEWSTATUS = dbo.UFN_GIFTAIDREVENUESPLIT_GETQUALIFICATIONSTATUS(FINANCIALTRANSACTIONLINEITEM.ID)
                    from
                        dbo.FINANCIALTRANSACTIONLINEITEM
                        inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
                        left join dbo.REVENUECATEGORY on FINANCIALTRANSACTIONLINEITEM.ID = REVENUECATEGORY.ID
                    where
                        FINANCIALTRANSACTIONLINEITEM.ID = @REVENUESPLITGIFTAIDID
                        and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
                        and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1;

                    --Cache CONTEXT INFO

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

                    if not @CHANGEAGENTID is null
                        set CONTEXT_INFO @CHANGEAGENTID;

                    -- delete any distributions for gift aid tied to splits that were removed and are unposted

                    delete from dbo.GIFTAIDGLDISTRIBUTION where ID in (
                        select GIFTAIDGLDISTRIBUTION.ID
                        from dbo.GIFTAIDGLDISTRIBUTION
                        inner join dbo.GLTRANSACTION on GIFTAIDGLDISTRIBUTION.GLTRANSACTIONID = GLTRANSACTION.ID
                        where GIFTAIDGLDISTRIBUTION.REVENUEID = @REVENUEID 
                        and GIFTAIDGLDISTRIBUTION.REVENUESPLITGIFTAIDID is null
                        and GLTRANSACTION.POSTSTATUSCODE <> 0
                    );

                    --Restore CONTEXT INFO 

                    if not @contextCache is null
                        set CONTEXT_INFO @contextCache

                        set @TAXCLAIMNUMBER = (select TAXCLAIMNUMBER from dbo.REVENUESPLITGIFTAID where ID = @REVENUESPLITGIFTAIDID);

                    -- If the post status has changed and either:

                    -- 1) the new post status is Do not post, or

                    -- 2) the new post status is Not posted and the revenue split has gift aid claimed, 

                    -- then update the GL distributions

                    if (@ORIGINALDONOTPOST <> @NEWDONOTPOST) and
                        (
                            (@NEWDONOTPOST = 1) or 
                            (@NEWDONOTPOST = 0 and @TAXCLAIMNUMBER <> '')
                        )
                        set @GENERATEDISTRIBUTIONSFROMPOSTSTATUSCHANGE = 1;

                    if (@NEWSTATUS = @OLDSTATUS) and @TAXCLAIMNUMBER <> '' and ((@NEWDESIGNATIONID <> @OLDDESIGNATIONID) or (@NEWGLREVENUECATEGORYMAPPINGID <> @OLDGLREVENUECATEGORYMAPPINGID) or (@GENERATEDISTRIBUTIONSFROMPOSTSTATUSCHANGE = 1))
                        exec dbo.USP_REVENUESPLITGIFTAID_UPDATEGLDISTRIBUTIONS @REVENUESPLITGIFTAIDID, @CHANGEAGENTID, @CHANGEDATE, @NEWDONOTPOST;

                    fetch next from GL_CURSOR into @REVENUESPLITGIFTAIDID, @OLDDESIGNATIONID, @OLDGLREVENUECATEGORYMAPPINGID, @OLDSTATUS;
                end

                close GL_CURSOR; 
                deallocate GL_CURSOR;

            end