USP_BBNC_COMMITDONATIONADDGIFT

Adds a donation for a Blackbaud Internet Solutions donation batch.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT
@BATCHNUMBER nvarchar(100) IN
@MAPID int INOUT
@CONSTITUENTID uniqueidentifier IN
@AMOUNT money IN
@ISATHON bit IN
@GIFTDATE datetime IN
@PAYMENTMETHODCODE tinyint IN
@CREDITTYPECODEID uniqueidentifier IN
@CARDHOLDERNAME nvarchar(255) IN
@AUTHORIZATIONCODE nvarchar(100) IN
@REFERENCENUMBER nvarchar(100) IN
@CREDITCARDNUMBER nvarchar(100) IN
@EXPIRATIONDATE UDT_FUZZYDATE IN
@ISANONYMOUS bit IN
@APPEALID uniqueidentifier IN
@ACCOUNTID uniqueidentifier IN
@FREQUENCYCODE tinyint IN
@STARTDATE datetime IN
@ENDDATE datetime IN
@NUMBEROFINSTALLMENTS int IN
@STATUSCODE tinyint IN
@PROCESSNOW bit IN
@CHECKTYPE tinyint IN
@CHECKNUMBER nvarchar(100) IN
@CHECKDATE UDT_FUZZYDATE IN
@NOTETITLE nvarchar(100) IN
@COMMENTS nvarchar(max) IN
@SPLITS xml IN
@DONOTACKNOWLEDGE bit IN
@DONOTRECEIPT bit IN
@BBNCTRANSACTIONID int IN
@BBNCPAGENAME nvarchar(1000) IN
@BBNCPAGEID int IN
@BBNCAPPEALID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CHANGEDATE datetime IN
@EMAILID int IN
@EMAILNAME nvarchar(255) IN
@EMAILSUBJECT nvarchar(4000) IN
@ISTEAMFUNDRAISINGOFFLINEGIFT bit IN
@APPLYTRIBUTETODONATION bit IN
@TRIBUTENAME nvarchar(500) IN
@TRIBUTEDESCRIPTION nvarchar(500) IN
@TRIBUTETYPECODEID uniqueidentifier IN
@TRIBUTEID uniqueidentifier IN
@TRIBUTENOTETITLE nvarchar(100) IN
@MARKRECEIPTED bit IN
@CREDITCARDTOKEN uniqueidentifier IN
@FINDERNUMBER bigint IN
@EXTRAREVENUEFROMAPPLICATIONS money IN
@GIFTHASAPPLICATIONS bit IN
@RECEIPTNUMBER int IN
@GIFTAID bit IN
@ISOCODE nvarchar(3) IN
@PDACCOUNTSYSTEMID uniqueidentifier IN
@CURRENTAPPUSERID uniqueidentifier IN
@PLEDGEACCOUNTSYSTEMID uniqueidentifier IN
@CATEGORYCODEID uniqueidentifier IN
@RECEIPTSTACKSHORTNAME nvarchar(20) IN
@VENDORID nvarchar(50) IN
@CAMPAIGNS xml IN

Definition

Copy


            CREATE procedure dbo.USP_BBNC_COMMITDONATIONADDGIFT
            (
                @ID uniqueidentifier = null output,
                @BATCHNUMBER nvarchar(100),
                @MAPID integer = null output,
                @CONSTITUENTID uniqueidentifier = null,
                @AMOUNT money,
                @ISATHON bit,
                @GIFTDATE datetime,
                @PAYMENTMETHODCODE tinyint,
                @CREDITTYPECODEID uniqueidentifier,
                @CARDHOLDERNAME nvarchar(255),
                @AUTHORIZATIONCODE nvarchar(100),
                @REFERENCENUMBER nvarchar(100),
                @CREDITCARDNUMBER nvarchar(100),
                @EXPIRATIONDATE dbo.UDT_FUZZYDATE = '00000000',
                @ISANONYMOUS bit
                @APPEALID uniqueidentifier,

                @ACCOUNTID uniqueidentifier,

                @FREQUENCYCODE tinyint,
                @STARTDATE datetime,
                @ENDDATE datetime,
                @NUMBEROFINSTALLMENTS integer,
                @STATUSCODE tinyint,
                @PROCESSNOW bit,

                @CHECKTYPE tinyint,
                @CHECKNUMBER nvarchar(100),
                @CHECKDATE dbo.UDT_FUZZYDATE = '00000000',

                @NOTETITLE nvarchar(100),
                @COMMENTS nvarchar(max),
                @SPLITS xml,

                @DONOTACKNOWLEDGE bit,
                @DONOTRECEIPT bit,

                @BBNCTRANSACTIONID int,
                @BBNCPAGENAME nvarchar(1000),
                @BBNCPAGEID int,
                @BBNCAPPEALID uniqueidentifier,

                @CHANGEAGENTID uniqueidentifier = null,
                @CHANGEDATE datetime = null,

                @EMAILID int = 0,
                @EMAILNAME nvarchar(255) = '',
                @EMAILSUBJECT nvarchar(4000) = '',

                @ISTEAMFUNDRAISINGOFFLINEGIFT bit = 0,
                @APPLYTRIBUTETODONATION bit = 0,
                @TRIBUTENAME nvarchar(500) = '',
                @TRIBUTEDESCRIPTION nvarchar(500) = '',
                @TRIBUTETYPECODEID uniqueidentifier = null,
                @TRIBUTEID uniqueidentifier = null,
                @TRIBUTENOTETITLE nvarchar(100) = '',
                @MARKRECEIPTED bit = 0,
                @CREDITCARDTOKEN uniqueidentifier = null,

                @FINDERNUMBER bigint = 0,
                @EXTRAREVENUEFROMAPPLICATIONS money = 0.00,
                @GIFTHASAPPLICATIONS bit = 0,
                @RECEIPTNUMBER int = 0,

                @GIFTAID bit = 0,

                @ISOCODE nvarchar(3) = '',
                @PDACCOUNTSYSTEMID uniqueidentifier = null,
                @CURRENTAPPUSERID uniqueidentifier = null,
                @PLEDGEACCOUNTSYSTEMID uniqueidentifier = null,
                @CATEGORYCODEID uniqueidentifier = null,
                @RECEIPTSTACKSHORTNAME nvarchar(20) = '',
                @VENDORID nvarchar(50) = '',
                @CAMPAIGNS xml =''
            )
            as
            set nocount on;

            if @CHANGEDATE is null
                set @CHANGEDATE = getdate();
            if @CHANGEAGENTID is null
                exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;

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

            declare @REVENUEPAYMENTMETHODID uniqueidentifier;


            begin try
                --@PAYMENTMETHODCODE will be either Cash (0), Check (1), Credit Card (2), Direct Debit (3), Pledge (10), or None (9).

                --"Pledge" means to create a pledge with no payment. 

                --If @FREQUENCYCODE = 255, then this is a single donation and can be paid by "Cash", "Check", "Credit Card" or "Direct Debit".

                --If @FREQUENCYCODE = 255 and the payment code is "Cash" or "Check", that means it was an offline donation (which we probably don't care about much)

                --If @FREQUENCYCODE <> 255, then this is a recurring gift. with a payment type of "Credit Card" or "Direct Debit". 

                --If this is a recurring gift, @PROCESSNOW indicates if the first payment should be created for the recurring gift. 

                --"None" is an error condition. 


                if @PAYMENTMETHODCODE = 9
                    raiserror('The donation has a payment type of "None (9)" which is not supported.', 13, 1);

                if @AMOUNT < 0
                        raiserror('The amount cannot be negative.', 13, 1);

                -- If the system has set that households can't be donors, verify that constituent isn't a household

                if dbo.UFN_INSTALLATIONINFO_GETHOUSEHOLDSCANBEDONORS() = 0 and dbo.UFN_CONSTITUENT_ISHOUSEHOLD(@CONSTITUENTID) = 1
                    raiserror('HOUSEHOLDSCANNOTBEDONORS', 13, 1);

                -- if the group type can't be a donor, raise an error

                if exists(select GD.ID from dbo.GROUPDATA GD inner join dbo.GROUPTYPE GT on GD.GROUPTYPEID = GT.ID where GD.ID = @CONSTITUENTID and GT.CANBEDONOR = 0)
                    raiserror('GROUPCANNOTBEDONOR', 13, 1);

                declare @REVENUETRIBUTEID uniqueidentifier;
                declare @REVENUENOTETYPECODEID uniqueidentifier;
                declare @CHANNELCODEID uniqueidentifier;
                declare @TRIBUTENOTE nvarchar(max);
                declare @CRLF nvarchar(2);
                declare @CREDITCARDPARTIALNUMBER nvarchar(4)

                declare @RECEIPTAMOUNT money;
                declare @RECEIPTTYPECODE tinyint;

                --CBB setting the revenue type to 0 (regular payment) since we don't really worry about applications in this SP.

        set @RECEIPTTYPECODE = dbo.UFN_CONSTITUENT_GETRECEIPTPREFERENCE(@CONSTITUENTID,0);

                select top 1 
                    @REVENUENOTETYPECODEID = REVENUENOTETYPECODEID,
                    @CHANNELCODEID = CHANNELCODEID
                from dbo.NETCOMMUNITYDEFAULTCODEMAP;

                if len(@CREDITCARDNUMBER)>4 
                    set @CREDITCARDPARTIALNUMBER = right(@CREDITCARDNUMBER,4)
                else
                    set @CREDITCARDPARTIALNUMBER = @CREDITCARDNUMBER

                set @CRLF = char(13) + char(10);
                if ((len(@TRIBUTENAME) > 0) or (not @TRIBUTETYPECODEID is null) or (len(@TRIBUTEDESCRIPTION) > 0)) and @APPLYTRIBUTETODONATION = 1
                begin
                    set @TRIBUTENOTE = coalesce(@TRIBUTENAME, '');

                    if len(@TRIBUTENOTE) > 0 and len(@TRIBUTEDESCRIPTION) > 0
                        set @TRIBUTENOTE = @TRIBUTENOTE + @CRLF;
                    set @TRIBUTENOTE = @TRIBUTENOTE + coalesce(@TRIBUTEDESCRIPTION, '')

                    declare @TRIBUTETYPE nvarchar(100);
                    select top 1 @TRIBUTETYPE = DESCRIPTION from dbo.TRIBUTETYPECODE where ID = @TRIBUTETYPECODEID;

                    if len(@TRIBUTENOTE) > 0 and len(@TRIBUTETYPE) > 0
                        set @TRIBUTENOTE = @TRIBUTENOTE + @CRLF;
                    set @TRIBUTENOTE = @TRIBUTENOTE + coalesce(@TRIBUTETYPE, '');
                end
                else
                    set @TRIBUTENOTE = '';

        declare @CONSTITUENTIDFROMFINDERNUMBER uniqueidentifier;
        declare @MAILINGID uniqueidentifier;
        declare @SOURCECODE nvarchar(50);

        declare @APPEALIDFROMFINDERNUMBER as uniqueidentifier 
        exec dbo.[USP_BBNC_BATCH_FINDERNUMBERLOOKUP] @FINDERNUMBER, @CONSTITUENTIDFROMFINDERNUMBER output, @MAILINGID output, @SOURCECODE output, @APPEALIDFROMFINDERNUMBER output;
        if @APPEALIDFROMFINDERNUMBER <> '00000000-0000-0000-0000-000000000000' or @APPEALIDFROMFINDERNUMBER is not null
        begin
        set @APPEALID =@APPEALIDFROMFINDERNUMBER
        End        

        if @CONSTITUENTIDFROMFINDERNUMBER is not null 
          if @CONSTITUENTID <> @CONSTITUENTIDFROMFINDERNUMBER
            set @FINDERNUMBER = 0;

        if (@PDACCOUNTSYSTEMID is null)
          set @PDACCOUNTSYSTEMID = dbo.UFN_PDACCOUNTSYSTEM_GETDEFAULTSYSTEMIDSFORUSER(@CURRENTAPPUSERID)

        if (@PDACCOUNTSYSTEMID is null)
          set @PDACCOUNTSYSTEMID = '4B121C2C-CCE6-440D-894C-EA0DEF80D50B'

        -- don't use account system for recurring gifts

        if not ((@PAYMENTMETHODCODE = 10) or (@FREQUENCYCODE = 255) or (@PROCESSNOW = 1))
          set @PDACCOUNTSYSTEMID = null;

        if @PLEDGEACCOUNTSYSTEMID is not null
        begin
          if @PLEDGEACCOUNTSYSTEMID <> @PDACCOUNTSYSTEMID
              raiserror('The account system of the payment must match the account system of the pledge it''s being applied to.',13,1);
        end

         -- Multicurrency Info grab

         declare @TRANSACTIONCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETCURRENCYFROMISO(@ISOCODE);
         declare @BASECURRENCYID uniqueidentifier;
         declare @BASEEXCHANGERATEID uniqueidentifier;
         declare @BASEAMOUNT money;
         declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
         declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
         declare @ORGANIZATIONAMOUNT money;

         --ID where clause is using default, should be using PDACCOUNTSYSTEMID that is selected in the batch.

         if @PDACCOUNTSYSTEMID is null
         begin
           select @BASECURRENCYID = CURRENCYSET.BASECURRENCYID from dbo.PDACCOUNTSYSTEM
           inner join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID
           where PDACCOUNTSYSTEM.ID = dbo.UFN_PDACCOUNTSYSTEM_GETDEFAULTSYSTEMIDSFORUSER(@CURRENTAPPUSERID);
         end
         else
         begin
           select @BASECURRENCYID = CURRENCYSET.BASECURRENCYID from dbo.PDACCOUNTSYSTEM
           inner join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID
           where PDACCOUNTSYSTEM.ID =@PDACCOUNTSYSTEMID;
         end


         set @BASEEXCHANGERATEID = dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@TRANSACTIONCURRENCYID,@BASECURRENCYID,@GIFTDATE,1,null);   

          select
                        @BASEAMOUNT = BASEAMOUNT,
                        @ORGANIZATIONAMOUNT = ORGANIZATIONAMOUNT,
                        @ORGANIZATIONEXCHANGERATEID = ORGANIZATIONEXCHANGERATEID
                    from dbo.UFN_CURRENCY_GETCURRENCYVALUES(@AMOUNT, @GIFTDATE, @BASECURRENCYID, @BASEEXCHANGERATEID, @TRANSACTIONCURRENCYID);

         declare @MULTICURRENCYENABLED bit;
         set @BASEAMOUNT = dbo.UFN_CURRENCY_CONVERT(@AMOUNT,@BASEEXCHANGERATEID);
         set @MULTICURRENCYENABLED = dbo.UFN_CONDITIONSETTING_EVALUATEEXISTSCONDITION('Multicurrency'); 
         if @MULTICURRENCYENABLED = 0
         begin
          set @BASEAMOUNT = @AMOUNT;
         end
         if @TRANSACTIONCURRENCYID = @BASECURRENCYID
         begin
          set @BASEAMOUNT = @AMOUNT;
         end

          -- Ensure that we can add a payment of this transaction currency to the account system.

         if @FREQUENCYCODE = 255 and not exists(select 1 from dbo.CURRENCYSETTRANSACTIONCURRENCY
                       inner join dbo.PDACCOUNTSYSTEM on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSETTRANSACTIONCURRENCY.CURRENCYSETID
                       where PDACCOUNTSYSTEM.ID = @PDACCOUNTSYSTEMID and CURRENCYSETTRANSACTIONCURRENCY.CURRENCYID = @TRANSACTIONCURRENCYID)
         begin
            raiserror('Invalid transaction currency, current account system does not contain this transaction currency',13,1);
         end  


        if @PAYMENTMETHODCODE = 10 -- Pledge (unpaid)

                begin
                    --Create a pledge


                    if @SPLITS is null
                        raiserror('At least one designation must be specified for a pledge.', 13, 1);

                    exec dbo.USP_REVENUESPLIT_VALIDATESPLITS @SPLITS, @AMOUNT, 1,@ID,@TRANSACTIONCURRENCYID,0;

                    --JamesWill 05/22/2008 CR301162-052008 Pledges do not have receipt amounts

                    set @RECEIPTAMOUNT = 0;

                    insert into dbo.REVENUE(ID, BATCHNUMBER, CONSTITUENTID, DATE, DONOTPOST, POSTDATE, DONOTRECEIPT, AMOUNT, TRANSACTIONTYPECODE, RECEIPTAMOUNT, FINDERNUMBER, SOURCECODE, APPEALID, BENEFITSWAIVED, GIVENANONYMOUSLY, MAILINGID, CHANNELCODEID, DONOTACKNOWLEDGE, RECEIPTTYPECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED,BASECURRENCYID,ORGANIZATIONAMOUNT,TRANSACTIONAMOUNT,TRANSACTIONCURRENCYID,ORGANIZATIONEXCHANGERATEID,BASEEXCHANGERATEID)
                        values(@ID, @BATCHNUMBER, @CONSTITUENTID, @GIFTDATE, 0, @GIFTDATE, @DONOTRECEIPT, @BASEAMOUNT, 1, @RECEIPTAMOUNT, @FINDERNUMBER, @SOURCECODE, @APPEALID, 0, @ISANONYMOUS, @MAILINGID, @CHANNELCODEID, @DONOTACKNOWLEDGE, @RECEIPTTYPECODE, @CHANGEAGENTID
                        , @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE,@BASECURRENCYID,@ORGANIZATIONAMOUNT,@AMOUNT,@TRANSACTIONCURRENCYID,@ORGANIZATIONEXCHANGERATEID,@BASEEXCHANGERATEID);

                    --Add origination source

                    exec dbo.USP_REVENUE_ADDORIGIN @ID, @CONSTITUENTID, @CHANGEAGENTID, @CHANGEDATE;

                    --Add pledge original amount

                    exec dbo.USP_PLEDGE_ADDORIGINALAMOUNT @ID, @AMOUNT, @CHANGEAGENTID, @CHANGEDATE;

                    insert into dbo.REVENUEPAYMENTMETHOD (REVENUEID,PAYMENTMETHODCODE,AMOUNT,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
                        values (@ID,9, @AMOUNT, @CHANGEAGENTID, @CHANGEAGENTID,@CHANGEDATE,@CHANGEDATE);

                    insert into dbo.REVENUEBBNC(ID, NETCOMMUNITYTRANSACTIONID, NETCOMMUNITYPAGENAME, NETCOMMUNITYPAGEID, NETCOMMUNITYAPPEALID, EMAILID, EMAILNAME, EMAILSUBJECT, ISTEAMFUNDRAISINGOFFLINEGIFT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                        values(@ID, @BBNCTRANSACTIONID, @BBNCPAGENAME, @BBNCPAGEID, @BBNCAPPEALID, @EMAILID, @EMAILNAME, @EMAILSUBJECT, @ISTEAMFUNDRAISINGOFFLINEGIFT, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);

                    insert into dbo.REVENUESCHEDULE(ID, STARTDATE, FREQUENCYCODE, NUMBEROFINSTALLMENTS, PLEDGESUBTYPEID, SENDPLEDGEREMINDER, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                        values(@ID, @GIFTDATE, 5, 1, null, 1, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);

                    set @SPLITS = dbo.UFN_REVENUESPLIT_CONVERTAMOUNTSINXML(@SPLITS,@BASECURRENCYID,@ORGANIZATIONEXCHANGERATEID,@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID)
                    exec dbo.USP_REVENUE_GETSPLITS_2_ADDFROMXML @ID, @SPLITS, @CHANGEAGENTID, @CHANGEDATE;

                    --JamesWill 09/08/2008 Default campaigns on the revenue record based on designations (this MUST be done AFTER splits are added to the revenue)

                    exec dbo.USP_BBNC_ADDCAMPAIGNSTOREVENUE @ID, @CHANGEAGENTID, @CHANGEDATE,@CAMPAIGNS;

                    --add categorycode

                    exec dbo.USP_BBNC_COMMITDONATIONADDCATEGORY @ID, @CATEGORYCODEID, @CHANGEAGENTID, @CHANGEDATE;

                    exec dbo.USP_REVENUE_CREATERECOGNITIONS @ID, @CHANGEAGENTID, @CHANGEDATE;

                    insert into dbo.INSTALLMENT(ID, REVENUEID, AMOUNT, DATE, SEQUENCE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED,ORGANIZATIONAMOUNT,ORGANIZATIONEXCHANGERATEID,TRANSACTIONAMOUNT,TRANSACTIONCURRENCYID,BASEEXCHANGERATEID,BASECURRENCYID)
                        values(newid(), @ID, @BASEAMOUNT, @GIFTDATE, 1, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE,@ORGANIZATIONAMOUNT,@ORGANIZATIONEXCHANGERATEID,@AMOUNT,@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID,@BASECURRENCYID);

                    --Generate the installment splits for the pledge

                    exec dbo.USP_PLEDGE_GENERATEINSTALLMENTSPLITS @ID, @CHANGEAGENTID, @CHANGEDATE;

                    if not @COMMENTS is null and len(@COMMENTS) > 0 
                        insert into dbo.REVENUENOTE(ID, DATEENTERED, TITLE, TEXTNOTE, REVENUENOTETYPECODEID, REVENUEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                            values(newid(), @GIFTDATE, @NOTETITLE, @COMMENTS, @REVENUENOTETYPECODEID, @ID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);

                    --add percent and unit value benefits 

                    exec dbo.USP_REVENUEBENEFITS_ADDBENEFITS @ID, @RECEIPTAMOUNT output    

                    --JamesWill 05/22/2008 CR301162-052008 Pledges do not have receipt amounts

                    set @RECEIPTAMOUNT = 0;

                    if not @TRIBUTEID is null
                    begin
                        set @REVENUETRIBUTEID = newid();

                        insert into dbo.REVENUETRIBUTE(ID, REVENUEID, TRIBUTEID, AMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED,BASECURRENCYID,ORGANIZATIONAMOUNT,ORGANIZATIONEXCHANGERATEID)
                            values(@REVENUETRIBUTEID, @ID, @TRIBUTEID, @BASEAMOUNT, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE,@BASECURRENCYID,@ORGANIZATIONAMOUNT,@ORGANIZATIONEXCHANGERATEID);

                        insert into dbo.REVENUETRIBUTELETTER(ID, REVENUETRIBUTEID, CONSTITUENTID, TRIBUTELETTERCODEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                            select
                                newid(),
                                @REVENUETRIBUTEID,
                                TRIBUTEACKNOWLEDGEE.CONSTITUENTID,
                                TRIBUTEACKNOWLEDGEE.TRIBUTELETTERCODEID,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CHANGEDATE,
                                @CHANGEDATE
                            from dbo.TRIBUTEACKNOWLEDGEE 
                            where TRIBUTEACKNOWLEDGEE.TRIBUTEID = @TRIBUTEID
                            and TRIBUTEACKNOWLEDGEE.TRIBUTELETTERCODEID is not null;

                    end    

          exec dbo.USP_PDACCOUNTSYSTEM_LINKTOREVENUE
                      @ID = @ID,
                      @PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID,
                      @CHANGEDATE = @CHANGEDATE,
                      @CHANGEAGENTID = @CHANGEAGENTID    

                    --Save the GL distributions

                    exec dbo.USP_SAVE_REVENUEGLDISTRIBUTION @ID, @CHANGEAGENTID, @CHANGEDATE;

                    if @MARKRECEIPTED = 1
                    begin
                        insert into dbo.REVENUERECEIPT(ID, REVENUEID, RECEIPTNUMBER, RECEIPTDATE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, RECEIPTSTACKSHORTNAME)
                            values(newid(), @ID, @RECEIPTNUMBER, @GIFTDATE, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE, @RECEIPTSTACKSHORTNAME);
                    end

                    exec dbo.USP_GIFTAIDREVENUESPLIT_ADDUPDATESPLITS @ID, @APPEALID, @PAYMENTMETHODCODE, @CREDITTYPECODEID, @CHANGEAGENTID, @GIFTDATE, 1, null, null; --revenue transaction type code for pledge is 1


                    --Add gift fees

                    exec dbo.USP_PAYMENT_ADDGIFTFEES @ID, @CONSTITUENTID, @CHANGEAGENTID, @CHANGEDATE;
                end 
                else if @FREQUENCYCODE = 255 --Single, paid donation

                begin
                    --AmandaMa WI 57493 now have ability to apply gifts to pledges

                    --@Splits could be null if the full amount is applied to pledges

                    if (@EXTRAREVENUEFROMAPPLICATIONS > 0.00 and @SPLITS is null) or
                        (@GIFTHASAPPLICATIONS = 0 and @SPLITS is null)
                        raiserror('At least one designation must be specified for a donation.', 13, 1);

                    --JamesWill CR273017-041707 2007/04/20 Allow cash and check donations to support off-line donations

                    if @PAYMENTMETHODCODE not in (0, 1, 2, 3, 101, 102)
                        raiserror('A single donation must be paid via some method such as cash, check, credit card, or direct debit.', 13, 1);

                    --AmandaMa WI 57493 now have ability to apply gifts to pledges

                    --applications get processed after this sp with USP_PLEDGE_ADDPAYMENT

                    if @EXTRAREVENUEFROMAPPLICATIONS > 0.00
                    begin
                        exec dbo.USP_REVENUESPLIT_VALIDATESPLITS @SPLITS, @EXTRAREVENUEFROMAPPLICATIONS,0,@ID,@TRANSACTIONCURRENCYID,0;
                    end
                    else if @GIFTHASAPPLICATIONS = 0
                    begin
                        exec dbo.USP_REVENUESPLIT_VALIDATESPLITS @SPLITS, @AMOUNT,0,@ID,@TRANSACTIONCURRENCYID,0;
                    end


          set @RECEIPTAMOUNT = @AMOUNT

                    insert into dbo.REVENUE(ID, BATCHNUMBER, CONSTITUENTID, DATE, AMOUNT, TRANSACTIONTYPECODE, RECEIPTAMOUNT, FINDERNUMBER, SOURCECODE, APPEALID, BENEFITSWAIVED, GIVENANONYMOUSLY, MAILINGID, CHANNELCODEID, DONOTACKNOWLEDGE, DONOTRECEIPT, DONOTPOST, POSTDATE, RECEIPTTYPECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED,BASECURRENCYID,ORGANIZATIONAMOUNT,TRANSACTIONAMOUNT,TRANSACTIONCURRENCYID,ORGANIZATIONEXCHANGERATEID,BASEEXCHANGERATEID)
                        values(@ID, @BATCHNUMBER, @CONSTITUENTID, @GIFTDATE, @BASEAMOUNT, 0, @RECEIPTAMOUNT, @FINDERNUMBER, @SOURCECODE, @APPEALID, 0, @ISANONYMOUS, @MAILINGID, @CHANNELCODEID, @DONOTACKNOWLEDGE, @DONOTRECEIPT, 0, @GIFTDATE, @RECEIPTTYPECODE, @CHANGEAGENTID
                        , @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE,@BASECURRENCYID,@ORGANIZATIONAMOUNT,@AMOUNT,@TRANSACTIONCURRENCYID,@ORGANIZATIONEXCHANGERATEID,@BASEEXCHANGERATEID);

                    --Add origination source

                    exec dbo.USP_REVENUE_ADDORIGIN @ID, @CONSTITUENTID, @CHANGEAGENTID, @CHANGEDATE;

                    set @REVENUEPAYMENTMETHODID = newid();
                    insert into dbo.REVENUEPAYMENTMETHOD (ID, REVENUEID,PAYMENTMETHODCODE,AMOUNT,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
                        values (@REVENUEPAYMENTMETHODID, @ID, @PAYMENTMETHODCODE, @BASEAMOUNT, @CHANGEAGENTID, @CHANGEAGENTID,@CHANGEDATE,@CHANGEDATE);



                    insert into dbo.REVENUEBBNC(ID, NETCOMMUNITYTRANSACTIONID, NETCOMMUNITYPAGENAME, NETCOMMUNITYPAGEID, NETCOMMUNITYAPPEALID, EMAILID, EMAILSUBJECT, EMAILNAME, ISTEAMFUNDRAISINGOFFLINEGIFT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                        values(@ID, @BBNCTRANSACTIONID, @BBNCPAGENAME, @BBNCPAGEID, @BBNCAPPEALID, @EMAILID, @EMAILSUBJECT, @EMAILNAME, @ISTEAMFUNDRAISINGOFFLINEGIFT, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);

                    --Passing in BBNC transaction ID for the BBPS transaction ID since BBNC passes up its own transaction ID to BBPS and so they are the same.

                    --The BBNC table is queried directly since TRANSACTIONGUID isn't sent down from BBNC.  This probably should be revisited later so it's 

                    --consistent with the other BBNC fields.

                    declare @BBNCTRANSACTIONGUID uniqueidentifier;
          declare @GIFTFUZZYDATE dbo.UDT_FUZZYDATE = '00000000'
                    select @BBNCTRANSACTIONGUID = TransactionGUID
                    from dbo.EventTransactions
                    where EventTransactionsID = @BBNCTRANSACTIONID;

          set @GIFTFUZZYDATE = Convert(CHAR(8),@GIFTDATE,112)
                    --This will only save the last eight digits of the credit card number. This is appropriate for one-off payments since BBNC has already charged the card and we won't need it again.

                    exec dbo.USP_REVENUE_ADDPAYMENTDETAILS @ID=@REVENUEPAYMENTMETHODID, @PAYMENTMETHODCODE=@PAYMENTMETHODCODE,  @REFERENCEDATE = @GIFTFUZZYDATE,  @REFERENCENUMBER=@REFERENCENUMBER, @CONSTITUENTACCOUNTID = @ACCOUNTID, @CARDHOLDERNAME=@CARDHOLDERNAME, @CREDITCARDNUMBER=@CREDITCARDPARTIALNUMBER, @CREDITTYPECODEID=@CREDITTYPECODEID, @AUTHORIZATIONCODE=@AUTHORIZATIONCODE, @EXPIRESON=@EXPIRATIONDATE, @CHANGEAGENTID=@CHANGEAGENTID, @CURRENTDATE=@CHANGEDATE, @KEYALREADYOPEN = 1,@BASECURRENCYID=@BASECURRENCYID,@TRANSACTIONCURRENCYID=@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID=@BASEEXCHANGERATEID,@TRANSACTIONID=@BBNCTRANSACTIONGUID,@CHECKDATE=@CHECKDATE,@CHECKNUMBER=@CHECKNUMBER,@VENDORID =@VENDORID;

                    --AmandaMa WI 57493 now have ability to apply gifts to pledges

                    --Only apply splits here if there was a leftover amount from applications

                    --applications get processed after this sp with USP_PLEDGE_ADDPAYMENT

                    if @GIFTHASAPPLICATIONS = 0 or  @EXTRAREVENUEFROMAPPLICATIONS > 0.0
                    begin
            set @SPLITS = dbo.UFN_REVENUESPLIT_CONVERTAMOUNTSINXML(@SPLITS,@BASECURRENCYID,@ORGANIZATIONEXCHANGERATEID,@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID)
                        exec dbo.USP_REVENUE_GETSPLITS_2_ADDFROMXML @ID, @SPLITS, @CHANGEAGENTID, @CHANGEDATE;
                    end

                    --add categorycode

                    exec dbo.USP_BBNC_COMMITDONATIONADDCATEGORY @ID, @CATEGORYCODEID, @CHANGEAGENTID, @CHANGEDATE;

                    --JamesWill 09/08/2008 Default campaigns on the revenue record based on designations (this MUST be done AFTER splits are added to the revenue)

                    exec dbo.USP_BBNC_ADDCAMPAIGNSTOREVENUE @ID, @CHANGEAGENTID, @CHANGEDATE,@CAMPAIGNS;

                    exec dbo.USP_REVENUE_CREATERECOGNITIONS @ID, @CHANGEAGENTID, @CHANGEDATE;

          -- Add Original Payment

          exec dbo.USP_PAYMENT_ADDORIGINALAMOUNT     @ID, @CHANGEAGENTID, @CHANGEDATE;

                    if not @COMMENTS is null and len(@COMMENTS) > 0 
                        insert into dbo.REVENUENOTE(ID, DATEENTERED, TITLE, TEXTNOTE, REVENUENOTETYPECODEID, REVENUEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                            values(newid(), @GIFTDATE, @NOTETITLE, @COMMENTS, @REVENUENOTETYPECODEID, @ID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);                            

                    --add percent and unit value benefits 

                    exec dbo.USP_REVENUEBENEFITS_ADDBENEFITS @ID, @RECEIPTAMOUNT output    

                    --after calculating the benefits update the revenue tables new receipt amount.

                    if not @RECEIPTAMOUNT = @AMOUNT
                        update dbo.REVENUE set
                            RECEIPTAMOUNT = @RECEIPTAMOUNT,
                            CHANGEDBYID = @CHANGEAGENTID,
                            DATECHANGED = @CHANGEDATE
                        where ID = @ID

                    if not @TRIBUTEID is null
                    begin
                        set @REVENUETRIBUTEID = newid();

                        insert into dbo.REVENUETRIBUTE(ID, REVENUEID, TRIBUTEID, AMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED,BASECURRENCYID,ORGANIZATIONAMOUNT,ORGANIZATIONEXCHANGERATEID)
                            values(@REVENUETRIBUTEID, @ID, @TRIBUTEID, @BASEAMOUNT, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE,@BASECURRENCYID,@ORGANIZATIONAMOUNT,@ORGANIZATIONEXCHANGERATEID);

                        insert into dbo.REVENUETRIBUTELETTER(ID, REVENUETRIBUTEID, CONSTITUENTID, TRIBUTELETTERCODEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                            select
                                newid(),
                                @REVENUETRIBUTEID,
                                TRIBUTEACKNOWLEDGEE.CONSTITUENTID,
                                TRIBUTEACKNOWLEDGEE.TRIBUTELETTERCODEID,
                                @CHANGEAGENTID,
                                @CHANGEAGENTID,
                                @CHANGEDATE,
                                @CHANGEDATE
                            from dbo.TRIBUTEACKNOWLEDGEE 
                            where TRIBUTEACKNOWLEDGEE.TRIBUTEID = @TRIBUTEID
                            and TRIBUTEACKNOWLEDGEE.TRIBUTELETTERCODEID is not null;
                    end    

                    --Save the GL distributions

                    --VigneshMa 11/3/2009 WorkItem 64597

                    --This call is now made from code, after USP_BBNC_COMMITDONATIONADDGIFT and USP_PLEDGE_ADDPAYMENT are called.

                    --This ensures that the revenue splits exists before saving to GL.

                    if @GIFTHASAPPLICATIONS = 0
          begin
            exec dbo.USP_PDACCOUNTSYSTEM_LINKTOREVENUE
                        @ID = @ID,
                        @PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID,
                        @CHANGEDATE = @CHANGEDATE,
                        @CHANGEAGENTID = @CHANGEAGENTID    

                        exec dbo.USP_SAVE_REVENUEGLDISTRIBUTION @ID, @CHANGEAGENTID, @CHANGEDATE;
          end

                    if @MARKRECEIPTED = 1
                    begin
                        insert into dbo.REVENUERECEIPT(ID, REVENUEID, RECEIPTNUMBER, RECEIPTDATE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, RECEIPTSTACKSHORTNAME)
                            values(newid(), @ID, @RECEIPTNUMBER, @GIFTDATE, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE, @RECEIPTSTACKSHORTNAME);

                    end

                    exec dbo.USP_GIFTAIDREVENUESPLIT_ADDUPDATESPLITS @ID, @APPEALID, @PAYMENTMETHODCODE, @CREDITTYPECODEID, @CHANGEAGENTID, @GIFTDATE, 0, null, null; --revenue transaction type code for payment is 0


                    --Add gift fees

                    exec dbo.USP_PAYMENT_ADDGIFTFEES @ID, @CONSTITUENTID, @CHANGEAGENTID, @CHANGEDATE;

                end
                else --Recurring gift where @FREQUENCYCODE <> 255

                begin        
                    if @SPLITS is null
                        raiserror('At least one designation must be specified for a recurring gift.', 13, 1);

                    if @PAYMENTMETHODCODE not in (2, 3)
                        raiserror('A recurring gift must be paid by a credit card or direct debit.', 13, 1);

                    exec dbo.USP_REVENUESPLIT_VALIDATESPLITS @SPLITS, @AMOUNT, 2,@ID,@TRANSACTIONCURRENCYID,0;

                    if @STARTDATE < @GIFTDATE
                        raiserror('The schedule cannot start before the gift date.', 13, 1);

                    insert into dbo.REVENUE(ID, BATCHNUMBER, CONSTITUENTID, DATE, POSTDATE, DONOTRECEIPT, AMOUNT, TRANSACTIONTYPECODE, RECEIPTAMOUNT, FINDERNUMBER, SOURCECODE, GIVENANONYMOUSLY, DONOTACKNOWLEDGE, APPEALID, MAILINGID, CHANNELCODEID, RECEIPTTYPECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED,BASECURRENCYID,ORGANIZATIONAMOUNT,TRANSACTIONAMOUNT,TRANSACTIONCURRENCYID,ORGANIZATIONEXCHANGERATEID,BASEEXCHANGERATEID)
                        values(@ID, @BATCHNUMBER, @CONSTITUENTID, @GIFTDATE, @GIFTDATE, @DONOTRECEIPT, @BASEAMOUNT, 2, @AMOUNT, @FINDERNUMBER, @SOURCECODE, @ISANONYMOUS, @DONOTACKNOWLEDGE, @APPEALID, @MAILINGID, @CHANNELCODEID, @RECEIPTTYPECODE, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE,@BASECURRENCYID,@ORGANIZATIONAMOUNT,@AMOUNT,@TRANSACTIONCURRENCYID,@ORGANIZATIONEXCHANGERATEID,@BASEEXCHANGERATEID);

                    --Add origination source

                    exec dbo.USP_REVENUE_ADDORIGIN @ID, @CONSTITUENTID, @CHANGEAGENTID, @CHANGEDATE;

                    insert into dbo.REVENUEPAYMENTMETHOD (REVENUEID,PAYMENTMETHODCODE,AMOUNT,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
                        values (@ID, @PAYMENTMETHODCODE, @AMOUNT, @CHANGEAGENTID, @CHANGEAGENTID,@CHANGEDATE,@CHANGEDATE);

                    insert into dbo.REVENUEBBNC(ID, NETCOMMUNITYTRANSACTIONID, NETCOMMUNITYPAGENAME, NETCOMMUNITYPAGEID, NETCOMMUNITYAPPEALID, EMAILID, EMAILNAME, EMAILSUBJECT, ISTEAMFUNDRAISINGOFFLINEGIFT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                        values(@ID, @BBNCTRANSACTIONID, @BBNCPAGENAME, @BBNCPAGEID, @BBNCAPPEALID, @EMAILID, @EMAILNAME, @EMAILSUBJECT, @ISTEAMFUNDRAISINGOFFLINEGIFT, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);

                    declare @CREDITCARDID uniqueidentifier

                    --JamesWill 2009-03-10 WI 27333 When paying by credit card, the credit card must be saved first (so you can shove a CREDITCARDID into REVENUESCHEDULE).

                    --When paying by direct debit, the schedule must be saved first (so it REVENUESCHEDULEDIRECTDEBIT has a valid Foreign-Table-As-Primary-Key

                    if @PAYMENTMETHODCODE = 2 -- Credit card

                    begin
                        exec dbo.USP_CREDITCARD_SAVE
                                @ID = @CREDITCARDID output,
                                @CREDITCARDTOKEN = @CREDITCARDTOKEN,
                                @CARDHOLDERNAME = @CARDHOLDERNAME,
                                @CREDITCARDPARTIALNUMBER = @CREDITCARDPARTIALNUMBER,
                                @CREDITTYPECODEID = @CREDITTYPECODEID,
                                @EXPIRESON = @EXPIRATIONDATE,
                                @CHANGEAGENTID = @CHANGEAGENTID,
                                @CURRENTDATE = @CHANGEDATE

                        insert into dbo.REVENUESCHEDULE(ID, STARTDATE, ENDDATE, FREQUENCYCODE, NEXTTRANSACTIONDATE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, CREDITCARDID)
                            values(@ID, @STARTDATE, @ENDDATE, @FREQUENCYCODE, @STARTDATE, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE, @CREDITCARDID);
                    end
                    else if @PAYMENTMETHODCODE = 3 --Direct debit

                    begin
                        insert into dbo.REVENUESCHEDULE(ID, STARTDATE, ENDDATE, FREQUENCYCODE, NEXTTRANSACTIONDATE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, CREDITCARDID)
                        values(@ID, @STARTDATE, @ENDDATE, @FREQUENCYCODE, @STARTDATE, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE, null);

                        insert into dbo.REVENUESCHEDULEDIRECTDEBITPAYMENT
                            (ID, REFERENCEDATE, REFERENCENUMBER, CONSTITUENTACCOUNTID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                            values(@ID, '00000000', @REFERENCENUMBER, @ACCOUNTID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);
                    end


                    --JamesWill 2010-01-05 WI72320 Add installments for recurring gifts, making sure to update the @STARTDATE accordingly. This is now the next transaction date.

                    if @FREQUENCYCODE = 7 and not (day(@STARTDATE) = 1 or day(@STARTDATE) = 15)
                    begin
                        set @STARTDATE = dbo.UFN_REVENUE_GETNEXTTRANSACTIONDATE(@FREQUENCYCODE, @STARTDATE);
                    end

                    insert into dbo.RECURRINGGIFTINSTALLMENT(ID, REVENUEID, AMOUNT, DATE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, BASECURRENCYID,ORGANIZATIONAMOUNT,ORGANIZATIONEXCHANGERATEID,TRANSACTIONAMOUNT,TRANSACTIONCURRENCYID,BASEEXCHANGERATEID)
                        values(newid(), @ID, @BASEAMOUNT, @STARTDATE, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE,@BASECURRENCYID,@ORGANIZATIONAMOUNT,@ORGANIZATIONEXCHANGERATEID,@AMOUNT,@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID);

                    exec dbo.USP_RECURRINGGIFT_ADDMISSINGINSTALLMENTS @ID, @CHANGEAGENTID, @CHANGEDATE, @BASEAMOUNT,null,@BASECURRENCYID,@ORGANIZATIONAMOUNT,@ORGANIZATIONEXCHANGERATEID,@AMOUNT,@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID;

          set @SPLITS = dbo.UFN_REVENUESPLIT_CONVERTAMOUNTSINXML(@SPLITS,@BASECURRENCYID,@ORGANIZATIONEXCHANGERATEID,@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID)
                    exec dbo.USP_REVENUE_GETSPLITS_2_ADDFROMXML @ID, @SPLITS, @CHANGEAGENTID, @CHANGEDATE;

                    --add categorycode

                    exec dbo.USP_BBNC_COMMITDONATIONADDCATEGORY @ID, @CATEGORYCODEID, @CHANGEAGENTID, @CHANGEDATE;

                    --Add gift fees

                    exec dbo.USP_PAYMENT_ADDGIFTFEES @ID, @CONSTITUENTID, @CHANGEAGENTID, @CHANGEDATE;

                    --JamesWill 09/08/2008 Default campaigns on the revenue record based on designations (this MUST be done AFTER splits are added to the revenue)

                    exec dbo.USP_BBNC_ADDCAMPAIGNSTOREVENUE @ID, @CHANGEAGENTID, @CHANGEDATE,@CAMPAIGNS;

                    if not @COMMENTS is null and len(@COMMENTS) > 0 
                        insert into dbo.REVENUENOTE(ID, DATEENTERED, TITLE, TEXTNOTE, REVENUENOTETYPECODEID, REVENUEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                            values(newid(), @GIFTDATE, @NOTETITLE, @COMMENTS, @REVENUENOTETYPECODEID, @ID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);

                    -- Create recognitions for the recurring gift entry

                    exec dbo.USP_REVENUE_CREATERECOGNITIONS @ID, @CHANGEAGENTID, @CHANGEDATE;

                    if len(@TRIBUTENOTE) > 0
                    begin
                        insert into dbo.REVENUENOTE(ID, DATEENTERED, TITLE, TEXTNOTE, REVENUENOTETYPECODEID, REVENUEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                            values(newid(), @GIFTDATE, @TRIBUTENOTETITLE, @TRIBUTENOTE, @REVENUENOTETYPECODEID, @ID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);
                    end

                    if @PROCESSNOW = 1
                    begin
                        declare @PAYMENTID uniqueidentifier;
                        declare @CURRENTTRANSACTIONDATE datetime;
                        declare @NEXTTRANSACTIONDATE datetime;


                        set @RECEIPTAMOUNT = @AMOUNT;

                        set @PAYMENTID = newid(); 

                        insert into dbo.REVENUE(ID, BATCHNUMBER, CONSTITUENTID, DATE, TRANSACTIONTYPECODE, POSTDATE, DONOTPOST, DONOTRECEIPT, AMOUNT, RECEIPTAMOUNT, FINDERNUMBER, SOURCECODE, GIVENANONYMOUSLY, APPEALID, DONOTACKNOWLEDGE, MAILINGID, CHANNELCODEID, RECEIPTTYPECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, BASECURRENCYID,ORGANIZATIONAMOUNT,TRANSACTIONAMOUNT,TRANSACTIONCURRENCYID,ORGANIZATIONEXCHANGERATEID,BASEEXCHANGERATEID)
                            values(@PAYMENTID, @BATCHNUMBER, @CONSTITUENTID, @STARTDATE, 0, @STARTDATE, 0, @DONOTRECEIPT, @BASEAMOUNT, @RECEIPTAMOUNT, @FINDERNUMBER, @SOURCECODE, @ISANONYMOUS, @APPEALID, @DONOTACKNOWLEDGE, @MAILINGID, @CHANNELCODEID, @RECEIPTTYPECODE, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE, @BASECURRENCYID,@ORGANIZATIONAMOUNT,@AMOUNT,@TRANSACTIONCURRENCYID,@ORGANIZATIONEXCHANGERATEID,@BASEEXCHANGERATEID);

                        --Add origination source

                        exec dbo.USP_REVENUE_ADDORIGIN @PAYMENTID, @CONSTITUENTID, @CHANGEAGENTID, @CHANGEDATE;

                        set @REVENUEPAYMENTMETHODID = newid();
                        insert into dbo.REVENUEPAYMENTMETHOD (ID,REVENUEID,PAYMENTMETHODCODE,AMOUNT,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
                            values (@REVENUEPAYMENTMETHODID, @PAYMENTID, @PAYMENTMETHODCODE, @AMOUNT, @CHANGEAGENTID, @CHANGEAGENTID,@CHANGEDATE,@CHANGEDATE);

                        insert into dbo.REVENUEBBNC(ID, NETCOMMUNITYTRANSACTIONID, NETCOMMUNITYPAGENAME, NETCOMMUNITYPAGEID, NETCOMMUNITYAPPEALID, EMAILID, EMAILNAME, EMAILSUBJECT, ISTEAMFUNDRAISINGOFFLINEGIFT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                            values(@PAYMENTID, @BBNCTRANSACTIONID, @BBNCPAGENAME, @BBNCPAGEID, @BBNCAPPEALID, @EMAILID, @EMAILNAME, @EMAILSUBJECT, @ISTEAMFUNDRAISINGOFFLINEGIFT, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);

                        exec dbo.USP_REVENUE_ADDPAYMENTDETAILS @ID=@REVENUEPAYMENTMETHODID, @PAYMENTMETHODCODE=@PAYMENTMETHODCODE,  @REFERENCENUMBER=@REFERENCENUMBER, @CONSTITUENTACCOUNTID = @ACCOUNTID, @CARDHOLDERNAME=@CARDHOLDERNAME, @CREDITCARDNUMBER=@CREDITCARDPARTIALNUMBER, @CREDITTYPECODEID=@CREDITTYPECODEID, @AUTHORIZATIONCODE=@AUTHORIZATIONCODE, @EXPIRESON=@EXPIRATIONDATE, @CHANGEAGENTID=@CHANGEAGENTID, @CURRENTDATE=@CHANGEDATE, @KEYALREADYOPEN = 1,@BASECURRENCYID=@BASECURRENCYID,@TRANSACTIONCURRENCYID=@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID=@BASEEXCHANGERATEID;

                        exec dbo.USP_RECURRINGGIFT_ADDPAYMENT 
                            @REVENUEID = @PAYMENTID,
                            @APPLICATIONID = @ID,
                            @APPLIEDAMOUNT = @AMOUNT,
                            @CONSTITUENTID = @CONSTITUENTID,
                            @DATE = @STARTDATE,
                            @CREATIONDATE = @CHANGEDATE,
                            @CHANGEAGENTID = @CHANGEAGENTID;

                        --JamesWill 09/08/2008 Default campaigns on the revenue record based on designations (this MUST be done AFTER splits are added to the revenue; USP_RECURRINGGIFT_ADDPAYMENT adds the splits)

                        --JamesWill WI 15209 10/09/2008 USP_RECURRINGGIFT_ADDPAYMENT (above) adds the campaigns based on the recurring gift. So don't try to add them twice.

                        --exec dbo.USP_BBNC_ADDCAMPAIGNSTOREVENUE @PAYMENTID, @CHANGEAGENTID, @CHANGEDATE,@CAMPAIGNS;


                        if not @COMMENTS is null and len(@COMMENTS) > 0 
                        insert into dbo.REVENUENOTE(ID, DATEENTERED, TITLE, TEXTNOTE, REVENUENOTETYPECODEID, REVENUEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
                            values(newid(), @GIFTDATE, @NOTETITLE, @COMMENTS, @REVENUENOTETYPECODEID, @PAYMENTID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);

                        --add percent and unit value benefits 

                        exec dbo.USP_REVENUEBENEFITS_ADDBENEFITS @PAYMENTID, @RECEIPTAMOUNT output    

                        --after calculating the benefits update the revenue tables new receipt amount.

                        if not @RECEIPTAMOUNT = @AMOUNT
                            update dbo.REVENUE set
                                RECEIPTAMOUNT = @RECEIPTAMOUNT,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CHANGEDATE
                            where ID = @PAYMENTID

                        --If any marketing information is null, try to default based on applications

                        if @SOURCECODE is null or @SOURCECODE = '' or @MAILINGID is null or @APPEALID is null
                            exec dbo.USP_REVENUE_DEFAULTMARKETINGINFORMATION @ID, @CHANGEAGENTID, @CHANGEDATE;


            exec dbo.USP_PDACCOUNTSYSTEM_LINKTOREVENUE
                        @ID = @PAYMENTID,
                        @PDACCOUNTSYSTEMID = @PDACCOUNTSYSTEMID,
                        @CHANGEDATE = @CHANGEDATE,
                        @CHANGEAGENTID = @CHANGEAGENTID    

                        --Save the GL distributions

                        exec dbo.USP_SAVE_REVENUEGLDISTRIBUTION @PAYMENTID, @CHANGEAGENTID, @CHANGEDATE;

                        if @MARKRECEIPTED = 1
                        begin
                            insert into dbo.REVENUERECEIPT(ID, REVENUEID, RECEIPTNUMBER, RECEIPTDATE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, RECEIPTSTACKSHORTNAME)
                                values(newid(), @PAYMENTID, @RECEIPTNUMBER, @GIFTDATE, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE, @RECEIPTSTACKSHORTNAME);

                        end

                        exec dbo.USP_GIFTAIDREVENUESPLIT_ADDUPDATESPLITS @PAYMENTID
                                                                         @APPEALID
                                                                         @PAYMENTMETHODCODE
                                                                         @CREDITTYPECODEID
                                                                         @CHANGEAGENTID
                                                                         @GIFTDATE
                                                                         0, --revenue transaction type code for payment is 0

                                                                         null
                                                                         null;             

                        --Add gift fees

                        exec dbo.USP_PAYMENT_ADDGIFTFEES @PAYMENTID, @CONSTITUENTID, @CHANGEAGENTID, @CHANGEDATE;

                    end

                    exec dbo.USP_GIFTAIDREVENUESPLIT_ADDUPDATESPLITS @ID
                                                                     @APPEALID,
                                                                     @PAYMENTMETHODCODE
                                                                     @CREDITTYPECODEID
                                                                     @CHANGEAGENTID,
                                                                     @GIFTDATE
                                                                     2, --revenue transaction type code for recurring gift is 2    

                                                                     null
                                                                     null;         


                end

                --Create any declarations if gift was marked for Gift Aid

                if (@GIFTAID = 1 and dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('9568a6c2-f7aa-45fd-8f54-21fe9654ee2d') = 1)
                begin

                    insert into dbo.TAXDECLARATION(
                        ID,
                        CONSTITUENTID,
                        CHARITYCLAIMREFERENCENUMBERID,
                        DECLARATIONINDICATORCODE,
                        PAYSTAXCODE,
                        DECLARATIONSTARTS,
                        DECLARATIONENDS,
                        ADDEDBYID,
                        CHANGEDBYID,
                        DATEADDED,
                        DATECHANGED
                    )
                    select
                        newid(),
                        @CONSTITUENTID,
                        dbo.UFN_CHARITYCLAIMREFERENCENUMBER_GETBYSITE(SITES.SITEID),
                        2, --Internet Source Code

                        1, --Pays Tax

                        dbo.UFN_DATE_GETEARLIESTTIME(@GIFTDATE),
                        null, --Open-ended tax declaration

                        @CHANGEAGENTID,
                        @CHANGEAGENTID,
                        @CHANGEDATE,
                        @CHANGEDATE

                    from
                        UFN_REVENUE_GETSPLITS_FROMITEMLISTXML(@SPLITS) as SPLITS

                        left join dbo.REVENUESPLIT on
                            SPLITS.DESIGNATIONID = REVENUESPLIT.DESIGNATIONID

                        cross apply(select SITEID from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(REVENUESPLIT.ID)) as SITES                    

                        left join dbo.TAXDECLARATION on 
                            (TAXDECLARATION.CHARITYCLAIMREFERENCENUMBERID = dbo.UFN_CHARITYCLAIMREFERENCENUMBER_GETBYSITE(SITES.SITEID)) and
                            (TAXDECLARATION.CONSTITUENTID = @CONSTITUENTID) and
                            (@CHANGEDATE between TAXDECLARATION.DECLARATIONSTARTS and isnull(TAXDECLARATION.DECLARATIONENDS, @CHANGEDATE))

                        where
                            TAXDECLARATION.ID is null

                        group by
                            dbo.UFN_CHARITYCLAIMREFERENCENUMBER_GETBYSITE(SITES.SITEID)

                    exec dbo.USP_REVENUETRIBUTETAXCLAIMAMOUNT_ADDUPDATEBYCONSTITUENT @CONSTITUENTID, @CHANGEAGENTID, @CHANGEDATE;
                end

        --update the constituent origin information

        declare @INFOSOURCECODEID uniqueidentifier;
        select top (1)
          @INFOSOURCECODEID = [INFOSOURCECODEID]
        from 
          dbo.NETCOMMUNITYDEFAULTCODEMAP;

        if @INFOSOURCECODEID is not null
        begin
          exec dbo.USP_DATAFORMTEMPLATE_EDIT_CONSTITUENTORIGIN @ID = @CONSTITUENTID,
          @CHANGEAGENTID=@CHANGEAGENTID,
          @INFOSOURCECODEID = @INFOSOURCECODEID,
          @REVENUEID = @ID
        end

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

            return 0;