USP_DATAFORMTEMPLATE_EDIT_2_REVENUEBATCHROW_16

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CONSTITUENTID uniqueidentifier IN
@TYPECODE tinyint IN
@DATE datetime IN
@AMOUNT money IN
@PAYMENTMETHODCODE tinyint IN
@DONOTACKNOWLEDGE bit IN
@CHECKDATE UDT_FUZZYDATE IN
@CHECKNUMBER nvarchar(20) IN
@REFERENCEDATE UDT_FUZZYDATE IN
@REFERENCENUMBER nvarchar(20) IN
@CARDHOLDERNAME nvarchar(255) IN
@CREDITCARDNUMBER nvarchar(20) IN
@CREDITTYPECODEID uniqueidentifier IN
@AUTHORIZATIONCODE nvarchar(20) IN
@EXPIRESON UDT_FUZZYDATE IN
@ISSUER nvarchar(100) IN
@NUMBEROFUNITS decimal(20, 3) IN
@SYMBOL nvarchar(25) IN
@MEDIANPRICE decimal(19, 4) IN
@PROPERTYSUBTYPECODEID uniqueidentifier IN
@GIFTINKINDSUBTYPECODEID uniqueidentifier IN
@RECEIPTAMOUNT money IN
@DONOTRECEIPT bit IN
@CONSTITUENTACCOUNTID uniqueidentifier IN
@SPLITS xml IN
@SINGLEDESIGNATIONID uniqueidentifier IN
@REVENUESTREAMS xml IN
@APPLYTOSHOWNFORCONSTITUENTID uniqueidentifier IN
@SEQUENCE int IN
@INSTALLMENTFREQUENCYCODE tinyint IN
@INSTALLMENTSTARTDATE datetime IN
@INSTALLMENTENDDATE datetime IN
@NUMBEROFINSTALLMENTS int IN
@SOLICITORS xml IN
@BENEFITS xml IN
@FINDERNUMBER bigint IN
@SOURCECODE nvarchar(60) IN
@APPEALID uniqueidentifier IN
@FINDERNUMBERISVALID bit IN
@USERMODIFIEDBENEFITS bit IN
@BENEFITSWAIVED bit IN
@POSTDATE datetime IN
@POSTSTATUSCODE tinyint IN
@SENDPLEDGEREMINDER bit IN
@SALEDATE datetime IN
@SALEAMOUNT money IN
@BROKERFEE money IN
@SALEPOSTSTATUSCODE tinyint IN
@SALEPOSTDATE datetime IN
@NOTETITLE nvarchar(50) IN
@NOTEAUTHORID uniqueidentifier IN
@NOTEDATEENTERED datetime IN
@NOTETYPECODEID uniqueidentifier IN
@NOTETEXTNOTE nvarchar(max) IN
@GIVENANONYMOUSLY bit IN
@GIVENANONYMOUSLYDEFAULTEDFORCONSTITUENTID uniqueidentifier IN
@USERMODIFIEDRECEIPTAMOUNT bit IN
@PLEDGESUBTYPEID uniqueidentifier IN
@REJECTIONCODEID uniqueidentifier IN
@CONSTITUENTLOOKUPID uniqueidentifier IN
@MAILINGID uniqueidentifier IN
@CHANNELCODEID uniqueidentifier IN
@INSTALLMENTS xml IN
@PAYMENTFORPLEDGEAMOUNT money IN
@RECOGNITIONS xml IN
@DIDRECOGNITIONSDEFAULT bit IN
@TRIBUTES xml IN
@UNAPPLIEDMATCHINGGIFTSPLITS xml IN
@UNAPPLIEDMATCHINGGIFTAMOUNT money IN
@RECEIPTTYPECODE tinyint IN
@NEWCONSTITUENT xml IN
@OTHERPAYMENTMETHODCODEID uniqueidentifier IN
@LETTERCODEID uniqueidentifier IN
@ACKNOWLEDGEDATE datetime IN
@REFERENCE nvarchar(255) IN
@CATEGORYCODEID uniqueidentifier IN
@ACKNOWLEDGEEID uniqueidentifier IN
@APPLICATIONINFO nvarchar(60) IN
@OTHERTYPECODEID uniqueidentifier IN
@OPPORTUNITYID uniqueidentifier IN
@DIRECTDEBITRESULTCODE nvarchar(10) IN
@LOWPRICE decimal(19, 4) IN
@HIGHPRICE decimal(19, 4) IN
@NUMBEROFUNITSSOLD decimal(20, 3) IN
@USERMODIFIEDNUMBEROFUNITSSOLD bit IN
@CREDITCARDTOKEN uniqueidentifier IN
@REJECTIONMESSAGE nvarchar(500) IN
@PARTIALCREDITCARDNUMBER nvarchar(4) IN
@TAXDECLARATIONS xml IN
@STANDINGORDERCONSTITUENTACCOUNTID uniqueidentifier IN
@STANDINGORDERREFERENCENUMBER nvarchar(18) IN
@STANDINGORDERREFERENCEDATE UDT_FUZZYDATE IN
@STANDINGORDERSETUP bit IN
@STANDINGORDERSETUPDATE datetime IN
@TRANSACTIONID uniqueidentifier IN
@ISTRANSIENTCARD bit IN
@DECLINESGIFTAID bit IN
@DDISOURCECODEID uniqueidentifier IN
@DDISOURCEDATE date IN
@ISCOVENANT bit IN
@AMOUNTFORVAT money IN
@VATTAXRATEID uniqueidentifier IN
@VATAMOUNT money IN
@ADDITIONALAPPLICATIONSSTREAM xml IN
@REVENUELOOKUPID nvarchar(100) IN
@APPLICATIONSOLICITORS xml IN
@APPLICATIONRECOGNITIONS xml IN
@CURRENTAPPUSERID uniqueidentifier IN
@MATCHINGGIFTS xml IN
@MGGENERATED bit IN
@MGALTERED bit IN
@PAYINGPENDINGREVENUEID uniqueidentifier IN
@GIFTINKINDITEMNAME nvarchar(100) IN
@GIFTINKINDDISPOSITIONCODE tinyint IN
@GIFTINKINDNUMBEROFUNITS int IN
@GIFTINKINDFAIRMARKETVALUE money IN
@DIRECTDEBITISREJECTED bit IN
@PERCENTAGEBENEFITS xml IN
@ISGIFTAIDSPONSORSHIP bit IN
@LOCKBOXID uniqueidentifier IN
@LOCKBOXBATCHNUMBER nvarchar(100) IN
@LOCKBOXBATCHSEQUENCE int IN
@PDACCOUNTSYSTEMID uniqueidentifier IN
@APPLICATIONBUSINESSUNITS xml IN
@TRANSACTIONCURRENCYID uniqueidentifier IN
@BASECURRENCYID uniqueidentifier IN
@BASEEXCHANGERATEID uniqueidentifier IN
@EXCHANGERATE decimal(20, 8) IN
@GENERATEREFERENCENUMBER bit IN
@APPLYBYPERCENT bit IN
@SOURCECODEIMPORT nvarchar(60) IN
@CURRENTBATCHROWID uniqueidentifier IN
@MERCHANTACCOUNTID uniqueidentifier IN
@SETNULLBASEEXCHANGERATETOLATEST bit IN
@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
@EMAILID int IN
@EMAILNAME nvarchar(510) IN
@EMAILSUBJECT 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
@RECEIPTSTACKSHORTNAME nvarchar(20) IN
@MARKGIFTASRECEIPTED bit 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_EDIT_2_REVENUEBATCHROW_16
(
  @ID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier,
  @CONSTITUENTID uniqueidentifier,
  @TYPECODE tinyint,
  @DATE datetime,
  @AMOUNT money,
  @PAYMENTMETHODCODE tinyint,
  @DONOTACKNOWLEDGE bit,
  @CHECKDATE dbo.UDT_FUZZYDATE,
  @CHECKNUMBER nvarchar(20),
  @REFERENCEDATE dbo.UDT_FUZZYDATE,
  @REFERENCENUMBER nvarchar(20),
  @CARDHOLDERNAME nvarchar(255),
  @CREDITCARDNUMBER nvarchar(20),
  @CREDITTYPECODEID uniqueidentifier,
  @AUTHORIZATIONCODE nvarchar(20),
  @EXPIRESON dbo.UDT_FUZZYDATE,
  @ISSUER nvarchar(100),
  @NUMBEROFUNITS decimal(20,3),
  @SYMBOL nvarchar(25),
  @MEDIANPRICE decimal(19,4),
  @PROPERTYSUBTYPECODEID uniqueidentifier,
  @GIFTINKINDSUBTYPECODEID uniqueidentifier,
  @RECEIPTAMOUNT money,
  @DONOTRECEIPT bit,
  @CONSTITUENTACCOUNTID uniqueidentifier,
  @SPLITS xml,
  @SINGLEDESIGNATIONID uniqueidentifier,
  @REVENUESTREAMS xml,
  @APPLYTOSHOWNFORCONSTITUENTID uniqueidentifier,
  @SEQUENCE int,
  @INSTALLMENTFREQUENCYCODE tinyint,
  @INSTALLMENTSTARTDATE datetime,
  @INSTALLMENTENDDATE datetime,
  @NUMBEROFINSTALLMENTS int,
  @SOLICITORS xml,
  @BENEFITS xml,
  @FINDERNUMBER bigint,
  @SOURCECODE nvarchar(60),
  @APPEALID uniqueidentifier,
  @FINDERNUMBERISVALID bit,
  @USERMODIFIEDBENEFITS bit,
  @BENEFITSWAIVED bit,
  @POSTDATE datetime,
  @POSTSTATUSCODE tinyint,
  @SENDPLEDGEREMINDER bit,
  @SALEDATE datetime,
  @SALEAMOUNT money,
  @BROKERFEE money,
  @SALEPOSTSTATUSCODE tinyint,
  @SALEPOSTDATE datetime,
  @NOTETITLE nvarchar(50),
  @NOTEAUTHORID uniqueidentifier,
  @NOTEDATEENTERED datetime,
  @NOTETYPECODEID uniqueidentifier,
  @NOTETEXTNOTE nvarchar(max),
  @GIVENANONYMOUSLY bit,
  @GIVENANONYMOUSLYDEFAULTEDFORCONSTITUENTID uniqueidentifier,
  @USERMODIFIEDRECEIPTAMOUNT bit,
  @PLEDGESUBTYPEID uniqueidentifier,
  @REJECTIONCODEID uniqueidentifier,
  @CONSTITUENTLOOKUPID uniqueidentifier,
  @MAILINGID uniqueidentifier,
  @CHANNELCODEID uniqueidentifier,
  @INSTALLMENTS xml,
  @PAYMENTFORPLEDGEAMOUNT money,
  @RECOGNITIONS xml,
  @DIDRECOGNITIONSDEFAULT bit,
  @TRIBUTES xml,
  @UNAPPLIEDMATCHINGGIFTSPLITS xml,
  @UNAPPLIEDMATCHINGGIFTAMOUNT money,
  @RECEIPTTYPECODE tinyint,
  @NEWCONSTITUENT xml,
  @OTHERPAYMENTMETHODCODEID uniqueidentifier,
  @LETTERCODEID uniqueidentifier,
  @ACKNOWLEDGEDATE datetime,
  @REFERENCE nvarchar(255),
  @CATEGORYCODEID uniqueidentifier,
  @ACKNOWLEDGEEID uniqueidentifier,
  @APPLICATIONINFO nvarchar(60),
  @OTHERTYPECODEID uniqueidentifier,
  @OPPORTUNITYID uniqueidentifier,
  @DIRECTDEBITRESULTCODE nvarchar(10),
  @LOWPRICE decimal(19,4),
  @HIGHPRICE decimal(19,4),
  @NUMBEROFUNITSSOLD decimal(20,3),
  @USERMODIFIEDNUMBEROFUNITSSOLD bit,
  @CREDITCARDTOKEN uniqueidentifier,
  @REJECTIONMESSAGE nvarchar(500),
  -- PARTIALCREDITCARDNUMBER is used to support import and 

  -- credit card - last 4 digits recurring gifts

  @PARTIALCREDITCARDNUMBER nvarchar(4),
  @TAXDECLARATIONS xml,
  @STANDINGORDERCONSTITUENTACCOUNTID uniqueidentifier, 
  @STANDINGORDERREFERENCENUMBER nvarchar(18), 
  @STANDINGORDERREFERENCEDATE dbo.UDT_FUZZYDATE,
  @STANDINGORDERSETUP bit,
  @STANDINGORDERSETUPDATE datetime,
  @TRANSACTIONID uniqueidentifier,
  @ISTRANSIENTCARD bit,
  @DECLINESGIFTAID bit,
  @DDISOURCECODEID uniqueidentifier,
  @DDISOURCEDATE date,
  @ISCOVENANT bit,
  @AMOUNTFORVAT money,
  @VATTAXRATEID uniqueidentifier,
  @VATAMOUNT money,
  @ADDITIONALAPPLICATIONSSTREAM xml,
  @REVENUELOOKUPID nvarchar(100),
  @APPLICATIONSOLICITORS xml,
  @APPLICATIONRECOGNITIONS xml,
  @CURRENTAPPUSERID uniqueidentifier = null,
  @MATCHINGGIFTS xml,
  @MGGENERATED bit,
  @MGALTERED bit,
  @PAYINGPENDINGREVENUEID uniqueidentifier,
  @GIFTINKINDITEMNAME nvarchar(100),
  @GIFTINKINDDISPOSITIONCODE tinyint,
  @GIFTINKINDNUMBEROFUNITS int,
  @GIFTINKINDFAIRMARKETVALUE money,
  @DIRECTDEBITISREJECTED bit,
  @PERCENTAGEBENEFITS xml,
  @ISGIFTAIDSPONSORSHIP bit,
  @LOCKBOXID uniqueidentifier,
  @LOCKBOXBATCHNUMBER nvarchar(100),
  @LOCKBOXBATCHSEQUENCE int,
  @PDACCOUNTSYSTEMID uniqueidentifier,
  @APPLICATIONBUSINESSUNITS xml,
  @TRANSACTIONCURRENCYID uniqueidentifier,
  @BASECURRENCYID uniqueidentifier,
  @BASEEXCHANGERATEID uniqueidentifier,
  @EXCHANGERATE decimal(20,8),
  @GENERATEREFERENCENUMBER bit,
  @APPLYBYPERCENT bit,
  @SOURCECODEIMPORT nvarchar(60),
  @CURRENTBATCHROWID uniqueidentifier,
  @MERCHANTACCOUNTID uniqueidentifier,
  @SETNULLBASEEXCHANGERATETOLATEST bit,
  @APPEALIDFORIMPORT uniqueidentifier,
  @SALE_LOWPRICE decimal(19,4),
  @SALE_MEDIANPRICE decimal(19,4),
  @SALE_HIGHPRICE decimal(19,4),
  @CREDITCARDATTEMPTCOUNT tinyint,
  @VENDORID nvarchar(50),
  @CLIENTAPPLICENSEID nvarchar(100),
  @BBNCTRANSACTIONPROCESSORID uniqueidentifier,
  @BBNCORIGINAPPEALID uniqueidentifier,
  @BBNCTRANID int,
  @BBNCID int,
  @BBNCORIGINPAGENAME nvarchar(100),
  @BBNCORIGINPAGEID int
  @FINANCIALINSTITUTIONID uniqueidentifier,
  @ACCOUNTNUMBER nvarchar(50),
  @ACCOUNTTYPE tinyint,
  @ACCOUNTNAME nvarchar(100),
  @RECEIPTNUMBER nvarchar(30),
  @EMAILID int,
  @EMAILNAME nvarchar(510),
  @EMAILSUBJECT nvarchar(510),
  @NAMECODE tinyint,
  @SIMILARADDRESSCODE tinyint,
  @UNSIMILARADDRESSCODE tinyint,
  @NEWADDRESSENDDATECODE tinyint,
  @NEWADDRESSPRIMARYCODE tinyint,
  @BIRTHDATERULECODE  tinyint,
  @DIFFERENTPHONECODE tinyint,
  @NEWPHONEENDDATECODE tinyint,
  @NEWPHONEPRIMARYCODE tinyint,
  @DIFFERENTEMAILCODE tinyint,
  @NEWEMAILENDDATECODE tinyint,
  @NEWEMAILPRIMARYCODE tinyint,
  @USEGLOBALSETTINGS bit,
  @CREATEHISTORICALNAMECODE tinyint,
  @RECEIPTSTACKSHORTNAME nvarchar(20),
  @MARKGIFTASRECEIPTED bit,
  @FIRSTPAYMENTPROCESSED nvarchar(10),
  @PAYMENTFORPLEDGERECEIPTAMOUNT money,
  @SEPAMANDATEID uniqueidentifier,
  @ADDSEPAMANDATE bit,
  @SEPAMANDATECUSTOMIDENTIFIER nvarchar(35),
  @SEPAMANDATESIGNATUREDATE date,
  @SEPAMANDATETYPECODE tinyint,
  @FINANCIALINSTITUTIONNAME nvarchar(100),
  @BANKINGSYSTEMID uniqueidentifier,
  @BRANCHNAME nvarchar(100),
  @ROUTINGNUMBER nvarchar(9),
  @SORTCODE nvarchar(6),
  @BIC nvarchar(11),
  @BANKCODE nvarchar(25),
  @INSTALLMENTAMOUNT money,
  @REQUIRECREDITCARDPROCESSING bit,
  @NOTEHTMLNOTE nvarchar(max),
  @IMPORT bit,
  @SOLICITCODES xml
)
as
  set nocount on;

  declare @CURRENTDATE datetime
  declare @BATCHID uniqueidentifier;

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

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

  set @CURRENTDATE = getdate();
  declare @contextCache varbinary(128);
  set @contextCache = CONTEXT_INFO();

  if not @CHANGEAGENTID is null
    set CONTEXT_INFO @CHANGEAGENTID;

  begin try
    select @BATCHID = [BATCHID]
    from dbo.[BATCHREVENUE]
    where [ID] = @ID;

    -- 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 @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
      if @GENERATEREFERENCENUMBER is null or @GENERATEREFERENCENUMBER = 1
        select 
          @STANDINGORDERREFERENCENUMBER = '',
          @GENERATEREFERENCENUMBER = 1

      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;
    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 @USERMODIFIEDNUMBEROFUNITSSOLD is null
      set @USERMODIFIEDNUMBEROFUNITSSOLD = 0;
    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 @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 @PAYMENTFORPLEDGEAMOUNT is null
      set @PAYMENTFORPLEDGEAMOUNT = 0;
    if @PAYMENTFORPLEDGERECEIPTAMOUNT is null
      set @PAYMENTFORPLEDGERECEIPTAMOUNT = 0;
    if @DIDRECOGNITIONSDEFAULT is null
   set @DIDRECOGNITIONSDEFAULT = 0;
    if @STANDINGORDERREFERENCEDATE is null
      set @STANDINGORDERREFERENCEDATE = '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 @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 @DIRECTDEBITISREJECTED is null --JamesWill WI174301 2011-11-21 

      set @DIRECTDEBITISREJECTED = 0;
    if @CREDITCARDATTEMPTCOUNT is null
      set @CREDITCARDATTEMPTCOUNT = 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 @FINDERNUMBER is null
      set @FINDERNUMBER = 0;

    if cast(@SPLITS as nvarchar(max)) = '' 
      set @SPLITS = null;

    if not @SPLITS is null
      set @SINGLEDESIGNATIONID = null;

    if @PAYMENTMETHODCODE is null
      set @PAYMENTMETHODCODE = 255;

    /* 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 @RECEIPTTYPECODE is null
      set @RECEIPTTYPECODE = 255;

    -- Don't save account system for recurring gifts.

    if @TYPECODE = 3
      set @PDACCOUNTSYSTEMID = null;

    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;


    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;


    declare @BASECURRENCYDECIMALDIGITS tinyint;
    declare @BASECURRENCYROUNDINGTYPECODE tinyint;

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

    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

    -- if there was a duplicate and it was resolved with UPDATE, remove the BATCHREVENUECONSTITUENT

    if exists (select ID from dbo.CONSTITUENT where ID = @CONSTITUENTID) and exists (select ID from dbo.BATCHREVENUECONSTITUENT where ID = @CONSTITUENTID)
    begin
      --delete the temporary batch version of the constituent

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

    declare @OLDAPPLICATIONINFO nvarchar(60);
    select @OLDAPPLICATIONINFO = APPLICATIONINFO
    from dbo.BATCHREVENUE where ID = @ID;

    --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 @EXPIRESON = '00000000';
    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;

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

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

    if ((@TYPECODE<>0) and (@SPLITS is null) and (@SINGLEDESIGNATIONID is not null))
    begin
      set @SPLITS = ( select
                @SINGLEDESIGNATIONID as DESIGNATIONID,
                @AMOUNT as AMOUNT,
                @DECLINESGIFTAID as DECLINESGIFTAID,
                1 as SEQUENCE,
                @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
    else
      delete from dbo.BATCHREVENUESPLIT where BATCHREVENUEID = @ID;

    delete from dbo.BATCHREVENUERECOGNITION where BATCHREVENUEID = @ID;
    delete from dbo.BATCHREVENUESOLICITOR where BATCHREVENUEID = @ID;
    declare @APPLICATIONCODE tinyint;
    declare @SINGLEAPPLICATIONID uniqueidentifier;
    declare @APPLICATIONTYPECODE tinyint;

    if @APPLICATIONINFO is not null
      if len(@APPLICATIONINFO) > 0
        if len(@APPLICATIONINFO) = 3
          set @APPLICATIONCODE = cast(substring(@APPLICATIONINFO, 3, 1) as tinyint);
        else if len(@APPLICATIONINFO) > 3
          select
            @SINGLEAPPLICATIONID = SINGLEAPPLICATIONID,
            @APPLICATIONTYPECODE = APPLICATIONTYPECODE
          from dbo.UFN_REVENUEBATCH_PARSEAPPLICATIONINFO(@APPLICATIONINFO)

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

    --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;

    -- 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 and @DIDRECOGNITIONSDEFAULT = 0
    begin
        exec dbo.USP_REVENUEBATCH_DEFAULTAPPLICATIONRECOGNITIONS @APPLICATIONRECOGNITIONS output, @ADDITIONALAPPLICATIONSSTREAM, @GIVENANONYMOUSLY, @CONSTITUENTID, @DATE, @BASECURRENCYID, @BASEEXCHANGERATEID, @TRANSACTIONCURRENCYID, @BASECURRENCYDECIMALDIGITS, @BASECURRENCYROUNDINGTYPECODE, @EXCHANGERATE;
    end

    -- deal with payment payment application recognitions/solicitors

    if @REVENUESTREAMS.exist('/REVENUESTREAMS/ITEM') <> 0 and @TYPECODE = 0
    begin
      exec dbo.USP_REVENUEBATCH_ADDPAYMENTRECOGNITIONSANDSOLICITORS @ID, @APPLICATIONRECOGNITIONS, @APPLICATIONSOLICITORS, @REVENUESTREAMS, @CHANGEAGENTID, @CURRENTDATE   
       if exists(select ID from BATCHREVENUERECOGNITION where BATCHREVENUEID = @ID)
         set @RECOGNITIONS = null
    end

    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
    begin
      if not @RECOGNITIONS is null and @RECOGNITIONS.exist('RECOGNITIONS/ITEM') <> 0
      begin
        exec dbo.USP_REVENUEBATCH_GETRECOGNITIONS_ADDFROMXML @ID, @RECOGNITIONS, @CHANGEAGENTID;
      end
      else if @DIDRECOGNITIONSDEFAULT = 0
      begin
        -- Bug 67025 - AdamBu 12/3/09 - When DIDRECOGNITIONSDEFAULT is false and RECOGNITIONS is null, it means that we should clear then default recognitions


        exec dbo.USP_REVENUEBATCH_GETRECOGNITIONS_UPDATEFROMXML @ID, null, @CHANGEAGENTID;

        -- 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
          );
        end
      end
      if not @SOLICITORS is null
        exec dbo.USP_REVENUEBATCH_GETSOLICITORS_ADDFROMXML @ID, @SOLICITORS, @CHANGEAGENTID;
    end

    --exec dbo.USP_REVENUEBATCH_GETADDITIONALAPPLICATIONS_UPDATEFROMXML @ID, @ADDITIONALAPPLICATIONSSTREAM, @CHANGEAGENTID;

    exec dbo.USP_REVENUEBATCH_ADDITIONALAPPLICATIONWITHCHILDREN_UPDATEFROMXML @ID, @ADDITIONALAPPLICATIONSSTREAM, @DATE, @CHANGEAGENTID


    exec dbo.USP_REVENUEBATCH_GETBENEFITS_UPDATEFROMXML @ID, @BENEFITS, @CHANGEAGENTID;
    exec dbo.USP_REVENUEBATCH_GETBENEFITSPCT_UPDATEFROMXML @ID, @PERCENTAGEBENEFITS, @CHANGEAGENTID;
    --exec dbo.USP_REVENUEBATCH_GETMATCHINGGIFTSPLITS_UPDATEFROMXML @ID, @MGSPLITS, @CHANGEAGENTID;

    exec dbo.USP_REVENUEBATCH_GETUNAPPLIEDMATCHINGGIFTSPLITS_UPDATEFROMXML @ID, @UNAPPLIEDMATCHINGGIFTSPLITS, @CHANGEAGENTID;
    exec dbo.USP_REVENUEBATCH_GETINSTALLMENTS_UPDATEFROMXML @ID, @INSTALLMENTS, @CHANGEAGENTID;

    --exec dbo.USP_REVENUEBATCH_GETINSTALLMENTS_UPDATEFROMXML @ID, @INSTALLMENTS, @CHANGEAGENTID;

    if not @INSTALLMENTS is null
    begin
    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_UPDATEFROMXML @ID, @INSTALLMENTS, @CHANGEAGENTID;
      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_UPDATEFROMXML @BATCHINSTALLMENTID, @INSTALLMENTSPLITS, @CHANGEAGENTID;

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


    exec dbo.USP_REVENUEBATCH_GETTRIBUTES_UPDATEFROMXML @ID, @TRIBUTES, @CHANGEAGENTID;
    exec dbo.USP_REVENUEBATCH_GETTAXDECLARATIONS_UPDATEFROMXML @ID, @TAXDECLARATIONS, @CHANGEAGENTID;

    --JamesWill CR268756-030207 2007/03/02

    --Unset the ISPENDING flag for all of the gifts we were previously applying to from a generated transaction

    update dbo.REVENUESCHEDULE
      set REVENUESCHEDULE.ISPENDING = 0,
        REVENUESCHEDULE.CHANGEDBYID = @CHANGEAGENTID,
        REVENUESCHEDULE.DATECHANGED = @CURRENTDATE
    where REVENUESCHEDULE.ID in (select REVENUEID from dbo.BATCHREVENUEAPPLICATION where BATCHREVENUEID = @ID and APPLIED > 0 and WASGENERATED = 1)

    -- It's possible there isn't a BATCHREVENUEAPPLICATION record for the pledge or recurring gift that was being paid

    -- and so the ISPENDING flag needs to be cleared without checking BATCHREVENUEAPPLICATION.

    if len(@OLDAPPLICATIONINFO) > 3
    begin
      declare @OLDSINGLEAPPLICATIONID uniqueidentifier;
      select @OLDSINGLEAPPLICATIONID = SINGLEAPPLICATIONID
      from dbo.UFN_REVENUEBATCH_PARSEAPPLICATIONINFO(@OLDAPPLICATIONINFO);

      -- Verify that the old single commitment would have set the ISPENDING flag

      if @OLDSINGLEAPPLICATIONID is not null and @OLDSINGLEAPPLICATIONID <> '00000000-0000-0000-0000-000000000000' and @OLDSINGLEAPPLICATIONID = @PAYINGPENDINGREVENUEID
      begin
        declare @SINGLEAPPLICATIONCHANGED bit = 0;
        if len(@APPLICATIONINFO) > 3
        begin
          if @OLDSINGLEAPPLICATIONID <> (select top 1 SINGLEAPPLICATIONID from dbo.UFN_REVENUEBATCH_PARSEAPPLICATIONINFO(@APPLICATIONINFO))
            set @SINGLEAPPLICATIONCHANGED = 1;
        end
        else
          set @SINGLEAPPLICATIONCHANGED = 1;

        -- If the single application has changed to not be towards the old commitment, clear the ISPENDING flag

        if @SINGLEAPPLICATIONCHANGED = 1
          update dbo.REVENUESCHEDULE
            set REVENUESCHEDULE.ISPENDING = 0,
              REVENUESCHEDULE.CHANGEDBYID = @CHANGEAGENTID,
              REVENUESCHEDULE.DATECHANGED = @CURRENTDATE
          where REVENUESCHEDULE.ID = @PAYINGPENDINGREVENUEID;
      end
    end

    declare @PLEDGEIDS as table (ID uniqueidentifier);
    insert into @PLEDGEIDS select BATCHREVENUEAPPLICATIONPLEDGEID from BATCHREVENUEAPPLICATION where BATCHREVENUEID = @ID
    delete from dbo.BATCHREVENUEAPPLICATIONPLEDGE where ID in (select ID from @PLEDGEIDS);

    declare @MEMBERSHIPIDS as table (ID uniqueidentifier);
    insert into @MEMBERSHIPIDS select BATCHREVENUEAPPLICATIONMEMBERSHIPID from BATCHREVENUEAPPLICATION where BATCHREVENUEID = @ID
    delete from dbo.BATCHREVENUEAPPLICATIONMEMBERSHIP where ID in (select ID from @MEMBERSHIPIDS);

    delete from BATCHREVENUEAPPLICATION where BATCHREVENUEID = @ID;

    exec dbo.USP_REVENUEBATCH_REVENUEAPPLICATIONS_ADDFROMXML_2 @ID, @REVENUESTREAMS, @CHANGEAGENTID, @CURRENTDATE, @CURRENTAPPUSERID;

    --JamesWill CR268756-030207 2007/03/02

    --Set the ISPENDING flag for all gifts that we are currently applying to which were from a generated transaction

    update dbo.REVENUESCHEDULE
      set REVENUESCHEDULE.ISPENDING = 1,
        REVENUESCHEDULE.CHANGEDBYID = @CHANGEAGENTID,
        REVENUESCHEDULE.DATECHANGED = @CURRENTDATE
    where REVENUESCHEDULE.ID in (select REVENUEID from dbo.BATCHREVENUEAPPLICATION where BATCHREVENUEID = @ID and APPLIED > 0 and WASGENERATED = 1)

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

    if not @contextCache is null
      set CONTEXT_INFO @contextCache

    /* Apply business units */
    exec dbo.USP_REVENUEBATCH_ADDBUSINESSUNITS @ID, @APPLICATIONBUSINESSUNITS, @TYPECODE

    /* Update BBIS transaction information */

     --@RECEIPTSTACKSHORTNAME is not used by USP, as it is read-only in ERB.

     --@MARKGIFTASRECEIPTED is not used by USP, as it is read-only in ERB.


     update 
      dbo.BATCHREVENUEBBNCINFO
     set
      BBNCTRANID = @BBNCTRANID,
      BBNCID = @BBNCID,
      NETCOMMUNITYTRANSACTIONPROCESSORID = @BBNCTRANSACTIONPROCESSORID,
      ORIGINAPPEALID = @BBNCORIGINAPPEALID,
      PAGENAME = @BBNCORIGINPAGENAME,
      PAGEID = @BBNCORIGINPAGEID,
      EMAILID = @EMAILID,
      EMAILSUBJECT = @EMAILSUBJECT,
      EMAILNAME = @EMAILNAME
    where  
    BATCHREVENUEID = @ID;

    -- 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;

    if @SOLICITCODES is not null
    begin
      exec dbo.USP_BATCHREVENUE_GETCONSTITUENTSOLICITCODES_UPDATEFROMXML @ID, @SOLICITCODES, @CHANGEAGENTID;
    end
    else
    begin
      delete from dbo.BATCHREVENUECONSTITUENTSOLICITCODE where BATCHREVENUEID = @ID;
    end
  end try

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

  return 0;