USP_DATALIST_BATCHREVENUEMGDEFAULTFROMCONDITION

Returns default matching gift claim information based on the matching condition and gift amount.

Parameters

Parameter Parameter Type Mode Description
@CONSTITUENTID uniqueidentifier IN Constituent ID
@MATCHINGGIFTCONDITIONID uniqueidentifier IN Matching gift condition ID
@DATE datetime IN Date
@DONATIONAMOUNT money IN Donation amount
@DONATIONRECEIPTAMOUNT money IN Donation receipt amount
@DONATIONSPLITS xml IN Donation splits

Definition

Copy


                /****
                    NOTE:  This code is similar to UFN_REVENUEBATCH_GETDEFAULTMATCHINGGIFTS_FORCONSTITUENT_2.xml
                ****/
                CREATE procedure dbo.USP_DATALIST_BATCHREVENUEMGDEFAULTFROMCONDITION
                (
                    @CONSTITUENTID uniqueidentifier,
                    @MATCHINGGIFTCONDITIONID uniqueidentifier,
                    @DATE datetime,
                    @DONATIONAMOUNT money,
                    @DONATIONRECEIPTAMOUNT money,
                    @DONATIONSPLITS xml
                )
                as
                set nocount on;

                declare @AMOUNT money;
                declare @MGAMOUNT money;

                declare @MGSPLITS xml;
                declare @COULDNOTDEFAULTMATCHINGGIFT bit;
                declare @RETURNROW bit = 0;

                set @AMOUNT = @DONATIONAMOUNT;


                declare @ORGANIZATIONID uniqueidentifier;
                declare @MATCHINGFACTOR decimal(5,2);
                declare @MINMATCHPERGIFT money;
                declare @MAXMATCHPERGIFT money;
                declare @MAXMATCHANNUAL money;
                declare @MAXMATCHTOTAL money;
                declare @MATCHTYPECODE tinyint;
                declare @REVENUETYPECODE tinyint;
                declare @APPLICATIONCODE tinyint;

                declare @DONATIONSPLITS_T table
                (
                    ID uniqueidentifier,
                    DESIGNATIONID uniqueidentifier,
                    DESIGNATIONTRANSLATION nvarchar(512),
                    AMOUNT money,
                    SEQUENCE int,
                    APPLICATIONCODE tinyint,
                    TYPECODE tinyint,
                    TRANSACTIONCURRENCYID uniqueidentifier
                );

                insert into @DONATIONSPLITS_T(ID, DESIGNATIONID, DESIGNATIONTRANSLATION, AMOUNT, SEQUENCE, APPLICATIONCODE, TYPECODE, TRANSACTIONCURRENCYID)
                    select 
                        T.c.value('(ID)[1]', 'uniqueidentifier'), 
                        T.c.value('(DESIGNATIONID)[1]', 'uniqueidentifier'), 
                        DESIGNATION.NAME,
                        T.c.value('(AMOUNT)[1]', 'money'), 
                        T.c.value('(SEQUENCE)[1]', 'int'), 
                        T.c.value('(APPLICATIONCODE)[1]', 'tinyint'), 
                        T.c.value('(TYPECODE)[1]', 'tinyint'),
                        T.c.value('(TRANSACTIONCURRENCYID)[1]', 'uniqueidentifier')
                    from @DONATIONSPLITS.nodes('/SPLITS/ITEM') T(c)
                    inner join DESIGNATION on DESIGNATION.ID = T.c.value('(DESIGNATIONID)[1]', 'uniqueidentifier');


                select
                    @ORGANIZATIONID=ORGANIZATIONID,
                    @MATCHINGFACTOR=MATCHINGFACTOR, 
                    @MINMATCHPERGIFT=MINMATCHPERGIFT, 
                    @MAXMATCHPERGIFT=MAXMATCHPERGIFT, 
                    @MAXMATCHANNUAL=MAXMATCHANNUAL, 
                    @MAXMATCHTOTAL=MAXMATCHTOTAL, 
                    @MATCHTYPECODE=MATCHTYPECODE, 
                    @REVENUETYPECODE=REVENUETYPECODE
                from 
                    dbo.MATCHINGGIFTCONDITION
                where
                    ID = @MATCHINGGIFTCONDITIONID;


                declare @GENERATECLAIMS bit;
                set @GENERATECLAIMS = 1

                select @AMOUNT = coalesce(sum(AMOUNT), 0)
                from @DONATIONSPLITS_T where TYPECODE = @REVENUETYPECODE;

                --check if we need to apply the full amount or the tax portion

                if @MATCHTYPECODE = 1
                begin
                    if exists(select ID from @DONATIONSPLITS_T where TYPECODE <> @REVENUETYPECODE) or @AMOUNT = 0
                        set @GENERATECLAIMS = 0; --If we're only matching the tax-deductible portions but some of the splits aren't to be matched, we can't figure out how much to match

                    else
                        set @MGAMOUNT = @DONATIONRECEIPTAMOUNT * @MATCHINGFACTOR;
                end
                else
                begin
                    set @MGAMOUNT = @AMOUNT * @MATCHINGFACTOR;
                end


                --determine if the matching gift needs to be adjusted based on the conditions of the MG organization

                --REVISIT: This function will not take batch gifts into account. Not sure how to deal with it. 

                set @MGAMOUNT = dbo.UFN_MATCHINGGIFTPLEDGE_CALCULATEMGAMOUNT(@CONSTITUENTID, @ORGANIZATIONID, @MGAMOUNT, @DATE, @MAXMATCHPERGIFT, @MAXMATCHANNUAL, @MAXMATCHTOTAL);

                if @MGAMOUNT >= @MINMATCHPERGIFT and @MGAMOUNT > 0 and @GENERATECLAIMS = 1
                begin
                    --Get new MG splits

                    select @MGSPLITS = (select sum(AMOUNT) as AMOUNT, DESIGNATIONID, DESIGNATIONTRANSLATION, TYPECODE, TRANSACTIONCURRENCYID
                                        from @DONATIONSPLITS_T where TYPECODE = @REVENUETYPECODE
                                        group by DESIGNATIONID, DESIGNATIONTRANSLATION, TYPECODE, TRANSACTIONCURRENCYID
                                        for xml raw('ITEM'),type,elements,root('SPLITS'),binary base64);

                    select @APPLICATIONCODE = APPLICATIONCODE from @DONATIONSPLITS_T where TYPECODE = @REVENUETYPECODE;

                    set @MGSPLITS = dbo.UFN_REVENUEBATCH_GETAUTOMGSPLITS(@AMOUNT, @MGAMOUNT, @MGSPLITS, @REVENUETYPECODE, @APPLICATIONCODE);

                    set @COULDNOTDEFAULTMATCHINGGIFT = 0;
                    set @RETURNROW = 1;

                end
                else
                begin
                    if @GENERATECLAIMS = 0
                    begin
                        --For some reason, we've decided not to default claims. Indicate this fact.


                        set @MGAMOUNT = null;
                        set @MGSPLITS = null;
                        set @COULDNOTDEFAULTMATCHINGGIFT = 1;
                        set @RETURNROW = 1;

                    end
                end

                select
                    @MGAMOUNT as MGAMOUNT,
                    @MGSPLITS as MGSPLITS,
                    @COULDNOTDEFAULTMATCHINGGIFT as COULDNOTDEFAULTMATCHINGGIFT
                where @RETURNROW = 1;