USP_REVENUEBATCH_ADDSOLICITORS

Add solicitors to the system from a revenue batch.

Parameters

Parameter Parameter Type Mode Description
@REVENUEID uniqueidentifier IN
@SOLICITORS xml IN
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN

Definition

Copy


            CREATE procedure dbo.USP_REVENUEBATCH_ADDSOLICITORS
            (
                @REVENUEID uniqueidentifier,
                @SOLICITORS xml,
                @CHANGEAGENTID uniqueidentifier,
                @CHANGEDATE datetime
            )
            as
            set nocount on;

            declare @BASECURRENCYID uniqueidentifier;
            declare @ORGANIZATIONCURRENCYID uniqueidentifier;
            declare @DATE datetime;

            select
                @BASECURRENCYID = BASECURRENCYID,
                @DATE = DATE
            from dbo.REVENUE where ID = @REVENUEID;

            -- Process the solicitors xml to calculate organization amounts.

            --Multicurrency - SlyyMu 8/19/10 - Get the updated exchange rate.

            declare @BASETOORGANIZATIONEXCHANGERATEID uniqueidentifier;

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

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

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

            begin try
                declare @REVENUESPLITID uniqueidentifier, @SPLITCOUNT int
                select @SPLITCOUNT = count(*) from dbo.REVENUESPLIT
                where 
                    REVENUEID = @REVENUEID and 
                    -- Only include donations since solicitors for other applications 

                    -- will be created when applied

                    APPLICATIONCODE in (0, 4, 7)

                -- Determine if there are multiple splits for this revenue

                if @SPLITCOUNT > 1
                begin
                    declare @FULLAMOUNT money, @SPLITAMOUNT money, @SPLITSOLICITORS xml
                    select @FULLAMOUNT = AMOUNT from dbo.REVENUE where ID = @REVENUEID

                    -- Loop through splits

                    declare SPLIT_CURSOR cursor local fast_forward for
                        select ID, AMOUNT from dbo.REVENUESPLIT
                        where 
                            REVENUEID = @REVENUEID and 
                            -- Only include donations since solicitors for other applications 

                            -- will be created when applied

                            APPLICATIONCODE = 0

                    open SPLIT_CURSOR

                    fetch next from SPLIT_CURSOR into @REVENUESPLITID, @SPLITAMOUNT;
                    while @@FETCH_STATUS = 0
                    begin
                        -- Calculate the prorated amount per split

                        set @SPLITSOLICITORS = (select
                                ID, 
                                AMOUNT 
                            from dbo.UFN_REVENUE_GETSOLICITORS_FROMITEMLISTXML(@SOLICITORS)
                            for xml raw('ITEM'),type,elements,root('AMOUNTSTOPRORATE'),binary base64)

                        declare @BASEDECIMALDIGITS tinyint;
                        select @BASEDECIMALDIGITS = DECIMALDIGITS from dbo.CURRENCY where CURRENCY.ID = @BASECURRENCYID

                        set @SPLITSOLICITORS = (select
                                newid() as ID,
                                R.CONSTITUENTID,
                                PRS.AMOUNT,
                                R.SEQUENCE,
                                @BASECURRENCYID as BASECURRENCYID,
                                case
                                    when @BASECURRENCYID <> @ORGANIZATIONCURRENCYID
                                        then dbo.UFN_CURRENCY_CONVERT(PRS.AMOUNT, @BASETOORGANIZATIONEXCHANGERATEID)
                                    else PRS.AMOUNT
                                end ORGANIZATIONAMOUNT,    
                                @BASETOORGANIZATIONEXCHANGERATEID as ORGANIZATIONEXCHANGERATEID
                            from dbo.UFN_SPLITS_PRORATEAMOUNTS(@FULLAMOUNT, @SPLITAMOUNT, @BASEDECIMALDIGITS, @SPLITSOLICITORS) PRS
                            cross apply dbo.UFN_REVENUE_GETSOLICITORS_FROMITEMLISTXML(@SOLICITORS) R
                            where PRS.ID = R.ID
                            for xml raw('ITEM'),type,elements,root('SOLICITORS'),binary base64)

                        exec dbo.USP_REVENUE_GETSOLICITORS_2_ADDFROMXML @REVENUESPLITID, @SPLITSOLICITORS, @CHANGEAGENTID, @CHANGEDATE;

                        fetch next from SPLIT_CURSOR into @REVENUESPLITID, @SPLITAMOUNT;
                    end

                    close SPLIT_CURSOR    
                    deallocate SPLIT_CURSOR    
                end
                else
                begin
                    select top 1 @REVENUESPLITID = ID from dbo.REVENUESPLIT
                    where 
                        REVENUEID = @REVENUEID and 
                        -- Only include donations since solicitors for other applications 

                        -- will be created when applied

                        APPLICATIONCODE in (0, 4, 7)

                    -- Process the solicitors xml to calculate organization amounts.

                    set @SOLICITORS = dbo.UFN_REVENUESOLICITOR_CONVERTAMOUNTSINXML(@SOLICITORS,@BASECURRENCYID,@BASETOORGANIZATIONEXCHANGERATEID);

                    exec dbo.USP_REVENUE_GETSOLICITORS_2_ADDFROMXML @REVENUESPLITID, @SOLICITORS, @CHANGEAGENTID, @CHANGEDATE;
                end
            end try
            begin catch
                exec dbo.USP_RAISE_ERROR;
                return 1;
            end catch

            return 0;