USP_REVENUEDETAIL_EDIT_2

Stored procedure to save a payment.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@CURRENTAPPUSERID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@TYPECODE tinyint IN
@AMOUNT money IN
@RECEIPTAMOUNT money IN
@SPLITS xml IN
@SOURCECODE nvarchar(50) IN
@APPEALID uniqueidentifier IN
@BENEFITS xml IN
@BENEFITSWAIVED bit IN
@MAILINGID uniqueidentifier IN
@CHANNELCODEID uniqueidentifier IN
@DONOTACKNOWLEDGE bit IN
@CHANGEDATE datetime IN
@CATEGORYCODEID uniqueidentifier IN

Definition

Copy


            CREATE procedure dbo.USP_REVENUEDETAIL_EDIT_2
            (
                @ID uniqueidentifier,
                @CURRENTAPPUSERID uniqueidentifier,
                @CHANGEAGENTID uniqueidentifier,
                @TYPECODE tinyint,
                @AMOUNT money,                    
                @RECEIPTAMOUNT money,
                @SPLITS xml,
                @SOURCECODE nvarchar(50),
                @APPEALID uniqueidentifier,
                @BENEFITS xml,
                @BENEFITSWAIVED bit,
                @MAILINGID uniqueidentifier,
                @CHANNELCODEID uniqueidentifier,
                @DONOTACKNOWLEDGE bit,
                @CHANGEDATE datetime = null,
                @CATEGORYCODEID uniqueidentifier = null
            )
            as
            set nocount on;

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

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

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

            /*JamesWill CR270391-031907 2007/03/19 Validate to make sure that the new amount does not overpay a commitment*/
            if not @TYPECODE in (0, 5) --You can't overpay gifts or recurring gifts, so it doesn't apply here

            begin
                declare @COMMITMENTID uniqueidentifier;
                declare @BALANCE money;
                declare @OLDAMOUNT money;

                select @OLDAMOUNT = AMOUNT
                from dbo.REVENUE
                where ID = @ID;

                if @TYPECODE in (4, 8) --Pledge Payment, Matching Gift Pledge Payment

                begin
                    select @COMMITMENTID = PLEDGEID
                    from dbo.INSTALLMENTPAYMENT where PAYMENTID = @ID;

                    set @BALANCE = dbo.UFN_PLEDGE_GETBALANCE(@COMMITMENTID);
                end
                else if @TYPECODE = 6 --Event registration fee

                begin
                    select @COMMITMENTID = REGISTRANTID
                    from dbo.EVENTREGISTRANTPAYMENT where PAYMENTID = @ID;

                    set @BALANCE = dbo.UFN_EVENTREGISTRANT_GETBALANCE(@COMMITMENTID);
                end
                else
                    set @BALANCE = 0; --Unknown


                set @BALANCE = @BALANCE + @OLDAMOUNT; --The original amount for this revenue no longer applies. 

                set @BALANCE = @BALANCE - @AMOUNT
                if @BALANCE < 0
                    raiserror('The amount applied towards an application cannot be greater than its balance.', 13, 1);
            end

            if not (@TYPECODE in (6, 4, 8))-- update splits if not Event Fee\Pledge\MG payment

                exec dbo.USP_REVENUESPLIT_VALIDATESPLITS @SPLITS, @AMOUNT;

            if @TYPECODE = 0
            begin 
                -- do not allow the gift amount to be adjusted less than the applied tribute amount

                declare @TRIBUTEAMOUNT money;
                select @TRIBUTEAMOUNT = sum(AMOUNT) from dbo.REVENUETRIBUTE where REVENUEID = @ID;

                if (@TRIBUTEAMOUNT is not null) and (@AMOUNT < @TRIBUTEAMOUNT)
                begin
                    raiserror('The gift amount cannot be less than the sum of the tribute amounts applied to this gift.', 13, 1)
                end
            end

            declare @FIELDCHANGED bit;    
      declare @AMOUNTCHANGED bit;

      set @FIELDCHANGED = 0;            

            -- check to see if amount or receipt amount have changed

            if (select count(REVENUE.ID) from dbo.REVENUE where REVENUE.ID = @ID and AMOUNT = @AMOUNT and RECEIPTAMOUNT = @RECEIPTAMOUNT) = 0
                set @FIELDCHANGED = 1;

      set @AMOUNTCHANGED = @FIELDCHANGED;

            -- check to see if designations have changed

            if @FIELDCHANGED = 0
                if dbo.UFN_CHECKDETAIL_SPLITSCHANGED(@ID, @SPLITS) = 1
                    set @FIELDCHANGED = 1;

                -- if re-receipts is turned on and a field has changed, determine if the revenue needs to be re-receipted

            if @FIELDCHANGED = 1
            begin
                exec dbo.USP_REVENUE_UPDATERERECEIPTS @ID, @CHANGEAGENTID, @CHANGEDATE;

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

            /* Validate payment information */

      if @AMOUNTCHANGED = 1 
        -- make sure we aren't trying to modify revenue in a locked/closed deposit/bank

        exec dbo.USP_EDIT_REVENUE_VALIDATE_DEPOSIT_STATUS @ID;

      /* CMC
            update dbo.FINANCIALTRANSACTION
            set    AMOUNT = @AMOUNT,
                CHANGEDBYID = @CHANGEAGENTID, 
                DATECHANGED = @CHANGEDATE 
            where ID = @ID;

     update dbo.REVENUE_EXT
            set     
                RECEIPTAMOUNT = @RECEIPTAMOUNT, 
                SOURCECODE = @SOURCECODE,
                APPEALID = @APPEALID,
                BENEFITSWAIVED = @BENEFITSWAIVED,
                MAILINGID = @MAILINGID, 
                CHANNELCODEID = @CHANNELCODEID, 
                DONOTACKNOWLEDGE = @DONOTACKNOWLEDGE
            where ID = @ID;
           */

     update dbo.REVENUE
            set     
                RECEIPTAMOUNT = @RECEIPTAMOUNT
                SOURCECODE = @SOURCECODE,
                APPEALID = @APPEALID,
                BENEFITSWAIVED = @BENEFITSWAIVED,
                MAILINGID = @MAILINGID
                CHANNELCODEID = @CHANNELCODEID
                DONOTACKNOWLEDGE = @DONOTACKNOWLEDGE,
        AMOUNT = @AMOUNT,
                CHANGEDBYID = @CHANGEAGENTID
                DATECHANGED = @CHANGEDATE 
            where ID = @ID;


            if not (@TYPECODE in (6, 4, 8))-- update splits if not Event Fee\Pledge\MG payment

                exec dbo.USP_REVENUE_GETSPLITS_UPDATEFROMXML @ID, @SPLITS, @CHANGEAGENTID, @CHANGEDATE;

            if not @TYPECODE = 6    -- update Revenue category if not Event fee

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

            -- update benefits

            exec dbo.USP_REVENUE_GETBENEFITS_UPDATEFROMXML @ID, @BENEFITS, @CHANGEAGENTID, @CHANGEDATE;

            -- Update solicitors

            exec dbo.USP_REVENUE_UPDATESOLICITORS @ID, @CHANGEAGENTID, @CHANGEDATE    

            /*Special handling for some payment types*/
            if @TYPECODE = 4 or (@TYPECODE = 8 and exists(select 1 from dbo.INSTALLMENTPAYMENT where PAYMENTID = @ID)) --Pledge\Applied MG payment

                exec dbo.USP_PLEDGEPAYMENT_EDIT @ID, @AMOUNT, @CHANGEAGENTID, @CHANGEDATE

            if @TYPECODE = 5 --Recurring gift payment

                exec dbo.USP_RECURRINGPAYMENT_EDIT @ID, @AMOUNT, @CHANGEAGENTID, @CHANGEDATE

            return 0;