USP_DATAFORMTEMPLATE_ADD_2_REVENUEBATCHROW

The save procedure used by the add dataform template "Revenue Batch 2 Row Add Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT The output parameter indicating the ID of the record added.
@BATCHID uniqueidentifier IN Input parameter indicating the context ID for the record being added.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@CONSTITUENTID uniqueidentifier IN Constituent
@TYPECODE tinyint IN Revenue type
@DATE datetime IN Date
@AMOUNT money IN Amount
@PAYMENTMETHODCODE tinyint IN Payment method
@DONOTACKNOWLEDGE bit IN Do not acknowledge
@CHECKDATE UDT_FUZZYDATE IN Check date
@CHECKNUMBER nvarchar(20) IN Check number
@REFERENCEDATE UDT_FUZZYDATE IN Reference date
@REFERENCENUMBER nvarchar(20) IN Reference number
@CARDHOLDERNAME nvarchar(255) IN Name on card
@CREDITCARDNUMBER nvarchar(20) IN Card number
@CREDITTYPECODEID uniqueidentifier IN Card type
@AUTHORIZATIONCODE nvarchar(20) IN Authorization code
@EXPIRESON UDT_FUZZYDATE IN Expires on
@ISSUER nvarchar(100) IN Issuer
@NUMBEROFUNITS decimal(20, 3) IN Stock number of units
@SYMBOL nvarchar(25) IN Symbol
@MEDIANPRICE decimal(19, 4) IN Median price
@PROPERTYSUBTYPECODEID uniqueidentifier IN Property subtype
@GIFTINKINDSUBTYPECODEID uniqueidentifier IN Gift-in-kind subtype
@RECEIPTAMOUNT money IN Receipt amount
@DONOTRECEIPT bit IN Do not receipt
@CONSTITUENTACCOUNTID uniqueidentifier IN Account
@SPLITS xml IN Designations
@SINGLEDESIGNATIONID uniqueidentifier IN Designation
@REVENUESTREAMS xml IN Revenue streams
@APPLYTOSHOWNFORCONSTITUENTID uniqueidentifier IN Apply to shown for constituent
@SEQUENCE int IN Sequence
@INSTALLMENTFREQUENCYCODE tinyint IN Installment frequency
@INSTALLMENTSTARTDATE datetime IN Installment start date
@INSTALLMENTENDDATE datetime IN Installment end date
@NUMBEROFINSTALLMENTS int IN No. installments
@SOLICITORS xml IN Solicitors
@BENEFITS xml IN Money benefits
@FINDERNUMBER bigint IN Finder number
@SOURCECODE nvarchar(60) IN Source code
@APPEALID uniqueidentifier IN Appeal
@FINDERNUMBERISVALID bit IN Finder number is valid
@USERMODIFIEDBENEFITS bit IN User modified benefits
@BENEFITSWAIVED bit IN User waived benefits
@POSTDATE datetime IN GL post date
@POSTSTATUSCODE tinyint IN GL post status
@SENDPLEDGEREMINDER bit IN Send reminders
@SALEDATE datetime IN Sale date
@SALEAMOUNT money IN Sale amount
@BROKERFEE money IN Sale fees
@SALEPOSTSTATUSCODE tinyint IN Sale GL post status
@SALEPOSTDATE datetime IN Sale GL post date
@NOTETITLE nvarchar(50) IN Note Title
@NOTEAUTHORID uniqueidentifier IN Note Author
@NOTEDATEENTERED datetime IN Note Date
@NOTETYPECODEID uniqueidentifier IN Note Type
@NOTETEXTNOTE nvarchar(max) IN Notes
@GIVENANONYMOUSLY bit IN Given anonymously
@GIVENANONYMOUSLYDEFAULTEDFORCONSTITUENTID uniqueidentifier IN Given anonymously defaulted for constituent
@USERMODIFIEDRECEIPTAMOUNT bit IN User modified receipt amount
@PLEDGESUBTYPEID uniqueidentifier IN Pledge subtype
@REJECTIONCODEID uniqueidentifier IN Rejection code
@CONSTITUENTLOOKUPID uniqueidentifier IN Lookup ID
@MAILINGID uniqueidentifier IN Effort
@CHANNELCODEID uniqueidentifier IN Inbound channel
@INSTALLMENTS xml IN Installments
@PAYMENTFORPLEDGEAMOUNT money IN Payment for pledge amount
@RECOGNITIONS xml IN Recognition credits
@DIDRECOGNITIONSDEFAULT bit IN Did default recognition credits
@TRIBUTES xml IN Tributes
@UNAPPLIEDMATCHINGGIFTSPLITS xml IN Unapplied MG Split
@UNAPPLIEDMATCHINGGIFTAMOUNT money IN Applied
@RECEIPTTYPECODE tinyint IN Receipt type
@NEWCONSTITUENT xml IN New constituent
@OTHERPAYMENTMETHODCODEID uniqueidentifier IN Other method
@LETTERCODEID uniqueidentifier IN Letter
@ACKNOWLEDGEDATE datetime IN Acknowledge date
@REFERENCE nvarchar(255) IN Reference
@CATEGORYCODEID uniqueidentifier IN Revenue category
@ACKNOWLEDGEEID uniqueidentifier IN Acknowledgee
@APPLICATIONINFO nvarchar(60) IN Application
@OTHERTYPECODEID uniqueidentifier IN Other type
@OPPORTUNITYID uniqueidentifier IN Opportunity
@DIRECTDEBITRESULTCODE nvarchar(10) IN Result code
@LOWPRICE decimal(19, 4) IN Low price
@HIGHPRICE decimal(19, 4) IN High price
@NUMBEROFUNITSSOLD decimal(20, 3) IN Stock sale number of units
@USERMODIFIEDNUMBEROFUNITSSOLD bit IN User modified stock number of units sold
@CREDITCARDTOKEN uniqueidentifier IN Credit card token
@REJECTIONMESSAGE nvarchar(500) IN Rejection message
@PARTIALCREDITCARDNUMBER nvarchar(4) IN Partial card number
@STANDINGORDERCONSTITUENTACCOUNTID uniqueidentifier IN Standing order account
@STANDINGORDERREFERENCEDATE UDT_FUZZYDATE IN Standing order reference date
@STANDINGORDERREFERENCENUMBER nvarchar(18) IN Standing order reference number
@STANDINGORDERSETUP bit IN Standing order has been setup
@STANDINGORDERSETUPDATE datetime IN Standing order setup date
@TAXDECLARATIONS xml IN Declarations
@TRANSACTIONID uniqueidentifier IN Transaction ID
@ISTRANSIENTCARD bit IN Is transient credit card
@DECLINESGIFTAID bit IN Declines Gift Aid
@DDISOURCECODEID uniqueidentifier IN DDI source
@DDISOURCEDATE date IN DDI source date
@ISCOVENANT bit IN Is covenant gift
@AMOUNTFORVAT money IN Portion subject to VAT
@VATTAXRATEID uniqueidentifier IN VAT tax rate
@VATAMOUNT money IN VAT amount
@ADDITIONALAPPLICATIONSSTREAM xml IN Additional applications stream
@REVENUELOOKUPID nvarchar(100) IN Revenue ID
@APPLICATIONSOLICITORS xml IN Application solicitors
@APPLICATIONRECOGNITIONS xml IN Application recognitions
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.
@MATCHINGGIFTS xml IN Matching gifts
@MGGENERATED bit IN MG Generated
@MGALTERED bit IN MG Altered
@PAYINGPENDINGREVENUEID uniqueidentifier IN Was paying pending revenue
@GIFTINKINDITEMNAME nvarchar(100) IN Item name
@GIFTINKINDDISPOSITIONCODE tinyint IN Disposition
@GIFTINKINDNUMBEROFUNITS int IN Gift-in-kind number of units
@GIFTINKINDFAIRMARKETVALUE money IN Fair market value per unit
@DIRECTDEBITISREJECTED bit IN Direct debit is rejected
@PERCENTAGEBENEFITS xml IN Percent benefits
@ISGIFTAIDSPONSORSHIP bit IN Gift Aid sponsorship
@LOCKBOXID uniqueidentifier IN Lockbox
@LOCKBOXBATCHNUMBER nvarchar(100) IN Lockbox batch number
@LOCKBOXBATCHSEQUENCE int IN Lockbox batch sequence
@PDACCOUNTSYSTEMID uniqueidentifier IN Account system
@APPLICATIONBUSINESSUNITS xml IN Application business units
@TRANSACTIONCURRENCYID uniqueidentifier IN Transaction currency
@BASECURRENCYID uniqueidentifier IN Base currency
@BASEEXCHANGERATEID uniqueidentifier IN Base exchange rate
@EXCHANGERATE decimal(20, 8) IN Exchange rate
@GENERATEREFERENCENUMBER bit IN Automatically generate reference number
@APPLYBYPERCENT bit IN Apply by
@SOURCECODEIMPORT nvarchar(60) IN Source code (Import only)
@CURRENTBATCHROWID uniqueidentifier IN BatchRowID
@MERCHANTACCOUNTID uniqueidentifier IN Merchant account
@SETNULLBASEEXCHANGERATETOLATEST bit IN Use latest base exchange rate when not specified
@APPEALIDFORIMPORT uniqueidentifier IN
@SALE_LOWPRICE decimal(19, 4) IN
@SALE_MEDIANPRICE decimal(19, 4) IN
@SALE_HIGHPRICE decimal(19, 4) IN
@CREDITCARDATTEMPTCOUNT tinyint IN
@VENDORID nvarchar(50) IN
@CLIENTAPPLICENSEID nvarchar(100) IN
@BBNCTRANSACTIONPROCESSORID uniqueidentifier IN
@BBNCORIGINAPPEALID uniqueidentifier IN
@BBNCTRANID int IN
@BBNCID int IN
@BBNCORIGINPAGENAME nvarchar(100) IN
@BBNCORIGINPAGEID int IN
@FINANCIALINSTITUTIONID uniqueidentifier IN
@ACCOUNTNUMBER nvarchar(50) IN
@ACCOUNTTYPE tinyint IN
@ACCOUNTNAME nvarchar(100) IN
@RECEIPTNUMBER nvarchar(30) IN
@RECEIPTSTACKSHORTNAME nvarchar(20) IN
@MARKGIFTASRECEIPTED bit IN
@EMAILID int IN
@EMAILSUBJECT nvarchar(510) IN
@EMAILNAME nvarchar(510) IN
@NAMECODE tinyint IN
@SIMILARADDRESSCODE tinyint IN
@UNSIMILARADDRESSCODE tinyint IN
@NEWADDRESSENDDATECODE tinyint IN
@NEWADDRESSPRIMARYCODE tinyint IN
@BIRTHDATERULECODE tinyint IN
@DIFFERENTPHONECODE tinyint IN
@NEWPHONEENDDATECODE tinyint IN
@NEWPHONEPRIMARYCODE tinyint IN
@DIFFERENTEMAILCODE tinyint IN
@NEWEMAILENDDATECODE tinyint IN
@NEWEMAILPRIMARYCODE tinyint IN
@USEGLOBALSETTINGS bit IN
@CREATEHISTORICALNAMECODE tinyint IN
@FIRSTPAYMENTPROCESSED nvarchar(10) IN
@PAYMENTFORPLEDGERECEIPTAMOUNT money IN
@SEPAMANDATEID uniqueidentifier IN
@ADDSEPAMANDATE bit IN
@SEPAMANDATECUSTOMIDENTIFIER nvarchar(35) IN
@SEPAMANDATESIGNATUREDATE date IN
@SEPAMANDATETYPECODE tinyint IN
@FINANCIALINSTITUTIONNAME nvarchar(100) IN
@BANKINGSYSTEMID uniqueidentifier IN
@BRANCHNAME nvarchar(100) IN
@ROUTINGNUMBER nvarchar(9) IN
@SORTCODE nvarchar(6) IN
@BIC nvarchar(11) IN
@BANKCODE nvarchar(25) IN
@INSTALLMENTAMOUNT money IN
@REQUIRECREDITCARDPROCESSING bit IN
@NOTEHTMLNOTE nvarchar(max) IN
@IMPORT bit IN
@SOLICITCODES xml IN

Definition

Copy


CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_2_REVENUEBATCHROW
(
  @ID uniqueidentifier = null output,
  @BATCHID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier,
  @CONSTITUENTID uniqueidentifier = null,
  @TYPECODE tinyint,
  @DATE datetime,
  @AMOUNT money,
  @PAYMENTMETHODCODE tinyint = 0,
  @DONOTACKNOWLEDGE bit = 0,
  @CHECKDATE dbo.UDT_FUZZYDATE = '00000000',
  @CHECKNUMBER nvarchar(20) = '',
  @REFERENCEDATE dbo.UDT_FUZZYDATE = '00000000',
  @REFERENCENUMBER nvarchar(20) = '',
  @CARDHOLDERNAME nvarchar(255) = '',
  @CREDITCARDNUMBER nvarchar(20) = '',
  @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,
  @PROPERTYSUBTYPECODEID uniqueidentifier = null,
  @GIFTINKINDSUBTYPECODEID uniqueidentifier = null,
  @RECEIPTAMOUNT money = 0,
  @DONOTRECEIPT bit = 0,
  @CONSTITUENTACCOUNTID uniqueidentifier = null,
  @SPLITS xml = null,
  @SINGLEDESIGNATIONID uniqueidentifier = null,
  @REVENUESTREAMS xml = null,
  @APPLYTOSHOWNFORCONSTITUENTID uniqueidentifier= null,
  @SEQUENCE int,
  @INSTALLMENTFREQUENCYCODE tinyint = 5,
  @INSTALLMENTSTARTDATE datetime = null,
  @INSTALLMENTENDDATE datetime = null,
  @NUMBEROFINSTALLMENTS int = 1,
  @SOLICITORS xml = null,
  @BENEFITS xml = null,
  @FINDERNUMBER bigint = null,
  @SOURCECODE nvarchar(60) = '',
  @APPEALID uniqueidentifier = null,
  @FINDERNUMBERISVALID bit = 0,
  @USERMODIFIEDBENEFITS bit = 0,
  @BENEFITSWAIVED bit = 0,
  @POSTDATE datetime = null,
  @POSTSTATUSCODE tinyint = 1,
  @SENDPLEDGEREMINDER bit = 1,
  @SALEDATE datetime = null,
  @SALEAMOUNT money = 0,
  @BROKERFEE money = 0,
  @SALEPOSTSTATUSCODE tinyint = 1,
  @SALEPOSTDATE datetime = null,
  @NOTETITLE nvarchar(50) = '',
  @NOTEAUTHORID uniqueidentifier = null,
  @NOTEDATEENTERED datetime = null,
  @NOTETYPECODEID uniqueidentifier = null,
  @NOTETEXTNOTE nvarchar(max) = '',
  @GIVENANONYMOUSLY bit = 0,
  @GIVENANONYMOUSLYDEFAULTEDFORCONSTITUENTID uniqueidentifier = null,
  @USERMODIFIEDRECEIPTAMOUNT bit = 0,
  @PLEDGESUBTYPEID uniqueidentifier = null,
  @REJECTIONCODEID uniqueidentifier = null,
  @CONSTITUENTLOOKUPID uniqueidentifier = null,
  @MAILINGID uniqueidentifier = null,
  @CHANNELCODEID uniqueidentifier = null,
  @INSTALLMENTS xml = null,
  @PAYMENTFORPLEDGEAMOUNT money = 0,
  @RECOGNITIONS xml = null,
  @DIDRECOGNITIONSDEFAULT bit = 0,
  @TRIBUTES xml = null,
  @UNAPPLIEDMATCHINGGIFTSPLITS xml = null,
  @UNAPPLIEDMATCHINGGIFTAMOUNT money = 0,
  @RECEIPTTYPECODE tinyint = 0,
  @NEWCONSTITUENT xml = null,
  @OTHERPAYMENTMETHODCODEID uniqueidentifier = null,
  @LETTERCODEID uniqueidentifier = null,
  @ACKNOWLEDGEDATE datetime = null,
  @REFERENCE nvarchar(255) = null,
  @CATEGORYCODEID uniqueidentifier = null,
  @ACKNOWLEDGEEID uniqueidentifier = null,
  @APPLICATIONINFO nvarchar(60) = null,
  @OTHERTYPECODEID uniqueidentifier = null,
  @OPPORTUNITYID uniqueidentifier = null,
  @DIRECTDEBITRESULTCODE nvarchar(10) = '',
  @LOWPRICE decimal(19,4) = 0,
  @HIGHPRICE decimal(19,4) = 0,
  @NUMBEROFUNITSSOLD decimal(20,3) = 0,
  @USERMODIFIEDNUMBEROFUNITSSOLD bit = 0,
  @CREDITCARDTOKEN uniqueidentifier = null,
  @REJECTIONMESSAGE nvarchar(500) = '',
  @PARTIALCREDITCARDNUMBER nvarchar(4) = '',
  @STANDINGORDERCONSTITUENTACCOUNTID uniqueidentifier = null,
  @STANDINGORDERREFERENCEDATE dbo.UDT_FUZZYDATE = '00000000',
  @STANDINGORDERREFERENCENUMBER nvarchar(18) = '',
  @STANDINGORDERSETUP bit = 0,
  @STANDINGORDERSETUPDATE datetime = null,
  @TAXDECLARATIONS xml = null,
  @TRANSACTIONID uniqueidentifier = null,
  @ISTRANSIENTCARD bit = null,
  @DECLINESGIFTAID bit = null,
  @DDISOURCECODEID uniqueidentifier = null,
  @DDISOURCEDATE date = null,
  @ISCOVENANT bit = null,
  @AMOUNTFORVAT money = 0,
  @VATTAXRATEID uniqueidentifier = null,
  @VATAMOUNT money = 0,
  @ADDITIONALAPPLICATIONSSTREAM xml = null,
  @REVENUELOOKUPID nvarchar(100) = '',
  @APPLICATIONSOLICITORS xml = null,
  @APPLICATIONRECOGNITIONS xml = null,
  @CURRENTAPPUSERID uniqueidentifier = null,
  @MATCHINGGIFTS xml = null,
  @MGGENERATED bit = null,
  @MGALTERED bit = null,
  @PAYINGPENDINGREVENUEID uniqueidentifier = null,
  @GIFTINKINDITEMNAME nvarchar(100) = '',
  @GIFTINKINDDISPOSITIONCODE tinyint = 0,
  @GIFTINKINDNUMBEROFUNITS int = 0,
  @GIFTINKINDFAIRMARKETVALUE money = 0,
  @DIRECTDEBITISREJECTED bit = 0,
  @PERCENTAGEBENEFITS xml = null,
  @ISGIFTAIDSPONSORSHIP bit = null,
  @LOCKBOXID uniqueidentifier = null,
  @LOCKBOXBATCHNUMBER nvarchar(100) = '',
  @LOCKBOXBATCHSEQUENCE int = 0,
  @PDACCOUNTSYSTEMID uniqueidentifier = null,
  @APPLICATIONBUSINESSUNITS xml = null,
  @TRANSACTIONCURRENCYID uniqueidentifier = null,
  @BASECURRENCYID uniqueidentifier = null,
  @BASEEXCHANGERATEID uniqueidentifier = null,
  @EXCHANGERATE decimal(20,8) = null,
  @GENERATEREFERENCENUMBER bit = 1,
  @APPLYBYPERCENT bit = 0,
  @SOURCECODEIMPORT nvarchar(60) = '',
  @CURRENTBATCHROWID uniqueidentifier = '00000000-0000-0000-0000-000000000000',
  @MERCHANTACCOUNTID uniqueidentifier = null,
  @SETNULLBASEEXCHANGERATETOLATEST bit = 1,
  @APPEALIDFORIMPORT uniqueidentifier = null,
  @SALE_LOWPRICE decimal(19,4) = 0,
  @SALE_MEDIANPRICE decimal(19,4) = 0,
  @SALE_HIGHPRICE decimal(19,4) = 0,
  @CREDITCARDATTEMPTCOUNT tinyint = 0,
  @VENDORID nvarchar(50) = '',
  @CLIENTAPPLICENSEID nvarchar(100) = '',
  @BBNCTRANSACTIONPROCESSORID uniqueidentifier = null,
  @BBNCORIGINAPPEALID uniqueidentifier = null,
  @BBNCTRANID int = 0,
  @BBNCID int = 0,
  @BBNCORIGINPAGENAME nvarchar(100) = '',
  @BBNCORIGINPAGEID int = 0,
  @FINANCIALINSTITUTIONID uniqueidentifier = null,
  @ACCOUNTNUMBER nvarchar(50) = '',
  @ACCOUNTTYPE tinyint = null,
  @ACCOUNTNAME nvarchar(100) = '',
  @RECEIPTNUMBER nvarchar(30) = null,
  @RECEIPTSTACKSHORTNAME nvarchar(20) = '',
  @MARKGIFTASRECEIPTED bit = 0,
  @EMAILID int = 0,
  @EMAILSUBJECT nvarchar(510) = '',
  @EMAILNAME nvarchar(510) = '',
  @NAMECODE tinyint = 1,
  @SIMILARADDRESSCODE tinyint = 3,
  @UNSIMILARADDRESSCODE tinyint = 3,
  @NEWADDRESSENDDATECODE tinyint = 0,
  @NEWADDRESSPRIMARYCODE tinyint = 1,
  @BIRTHDATERULECODE  tinyint = 0,
  @DIFFERENTPHONECODE tinyint = 3,
  @NEWPHONEENDDATECODE tinyint = 0,
  @NEWPHONEPRIMARYCODE tinyint = 1,
  @DIFFERENTEMAILCODE tinyint = 3,
  @NEWEMAILENDDATECODE tinyint = 0,
  @NEWEMAILPRIMARYCODE tinyint = 1,
  @USEGLOBALSETTINGS bit = 1,  
  @CREATEHISTORICALNAMECODE tinyint = 1,
  @FIRSTPAYMENTPROCESSED nvarchar(10) = '',
  @PAYMENTFORPLEDGERECEIPTAMOUNT money = 0,
  @SEPAMANDATEID uniqueidentifier = null,
  @ADDSEPAMANDATE bit = 0,
  @SEPAMANDATECUSTOMIDENTIFIER nvarchar(35) = '',
  @SEPAMANDATESIGNATUREDATE date = null,
  @SEPAMANDATETYPECODE tinyint = 0,
  @FINANCIALINSTITUTIONNAME nvarchar(100) = '',
  @BANKINGSYSTEMID uniqueidentifier = null,
  @BRANCHNAME nvarchar(100) = '',
  @ROUTINGNUMBER nvarchar(9) = '',
  @SORTCODE nvarchar(6) = '',
  @BIC nvarchar(11) = '',
  @BANKCODE nvarchar(25) = '',
  @INSTALLMENTAMOUNT money = 0,
  @REQUIRECREDITCARDPROCESSING bit = 0,
  @NOTEHTMLNOTE nvarchar(max) = '',
  @IMPORT bit = 1,
  @SOLICITCODES  xml = null

as
begin
  set nocount on;

  declare @CURRENTDATE datetime;

  declare
    @ErrorMessage nvarchar(1000),
    @InfoMsg nvarchar(100),
    @ErrorSeverity int,
    @ErrorState int;

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

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

  set @CURRENTDATE = GetDate();

  begin try
    -- Check batch status

    -- Note: The Infinity platform checks for this, but the BizOps endpoints do not. This change prevents adding/editing rows in committed/deleted batches.

    if (select STATUSCODE from dbo.BATCH where ID = @BATCHID) > 0
      raiserror('BBERR_BATCH_STATUSCODE_INVALIDFORADDEDIT', 13, 1);

    -- Check constituent security.

    if exists (select top 1 ID from REVENUEBATCHCONSTITUENTSECURITY where CONSTITUENTSECURITY = 1)
      and exists (select top 1 ID from CONSTITUENT where ID = @CONSTITUENTID) -- Don't check if new constituent

    begin -- site security is enabled

        if not ((dbo .UFN_APPUSER_ISSYSADMIN( @CURRENTAPPUSERID) = 1) or
      ((dbo. UFN_SECURITY_APPUSER_GRANTED_FORM_FORCONSTIT (@CURRENTAPPUSERID, '3E5B7B99-FB01-49D4-9020-C953006B7D0F' , @CONSTITUENTID) = 1 ) and -- Constituent group security

        exists ( select 1 from dbo.UFN_SITEID_MAPFROM_CONSTITUENTID( @CONSTITUENTID)
             where dbo.UFN_SECURITY_APPUSER_GRANTED_FORM_FORSITE(@CURRENTAPPUSERID , '3E5B7B99-FB01-49D4-9020-C953006B7D0F' , SITEID) = 1 ))) -- Site security

      begin
        raiserror ('BBERR_DB_RECORDSECURITY_PERMISSION_DENIED' , 13, 1)
      end   
    end

    if isnull(@SOURCECODE, '') = ''
      set @SOURCECODE = @SOURCECODEIMPORT;


    if @TYPECODE = 0 -- payment

    begin
      if @PAYMENTMETHODCODE = 6 --Gift-in-kind

      begin
        if @GIFTINKINDITEMNAME is null or @GIFTINKINDITEMNAME = ''
          raiserror('BBERR_GIFTINKINDITEMNAMEREQUIRED', 13, 1)
        if @GIFTINKINDDISPOSITIONCODE is null
          raiserror('BBERR_GIFTINKINDDISPOSITIONCODEREQUIRED', 13, 1)
        if @GIFTINKINDNUMBEROFUNITS is null
          raiserror('BBERR_GIFTINKINDNUMBEROFUNITSREQUIRED', 13, 1)
        if @GIFTINKINDFAIRMARKETVALUE is null
          raiserror('BBERR_GIFTINKINDFAIRMARKETVALUEREQUIRED', 13, 1)
        if @GIFTINKINDNUMBEROFUNITS < 0
          raiserror('BBERR_GIFTINKINDNUMBEROFUNITSNEGATIVE', 13, 1)
        if @GIFTINKINDFAIRMARKETVALUE < 0
          raiserror('BBERR_GIFTINKINDFAIRMARKETVALUENEGATIVE', 13, 1)
      end
    end

    if @PAYMENTMETHODCODE = 11 --Standing order

    begin
      set @CONSTITUENTACCOUNTID = @STANDINGORDERCONSTITUENTACCOUNTID;
      --if @CONSTITUENTACCOUNTID is null

      --begin

        --raiserror('Standing order account must be specified for standing order payments', 13, 1)

      --end

      set @REFERENCEDATE = @STANDINGORDERREFERENCEDATE;

      if @GENERATEREFERENCENUMBER is null or @GENERATEREFERENCENUMBER = 1
        select 
          @STANDINGORDERREFERENCENUMBER = '',
          @GENERATEREFERENCENUMBER = 1
    end

    --JamesWill CR269707-031107 2007/03/19 Set default values for any non-nullable fields that might come in as null

    if @DONOTACKNOWLEDGE is null
      set @DONOTACKNOWLEDGE = 0;
    if @CHECKDATE is null
      set @CHECKDATE = '00000000';
    if @CHECKNUMBER is null
      set @CHECKNUMBER = '';
    if @REFERENCEDATE is null
      set @REFERENCEDATE = '00000000';
    if @REFERENCENUMBER is null
      set @REFERENCENUMBER = '';
    if @CARDHOLDERNAME is null
      set @CARDHOLDERNAME = '';
    if @CREDITCARDNUMBER is null
      set @CREDITCARDNUMBER = '';
    if @AUTHORIZATIONCODE is null
      set @AUTHORIZATIONCODE = '';
    if @EXPIRESON is null
      set @EXPIRESON = '00000000';
    if @ISSUER is null
      set @ISSUER = '';
    if @NUMBEROFUNITS is null
      set @NUMBEROFUNITS = 0;
    if @NUMBEROFUNITSSOLD is null
      set @NUMBEROFUNITSSOLD = 0;
    if @NUMBEROFUNITSSOLD > 0 and @NUMBEROFUNITS <> @NUMBEROFUNITSSOLD
      set @USERMODIFIEDNUMBEROFUNITSSOLD = 1
    if @SYMBOL is null
      set @SYMBOL = '';
    if @MEDIANPRICE is null
      set @MEDIANPRICE = 0;
    if @LOWPRICE is null
      set @LOWPRICE = 0;
    if @HIGHPRICE is null
      set @HIGHPRICE = 0;
    if @RECEIPTAMOUNT is null
      set @RECEIPTAMOUNT = 0;
    if @ADDSEPAMANDATE is null
      set @ADDSEPAMANDATE = 0;
    if @TYPECODE <> 0
      set @LOCKBOXID = null;
    if @REQUIRECREDITCARDPROCESSING is null
      set @REQUIRECREDITCARDPROCESSING = 0;

    if not @LOCKBOXID is null
        if @LOCKBOXBATCHSEQUENCE is null or @LOCKBOXBATCHNUMBER is null
          raiserror('BBERR_LOCKBOXFIELDREQUIRED', 13, 1)

    if @LOCKBOXBATCHNUMBER is null or @LOCKBOXID is null
      set @LOCKBOXBATCHNUMBER = '';
    if @LOCKBOXBATCHSEQUENCE is null or @LOCKBOXID is null
      set @LOCKBOXBATCHSEQUENCE = 0;

    if @PAYMENTFORPLEDGEAMOUNT is null
      set @PAYMENTFORPLEDGEAMOUNT = 0;

    if @PAYMENTFORPLEDGERECEIPTAMOUNT is null
      set @PAYMENTFORPLEDGERECEIPTAMOUNT = 0;

    -- Default in account system unless we're dealing with a recurring gift.

    if @PDACCOUNTSYSTEMID is null and @TYPECODE <> 3
      set @PDACCOUNTSYSTEMID = dbo.UFN_PDACCOUNTSYSTEM_GETDEFAULTSYSTEMIDSFORUSER(@CURRENTAPPUSERID)

    -- Clear account system if we are dealing with a recurring gift.

    if @TYPECODE = 3
      set @PDACCOUNTSYSTEMID = null;

    -- If revenue streams doesn't have any values, ensure it is set to null.

    -- If any of revenue streams' children are mapped during import, revenue streams will not be null even if

    -- there are no revenue stream entries.

    if (select count(*) from @REVENUESTREAMS.nodes('/REVENUESTREAMS/ITEM') T(c)) = 0
        set @REVENUESTREAMS = null;

    -- Get base currency from account system's currency set, if available; from user's default set otherwise.


    if @BASECURRENCYID is null
    begin
      declare @CURRENCYSETID uniqueidentifier
      select @CURRENCYSETID = CURRENCYSETID
      from dbo.PDACCOUNTSYSTEM
      where ID = @PDACCOUNTSYSTEMID

      select 
        @BASECURRENCYID = CURRENCYSET.BASECURRENCYID
      from 
        dbo.CURRENCYSET
      where 
        CURRENCYSET.ID = coalesce(@CURRENCYSETID,dbo.UFN_CURRENCYSET_GETAPPUSERCURRENCYSET(@CURRENTAPPUSERID))
    end

    if @EXCHANGERATE is null
      set @EXCHANGERATE = 0;

    if @TRANSACTIONCURRENCYID is null
      set @TRANSACTIONCURRENCYID = @BASECURRENCYID;

    if @TRANSACTIONCURRENCYID <> @BASECURRENCYID
    begin
      if @BASEEXCHANGERATEID is null and (@SETNULLBASEEXCHANGERATETOLATEST is null or @SETNULLBASEEXCHANGERATETOLATEST = 1)
        set @BASEEXCHANGERATEID = dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@TRANSACTIONCURRENCYID,@BASECURRENCYID,@DATE,1,null)
      else
      begin
        if @BASEEXCHANGERATEID <> '00000000-0000-0000-0000-000000000001'
        begin
          declare @RATEVALID bit;
          set @RATEVALID = 1;
          declare @RATESOURCE uniqueidentifier;

          select @RATESOURCE = SOURCECODEID
          from dbo.CURRENCYEXCHANGERATE
          where ID = @BASEEXCHANGERATEID
          and FROMCURRENCYID = @TRANSACTIONCURRENCYID
          and TOCURRENCYID = @BASECURRENCYID
          and TYPECODE in (0,1)
          and ASOFDATE <= dbo.UFN_DATE_GETLATESTTIME(@DATE)
          and (EXPIRATIONDATE is null or EXPIRATIONDATE >= dbo.UFN_TIMEZONEENTRY_GETSYSTEMDEFAULTDATEWITHTIMEOFFSET(@DATE,0));

          if @@ROWCOUNT = 0
            set @RATEVALID = 0;

          if @RATEVALID = 1
          begin
            declare @VALIDRATE uniqueidentifier;
            set @VALIDRATE = dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@TRANSACTIONCURRENCYID,@BASECURRENCYID,@DATE,1,@RATESOURCE)

            if @VALIDRATE <> @BASEEXCHANGERATEID
              set @RATEVALID = 0;
          end

          if @RATEVALID = 0
          begin
            set @BASEEXCHANGERATEID = null;
            set @EXCHANGERATE = 0;

            raiserror('The specified exchange rate is not valid.', 13, 1)
          end
        end
      end
    end
    else
    begin
      set @BASEEXCHANGERATEID = null;
      set @EXCHANGERATE = 0;
    end

    declare @BASECURRENCYDECIMALDIGITS tinyint;
    declare @BASECURRENCYROUNDINGTYPECODE tinyint;

    select @BASECURRENCYDECIMALDIGITS = DECIMALDIGITS, @BASECURRENCYROUNDINGTYPECODE = ROUNDINGTYPECODE
    from dbo.CURRENCY where ID = @BASECURRENCYID;

    if @DONOTRECEIPT is null
      set @DONOTRECEIPT = 0;
    if @NUMBEROFINSTALLMENTS is null
      set @NUMBEROFINSTALLMENTS = 1;
    if @SOURCECODE is null
      set @SOURCECODE = '';
    if @FINDERNUMBERISVALID is null
      set @FINDERNUMBERISVALID = 0;
    if @USERMODIFIEDBENEFITS is null
      set @USERMODIFIEDBENEFITS = 0;
    if @BENEFITSWAIVED is null
      set @BENEFITSWAIVED = 0;
    if @SENDPLEDGEREMINDER is null
      set @SENDPLEDGEREMINDER = 1;
    if @SALEAMOUNT is null
      set @SALEAMOUNT = 0;
    if @BROKERFEE is null
      set @BROKERFEE = 0;
    if @NOTETITLE is null 
      set @NOTETITLE = '';
    if @NOTETEXTNOTE is null
      set @NOTETEXTNOTE = '';
    if @NOTEHTMLNOTE is null
      set @NOTEHTMLNOTE = '';
    if @GIVENANONYMOUSLY is null
      set @GIVENANONYMOUSLY = 0;
    if @USERMODIFIEDRECEIPTAMOUNT is null
      set @USERMODIFIEDRECEIPTAMOUNT = 0;
    if @DIDRECOGNITIONSDEFAULT is null
      set @DIDRECOGNITIONSDEFAULT = 0;
    if @REFERENCE is null
      set @REFERENCE = '';
    if @STANDINGORDERREFERENCEDATE is null
      set @REFERENCEDATE = '00000000';
    if @STANDINGORDERSETUP is null
      set @STANDINGORDERSETUP = 0;
    if @STANDINGORDERREFERENCENUMBER is null
      set @STANDINGORDERREFERENCENUMBER = '';
    if @AMOUNTFORVAT is null
      set @AMOUNTFORVAT = 0;
    if @VATAMOUNT is null
      set @VATAMOUNT = 0;
    if @DIRECTDEBITISREJECTED is null
      set @DIRECTDEBITISREJECTED = 0;
    if @GIFTINKINDITEMNAME is null
      set @GIFTINKINDITEMNAME = '';
    if @GIFTINKINDDISPOSITIONCODE is null
      set @GIFTINKINDDISPOSITIONCODE = 0;
    if @GIFTINKINDNUMBEROFUNITS is null
      set @GIFTINKINDNUMBEROFUNITS = 0;
    if @GIFTINKINDFAIRMARKETVALUE is null
      set @GIFTINKINDFAIRMARKETVALUE = 0;
    --if @AMOUNT < 0 

      -- raiserror('The amount cannot be negative.', 13, 1) 

    if @FINDERNUMBER is null
      set @FINDERNUMBER = 0;
    /* JamesWill CR267402-021907 INSTALLMENTFREQUENCYCODE cannot be null in the database, but it can be null in the defaults */
    if @INSTALLMENTFREQUENCYCODE is null
    begin
      -- For Recurring Gifts, default to Monthly.  For other types, use Single Installment.

      if @TYPECODE = 3
        set @INSTALLMENTFREQUENCYCODE = 3;
      else
        set @INSTALLMENTFREQUENCYCODE = 5;
    end
    /* JamesWill CR265838-020507 2007/03/07 */
    if @POSTSTATUSCODE is null
      set @POSTSTATUSCODE = 255;
    if @SALEPOSTSTATUSCODE is null
      set @SALEPOSTSTATUSCODE = 255;
    if @MGGENERATED is null
      set @MGGENERATED = 0;
    if @DECLINESGIFTAID is null
      set @DECLINESGIFTAID = 0;

    if @CREDITCARDATTEMPTCOUNT is null
      set @CREDITCARDATTEMPTCOUNT = 0;

    -- WI 167235 when importing matching gift claims set @MGALTERED = 1 so that the imported

    -- MG will be added by the batch.

    if exists (
        select
            1
        from
            @MATCHINGGIFTS.nodes('MATCHINGGIFTS/ITEM') as MATCHINGGIFTSXML ([MATCHINGGIFT])
        where
            MATCHINGGIFTSXML.[MATCHINGGIFT].value('MATCHINGCONSTITUENTID[1]', 'uniqueidentifier') is not null
            and
            coalesce(MATCHINGGIFTSXML.[MATCHINGGIFT].value('COULDNOTDEFAULTMATCHINGGIFT[1]', 'bit'),0) = 0
    )
        set @MGALTERED = 1;
    else
        if @MGALTERED is null
          set @MGALTERED = 0;

    if cast(@SPLITS as nvarchar(max)) = '' 
    begin
      set @SPLITS = null;
    end
    else
    begin
      if not exists (select 1 from @SPLITS.nodes('/SPLITS/ITEM') T(c))
        set @SPLITS = null;
    end
    if not @SPLITS is null
      set @SINGLEDESIGNATIONID = null;
    if @TYPECODE = 1 or @TYPECODE = 3 --Pledges and Recurring gifts do not receipt

      set @DONOTRECEIPT = 1;
    if @PAYMENTMETHODCODE is null
set @PAYMENTMETHODCODE = 255;
    if @RECEIPTTYPECODE is null
      set @RECEIPTTYPECODE = 255
    if @CONSTITUENTID is null 
      select @CONSTITUENTID = @CONSTITUENTLOOKUPID;

    -- Bug#254908 - When importing benefits set @USERMODIFIEDBENEFITS = 1 so that the they are not removed when constituent/amount etc is changed.

    if @BENEFITS.exist('BENEFITS/ITEM[BENEFITID]') = 1 or @PERCENTAGEBENEFITS.exist('PERCENTAGEBENEFITS/ITEM[BENEFITID]') = 1
    begin
      set @USERMODIFIEDBENEFITS = 1;
    end

    if @NEWCONSTITUENT.exist('NEWCONSTITUENT/ITEM') = 1 and not exists (select ID from dbo.CONSTITUENT where ID = @CONSTITUENTID)
      exec dbo.USP_REVENUEBATCH_ADDNEWCONSTITUENTFROMXML_1 @NEWCONSTITUENT, @CHANGEAGENTID, @CONSTITUENTID output;

    declare @MARKETINGCONSTITUENTID uniqueidentifier = @CONSTITUENTID;

    /* Lookup and set all possible marketing data (via output params) from the data that was specified. */
    declare @LOOKUPSINGLEDESIGNATION bit = (case when @SINGLEDESIGNATIONID is null and @SPLITS is null and @REVENUESTREAMS is null and @ADDITIONALAPPLICATIONSSTREAM is null then 1 else 0 end);
    exec dbo.[USP_REVENUEBATCH_GETMARKETINGDATA]
      @FINDERNUMBER = @FINDERNUMBER,
      @LOOKUPSINGLEDESIGNATION = @LOOKUPSINGLEDESIGNATION,
      @CHANGEAGENTID = @CHANGEAGENTID,
      @CURRENTAPPUSERID = @CURRENTAPPUSERID,
      @SOURCECODE = @SOURCECODE output,
      @MAILINGID = @MAILINGID output,
      @APPEALID = @APPEALID output,
      @CONSTITUENTID = @MARKETINGCONSTITUENTID output,
      @FINDERNUMBERISVALID = @FINDERNUMBERISVALID output,
      @SINGLEDESIGNATIONID = @SINGLEDESIGNATIONID output,
      @BATCHID = @BATCHID,
      @IMPORT = @IMPORT;

    if @BBNCTRANID = 0
      set @CONSTITUENTID = @MARKETINGCONSTITUENTID;
    else
      begin

        /* This is a BBIS transaction. Check to see if the first, last and email address match the constituent, if so assume it is
           an acquisition list constituent and overwrite the constituent ID. */
        declare @ISTEMPORARYCONSTITUENT bit = case when exists (select top 1 1 from dbo.[BATCHREVENUECONSTITUENTAPPEAL] where [CONSTITUENTID] = @MARKETINGCONSTITUENTID) then 1 else 0 end;

        if @ISTEMPORARYCONSTITUENT = 1 
          begin

            declare @CONSTFIRSTNAME nvarchar(255)= '';
            declare @CONSTLASTNAME nvarchar(255) = '';
            declare @CONSTEMAILADDRESS dbo.UDT_EMAILADDRESS = '';

            declare @FINDERFIRSTNAME nvarchar(255)= '';
            declare @FINDERLASTNAME nvarchar(255)= '';
            declare @FINDEREMAILADDRESS dbo.UDT_EMAILADDRESS = '';

            select top 1
              @CONSTFIRSTNAME = coalesce(T.c.value('(FIRSTNAME)[1]','nvarchar(50)'), ''),
              @CONSTLASTNAME = coalesce(T.c.value('(LASTNAME)[1]','nvarchar(100)'), ''),
              @CONSTEMAILADDRESS = coalesce(T.c.value('(EMAILADDRESS_EMAILADDRESS)[1]','dbo.UDT_EMAILADDRESS'), '')
            from @NEWCONSTITUENT.nodes('/NEWCONSTITUENT/ITEM') T(c);

            select
              @FINDERFIRSTNAME = [FIRSTNAME],
              @FINDERLASTNAME = [KEYNAME],
              @FINDEREMAILADDRESS = [EMAILADDRESS]
            from dbo.[BATCHREVENUECONSTITUENT]
            where [ID] = @MARKETINGCONSTITUENTID;

            /* WI374441 If we match the constituent to an acquisition list imported constituent we should take the temp constituent ID created 
               by the marketing function. If the constituent does not match then assume the gift was given by someone else and do not 
               overwrite the constituent ID. */
            if @FINDEREMAILADDRESS = @CONSTEMAILADDRESS and @FINDERLASTNAME = @CONSTLASTNAME and @FINDERFIRSTNAME = @CONSTFIRSTNAME
              set @CONSTITUENTID = @MARKETINGCONSTITUENTID;

          end

      end

    -- If constituent is still null, try to figure it out based on applications to commitments

    -- All underlying commitments must point to the same constituent to get a result

    if @CONSTITUENTID is null
    begin
      select @CONSTITUENTID = dbo.UFN_REVENUEBATCH_GETCONSTITUENTIDFROMAPPLICATIONS(@REVENUESTREAMS)
    end

    -- Use the partial card number if set.  This field is used for import or when using the payment method of Credit card - last 4 digits

    -- and doesn't have any CC processing code run for it.

    if coalesce(@PARTIALCREDITCARDNUMBER, '') <> ''
      set @CREDITCARDNUMBER = @PARTIALCREDITCARDNUMBER

    -- Validate that if one credit card field is entered, the required fields are set.

    -- Server code should generally have validated this already unless the code is being

    -- added through import.

    if @PAYMENTMETHODCODE = 2
    begin
      if len(coalesce(@CREDITCARDNUMBER, '')) > 4
      begin
        if coalesce(@CARDHOLDERNAME, '') = ''
          raiserror('BBERR_CARDHOLDERFIELDSREQUIRED', 13, 1)

        if coalesce(@EXPIRESON, '00000000') = '00000000'
          raiserror('BBERR_EXPIRESONFIELDSREQUIRED', 13, 1)
      end
    end

    declare @CREDITCARDID uniqueidentifier
    if @PAYMENTMETHODCODE = 2
    begin try
      exec dbo.USP_CREDITCARD_SAVE
        @ID = @CREDITCARDID output,
        @CREDITCARDTOKEN = @CREDITCARDTOKEN,
        @CARDHOLDERNAME = @CARDHOLDERNAME,
        @CREDITCARDPARTIALNUMBER = @CREDITCARDNUMBER,
        @CREDITTYPECODEID = @CREDITTYPECODEID,
        @EXPIRESON = @EXPIRESON,
        @CHANGEAGENTID = @CHANGEAGENTID,
        @CURRENTDATE = @CURRENTDATE,
        @ISTRANSIENT = @ISTRANSIENTCARD;
    end try
    begin catch
      if (@CREDITCARDTOKEN is null or len(coalesce(@CREDITCARDNUMBER, '')) < 4)
        raiserror('BBERR_CREDITCARDFIELDSREQUIRED', 13, 1);
      if coalesce(@EXPIRESON, '00000000') = '00000000'
        raiserror('BBERR_EXPIRESONFIELDSREQUIRED', 13, 1);
      if len(coalesce(@CARDHOLDERNAME, '')) = 0 
        raiserror('BBERR_CARDHOLDERFIELDSREQUIRED', 13, 1);
    end catch

    --Try getting account ID if this direct debit and CONSTITUENTACCOUNTID is not provied.

    if @PAYMENTMETHODCODE = 3 and @CONSTITUENTACCOUNTID is null
    begin
        exec dbo.USP_REVENUEBATCH_GETORCREATECONSTITUENTACCOUNT
            @CONSTITUENTACCOUNTID = @CONSTITUENTACCOUNTID output,
            @CONSTITUENTID = @CONSTITUENTID,
            @ACCOUNTNAME = @ACCOUNTNAME,
            @ACCOUNTNUMBER = @ACCOUNTNUMBER,
            @ACCOUNTTYPE = @ACCOUNTTYPE,
            @FINANCIALINSTITUTIONID = @FINANCIALINSTITUTIONID output,
            @FINANCIALINSTITUTIONNAME = @FINANCIALINSTITUTIONNAME,
            @BANKINGSYSTEMID = @BANKINGSYSTEMID,
            @BRANCHNAME = @BRANCHNAME,
            @ROUTINGNUMBER = @ROUTINGNUMBER,
            @SORTCODE = @SORTCODE,
            @BIC = @BIC,
            @BANKCODE = @BANKCODE,
            @CURRENTAPPUSERID = @CURRENTAPPUSERID,
            @CHANGEAGENTID = @CHANGEAGENTID,
            @BATCHID = @BATCHID
    end

    exec dbo.USP_REVENUEBATCH_SEPAMANDATE_VALIDATEORCREATE
      @SEPAMANDATEID output,
      @CHANGEAGENTID,
      @CURRENTDATE,
      @ADDSEPAMANDATE,
      @SEPAMANDATECUSTOMIDENTIFIER,
      @SEPAMANDATESIGNATUREDATE,
      @SEPAMANDATETYPECODE,
      @PAYMENTMETHODCODE,
      @CONSTITUENTACCOUNTID,
      @FINANCIALINSTITUTIONID,
      @TRANSACTIONCURRENCYID;

    -- If @APPEALIDFORIMPORT is passed in and the appeal field is null,

    -- default appeal-related fields

    if @APPEALIDFORIMPORT is not null and @APPEALID is null
    begin
      set @APPEALID = @APPEALIDFORIMPORT
      -- Default designation and memberships. Designation campaigns will be added later.

      if @SINGLEDESIGNATIONID is null and @SPLITS is null and @REVENUESTREAMS is null and @ADDITIONALAPPLICATIONSSTREAM is null
      begin
        -- If there is no designation, default one.

        select 
          @SINGLEDESIGNATIONID = APPEALDESIGNATION.DESIGNATIONID
        from 
          dbo.APPEALDESIGNATION
          inner join dbo.DESIGNATION on DESIGNATION.ID = APPEALDESIGNATION.DESIGNATIONID
        where 
          APPEALDESIGNATION.APPEALID = @APPEALID 
          and APPEALDESIGNATION.ISDEFAULT = 1

        -- Default memberships if the record is a payment and there is no application

        if @TYPECODE = 0 and (@APPLICATIONINFO is null or @APPLICATIONINFO = '')
        begin
          declare @MEMBERSHIPLEVELTERMID uniqueidentifier;
          select
            @MEMBERSHIPLEVELTERMID = MEMBERSHIPLEVELTERMID
          from dbo.UFN_APPEAL_GETMEMBERSHIPDEFAULTS(@APPEALID, @AMOUNT)

          if @MEMBERSHIPLEVELTERMID is not null and @CONSTITUENTID is not null and @DATE is not null
          begin
            declare @DEFAULTMEMBERSHIPFORMID nvarchar(100) = cast(@MEMBERSHIPLEVELTERMID as nvarchar(36)) + '|' + cast(@CONSTITUENTID as nvarchar(36)) + '|' + cast(@DATE as nvarchar(28))
            declare @DEFAULTMEMBERSHIPFORMDATALOADED bit;
            declare @DEFAULTMEMBERSHIPFORMEXPIRATIONDATE datetime;
            declare @DEFAULTMEMBERSHIPFORMAMOUNT money;
            declare @DEFAULTMEMBERSHIPFORMMEMBERSHIPPROGRAMID uniqueidentifier;
            declare @DEFAULTMEMBERSHIPFORMMEMBERSHIPLEVELID uniqueidentifier;
            declare @DEFAULTMEMBERSHIPFORMMEMBERSHIPLEVELTERMID uniqueidentifier;
            declare @DEFAULTMEMBERSHIPFORMMEMBERSHIPTYPECODEID uniqueidentifier;
            declare @DEFAULTMEMBERSHIPFORMNUMBEROFCHILDREN tinyint;
            declare @DEFAULTMEMBERSHIPFORMCOMMENTS nvarchar(1000);
            declare @DEFAULTMEMBERSHIPFORMMEMBERS xml;
            declare @DEFAULTMEMBERSHIPFORMISGIFT bit;
            declare @DEFAULTMEMBERSHIPFORMSENDRENEWALCODE tinyint;
            declare @DEFAULTMEMBERSHIPFORMGIVENBYID uniqueidentifier;

            exec dbo.USP_DATAFORMTEMPLATE_ADD_PRELOAD_BATCHREVENUEMEMBERSHIPAPPEALDEFAULT 
              @ID=@DEFAULTMEMBERSHIPFORMID,
              @DATALOADED=@DEFAULTMEMBERSHIPFORMDATALOADED output
              @EXPIRATIONDATE=@DEFAULTMEMBERSHIPFORMEXPIRATIONDATE output,
              @AMOUNT=@DEFAULTMEMBERSHIPFORMAMOUNT output,
              @MEMBERSHIPPROGRAMID=@DEFAULTMEMBERSHIPFORMMEMBERSHIPPROGRAMID output,
              @MEMBERSHIPLEVELID=@DEFAULTMEMBERSHIPFORMMEMBERSHIPLEVELID output,
              @MEMBERSHIPLEVELTERMID=@DEFAULTMEMBERSHIPFORMMEMBERSHIPLEVELTERMID output,
              @MEMBERSHIPTYPECODEID=@DEFAULTMEMBERSHIPFORMMEMBERSHIPTYPECODEID output,
              @NUMBEROFCHILDREN=@DEFAULTMEMBERSHIPFORMNUMBEROFCHILDREN output,
              @COMMENTS=@DEFAULTMEMBERSHIPFORMCOMMENTS output,
              @MEMBERS=@DEFAULTMEMBERSHIPFORMMEMBERS output,
              @ISGIFT=@DEFAULTMEMBERSHIPFORMISGIFT output,
              @SENDRENEWALCODE=@DEFAULTMEMBERSHIPFORMSENDRENEWALCODE output,
              @GIVENBYID=@DEFAULTMEMBERSHIPFORMGIVENBYID output

            if @DEFAULTMEMBERSHIPFORMDATALOADED = 1
              set @REVENUESTREAMS = (
                select
                  newid() APPLICATIONID,
                  @DEFAULTMEMBERSHIPFORMAMOUNT APPLIED,
                  @DEFAULTMEMBERSHIPFORMAMOUNT BALANCE,
                  @DEFAULTMEMBERSHIPFORMAMOUNT AMOUNTDUE,
                  cast(getdate() as DATE) DATEDUE,
                  5 TYPECODE,
                  (
                    select
                      @DEFAULTMEMBERSHIPFORMEXPIRATIONDATE EXPIRATIONDATE,
                      @DEFAULTMEMBERSHIPFORMAMOUNT AMOUNT,
                      @DEFAULTMEMBERSHIPFORMMEMBERSHIPPROGRAMID MEMBERSHIPPROGRAMID,
                      @DEFAULTMEMBERSHIPFORMMEMBERSHIPLEVELID MEMBERSHIPLEVELID,
                      @DEFAULTMEMBERSHIPFORMMEMBERSHIPLEVELTERMID MEMBERSHIPLEVELTERMID,
                      @DEFAULTMEMBERSHIPFORMMEMBERSHIPTYPECODEID MEMBERSHIPTYPECODEID,
          isnull(@DEFAULTMEMBERSHIPFORMNUMBEROFCHILDREN, 0) NUMBEROFCHILDREN,
                      isnull(@DEFAULTMEMBERSHIPFORMCOMMENTS, '') COMMENTS,
                      @DEFAULTMEMBERSHIPFORMMEMBERS,
                      isnull(@DEFAULTMEMBERSHIPFORMISGIFT, 0) ISGIFT, 
                      isnull(@DEFAULTMEMBERSHIPFORMSENDRENEWALCODE, 0) SENDRENEWALCODE,
                      @DEFAULTMEMBERSHIPFORMGIVENBYID GIVENBYID
                    for xml raw('ITEM'), type, elements, binary base64
                  ) MEMBERSHIPS
                for xml raw('ITEM'), type, elements, root('REVENUESTREAMS'), binary base64
              )
          end
        end
      end
    end

    --Default benefits

    if @USERMODIFIEDBENEFITS = 0 and @BENEFITSWAIVED = 0
    begin
      exec dbo.USP_REVENUEBATCH_GETDEFAULTBENEFITS @APPLICATIONINFO, @REVENUESTREAMS, @APPEALID, @AMOUNT, @DATE, @TRANSACTIONCURRENCYID, @BASECURRENCYID,
        @BENEFITS output, @PERCENTAGEBENEFITS output, @EXCHANGERATE, @BASEEXCHANGERATEID;
    end

    --Calculate receipt amount

    declare @CALCULATEDRECEIPTAMOUNT money = dbo.UFN_REVENUEBATCH_CALCULATERECEIPTAMOUNT
                                              (
                                                @AMOUNT, @RECEIPTAMOUNT, @APPLICATIONINFO, @DATE, @BENEFITSWAIVED, @BENEFITS, @PERCENTAGEBENEFITS, @REVENUESTREAMS,
                                                @TRANSACTIONCURRENCYID, @BASECURRENCYID, @BASEEXCHANGERATEID
                                              );

    --User modified receipt amount if it is not set to calculated amount

    if @RECEIPTAMOUNT > 0 and @RECEIPTAMOUNT <> @CALCULATEDRECEIPTAMOUNT
      set @USERMODIFIEDRECEIPTAMOUNT = 1;

    if @USERMODIFIEDRECEIPTAMOUNT = 0
      set @RECEIPTAMOUNT = @CALCULATEDRECEIPTAMOUNT;

    --Default installment amount or number of installments if not provided

    if @INSTALLMENTAMOUNT = 0
    begin
        --This should be defaulted to 1 if not provided, but its possible 0 has been passed in

        if @NUMBEROFINSTALLMENTS > 0 
        begin
          set @INSTALLMENTAMOUNT = ROUND(@AMOUNT / @NUMBEROFINSTALLMENTS, 2);

          if @AMOUNT > 0
          begin
            if @AMOUNT - (@INSTALLMENTAMOUNT * (@NUMBEROFINSTALLMENTS - 1)) < 0 
             set @INSTALLMENTAMOUNT = @INSTALLMENTAMOUNT - power(CAST(10.0 AS float), -2); 
          end
        end
    end
    else if @NUMBEROFINSTALLMENTS = 1 and @INSTALLMENTAMOUNT <> @AMOUNT
    begin
        if @INSTALLMENTAMOUNT > @AMOUNT
          set @INSTALLMENTAMOUNT = @AMOUNT
        else
          set @NUMBEROFINSTALLMENTS = CEILING(CAST(@AMOUNT AS float) / CAST(@INSTALLMENTAMOUNT AS float))
    end

    --Clear the credit card fields before inserting them into the batch table if the payment method is credit card (2)

    --They are saved above in that scenario and they only need to be saved to the BATCHREVENUE table if the payment method is 98 - Credit card - last 4 digits only

    if @PAYMENTMETHODCODE = 2
    begin
      set @CARDHOLDERNAME = '';
      set @CREDITTYPECODEID = null;
      set @CREDITCARDNUMBER = '';
      set @EXPIRESON = '00000000';
    end

    --WI#526372

    --If any of revenue streams' children are mapped during import, calculate @APPLICATIONINFO if everything is fine.

    declare @REVENUESTREAMSCOUNT int 
    declare @REVENUESTREAMSAPPLICATIONID varchar(36)
    declare @REVENUESTREAMSAPPLICATIONCOMMITMENTID varchar(36)
    declare @REVENUESTREAMSTYPECODE varchar(5)
    declare @REVENUESTREAMSAPPLIEDAMOUNT varchar(20)

    select @REVENUESTREAMSCOUNT = COUNT(1) from @REVENUESTREAMS.nodes('/REVENUESTREAMS/ITEM') T(c);    

    --Only set if there is exactly one revenue stream and no additional applications

    if (@APPLICATIONINFO is null or @APPLICATIONINFO = '') and @REVENUESTREAMSCOUNT = 1 and @ADDITIONALAPPLICATIONSSTREAM is null
    begin
      select 
        @REVENUESTREAMSAPPLICATIONID = cast(T.c.value('APPLICATIONID[1]', 'uniqueidentifier') as varchar(36)),
        @REVENUESTREAMSAPPLICATIONCOMMITMENTID = cast(T.c.value('APPLICATIONCOMMITMENTID[1]', 'uniqueidentifier') as varchar(36)),
        @REVENUESTREAMSTYPECODE = cast(T.c.value('TYPECODE[1]', 'tinyint') as varchar(5)),
        @REVENUESTREAMSAPPLIEDAMOUNT = cast(T.c.value('APPLIED[1]', 'money') as varchar(20))
      from 
        @REVENUESTREAMS.nodes('/REVENUESTREAMS/ITEM') T(c);
      if(@REVENUESTREAMSAPPLICATIONID = '' or @REVENUESTREAMSAPPLICATIONID is null)
        set @REVENUESTREAMSAPPLICATIONID = @REVENUESTREAMSAPPLICATIONCOMMITMENTID

      --If the payment typecode was provided, default it to the correct type using the revenue id

      if (@REVENUESTREAMSTYPECODE = '0' and @REVENUESTREAMSAPPLICATIONID <> '')
      begin
        select @REVENUESTREAMSTYPECODE = TYPECODE 
        from FINANCIALTRANSACTION 
        where ID = @REVENUESTREAMSAPPLICATIONID
      end

      --Bug#743568 - Get GIVENANONYMOUSLY from Applied Revenue(Import case and this wasn't set true in Import CSV)

      if (@IMPORT = 1 and @GIVENANONYMOUSLY <> 1)
      begin
        select         
          @GIVENANONYMOUSLY = GIVENANONYMOUSLY 
        from dbo.REVENUE_EXT
        where ID = @REVENUESTREAMSAPPLICATIONID;
      end

      --Do not set if this is a new commitment, application info needs to be null in this case

      if (@REVENUESTREAMSAPPLICATIONID <> '' and @REVENUESTREAMSTYPECODE <> '' and @REVENUESTREAMSAPPLIEDAMOUNT <> '' and exists(select 1 from FINANCIALTRANSACTION where ID = @REVENUESTREAMSAPPLICATIONID))
        begin
          select  @APPLICATIONINFO = 
            @REVENUESTREAMSAPPLICATIONID
            + ':' +
            case @REVENUESTREAMSTYPECODE 
              when '1' then '5'   -- Pledge

              when '2' then '4'   -- Recurring gift

              when '3' then '8'   -- Matching gift claim

              when '4' then '6'   -- Planned gift

              else
                @REVENUESTREAMSTYPECODE   -- 9. Grant award, 10. Donor challenge

            end
            + ':' + 
            @REVENUESTREAMSAPPLIEDAMOUNT
        end
    end

    insert into dbo.BATCHREVENUE
    (
      ID,BATCHID,CONSTITUENTID,DATE,PAYMENTMETHODCODE,DONOTACKNOWLEDGE,CHECKDATE,CHECKNUMBER,REFERENCEDATE,REFERENCENUMBER, 
      CREDITCARDID, AUTHORIZATIONCODE, CONSTITUENTACCOUNTID, AMOUNT, TYPECODE, RECEIPTAMOUNT, 
      DONOTRECEIPT, SEQUENCE, APPLYTOSHOWNFORCONSTITUENTID, INSTALLMENTFREQUENCYCODE, INSTALLMENTSTARTDATE, 
      INSTALLMENTENDDATE, NUMBEROFINSTALLMENTS, FINDERNUMBER, SOURCECODE, APPEALID, FINDERNUMBERISVALID, 
      USERMODIFIEDBENEFITS, BENEFITSWAIVED, POSTDATE, POSTSTATUSCODE, PROPERTYSUBTYPECODEID, GIFTINKINDSUBTYPECODEID, 
      SENDPLEDGEREMINDER, SALEDATE, SALEAMOUNT, BROKERFEE, SALEPOSTSTATUSCODE, SALEPOSTDATE, ISSUER, NUMBEROFUNITS, 
      SYMBOL, MEDIANPRICE, NOTETITLE, NOTEAUTHORID, NOTEDATEENTERED, NOTETYPECODEID, NOTETEXTNOTE, 
      GIVENANONYMOUSLY, GIVENANONYMOUSLYDEFAULTEDFORCONSTITUENTID, USERMODIFIEDRECEIPTAMOUNT, PLEDGESUBTYPEID,
      REJECTIONMESSAGE, MAILINGID, CHANNELCODEID, PAYMENTFORPLEDGEAMOUNT, RECEIPTTYPECODE, 
      ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED,OTHERPAYMENTMETHODCODEID, LETTERCODEID, ACKNOWLEDGEDATE, REFERENCE, 
      GLREVENUECATEGORYMAPPINGID, ACKNOWLEDGEEID, OTHERTYPECODEID,OPPORTUNITYID, DIRECTDEBITRESULTCODE, LOWPRICE, HIGHPRICE, NUMBEROFUNITSSOLD,
      USERMODIFIEDNUMBEROFUNITSSOLD, STANDINGORDERSETUP, STANDINGORDERSETUPDATE, TRANSACTIONID, DECLINESGIFTAID, DDISOURCECODEID, DDISOURCEDATE, ISCOVENANT,
      AMOUNTFORVAT, VATTAXRATEID, VATAMOUNT, APPLICATIONINFO, REVENUELOOKUPID, MGGENERATED, MGALTERED, PAYINGPENDINGREVENUEID,
      GIFTINKINDITEMNAME, GIFTINKINDDISPOSITIONCODE, GIFTINKINDNUMBEROFUNITS, GIFTINKINDFAIRMARKETVALUE, DIRECTDEBITISREJECTED, ISGIFTAIDSPONSORSHIP,
      LOCKBOXID, LOCKBOXBATCHNUMBER, LOCKBOXBATCHSEQUENCE, PDACCOUNTSYSTEMID, BASECURRENCYID, TRANSACTIONCURRENCYID,
      BASEEXCHANGERATEID, EXCHANGERATE, USESYSTEMGENERATEDREFERENCENUMBER, STANDINGORDERREFERENCENUMBER,APPLYBYPERCENT, MERCHANTACCOUNTID,
      SALE_LOWPRICE, SALE_MEDIANPRICE, SALE_HIGHPRICE,CREDITCARDATTEMPTCOUNT,VENDORID, CLIENTAPPLICENSEID, RECEIPTNUMBER, RECEIPTSTACKSHORTNAME,
      NAMECODE, SIMILARADDRESSCODE,UNSIMILARADDRESSCODE, NEWADDRESSENDDATECODE, NEWADDRESSPRIMARYCODE, BIRTHDATERULECODE, DIFFERENTPHONECODE,
      NEWPHONEENDDATECODE, NEWPHONEPRIMARYCODE, DIFFERENTEMAILCODE, NEWEMAILENDDATECODE, NEWEMAILPRIMARYCODE, USEGLOBALSETTINGS, CREATEHISTORICALNAMECODE,
      PAYMENTFORPLEDGERECEIPTAMOUNT, SEPAMANDATEID, INSTALLMENTAMOUNT,REQUIRECREDITCARDPROCESSING, NOTEHTMLNOTE, CARDHOLDERNAME, CREDITTYPECODEID, CREDITCARDPARTIALNUMBER, EXPIRESON
    )
    values 
    (
      @ID,@BATCHID,@CONSTITUENTID,@DATE,@PAYMENTMETHODCODE,@DONOTACKNOWLEDGE,@CHECKDATE,@CHECKNUMBER,@REFERENCEDATE,@REFERENCENUMBER,
      @CREDITCARDID, @AUTHORIZATIONCODE, @CONSTITUENTACCOUNTID, @AMOUNT, @TYPECODE, @RECEIPTAMOUNT
      @DONOTRECEIPT,@SEQUENCE,@APPLYTOSHOWNFORCONSTITUENTID, @INSTALLMENTFREQUENCYCODE, @INSTALLMENTSTARTDATE
      @INSTALLMENTENDDATE, @NUMBEROFINSTALLMENTS, @FINDERNUMBER, @SOURCECODE, @APPEALID, @FINDERNUMBERISVALID
      @USERMODIFIEDBENEFITS, @BENEFITSWAIVED, @POSTDATE, @POSTSTATUSCODE, @PROPERTYSUBTYPECODEID, @GIFTINKINDSUBTYPECODEID
      @SENDPLEDGEREMINDER, @SALEDATE, @SALEAMOUNT, @BROKERFEE, @SALEPOSTSTATUSCODE, @SALEPOSTDATE, @ISSUER, @NUMBEROFUNITS
      @SYMBOL, @MEDIANPRICE, @NOTETITLE, @NOTEAUTHORID, @NOTEDATEENTERED, @NOTETYPECODEID, @NOTETEXTNOTE
      @GIVENANONYMOUSLY, @GIVENANONYMOUSLYDEFAULTEDFORCONSTITUENTID, @USERMODIFIEDRECEIPTAMOUNT, @PLEDGESUBTYPEID
      @REJECTIONMESSAGE, @MAILINGID, @CHANNELCODEID, @PAYMENTFORPLEDGEAMOUNT, @RECEIPTTYPECODE
      @CHANGEAGENTID, @CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE,@OTHERPAYMENTMETHODCODEID,@LETTERCODEID,@ACKNOWLEDGEDATE,@REFERENCE,
      @CATEGORYCODEID, @ACKNOWLEDGEEID, @OTHERTYPECODEID, @OPPORTUNITYID, @DIRECTDEBITRESULTCODE, @LOWPRICE, @HIGHPRICE, @NUMBEROFUNITSSOLD,
      @USERMODIFIEDNUMBEROFUNITSSOLD, @STANDINGORDERSETUP, @STANDINGORDERSETUPDATE, @TRANSACTIONID, @DECLINESGIFTAID, @DDISOURCECODEID, @DDISOURCEDATE
      @ISCOVENANT, @AMOUNTFORVAT, @VATTAXRATEID, @VATAMOUNT, @APPLICATIONINFO, coalesce(rtrim(ltrim(@REVENUELOOKUPID)),''), @MGGENERATED, @MGALTERED, @PAYINGPENDINGREVENUEID,
      @GIFTINKINDITEMNAME, @GIFTINKINDDISPOSITIONCODE, @GIFTINKINDNUMBEROFUNITS, @GIFTINKINDFAIRMARKETVALUE, @DIRECTDEBITISREJECTED, coalesce(@ISGIFTAIDSPONSORSHIP, 0),
      @LOCKBOXID, @LOCKBOXBATCHNUMBER, @LOCKBOXBATCHSEQUENCE, @PDACCOUNTSYSTEMID, @BASECURRENCYID, @TRANSACTIONCURRENCYID,
      @BASEEXCHANGERATEID, @EXCHANGERATE, @GENERATEREFERENCENUMBER, @STANDINGORDERREFERENCENUMBER,@APPLYBYPERCENT, @MERCHANTACCOUNTID,
      @SALE_LOWPRICE, @SALE_MEDIANPRICE, @SALE_HIGHPRICE, @CREDITCARDATTEMPTCOUNT,isnull(@VENDORID, ''), isnull(@CLIENTAPPLICENSEID, ''), coalesce(@RECEIPTNUMBER, 0), coalesce(@RECEIPTSTACKSHORTNAME, ''),
      @NAMECODE, @SIMILARADDRESSCODE, @UNSIMILARADDRESSCODE, @NEWADDRESSENDDATECODE, @NEWADDRESSPRIMARYCODE, @BIRTHDATERULECODE, @DIFFERENTPHONECODE,
      @NEWPHONEENDDATECODE, @NEWPHONEPRIMARYCODE, @DIFFERENTEMAILCODE, @NEWEMAILENDDATECODE, @NEWEMAILPRIMARYCODE, @USEGLOBALSETTINGS, @CREATEHISTORICALNAMECODE,
      @PAYMENTFORPLEDGERECEIPTAMOUNT, @SEPAMANDATEID, @INSTALLMENTAMOUNT,@REQUIRECREDITCARDPROCESSING, @NOTEHTMLNOTE, @CARDHOLDERNAME, @CREDITTYPECODEID, @CREDITCARDNUMBER, @EXPIRESON
    );

    -- Create the splits collection with the single designation if the splits collection is null and the designation isn't

    if @SPLITS is null and @SINGLEDESIGNATIONID is not null and @TYPECODE <> 0 -- Payment

    begin
      set @SPLITS = ( select
                @SINGLEDESIGNATIONID as DESIGNATIONID,
@AMOUNT as AMOUNT,
                1 as SEQUENCE,
                @DECLINESGIFTAID as DECLINESGIFTAID,
                @ISGIFTAIDSPONSORSHIP as ISGIFTAIDSPONSORSHIP
                for xml raw('ITEM'),type,elements,root('SPLITS'),binary base64)
    end

    if @SPLITS is not null
    begin
      exec dbo.USP_REVENUEBATCH_SPLITSWITHCHILDREN_UPDATEFROMXML @ID, @SPLITS, @DATE, @CHANGEAGENTID, @CURRENTDATE;
    end

    -- Sync the additional applications collection with the single application info field

    declare @ADDITIONALAPPLICATIONCOUNT int = isnull((select count(*) from @ADDITIONALAPPLICATIONSSTREAM.nodes('/ADDITIONALAPPLICATIONSSTREAM/ITEM') T(c)), 0)
    if @TYPECODE = 0 and len(@APPLICATIONINFO) = 3 and @ADDITIONALAPPLICATIONCOUNT = 0
    begin
      declare @APPTYPE integer = convert(integer, substring(@APPLICATIONINFO,3,1));

      set @ADDITIONALAPPLICATIONSSTREAM = (
        select
          ID, TYPECODE, APPLIED, DESIGNATIONID, OTHERTYPECODEID, DECLINESGIFTAID, OPPORTUNITYID, ISGIFTAIDSPONSORSHIP, CATEGORYCODEID, DIDCAMPAIGNSDEFAULT
        from (
          select
            NEWID() ID,
            @APPTYPE TYPECODE,
            @AMOUNT APPLIED,
            @SINGLEDESIGNATIONID DESIGNATIONID, 
            @OTHERTYPECODEID OTHERTYPECODEID,
            @DECLINESGIFTAID DECLINESGIFTAID, 
            @OPPORTUNITYID OPPORTUNITYID,
            coalesce(@ISGIFTAIDSPONSORSHIP, 0) ISGIFTAIDSPONSORSHIP,
            @CATEGORYCODEID CATEGORYCODEID,
            cast(0 as bit) as DIDCAMPAIGNSDEFAULT
        ) ADDITIONALAPPLICATION
        for xml raw('ITEM'),type,elements,root('ADDITIONALAPPLICATIONSSTREAM'),binary base64);         
    end

    if not @ADDITIONALAPPLICATIONSSTREAM is null
    begin
      exec dbo.USP_REVENUEBATCH_ADDITIONALAPPLICATIONWITHCHILDREN_UPDATEFROMXML @ID, @ADDITIONALAPPLICATIONSSTREAM, @DATE, @CHANGEAGENTID, @CURRENTDATE;
    end

    declare @APPLICATIONCODE tinyint;
    declare @SINGLEAPPLICATIONID uniqueidentifier;
    declare @APPLICATIONTYPECODE tinyint;

    -- @APPLICATIONINFO = 0:3 is for Sponsorship additional donation and the stored procedure "USP_DATALIST_RECOGNITIONDEFAULTS" is expecting type code 3 for default recognition credits in case of a matching gift claim,

    -- so passing type code 0 in case of Sponsorship Additional Donation so that recognitions get defaulted correctly.

    if len(@APPLICATIONINFO) = 3   
      set @APPLICATIONCODE = case when cast(substring(@APPLICATIONINFO, 3, 1) as tinyint) = 3 then 0 else cast(substring(@APPLICATIONINFO, 3, 1) as tinyint) end;
    else if len(@APPLICATIONINFO) > 3
      begin try
        select  
          @SINGLEAPPLICATIONID = SINGLEAPPLICATIONID,
          @APPLICATIONTYPECODE = APPLICATIONTYPECODE
        from dbo.UFN_REVENUEBATCH_PARSEAPPLICATIONINFO(@APPLICATIONINFO)
      end try
      begin catch
        set @InfoMsg='BBERR_ORIGINAL_ERROR:50001';
        raiserror(@InfoMsg,1,11);

        select
          @ErrorMessage = ERROR_MESSAGE(),
          @ErrorSeverity = ERROR_SEVERITY(),
          @ErrorState = ERROR_STATE();

        raiserror(@ErrorMessage,@ErrorSeverity,@ErrorState);
        return 1;
      end catch


    --JamesWilliams If this application was generated by the generate payments process, mark it pending

    if @SINGLEAPPLICATIONID is not null and @SINGLEAPPLICATIONID <> '00000000-0000-0000-0000-000000000000' and @SINGLEAPPLICATIONID = @PAYINGPENDINGREVENUEID
      update dbo.REVENUESCHEDULE
        set REVENUESCHEDULE.ISPENDING = 1,
          REVENUESCHEDULE.CHANGEDBYID = @CHANGEAGENTID,
          REVENUESCHEDULE.DATECHANGED = @CURRENTDATE
      where ID = @PAYINGPENDINGREVENUEID;

    declare @SPLITCOUNT int
    select @SPLITCOUNT = count(*) from @SPLITS.nodes('/SPLITS/ITEM') T(c)

    -- Default additional application recognition credits if they were not specified.

    -- Note that additional applications are in the transaction currency of the row.

    if @APPLICATIONRECOGNITIONS is null and @ADDITIONALAPPLICATIONCOUNT > 0
    begin
        exec dbo.USP_REVENUEBATCH_DEFAULTAPPLICATIONRECOGNITIONS @APPLICATIONRECOGNITIONS output, @ADDITIONALAPPLICATIONSSTREAM, @GIVENANONYMOUSLY, @CONSTITUENTID, @DATE, @BASECURRENCYID, @BASEEXCHANGERATEID, @TRANSACTIONCURRENCYID, @BASECURRENCYDECIMALDIGITS, @BASECURRENCYROUNDINGTYPECODE, @EXCHANGERATE
    end

    declare @ISEXCEPTIONBATCH bit = 0
    if exists (select top 1 1 from BATCH where ID = @BATCHID and ORIGINATINGBATCHID != null)
    set @ISEXCEPTIONBATCH = 1;

    -- deal with payment payment application recognitions/solicitors

    -- don't add these if this is an exception batch

    if @REVENUESTREAMS.exist('/REVENUESTREAMS/ITEM') <> 0 and @TYPECODE = 0 and @ISEXCEPTIONBATCH = 0
      exec dbo.USP_REVENUEBATCH_ADDPAYMENTRECOGNITIONSANDSOLICITORS @ID, @APPLICATIONRECOGNITIONS, @APPLICATIONSOLICITORS, @REVENUESTREAMS, @CHANGEAGENTID, @CURRENTDATE   

    if @APPLICATIONCODE is not null and @SPLITCOUNT > 1 and @TYPECODE = 0
      exec dbo.USP_REVENUEBATCH_ADDRECOGNITIONSANDSOLICITORS @ID, @APPLICATIONRECOGNITIONS, @APPLICATIONSOLICITORS, @SPLITS, @APPLICATIONCODE, NULL, @CHANGEAGENTID, @CURRENTDATE
    else if @APPLICATIONCODE is null and @SINGLEAPPLICATIONID is null and @ADDITIONALAPPLICATIONCOUNT >= 1 and @TYPECODE = 0
      exec dbo.USP_REVENUEBATCH_ADDRECOGNITIONSANDSOLICITORS @ID, @APPLICATIONRECOGNITIONS, @APPLICATIONSOLICITORS, NULL, NULL, @ADDITIONALAPPLICATIONSSTREAM, @CHANGEAGENTID, @CURRENTDATE
    else if @APPLICATIONCODE = 0 and @APPLICATIONRECOGNITIONS is not null and @ADDITIONALAPPLICATIONCOUNT >= 1 
          and @TYPECODE = 0 and @APPLICATIONINFO <> '0:3' and (@IMPORT = 1 or @BBNCTRANID > 0)  -- Don't execute this if not an import or BBIS row. 

          -- WI#748335 - the code below was being executed for exception batches and recognitions were defaulted.

        begin
            -- WI#603655: Recognition credits are not being created correctly on import by batch templates with application defaulted to 'Donation'

            -- @APPLICATIONRECOGNITIONS should be used to create recognitions when there are multiple additional applications

            -- APPLICATIONINFO was also being incorrectly set to '0:0' instead of a blank string

            exec dbo. USP_REVENUEBATCH_ADDRECOGNITIONSANDSOLICITORS @ID, @APPLICATIONRECOGNITIONS, @APPLICATIONSOLICITORS, NULL, NULL, @ADDITIONALAPPLICATIONSSTREAM, @CHANGEAGENTID, @CURRENTDATE
            update BATCHREVENUE set APPLICATIONINFO = '' where ID = @ID;
         end
    else
    begin
      if not @RECOGNITIONS is null and @RECOGNITIONS.exist('RECOGNITIONS/ITEM') <> 0
        exec dbo.USP_REVENUEBATCH_GETRECOGNITIONS_ADDFROMXML @ID, @RECOGNITIONS, @CHANGEAGENTID;
      else
        if @DIDRECOGNITIONSDEFAULT = 0
        begin
          -- Create default recognitions

          declare @SCAMOUNT money

          set @SCAMOUNT = @AMOUNT 

          -- Convert to base currency.

          set @SCAMOUNT = case
            when @BASECURRENCYID = @TRANSACTIONCURRENCYID
              then @SCAMOUNT
            when @BASEEXCHANGERATEID = '00000000-0000-0000-0000-000000000001'
              then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(@SCAMOUNT, @EXCHANGERATE), @BASECURRENCYDECIMALDIGITS, @BASECURRENCYROUNDINGTYPECODE)
            else
              dbo.UFN_CURRENCY_CONVERT(@SCAMOUNT, @BASEEXCHANGERATEID)
          end

          --APPLICATIONTYPECODE 8 in APPLICATIONINFO is for Matching gift and UFN_REVENUEBATCH_GETRECOGNITIONDEFAULTS_2 expects type code 3 for matching gift.

          --APPLICATIONTYPECODE 4 in APPLICATIONINFO is for Recurring Gift and UFN_REVENUEBATCH_GETRECOGNITIONDEFAULTS_2 expects 2.

          --APPLICATIONTYPECODE 1 in APPLICATIONINFO is for Sponsorship Recurring Gift and UFN_REVENUEBATCH_GETRECOGNITIONDEFAULTS_2 expects 2.

   declare @APPTYPECODE tinyint = 
            case @APPLICATIONTYPECODE
              when 8 then 3 
              when 4 then 2 
              when 1 then 2 
              else coalesce(@APPLICATIONTYPECODE, @APPLICATIONCODE
           end

          if @SCAMOUNT >= 0
          begin
            insert into dbo.BATCHREVENUERECOGNITION
            (
              BATCHREVENUEID, 
              CONSTITUENTID, 
              REVENUERECOGNITIONTYPECODEID,
              AMOUNT,
              EFFECTIVEDATE,
              ADDEDBYID, 
              CHANGEDBYID, 
              DATEADDED, 
              DATECHANGED
            )
            select
              @ID,
              RECOGNITIONS.CONSTITUENTID,
              RECOGNITIONS.REVENUERECOGNITIONTYPECODEID,
              RECOGNITIONS.AMOUNT,
              @date,
              @CHANGEAGENTID,
              @CHANGEAGENTID,
              @CURRENTDATE
              @CURRENTDATE
            from dbo.UFN_REVENUEBATCH_GETRECOGNITIONDEFAULTS_3(@GIVENANONYMOUSLY, @CONSTITUENTID, @SCAMOUNT, @DATE, null, @APPTYPECODE, @SINGLEAPPLICATIONID, @ID) as RECOGNITIONS where RECOGNITIONS.AMOUNT > 0;
          end
        end

        if not @SOLICITORS is null
          exec dbo.USP_REVENUEBATCH_GETSOLICITORS_ADDFROMXML @ID, @SOLICITORS, @CHANGEAGENTID;
    end

    if not @BENEFITS is null
      exec dbo.USP_REVENUEBATCH_GETBENEFITS_ADDFROMXML @ID, @BENEFITS, @CHANGEAGENTID;

    if not @PERCENTAGEBENEFITS is null
      exec dbo.USP_REVENUEBATCH_GETBENEFITSPCT_ADDFROMXML @ID, @PERCENTAGEBENEFITS, @CHANGEAGENTID;

    if not @INSTALLMENTS is null
    begin
     -- first loop through and set the ID field if it hasn't been set bug 119652

    set @INSTALLMENTS = (select
          case when T.c.value('(ID)[1]','uniqueidentifier') is null or T.c.value('(ID)[1]','uniqueidentifier') = '00000000-0000-0000-0000-000000000000' then newid() else T.c.value('(ID)[1]','uniqueidentifier') end as ID,
          T.c.value('(INSTALLMENTID)[1]','uniqueidentifier') AS 'INSTALLMENTID',
          T.c.value('(DATE)[1]','datetime') AS 'DATE',
          T.c.value('(AMOUNT)[1]','money') AS 'AMOUNT',
          T.c.value('(RECEIPTAMOUNT)[1]','money') AS 'RECEIPTAMOUNT',
          T.c.value('(BALANCE)[1]','money') AS 'BALANCE',
          T.c.value('(APPLIED)[1]','money') AS 'APPLIED',
          T.c.value('(SEQUENCE)[1]','int') AS 'SEQUENCE',
          (select 
              ID,
              INSTALLMENTSPLITID,
              AMOUNT,
              APPLIED,
              DESIGNATIONID
              from dbo.UFN_REVENUEUPDATEBATCH_GETINSTALLMENTSPLITS_FROMITEMLISTXML(T.c.query('(INSTALLMENTSPLITS)[1]'))
              for xml raw('ITEM'),type,elements,BINARY BASE64) as 'INSTALLMENTSPLITS'
        from @INSTALLMENTS.nodes('/INSTALLMENTS/ITEM') T(c)
        for xml raw('ITEM'),type,elements,root('INSTALLMENTS'),binary base64);

      exec dbo.USP_REVENUEBATCH_GETINSTALLMENTS_ADDFROMXML @ID, @INSTALLMENTS, @CHANGEAGENTID;
      --insert into temp_test(test) values(convert(nvarchar(max),@INSTALLMENTS));

      declare @BATCHINSTALLMENTID uniqueidentifier;
      declare @INSTALLMENTSPLITS xml;
      declare INSTALLMENTSPLITS cursor local fast_forward for 
      select 
        T.c.value('(ID)[1]','uniqueidentifier') as BATCHINSTALLMENTID,
        cast(T.c.query('INSTALLMENTSPLITS') as xml) as INSTALLMENTSPLITS
      from @INSTALLMENTS.nodes('/INSTALLMENTS/ITEM') T(c)
      open INSTALLMENTSPLITS
      fetch next from INSTALLMENTSPLITS into @BATCHINSTALLMENTID, @INSTALLMENTSPLITS

      while @@FETCH_STATUS = 0
      begin

        exec dbo.USP_REVENUEUPDATEBATCH_GETINSTALLMENTSPLITS_ADDFROMXML @BATCHINSTALLMENTID, @INSTALLMENTSPLITS, @CHANGEAGENTID;

      fetch next from INSTALLMENTSPLITS into @BATCHINSTALLMENTID, @INSTALLMENTSPLITS
      end
      close INSTALLMENTSPLITS
      deallocate INSTALLMENTSPLITS
    end

if not @UNAPPLIEDMATCHINGGIFTSPLITS is null
      exec dbo.USP_REVENUEBATCH_GETUNAPPLIEDMATCHINGGIFTSPLITS_ADDFROMXML @ID, @UNAPPLIEDMATCHINGGIFTSPLITS, @CHANGEAGENTID;

    if not @TRIBUTES is null
      exec dbo.USP_REVENUEBATCH_GETTRIBUTES_ADDFROMXML @ID, @TRIBUTES, @CHANGEAGENTID;

    if not @TAXDECLARATIONS is null
      exec dbo.USP_REVENUEBATCH_GETTAXDECLARATIONS_ADDFROMXML @ID, @TAXDECLARATIONS, @CHANGEAGENTID;


    if not @REVENUESTREAMS is null
    begin 
      exec dbo.USP_REVENUEBATCH_REVENUEAPPLICATIONS_ADDFROMXML_2 @ID, @REVENUESTREAMS, @CHANGEAGENTID, @CURRENTDATE, @CURRENTAPPUSERID;

      /*JamesWill 2006-10-06 Changed update from using an inner join to using a where ID in (select...) */
      /*JamesWill 2007-03-02 CR268756-030207 only mark gifts pending if they were automatically generated */
      update dbo.REVENUESCHEDULE
        set REVENUESCHEDULE.ISPENDING = 1,
          REVENUESCHEDULE.CHANGEDBYID = @CHANGEAGENTID,
          REVENUESCHEDULE.DATECHANGED = @CURRENTDATE
      where ID in (select REVENUEID from dbo.BATCHREVENUEAPPLICATION where BATCHREVENUEID = @ID and APPLIED > 0 and WASGENERATED = 1);
    end

    --If Transaction is of type Payment and MatchingGift collection is empty - do generate the Matching Gifts

    if @TYPECODE = 0 and @MGALTERED = 0 and @MATCHINGGIFTS.exist('MATCHINGGIFTS/ITEM') = 0
        begin
            if @REVENUESTREAMS.exist('/REVENUESTREAMS/ITEM') = 0 and len(@APPLICATIONINFO) > 3
                begin
                    set @REVENUESTREAMS = 
                        (
                            select
                            newid() as ID,
                            @SINGLEAPPLICATIONID as APPLICATIONID,
                            (
                                case @APPLICATIONTYPECODE 
                                when 5 then 1 --Pledge Payment

                                when 8 then 3 --MGPledge Payment

                                when 4 then 2 --Recurring Gift Payment

                                when 7 then 6 --Event Registration Payment

                                when 6 then 4 --Planned gift

                                when 2 then 5 --Membership

                                when 10 then 10 -- Donor challenge payment

                                when 1 then 33 --Sponsorship Payment

                                when 9 then 9 --Grant Award Payment

                                else -1
                                end
                            ) as TYPECODE,
                            @AMOUNT as APPLIED,
                            @DECLINESGIFTAID as DECLINESGIFTAID,
                            @OPPORTUNITYID as OPPORTUNITYID,
                            @ISGIFTAIDSPONSORSHIP as ISGIFTAIDSPONSORSHIP,
                            @SINGLEDESIGNATIONID as DESIGNATIONID,
                            @TRANSACTIONCURRENCYID as TRANSACTIONCURRENCYID
                            for xml raw('ITEM'),type,elements,root('REVENUESTREAMS'),binary base64
                        );
                end

            set @MATCHINGGIFTS =
                 (  
                    select
                    newid(),
                    DEFAULTMATCHINGGIFTS.[MATCHEDCONSTITUENTID] MATCHINGCONSTITUENTID,
                    DEFAULTMATCHINGGIFTS.[ORGANIZATIONID], 
                    DEFAULTMATCHINGGIFTS.[RELATIONSHIPID],
                    DEFAULTMATCHINGGIFTS.[MATCHINGGIFTCONDITIONTYPEID] MATCHINGGIFTCONDITIONID,
                    DEFAULTMATCHINGGIFTS.[AMOUNT],
                    DEFAULTMATCHINGGIFTS.[DATE],
                    case when DEFAULTMATCHINGGIFTS.[SPLITS] is null then null else DEFAULTMATCHINGGIFTS.[SPLITS].query('(SPLITS/ITEM)') end as SPLITS,
                    DEFAULTMATCHINGGIFTS.[COULDNOTDEFAULTMATCHINGGIFT],
                    @TRANSACTIONCURRENCYID,
                    @BASEEXCHANGERATEID, --Use the same exchange rate as the payment

                    null,
                    0                   
                  from dbo.UFN_REVENUEBATCH_GETDEFAULTMATCHINGGIFTS_4(
                    @CONSTITUENTID
                    @DATE
                    @AMOUNT
                    @CALCULATEDRECEIPTAMOUNT
                    null
                    @TRANSACTIONCURRENCYID
                    @REVENUESTREAMS
                    @ADDITIONALAPPLICATIONSSTREAM
                  ) as [DEFAULTMATCHINGGIFTS]
                 for xml raw('ITEM'),type,elements,root('MATCHINGGIFTS'),BINARY BASE64 
                );

            if @MATCHINGGIFTS is not null
            begin
                update dbo.BATCHREVENUE
                set MGALTERED = 1
                where ID = @ID;
            end 

        end 

    if exists (
      select 
        1 
      from
        @MATCHINGGIFTS.nodes('MATCHINGGIFTS/ITEM') as MATCHINGGIFTSXML([MATCHINGGIFT])
      where 
        MATCHINGGIFTSXML.[MATCHINGGIFT].value('MATCHINGCONSTITUENTID[1]', 'uniqueidentifier') is null
    )
    raiserror('BBERR_MATCHINGCONSTITUENTIDREQUIRED', 13, 1);

    exec dbo.USP_REVENUEBATCH_ENHANCEDMATCHINGGIFTSWITHCHILDREN_UPDATEFROMXML @ID, @MATCHINGGIFTS, @CHANGEAGENTID, @CURRENTDATE;

    if @APPLICATIONBUSINESSUNITS is not null
      exec dbo.USP_REVENUEBATCH_ADDBUSINESSUNITS @ID, @APPLICATIONBUSINESSUNITS, @TYPECODE

  --Add BBIS fields to batch

  if @BBNCTRANSACTIONPROCESSORID is not null and @BBNCTRANID > 0
    begin
      insert into dbo.BBNCDOWNLOADEDTRANSACTION ([ID])
      values (@BBNCID);

      insert into dbo.BATCHREVENUEBBNCINFO
      (
        BATCHREVENUEID,
        NETCOMMUNITYTRANSACTIONPROCESSORID,
        ORIGINAPPEALID,
        BBNCTRANID,
        BBNCID,
        PAGENAME,
        PAGEID,
        ADDEDBYID,
        CHANGEDBYID,
        DATEADDED,
        DATECHANGED,
        MARKGIFTASRECEIPTED,
        EMAILID,
        EMAILSUBJECT,
        EMAILNAME,
        FIRSTPAYMENTPROCESSED
      )
      values
      (
        @ID,
        @BBNCTRANSACTIONPROCESSORID,
        @BBNCORIGINAPPEALID,
        @BBNCTRANID,
        @BBNCID,
        @BBNCORIGINPAGENAME,
        @BBNCORIGINPAGEID,
        @CHANGEAGENTID,
        @CHANGEAGENTID,
        @CURRENTDATE,
        @CURRENTDATE,
        coalesce(@MARKGIFTASRECEIPTED, 0),
        coalesce(@EMAILID, 0),
        coalesce(@EMAILSUBJECT, ''),
        coalesce(@EMAILNAME, ''),
        coalesce(@FIRSTPAYMENTPROCESSED, '')
      );

      delete from dbo.BBNCUNSUCCESSFULDOWNLOADTRANSACTION
      where ID = @BBNCID;
    end

    if @SOLICITCODES is not null
    begin
     exec dbo.USP_BATCHREVENUE_GETCONSTITUENTSOLICITCODES_ADDFROMXML_DEFAULTID  @ID, @SOLICITCODES, @CHANGEAGENTID;
    end

    -- add solicit codes for matched constituent

    if @IMPORT = 1 or @BBNCTRANID > 0
    begin
        insert into [dbo].[BATCHREVENUECONSTITUENTSOLICITCODE]
        (
          [ID],
          [BATCHREVENUEID],
          [SOLICITCODEID],
          [CONSTITUENTSOLICITCODEID],
          [STARTDATE],
          [ENDDATE],
          [COMMENTS],
          [SEQUENCE],
          [CONSENTPREFERENCECODE],
          [SOURCECODEID],
          [SOURCEFILEPATH],
          [PRIVACYPOLICYFILEPATH],
          [SUPPORTINGINFORMATION],
          [CONSENTSTATEMENT],
          [ADDEDBYID],
          [CHANGEDBYID],
          [DATEADDED],
          [DATECHANGED]
        )
        select
          newid() ID,
          @ID [BATCHREVENUEID],
          CONSTITUENTSOLICITCODE.[SOLICITCODEID],
          CONSTITUENTSOLICITCODE.[ID] [CONSTITUENTSOLICITCODEID],
          CONSTITUENTSOLICITCODE.[STARTDATE],
          CONSTITUENTSOLICITCODE.[ENDDATE],
          CONSTITUENTSOLICITCODE.[COMMENTS],
          CONSTITUENTSOLICITCODE.[SEQUENCE],
          CONSTITUENTSOLICITCODE.[CONSENTPREFERENCECODE],
          CONSTITUENTSOLICITCODE.[SOURCECODEID],
          CONSTITUENTSOLICITCODE.[SOURCEFILEPATH],
          CONSTITUENTSOLICITCODE.[PRIVACYPOLICYFILEPATH],
          CONSTITUENTSOLICITCODE.[SUPPORTINGINFORMATION],
          CONSTITUENTSOLICITCODE.[CONSENTSTATEMENT],
          @CHANGEAGENTID,
          @CHANGEAGENTID,
          @CURRENTDATE,
          @CURRENTDATE
        from dbo.CONSTITUENTSOLICITCODE
        left join BATCHREVENUECONSTITUENTSOLICITCODE on CONSTITUENTSOLICITCODE.ID = BATCHREVENUECONSTITUENTSOLICITCODE.CONSTITUENTSOLICITCODEID and
         BATCHREVENUEID = @ID
        where
          CONSTITUENTSOLICITCODE.[CONSTITUENTID] = @CONSTITUENTID and
          BATCHREVENUECONSTITUENTSOLICITCODE.ID is null;

    end

    select @SOLICITCODES = dbo.UFN_BATCHREVENUE_GETCONSTITUENTSOLICITCODES_TOITEMLISTXML(@ID);

    if @SOLICITCODES is not null
    begin
      -- address the auto end date issues for consent based solicit codes

      exec dbo.USP_BATCHREVENUE_ADJUSTSOLICITCODEDATERANGES @CONSTITUENTID, @SOLICITCODES, @CHANGEAGENTID;
    end

    -- Get rid of any constituent edits for a constituent other than the one we ended up saving.

    delete from dbo.BATCHCONSTITUENTUPDATE
    where ID = @ID
    and PRIMARYRECORDID <> @CONSTITUENTID

    --this is a constituent update coming from import or BBIS - business rules are applied as well

    if @NEWCONSTITUENT.exist('NEWCONSTITUENT/ITEM') = 1 and exists (select ID from dbo.CONSTITUENT where ID = @CONSTITUENTID)          
      begin
        exec USP_REVENUEBATCH_EDITCONSTITUENTFROMXML_1
              @NEWCONSTITUENT
              @CONSTITUENTID
              @BATCHID
              @ID
              @CHANGEAGENTID
              @CURRENTAPPUSERID
              @NAMECODE,
              @SIMILARADDRESSCODE,
              @UNSIMILARADDRESSCODE,
              @NEWADDRESSPRIMARYCODE,
              @BIRTHDATERULECODE,
              @DIFFERENTPHONECODE,
              @NEWPHONEPRIMARYCODE,
              @DIFFERENTEMAILCODE,
              @NEWEMAILPRIMARYCODE;              

          if exists (select ID from dbo.BATCHREVENUECONSTITUENT where ID = @CONSTITUENTID)
          --constituent was resolved by DUPLICATE check

          --delete the temporary batch version of the constituent

          exec dbo.USP_REVENUEBATCH_CONSTITUENT_DELETE @BATCHREVENUECONSTITUENTID = @CONSTITUENTID, @CHANGEAGENTID = @CHANGEAGENTID              
      end              

  end try

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

  return 0;
end