USP_DATAFORMTEMPLATE_EDITLOAD_RECURRINGGIFT_2

The load procedure used by the edit dataform template "Recurring Gift Edit Form 2"

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter used to load the fields defined on the form.
@DATALOADED bit INOUT Output parameter indicating whether or not data was actually loaded.
@REVENUEID uniqueidentifier INOUT
@CONSTITUENTID uniqueidentifier INOUT Constituent
@CONSTITUENTNAME nvarchar(700) INOUT Constituent
@DATE datetime INOUT Date
@AMOUNT money INOUT Amount
@SPLITS xml INOUT Designations
@FREQUENCYCODE tinyint INOUT Frequency
@ENDDATE datetime INOUT Ending on
@STARTDATE datetime INOUT Starting on
@FINDERNUMBER bigint INOUT Finder number
@SOURCECODE nvarchar(50) INOUT Source code
@APPEALID uniqueidentifier INOUT Appeal
@GIVENANONYMOUSLY bit INOUT Recurring gift is anonymous
@MAILINGID uniqueidentifier INOUT Effort
@CHANNELCODEID uniqueidentifier INOUT Inbound channel
@DONOTACKNOWLEDGE bit INOUT Do not acknowledge
@MAXSOLICITORAMOUNT money INOUT Max solicitor amount
@TSLONG bigint INOUT Output parameter indicating the TSLONG value of the record being edited. This is used to manage multi-user concurrency issues when multiple users access the same record.
@SINGLEDESIGNATIONID uniqueidentifier INOUT Designation
@FINDERNUMBERVALID bit INOUT FINDERNUMBERVALID
@REFERENCE nvarchar(255) INOUT Reference
@CATEGORYCODEID uniqueidentifier INOUT Revenue category
@SENDREMINDER bit INOUT Send reminders
@NEXTINSTALLMENTID uniqueidentifier INOUT
@LASTACTIVITYDATE date INOUT
@EDITSTARTDATE bit INOUT
@ISSPONSORSHIP bit INOUT
@REVENUEDEVELOPMENTFUNCTIONCODEID uniqueidentifier INOUT Revenue function
@BASECURRENCYID uniqueidentifier INOUT Base currency
@TRANSACTIONCURRENCYID uniqueidentifier INOUT Transaction currency
@BASEEXCHANGERATEID uniqueidentifier INOUT Exchange rate ID
@EXCHANGERATE decimal(20, 8) INOUT Exchange rate
@HADSPOTRATE bit INOUT Had spot rate
@RATECHANGED bit INOUT Rate changed
@BASEDECIMALDIGITS tinyint INOUT Decimal digits
@BASEROUNDINGTYPECODE tinyint INOUT Rounding type
@TRANSACTIONCURRENCYDESCRIPTION nvarchar(110) INOUT Transaction currency description
@SPONSORSHIPOPPORTUNITYID uniqueidentifier INOUT
@HASRECOGNITIONCREDIT bit INOUT
@UPDATERECOGNITIONOPTION tinyint INOUT
@SCHEDULESEEDDATE datetime INOUT Next transaction
@ISMEMBERSHIPRECURRING bit INOUT
@PREVIOUSSCHEDULESEEDDATE datetime INOUT
@STATUSCODE tinyint INOUT

Definition

Copy


CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDITLOAD_RECURRINGGIFT_2
(
    @ID uniqueidentifier,
    @DATALOADED bit = 0 output,    
    @REVENUEID uniqueidentifier = null output,
    @CONSTITUENTID uniqueidentifier = null output,
    @CONSTITUENTNAME nvarchar(700) = null output,
    @DATE datetime = null output,
    @AMOUNT money = null output,
    @SPLITS xml = null output,
    @FREQUENCYCODE tinyint = null output,
    @ENDDATE datetime = null output,
    @STARTDATE datetime = null output,
    @FINDERNUMBER bigint = null output,
    @SOURCECODE nvarchar(50) = null output,
    @APPEALID uniqueidentifier = null output,
    @GIVENANONYMOUSLY bit = null output,
    @MAILINGID uniqueidentifier = null output,
    @CHANNELCODEID uniqueidentifier = null output,
    @DONOTACKNOWLEDGE bit = null output,
    @MAXSOLICITORAMOUNT money = null output,
    @TSLONG bigint = 0 output,
    @SINGLEDESIGNATIONID uniqueidentifier = null output,
    @FINDERNUMBERVALID bit = null output,
    @REFERENCE nvarchar(255) = null output,
    @CATEGORYCODEID uniqueidentifier = null output,
    @SENDREMINDER bit = null output,
    @NEXTINSTALLMENTID uniqueidentifier = null output,
    @LASTACTIVITYDATE date = null output,
    @EDITSTARTDATE bit = null output,
    @ISSPONSORSHIP bit = null output,
    @REVENUEDEVELOPMENTFUNCTIONCODEID uniqueidentifier = null output,
    @BASECURRENCYID uniqueidentifier = null output,
    @TRANSACTIONCURRENCYID uniqueidentifier = null output,
    @BASEEXCHANGERATEID uniqueidentifier = null output,
    @EXCHANGERATE decimal(20,8) = null output,
    @HADSPOTRATE bit = null output,
    @RATECHANGED bit = null output,
    @BASEDECIMALDIGITS tinyint = null output,
    @BASEROUNDINGTYPECODE tinyint = null output,
    @TRANSACTIONCURRENCYDESCRIPTION nvarchar(110) = null output,
    @SPONSORSHIPOPPORTUNITYID uniqueidentifier = null output,
    @HASRECOGNITIONCREDIT bit = null output,
    @UPDATERECOGNITIONOPTION tinyint = null output,
    @SCHEDULESEEDDATE datetime = null output,
    @ISMEMBERSHIPRECURRING bit = null output,
    @PREVIOUSSCHEDULESEEDDATE datetime = null output,
    @STATUSCODE tinyint = null output
)

as

    set nocount on;

    set @DATALOADED = 0;
    set @TSLONG = 0;                

    select
        @DATALOADED = 1,
        @DATE = cast(REVENUE.DATE as datetime),
        @TSLONG = REVENUE.TSLONG,
        @CONSTITUENTNAME = NF.NAME,
        @CONSTITUENTID = REVENUE.CONSTITUENTID,
        @AMOUNT = REVENUE.TRANSACTIONAMOUNT,
        @FINDERNUMBER = REVENUE_EXT.FINDERNUMBER,
        @SOURCECODE = REVENUE_EXT.SOURCECODE,
        @APPEALID = REVENUE_EXT.APPEALID,
        @GIVENANONYMOUSLY = REVENUE_EXT.GIVENANONYMOUSLY,
        @MAILINGID = REVENUE_EXT.MAILINGID,
        @CHANNELCODEID = REVENUE_EXT.CHANNELCODEID,
        @DONOTACKNOWLEDGE = REVENUE_EXT.DONOTACKNOWLEDGE,
        @MAXSOLICITORAMOUNT = coalesce((select max(AMOUNT) from dbo.REVENUESOLICITOR where REVENUESPLITID = REVENUE.ID), 0),
        @REFERENCE = REVENUE_EXT.REFERENCE,
        @CATEGORYCODEID = (select top 1 GLREVENUECATEGORYMAPPINGID from dbo.REVENUECATEGORY inner join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT on REVENUECATEGORY.ID = REVENUESPLIT.ID inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = REVENUESPLIT.ID where REVENUESPLIT.FINANCIALTRANSACTIONID = REVENUE.ID and REVENUESPLIT.DELETEDON is null and REVENUESPLIT.TYPECODE != 1),
        @BASECURRENCYID = isnull(REVENUE_EXT.NONPOSTABLEBASECURRENCYID, V.BASECURRENCYID),
        @TRANSACTIONCURRENCYID = REVENUE.TRANSACTIONCURRENCYID,
        @BASEEXCHANGERATEID = REVENUE.BASEEXCHANGERATEID,
        @EXCHANGERATE = CURRENCYEXCHANGERATE.RATE,
        @HADSPOTRATE = 
            case
                when CURRENCYEXCHANGERATE.TYPECODE = 2
                    then 1
                else 0
            end,
        @RATECHANGED = 0,
        @BASEDECIMALDIGITS = CURRENCY.DECIMALDIGITS,
        @BASEROUNDINGTYPECODE = CURRENCY.ROUNDINGTYPECODE,
        @TRANSACTIONCURRENCYDESCRIPTION = dbo.UFN_CURRENCY_GETDESCRIPTION(REVENUE.TRANSACTIONCURRENCYID)
    from 
        dbo.FINANCIALTRANSACTION REVENUE
        inner join dbo.REVENUE_EXT on REVENUE.ID = REVENUE_EXT.ID
        left outer join  dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I V with (noexpand) on REVENUE.ID = V.FINANCIALTRANSACTIONID
        outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME(REVENUE.CONSTITUENTID) NF
        inner join dbo.CURRENCY on CURRENCY.ID = V.BASECURRENCYID
        left join dbo.CURRENCYEXCHANGERATE on CURRENCYEXCHANGERATE.ID = REVENUE.BASEEXCHANGERATEID
    where 
        REVENUE.ID = @ID and REVENUE.TYPECODE = 2 and REVENUE.DELETEDON is null;

    set @REVENUEID = @ID;

    select top 1
        @FREQUENCYCODE = FREQUENCYCODE,
        @ENDDATE = ENDDATE,
        @SCHEDULESEEDDATE = NEXTTRANSACTIONDATE,
        @STARTDATE = STARTDATE,
        @SENDREMINDER = SENDPLEDGEREMINDER,
        @STATUSCODE = STATUSCODE
    from dbo.REVENUESCHEDULE
    where ID = @ID;

    set @EDITSTARTDATE = 1;

    if exists(select 'x' from dbo.RECURRINGGIFTINSTALLMENT where REVENUEID = @ID)
    begin
        set @SCHEDULESEEDDATE = null;

        select @LASTACTIVITYDATE = max(ACTIVITYINSTALLMENT.DATE)
        from dbo.RECURRINGGIFTINSTALLMENT ACTIVITYINSTALLMENT
        left join dbo.RECURRINGGIFTINSTALLMENTPAYMENT on RECURRINGGIFTINSTALLMENTPAYMENT.RECURRINGGIFTINSTALLMENTID = ACTIVITYINSTALLMENT.ID
        left join dbo.RECURRINGGIFTINSTALLMENTWRITEOFF on RECURRINGGIFTINSTALLMENTWRITEOFF.RECURRINGGIFTINSTALLMENTID = ACTIVITYINSTALLMENT.ID
        where ACTIVITYINSTALLMENT.REVENUEID = @ID
            and (RECURRINGGIFTINSTALLMENTPAYMENT.ID is not null or
                    RECURRINGGIFTINSTALLMENTWRITEOFF.ID is not null)

        -- first installment w/ no activity, and after which there is no activity

        if @STATUSCODE in(0,1,5)
        begin
            select top 1
                @NEXTINSTALLMENTID = ID,
                @SCHEDULESEEDDATE = DATE
            from dbo.RECURRINGGIFTINSTALLMENT
            where REVENUEID = @ID
            and (DATE > @LASTACTIVITYDATE or @LASTACTIVITYDATE is null)
            order by DATE;

          -- if the last installment is partially paid or written-off, and it is today

          -- or in the future, there will be no next installment

          -- In that case, determine what the next installment date would be.

          if @SCHEDULESEEDDATE is null
            set @SCHEDULESEEDDATE = dbo.UFN_REVENUE_GETNEXTTRANSACTIONDATE_BYID_1_1(@ID,@LASTACTIVITYDATE);

          -- But don't go past the end date

          if @SCHEDULESEEDDATE > @ENDDATE
            set @SCHEDULESEEDDATE = null;
        end

        set @PREVIOUSSCHEDULESEEDDATE = @SCHEDULESEEDDATE
    end
    else
        select @LASTACTIVITYDATE = max(SCHEDULEDATE)
        from dbo.RECURRINGGIFTACTIVITY
        where SOURCEREVENUEID = @ID;

    if @SCHEDULESEEDDATE is null and @STATUSCODE not in (0,1,5)
        set @EDITSTARTDATE = 0;

    set @SPLITS = (
        select 
            SPLITS.TRANSACTIONAMOUNT AMOUNT, 
            SPLITS.APPLICATIONCODE, 
            SPLITS.CATEGORYCODEID, 
            SPLITS.DECLINESGIFTAID, 
            SPLITS.DESIGNATIONID, 
            SPLITS.ID, 
            SPLITS.TYPECODE,
            SPLITS.TRANSACTIONCURRENCYID
        from 
            dbo.UFN_REVENUE_GETSPLITS_2(@ID) SPLITS
            left join dbo.DESIGNATION on DESIGNATION.ID = SPLITS.DESIGNATIONID
        order by 
            DESIGNATION.VANITYNAME
        for xml raw('ITEM'),type,elements,root('SPLITS'),BINARY BASE64
    );

    if exists(select REVENUESPLIT.ID
            from dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT
            inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT.ID = REVENUESPLIT_EXT.ID
            inner join dbo.MEMBERSHIPTRANSACTION on MEMBERSHIPTRANSACTION.REVENUESPLITID = REVENUESPLIT.ID
            where REVENUESPLIT.FINANCIALTRANSACTIONID = @ID and REVENUESPLIT.DELETEDON is null and REVENUESPLIT.TYPECODE != 1
            )
        begin
                set @ISMEMBERSHIPRECURRING = 1
        end
        else
        begin
                set @ISMEMBERSHIPRECURRING = 0
        end

    if @FINDERNUMBER = 0
        set @FINDERNUMBER = null;

    if (not @FINDERNUMBER is null)
        set @FINDERNUMBERVALID = 1;
    else
        set @FINDERNUMBERVALID = 0;

    if exists(select 1 from dbo.FINANCIALTRANSACTIONLINEITEM FTLI, dbo.REVENUESPLIT_EXT RSX where FTLI.FINANCIALTRANSACTIONID = @ID and FTLI.ID = RSX.ID AND RSX.TYPECODE = 9)
        set @ISSPONSORSHIP = 1;
    else
        set @ISSPONSORSHIP = 0;

    select @HASRECOGNITIONCREDIT = count(1)
    from dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT
        inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT.ID = REVENUESPLIT_EXT.ID
        inner join dbo.REVENUERECOGNITION on REVENUERECOGNITION.REVENUESPLITID = REVENUESPLIT.ID
    where REVENUESPLIT.FINANCIALTRANSACTIONID = @ID and REVENUESPLIT.DELETEDON is null and REVENUESPLIT.TYPECODE != 1
    set @UPDATERECOGNITIONOPTION = 0;

    return 0;