USP_GIFT_UPDATEPAYMENT

Updates a payment of type gift.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@REVENUEID uniqueidentifier IN
@AMOUNT money IN
@DESIGNATIONID uniqueidentifier IN
@OPPORTUNITYID uniqueidentifier IN
@CAMPAIGNS xml IN
@RECOGNITIONCREDITS xml IN
@SOLICITORS xml IN
@CATEGORYCODEID uniqueidentifier IN
@CHANGEDATE datetime IN
@CHANGEAGENTID uniqueidentifier IN
@BASEAMOUNT money IN
@ORGANIZATIONAMOUNT money IN
@REVENUETYPECODE tinyint IN

Definition

Copy


            CREATE procedure dbo.USP_GIFT_UPDATEPAYMENT
            (
                @ID uniqueidentifier,
                @REVENUEID uniqueidentifier,
                @AMOUNT money,
                @DESIGNATIONID uniqueidentifier,
                @OPPORTUNITYID uniqueidentifier,
                @CAMPAIGNS xml,
                @RECOGNITIONCREDITS xml,
                @SOLICITORS xml,
                @CATEGORYCODEID uniqueidentifier,
                @CHANGEDATE datetime = null,
                @CHANGEAGENTID uniqueidentifier = null,
                @BASEAMOUNT money = null,
                @ORGANIZATIONAMOUNT money = null,
                @REVENUETYPECODE tinyint = null
            )
            as
                set nocount on;

                -- Get multicurrency values from the revenue.

                declare @TRANSACTIONCURRENCYID uniqueidentifier;
                declare @BASECURRENCYID uniqueidentifier;
                declare @BASEEXCHANGERATEID uniqueidentifier;
                declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
                declare @REVENUEDATE datetime;
                declare @BASETOORGANIZATIONEXCHANGERATEID uniqueidentifier;                 
                declare @ORGANIZATIONCURRENCYID uniqueidentifier;

                select
                    @TRANSACTIONCURRENCYID = REVENUE.TRANSACTIONCURRENCYID,
                    @BASECURRENCYID = CS.BASECURRENCYID,
                    @BASEEXCHANGERATEID = REVENUE.BASEEXCHANGERATEID,
                    @ORGANIZATIONEXCHANGERATEID = REVENUE.ORGEXCHANGERATEID,
                    @REVENUEDATE = cast(REVENUE.DATE as datetime)
                from dbo.FINANCIALTRANSACTION REVENUE
                inner join dbo.REVENUE_EXT on REVENUE_EXT.ID = REVENUE.ID
                inner join dbo.PDACCOUNTSYSTEM PD on PD.ID = REVENUE.PDACCOUNTSYSTEMID
                inner join dbo.CURRENCYSET CS on CS.ID = PD.CURRENCYSETID
                where REVENUE.ID = @REVENUEID
                    and REVENUE.TYPECODE in (0,1,2,3,4,5,6,7,8,9,15) and REVENUE.DELETEDON is null;

                -- Convert the applied amount into base and organization amounts if it is not provided by the caller

                if @BASEAMOUNT is null or @ORGANIZATIONAMOUNT is null
                    exec dbo.USP_CURRENCY_GETCURRENCYVALUES @AMOUNT, @REVENUEDATE, @BASECURRENCYID, @BASEEXCHANGERATEID output, @TRANSACTIONCURRENCYID output, @BASEAMOUNT output, null, @ORGANIZATIONAMOUNT output, @ORGANIZATIONEXCHANGERATEID output, 0, @BASETOORGANIZATIONEXCHANGERATEID output;
                else
                    set @BASETOORGANIZATIONEXCHANGERATEID = dbo.UFN_CURRENCYEXCHANGERATE_GETLATESTBASETOORGANIZATIONRATE(@BASECURRENCYID, @REVENUEDATE, null, @ORGANIZATIONEXCHANGERATEID);

                --Business units - AdiSa 6/12/10 - Store all business unit ratios in a temporary table.

                declare @BUSINESSUNITS table(DESIGNATIONID uniqueidentifier, BUSINESSUNITCODEID uniqueidentifier, RATIO float)
                insert into @BUSINESSUNITS
                select
                    DESIGNATIONID,
                    BUSINESSUNITCODEID,
                    case
                        when LI.BASEAMOUNT = 0 then 0
                        else REVENUESPLITBUSINESSUNIT.AMOUNT / LI.BASEAMOUNT 
                    end as RATIO
                from dbo.REVENUESPLITBUSINESSUNIT
                inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.ID = REVENUESPLITBUSINESSUNIT.REVENUESPLITID
                inner join dbo.REVENUESPLIT_EXT on LI.ID = REVENUESPLIT_EXT.ID
                where LI.FINANCIALTRANSACTIONID = @REVENUEID and REVENUESPLIT_EXT.OVERRIDEBUSINESSUNITS = 1
                    and LI.DELETEDON is null and LI.TYPECODE != 1

                update dbo.FINANCIALTRANSACTIONLINEITEM set
                    TRANSACTIONAMOUNT = @AMOUNT
                    ,BASEAMOUNT = @BASEAMOUNT
                    ,ORGAMOUNT = @ORGANIZATIONAMOUNT
                    ,CHANGEDBYID = @CHANGEAGENTID
                    ,DATECHANGED = @CHANGEDATE
                where ID = @ID
                    and (
                        TRANSACTIONAMOUNT != @AMOUNT or
                        BASEAMOUNT != @BASEAMOUNT or
                        ORGAMOUNT != @ORGANIZATIONAMOUNT);

                update dbo.REVENUESPLIT_EXT set
                    DESIGNATIONID = @DESIGNATIONID
                    ,TYPECODE = coalesce(@REVENUETYPECODE,TYPECODE)
                    ,APPLICATIONCODE = 0
                    ,CHANGEDBYID = @CHANGEAGENTID
                    ,DATECHANGED = @CHANGEDATE
                where ID = @ID
                    and (
                        DESIGNATIONID != @DESIGNATIONID or
                        TYPECODE != @REVENUETYPECODE or
                        APPLICATIONCODE != 0);

                --Business units - AdiSa 6/12/10 - Re-adjust business unit ratio's with new revenuesplit amount for gift.       

                update dbo.REVENUESPLITBUSINESSUNIT set
                    REVENUESPLITBUSINESSUNIT.AMOUNT = LI.BASEAMOUNT * BU.RATIO
                from dbo.REVENUESPLITBUSINESSUNIT
                inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.ID = REVENUESPLITBUSINESSUNIT.REVENUESPLITID
                inner join dbo.REVENUESPLIT_EXT on LI.ID = REVENUESPLIT_EXT.ID
                inner join @BUSINESSUNITS BU on BU.DESIGNATIONID = REVENUESPLIT_EXT.DESIGNATIONID
                where LI.FINANCIALTRANSACTIONID = @REVENUEID and REVENUESPLITBUSINESSUNIT.BUSINESSUNITCODEID = BU.BUSINESSUNITCODEID
                    and LI.DELETEDON is null and LI.TYPECODE != 1;

                if @OPPORTUNITYID is null or @OPPORTUNITYID = '00000000-0000-0000-0000-000000000000'
                    exec dbo.USP_REVENUEOPPORTUNITY_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID;
                else
                begin
                    if exists(select ID from dbo.REVENUEOPPORTUNITY where ID = @ID)
                        update dbo.REVENUEOPPORTUNITY
                        set OPPORTUNITYID = @OPPORTUNITYID
                            CHANGEDBYID = @CHANGEAGENTID
                            DATECHANGED = @CHANGEDATE
                        where ID = @ID and OPPORTUNITYID <> @OPPORTUNITYID;
                    else
                        insert into dbo.REVENUEOPPORTUNITY(ID, OPPORTUNITYID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                        values(@ID, @OPPORTUNITYID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);
                end

                exec dbo.USP_OPPORTUNITY_UPDATEACCEPTEDSTATUS @OPPORTUNITYID, @REVENUEDATE, @CHANGEAGENTID, @CHANGEDATE

                exec dbo.USP_REVENUESPLIT_GETCAMPAIGNS_UPDATEFROMXML @ID, @CAMPAIGNS, @CHANGEAGENTID;

                if dbo.UFN_REVENUESPLIT_MATCHEDBYDONORCHALLENGE(@ID) = 1
                begin
                    --If the new rows do not have RECOGNITIONCREDITFKID or ID they won't be added (e.g. if credits were reset)

                    set @RECOGNITIONCREDITS = (select [AMOUNT], [BASECURRENCYID], [CONSTITUENT], [CONSTITUENTID], [DESIGNATION], [DESIGNATIONID], [DONOR], [EFFECTIVEDATE], [GROSSAMOUNT], 
                                                                            case when RECOGNITIONCREDITFKID is null and ID is null then newid() else ID end [ID], 
                                                                            [RECOGNITIONTYPE], [REVENUERECOGNITIONTYPECODEID],
                                                                            case when RECOGNITIONCREDITFKID is null then @ID else RECOGNITIONCREDITFKID end [RECOGNITIONCREDITFKID],
                                                                            case when RECOGNITIONCREDITFKID is null then 0 else DONORCHALLENGERECOGNITIONTYPECODE end [DONORCHALLENGERECOGNITIONTYPECODE] 
                                                                        from dbo.UFN_RECOGNITIONCREDIT_DONORCHALLENGE_GETRECOGNITIONS_FROMITEMLISTXML(@RECOGNITIONCREDITS)
                                                                        order by EFFECTIVEDATE asc, CONSTITUENT asc
                                                                        for xml raw('ITEM'),type,elements,root('RECOGNITIONS'),BINARY BASE64)
                    set @RECOGNITIONCREDITS = dbo.UFN_RECOGNITIONCREDIT_DONORCHALLENGE_CONVERTAMOUNTSINXML(@RECOGNITIONCREDITS, @BASECURRENCYID, @BASETOORGANIZATIONEXCHANGERATEID);
                    exec dbo.USP_RECOGNITIONCREDIT_DONORCHALLENGE_GETRECOGNITIONS_CUSTOMUPDATEFROMXML @ID, @RECOGNITIONCREDITS, @CHANGEAGENTID;
                end
                else
                begin
                    set @RECOGNITIONCREDITS = dbo.UFN_REVENUERECOGNITION_CONVERTAMOUNTSINXML(@RECOGNITIONCREDITS, @BASECURRENCYID, @BASETOORGANIZATIONEXCHANGERATEID);
                    exec dbo.USP_REVENUE_GETRECOGNITIONS_2_UPDATEFROMXML @ID, @RECOGNITIONCREDITS, @CHANGEAGENTID;
                end

                set @SOLICITORS = dbo.UFN_REVENUESOLICITOR_CONVERTAMOUNTSINXML(@SOLICITORS, @BASECURRENCYID, @BASETOORGANIZATIONEXCHANGERATEID);
                exec dbo.USP_REVENUE_GETSOLICITORS_2_UPDATEFROMXML @ID, @SOLICITORS, @CHANGEAGENTID;

                exec dbo.USP_REVENUECATEGORY_ADDEDIT @ID, @CATEGORYCODEID, @CHANGEAGENTID;