USP_GIFTAIDREVENUESPLIT_ADDUPDATESPLITS

Adds or updates Gift Aid Revenue Split records.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@APPEALID uniqueidentifier IN
@PAYMENTMETHODCODE tinyint IN
@CREDITTYPECODEID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@DATE datetime IN
@TRANSACTIONTYPECODE tinyint IN
@SPLITSDECLININGGIFTAID xml IN
@COVENANTGIFTSPLITS xml IN
@GIFTAIDSPONSORSHIPSPLITS xml IN
@SPLITSTOTRANSFERGIFTAID xml IN

Definition

Copy


CREATE procedure USP_GIFTAIDREVENUESPLIT_ADDUPDATESPLITS
(
    @ID uniqueidentifier,
    @APPEALID uniqueidentifier,
    @PAYMENTMETHODCODE tinyint,
    @CREDITTYPECODEID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier,
    @DATE datetime,
    @TRANSACTIONTYPECODE tinyint,
    @SPLITSDECLININGGIFTAID xml = null,
    @COVENANTGIFTSPLITS xml = null,
    @GIFTAIDSPONSORSHIPSPLITS xml = null,
    @SPLITSTOTRANSFERGIFTAID xml = null
)
as
begin
    set nocount on;

    -- Only create the records if this is a UK product

    if dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('9568A6C2-F7AA-45fd-8F54-21FE9654EE2D') = 1
    begin
        declare @TAXCLAIMAMOUNT numeric(30,6);
        declare @DISQUALIFIEDBYATTRIBUTES bit = 1; --This is necessary for when we add a new split record, as there should not be any attributes to disqualify it


        set @TAXCLAIMAMOUNT = 0;

        declare @SPLITID uniqueidentifier;
        declare @REVENUEID uniqueidentifier;
        declare @DESIGNATIONID uniqueidentifier;
        declare @AMOUNT money;
        declare @TRANSACTIONAMOUNT money;
        declare @TYPECODE tinyint;
        declare @APPLICATIONCODE tinyint;
        declare @BASECURRENCYID uniqueidentifier;
        declare @TRANSACTIONCURRENCYID uniqueidentifier;
        declare @BASEEXCHANGERATEID uniqueidentifier;
        declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;

        declare @CONSTITUENTID uniqueidentifier;
        select @CONSTITUENTID = CONSTITUENTID from dbo.REVENUE where ID = @ID;

        declare @SPLITSDECLININGGIFTAIDTBL table(
            REVENUESPLITID uniqueidentifier
        )

        if @SPLITSDECLININGGIFTAID is not null
            insert into @SPLITSDECLININGGIFTAIDTBL (REVENUESPLITID)
            select T.c.value('(REVENUESPLITID)[1]','uniqueidentifier')
            from @SPLITSDECLININGGIFTAID.nodes('/SPLITSDECLININGGIFTAID/ITEM') T(c)

        declare @COVENANTGIFTSPLITSTBL table(
            REVENUESPLITID uniqueidentifier
        )

        if @COVENANTGIFTSPLITS is not null
            insert into @COVENANTGIFTSPLITSTBL (REVENUESPLITID)
            select T.c.value('(REVENUESPLITID)[1]','uniqueidentifier')
            from @COVENANTGIFTSPLITS.nodes('/COVENANTGIFTSPLITS/ITEM') T(c)

        declare @GIFTAIDSPONSORSHIPSPLITSTBL table(
            REVENUESPLITID uniqueidentifier
        )

        if @GIFTAIDSPONSORSHIPSPLITS is not null
            insert into @GIFTAIDSPONSORSHIPSPLITSTBL (REVENUESPLITID)
            select T.c.value('(REVENUESPLITID)[1]','uniqueidentifier')
            from @GIFTAIDSPONSORSHIPSPLITS.nodes('/GIFTAIDSPONSORSHIPSPLITS/ITEM') T(c)


             declare @SPLITSTOTRANSFERGIFTAIDTBL table ( REVENUESPLITID uniqueidentifier,
                                                                                                     TAXCLAIMNUMBER nvarchar(10),
                                                                                                     CHARITYCLAIMREFERENCENUMBER nvarchar(20),
                                                                                                     BASERATE numeric(30,6),
                                                                                                     TRANSITIONALRATE numeric(30,6)
                                                                                                    )
        if @SPLITSTOTRANSFERGIFTAID is not null
            insert into @SPLITSTOTRANSFERGIFTAIDTBL (REVENUESPLITID,TAXCLAIMNUMBER,CHARITYCLAIMREFERENCENUMBER,BASERATE,TRANSITIONALRATE)
            select T.c.value('(REVENUESPLITID)[1]','uniqueidentifier'),
                         T.c.value('(TAXCLAIMNUMBER)[1]','nvarchar(10)'),
                         T.c.value('(CHARITYCLAIMREFERENCENUMBER)[1]','nvarchar(20)'),
                         T.c.value('(BASERATE)[1]','numeric(30,6)'),
                         T.c.value('(TRANSITIONALRATE)[1]','numeric(30,6)')
            from @SPLITSTOTRANSFERGIFTAID.nodes('/SPLITSTOTRANSFERGIFTAID/ITEM') T(c);



        declare @TAXCLAIMNUMBER nvarchar(10);
        declare @CHARITYCLAIMREFERENCENUMBER nvarchar(20);
        declare @BASERATE numeric(30,6);
        declare @TRANSITIONALRATE numeric(30,6);

        declare SPLITSCURSOR cursor local fast_forward for 
            select
                FINANCIALTRANSACTIONLINEITEM.ID,
                FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID,
                REVENUESPLIT_EXT.DESIGNATIONID,
                FINANCIALTRANSACTIONLINEITEM.BASEAMOUNT,
                FINANCIALTRANSACTIONLINEITEM.TRANSACTIONAMOUNT,
                REVENUESPLIT_EXT.TYPECODE,
                REVENUESPLIT_EXT.APPLICATIONCODE,
                isnull(REVENUE_EXT.NONPOSTABLEBASECURRENCYID, CURRENCYSET.BASECURRENCYID),
                FINANCIALTRANSACTION.TRANSACTIONCURRENCYID,
                FINANCIALTRANSACTION.BASEEXCHANGERATEID, 
                FINANCIALTRANSACTION.ORGEXCHANGERATEID    
            from dbo.FINANCIALTRANSACTIONLINEITEM
            inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
            inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
            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 FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
            and FINANCIALTRANSACTION.DELETEDON is null
            and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
            and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1

        open SPLITSCURSOR;

        fetch next from SPLITSCURSOR into @SPLITID, @REVENUEID, @DESIGNATIONID, @AMOUNT, @TRANSACTIONAMOUNT, @TYPECODE, @APPLICATIONCODE, @BASECURRENCYID, @TRANSACTIONCURRENCYID, @BASEEXCHANGERATEID, @ORGANIZATIONEXCHANGERATEID

        while @@FETCH_STATUS = 0
        begin

        set @TAXCLAIMNUMBER  = null;
        set @CHARITYCLAIMREFERENCENUMBER = null;
        set @BASERATE = null;
        set @TRANSITIONALRATE = null;

            declare @DECLINESGIFTAID bit;
            if exists (select 1 from @SPLITSDECLININGGIFTAIDTBL where REVENUESPLITID = @SPLITID)
                set @DECLINESGIFTAID = 1;
            else
                set @DECLINESGIFTAID = 0;

            declare @ISCOVENANT bit;
            if exists (select 1 from @COVENANTGIFTSPLITSTBL where REVENUESPLITID = @SPLITID)
                set @ISCOVENANT = 1;
            else
                set @ISCOVENANT = null;

            declare @ISSPONSORSHIP bit;
            if exists (select 1 from @GIFTAIDSPONSORSHIPSPLITSTBL where REVENUESPLITID = @SPLITID)
                set @ISSPONSORSHIP = 1;
            else
                set @ISSPONSORSHIP = 0;

                select @TAXCLAIMNUMBER = SPLITSTOTRANSFERGIFTAIDTBL.TAXCLAIMNUMBER,
                             @CHARITYCLAIMREFERENCENUMBER = SPLITSTOTRANSFERGIFTAIDTBL.CHARITYCLAIMREFERENCENUMBER,
                             @BASERATE = SPLITSTOTRANSFERGIFTAIDTBL.BASERATE,
                             @TRANSITIONALRATE =  SPLITSTOTRANSFERGIFTAIDTBL.TRANSITIONALRATE
                from @SPLITSTOTRANSFERGIFTAIDTBL SPLITSTOTRANSFERGIFTAIDTBL
                where @SPLITID = SPLITSTOTRANSFERGIFTAIDTBL.REVENUESPLITID;

            exec dbo.USP_GIFTAIDREVENUESPLIT_ADDUPDATESPLIT 
                    @REVENUEID = @ID,
                    @TRANSACTIONTYPECODE = @TRANSACTIONTYPECODE,
                    @CONSTITUENTID = @CONSTITUENTID,
                    @DATE = @DATE,
                    @SPLITID = @SPLITID,
                    @DESIGNATIONID = @DESIGNATIONID,
                    @AMOUNT = @AMOUNT,
                    @TRANSACTIONAMOUNT = @TRANSACTIONAMOUNT,
                    @DECLINESGIFTAID = @DECLINESGIFTAID,
                    @APPLICATIONCODE = @APPLICATIONCODE,
                    @TYPECODE = @TYPECODE,
                    @DISQUALIFIEDBYATTRIBUTES = @DISQUALIFIEDBYATTRIBUTES,
                    @CHANGEAGENTID = @CHANGEAGENTID,
                    @ISCOVENANT = @ISCOVENANT,
                    @ISSPONSORSHIP = @ISSPONSORSHIP,
                    @BASECURRENCYID = @BASECURRENCYID,
                    @TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID,
                    @BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
                    @ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID,
                    @TAXCLAIMNUMBER = @TAXCLAIMNUMBER,
                    @CHARITYCLAIMREFERENCENUMBER = @CHARITYCLAIMREFERENCENUMBER,
                    @BASERATE = @BASERATE,
                    @TRANSITIONALRATE = @TRANSITIONALRATE;

            --reset DISQVAR to its initial value

            fetch next from SPLITSCURSOR into @SPLITID, @REVENUEID, @DESIGNATIONID, @AMOUNT, @TRANSACTIONAMOUNT, @TYPECODE, @APPLICATIONCODE, @BASECURRENCYID, @TRANSACTIONCURRENCYID, @BASEEXCHANGERATEID, @ORGANIZATIONEXCHANGERATEID;
        end        -- end while fetch


        close SPLITSCURSOR;
        deallocate SPLITSCURSOR;

    --If this is for a payment record was created from a pledge or recurring gift that has an attribute on it, that attribute will be carried over to the

    --  payment record. Those attributes could potentially be disqualified, so call function to check if they are and update the REVENUESPLITGIFTAID records

    --  as needed.

    exec dbo.USP_REVENUE_DISQUALIFIED_GIFT_AID_ATTRIBUTE_2 @ID;
    end
end