USP_RECURRINGGIFT_ADDPAYMENT

Adds a payment to a recurring gift.

Parameters

Parameter Parameter Type Mode Description
@REVENUEID uniqueidentifier IN
@APPLICATIONID uniqueidentifier IN
@APPLIEDAMOUNT money IN
@CONSTITUENTID uniqueidentifier IN
@DATE datetime IN
@CREATIONDATE datetime IN
@CHANGEAGENTID uniqueidentifier IN
@CREATEDSPLITS xml INOUT
@BUSINESSUNITSAPPLIED bit IN
@BASEAPPLIEDAMOUNT money IN
@ORGANIZATIONAPPLIEDAMOUNT money IN

Definition

Copy


CREATE procedure dbo.USP_RECURRINGGIFT_ADDPAYMENT
(
  @REVENUEID uniqueidentifier,
  @APPLICATIONID uniqueidentifier,
  @APPLIEDAMOUNT money,
  @CONSTITUENTID uniqueidentifier,
  @DATE datetime,
  @CREATIONDATE datetime = null,
  @CHANGEAGENTID uniqueidentifier = null,
  @CREATEDSPLITS xml = null output,
  @BUSINESSUNITSAPPLIED bit = 0,
  @BASEAPPLIEDAMOUNT money = null,
  @ORGANIZATIONAPPLIEDAMOUNT money = null
)
as
  set nocount on

  declare @PAYMENTTRANSACTIONCURRENCYID uniqueidentifier;
  declare @PAYMENTBASECURRENCYID uniqueidentifier;
  declare @PAYMENTBASEEXCHANGERATEID uniqueidentifier;
  declare @PAYMENTORGANIZATIONEXCHANGERATEID uniqueidentifier;
  declare @PAYMENTBASETOORGANIZATIONEXCHANGERATEID uniqueidentifier;
  declare @PAYMENTRANSACTIONCURRENCYDECIMALDIGITS tinyint;
  declare @PAYMENBASECURRENCYDECIMALDIGITS tinyint;
  declare @ORGANIZATIONCURRENCYDECIMALDIGITS tinyint;
  declare @POSTDATE date;
  declare @POSTSTATUSCODE tinyint;

  declare @appealid uniqueidentifier,
  @mailingid uniqueidentifier,
  @sourcecode nvarchar(50),
  @channelcodeid uniqueidentifier;

  declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
  select @ORGANIZATIONCURRENCYDECIMALDIGITS = CURRENCY.DECIMALDIGITS from dbo.CURRENCY where CURRENCY.ID = @ORGANIZATIONCURRENCYID;

  select
    @PAYMENTTRANSACTIONCURRENCYID = REVENUE.TRANSACTIONCURRENCYID,
    @PAYMENTBASECURRENCYID = V.BASECURRENCYID,
    @PAYMENTBASEEXCHANGERATEID = REVENUE.BASEEXCHANGERATEID,
    @PAYMENTORGANIZATIONEXCHANGERATEID = REVENUE.ORGEXCHANGERATEID,
    @PAYMENTRANSACTIONCURRENCYDECIMALDIGITS = TRANSACTIONCURRENCY.DECIMALDIGITS,
    @PAYMENBASECURRENCYDECIMALDIGITS = BASECURRENCY.DECIMALDIGITS,
    @POSTDATE = REVENUE.POSTDATE,
    @POSTSTATUSCODE = case REVENUE.POSTSTATUSCODE when 2 then 1 else REVENUE.POSTSTATUSCODE end
  from
    dbo.FINANCIALTRANSACTION REVENUE
    inner join dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I V on V.FINANCIALTRANSACTIONID = REVENUE.ID
    inner join dbo.CURRENCY as TRANSACTIONCURRENCY on REVENUE.TRANSACTIONCURRENCYID = TRANSACTIONCURRENCY.ID
    inner join dbo.CURRENCY as BASECURRENCY on V.BASECURRENCYID = BASECURRENCY.ID
  where
    REVENUE.ID = @REVENUEID;

  -- Convert the applied amount into base and organization amounts if it is not provided by the caller

  if @BASEAPPLIEDAMOUNT is null or @ORGANIZATIONAPPLIEDAMOUNT is null
    exec dbo.USP_CURRENCY_GETCURRENCYVALUES @APPLIEDAMOUNT, @DATE, @PAYMENTBASECURRENCYID, @PAYMENTBASEEXCHANGERATEID output, @PAYMENTTRANSACTIONCURRENCYID output, @BASEAPPLIEDAMOUNT output, null, @ORGANIZATIONAPPLIEDAMOUNT output, @PAYMENTORGANIZATIONEXCHANGERATEID, 0, @PAYMENTBASETOORGANIZATIONEXCHANGERATEID output;
  else
    set @PAYMENTBASETOORGANIZATIONEXCHANGERATEID = dbo.UFN_CURRENCYEXCHANGERATE_GETLATESTBASETOORGANIZATIONRATE(@PAYMENTBASECURRENCYID, @DATE, null, @PAYMENTORGANIZATIONEXCHANGERATEID);

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

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

  declare @CURRENTTRANSACTIONDATE datetime, @NEXTTRANSACTIONDATE datetime,  @RGSTATUS tinyint;

  select
    @CURRENTTRANSACTIONDATE = NEXTTRANSACTIONDATE, 
    @NEXTTRANSACTIONDATE = dbo.UFN_REVENUE_GETNEXTTRANSACTIONDATE_BYID_1_1(@APPLICATIONID, NEXTTRANSACTIONDATE),
    @RGSTATUS = STATUSCODE
  from dbo.REVENUESCHEDULE
  where ID = @APPLICATIONID;

  declare @RECURRINGGIFTSPLIT table
  (
    ID uniqueidentifier,
    SOURCEREVENUESPLITID uniqueidentifier,
    DESIGNATIONID uniqueidentifier,
    AMOUNT money,
    TYPECODE tinyint,
    BASEAMOUNT money,
    ORGANIZATIONAMOUNT money,
    TRANSACTIONCURRENCYID uniqueidentifier,
    BASECURRENCYID uniqueidentifier,
    BASEEXCHANGERATEID uniqueidentifier,
    ORGANIZATIONEXCHANGERATEID uniqueidentifier
  );

  declare @TEMPSPLITSXML xml;

  -- Build splits xml for easier processing by the multicurrency splits conversion function.

  -- UFN_REVENUE_GETPRORATEDSPLITS does its calculations in the transaction currency, giving us

  -- transaction amounts we can then convert to base and organization amounts.

  set @TEMPSPLITSXML = (
    select
      SOURCEREVENUESPLITID,
      DESIGNATIONID,
      AMOUNT,
      TYPECODE
    from
      dbo.UFN_REVENUE_GETPRORATEDSPLITS_2(@APPLICATIONID, @APPLIEDAMOUNT, @PAYMENTTRANSACTIONCURRENCYID) PRORATEDSPLITS
    for xml raw('ITEM'),type,elements,root('SPLITS'),BINARY BASE64
  );

  -- Populate the recurring gift splits temporary table.

  insert into @RECURRINGGIFTSPLIT
    (
      ID,
      SOURCEREVENUESPLITID,
      DESIGNATIONID,
      AMOUNT,
      TYPECODE,
      BASEAMOUNT,
      ORGANIZATIONAMOUNT,
      TRANSACTIONCURRENCYID,
      BASECURRENCYID,
      BASEEXCHANGERATEID,
      ORGANIZATIONEXCHANGERATEID
    )
  select
    newid(),
    CONVERTEDITEM.ITEM.value('(ITEM/SOURCEREVENUESPLITID)[1]', 'uniqueidentifier'),
    CONVERTEDITEM.ITEM.value('(ITEM/DESIGNATIONID)[1]', 'uniqueidentifier'),
    CONVERTEDITEM.ITEM.value('(ITEM/AMOUNT)[1]', 'money'),
    CONVERTEDITEM.ITEM.value('(ITEM/TYPECODE)[1]', 'tinyint'),
    CONVERTEDITEM.BASEAMOUNT,
    CONVERTEDITEM.ORGANIZATIONAMOUNT,
    @PAYMENTTRANSACTIONCURRENCYID,
    @PAYMENTBASECURRENCYID,
    @PAYMENTBASEEXCHANGERATEID,
    @PAYMENTORGANIZATIONEXCHANGERATEID
  from
    dbo.UFN_CURRENCY_GETCURRENCYVALUESBYPROPORTIONINXML
      (
        @TEMPSPLITSXML,
        @PAYMENTTRANSACTIONCURRENCYID,
        @PAYMENTBASECURRENCYID,
        @ORGANIZATIONCURRENCYID,
        @APPLIEDAMOUNT,
        @BASEAPPLIEDAMOUNT,
        @PAYMENBASECURRENCYDECIMALDIGITS,
        @ORGANIZATIONAPPLIEDAMOUNT,
        @ORGANIZATIONCURRENCYDECIMALDIGITS
      ) CONVERTEDITEM;

  declare @ADJUSTMENTPOSTSTATUSCODE tinyint;
  declare @ADJUSTMENTPOSTDATE date;
  declare @ADJUSTMENTID uniqueidentifier;
  select top 1 
    @ADJUSTMENTPOSTSTATUSCODE = case A.POSTSTATUSCODE when 2 then 3 else 1 end
    ,@ADJUSTMENTPOSTDATE = A.POSTDATE
    ,@ADJUSTMENTID = ALI.ID
  from dbo.ADJUSTMENT A
  left join dbo.FINANCIALTRANSACTIONLINEITEMADJUSTMENT ALI on A.ID = ALI.ID
  where A.REVENUEID = @REVENUEID
  order by A.DATEADDED desc;

  insert into dbo.FINANCIALTRANSACTIONLINEITEM 
    (ID
    ,FINANCIALTRANSACTIONID
    ,TRANSACTIONAMOUNT
    ,VISIBLE
    ,DESCRIPTION
    ,SEQUENCE
    ,TYPECODE
    ,POSTDATE
    ,POSTSTATUSCODE
    ,BASEAMOUNT
    ,ORGAMOUNT
    ,FINANCIALTRANSACTIONLINEITEMADJUSTMENTID
    -- Boilerplate

    ,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
  select
    ID
    ,@REVENUEID
    ,AMOUNT
    ,1
    ,''
    ,1
    ,0
    ,isnull(@ADJUSTMENTPOSTDATE, @POSTDATE)
    ,isnull(@ADJUSTMENTPOSTSTATUSCODE, @POSTSTATUSCODE)
    ,BASEAMOUNT
    ,ORGANIZATIONAMOUNT
    ,@ADJUSTMENTID
    ,@CHANGEAGENTID, @CHANGEAGENTID, @CREATIONDATE, @CREATIONDATE
  from @RECURRINGGIFTSPLIT

  merge dbo.REVENUESPLIT_EXT as target
  using @RECURRINGGIFTSPLIT as source      
  on (source.ID = target.ID)      
    when matched then
  update set 
    DESIGNATIONID = source.DESIGNATIONID
    ,CHANGEDBYID = @CHANGEAGENTID
    ,DATECHANGED = @CREATIONDATE
  when not matched then
    insert 
    (
      ID
      ,DESIGNATIONID
      ,TYPECODE
      ,APPLICATIONCODE
      ,OVERRIDEBUSINESSUNITS
      ,REVENUESPLITBUSINESSUNITOVERRIDECODEID
      -- boilerplate

      ,ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
    )
    values 
    (    
      source.ID
      ,source.DESIGNATIONID
      ,source.TYPECODE
      ,3
      ,0
      ,null
      --  boilerplate

      ,@CHANGEAGENTID, @CHANGEAGENTID, @CREATIONDATE, @CREATIONDATE);

  -- Cross-currency payments:  Get the application currency and exchange rate

  declare @APPLICATIONCURRENCYID uniqueidentifier;
  declare @APPLICATIONEXCHANGERATEID uniqueidentifier;

  select @APPLICATIONCURRENCYID = TRANSACTIONCURRENCYID from dbo.REVENUE where ID = @APPLICATIONID;

  if @APPLICATIONCURRENCYID <> @PAYMENTTRANSACTIONCURRENCYID
  begin
    if @APPLICATIONCURRENCYID = @PAYMENTBASECURRENCYID
      set @APPLICATIONEXCHANGERATEID = @PAYMENTBASEEXCHANGERATEID;
    else
      set @APPLICATIONEXCHANGERATEID = dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@PAYMENTTRANSACTIONCURRENCYID,@APPLICATIONCURRENCYID,@DATE,1,null);

    if @APPLICATIONEXCHANGERATEID is null
    begin
      raiserror('BBERR_APPLICATIONEXCHANGERATEDOESNOTEXIST : A payment can only be applied to an application if the payment and application have the same transaction currency or if there is an exchange rate from the payment transaction currency to the application transaction currency.', 13, 1);
      return 1;
    end
  end

  insert into dbo.RECURRINGGIFTACTIVITY
  (
    PAYMENTREVENUEID,
    TYPECODE,
    SOURCEREVENUEID,
    AMOUNT,
    SCHEDULEDATE,
    APPLICATIONCURRENCYID,
    APPLICATIONEXCHANGERATEID,
    ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
  )
  select
    ID,
    0, -- Payment

    @APPLICATIONID,
    case when @APPLICATIONEXCHANGERATEID is null
      then AMOUNT
    else
      dbo.UFN_CURRENCY_CONVERT(AMOUNT, @APPLICATIONEXCHANGERATEID) --TODO: Should the total be converted once and then split by proportion?

    end,
    @CURRENTTRANSACTIONDATE,
    @APPLICATIONCURRENCYID,
    @APPLICATIONEXCHANGERATEID,
    @CHANGEAGENTID, @CHANGEAGENTID, @CREATIONDATE, @CREATIONDATE
  from @RECURRINGGIFTSPLIT;

  --Performance: Forcing the query plan to filter FTM tables first before joining to the campaign

  declare @RevenueSplitCampaignsIds table(RECURRINGGIFTSPLITID uniqueidentifier, REVENUESPLITID uniqueidentifier)
  insert into @RevenueSplitCampaignsIds
  select
    RECURRINGGIFTSPLIT.ID,
    REVENUESPLIT_EXT.ID
  from @RECURRINGGIFTSPLIT as RECURRINGGIFTSPLIT
  inner join dbo.RECURRINGGIFTACTIVITY on RECURRINGGIFTSPLIT.ID = RECURRINGGIFTACTIVITY.PAYMENTREVENUEID
  inner join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT on RECURRINGGIFTACTIVITY.SOURCEREVENUEID = REVENUESPLIT.FINANCIALTRANSACTIONID
  inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT.ID = REVENUESPLIT_EXT.ID and RECURRINGGIFTSPLIT.DESIGNATIONID = REVENUESPLIT_EXT.DESIGNATIONID
  where REVENUESPLIT.DELETEDON is null and REVENUESPLIT_EXT.TYPECODE != 1;

  ---- generate campaigns from recurring gift

  insert into dbo.REVENUESPLITCAMPAIGN 
  (
    REVENUESPLITID,
    CAMPAIGNID, 
    CAMPAIGNSUBPRIORITYID,
    ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
  )
  select
    REVENUESPLITIDS.RECURRINGGIFTSPLITID,
    REVENUESPLITCAMPAIGN.CAMPAIGNID,
    REVENUESPLITCAMPAIGN.CAMPAIGNSUBPRIORITYID,
    @CHANGEAGENTID, @CHANGEAGENTID, @CREATIONDATE, @CREATIONDATE
  from @RevenueSplitCampaignsIds REVENUESPLITIDS
  inner join dbo.REVENUESPLITCAMPAIGN on REVENUESPLITIDS.REVENUESPLITID = REVENUESPLITCAMPAIGN.REVENUESPLITID
  inner join dbo.CAMPAIGN on REVENUESPLITCAMPAIGN.CAMPAIGNID = CAMPAIGN.ID 
  where CAMPAIGN.ISACTIVE = 1;

  -- LTM WI #186567, #167954 populate payment appealid, mailingid, sourcecode, channelcode if null in payment record and if source revenue has these values   

  -- appeal must exist before creation of revenuerecognition for FAF trigger

  select @appealid=APPEALID, @mailingid=MAILINGID, @sourcecode=SOURCECODE, @channelcodeid=CHANNELCODEID from dbo.REVENUE where ID = @APPLICATIONID
  update REX set
    APPEALID = coalesce(REX.APPEALID, @appealid),
    MAILINGID = coalesce(REX.MAILINGID,  @mailingid),
    SOURCECODE = coalesce(nullif(REX.SOURCECODE, ''), @sourcecode),
    CHANNELCODEID = coalesce(REX.CHANNELCODEID, @channelcodeid)
  from dbo.REVENUE_EXT REX
  where REX.ID = @REVENUEID

  -- create recognitions

  declare @REVENUEGIVENANONYMOUSLY bit,
  @SOURCEREVENUESPLITID  uniqueidentifier = null;
  select @REVENUEGIVENANONYMOUSLY = R.GIVENANONYMOUSLY
  from dbo.REVENUE R
  where R.ID = @REVENUEID;

   /*Friends Asking Friends recurring gift should credit the original recognition */
  if exists(select R.ID from dbo.REVENUE_EXT R inner join dbo.EVENT E on R.APPEALID = E.APPEALID inner join dbo.EVENTEXTENSION EX on E.ID = EX.EVENTID where R.ID = @APPLICATIONID)    
  begin
     select @SOURCEREVENUESPLITID = SOURCEREVENUESPLITID from  @RECURRINGGIFTSPLIT
  end


  insert into dbo.REVENUERECOGNITION
  (
    REVENUESPLITID, 
    CONSTITUENTID, 
    AMOUNT,
    EFFECTIVEDATE,
    REVENUERECOGNITIONTYPECODEID,
    BASECURRENCYID,
    ORGANIZATIONAMOUNT,
    ORGANIZATIONEXCHANGERATEID,
    ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
  )
  select
    REVENUESPLIT.ID,
    RECOGNITIONS.CONSTITUENTID,
    RECOGNITIONS.AMOUNT,
    @DATE,
    RECOGNITIONS.REVENUERECOGNITIONTYPECODEID,
    @PAYMENTBASECURRENCYID,
    case when @PAYMENTBASECURRENCYID = @ORGANIZATIONCURRENCYID 
      then RECOGNITIONS.AMOUNT
      else dbo.UFN_CURRENCY_CONVERT(RECOGNITIONS.AMOUNT, @PAYMENTBASETOORGANIZATIONEXCHANGERATEID)
    end,
    @PAYMENTBASETOORGANIZATIONEXCHANGERATEID,
    @CHANGEAGENTID, @CHANGEAGENTID, @CREATIONDATE, @CREATIONDATE
  from @RECURRINGGIFTSPLIT as REVENUESPLIT
  cross apply dbo.UFN_REVENUEDETAIL_GETDEFAULTRECOGNITIONS(@REVENUEGIVENANONYMOUSLY, @CONSTITUENTID, REVENUESPLIT.BASEAMOUNT, @DATE, @SOURCEREVENUESPLITID) as RECOGNITIONS;

  insert into dbo.REVENUESOLICITOR
  (
    REVENUESPLITID, 
    CONSTITUENTID, 
    AMOUNT, 
    SEQUENCE,
    BASECURRENCYID,
    ORGANIZATIONAMOUNT,
    ORGANIZATIONEXCHANGERATEID,
    ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
  )
  select
    RECURRINGGIFTSPLIT.ID,
    REVENUESOLICITOR.CONSTITUENTID,
    --JamesWill 04/03/2006 CR239791-033106 According to documentation, @APPLIEDAMOUNT will

    --implicitly cast as a decimal. Explicitly performing the cast rounds it, however, and

    --gives an incorrect result. 

    cast(RECURRINGGIFTSPLIT.BASEAMOUNT * (cast(REVENUESOLICITOR.AMOUNT as decimal(30, 5))/ cast(SOURCESPLIT.AMOUNT as decimal(30, 5))) as money),
    --cast(@BASEAPPLIEDAMOUNT * (cast(RECURRINGGIFTSPLIT.BASEAMOUNT as decimal(30, 5))/ cast(SOURCESPLIT.AMOUNT as decimal(30, 5))) as money),


    REVENUESOLICITOR.SEQUENCE,
    @PAYMENTBASECURRENCYID,
    case when @PAYMENTBASECURRENCYID = @ORGANIZATIONCURRENCYID 
      then cast(RECURRINGGIFTSPLIT.BASEAMOUNT * (cast(REVENUESOLICITOR.AMOUNT as decimal(30, 5))/ cast(SOURCESPLIT.AMOUNT as decimal(30, 5))) as money)
      else dbo.UFN_CURRENCY_CONVERT((cast(RECURRINGGIFTSPLIT.BASEAMOUNT * (cast(REVENUESOLICITOR.AMOUNT as decimal(30, 5))/ cast(SOURCESPLIT.AMOUNT as decimal(30, 5))) as money)), @PAYMENTBASETOORGANIZATIONEXCHANGERATEID)
    end,
    @PAYMENTBASETOORGANIZATIONEXCHANGERATEID,
    @CHANGEAGENTID, @CHANGEAGENTID, @CREATIONDATE, @CREATIONDATE
  from @RECURRINGGIFTSPLIT as RECURRINGGIFTSPLIT
  inner join dbo.REVENUESPLIT as SOURCESPLIT on RECURRINGGIFTSPLIT.SOURCEREVENUESPLITID = SOURCESPLIT.ID
  inner join dbo.REVENUESOLICITOR on SOURCESPLIT.ID = REVENUESOLICITOR.REVENUESPLITID;

  -- Copy category codes from the source splits

  insert into dbo.REVENUECATEGORY
  (
    ID,
    GLREVENUECATEGORYMAPPINGID,
    ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
  )
  select
    RECURRINGGIFTSPLIT.ID,
    REVENUECATEGORY.GLREVENUECATEGORYMAPPINGID,
    @CHANGEAGENTID, @CHANGEAGENTID, @CREATIONDATE, @CREATIONDATE
  from @RECURRINGGIFTSPLIT as RECURRINGGIFTSPLIT
  inner join dbo.REVENUECATEGORY on RECURRINGGIFTSPLIT.SOURCEREVENUESPLITID = REVENUECATEGORY.ID;

  -- Apply payment to existing installments

  exec dbo.USP_RECURRINGGIFT_APPLYPAYMENTTOINSTALLMENTS
    @APPLICATIONID,
    @CHANGEAGENTID,
    @CREATIONDATE,
    @REVENUEID,
    @APPLIEDAMOUNT,
    @NEXTTRANSACTIONDATE output,
    @APPLICATIONCURRENCYID,
    @APPLICATIONEXCHANGERATEID,
    null,
    null,
    @DATE,
    @CREATIONDATE

  -- Create sponsorship payment record for sponsorship payments.

  if (select top 1 TYPECODE from @RECURRINGGIFTSPLIT) = 9
    insert into dbo.SPONSORSHIPPAYMENT (ID, SPONSORSHIPID, GIFTFINANCIALSPONSORID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
    select [SPLITS].ID,
            SPONSORSHIP.ID,
          case when SPONSORSHIP.CONSTITUENTID <> [RG].CONSTITUENTID then [RG].CONSTITUENTID end,
          @CHANGEAGENTID, @CHANGEAGENTID, @CREATIONDATE, @CREATIONDATE
    from @RECURRINGGIFTSPLIT [SPLITS]
    inner join dbo.SPONSORSHIP on SPONSORSHIP.REVENUESPLITID = [SPLITS].SOURCEREVENUESPLITID and SPONSORSHIP.STATUSCODE = 1
    inner join dbo.REVENUE [RG] on [RG].ID = @APPLICATIONID;

  set @CREATEDSPLITS =    (
                select
                  REVENUESPLIT.AMOUNT,
                  REVENUESPLIT.DESIGNATIONID,
                  REVENUESPLIT.ID,
                  REVENUESPLIT.REVENUEID,
                  REVENUESPLIT.APPLICATIONCODE,
                  REVENUESPLIT.TYPECODE,
                  RECURRINGGIFTSPLIT.SOURCEREVENUESPLITID,
                  REVENUESPLIT.TRANSACTIONAMOUNT,
                  REVENUESPLIT.ORGANIZATIONAMOUNT,
                  REVENUESPLIT.BASECURRENCYID,
                  REVENUESPLIT.TRANSACTIONCURRENCYID,
                  REVENUESPLIT.BASEEXCHANGERATEID,
                  REVENUESPLIT.ORGANIZATIONEXCHANGERATEID
                from @RECURRINGGIFTSPLIT as RECURRINGGIFTSPLIT
                inner join dbo.REVENUESPLIT on REVENUESPLIT.ID = RECURRINGGIFTSPLIT.ID
                for xml raw('ITEM'),type,elements,root('SPLITS'),BINARY BASE64
              );

  --Copy revenue attributes of the recurring gift to the payment

  exec dbo.USP_REVENUEATTRIBUTES_COPYTOREVENUE @APPLICATIONID, @REVENUEID, @CHANGEAGENTID;

  /* Apply business units */  
  if @BUSINESSUNITSAPPLIED =0
    exec dbo.USP_REVENUESPLIT_APPLYBUSINESSUNITS @REVENUEID, @CHANGEAGENTID, @CREATIONDATE;