USP_ADDPLANNEDGIFTPAYOUT

This stored procedure handles adding a planned gift payout.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@AMOUNT money IN
@DATE datetime IN
@RECEIPTAMOUNT money IN
@CHANGEAGENTID uniqueidentifier IN
@ANONYMOUS bit IN
@REVENUEID uniqueidentifier IN
@GENERATEGLDISTRIBUTIONS bit IN
@TRANSACTIONCURRENCYID uniqueidentifier IN
@BASECURRENCYID uniqueidentifier IN
@BASEEXCHANGERATEID uniqueidentifier IN

Definition

Copy


            CREATE procedure dbo.USP_ADDPLANNEDGIFTPAYOUT(
                @ID uniqueidentifier, 
                @AMOUNT money,
                @DATE datetime,
                @RECEIPTAMOUNT money,
                @CHANGEAGENTID uniqueidentifier,
                @ANONYMOUS bit,
                @REVENUEID uniqueidentifier,
                @GENERATEGLDISTRIBUTIONS bit,
                @TRANSACTIONCURRENCYID uniqueidentifier = null,
                @BASECURRENCYID uniqueidentifier = null,
                @BASEEXCHANGERATEID uniqueidentifier = null
            )
            as begin
                set nocount on;

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

                declare @CURRENTDATE datetime;    
                set @CURRENTDATE = getdate();          

                declare @CONSTITUENTID uniqueidentifier;
                declare @PLANNEDGIFTAMOUNT money;
                select 
                    @CONSTITUENTID = CONSTITUENTID,
                    @PLANNEDGIFTAMOUNT = TRANSACTIONGIFTAMOUNT
                from dbo.PLANNEDGIFT
                where ID = @ID;

                --Get current designations                

                declare @SPLITS xml = dbo.UFN_PLANNEDGIFT_DESIGNATION_2_TOITEMLISTXML(@ID);

                --Splits with the same designation need to be combined

                set @SPLITS = (
                    select 
                        sum(TRANSACTIONAMOUNT) as AMOUNT, 
                        DESIGNATIONID,
                        TRANSACTIONCURRENCYID
                    from dbo.UFN_PLANNEDGIFT_DESIGNATION_2_FROMITEMLISTXML(@SPLITS)
                    group by DESIGNATIONID, TRANSACTIONCURRENCYID
                    for xml raw('ITEM'),type,elements,root('DESIGNATION'),binary base64
                )

                --Need to prorate splits if using amount other than gift amount

                set @SPLITS = dbo.UFN_PLANNEDGIFTGETSPLITS_XML(@PLANNEDGIFTAMOUNT, @AMOUNT, @SPLITS); 

                declare @COUNT int;

                begin try
                    exec dbo.USP_PLANNEDGIFT_VALIDATESPLITS @SPLITS, @AMOUNT;

                    select 
                        @COUNT = count(ID) 
                    from dbo.PLANNEDGIFTPAYOUT PGP
                    where PGP.ID = @ID;

                    if @COUNT > 0 
                        raiserror('A planned gift can only be linked to one payout record.', 13, 1);

                    declare @PAYMENTMETHODID uniqueidentifier;
                    set @PAYMENTMETHODID = newid();

                    insert into dbo.PLANNEDGIFTPAYOUT (ID, REVENUEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                        values (@ID, @REVENUEID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);

                    --Multicurrency - AdamBu 5/19/10 - Process the splits xml to calculate the base and organization amounts and place them in proper nodes.

                    declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier
                    select
                        @ORGANIZATIONEXCHANGERATEID = ORGANIZATIONEXCHANGERATEID
                    from REVENUE
                    where ID = @REVENUEID;
                    set @SPLITS = dbo.UFN_PLANNEDGIFTDESIGNATION_CONVERTAMOUNTSINXML(@SPLITS,@BASECURRENCYID,@ORGANIZATIONEXCHANGERATEID,@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID)
                    exec dbo.USP_PLANNEDGIFT_GETPAYOUTSPLITS_ADDFROMXML_2 @REVENUEID, @SPLITS, @CHANGEAGENTID, @CURRENTDATE;                    

                    --Save the payout GL distributions

                    if @GENERATEGLDISTRIBUTIONS = 1
                        exec dbo.USP_SAVE_PLANNEDGIFTPAYOUTGLDISTRIBUTION @REVENUEID,@ID, @CHANGEAGENTID, @CURRENTDATE;

                end try

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