USP_RECOGNITIONCREDIT_ADDTOGROUPMEMBERS

Add recognition credits for the group members for the given revenue splits.

Parameters

Parameter Parameter Type Mode Description
@SPLITS xml IN
@DONORID uniqueidentifier IN
@DONATIONDATE datetime IN
@GIFTID uniqueidentifier IN
@RECOGNITIONCREDITTYPEID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CURRENTDATE datetime IN
@USERECOGNITIONCREDITTYPEIDFROMRECOGNITION bit IN

Definition

Copy


            CREATE procedure dbo.USP_RECOGNITIONCREDIT_ADDTOGROUPMEMBERS
             (
                @SPLITS xml,
                @DONORID uniqueidentifier,
                @DONATIONDATE datetime,
                @GIFTID uniqueidentifier,
                @RECOGNITIONCREDITTYPEID uniqueidentifier,
                @CHANGEAGENTID uniqueidentifier = null,
                @CURRENTDATE datetime = null,
                @USERECOGNITIONCREDITTYPEIDFROMRECOGNITION bit = 0
            )
            as

                 set nocount on;

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

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

                begin try

                    declare @GIFTSPLITS xml;
                    set @GIFTSPLITS = dbo.UFN_REVENUE_GETSPLITS_2_TOITEMLISTXML(@GIFTID)

                    --KevinKoe WI 131183 - Using a singular split ID and amount does not work if the matching gift has more than one split

                    --declare @SPLITID uniqueidentifier;

                    --declare @AMOUNT money;


                    --select @SPLITID=ID, @AMOUNT=AMOUNT

                    --from dbo.UFN_REVENUE_GETSPLITS_2_FROMITEMLISTXML(@SPLITS)


                    --Set currency parameters for backwards compatibility

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

                    with [CTE] as 
                    (
                        select 
                            newid() as ID,
                            MGPSPLITS.ID as SPLITID,
                            CONSTITUENT.ID as CONSTITUENTID,
                            --JamesWill WI109642 Pro-rate the recognition according to the recognition on the original revenue

                            (
                                case
                                    when RECOGNITIONWITHGIFTSPLIT.AGGREGATEGIFTSPLITAMOUNT = 0 then 0  --Ensure we don't divide by 0

                                    else MGPSPLITS.AMOUNT * (RECOGNITIONWITHGIFTSPLIT.RECOGNITIONAMOUNT / RECOGNITIONWITHGIFTSPLIT.AGGREGATEGIFTSPLITAMOUNT)
                                end
                            ) as AMOUNT,
                            RECOGNITIONWITHGIFTSPLIT.BASECURRENCYID,
                            RECOGNITIONWITHGIFTSPLIT.ORGANIZATIONEXCHANGERATEID,
                            RECOGNITIONWITHGIFTSPLIT.TRANSACTIONCURRENCYID,
                            RECOGNITIONWITHGIFTSPLIT.BASEEXCHANGERATEID,
                            RECOGNITIONWITHGIFTSPLIT.REVENUERECOGNITIONTYPECODEID
                        from
                        -- Aggregate the original gift splits joined with recognition credits.  Without the aggregation, if the claim is generated from a payment 

                        -- with multiple splits and the same designation, the constituent will be recognized multiple times because it joins to the MG splits 

                        -- using designation ID.  The derived table GIFTSPLITAMOUNTBYDESIGNATION is needed to handle the scenario where one split is paid by recognition 

                        -- type and another split is paid by a different type.  Otherwise, it could show the recognition percentage as 100%

                        -- for both splits and when it multiples by MGPSPLITS.AMOUNT above, would result in an incorrect recognition amount.  Just GIFTSPLITAMOUNTBYDESIGNATION

                        -- can't be used because it could result in identical recognition credits being created.

                        (
                            select
                                GIFTSPLITAMOUNTBYDESIGNATION.AMOUNT as AGGREGATEGIFTSPLITAMOUNT,
                                GIFTSPLIT.DESIGNATIONID,
                                sum(REVENUERECOGNITION.AMOUNT) as RECOGNITIONAMOUNT,
                                REVENUERECOGNITION.CONSTITUENTID,
                                REVENUERECOGNITION.REVENUERECOGNITIONTYPECODEID,
                                GIFTSPLIT.BASECURRENCYID,
                                GIFTSPLIT.ORGANIZATIONEXCHANGERATEID,
                                GIFTSPLIT.TRANSACTIONCURRENCYID,
                                GIFTSPLIT.BASEEXCHANGERATEID
                            from dbo.UFN_REVENUE_GETSPLITS_2_FROMITEMLISTXML(@GIFTSPLITS) as GIFTSPLIT
                            inner join dbo.REVENUERECOGNITION on REVENUERECOGNITION.REVENUESPLITID = GIFTSPLIT.ID
                            inner join
                            (
                                select
                                    DESIGNATIONID,
                                    sum(AMOUNT) as AMOUNT
                                from dbo.UFN_REVENUE_GETSPLITS_2_FROMITEMLISTXML(@GIFTSPLITS)
                                group by
                                    DESIGNATIONID
                            ) as GIFTSPLITAMOUNTBYDESIGNATION on GIFTSPLIT.DESIGNATIONID = GIFTSPLITAMOUNTBYDESIGNATION.DESIGNATIONID
                            group by
                                REVENUERECOGNITION.CONSTITUENTID,
                                GIFTSPLIT.DESIGNATIONID,
                                GIFTSPLITAMOUNTBYDESIGNATION.AMOUNT,
                                REVENUERECOGNITION.REVENUERECOGNITIONTYPECODEID,
                                GIFTSPLIT.BASECURRENCYID,
                                GIFTSPLIT.ORGANIZATIONEXCHANGERATEID,
                                GIFTSPLIT.TRANSACTIONCURRENCYID,
                                GIFTSPLIT.BASEEXCHANGERATEID
                        ) as RECOGNITIONWITHGIFTSPLIT
                        inner join dbo.CONSTITUENT on CONSTITUENT.ID = RECOGNITIONWITHGIFTSPLIT.CONSTITUENTID
                        inner join dbo.UFN_REVENUE_GETSPLITS_2_FROMITEMLISTXML(@SPLITS) as MGPSPLITS on MGPSPLITS.DESIGNATIONID = RECOGNITIONWITHGIFTSPLIT.DESIGNATIONID
                    )
                    insert into REVENUERECOGNITION
                    (
                        ID, 
                        REVENUESPLITID,
                        CONSTITUENTID,
                        AMOUNT,
                        EFFECTIVEDATE,
                        REVENUERECOGNITIONTYPECODEID, 
                        ADDEDBYID, 
                        CHANGEDBYID, 
                        DATEADDED,
                        DATECHANGED,
                        BASECURRENCYID,
                        ORGANIZATIONAMOUNT,
                        ORGANIZATIONEXCHANGERATEID
                    )
                    select
                        newid(),
                        SPLITID,
                        CONSTITUENTID,
                        CTE.AMOUNT,
                        @DONATIONDATE,
                        case when @USERECOGNITIONCREDITTYPEIDFROMRECOGNITION = 1
                            then [CTE].REVENUERECOGNITIONTYPECODEID
                            else @RECOGNITIONCREDITTYPEID
                        end,
                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CURRENTDATE,
                        @CURRENTDATE,

                        --Set currency parameters for backwards compatibility

                        case
                            when CTE.BASECURRENCYID is null then
                                @ORGANIZATIONCURRENCYID
                            else
                                CTE.BASECURRENCYID
                        end,

                        case
                            when CTE.BASECURRENCYID is null then
                                CTE.AMOUNT
                            else
                                dbo.UFN_CURRENCY_CONVERTTOORGANIZATIONCURRENCY(CTE.AMOUNT, CTE.ORGANIZATIONEXCHANGERATEID, null)
                        end,

                        case
                            when CTE.BASECURRENCYID is null then
                                null
                            else
                                CTE.ORGANIZATIONEXCHANGERATEID
                        end
                    from [CTE]
                end try

                begin catch
                    exec dbo.USP_RAISE_ERROR;
                    return 1;
                end catch

                return 0;