USP_DATAFORMTEMPLATE_ADD_PLANNEDGIFTPAYMENT

Stored procedure used to save payment on the planned gift payment add form.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT
@PLANNEDGIFTID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CONSTITUENTID uniqueidentifier IN
@DATE datetime IN
@AMOUNT money IN
@PAYMENTMETHODCODE tinyint IN
@CHECKDATE UDT_FUZZYDATE IN
@CHECKNUMBER nvarchar(20) IN
@REFERENCEDATE UDT_FUZZYDATE IN
@REFERENCENUMBER nvarchar(20) IN
@CARDHOLDERNAME nvarchar(255) IN
@CREDITCARDNUMBER nvarchar(4) IN
@CREDITTYPECODEID uniqueidentifier IN
@AUTHORIZATIONCODE nvarchar(20) IN
@EXPIRESON UDT_FUZZYDATE IN
@ISSUER nvarchar(100) IN
@NUMBEROFUNITS decimal(20, 3) IN
@SYMBOL nvarchar(25) IN
@MEDIANPRICE decimal(19, 4) IN
@GIFTINKINDSUBTYPECODEID uniqueidentifier IN
@PROPERTYSUBTYPECODEID uniqueidentifier IN
@RECEIPTAMOUNT money IN
@CONSTITUENTACCOUNTID uniqueidentifier IN
@POSTSTATUSCODE tinyint IN
@POSTDATE datetime IN
@FINDERNUMBER bigint IN
@SOURCECODE nvarchar(50) IN
@APPEALID uniqueidentifier IN
@TRIBUTEID uniqueidentifier IN
@BENEFITS xml IN
@BENEFITSWAIVED bit IN
@GIVENANONYMOUSLY bit IN
@MAILINGID uniqueidentifier IN
@LETTERCODEID uniqueidentifier IN
@CHANNELCODEID uniqueidentifier IN
@DONOTACKNOWLEDGE bit IN
@DONOTRECEIPT bit IN
@OTHERPAYMENTMETHODCODEID uniqueidentifier IN
@REFERENCE nvarchar(255) IN
@LOWPRICE decimal(19, 4) IN
@HIGHPRICE decimal(19, 4) IN
@DIRECTDEBITRESULTCODE nvarchar(10) IN
@GIFTINKINDITEMNAME nvarchar(100) IN
@GIFTINKINDDISPOSITIONCODE tinyint IN
@GIFTINKINDNUMBEROFUNITS int IN
@GIFTINKINDFAIRMARKETVALUE money IN
@PERCENTAGEBENEFITS xml IN
@PDACCOUNTSYSTEMID uniqueidentifier IN
@TRANSACTIONCURRENCYID uniqueidentifier IN
@BASEEXCHANGERATEID uniqueidentifier IN
@EXCHANGERATE decimal(20, 8) IN
@RECOGNITIONAMOUNT money IN
@CURRENTAPPUSERID uniqueidentifier IN
@SEPAMANDATEID uniqueidentifier IN
@TRANSACTIONID uniqueidentifier IN
@MERCHANTACCOUNTID uniqueidentifier IN
@VENDORID nvarchar(50) IN

Definition

Copy


            CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_PLANNEDGIFTPAYMENT
            (
                @ID uniqueidentifier = null output,
                @PLANNEDGIFTID uniqueidentifier,
                @CHANGEAGENTID uniqueidentifier,
                @CONSTITUENTID uniqueidentifier,                    
                @DATE datetime,
                @AMOUNT money = 0,
                @PAYMENTMETHODCODE tinyint = 1,
                @CHECKDATE dbo.UDT_FUZZYDATE = '00000000',
                @CHECKNUMBER nvarchar(20) = '',
                @REFERENCEDATE dbo.UDT_FUZZYDATE = '00000000',
                @REFERENCENUMBER nvarchar(20) = '',
                @CARDHOLDERNAME nvarchar(255) = '',
                @CREDITCARDNUMBER nvarchar(4) = '',
                @CREDITTYPECODEID uniqueidentifier = null,
                @AUTHORIZATIONCODE nvarchar(20) = '',
                @EXPIRESON dbo.UDT_FUZZYDATE = '00000000',
                @ISSUER nvarchar(100) = '',
                @NUMBEROFUNITS decimal(20,3) = 0,
                @SYMBOL nvarchar(25) = '',
                @MEDIANPRICE decimal(19,4) = 0,
                @GIFTINKINDSUBTYPECODEID uniqueidentifier = null,
                @PROPERTYSUBTYPECODEID uniqueidentifier = null,
                @RECEIPTAMOUNT money = 0,
                @CONSTITUENTACCOUNTID uniqueidentifier = null,
                @POSTSTATUSCODE tinyint = 1,
                @POSTDATE datetime = null,
                @FINDERNUMBER bigint = null,
                @SOURCECODE nvarchar(50) = null,
                @APPEALID uniqueidentifier = null,
                @TRIBUTEID uniqueidentifier = null,
                @BENEFITS xml = null,
                @BENEFITSWAIVED bit = 0,
                @GIVENANONYMOUSLY bit = null,
                @MAILINGID uniqueidentifier = null,
                @LETTERCODEID uniqueidentifier = null,
                @CHANNELCODEID uniqueidentifier = null,
                @DONOTACKNOWLEDGE bit = 0,
                @DONOTRECEIPT bit = 0,
                @OTHERPAYMENTMETHODCODEID uniqueidentifier = null,
                @REFERENCE nvarchar(255) = null,
                @LOWPRICE decimal(19,4) = 0,
                @HIGHPRICE decimal(19,4) = 0,
                @DIRECTDEBITRESULTCODE nvarchar(10) = '',
                @GIFTINKINDITEMNAME nvarchar(100) = '',
                @GIFTINKINDDISPOSITIONCODE tinyint = 0,
                @GIFTINKINDNUMBEROFUNITS int = 0,
                @GIFTINKINDFAIRMARKETVALUE money = 0,
                @PERCENTAGEBENEFITS xml = null,
                @PDACCOUNTSYSTEMID uniqueidentifier = null,
                @TRANSACTIONCURRENCYID uniqueidentifier = null,
                @BASEEXCHANGERATEID uniqueidentifier = null,
                @EXCHANGERATE decimal(20,8) = null,
                @RECOGNITIONAMOUNT money = null,
                @CURRENTAPPUSERID uniqueidentifier = null,
                @SEPAMANDATEID uniqueidentifier = null,
                @TRANSACTIONID uniqueidentifier = null,
                @MERCHANTACCOUNTID uniqueidentifier = null,
                @VENDORID nvarchar(50) = ''
            )
            as
            set nocount on;

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

            declare @CURRENTDATE datetime;

            if @ID is null
                set @ID = newid();

            set @CURRENTDATE = GetDate();


            if @PDACCOUNTSYSTEMID is null
                set @PDACCOUNTSYSTEMID = '4B121C2C-CCE6-440D-894C-EA0DEF80D50B'

            --Multicurrency - RobertDi 6/1/10 - Retrieve base currency from the account system's currency set.

            declare @CURRENCYSETID uniqueidentifier
            select 
                @CURRENCYSETID = CURRENCYSETID
            from 
                dbo.PDACCOUNTSYSTEM
            where 
                ID = @PDACCOUNTSYSTEMID

            declare @BASECURRENCYID uniqueidentifier;
            select 
                @BASECURRENCYID = BASECURRENCYID
            from 
                dbo.CURRENCYSET
            where 
                ID = coalesce(@CURRENCYSETID,dbo.UFN_CURRENCYSET_GETAPPUSERDEFAULTCURRENCYSET())


            begin try
                -- Check GL business rule for this account system and set to 'Do not post' if needed.

                if dbo.UFN_PDACCOUNTSYSTEM_ALLOWGLDISTRIBUTIONS(@PDACCOUNTSYSTEMID) = 0
                begin
                  set @POSTSTATUSCODE = 2  -- Do not post

                  set @POSTDATE = null
                end
                else
                  set @POSTDATE = @DATE;

                -- Don't add the planned gift as revenue twice.

                declare @REVENUEEXISTS bit = 0;
                select
                    @REVENUEEXISTS = 1 
                from dbo.PLANNEDGIFTREVENUESPLIT where PLANNEDGIFTID = @PLANNEDGIFTID;
                if @REVENUEEXISTS = 1
                    raiserror('This planned gift has already been added as revenue.',13,1)

                -- Ensure the transaction currency of the payment matches that of the planned gift.

                declare @TRANSACTIONCURRENCYMATCHES bit = 0;
                select
                    @TRANSACTIONCURRENCYMATCHES = 1
                from dbo.PLANNEDGIFT
                where ID = @PLANNEDGIFTID and TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID
                if @TRANSACTIONCURRENCYMATCHES <> 1
                    raiserror('TRANSACTIONCURRENCYMUSTMATCHPLANNEDGIFT', 13, 1)

                -- Ensure that we can add a payment of this transaction currency to the account system.

                if not exists(
                    select 1
                    from dbo.CURRENCYSETTRANSACTIONCURRENCY
                        inner join dbo.PDACCOUNTSYSTEM on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSETTRANSACTIONCURRENCY.CURRENCYSETID
                    where PDACCOUNTSYSTEM.ID = @PDACCOUNTSYSTEMID
                        and CURRENCYSETTRANSACTIONCURRENCY.CURRENCYID = @TRANSACTIONCURRENCYID
                )
                begin
                    raiserror('TRANSACTIONCURRENCYINVALIDFORACCOUNTSYSTEM',13,1)
                end


                exec dbo.USP_PAYMENT_ADDBASE @ID output, @CHANGEAGENTID, @CURRENTDATE, @CONSTITUENTID,
                                        @DATE, @AMOUNT, @PAYMENTMETHODCODE, @CHECKDATE, @CHECKNUMBER,
                                        @REFERENCEDATE, @REFERENCENUMBER, @CARDHOLDERNAME, @CREDITCARDNUMBER,
                                        @CREDITTYPECODEID, @AUTHORIZATIONCODE, @EXPIRESON, @ISSUER,
                                        @NUMBEROFUNITS, @SYMBOL, @MEDIANPRICE, @GIFTINKINDSUBTYPECODEID,
                                        @PROPERTYSUBTYPECODEID, @RECEIPTAMOUNT, @CONSTITUENTACCOUNTID,
                                        @POSTSTATUSCODE, @POSTDATE, @FINDERNUMBER,
                                        @SOURCECODE, @APPEALID, @BENEFITS, @BENEFITSWAIVED, @GIVENANONYMOUSLY
                                        @MAILINGID, @CHANNELCODEID, @DONOTACKNOWLEDGE,@DONOTRECEIPT,
                                        '', @OTHERPAYMENTMETHODCODEID, @REFERENCE, @TRIBUTEID, @LETTERCODEID,
                                        @DIRECTDEBITRESULTCODE, @LOWPRICE, @HIGHPRICE, @GIFTINKINDITEMNAME
                                        @GIFTINKINDDISPOSITIONCODE, @GIFTINKINDNUMBEROFUNITS
                                        @GIFTINKINDFAIRMARKETVALUE, @PERCENTAGEBENEFITS, @TRANSACTIONCURRENCYID,
                                        @BASECURRENCYID, @BASEEXCHANGERATEID, @EXCHANGERATE, @CURRENTAPPUSERID,
                                        @SEPAMANDATEID, @TRANSACTIONID, @MERCHANTACCOUNTID, @VENDORID;

                declare @PLANNEDGIFTDESIGNATIONS xml
                set @PLANNEDGIFTDESIGNATIONS =
                (
                    select
                        ID,
                        TRANSACTIONAMOUNT as AMOUNT
                    from dbo.PLANNEDGIFTDESIGNATION
                    where PLANNEDGIFTID = @PLANNEDGIFTID
                    for xml raw('ITEM'),type,elements,root('AMOUNTSTOPRORATE'),binary base64
                )

                declare @SOURCEAMOUNT money;
                declare @DECIMALDIGITS tinyint;
                select
                    @SOURCEAMOUNT = case
                                        when dbo.UFN_PLANNEDGIFT_DESIGNATIONTRANSACTIONAMOUNT(PLANNEDGIFT.ID)>0
                                            then dbo.UFN_PLANNEDGIFT_DESIGNATIONTRANSACTIONAMOUNT(PLANNEDGIFT.ID)
                                        else
                                            PLANNEDGIFT.TRANSACTIONEXPECTEDGIFTAMOUNT
                                    end,
                    @DECIMALDIGITS = CURRENCY.DECIMALDIGITS
                from
                    dbo.PLANNEDGIFT
                left join
                    dbo.CURRENCY on CURRENCY.ID = PLANNEDGIFT.TRANSACTIONCURRENCYID
                where
                    PLANNEDGIFT.ID = @PLANNEDGIFTID;


                declare @SPLITS xml;

                -- Build splits xml for easier processing by the multicurrency splits conversion function.

                -- UFN_SPLITS_PRORATEAMOUNTS does its calculations in the transaction currency, giving us

                -- transaction amounts we can then convert to base and organization amounts.

                set @SPLITS = (
                    select
                        @ID [REVENUEID],
                        PLANNEDGIFTDESIGNATION.DESIGNATIONID [DESIGNATIONID],
                        PRORATEDDESIGNATIONS.AMOUNT [AMOUNT],
                        0 [TYPECODE],            -- Gift

                        0 [APPLICATIONCODE]        -- Designation

                    from dbo.UFN_SPLITS_PRORATEAMOUNTS(@SOURCEAMOUNT, @AMOUNT, @DECIMALDIGITS, @PLANNEDGIFTDESIGNATIONS) PRORATEDDESIGNATIONS
                        inner join dbo.PLANNEDGIFTDESIGNATION on PLANNEDGIFTDESIGNATION.ID = PRORATEDDESIGNATIONS.ID
                    for xml raw('ITEM'),type,elements,root('SPLITS'),BINARY BASE64
                );

                declare @ORGANIZATIONCURRENCYID uniqueidentifier;
                declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
                set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
                set @ORGANIZATIONEXCHANGERATEID = dbo.UFN_CURRENCYEXCHANGERATE_GETLATESTORGANIZATIONRATE(@BASECURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENTDATE, null, @TRANSACTIONCURRENCYID);

                --Multicurrency - RobertDi 6/1/10 - Process the splits xml to calculate the base and organization amounts and place them in proper nodes.

                set @SPLITS = dbo.UFN_REVENUESPLIT_CONVERTAMOUNTSINXML(@SPLITS,@BASECURRENCYID,@ORGANIZATIONEXCHANGERATEID,@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID);
                exec dbo.USP_REVENUE_GETSPLITS_2_ADDFROMXML @ID, @SPLITS, @CHANGEAGENTID, @CURRENTDATE;


                exec dbo.USP_PAYMENT_ADDGIFTFEES @ID, @CONSTITUENTID, @CHANGEAGENTID, @CURRENTDATE;

                insert into dbo.PLANNEDGIFTREVENUESPLIT (PLANNEDGIFTID, REVENUESPLITID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                select @PLANNEDGIFTID, REVENUESPLIT.ID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
                from dbo.REVENUESPLIT where REVENUEID = @ID

                -- Create recognitions

                exec dbo.USP_REVENUE_CREATERECOGNITIONS_WITHAMOUNT @ID, @RECOGNITIONAMOUNT, @CHANGEAGENTID, @CURRENTDATE;

                -- Default campaigns from the planned gift

                insert into dbo.REVENUESPLITCAMPAIGN (REVENUESPLITID, CAMPAIGNID, CAMPAIGNSUBPRIORITYID, DATEADDED, DATECHANGED, ADDEDBYID, CHANGEDBYID)
                select
                    REVENUESPLIT.ID,
                    PLANNEDGIFTDESIGNATIONCAMPAIGN.CAMPAIGNID,
                    PLANNEDGIFTDESIGNATIONCAMPAIGN.CAMPAIGNSUBPRIORITYID,
                    @CURRENTDATE
                    @CURRENTDATE,
                    @CHANGEAGENTID,
                    @CHANGEAGENTID
                from dbo.REVENUESPLIT
                inner join dbo.PLANNEDGIFTDESIGNATION on REVENUESPLIT.DESIGNATIONID = PLANNEDGIFTDESIGNATION.DESIGNATIONID
                inner join dbo.PLANNEDGIFTDESIGNATIONCAMPAIGN on PLANNEDGIFTDESIGNATION.ID = PLANNEDGIFTDESIGNATIONCAMPAIGN.PLANNEDGIFTDESIGNATIONID
                where
                    REVENUESPLIT.REVENUEID = @ID and 
                    PLANNEDGIFTDESIGNATION.PLANNEDGIFTID = @PLANNEDGIFTID


                exec dbo.USP_PDACCOUNTSYSTEM_LINKTOREVENUE
                    @ID = @ID,
                    @PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID,
                    @CHANGEDATE = @CURRENTDATE,
                    @CHANGEAGENTID = @CHANGEAGENTID    

                if @POSTSTATUSCODE <> 2
                begin
                  -- Save the GL distributions

                  exec dbo.USP_SAVE_REVENUEGLDISTRIBUTION @ID, @CHANGEAGENTID, @CURRENTDATE

                  -- save any benefit distributions                

                  exec dbo.USP_SAVE_PAYMENT_BENEFITGLDISTRIBUTION @ID, @CHANGEAGENTID, @CURRENTDATE;                
                end

                exec dbo.USP_PLANNEDGIFTREVENUE_DEFAULTSOLICITORS @PLANNEDGIFTID, @ID, @CHANGEAGENTID, @CURRENTDATE
            end try

            begin catch
                exec dbo.USP_RAISE_ERROR;

                return 1;
            end catch

            return 0;