USP_REVENUEBATCH_APPLYTOSINGLEAPPLICATION

Stored proc to apply a batch payment to one revenue.

Parameters

Parameter Parameter Type Mode Description
@TRANSACTIONID uniqueidentifier IN
@SINGLEAPPLICATIONID uniqueidentifier IN
@APPLICATIONTYPECODE tinyint IN
@APPLICATIONAMOUNT money IN
@CONSTITUENTID uniqueidentifier IN
@DATE datetime IN
@PAYMENTMETHODCODE tinyint IN
@BATCHNUMBER nvarchar(60) IN
@POSTDATE datetime IN
@POSTSTATUSCODE tinyint IN
@DONOTRECEIPT bit IN
@DONOTACKNOWLEDGE bit IN
@FINDERNUMBER bigint IN
@SOURCECODE nvarchar(50) IN
@APPEALID uniqueidentifier IN
@MAILINGID uniqueidentifier IN
@CHANNELCODEID uniqueidentifier IN
@CHECKDATE UDT_FUZZYDATE IN
@CHECKNUMBER nvarchar(20) IN
@CONSTITUENTACCOUNTID uniqueidentifier IN
@REFERENCEDATE UDT_FUZZYDATE IN
@REFERENCENUMBER nvarchar(20) IN
@CARDHOLDERNAME nvarchar(255) IN
@CREDITCARDNUMBER nvarchar(4) 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
@SALEDATE datetime IN
@SALEAMOUNT money IN
@BROKERFEE money IN
@SALEPOSTSTATUSCODE tinyint IN
@SALEPOSTDATE datetime IN
@PROPERTYSUBTYPECODEID uniqueidentifier IN
@GIFTINKINDSUBTYPECODEID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CREATIONDATE datetime IN
@UNAPPLIEDMATCHINGGIFTSPLITS xml IN
@TOTALAMOUNTAPPLIED money INOUT
@REVENUEID uniqueidentifier INOUT
@KEYALREADYOPEN bit IN
@OTHERPAYMENTMETHODCODEID uniqueidentifier IN
@REFERENCE nvarchar(255) IN
@CATEGORYCODEID uniqueidentifier IN
@SPLITSDECLININGGIFTAID xml INOUT
@COVENANTGIFTSPLITS xml INOUT
@CURRENTAPPUSERID uniqueidentifier IN
@TRANSACTIONCURRENCYID uniqueidentifier IN
@BATCHROWID uniqueidentifier IN
@SHOULDDEFAULTRECEIPTTYPECODE tinyint IN
@REVENUESTREAMS xml IN

Definition

Copy


      CREATE procedure dbo.USP_REVENUEBATCH_APPLYTOSINGLEAPPLICATION
            (
                @TRANSACTIONID uniqueidentifier,
                @SINGLEAPPLICATIONID uniqueidentifier,
                @APPLICATIONTYPECODE tinyint,
                @APPLICATIONAMOUNT money,
                @CONSTITUENTID uniqueidentifier, 
                @DATE datetime
                @PAYMENTMETHODCODE tinyint
                @BATCHNUMBER nvarchar(60), 
                @POSTDATE datetime
                @POSTSTATUSCODE tinyint,
                @DONOTRECEIPT bit,
                @DONOTACKNOWLEDGE bit,
                @FINDERNUMBER bigint = 0,
                @SOURCECODE nvarchar(50) = '',
                @APPEALID uniqueidentifier = null,
                @MAILINGID uniqueidentifier = null,
                @CHANNELCODEID uniqueidentifier = null,
                @CHECKDATE dbo.UDT_FUZZYDATE = '00000000',
                @CHECKNUMBER nvarchar(20) = '',
                @CONSTITUENTACCOUNTID uniqueidentifier = null,
                @REFERENCEDATE dbo.UDT_FUZZYDATE = '00000000',
                @REFERENCENUMBER nvarchar(20) = '',
                @CARDHOLDERNAME nvarchar(255) = '',
                @CREDITCARDNUMBER nvarchar(4) = '',
                @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,
                @SALEDATE datetime = null,
                @SALEAMOUNT money = null,
                @BROKERFEE money = null,
                @SALEPOSTSTATUSCODE tinyint = null,
                @SALEPOSTDATE datetime = null,
                @PROPERTYSUBTYPECODEID uniqueidentifier = null,
                @GIFTINKINDSUBTYPECODEID uniqueidentifier = null,
                @CHANGEAGENTID uniqueidentifier,
                @CREATIONDATE datetime,
                @UNAPPLIEDMATCHINGGIFTSPLITS xml = null,
                @TOTALAMOUNTAPPLIED money output,
                @REVENUEID uniqueidentifier output,
                @KEYALREADYOPEN bit = 0,
                @OTHERPAYMENTMETHODCODEID uniqueidentifier = null,
                @REFERENCE nvarchar(255) = null,
                @CATEGORYCODEID uniqueidentifier = null,
                @SPLITSDECLININGGIFTAID xml = null output,
                @COVENANTGIFTSPLITS xml = null output,
                @CURRENTAPPUSERID uniqueidentifier = null,
                @TRANSACTIONCURRENCYID uniqueidentifier, 
                @BATCHROWID uniqueidentifier = null,
                @SHOULDDEFAULTRECEIPTTYPECODE tinyint = 0,
                @REVENUESTREAMS xml = null
            )
            as 
            set nocount on;

            declare @RECEIPTTYPECODE tinyint;

            declare @SPLITSGIFTAIDINFOTBL table
            (
                REVENUESPLITID uniqueidentifier,
                DECLINESGIFTAID bit,
                ISCOVENANT bit
            )

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

            begin try
                set @REVENUEID = @TRANSACTIONID

                declare @SPLITTYPECODE tinyint, @SPLITAPPLICATIONCODE tinyint
                set @SPLITAPPLICATIONCODE = 
                        case @APPLICATIONTYPECODE 
                            when 5 then 2 --Pledge Payment

                            when 8 then 7 --MGPledge Payment

                            when 4 then 3 --Recurring Gift Payment

                            when 7 then 1 --Event Registration Payment

                            when 6 then 6 --Planned gift

                            when 2 then 5 --Membership

                            when 10 then 13 -- Donor challenge payment

              when 1 then 3 --Sponsorship Payment

                            when 9 then 8 --Grant Award Payment

                            else 255
                        end;


                -- Pull the split's type code from the source revenue split unless it's an event registrant

                if @SPLITAPPLICATIONCODE <> 1
                    select @SPLITTYPECODE = TYPECODE from dbo.REVENUESPLIT where ID = @SINGLEAPPLICATIONID
                else
                    set @SPLITTYPECODE = 1

                if @SPLITAPPLICATIONCODE = 255 
                    raiserror('The application type is not supported.', 13, 1);

                --Clear Appeal and Source code for event registrations

                if @SPLITAPPLICATIONCODE = 1 
                    select
                        @FINDERNUMBER = 0,
                        @SOURCECODE = N'',
                        @APPEALID = null,                            
                        @MAILINGID = null,
                        @CHANNELCODEID = null

                if @SHOULDDEFAULTRECEIPTTYPECODE = 1 and (@SPLITAPPLICATIONCODE = 2 or @SPLITAPPLICATIONCODE = 3)
                begin
                    set @RECEIPTTYPECODE = dbo.UFN_CONSTITUENT_GETRECEIPTPREFERENCE(@CONSTITUENTID,@SPLITAPPLICATIONCODE);

                    -- If the receipt type is 'Per payment', all of the revenue details in the transaction must also be 'Per payment'

                    if @RECEIPTTYPECODE = 0
                        update dbo.REVENUE 
                        set RECEIPTTYPECODE = @RECEIPTTYPECODE, CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CREATIONDATE
                        where ID = @REVENUEID;
                end

                exec dbo.USP_REVENUEREFERENCE_ADD @REVENUEID, @REFERENCE, @CHANGEAGENTID;

                if @APPLICATIONTYPECODE in (
                    5,--Pledge

                    8,--MG Pledge

                    6,--Planned Gift

                    9,--Grant Award

                    10--Donor Challenge

                )
                begin
                    declare @REVENUESPLITAPPLICATIONTYPE tinyint
                    set @REVENUESPLITAPPLICATIONTYPE =
                        case @APPLICATIONTYPECODE
                            when 5 then 2
              when 6 then 6
              when 8 then 7
                            when 9 then 8
                            when 10 then 13
                        end;

                    if(@REVENUESTREAMS is null)
                    begin
                        -- Pull the default pledge overpayment method

                        declare @OVERPAYMENTAPPLICATIONTYPECODE tinyint;
                        select top 1
                            @OVERPAYMENTAPPLICATIONTYPECODE = DEFAULTAPPLICATIONTYPECODE
                        from dbo.PLEDGEOVERPAYMENTOPTIONS;
                    end
                    else
                    begin
                        select
                        @OVERPAYMENTAPPLICATIONTYPECODE = OVERPAYMENTAPPLICATIONTYPECODE
                        from dbo.UFN_REVENUEBATCH_GETAPPLICATIONS_FROMITEMLISTXML(@REVENUESTREAMS)
                    end

                    declare @CREATEDSPLITS xml
                    declare @AMOUNTPAID money
                    exec dbo.USP_PLEDGE_ADDPAYMENT
                        @REVENUEID = @REVENUEID,
                        @APPLICATIONID = @SINGLEAPPLICATIONID,
                        @APPLIEDAMOUNT = @APPLICATIONAMOUNT,
                        @CONSTITUENTID = @CONSTITUENTID,
                        @DATE = @DATE,
                        @UNAPPLIEDMATCHINGGIFTSPLITS = @UNAPPLIEDMATCHINGGIFTSPLITS,
                        @APPLICATIONTYPE = @REVENUESPLITAPPLICATIONTYPE,
                        @AMOUNTPAID = @AMOUNTPAID output,
                        @CREATIONDATE = @CREATIONDATE,
                        @CHANGEAGENTID = @CHANGEAGENTID,
                        @CREATEDSPLITS = @CREATEDSPLITS output,
                        @BUSINESSUNITSAPPLIED = 1,
                        @OVERPAYMENTAPPLICATIONTYPECODE = @OVERPAYMENTAPPLICATIONTYPECODE

                    -- Default the declines gift aid and covenant values for a pledge payment split from the pledge split

                    insert into @SPLITSGIFTAIDINFOTBL 
                    (
                        REVENUESPLITID,
                        DECLINESGIFTAID,
                        ISCOVENANT
                    )
                    select
                        T.c.value('(ID)[1]','uniqueidentifier') AS 'ID',
                        REVENUESPLITGIFTAID.DECLINESGIFTAID,
                        REVENUESPLITGIFTAID.ISCOVENANT
                    from @CREATEDSPLITS.nodes('/SPLITS/ITEM') T(c)
                    inner join dbo.REVENUESPLITGIFTAID on T.c.value('(SOURCEREVENUESPLITID)[1]','uniqueidentifier') = REVENUESPLITGIFTAID.ID
                    where 
                        REVENUESPLITGIFTAID.DECLINESGIFTAID = 1 or 
                        REVENUESPLITGIFTAID.ISCOVENANT = 1            
                end 

                if @APPLICATIONTYPECODE = 4 or @APPLICATIONTYPECODE = 1 --Recurring Gift or Sponsorship

                begin
                    declare @RECURRINGGIFTCREATEDSPLITS xml
                    exec dbo.USP_RECURRINGGIFT_ADDPAYMENT 
                        @REVENUEID = @REVENUEID,
                        @APPLICATIONID = @SINGLEAPPLICATIONID,
                        @APPLIEDAMOUNT = @APPLICATIONAMOUNT,
                        @CONSTITUENTID = @CONSTITUENTID,
                        @DATE = @DATE,
                        @CREATIONDATE = @CREATIONDATE,
                        @CHANGEAGENTID = @CHANGEAGENTID,
                        @CREATEDSPLITS = @RECURRINGGIFTCREATEDSPLITS output,
            @BUSINESSUNITSAPPLIED=1

                    -- Default the declines gift aid value for a pledge payment split from the pledge split

                    insert into @SPLITSGIFTAIDINFOTBL 
                    (
                        REVENUESPLITID,
                        DECLINESGIFTAID
                    )
                    select
                        T.c.value('(ID)[1]','uniqueidentifier') AS 'ID',
                        1
                    from @RECURRINGGIFTCREATEDSPLITS.nodes('/SPLITS/ITEM') T(c)
                    inner join dbo.REVENUESPLITGIFTAID on T.c.value('(SOURCEREVENUESPLITID)[1]','uniqueidentifier') = REVENUESPLITGIFTAID.ID
                    where REVENUESPLITGIFTAID.DECLINESGIFTAID = 1
                end 

                if @APPLICATIONTYPECODE = 7 --Event Registration

                begin

                    -- commit the event registration

                    declare @REGISTRANTID uniqueidentifier;
                    set @REGISTRANTID = @SINGLEAPPLICATIONID;

                    if exists(select top(1) 1 from dbo.BATCHREVENUEREGISTRANT where ID = @SINGLEAPPLICATIONID)
                    begin
                        declare @EVENTID uniqueidentifier;
                        declare @DATEPURCHASED datetime;
                        declare @MAINEVENTID uniqueidentifier;
                        declare @PACKAGEREGISTRATIONS xml;
                        declare @SINGLEEVENTREGISTRATIONS xml;
                        declare @WAIVEBENEFITS bit;
                        declare @REGISTRANTMAPPINGS xml;
                        declare @BATCHID uniqueidentifier;
                        declare @REGISTRANTCONSTITUENTID uniqueidentifier;

                        select
                            @EVENTID = EVENT.ID,
                            @MAINEVENTID = case
                                when [EVENT].[MAINEVENTID] is not null then [EVENT].[MAINEVENTID]
                                when exists(select ID from dbo.EVENT [SUBEVENT] where [SUBEVENT].[MAINEVENTID] = [EVENT].[ID]) then [EVENT].[ID]
                                else null
                            end,
                            @DATEPURCHASED = dbo.UFN_DATE_GETEARLIESTTIME(getdate()),
                            @WAIVEBENEFITS = BATCHREVENUEREGISTRANT.BENEFITSWAIVED,
                            @BATCHID = BATCHREVENUEREGISTRANT.BATCHID,
                            @REGISTRANTCONSTITUENTID = BATCHREVENUEREGISTRANT.CONSTITUENTID
                        from
                            dbo.BATCHREVENUEREGISTRANT
                        left outer join
                            dbo.EVENT on EVENT.ID = BATCHREVENUEREGISTRANT.EVENTID
                        where
                            BATCHREVENUEREGISTRANT.ID = @SINGLEAPPLICATIONID;

                        declare @MAINEVENTIDPARAMETER uniqueidentifier;
                        set @MAINEVENTIDPARAMETER = coalesce(@MAINEVENTID, @EVENTID);

                        exec dbo.USP_REVENUEBATCHREGISTRANT_GETREGISTRATIONSANDREGISTRANTMAPPINGS 
                            @MAINEVENTIDPARAMETER,
                            @REGISTRANTCONSTITUENTID,
                            @PACKAGEREGISTRATIONS output,
                            @SINGLEEVENTREGISTRATIONS output,
                            @REGISTRANTMAPPINGS output,
                            @BATCHID;

                        if not exists 
                        (
                            select top (1)
                                REGISTRANT.ID
                            from
                                @REGISTRANTMAPPINGS.nodes('/REGISTRANTMAPPINGS/ITEM/REGISTRANTREGISTRATIONMAPS/ITEM') T(c)
                                inner join dbo.REGISTRANT on
                                    T.c.value('EVENTID[1]', 'uniqueidentifier') = REGISTRANT.EVENTID
                                    and @REGISTRANTCONSTITUENTID = REGISTRANT.CONSTITUENTID
                        )
                        begin

                            declare @UNKNOWNGUESTWELLKNOWNGUID uniqueidentifier;
                            set @UNKNOWNGUESTWELLKNOWNGUID = 'C776DAB5-65B2-4258-ADAE-AE396D28E251';

                            -- commit all of the batch constituents used as guests on the registration

                            declare @NEWCONSTITUENTS table (CONSTITUENTID uniqueidentifier);
                            insert into @NEWCONSTITUENTS
                            (
                                CONSTITUENTID
                            )
                            select
                                T.c.value('GUESTCONSTITUENTID[1]', 'uniqueidentifier')
                            from
                                @REGISTRANTMAPPINGS.nodes('/REGISTRANTMAPPINGS/ITEM') T(c)
                            where
                                not exists(select ID from dbo.CONSTITUENT where CONSTITUENT.ID = T.c.value('GUESTCONSTITUENTID[1]', 'uniqueidentifier'))
                            and
                                T.c.value('GUESTCONSTITUENTID[1]', 'uniqueidentifier') <> @UNKNOWNGUESTWELLKNOWNGUID;

                            declare NEWCONSTITUENTCURSOR cursor local fast_forward for
                                select CONSTITUENTID from @NEWCONSTITUENTS;

                            declare @NEWCONSTITUENTID uniqueidentifier;            
                            open NEWCONSTITUENTCURSOR;

                            fetch next from NEWCONSTITUENTCURSOR into @NEWCONSTITUENTID;
                            while @@FETCH_STATUS = 0 
                            begin 

                                exec dbo.USP_REVENUEBATCH_CONSTITUENT_ADD 
                                    @NEWCONSTITUENTID OUTPUT
                                    @CHANGEAGENTID,
                                    @NEWCONSTITUENTID;

                                exec dbo.USP_REVENUEBATCH_CONSTITUENT_DELETE @NEWCONSTITUENTID, @CHANGEAGENTID;

                                fetch next from NEWCONSTITUENTCURSOR into @NEWCONSTITUENTID;
                            end
                            --When a cursor is used, it should be explicitly closed/deallocated in case of blocking or USP running long

                            close NEWCONSTITUENTCURSOR;
                            deallocate NEWCONSTITUENTCURSOR;

                            -- Alter @REGISTRANTMAPPINGS and @PACKAGEREGISTRATIONS to look like an add instead of an edit

                            set @REGISTRANTMAPPINGS =
                            (
                                select
                                    T.c.query('*[local-name()!="REGISTRANTREGISTRATIONMAPS" 
                                                    and local-name()!="REGISTRANTPACKAGEID" 
                                                    and local-name()!="PREFERENCES" 
                                                    and local-name()!="EVENTID"
                                                    and local-name()!="EVENTPRICEID"]
                                                    '),
                                    '00000000-0000-0000-0000-000000000000' [REGISTRANTPACKAGEID],
                                    coalesce(T.c.value('EVENTID[1]', 'uniqueidentifier'), '00000000-0000-0000-0000-000000000000') [EVENTID],
                                    coalesce(T.c.value('EVENTPRICEID[1]', 'uniqueidentifier'), '00000000-0000-0000-0000-000000000000') [EVENTPRICEID],
                                    (
                                        select
                                            TInner.c.query('*[local-name()!="REGISTRANTPREFERENCEID"]')
                                        from
                                            T.c.nodes('PREFERENCES/ITEM') TInner(c)
                                        for xml path('ITEM'), type
                                    ) [PREFERENCES],
                                    T.c.value('BATCHREVENUEREGISTRANTID[1]', 'uniqueidentifier') [BATCHREVENUEREGISTRANTID]
                                from
                                    @REGISTRANTMAPPINGS.nodes('/REGISTRANTMAPPINGS/ITEM') T(c)
                                for xml path('ITEM'), root('REGISTRANTMAPPINGS'), type
                            );

                            set @PACKAGEREGISTRATIONS =
                            (
                                select
                                    T.c.query('*[local-name()!="PACKAGEREGISTRANTREGISTRATIONS"]'),
                                    (
                                        select
                                            TInner.c.query('*[local-name()!="PACKAGEREGISTRANTREGISTRATIONID"]')
                                        from
                                            T.c.nodes('PACKAGEREGISTRANTREGISTRATIONS/ITEM') TInner(c)
                                        for xml path('ITEM'), type
                                    ) [PACKAGEREGISTRANTREGISTRATIONS]
                                from
                                    @PACKAGEREGISTRATIONS.nodes('/PACKAGEREGISTRATIONS/ITEM') T(c)
                                for xml path('ITEM'), root('PACKAGEREGISTRATIONS'), type
                            );

                            declare @PACKAGESPRICES xml;
                            set @PACKAGESPRICES = dbo.UFN_REGISTRATIONPACKAGE_GETPACKAGESPRICES_2_TOITEMLISTXML(coalesce(@MAINEVENTID, @EVENTID));

                            --Add REGISTRANT record

                            exec dbo.USP_REGISTRANT_UNIFIEDUPDATE
                                @ID = @SINGLEAPPLICATIONID output,
                                @CURRENTAPPUSERID = @CURRENTAPPUSERID,
                                @SECURITYCONTEXTFORMINSTANCEID = 'CC548990-BB24-4BC9-B39F-A8EA5D574C27', --RevenueBatchCommitDataForm.Add.xml dataform instance ID

                                @CHANGEAGENTID = @CHANGEAGENTID,
                                @CURRENTDATE = @CREATIONDATE,
                                @EVENTID = @EVENTID,
                                @CONSTITUENTID = @REGISTRANTCONSTITUENTID,
                                @DATEPURCHASED = @DATEPURCHASED,
                                @PACKAGEREGISTRATIONS = @PACKAGEREGISTRATIONS,
                                @PACKAGESPRICES = @PACKAGESPRICES,
                                @SINGLEEVENTREGISTRATIONS = @SINGLEEVENTREGISTRATIONS,
                                @WAIVEBENEFITS = @WAIVEBENEFITS,
                                @REGISTRANTMAPPINGS = @REGISTRANTMAPPINGS,
                                @DELETEDREGISTRANTREGISTRATIONMAPS = NULL;

                            --Delete BATCHREVENUEREGISTRANT record

                            exec dbo.USP_REVENUEBATCH_REGISTRANT_DELETE @BATCHREVENUEREGISTRANTID=@SINGLEAPPLICATIONID, @CHANGEAGENTID=@CHANGEAGENTID;

                        end
                        else
                        begin
                            update dbo.BATCHREVENUEAPPLICATION
                              set
                                REGISTRANTID = REGISTRANT.ID,
                                BATCHREVENUEREGISTRANTID = null,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = getdate()
                              from
                                dbo.BATCHREVENUEREGISTRANT
                            inner join
                                dbo.REGISTRANT on REGISTRANT.EVENTID = BATCHREVENUEREGISTRANT.EVENTID
                                and REGISTRANT.CONSTITUENTID = @REGISTRANTCONSTITUENTID
                            inner join
                                BATCHREVENUEAPPLICATION on BATCHREVENUEAPPLICATION.BATCHREVENUEREGISTRANTID = BATCHREVENUEREGISTRANT.ID
                                and BATCHREVENUEAPPLICATION.BATCHREVENUEID = @TRANSACTIONID;
                        end

                        -- REGISTRANT.ID may not be @APPLICATIONID when registration was added by a multi-component event registration

                        select
                            @REGISTRANTID = REGISTRANT.ID
                        from
                            dbo.BATCHREVENUEREGISTRANT
                            inner join dbo.REGISTRANT on
                                BATCHREVENUEREGISTRANT.EVENTID = REGISTRANT.EVENTID
                                and @REGISTRANTCONSTITUENTID = REGISTRANT.CONSTITUENTID
                        where
                            BATCHREVENUEREGISTRANT.ID = @SINGLEAPPLICATIONID;
                    end

                    exec dbo.USP_EVENT_ADDPAYMENT 
                        @REVENUEID = @REVENUEID
                        @APPLICATIONID = @REGISTRANTID
                        @APPLIEDAMOUNT = @APPLICATIONAMOUNT,
                        @CREATIONDATE = @CREATIONDATE,
                        @CHANGEAGENTID = @CHANGEAGENTID,
                        @CATEGORYCODEID = @CATEGORYCODEID;
                end

                if @APPLICATIONTYPECODE = 2 --Membership

                begin
                declare @MEMBERSHIPS xml;
                declare @MEMBERS xml = null;

                declare @CLEARGIFTMEMBERSHIP bit;
                set @CLEARGIFTMEMBERSHIP = 0;
                if exists (select 1 from dbo.UFN_MEMBERSHIP_GETMEMBERS(@SINGLEAPPLICATIONID) where CONSTITUENTID = @CONSTITUENTID)
                    set @CLEARGIFTMEMBERSHIP = 1;

                -- @BATCHROWID may not be present in earlier versions so maintain backwards compatibility

                if @BATCHROWID is null or not exists (select BATCHREVENUEAPPLICATIONMEMBERSHIP.id
                                          from   
                                                        DBO.BATCHREVENUEAPPLICATION inner join 
                                                        DBO.BATCHREVENUEAPPLICATIONMEMBERSHIP on BATCHREVENUEAPPLICATIONMEMBERSHIP.ID = BATCHREVENUEAPPLICATION.BATCHREVENUEAPPLICATIONMEMBERSHIPID 
                                                      where  
                                                        BATCHREVENUEAPPLICATION.BATCHREVENUEID  = @BATCHROWID and 
                                                        BATCHREVENUEAPPLICATIONMEMBERSHIP.MEMBERSHIPID = @SINGLEAPPLICATIONID)
                begin
                    set @MEMBERS =  
                    (
                        select
                        M.ID,
                        M.CONSTITUENTID,
                        M.ISPRIMARY,
                        (
                        select
                            MC.ID,
                            MC.NAMEONCARD,
                            MC.EXPIRATIONDATE
                            from dbo.MEMBERSHIPCARD MC
                            where MC.MEMBERID = M.ID and MC.STATUSCODE <> 2
                            for xml raw('ITEM'),type,elements,root('MEMBERSHIPCARDS'),BINARY BASE64
                        )
                        from dbo.MEMBER M
                        where MEMBERSHIPID = @SINGLEAPPLICATIONID and ISDROPPED = 0
                        for xml raw ('ITEM'), type, elements, root('MEMBERS'),BINARY BASE64
                    );

          set @MEMBERSHIPS =  
          (
            select 
                MEMBERSHIPLEVELID,
                MEMBERSHIPLEVELTERMID,
                MEMBERSHIPLEVELTYPECODEID,
                NUMBEROFCHILDREN,
                COMMENTS,
                case @CLEARGIFTMEMBERSHIP when 1 then 0 else ISGIFT end as ISGIFT,
                SENDRENEWALCODE,
                NULL,
              @MEMBERS,
              case @CLEARGIFTMEMBERSHIP when 1 then null else GIVENBYID end as GIVENBYID
            from dbo.MEMBERSHIP 
            where MEMBERSHIP.ID = @SINGLEAPPLICATIONID
            for xml raw('ITEM'),type,elements,root('MEMBERSHIPFIELDS'),BINARY BASE64
            );

                end
                else
                begin                        
                    declare @BATCHREVENUEMEMBERSHIPID uniqueidentifier = null;

                    select
                      @BATCHREVENUEMEMBERSHIPID = BATCHREVENUEAPPLICATIONMEMBERSHIP.id
                    from   
                      DBO.BATCHREVENUEAPPLICATION inner join 
                      DBO.BATCHREVENUEAPPLICATIONMEMBERSHIP on BATCHREVENUEAPPLICATIONMEMBERSHIP.ID = BATCHREVENUEAPPLICATION.BATCHREVENUEAPPLICATIONMEMBERSHIPID 
                    where  
                      BATCHREVENUEAPPLICATION.BATCHREVENUEID  = @BATCHROWID and 
                      BATCHREVENUEAPPLICATIONMEMBERSHIP.MEMBERSHIPID = @SINGLEAPPLICATIONID;  

                    set @members =
                    (
                      select 
                        ID,
                        CONSTITUENTID,
                        ISPRIMARY,
                        dbo.UFN_REVENUEBATCH_GETMEMBERSHIPMEMBERMEMBERSHIPCARDS_TOITEMLISTXML(ID)
                      from
                        dbo.BATCHREVENUEAPPLICATIONMEMBERSHIPMEMBER
                      where
                        BATCHREVENUEAPPLICATIONMEMBERSHIPID = @BATCHREVENUEMEMBERSHIPID
                      for xml raw('ITEM'), type, elements, root('MEMBERS'), binary base64
                    );

                end

        if @MEMBERSHIPS is NULL
                  set @MEMBERSHIPS =  
                          (
                            select 
                              MEMBERSHIPLEVELID,
                              MEMBERSHIPLEVELTERMID,
                              MEMBERSHIPLEVELTYPECODEID,
                              NUMBEROFCHILDREN,
                              COMMENTS,
                              case @CLEARGIFTMEMBERSHIP when 1 then 0 else ISGIFT end as ISGIFT,
                              SENDRENEWALCODE,
                              EXPIRATIONDATE,          
                              @members,
                              case @CLEARGIFTMEMBERSHIP when 1 then null else GIVENBYID end as GIVENBYID
                            from DBO.BATCHREVENUEAPPLICATIONMEMBERSHIP 
                            where BATCHREVENUEAPPLICATIONMEMBERSHIP.ID = @BATCHREVENUEMEMBERSHIPID
                            for xml raw('ITEM'),type,elements,root('MEMBERSHIPFIELDS'),BINARY BASE64
                          );


                    exec dbo.USP_MEMBERSHIP_ADDPAYMENT
                        @REVENUEID = @REVENUEID,
                        @CONSTITUENTID = @CONSTITUENTID,
                        @MEMBERSHIPID = @SINGLEAPPLICATIONID,
                        @AMOUNT = @APPLICATIONAMOUNT,
                        @TRANSACTIONDATE = @DATE,
                        @MEMBERSHIPS = @MEMBERSHIPS,
                        @CREATIONDATE = @CREATIONDATE,
                        @CHANGEAGENTID = @CHANGEAGENTID;
                end
            end try
            begin catch
                exec dbo.USP_RAISE_ERROR;
            end catch

            set @SPLITSDECLININGGIFTAID = (    select
                                                REVENUESPLITID
                                            from @SPLITSGIFTAIDINFOTBL
                                            where DECLINESGIFTAID = 1
                                            for xml raw('ITEM'),type,elements,root('SPLITSDECLININGGIFTAID'),BINARY BASE64)

            set @COVENANTGIFTSPLITS = (    select
                                            REVENUESPLITID
                                        from @SPLITSGIFTAIDINFOTBL
                                        where ISCOVENANT = 1
                                        for xml raw('ITEM'),type,elements,root('COVENANTGIFTSPLITS'),BINARY BASE64)