USP_REVENUESPLIT_UPDATERECOGNITION

Parameters

Parameter Parameter Type Mode Description
@REVENUESPLITID uniqueidentifier IN
@ORIGINALREVENUESPLITAMOUNT money IN
@UPDATETYPE tinyint IN
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN
@APPLICATIONTYPE tinyint IN
@APPLICATIONID uniqueidentifier IN

Definition

Copy


            CREATE procedure dbo.USP_REVENUESPLIT_UPDATERECOGNITION
            (
                @REVENUESPLITID uniqueidentifier,
                @ORIGINALREVENUESPLITAMOUNT money,
                @UPDATETYPE tinyint, -- 0 = no update, 1 = update proportionally, 2 = update based on defaults

                @CHANGEAGENTID uniqueidentifier,
                @CHANGEDATE datetime,
                @APPLICATIONTYPE tinyint = null,
                @APPLICATIONID uniqueidentifier = null
            )
            as
            begin
            set nocount on;
                declare @REVENUEGIVENANONYMOUSLY bit
                declare @CONSTITUENTID uniqueidentifier
                declare @DATE datetime
                declare @ORGANIZATIONCURRENCYID uniqueidentifier;
                declare @BASETOORGANIZATIONEXCHANGERATEID uniqueidentifier;
                declare @BASECURRENCYID uniqueidentifier;

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

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

                begin try
                    select
                        @REVENUEGIVENANONYMOUSLY = REVENUE_EXT.GIVENANONYMOUSLY,
                        @CONSTITUENTID = R.CONSTITUENTID,
                        @DATE = R.DATE,
                        @BASECURRENCYID = CURRENCYSET.BASECURRENCYID
                    from dbo.FINANCIALTRANSACTION R inner join dbo.PDACCOUNTSYSTEM on R.PDACCOUNTSYSTEMID = PDACCOUNTSYSTEM.ID
                    inner join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID
                    inner join dbo.REVENUE_EXT on R.ID = REVENUE_EXT.ID
                    inner join dbo.FINANCIALTRANSACTIONLINEITEM on R.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
                    where FINANCIALTRANSACTIONLINEITEM.ID = @REVENUESPLITID

                    -- Get currency settings

                    exec dbo.USP_CURRENCY_GETCURRENCYVALUES
                        @AMOUNT=null,
                        @DATE=@DATE,
                        @BASECURRENCYID=@BASECURRENCYID,
                        @BASEEXCHANGERATEID=null,
                        @TRANSACTIONCURRENCYID=null,
                        @BASEAMOUNT=null,
                        @ORGANIZATIONCURRENCYID=@ORGANIZATIONCURRENCYID output,
                        @ORGANIZATIONAMOUNT=null,
                        @ORGANIZATIONEXCHANGERATEID=null,
                        @LOOKUPORGANIZATIONEXCHANGERATE=0,
                        @BASETOORGANIZATIONEXCHANGERATEID=@BASETOORGANIZATIONEXCHANGERATEID output;

                    if @UPDATETYPE = 1 -- Update proportionally

                    begin
                        declare @NEWREVENUESPLITAMOUNT money;
                        select @NEWREVENUESPLITAMOUNT = BASEAMOUNT from dbo.FINANCIALTRANSACTIONLINEITEM where ID = @REVENUESPLITID;

                        update dbo.REVENUERECOGNITION set
                            AMOUNT = CALCULATION.AMOUNT,
                            ORGANIZATIONAMOUNT =    case
                                                        when @BASECURRENCYID <> @ORGANIZATIONCURRENCYID
                                                            then dbo.UFN_CURRENCY_CONVERT(CALCULATION.AMOUNT, @BASETOORGANIZATIONEXCHANGERATEID)
                                                        else CALCULATION.AMOUNT
                                                    end,
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CHANGEDATE
                        from dbo.REVENUERECOGNITION
                        inner join dbo.CURRENCY BASECURRENCY on BASECURRENCY.ID = @BASECURRENCYID
                        cross apply
                        (
                            select dbo.UFN_CURRENCY_ROUND((@NEWREVENUESPLITAMOUNT * (REVENUERECOGNITION.AMOUNT / @ORIGINALREVENUESPLITAMOUNT)), BASECURRENCY.DECIMALDIGITS, BASECURRENCY.ROUNDINGTYPECODE) AMOUNT
                        ) as CALCULATION
                        where REVENUESPLITID = @REVENUESPLITID
                    end
                    else if @UPDATETYPE = 2 -- Update using defaults

                    begin
                        -- Delete old recognitions, if they exist

                        declare @CONTEXTCACHE varbinary(128);
                        set @CONTEXTCACHE = CONTEXT_INFO();
                        set context_info @changeagentid;

                        delete from dbo.REVENUERECOGNITION
                        where REVENUESPLITID = @REVENUESPLITID;

                        --Remove other recognition credits

                        delete dbo.RECOGNITIONCREDIT
                        from dbo.RECOGNITIONCREDIT
                        inner join dbo.DONORCHALLENGEENCUMBERED on RECOGNITIONCREDIT.DONORCHALLENGEENCUMBEREDID = DONORCHALLENGEENCUMBERED.ID
                        where RECOGNITIONCREDIT.RECOGNITIONCREDITTYPECODE = 1
                          and DONORCHALLENGEENCUMBERED.REVENUESPLITID = @REVENUESPLITID
                          and @UPDATETYPE <> 0;

                        --Remove credits on the donor challenge claim to match edit form

                        delete dbo.REVENUERECOGNITION
                        from dbo.REVENUERECOGNITION
                        inner join dbo.FINANCIALTRANSACTIONLINEITEM on REVENUERECOGNITION.REVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID
                        inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
                        inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
                        inner join dbo.DONORCHALLENGEENCUMBERED on FINANCIALTRANSACTION.ID = DONORCHALLENGEENCUMBERED.MATCHEDREVENUEID
                        where DONORCHALLENGEENCUMBERED.REVENUESPLITID = @REVENUESPLITID
                          and FINANCIALTRANSACTION.CONSTITUENTID <> REVENUERECOGNITION.CONSTITUENTID
                          and REVENUESPLIT_EXT.DESIGNATIONID = DONORCHALLENGEENCUMBERED.DESIGNATIONID
                          and @UPDATETYPE <> 0;                        

                        if @CONTEXTCACHE is not null
                            set context_info @CONTEXTCACHE

                        declare @ORIGINALDONORID uniqueidentifier;
                        declare @ORIGINALDONATIONDATE datetime;
                        declare @ORIGINALGIFTID uniqueidentifier;
                        if @APPLICATIONTYPE = 7 -- Application MG claim

                        begin
                            declare @CREATEDSPLITS xml
                            set @CREATEDSPLITS =
                            (
                                select
                                    FINANCIALTRANSACTIONLINEITEM.BASEAMOUNT as AMOUNT,
                                    REVENUESPLIT_EXT.DESIGNATIONID,
                                    FINANCIALTRANSACTIONLINEITEM.ID,
                                    FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID,
                                    REVENUESPLIT_EXT.APPLICATIONCODE,
                                    REVENUESPLIT_EXT.TYPECODE,
                                    FINANCIALTRANSACTION.TRANSACTIONCURRENCYID
                                from dbo.FINANCIALTRANSACTIONLINEITEM 
                                inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
                                inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
                                where FINANCIALTRANSACTIONLINEITEM.ID = @REVENUESPLITID
                                for xml raw('ITEM'),type,elements,root('SPLITS'),BINARY BASE64
                            )

                            set @CREATEDSPLITS = dbo.UFN_REVENUESPLIT_CONVERTAMOUNTSINXML(@CREATEDSPLITS, @BASECURRENCYID, @BASETOORGANIZATIONEXCHANGERATEID, @BASECURRENCYID, null)

                            exec dbo.USP_RECOGNITIONCREDITS_ADDBASEDONMGCPREFERENCES
                                @SPLITS = @CREATEDSPLITS,
                                @APPLICATIONID = @APPLICATIONID,
                                @CHANGEAGENTID = @CHANGEAGENTID,
                                @CURRENTDATE = @CHANGEDATE,
                                @REVENUEGIVENANONYMOUSLY = @REVENUEGIVENANONYMOUSLY;                            
                        end
                        else
                        begin
                            insert into dbo.REVENUERECOGNITION
                            (
                                REVENUESPLITID, 
                                CONSTITUENTID, 
                                AMOUNT,
                                EFFECTIVEDATE,
                                REVENUERECOGNITIONTYPECODEID,
                                ADDEDBYID, 
                                CHANGEDBYID, 
                                DATEADDED, 
                                DATECHANGED,
                                BASECURRENCYID,
                                ORGANIZATIONAMOUNT,
                                ORGANIZATIONEXCHANGERATEID
                            )
                            select
                                FINANCIALTRANSACTIONLINEITEM.ID,
                                RECOGNITIONS.CONSTITUENTID,
                                RECOGNITIONS.AMOUNT,
                                @DATE,
                                RECOGNITIONS.REVENUERECOGNITIONTYPECODEID,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CHANGEDATE
                                @CHANGEDATE,
                                @BASECURRENCYID,
                                case
                                    when @BASECURRENCYID <> @ORGANIZATIONCURRENCYID
                                        then dbo.UFN_CURRENCY_CONVERT(RECOGNITIONS.AMOUNT, @BASETOORGANIZATIONEXCHANGERATEID)
                                    else RECOGNITIONS.AMOUNT
                                end,
                                @BASETOORGANIZATIONEXCHANGERATEID ORGANIZATIONEXCHANGERATEID
                            from dbo.FINANCIALTRANSACTIONLINEITEM
                            cross apply dbo.UFN_REVENUEDETAIL_GETDEFAULTRECOGNITIONS(@REVENUEGIVENANONYMOUSLY, @CONSTITUENTID, FINANCIALTRANSACTIONLINEITEM.BASEAMOUNT, @DATE, null) as RECOGNITIONS
                            where
                                FINANCIALTRANSACTIONLINEITEM.ID = @REVENUESPLITID
                        end
                    end

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