USP_REVENUEBATCH_REVENUEAPPLICATIONS_ADDFROMXML

Adds a collection of revenue applications to the database.

Parameters

Parameter Parameter Type Mode Description
@BATCHREVENUEID uniqueidentifier IN
@REVENUESTREAMS xml IN
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN
@CURRENTAPPUSERID uniqueidentifier IN

Definition

Copy


      CREATE procedure dbo.USP_REVENUEBATCH_REVENUEAPPLICATIONS_ADDFROMXML
      (
          @BATCHREVENUEID uniqueidentifier,
          @REVENUESTREAMS xml,
          @CHANGEAGENTID uniqueidentifier,
          @CHANGEDATE datetime,
          @CURRENTAPPUSERID uniqueidentifier = null
      )
      as
          set nocount on;

            -- The @REVENUESTREAMS field is a collection with REVENUESTREAM elements.

          -- A REVENUESTREAM element may have a PLEDGES collection with PLEDGE elements.

          -- A PLEDGE element may have SPLITS, BENEFITS, and INSTALLMENTS collections with similarly named elements.

          --

          -- The approach taken is to shred a collection into a table variable which contains its children as XML columns, creating a new primary key.

          -- Then, repeat the process for the children elements inserting a foreign key into their tables using the newly generated parent primary key.

          -- Repeat the process until we hit the bottom of the object tree.

          -- After everything has been shredded, insert the rows from our table variables into the corresponding batch tables.

          --

          -- More specifically:

          -- 1. Shred XML into table variables using FROMXML functions:

          --     +-----------------------------------------------------------------------+--------------------------------------+----------------------

          --     | Xml to Table Function Name                                            | Node Name                            | Table Variable Name

          --     |-----------------------------------------------------------------------+--------------------------------------+----------------------

          --   a | UFN_REVENUEBATCH_GETAPPLICATIONSWITHCHILDREN_FROMITEMLISTXML          | RevenueStreams/Item                  | @REVENUEAPPLICATIONS

          --   b | UFN_REVENUEBATCH_GETPAYMENTPLEDGE_FROMITEMLISTXML                     | ../../Pledges/Item                   | @PLEDGES

          --   c | UFN_REVENUEBATCH_GETSPLITSFORPAYMENTPLEDGE_FROMITEMLISTXML            | ../../../../Splits/Item              | @SPLITS

          --   d | UFN_REVENUEBATCH_GETINSTALLMENTSFORPAYMENTPLEDGE_FROMITEMLISTXML      | ../../../../Installments/Item        | @INSTALLMENTS

          --   e | UFN_REVENUEBATCH_GETBENEFITSFORPAYMENTPLEDGE_FROMITEMLISTXML          | ../../../../Benefits/Item            | @BENEFITS

          --   f | UFN_REVENUEBATCH_GETPERCENTAGEBENEFITSFORPAYMENTPLEDGE_FROMITEMLISTXML| ../../../../PercentageBenefits/Item  | @PERCENTAGEBENEFITS

          --

          -- 2. Insert table variables into batch tables:

          --     +----------------------+--------------------------------------------

          --     | Table Variable Name  | Batch Table Name

          --     |----------------------+--------------------------------------------

          --   a | @PLEDGES             | BATCHREVENUEAPPLICATIONPLEDGE

          --   b | @REVENUEAPPLICATIONS | BATCHREVENUEAPPLICATION

          --   c | @SPLITS              | BATCHREVENUEAPPLICATIONPLEDGESPLITS

          --   d | @INSTALLMENTS        | BATCHREVENUEAPPLICATIONPLEDGEINSTALLMENTS

          --   e | @BENEFITS            | BATCHREVENUEAPPLICATIONPLEDGEBENEFITS

          --   f | @PERCENTAGEBENEFITS  | BATCHREVENUEAPPLICATIONPLEDGEPERCENTAGEBENEFITS


          --A REVENUESTREAM may also have a MEMBERSHIPS collection with MEMBERSHIP elements.

          --A MEMBERSHIP element will have MEMBERS and MEMBERSHIPCARDS collections


          if @CHANGEAGENTID is null
              exec USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

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

          begin 

              -- 1(a) REVENUEAPPLICATION XML shredding

              declare @REVENUEAPPLICATIONS table
              (
                  ID uniqueidentifier,
                  APPLICATIONID uniqueidentifier,
                  CONSTITUENTID uniqueidentifier,
                  CONSTITUENTNAME nvarchar(300),
                  APPLIED money,
                  BALANCE money,
                  AMOUNTDUE money,
                  DATEDUE datetime,
                  TYPECODE tinyint,
                  RECEIPTAMOUNT money,
                  DONOTRECEIPT bit,
                  [DESCRIPTION] nvarchar(300),
                  WASGENERATED bit,
                  PLEDGES xml,
                  MEMBERSHIPS xml,
                  OVERPAYMENTAPPLICATIONTYPECODE tinyint,
                  USEDAPPLICATIONCOMMITMENTLOOKUPID bit,
                  SPONSORSHIPOPPORTUNITY nvarchar(300),
          REVENUESPLITID uniqueidentifier
              );

              --Insert normal rows from batch/import

              insert into @REVENUEAPPLICATIONS(ID, APPLICATIONID, CONSTITUENTID, CONSTITUENTNAME, APPLIED, BALANCE, AMOUNTDUE, DATEDUE, TYPECODE, RECEIPTAMOUNT, DONOTRECEIPT, [DESCRIPTION], WASGENERATED, PLEDGES, MEMBERSHIPS, OVERPAYMENTAPPLICATIONTYPECODE, USEDAPPLICATIONCOMMITMENTLOOKUPID,SPONSORSHIPOPPORTUNITY, REVENUESPLITID)
              select case when ID = '00000000-0000-0000-0000-000000000000' then newid() else coalesce(ID, newid()) end ID, APPLICATIONID, CONSTITUENTID, CONSTITUENTNAME, APPLIED, BALANCE, AMOUNTDUE, DATEDUE, TYPECODE, RECEIPTAMOUNT, DONOTRECEIPT, [DESCRIPTION], WASGENERATED, PLEDGES, MEMBERSHIPS, OVERPAYMENTAPPLICATIONTYPECODE, 0, SPONSORSHIPOPPORTUNITY, REVENUESPLITID
              from dbo.UFN_REVENUEBATCH_GETAPPLICATIONSWITHCHILDREN_FROMITEMLISTXML(@REVENUESTREAMS)
              where APPLICATIONCOMMITMENTID is null;

              --Insert rows that are using the APPLICATIONCOMMITMENTID as a LookupID to find the appropriate commitment

              insert into @REVENUEAPPLICATIONS(ID, APPLICATIONID, CONSTITUENTID, CONSTITUENTNAME, APPLIED, BALANCE, AMOUNTDUE, DATEDUE, TYPECODE, RECEIPTAMOUNT, DONOTRECEIPT, [DESCRIPTION], WASGENERATED, PLEDGES, MEMBERSHIPS, OVERPAYMENTAPPLICATIONTYPECODE, USEDAPPLICATIONCOMMITMENTLOOKUPID,SPONSORSHIPOPPORTUNITY, REVENUESPLITID)
              select newid(), APPS.APPLICATIONCOMMITMENTID, APPS.CONSTITUENTID, APPS.CONSTITUENTNAME, APPS.APPLIED, APPS.BALANCE, APPS.AMOUNTDUE, APPS.DATEDUE,
                case
                    when dbo.UFN_REVENUE_GETBATCHAPPLICATIONTYPECODE(APPS.APPLICATIONCOMMITMENTID) = 0 then 0
                    when dbo.UFN_REVENUE_GETBATCHAPPLICATIONTYPECODE(APPS.APPLICATIONCOMMITMENTID) = 1 then 6
                    when dbo.UFN_REVENUE_GETBATCHAPPLICATIONTYPECODE(APPS.APPLICATIONCOMMITMENTID) = 5 then 5
                    else null
                end,
                APPS.RECEIPTAMOUNT, APPS.DONOTRECEIPT, APPS.[DESCRIPTION], APPS.WASGENERATED, APPS.PLEDGES, 
                case
                    when dbo.UFN_REVENUE_GETBATCHAPPLICATIONTYPECODE(APPS.APPLICATIONCOMMITMENTID) = 5 then dbo.UFN_REVENUEBATCH_GETMEMBERSHIP_TOITEMLISTXML(APPS.APPLICATIONCOMMITMENTID)
                    else APPS.MEMBERSHIPS
                end,
                case
                    when REVENUE.TRANSACTIONTYPECODE = 1 and dbo.UFN_INSTALLMENT_GETINSTALLMENTBALANCE(dbo.UFN_PLEDGE_GETNEXTINSTALLMENT(REVENUE.ID, null)) < APPS.APPLIED and APPS.OVERPAYMENTAPPLICATIONTYPECODE is not null then APPS.OVERPAYMENTAPPLICATIONTYPECODE
                    when REVENUE.TRANSACTIONTYPECODE = 1 and dbo.UFN_INSTALLMENT_GETINSTALLMENTBALANCE(dbo.UFN_PLEDGE_GETNEXTINSTALLMENT(REVENUE.ID, null)) < APPS.APPLIED and APPS.OVERPAYMENTAPPLICATIONTYPECODE is null then dbo.UFN_PLEDGE_GETDEFAULTOVERPAYMENTAPPLICATIONCODE()
                    else null                     
                end,
                1,
                SPONSORSHIPOPPORTUNITY,
        REVENUESPLITID
              from dbo.UFN_REVENUEBATCH_GETAPPLICATIONSWITHCHILDREN_FROMITEMLISTXML(@REVENUESTREAMS) APPS
              left join dbo.REVENUE on APPS.APPLICATIONCOMMITMENTID = REVENUE.ID
              where APPLICATIONCOMMITMENTID is not null;

              -- 1(b) PLEDGE XML shredding

              declare @PLEDGES table
                (
                    ID uniqueidentifier,
                    APPLICATIONID uniqueidentifier,
                    CONSTITUENTID uniqueidentifier,
                    DATE datetime,
                    AMOUNT money,
                    POSTDATE datetime,
                    POSTSTATUSCODE tinyint,
                    SENDPLEDGEREMINDER bit,
                    FREQUENCYCODE tinyint,
                    NUMBEROFINSTALLMENTS int,
                    STARTDATE datetime,
                    SPLITS xml,
                    INSTALLMENTS xml,
                    FINDERNUMBER bigint,
                    SOURCECODE nvarchar(50),
                    APPEALID uniqueidentifier,
                    BENEFITS xml,
                    BENEFITSWAIVED bit,
                    GIVENANONYMOUSLY bit,
                    MAILINGID uniqueidentifier,
                    CHANNELCODEID uniqueidentifier,
                    DONOTACKNOWLEDGE bit,
                    PLEDGESUBTYPEID uniqueidentifier,
                    SINGLEDESIGNATIONID uniqueidentifier,
                    REFERENCE nvarchar(255),
                    GLREVENUECATEGORYMAPPINGID uniqueidentifier,
                    OPPORTUNITYID uniqueidentifier,
                    PERCENTAGEBENEFITS xml
                );
              insert into @PLEDGES(ID, APPLICATIONID, CONSTITUENTID, DATE, AMOUNT, POSTDATE, POSTSTATUSCODE, SENDPLEDGEREMINDER, FREQUENCYCODE, NUMBEROFINSTALLMENTS, STARTDATE, SPLITS, INSTALLMENTS, FINDERNUMBER, SOURCECODE, APPEALID, BENEFITS, BENEFITSWAIVED, GIVENANONYMOUSLY, MAILINGID, CHANNELCODEID, DONOTACKNOWLEDGE, PLEDGESUBTYPEID, REFERENCE, GLREVENUECATEGORYMAPPINGID, OPPORTUNITYID, PERCENTAGEBENEFITS)
              select newid(), RA.ID, P.CONSTITUENTID, P.DATE, P.AMOUNT, P.POSTDATE, P.POSTSTATUSCODE, P.SENDPLEDGEREMINDER, P.FREQUENCYCODE, P.NUMBEROFINSTALLMENTS, P.STARTDATE, P.SPLITS, P.INSTALLMENTS, coalesce(P.FINDERNUMBER, 0), P.SOURCECODE, P.APPEALID, P.BENEFITS, P.BENEFITSWAIVED, P.GIVENANONYMOUSLY, P.MAILINGID, P.CHANNELCODEID, P.DONOTACKNOWLEDGE, P.PLEDGESUBTYPEID, P.REFERENCE, P.GLREVENUECATEGORYMAPPINGID, P.OPPORTUNITYID, P.PERCENTAGEBENEFITS
              from @REVENUEAPPLICATIONS RA
              cross apply UFN_REVENUEBATCH_GETPAYMENTPLEDGE_FROMITEMLISTXML(RA.PLEDGES) P;

             declare @EMPTYGUID uniqueidentifier;
             set @EMPTYGUID = '00000000-0000-0000-0000-000000000000';

              -- 1(c) SPLIT XML shredding

              declare @PLEDGESPLITS table
              (
                  ID uniqueidentifier,
                  PLEDGEID uniqueidentifier,
                  DESIGNATIONID uniqueidentifier,
                  AMOUNT money,
            DECLINESGIFTAID bit
              );
              insert into @PLEDGESPLITS (ID, PLEDGEID, DESIGNATIONID, AMOUNT, DECLINESGIFTAID)
              select newid(), P.ID, S.DESIGNATIONID, S.AMOUNT, COALESCE(S.DECLINESGIFTAID, 0)
              from @PLEDGES P
              cross apply UFN_REVENUEBATCH_GETSPLITSFORPAYMENTPLEDGE_FROMITEMLISTXML(P.SPLITS) S;

              -- 1(d) INSTALLMENT XML shredding

              declare @PLEDGEINSTALLMENTS table
              (
                  ID uniqueidentifier,
                  PLEDGEID uniqueidentifier,
                  AMOUNT money,
                  RECEIPTAMOUNT money,
                  DATE datetime,
                  SEQUENCE int
              );
              insert into @PLEDGEINSTALLMENTS(ID, PLEDGEID, AMOUNT, RECEIPTAMOUNT, DATE, SEQUENCE)
              select newid(), P.ID, I.AMOUNT, I.RECEIPTAMOUNT, I.DATE, I.SEQUENCE
              from @PLEDGES P
              cross apply UFN_REVENUEBATCH_GETINSTALLMENTSFORPAYMENTPLEDGE_FROMITEMLISTXML(P.INSTALLMENTS) I;

              -- 1(e) BENEFIT XML shredding

              declare @PLEDGEBENEFITS table
              (
                  ID uniqueidentifier,
                  PLEDGEID uniqueidentifier,
                  BENEFITID uniqueidentifier,
                  QUANTITY smallint,
                  UNITVALUE money,
                  DETAILS nvarchar(255),
                  SEQUENCE int
              );
              insert into @PLEDGEBENEFITS(ID, PLEDGEID, BENEFITID, QUANTITY, UNITVALUE, DETAILS, SEQUENCE)
              select newid(), P.ID, B.BENEFITID, B.QUANTITY, B.UNITVALUE, B.DETAILS, B.SEQUENCE
              from @PLEDGES P
              cross apply UFN_REVENUEBATCH_GETBENEFITSFORPAYMENTPLEDGE_FROMITEMLISTXML(P.BENEFITS) B;

              -- 1(f) PERCENTAGEBENEFIT XML shredding

              declare @PLEDGEPERCENTAGEBENEFITS table
              (
                  ID uniqueidentifier,
                  PLEDGEID uniqueidentifier,
                  BENEFITID uniqueidentifier,
                  PERCENTAPPLICABLEAMOUNT money,
                  VALUEPERCENT decimal,
                  DETAILS nvarchar(255),
                  SEQUENCE int
              );
              insert into @PLEDGEPERCENTAGEBENEFITS(ID, PLEDGEID, BENEFITID, PERCENTAPPLICABLEAMOUNT, VALUEPERCENT, DETAILS, SEQUENCE)
              select newid(), P.ID, B.BENEFITID, B.PERCENTAPPLICABLEAMOUNT, B.VALUEPERCENT, B.DETAILS, B.SEQUENCE
              from @PLEDGES P
              cross apply UFN_REVENUEBATCH_GETPERCENTAGEBENEFITSFORPAYMENTPLEDGE_FROMITEMLISTXML(P.PERCENTAGEBENEFITS) B;

              -- 2(a) PLEDGE variable to batch table insertion

              insert into dbo.BATCHREVENUEAPPLICATIONPLEDGE
              (
                ID, CONSTITUENTID, GIVENANONYMOUSLY, FINDERNUMBER,
                DATE, AMOUNT, SOURCECODE, CHANNELCODEID, APPEALID, MAILINGID, PLEDGESUBTYPEID,
                BENEFITSWAIVED, FREQUENCYCODE, NUMBEROFINSTALLMENTS, STARTDATE, POSTDATE, 
                POSTSTATUSCODE, SENDPLEDGEREMINDER, DONOTACKNOWLEDGE,
                ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, REFERENCE, GLREVENUECATEGORYMAPPINGID,
                OPPORTUNITYID
              )
              select
                ID, CONSTITUENTID, GIVENANONYMOUSLY, FINDERNUMBER,
                DATE, AMOUNT, SOURCECODE, CHANNELCODEID, APPEALID, MAILINGID, PLEDGESUBTYPEID,
                BENEFITSWAIVED, FREQUENCYCODE, NUMBEROFINSTALLMENTS, STARTDATE, POSTDATE,
                POSTSTATUSCODE, SENDPLEDGEREMINDER, DONOTACKNOWLEDGE,
                @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE, REFERENCE, GLREVENUECATEGORYMAPPINGID, OPPORTUNITYID
              from @PLEDGES;         

                declare @MEMBERSHIPS table
                (
                    ID uniqueidentifier,
                    MEMBERSHIPID uniqueidentifier,
                    APPLICATIONID uniqueidentifier,
                    MEMBERSHIPPROGRAMID uniqueidentifier,
                    MEMBERSHIPLEVELID uniqueidentifier,
                    MEMBERSHIPLEVELTERMID uniqueidentifier,
                    MEMBERSHIPLEVELTYPECODEID uniqueidentifier,
                    NUMBEROFCHILDREN tinyint,
                    COMMENTS nvarchar(1000),
                    ISGIFT bit,
                    SENDRENEWALCODE tinyint,
                    EXPIRATIONDATE datetime,
                    GIVENBYID uniqueidentifier,
                    MEMBERS xml
                )
                insert into @MEMBERSHIPS(ID, APPLICATIONID, MEMBERSHIPID, MEMBERSHIPPROGRAMID,MEMBERSHIPLEVELID,MEMBERSHIPLEVELTERMID,MEMBERSHIPLEVELTYPECODEID,NUMBEROFCHILDREN,COMMENTS,ISGIFT,SENDRENEWALCODE,EXPIRATIONDATE,GIVENBYID, MEMBERS)
                select newid(), RA.ID, RA.APPLICATIONID, MEMBERSHIPPROGRAMID, MEMBERSHIPLEVELID, MEMBERSHIPLEVELTERMID, MEMBERSHIPLEVELTYPECODEID, NUMBEROFCHILDREN, COMMENTS, ISGIFT, SENDRENEWALCODE, EXPIRATIONDATE, GIVENBYID, MEMBERS 
                from @REVENUEAPPLICATIONS RA
                cross apply dbo.UFN_REVENUEBATCH_GETMEMBERSHIP_FROMITEMLISTXML(RA.MEMBERSHIPS)


                insert into dbo.BATCHREVENUEAPPLICATIONMEMBERSHIP
                (
                    ID,MEMBERSHIPID, MEMBERSHIPPROGRAMID,MEMBERSHIPLEVELID,MEMBERSHIPLEVELTERMID,
                    MEMBERSHIPLEVELTYPECODEID,NUMBEROFCHILDREN,COMMENTS,ISGIFT,SENDRENEWALCODE,
                    EXPIRATIONDATE,GIVENBYID,
                    ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
                )
                select ID, MEMBERSHIPID, MEMBERSHIPPROGRAMID, MEMBERSHIPLEVELID, MEMBERSHIPLEVELTERMID,
                        MEMBERSHIPLEVELTYPECODEID, NUMBEROFCHILDREN, COMMENTS, ISGIFT, SENDRENEWALCODE, 
                        EXPIRATIONDATE,    GIVENBYID,
                        @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE
                from @MEMBERSHIPS;

                -- Handle the membership member collection

                declare @MEMBERSHIPMEMBER table
                (
                    ID uniqueidentifier,
                    BATCHREVENUEAPPLICATIONMEMBERSHIPID uniqueidentifier,
                    CONSTITUENTID uniqueidentifier,
                    ISPRIMARY bit,
                    MEMBERSHIPCARDS xml
                );

                insert into @MEMBERSHIPMEMBER (ID, BATCHREVENUEAPPLICATIONMEMBERSHIPID, CONSTITUENTID, ISPRIMARY, MEMBERSHIPCARDS)
                select
                    newid(),
                    MEMBERSHIPS.ID,
                    MEMBERS.CONSTITUENTID,
                    MEMBERS.ISPRIMARY,
                    MEMBERSHIPCARDS
                from @MEMBERSHIPS MEMBERSHIPS
                cross apply dbo.UFN_REVENUEBATCH_GETMEMBERSHIPMEMBERSWITHCHILDREN_FROMITEMLISTXML(MEMBERSHIPS.MEMBERS) MEMBERS

                insert into dbo.BATCHREVENUEAPPLICATIONMEMBERSHIPMEMBER
                (
                    ID, 
                    BATCHREVENUEAPPLICATIONMEMBERSHIPID,
                    CONSTITUENTID,
                    ISPRIMARY,
                    ADDEDBYID,
                    CHANGEDBYID,
                    DATEADDED,
                    DATECHANGED
                )
                select
                    ID,
                    BATCHREVENUEAPPLICATIONMEMBERSHIPID,
                    CONSTITUENTID,
                    ISPRIMARY,
                    @CHANGEAGENTID,
                    @CHANGEAGENTID,
                    @CHANGEDATE,
                    @CHANGEDATE
                from @MEMBERSHIPMEMBER

                -- Handle the membership member membership card collection

                insert into dbo.BATCHREVENUEAPPLICATIONMEMBERSHIPMEMBERMEMBERSHIPCARD
                (
                    BATCHREVENUEAPPLICATIONMEMBERSHIPMEMBERID,
                    NAMEONCARD,
                    EXPIRATIONDATE,
                    ADDEDBYID,
                    CHANGEDBYID,
                    DATEADDED,
                    DATECHANGED
                )
                select
                    MEMBERSHIPMEMBER.ID,
                    MEMBERSHIPCARD.NAMEONCARD,
                    MEMBERSHIPCARD.EXPIRATIONDATE,
                    @CHANGEAGENTID,
                    @CHANGEAGENTID,
                    @CHANGEDATE,
                    @CHANGEDATE
                from @MEMBERSHIPMEMBER MEMBERSHIPMEMBER
                cross apply dbo.UFN_REVENUEBATCH_GETMEMBERSHIPMEMBERMEMBERSHIPCARDS_FROMITEMLISTXML(MEMBERSHIPMEMBER.MEMBERSHIPCARDS) MEMBERSHIPCARD

            -- 2(b) REVENUEAPPLICATION variable to batch table insertion 

              insert into dbo.BATCHREVENUEAPPLICATION
              (
                ID, BATCHREVENUEID, APPLICATIONTYPECODE, REVENUEID, REGISTRANTID, BATCHREVENUEAPPLICATIONPLEDGEID, BATCHREVENUEAPPLICATIONMEMBERSHIPID, BATCHREVENUEREGISTRANTID,
                APPLIED, WASGENERATED, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, OVERPAYMENTAPPLICATIONTYPECODE, REVENUESPLITID
              )
              select
                  ra.ID, 
                  @BATCHREVENUEID,
                  case
                      when ra.TYPECODE = 3 and ra.APPLICATIONID = @EMPTYGUID then 7
                      when ra.TYPECODE = 10 and ra.APPLICATIONID = @EMPTYGUID then 13
                      when ra.TYPECODE = 6 then 1
                      when ra.TYPECODE = 5 then 5
                      when ra.TYPECODE <> 6 and ra.PLEDGES is null then 0
                      when ra.TYPECODE <> 6 and not ra.PLEDGES is null then 2
                  end,
                  case 
                    when (ra.TYPECODE = 100) then null -- opportunities pass the opportunityid as the application id

                    when (ra.TYPECODE <> 6 and ra.TYPECODE <> 5 and ra.PLEDGES is null and ra.APPLICATIONID <> @EMPTYGUID) then ra.APPLICATIONID
                    else null 
                  end,
                  case when ra.TYPECODE = 6 and exists(select top(1) ID from dbo.REGISTRANT where REGISTRANT.ID = ra.APPLICATIONID) then ra.APPLICATIONID else null end,
                  case when ra.TYPECODE <> 6 and ra.TYPECODE <> 5 and not ra.PLEDGES is null then (select p.ID from @PLEDGES p where p.APPLICATIONID = ra.ID) else null end,
                  case when ra.TYPECODE = 5 and not ra.MEMBERSHIPS is null then (select m.ID from @MEMBERSHIPS m where m.APPLICATIONID = ra.ID) else null end,
                  case when ra.TYPECODE = 6 and exists (select top(1) ID from dbo.BATCHREVENUEREGISTRANT where BATCHREVENUEREGISTRANT.ID = ra.APPLICATIONID and BATCHREVENUEREGISTRANT.ID not in (select ID from dbo.REGISTRANT where ID = ra.APPLICATIONID)) then ra.APPLICATIONID else null end,
                  ra.APPLIED,
                  coalesce(ra.WASGENERATED, 0),
                  @CHANGEAGENTID,
                  @CHANGEAGENTID,
                  @CHANGEDATE,
                  @CHANGEDATE,
                  case
                    when ra.OVERPAYMENTAPPLICATIONTYPECODE is null then 255
                    else ra.OVERPAYMENTAPPLICATIONTYPECODE
                  end,
           ra.REVENUESPLITID
              from @REVENUEAPPLICATIONS ra;

              -- 2(c) SPLIT variable to batch table insertion

              insert into dbo.BATCHREVENUEAPPLICATIONPLEDGESPLIT(ID, BATCHREVENUEAPPLICATIONPLEDGEID, DESIGNATIONID, AMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, DECLINESGIFTAID)
              select ID, PLEDGEID, DESIGNATIONID, AMOUNT, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE, DECLINESGIFTAID
              from @PLEDGESPLITS;

              -- 2(d) INSTALLMENT variable to batch table insertion

              insert into dbo.BATCHREVENUEAPPLICATIONPLEDGEINSTALLMENT(ID, BATCHREVENUEAPPLICATIONPLEDGEID, AMOUNT, RECEIPTAMOUNT, DATE, SEQUENCE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
              select ID, PLEDGEID, AMOUNT, RECEIPTAMOUNT, DATE, SEQUENCE, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE
              from @PLEDGEINSTALLMENTS;

              -- 2(e) BENEFIT variable to batch table insertion

              insert into dbo.BATCHREVENUEAPPLICATIONPLEDGEBENEFIT(ID, BATCHREVENUEAPPLICATIONPLEDGEID, BENEFITID, QUANTITY, UNITVALUE, DETAILS, SEQUENCE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
              select ID, PLEDGEID, BENEFITID, QUANTITY, UNITVALUE, DETAILS, SEQUENCE, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE
              from @PLEDGEBENEFITS;

              -- 2(f) PERCENTAGEBENEFITS variable to batch table insertion

              insert into dbo.BATCHREVENUEAPPLICATIONPLEDGEPERCENTAGEBENEFIT(ID, BATCHREVENUEAPPLICATIONPLEDGEID, BENEFITID, PERCENTAPPLICABLEAMOUNT, VALUEPERCENT, DETAILS, SEQUENCE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
              select ID, PLEDGEID, BENEFITID, PERCENTAPPLICABLEAMOUNT, VALUEPERCENT, DETAILS, SEQUENCE, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE
              from @PLEDGEPERCENTAGEBENEFITS;

              -- That's all folks.            

              end
          return 0;