USP_DATAFORMTEMPLATE_VIEW_REVENUEUPDATEBATCH_GETREVENUE

The load procedure used by the view dataform template "Revenue Update Batch Get Revenue"

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.
@REVENUESPLITID uniqueidentifier INOUT Revenue Split
@CONSTITUENTID uniqueidentifier INOUT Constituent
@AMOUNT money INOUT Amount
@DATE datetime INOUT Date
@TYPECODE tinyint INOUT Revenue type
@PAYMENTMETHODCODE tinyint INOUT Payment method
@APPLICATIONINFO nvarchar(60) INOUT Application
@APPEALID uniqueidentifier INOUT Appeal
@OPPORTUNITYID uniqueidentifier INOUT Opportunity
@SINGLEDESIGNATIONID uniqueidentifier INOUT Designation
@POSTSTATUSCODE tinyint INOUT GL post status
@POSTDATE datetime INOUT GL post date
@DONOTACKNOWLEDGE bit INOUT Do not acknowledge
@DONOTRECEIPT bit INOUT Do not receipt
@MAILINGID uniqueidentifier INOUT Effort
@FINDERNUMBER bigint INOUT Finder number
@SOURCECODE nvarchar(60) INOUT Source code
@CHANNELCODEID uniqueidentifier INOUT Inbound channel
@GIVENANONYMOUSLY bit INOUT Given anonymously
@OTHERPAYMENTMETHODCODEID uniqueidentifier INOUT Other method
@RECEIPTAMOUNT money INOUT Receipt amount
@RECEIPTTYPECODE tinyint INOUT Receipt type
@REFERENCE nvarchar(255) INOUT Reference
@CATEGORYCODEID uniqueidentifier INOUT Revenue category
@REVENUELOOKUPID nvarchar(100) INOUT Revenue ID
@ISADJUSTMENT bit INOUT ISADJUSTMENT
@ADJUSTMENTDATE datetime INOUT Adjustment date
@ADJUSTMENTPOSTDATE datetime INOUT Adjustment post date
@ADJUSTMENTPOSTSTATUSCODE tinyint INOUT Adjustment post status
@ADJUSTMENTREASON nvarchar(300) INOUT Adjustment details
@ADJUSTMENTREASONCODEID uniqueidentifier INOUT Adjustment reason
@CHECKDATE UDT_FUZZYDATE INOUT Check date
@CHECKNUMBER nvarchar(20) INOUT Check number
@CREDITTYPECODEID uniqueidentifier INOUT Card type
@CREDITCARDNUMBER nvarchar(20) INOUT Card number
@CARDHOLDERNAME nvarchar(255) INOUT Name on card
@EXPIRESON UDT_FUZZYDATE INOUT Expires on
@AUTHORIZATIONCODE nvarchar(20) INOUT Authorization code
@CONSTITUENTACCOUNTID uniqueidentifier INOUT Account
@DIRECTDEBITISREJECTED bit INOUT Direct debit is rejected
@DIRECTDEBITRESULTCODE nvarchar(10) INOUT Result code
@REFERENCEDATE UDT_FUZZYDATE INOUT Reference date
@REFERENCENUMBER nvarchar(20) INOUT Reference number
@GIFTINKINDITEMNAME nvarchar(100) INOUT Item name
@GIFTINKINDDISPOSITIONCODE tinyint INOUT Disposition
@GIFTINKINDNUMBEROFUNITS int INOUT Gift-in-kind number of units
@GIFTINKINDFAIRMARKETVALUE money INOUT Fair market value per unit
@GIFTINKINDSUBTYPECODEID uniqueidentifier INOUT Gift-in-kind subtype
@PROPERTYSUBTYPECODEID uniqueidentifier INOUT Property subtype
@ISSUER nvarchar(100) INOUT Issuer
@NUMBEROFUNITS decimal(20, 3) INOUT Stock number of units
@SYMBOL nvarchar(25) INOUT Symbol
@MEDIANPRICE decimal(19, 4) INOUT Median price
@LOWPRICE decimal(19, 4) INOUT Low price
@HIGHPRICE decimal(19, 4) INOUT High price
@SPLITS xml INOUT Designations
@MULTIPLESPLITS bit INOUT MULTIPLESPLITS
@INSTALLMENTS xml INOUT Installments
@INSTALLMENTFREQUENCYCODE tinyint INOUT Installment frequency
@INSTALLMENTSTARTDATE datetime INOUT Installment start date
@INSTALLMENTENDDATE datetime INOUT Installment end date
@NUMBEROFINSTALLMENTS int INOUT No. installments
@SENDPLEDGEREMINDER bit INOUT Send reminders
@ACKNOWLEDGEDATE datetime INOUT Acknowledge date
@ACKNOWLEDGEEID uniqueidentifier INOUT Acknowledgee
@LETTERCODEID uniqueidentifier INOUT Letter
@LOCKBOXID uniqueidentifier INOUT Lockbox
@LOCKBOXBATCHNUMBER nvarchar(100) INOUT Lockbox batch number
@LOCKBOXBATCHSEQUENCE int INOUT Lockbox batch sequence
@ADDITIONALAPPLICATIONSSTREAM xml INOUT Additional applications stream
@NOTETITLE nvarchar(50) INOUT Note Title
@NOTEAUTHORID uniqueidentifier INOUT Note Author
@NOTEDATEENTERED datetime INOUT Note Date
@NOTETYPECODEID uniqueidentifier INOUT Note Type
@NOTETEXTNOTE nvarchar(max) INOUT Notes
@OTHERTYPECODEID uniqueidentifier INOUT Other type
@PLEDGESUBTYPEID uniqueidentifier INOUT Pledge subtype
@ORIGINALAPPLICATIONINFO nvarchar(60) INOUT ORIGINALAPPLICATIONINFO
@REVENUESTREAMS xml INOUT Revenue streams
@TRIBUTES xml INOUT Tributes
@BENEFITS xml INOUT Money benefits
@PERCENTAGEBENEFITS xml INOUT Percent benefits
@MATCHINGGIFTS xml INOUT Matching gifts
@APPLICATIONSOLICITORS xml INOUT Application solicitors
@APPLICATIONRECOGNITIONS xml INOUT Application recognitions
@APPLICATIONBUSINESSUNITS xml INOUT Application business units
@LETTERS xml INOUT Letters
@TRANSACTIONCURRENCYID uniqueidentifier INOUT Transaction currency
@BASECURRENCYID uniqueidentifier INOUT Base currency
@BASEEXCHANGERATEID uniqueidentifier INOUT Base exchange rate
@EXCHANGERATE decimal(20, 8) INOUT Exchange rate
@BASEAMOUNT money INOUT Base amount
@NOTES xml INOUT Notes
@ISSPONSORSHIPRG bit INOUT Is sponsorship RG
@LASTPAYMENTSEQUENCE int INOUT Installment sequence of last payment
@LASTUNPAIDROW int INOUT Sequence of last unpaid installment.
@PDACCOUNTSYSTEMID uniqueidentifier INOUT Account system
@AMOUNTFORVAT money INOUT Portion subject to VAT
@VATTAXRATEID uniqueidentifier INOUT VAT tax rate
@VATAMOUNT money INOUT VAT amount
@STANDINGORDERSETUP bit INOUT Standing order has been setup
@STANDINGORDERSETUPDATE datetime INOUT Setup on
@USESYSTEMGENERATEDREFERENCENUMBER bit INOUT Use system-generated reference number
@STANDINGORDERREFERENCENUMBER nvarchar(18) INOUT Reference number
@DDISOURCECODEID uniqueidentifier INOUT DDI source
@DDISOURCEDATE date INOUT DDI source date
@INSTALLMENTSCHEDULESEEDDATE date INOUT Installment next transaction date
@ISPOSTED bit INOUT ISPOSTED
@HASPOSTEDPAYMENTS bit INOUT
@ORIGINALINSTALLMENTS xml INOUT
@CREDITCARDTOKEN uniqueidentifier INOUT
@DEPOSITID uniqueidentifier INOUT
@PLEDGEAMOUNTPAID money INOUT
@NUMBEROFINSTALLMENTSFORWEBSHELL int INOUT
@HASSOLDFIXEDASSETS bit INOUT
@SALEAMOUNT money INOUT
@SALEDATE datetime INOUT
@BROKERFEE money INOUT
@SALEPOSTSTATUSCODE tinyint INOUT
@SALEPOSTDATE datetime INOUT
@GIFTAIDCOMMITTED bit INOUT
@RGSTATUSCODE tinyint INOUT
@INSTALLMENTAMOUNTFORWEBSHELL money INOUT
@INSTALLMENTAMOUNT money INOUT
@ADJPAYMENT_POSTDATEDEPOSIT date INOUT
@PROMPTONADJUSTMENTDATECHANGE bit INOUT
@BENEFITSWAIVED bit INOUT

Definition

Copy

CREATE procedure dbo.USP_DATAFORMTEMPLATE_VIEW_REVENUEUPDATEBATCH_GETREVENUE
(
    @ID uniqueidentifier,
    @DATALOADED bit = 0 output,
    @REVENUESPLITID uniqueidentifier = null output,
    @CONSTITUENTID uniqueidentifier = null output, --disabled  
    @AMOUNT money = null output,
    @DATE datetime = null output,
    @TYPECODE tinyint = null output, --disabled
    @PAYMENTMETHODCODE tinyint = null output,
    @APPLICATIONINFO nvarchar(60) = null output,
    @APPEALID uniqueidentifier = null output,
    @OPPORTUNITYID uniqueidentifier = null output,
    @SINGLEDESIGNATIONID uniqueidentifier = null output,
    @POSTSTATUSCODE tinyint = null output,
    @POSTDATE datetime = null output,
    @DONOTACKNOWLEDGE bit = null output,
    @DONOTRECEIPT bit = null output,
    @MAILINGID uniqueidentifier = null output,
    @FINDERNUMBER bigint = null output,
    @SOURCECODE nvarchar(60) = null output,
    @CHANNELCODEID uniqueidentifier = null output,
    @GIVENANONYMOUSLY bit = null output,
    @OTHERPAYMENTMETHODCODEID uniqueidentifier = null output,
    @RECEIPTAMOUNT money = null output,
    @RECEIPTTYPECODE tinyint = null output,
    @REFERENCE nvarchar(255) = null output,
    @CATEGORYCODEID uniqueidentifier = null output,
    @REVENUELOOKUPID nvarchar(100) = null output,
    @ISADJUSTMENT bit = null output,
    @ADJUSTMENTDATE datetime = null output,
    @ADJUSTMENTPOSTDATE datetime = null output,
    @ADJUSTMENTPOSTSTATUSCODE tinyint = null output,
    @ADJUSTMENTREASON nvarchar(300) = null output,
    @ADJUSTMENTREASONCODEID uniqueidentifier = null output,
    --check fields
    @CHECKDATE dbo.UDT_FUZZYDATE = null output,
    @CHECKNUMBER nvarchar(20) = null output,
    --credit card fields
    @CREDITTYPECODEID uniqueidentifier = null output,
    @CREDITCARDNUMBER nvarchar(20) = null output,
    @CARDHOLDERNAME nvarchar(255) = null output,
    @EXPIRESON dbo.UDT_FUZZYDATE = null output,
    @AUTHORIZATIONCODE nvarchar(20) = null output,
    --direct debit fields
    @CONSTITUENTACCOUNTID uniqueidentifier = null output,
    @DIRECTDEBITISREJECTED bit = null output,
    @DIRECTDEBITRESULTCODE nvarchar(10) = null output,
    @REFERENCEDATE dbo.UDT_FUZZYDATE = null output,
    @REFERENCENUMBER nvarchar(20) = null output,
    --gift in kind fields
    @GIFTINKINDITEMNAME nvarchar(100) = null output,
    @GIFTINKINDDISPOSITIONCODE tinyint = null output,
    @GIFTINKINDNUMBEROFUNITS int = null output,
    @GIFTINKINDFAIRMARKETVALUE money = null output,
    @GIFTINKINDSUBTYPECODEID uniqueidentifier = null output,
    --property details
    @PROPERTYSUBTYPECODEID uniqueidentifier = null output,
    --stock
    @ISSUER nvarchar(100) = null output,
    @NUMBEROFUNITS decimal(20,3) = null output,
    @SYMBOL nvarchar(25) = null output,
    @MEDIANPRICE decimal(19,4) = null output,
    @LOWPRICE decimal(19,4) = null output,
    @HIGHPRICE decimal(19,4) = null output,
    @SPLITS xml = null output,
    @MULTIPLESPLITS bit = null output,
    --installments
    @INSTALLMENTS xml = null output,  
    @INSTALLMENTFREQUENCYCODE tinyint = null output,
    @INSTALLMENTSTARTDATE datetime = null output,
    @INSTALLMENTENDDATE datetime = null output,
    @NUMBEROFINSTALLMENTS int = null output,
    @SENDPLEDGEREMINDER bit = null output,  
    @ACKNOWLEDGEDATE datetime = null output,  
    @ACKNOWLEDGEEID uniqueidentifier = null output,  
    @LETTERCODEID uniqueidentifier = null output,
    --lockbox
    @LOCKBOXID uniqueidentifier = null output,
    @LOCKBOXBATCHNUMBER nvarchar(100) = null output,
    @LOCKBOXBATCHSEQUENCE int = null output,
    @ADDITIONALAPPLICATIONSSTREAM xml = null output,
    --notes
    @NOTETITLE nvarchar(50) = null output,
    @NOTEAUTHORID uniqueidentifier = null output,
    @NOTEDATEENTERED datetime = null output,
    @NOTETYPECODEID uniqueidentifier = null output,
    @NOTETEXTNOTE nvarchar(max) = null output,
    --misc  
    @OTHERTYPECODEID uniqueidentifier = null output,    
    @PLEDGESUBTYPEID uniqueidentifier = null output,
    @ORIGINALAPPLICATIONINFO nvarchar(60) = null output,
    @REVENUESTREAMS xml = null output,
    @TRIBUTES xml = null output,
    @BENEFITS xml = null output,
    @PERCENTAGEBENEFITS xml = null output,
    @MATCHINGGIFTS xml = null output,
    @APPLICATIONSOLICITORS xml = null output,
    @APPLICATIONRECOGNITIONS xml = null output,
    @APPLICATIONBUSINESSUNITS xml = null output,
    @LETTERS xml = null output,
    @TRANSACTIONCURRENCYID uniqueidentifier = null output,
    @BASECURRENCYID uniqueidentifier = null output,
    @BASEEXCHANGERATEID uniqueidentifier = null output,
    @EXCHANGERATE decimal(20,8) = null output,
    @BASEAMOUNT money = null output,
    @NOTES xml = null output,
    @ISSPONSORSHIPRG bit = null output,
    @LASTPAYMENTSEQUENCE int = null output,
    @LASTUNPAIDROW int = null output,
    @PDACCOUNTSYSTEMID uniqueidentifier = null output,
     -- UK fields
    @AMOUNTFORVAT money = null output,
    @VATTAXRATEID uniqueidentifier = null output,
    @VATAMOUNT money = null output,
    @STANDINGORDERSETUP bit = null output,
    @STANDINGORDERSETUPDATE datetime = null output,
    @USESYSTEMGENERATEDREFERENCENUMBER bit = null output,
    @STANDINGORDERREFERENCENUMBER nvarchar(18) = null output,
    @DDISOURCECODEID uniqueidentifier = null output,
    @DDISOURCEDATE date = null output,
    @INSTALLMENTSCHEDULESEEDDATE date = null output,
    @ISPOSTED bit = null output,
    @HASPOSTEDPAYMENTS bit = null output,
    @ORIGINALINSTALLMENTS xml = null output,
    @CREDITCARDTOKEN uniqueidentifier = null output,
    @DEPOSITID uniqueidentifier = null output,
    @PLEDGEAMOUNTPAID money = null output,
    @NUMBEROFINSTALLMENTSFORWEBSHELL int = null output,
    @HASSOLDFIXEDASSETS bit = null output,
    @SALEAMOUNT money = null output,
    @SALEDATE datetime = null output,
    @BROKERFEE money = null output,
    @SALEPOSTSTATUSCODE tinyint = null output,
    @SALEPOSTDATE datetime = null output,
    @GIFTAIDCOMMITTED bit = null output,
    @RGSTATUSCODE tinyint = null output,
    @INSTALLMENTAMOUNTFORWEBSHELL money = null output,
    @INSTALLMENTAMOUNT money = null output,
    @ADJPAYMENT_POSTDATEDEPOSIT date = null output,
    @PROMPTONADJUSTMENTDATECHANGE bit = null output,
    @BENEFITSWAIVED bit = null output
)
as
    set nocount on;

    set @DATALOADED = 0;
    set @MULTIPLESPLITS = 0;

    --adjustment fields 
    declare @ISPAYMENT bit = 0;
    declare @ISPLEDGE bit = 0;
        declare @ISRECURRINGGIFT bit = 0;
    set @ISPOSTED  = 0;
    declare @ISMISCELLANEOUSPAYMENT bit = 0;
    declare @ISORDERAPPLICATION bit = 0;
    declare @HASGIFTAIDSPLITONPENDINGR68PROCESS bit;

    -- main batch row fields
    select 
        @DATALOADED = 1,
        @REVENUESPLITID =  case when (select count(*) from dbo.REVENUESPLIT where REVENUESPLIT.REVENUEID = R.ID) <> 1 then null
                                                         else (select ID from dbo.REVENUESPLIT where REVENUESPLIT.REVENUEID = R.ID) end,
        @CONSTITUENTID = R.CONSTITUENTID,
        @AMOUNT = R.TRANSACTIONAMOUNT,
        @DATE = R.DATE,
        @TYPECODE = case when R.TRANSACTIONTYPECODE = 2 then 3 else R.TRANSACTIONTYPECODE end,
        @PAYMENTMETHODCODE = case when (R.TRANSACTIONTYPECODE = 2 and RP.PAYMENTMETHODCODE = 2 and RS.CREDITCARDID is null) then 98 else RP.PAYMENTMETHODCODE end,
        @APPLICATIONINFO = dbo.UFN_REVENUEUPDATEBATCH_GETAPPLICATIONINFO(@ID),
        @APPEALID = R.APPEALID,
        @OPPORTUNITYID = case when (select count(*) from dbo.REVENUESPLIT where REVENUESPLIT.REVENUEID = R.ID) <> 1 then null
                                         else (select OPPORTUNITYID from dbo.REVENUEOPPORTUNITY RO inner join dbo.REVENUESPLIT RS on RS.ID = RO.ID
                                         where RS.REVENUEID = R.ID AND RS.APPLICATIONCODE IN (0,7)) end,
        @SINGLEDESIGNATIONID = case when (select count(*) from dbo.REVENUESPLIT where REVENUESPLIT.REVENUEID = R.ID) <> 1 then null
                                                         else (select DESIGNATIONID from dbo.REVENUESPLIT where REVENUESPLIT.REVENUEID = R.ID) end,
        @POSTSTATUSCODE = case when R.DONOTPOST = 1 then 2 else 1 end,
        @POSTDATE = R.POSTDATE,    
        @DONOTACKNOWLEDGE = R.DONOTACKNOWLEDGE,
        @DONOTRECEIPT = R.DONOTRECEIPT,
        @MAILINGID = R.MAILINGID,
        @FINDERNUMBER = case R.FINDERNUMBER when 0 then null else R.FINDERNUMBER end,
        @SOURCECODE = R.SOURCECODE,
        @CHANNELCODEID = R.CHANNELCODEID,
        @GIVENANONYMOUSLY  = R.GIVENANONYMOUSLY,
        @OTHERPAYMENTMETHODCODEID = OP.OTHERPAYMENTMETHODCODEID,  
        @RECEIPTAMOUNT = R.RECEIPTAMOUNT,
        @RECEIPTTYPECODE = R.RECEIPTTYPECODE,
        @REFERENCE = RR.REFERENCE,
                @CATEGORYCODEID = case 
                                                        when (select count(*) from dbo.REVENUESPLIT where REVENUESPLIT.REVENUEID = R.ID) <> 1 then 
                                                                case when (R.TRANSACTIONTYPECODE = 1 or R.TRANSACTIONTYPECODE = 2) -- display revenue category for pledge or recurring gift (it is the same for each split)
                                                                        then
                                                                        (select top 1 GLREVENUECATEGORYMAPPINGID from dbo.REVENUECATEGORY inner join dbo.REVENUESPLIT on REVENUESPLIT.ID = REVENUECATEGORY.ID where REVENUESPLIT.REVENUEID = R.ID)
                                                                 else
                                                                    null 
                                                                 end                                                                                
                                                         else (select GLREVENUECATEGORYMAPPINGID from dbo.REVENUECATEGORY inner join dbo.REVENUESPLIT on REVENUESPLIT.ID = REVENUECATEGORY.ID where REVENUESPLIT.REVENUEID = R.ID) end,                                             
        @REVENUELOOKUPID = R.LOOKUPID,
        @ISPAYMENT = case when R.TRANSACTIONTYPECODE = 0 then 1 else 0 end,
        @ISPOSTED = case when P.ID is null then 0 else 1 end,
        @ISPLEDGE = case when R.TRANSACTIONTYPECODE = 1 then 1 else 0 end,
                @ISRECURRINGGIFT = case when R.TRANSACTIONTYPECODE = 2 then 1 else 0 end,
                @SPLITS = case when R.TRANSACTIONTYPECODE in (1,2) then dbo.UFN_REVENUEUPDATEBATCH_GETSPLITS_TOITEMLISTXML(@ID) else null end,
                @INSTALLMENTS = case when R.TRANSACTIONTYPECODE = 1 then dbo.UFN_REVENUEUPDATEBATCH_LOADINSTALLMENTS_TOITEMLISTXML(@ID) else null end,
            @ORIGINALINSTALLMENTS = case when R.TRANSACTIONTYPECODE = 1 then dbo.UFN_REVENUEUPDATEBATCH_LOADINSTALLMENTS_TOITEMLISTXML(@ID) else null end,
                @INSTALLMENTFREQUENCYCODE = RS.FREQUENCYCODE, 
                @INSTALLMENTSTARTDATE = case when R.TRANSACTIONTYPECODE = 2 then RS.STARTDATE else coalesce(RS.NEXTTRANSACTIONDATE, RS.STARTDATE) end,
                @INSTALLMENTENDDATE = RS.ENDDATE,
                @NUMBEROFINSTALLMENTS = RS.NUMBEROFINSTALLMENTS,
                @SENDPLEDGEREMINDER = coalesce(RS.SENDPLEDGEREMINDER,1),
                @LOCKBOXID = RB.LOCKBOXID,
                @LOCKBOXBATCHNUMBER = RB.BATCHNUMBER,
                @LOCKBOXBATCHSEQUENCE = RB.BATCHSEQUENCE,
                @ADDITIONALAPPLICATIONSSTREAM = case when R.TRANSACTIONTYPECODE = 0 then dbo.UFN_REVENUEUPDATEBATCH_GETADDITIONALAPPLICATIONS_TOITEMLISTXML(@ID) else null end,
                --@NOTETITLE = RN.TITLE,
                --@NOTEAUTHORID = RN.AUTHORID,
                --@NOTEDATEENTERED = RN.DATEENTERED,
                --@NOTETYPECODEID = RN.REVENUENOTETYPECODEID,
                --@NOTETEXTNOTE = RN.TEXTNOTE,
                @OTHERTYPECODEID = case when (select count(*) from dbo.REVENUESPLIT where REVENUESPLIT.REVENUEID = R.ID) <> 1 then null
                                                                 else (select OTHERTYPECODEID from dbo.REVENUESPLITOTHER inner join dbo.REVENUESPLIT on REVENUESPLIT.ID = REVENUESPLITOTHER.ID where REVENUESPLIT.REVENUEID = R.ID) end,
                @PLEDGESUBTYPEID = RS.PLEDGESUBTYPEID,
                @REVENUESTREAMS = case when R.TRANSACTIONTYPECODE = 0 then dbo.UFN_REVENUEUPDATEBATCH_GETAPPLICATIONSTREAM_TOITEMLISTXML(@ID, R.CONSTITUENTID) else null end,
                @TRIBUTES = case when R.TRANSACTIONTYPECODE in (0,1) then dbo.UFN_REVENUEUPDATEBATCH_GETTRIBUTES_TOITEMLISTXML(@ID) else null end,
                @MATCHINGGIFTS = case when R.TRANSACTIONTYPECODE = 0 then dbo.UFN_REVENUEUPDATEBATCH_GETMATCHINGGIFTS_TOITEMLISTXML(@ID) else null end,
                @APPLICATIONRECOGNITIONS = dbo.UFN_REVENUEUPDATEBATCH_GETRECOGNITIONS_TOITEMLISTXML(@ID),
                @APPLICATIONSOLICITORS = dbo.UFN_REVENUEUPDATEBATCH_GETSOLICITORS_TOITEMLISTXML(@ID),
                @APPLICATIONBUSINESSUNITS = dbo.UFN_REVENUEUPDATEBATCH_GETBUSINESSUNITS(@ID, R.TRANSACTIONTYPECODE),
                @LETTERS = dbo.UFN_REVENUEUPDATEBATCH_GETREVENUELETTERS(@ID),
        @BASECURRENCYID = R.BASECURRENCYID,
        @TRANSACTIONCURRENCYID = R.TRANSACTIONCURRENCYID,
        @BASEEXCHANGERATEID = R.BASEEXCHANGERATEID,
        @EXCHANGERATE = CURRENCYEXCHANGERATE.RATE,
                @BASEAMOUNT = R.AMOUNT,
                @ISSPONSORSHIPRG = case when R.TRANSACTIONTYPECODE = 2 and (select top 1 TYPECODE from dbo.REVENUESPLIT where REVENUEID = @ID) = 9 then 1 else 0 end,
                @PDACCOUNTSYSTEMID = PDACCOUNTSYSTEMFORREVENUE.PDACCOUNTSYSTEMID,
            @AMOUNTFORVAT = REVENUEVAT.TRANSACTIONAMOUNTTOTAX,
            @VATTAXRATEID = REVENUEVAT.VATTAXRATEID,
            @VATAMOUNT = REVENUEVAT.TRANSACTIONVATAMOUNT,
            @PLEDGEAMOUNTPAID = case
                                when R.TRANSACTIONTYPECODE = 1 then (R.TRANSACTIONAMOUNT - dbo.UFN_PLEDGE_GETBALANCE(R.ID))
                                else null
                                end,
                @RGSTATUSCODE = RS.STATUSCODE
    from dbo.REVENUE R
    inner join dbo.REVENUEPAYMENTMETHOD RP on R.ID = RP.REVENUEID  
        left join dbo.PDACCOUNTSYSTEMFORREVENUE on R.ID = PDACCOUNTSYSTEMFORREVENUE.ID
    left join dbo.OTHERPAYMENTMETHODDETAIL OP on OP.ID = RP.ID
    left join dbo.REVENUEREFERENCE RR on R.ID = RR.ID
    left join dbo.REVENUEPOSTED P on P.ID = R.ID
    left join dbo.REVENUESCHEDULE RS on RS.ID = R.ID
    left join dbo.REVENUELETTER RL on RL.REVENUEID = R.ID
    left join dbo.REVENUELOCKBOX RB on RB.ID = R.ID
        left join dbo.REVENUENOTE RN on RN.REVENUEID = R.ID
        left join dbo.CURRENCYEXCHANGERATE on CURRENCYEXCHANGERATE.ID = R.BASEEXCHANGERATEID
        left join dbo.REVENUEVAT on R.ID = REVENUEVAT.ID
    where R.ID = @ID     

    -- If the revenue has been committed through the R68 process, we want to disable the gift aid fields
    if exists
        (
            select
                1
            from
                @ADDITIONALAPPLICATIONSSTREAM.nodes('/ADDITIONALAPPLICATIONSSTREAM/ITEM') T(c)
            where
                T.c.value('GIFTAIDCOMMITTED[1]', 'bit') = 1
        )
    begin
        set @GIFTAIDCOMMITTED = 1;
    end
    else
    begin
        set @GIFTAIDCOMMITTED = 0;
    end

    if not @APPLICATIONINFO is null
         set @ORIGINALAPPLICATIONINFO = @APPLICATIONINFO
         if len(@APPLICATIONINFO) > 3
                set @SINGLEDESIGNATIONID = null

    if @SINGLEDESIGNATIONID is null and @TYPECODE in (1,3)
        set @MULTIPLESPLITS = 1

    -- payment related fields

        exec dbo.USP_REVENUE_GETPAYMENTDETAILS
                @REVENUEID = @ID,            
                @CHECKDATE = @CHECKDATE output,
                @CHECKNUMBER = @CHECKNUMBER output,

                @CARDHOLDERNAME = @CARDHOLDERNAME output,
                @CREDITCARDNUMBER = @CREDITCARDNUMBER output,
                @CREDITTYPECODEID = @CREDITTYPECODEID output,
                @AUTHORIZATIONCODE = @AUTHORIZATIONCODE output,
                @EXPIRESON = @EXPIRESON output,

                @CONSTITUENTACCOUNTID = @CONSTITUENTACCOUNTID output,
                @DIRECTDEBITISREJECTED = @DIRECTDEBITISREJECTED output,
                @DIRECTDEBITRESULTCODE = @DIRECTDEBITRESULTCODE output,
                @REFERENCEDATE = @REFERENCEDATE output,
                @REFERENCENUMBER = @REFERENCENUMBER output,

                @GIFTINKINDITEMNAME = @GIFTINKINDITEMNAME output,
                @GIFTINKINDDISPOSITIONCODE = @GIFTINKINDDISPOSITIONCODE output,
                @GIFTINKINDNUMBEROFUNITS = @GIFTINKINDNUMBEROFUNITS output,
                @GIFTINKINDFAIRMARKETVALUE = @GIFTINKINDFAIRMARKETVALUE output,
                @GIFTINKINDSUBTYPECODEID = @GIFTINKINDSUBTYPECODEID output,

                @PROPERTYSUBTYPECODEID = @PROPERTYSUBTYPECODEID output,

                @ISSUER = @ISSUER output,
                @NUMBEROFUNITS = @NUMBEROFUNITS output,
                @SYMBOL = @SYMBOL output,
                @MEDIANPRICE = @MEDIANPRICE output,
                @LOWPRICE = @LOWPRICE output,
                @HIGHPRICE = @HIGHPRICE output,
                @SALEAMOUNT = @SALEAMOUNT output,
                @SALEDATE = @SALEDATE output,
                @BROKERFEE = @BROKERFEE output,
                @SALEPOSTSTATUSCODE = @SALEPOSTSTATUSCODE output,
                @SALEPOSTDATE = @SALEPOSTDATE output;

    if @PAYMENTMETHODCODE = 3 --Direct Debit
    begin
        --Direct Debit w/ Paperless mandate fields is UK only                        
        if dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('9568A6C2-F7AA-45fd-8F54-21FE9654EE2D') = 1
        begin
            select 
                @REFERENCEDATE = REFERENCEDATE,
                @REFERENCENUMBER = REFERENCENUMBER,
                @CONSTITUENTACCOUNTID = CONSTITUENTACCOUNTID,
                @DDISOURCECODEID = DDISOURCECODEID,
                @DDISOURCEDATE = DDISOURCEDATE
                --@SENDNEWINSTRUCTION = SENDPMINSTRUCTION,
                --@NEWINSTRUCTIONTOSEND = case when PMINSTRUCTIONTOSENDCODE = 0 then null else PMINSTRUCTIONTOSENDCODE end,
                --@PMINSTRUCTIONDATE_NEW = PMINSTRUCTIONDATE_NEW,
                --@PMINSTRUCTIONDATE_CANCEL = PMINSTRUCTIONDATE_CANCEL,
                --@PMINSTRUCTIONDATE_SETUP = PMINSTRUCTIONDATE_SETUP,
                --@PMADVANCENOTICESENTDATE = PMADVANCENOTICESENTDATE
            from dbo.REVENUESCHEDULEDIRECTDEBITPAYMENT
                where ID = @ID 
        end
        else
        begin
            select 
                @REFERENCEDATE = REFERENCEDATE,
                @REFERENCENUMBER = REFERENCENUMBER,
                @CONSTITUENTACCOUNTID = CONSTITUENTACCOUNTID
            from dbo.REVENUESCHEDULEDIRECTDEBITPAYMENT
                where ID = @ID
        end
    end
    if @PAYMENTMETHODCODE = 11 -- standing order
    begin
        select 
            @REFERENCEDATE = REFERENCEDATE,
            @REFERENCENUMBER = N'',
            @STANDINGORDERREFERENCENUMBER = dbo.UFN_STANDINGORDER_REFERENCENUMBER_FORDISPLAY(REVENUESCHEDULESTANDINGORDERPAYMENT.ID),
            @CONSTITUENTACCOUNTID = CONSTITUENTACCOUNTID,
                 @STANDINGORDERSETUP = STANDINGORDERSETUP,
                 @STANDINGORDERSETUPDATE = STANDINGORDERSETUPDATE,
            @USESYSTEMGENERATEDREFERENCENUMBER = USESYSTEMGENERATEDREFERENCENUMBER
        from dbo.REVENUESCHEDULESTANDINGORDERPAYMENT
        left join dbo.REVENUESTANDINGORDER on REVENUESTANDINGORDER.ID = REVENUESCHEDULESTANDINGORDERPAYMENT.ID
        where REVENUESCHEDULESTANDINGORDERPAYMENT.ID = @ID

        if @USESYSTEMGENERATEDREFERENCENUMBER is null
             select @USESYSTEMGENERATEDREFERENCENUMBER = 0;
        if @STANDINGORDERSETUP is null
             select @STANDINGORDERSETUP = 0
    end;

        set @HASSOLDFIXEDASSETS = 0;
        if @PAYMENTMETHODCODE in (4, 6) --stock, gift-in-kind
        begin
            -- sold stock or sold gift-in-kind
            if exists (select 1 from dbo.FINANCIALTRANSACTION
                                 where FINANCIALTRANSACTION.PARENTID = @ID
                                 and FINANCIALTRANSACTION.TYPECODE in (21,27))
                set @HASSOLDFIXEDASSETS = 1;
        end

        if @PAYMENTMETHODCODE = 5  --Property
        begin
            -- sold property
            if exists (select 1 from dbo.FINANCIALTRANSACTION
                                 inner join dbo.PROPERTYDETAIL_EXT on PROPERTYDETAIL_EXT.ID = FINANCIALTRANSACTION.ID
                                 where FINANCIALTRANSACTION.PARENTID = @ID
                                 and PROPERTYDETAIL_EXT.SALEDATE is not null)
                set @HASSOLDFIXEDASSETS = 1;
        end

    -- adjustment logic
    if exists(select ID from dbo.REVENUESPLIT where REVENUEID = @ID and APPLICATIONCODE = 11)
    begin
        set @ISMISCELLANEOUSPAYMENT = 1;
    end    

    if @ISPAYMENT = 1
        if exists(select 'x' from dbo.SALESORDERPAYMENT
                    inner join dbo.SALESORDERITEM on SALESORDERITEM.SALESORDERID = SALESORDERPAYMENT.SALESORDERID
                    where SALESORDERPAYMENT.PAYMENTID = @ID and SALESORDERITEM.TYPECODE <> 12
            begin
                select @ISORDERAPPLICATION = 1        
                from dbo.SALESORDERPAYMENT
                where PAYMENTID = @ID;  
            end            
    set @HASGIFTAIDSPLITONPENDINGR68PROCESS = dbo.UFN_REVENUE_HASGIFTAIDSPLITONPENDINGR68(@ID, @ISPAYMENT)

    if @ISPLEDGE = 1 or @ISRECURRINGGIFT = 1
        begin
            if @PAYMENTMETHODCODE = 98 -- if this is a reference only credit card method then retrieve the cc details from the CREDITCARDPAYMENTMETHODDETAIL table 
            begin
                select 
                    @CARDHOLDERNAME = D.CARDHOLDERNAME,
                    @CREDITCARDNUMBER = D.CREDITCARDPARTIALNUMBER,
                    @CREDITTYPECODEID = D.CREDITTYPECODEID,
                    @EXPIRESON = D.EXPIRESON
                from dbo.REVENUEPAYMENTMETHOD M
                left join dbo.CREDITCARDPAYMENTMETHODDETAIL D on M.ID =  D.ID
                where M.REVENUEID = @ID;
            end
            else
            begin
                select
                    @CARDHOLDERNAME = CREDITCARD.CARDHOLDERNAME,
                    @CREDITCARDNUMBER = CREDITCARD.CREDITCARDPARTIALNUMBER,
                    @CREDITTYPECODEID = CREDITCARD.CREDITTYPECODEID,
                    @EXPIRESON = CREDITCARD.EXPIRESON,
                    @CREDITCARDTOKEN = CREDITCARD.CREDITCARDTOKEN
                from dbo.REVENUE
                inner join dbo.REVENUESCHEDULE on REVENUESCHEDULE.ID = REVENUE.ID
                left join dbo.CREDITCARD on CREDITCARD.ID = REVENUESCHEDULE.CREDITCARDID
                where REVENUE.ID = @ID;
            end

            --make sure next transaction date is properly calculated (based on existing payed previous transactions) WI#254736
            if @ISRECURRINGGIFT = 1
                exec dbo.USP_DATAFORMTEMPLATE_EDITLOAD_RECURRINGGIFT_2 @ID = @ID, @SCHEDULESEEDDATE = @INSTALLMENTSCHEDULESEEDDATE output;
        end

    --payment adjustment
    if @ISPAYMENT = 1 and @ISPOSTED = 1 and @ISMISCELLANEOUSPAYMENT = 0 and @ISORDERAPPLICATION = 0 and @HASGIFTAIDSPLITONPENDINGR68PROCESS = 0
    begin
        set @ISADJUSTMENT = 1;     
        set @POSTSTATUSCODE = null
    end;
    --pledge adjustment
    if @ISPLEDGE = 1 and @ISPOSTED = 1
    begin
        set @ISADJUSTMENT = 1;     
        set @POSTSTATUSCODE = null
    end;
    if @ISADJUSTMENT = 1
        begin
                select  
                @ADJUSTMENTDATE = getdate()

                select top 1
                    @ADJUSTMENTDATE = ADJUSTMENT.DATE,
                    @ADJUSTMENTPOSTDATE = ADJUSTMENT.POSTDATE,
                    @ADJUSTMENTPOSTSTATUSCODE = ADJUSTMENT.POSTSTATUSCODE,
                    @ADJUSTMENTREASON = ADJUSTMENT.REASON,
                    @ADJUSTMENTREASONCODEID = ADJUSTMENT.REASONCODEID
                from dbo.ADJUSTMENT
                where ADJUSTMENT.REVENUEID = @ID
                order by dateadded desc;

                if @ADJUSTMENTREASONCODEID is null
                begin
                            select
                                @ADJUSTMENTDATE = DATE,
                                @ADJUSTMENTPOSTDATE = POSTDATE,
                                @ADJUSTMENTPOSTSTATUSCODE = 1,
                                @ADJUSTMENTREASON = REASON,
                                @ADJUSTMENTREASONCODEID = REASONCODEID
                            from dbo.BENEFITADJUSTMENT
                            where REVENUEID = @ID and POSTSTATUSCODE = 1
                end

                --if the most recent adjustment has been posted then in essence we have no adjustment so clear out the adjustment fields
                if @ADJUSTMENTPOSTSTATUSCODE = 0
                begin
                    select @ADJUSTMENTDATE = dbo.UFN_DATE_GETEARLIESTTIME(getdate()),
                        @ADJUSTMENTPOSTDATE = dbo.UFN_DATE_GETEARLIESTTIME(getdate()),
                        @ADJUSTMENTPOSTSTATUSCODE = 1,
                        @ADJUSTMENTREASON = '',
                        @ADJUSTMENTREASONCODEID = null
                end
        end

  --set BENEFITSWAIVED
  select @BENEFITSWAIVED = BENEFITSWAIVED from REVENUE_EXT where ID = @ID

     --load the benefits 
     set @BENEFITS = 
        (
             select '00000000-0000-0000-0000-000000000000' as ID,
                            BENEFITID, 
                            QUANTITY,
                            UNITVALUE, 
                            TOTALVALUE, 
                            DETAILS,
                            SEQUENCE,
                            ID as REVENUEBENEFITID,
                            BASECURRENCYID as BENEFITCURRENCYID,
                            TRANSACTIONCURRENCYID,
                            TRANSACTIONTOTALVALUE,
                            BASECURRENCYID
             from UFN_REVENUE_GETBENEFITS_3(@ID) B
             where B.USEPERCENT = 0
             for xml raw('ITEM'), type, elements, root('BENEFITS'), binary base64
        );


    set @PERCENTAGEBENEFITS = 
        (
             select '00000000-0000-0000-0000-000000000000' as ID,
                            BENEFITID, 
                            PERCENTAPPLICABLEAMOUNT,
                            VALUEPERCENT, 
                            TOTALVALUE, 
                            DETAILS,
                            SEQUENCE,
                            ID as REVENUEBENEFITID,
                            TRANSACTIONCURRENCYID,
                            TRANSACTIONTOTALVALUE,
                            BASECURRENCYID
             from UFN_REVENUE_GETBENEFITS_3(@ID) B
             where B.USEPERCENT = 1
             for xml raw('ITEM'), type, elements, root('PERCENTAGEBENEFITS'), binary base64
        );


 set @NOTES = 
    (
             select '00000000-0000-0000-0000-000000000000' as ID,
                            REVENUENOTETYPECODEID as NOTETYPECODEID, 
                            TITLE AS NOTETITLE,
                            DATEENTERED AS NOTEDATEENTERED, 
                            AUTHORID AS NOTEAUTHORID, 
                            TEXTNOTE AS NOTETEXTNOTE,
                            ID as REVENUENOTEID,
                            HTMLNOTE AS NOTEHTMLNOTE
             from REVENUENOTE RN
             where RN.REVENUEID = @ID
             for xml raw('ITEM'), type, elements, root('NOTES'), binary base64
        );

        --INSTALLMENTS--
        --Find the first and last installment that have a full balance/no payments
        declare @LASTUNPAIDINSTALLMENTSEQUENCE integer;
        declare @FIRSTUNPAIDINSTALLMENTSEQUENCE integer;
        declare @MAXINSTALLMENTSEQUENCE integer;
        set @MAXINSTALLMENTSEQUENCE = @NUMBEROFINSTALLMENTS
        select
                @FIRSTUNPAIDINSTALLMENTSEQUENCE = min(SEQUENCE),
                @LASTUNPAIDINSTALLMENTSEQUENCE = max(SEQUENCE)
        from dbo.INSTALLMENT
    left join dbo.INSTALLMENTPAYMENT on INSTALLMENT.ID = INSTALLMENTPAYMENT.INSTALLMENTID
    left join dbo.INSTALLMENTWRITEOFF on INSTALLMENT.ID = INSTALLMENTWRITEOFF.INSTALLMENTID
        where
                INSTALLMENT.REVENUEID = @ID and
        INSTALLMENTPAYMENT.INSTALLMENTID is null and
        INSTALLMENTWRITEOFF.INSTALLMENTID is null;

        select @INSTALLMENTAMOUNT = PLEDGEINSTALLMENTOPTION.INSTALLMENTAMOUNT
        from dbo.FINANCIALTRANSACTION
        left outer join dbo.PLEDGEINSTALLMENTOPTION on FINANCIALTRANSACTION.ID = PLEDGEINSTALLMENTOPTION.ID 
        where FINANCIALTRANSACTION.ID = @ID and FINANCIALTRANSACTION.DELETEDON is null

        set  @INSTALLMENTAMOUNTFORWEBSHELL  =  @INSTALLMENTAMOUNT;
        /*
        select
                @RESCHEDULEBALANCE = sum(dbo.UFN_INSTALLMENT_GETINSTALLMENTBALANCE(INSTALLMENT.ID))
        from dbo.INSTALLMENT
        where
                INSTALLMENT.REVENUEID = @ID;
         */

        if @FIRSTUNPAIDINSTALLMENTSEQUENCE is not null
        begin
        set @LASTPAYMENTSEQUENCE = @FIRSTUNPAIDINSTALLMENTSEQUENCE - 1;              
        -- set @NUMBEROFINSTALLMENTS to the number of unpaid installments

        --Bug 131198 - AdamBu - Fixed copied from Edit (Bug 120271).
                --set @NUMBEROFINSTALLMENTS = (@LASTUNPAIDINSTALLMENTSEQUENCE - @FIRSTUNPAIDINSTALLMENTSEQUENCE) + 1;
        end
        else
        begin
                --all installments have a payment towards them
                set @LASTPAYMENTSEQUENCE = (@MAXINSTALLMENTSEQUENCE);

        --Bug 131198 - AdamBu - Fixed copied from Edit (Bug 120271).
                --set @NUMBEROFINSTALLMENTS = 0;
        end
        --If there have been no payments towards the balance, then the @MAXINSTALLSEQUENCE
        --and the @LASTUNPAIDINSTALLMENTSEQUENCE will be equal.  If they are equal,
        --we do not care about the last unpaid row.  Set it to 0 as it can never be 0 on its own.
        --Otherwise, set it to the sequence number of the last installment that has no payments
        --applied to it.
        if @LASTUNPAIDINSTALLMENTSEQUENCE = @MAXINSTALLMENTSEQUENCE
                set @LASTUNPAIDROW = 0;
        else
                set @LASTUNPAIDROW = @LASTUNPAIDINSTALLMENTSEQUENCE;

        --set @INSTALLMENTS = dbo.UFN_REVENUEUPDATEBATCH_LOADINSTALLMENTS_TOITEMLISTXML(@ID)

    --RUB WebShell uses different logic to calculate installments and, as a result, needs the number of installments to be calculated differently.
        select
        @NUMBEROFINSTALLMENTSFORWEBSHELL = count(INSTALLMENT.ID)
        from dbo.UFN_INSTALLMENT_GETINSTALLMENTS_2(@ID) INSTALLMENT
        where INSTALLMENT.BALANCE > 0;

        set @HASPOSTEDPAYMENTS = dbo.UFN_PLEDGEHASPOSTEDPAYMENTS(@ID);

    select @DEPOSITID = DEPOSITID
    from dbo.BANKACCOUNTDEPOSITPAYMENT
    where ID = @ID;

    --JamesWill WI192027 2012-02-02 Default the adjustment post date to the deposit's post date if available        
    if @ISADJUSTMENT = 1
    begin
            if not @DEPOSITID is null
            begin
                select @ADJUSTMENTPOSTDATE = POSTDATE 
                from dbo.BANKACCOUNTDEPOSITPAYMENT 
                inner join dbo.BANKACCOUNTDEPOSIT on BANKACCOUNTDEPOSITPAYMENT.DEPOSITID = BANKACCOUNTDEPOSIT.ID
                inner join dbo.BANKACCOUNTTRANSACTION on BANKACCOUNTDEPOSIT.ID = BANKACCOUNTTRANSACTION.ID
                where BANKACCOUNTDEPOSITPAYMENT.ID = @ID;
            end
            else if @ADJUSTMENTPOSTDATE is null
            begin
                select @ADJUSTMENTPOSTDATE = dbo.UFN_DATE_GETEARLIESTTIME(getdate());
            end
    end

    --JamesWill WI192027 2012-02-02 If there's still not an adjustment post date, default it to the record's post date
    if @ADJUSTMENTPOSTDATE is null           
        set @ADJUSTMENTPOSTDATE = @POSTDATE

    if @ADJUSTMENTPOSTDATE is null           
            select @ADJUSTMENTPOSTDATE = dbo.UFN_DATE_GETEARLIESTTIME(getdate());

    if @ISPLEDGE = 1 and @HASPOSTEDPAYMENTS = 1
        select
        @ADJPAYMENT_POSTDATEDEPOSIT = case when count(distinct Deposit.POSTDATE) = 1 then max(Deposit.POSTDATE) else null end,
        @PROMPTONADJUSTMENTDATECHANGE = case when count(*) > 0 then 1 else 0 end 
        from dbo.FINANCIALTRANSACTIONLINEITEM as Pledge 
        inner join dbo.FINANCIALTRANSACTIONLINEITEM as Payment on Pledge.ID = Payment.SourceLineItemID
        inner join dbo.BANKACCOUNTDEPOSITPAYMENT on Payment.FINANCIALTRANSACTIONID = BANKACCOUNTDEPOSITPAYMENT.ID
        inner join dbo.FINANCIALTRANSACTION as Deposit on BANKACCOUNTDEPOSITPAYMENT.DEPOSITID = Deposit.ID
        where Pledge.FINANCIALTRANSACTIONID = @ID
        and Pledge.DELETEDON is null
        and Pledge.TYPECODE = 0
        and Payment.DELETEDON is null
        and Payment.TYPECODE = 0

    return 0;