USP_DATAFORMTEMPLATE_EDIT_REVENUEPAYMENT

The save procedure used by the edit dataform template "Revenue Payment Edit Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter indicating the ID of the record being edited.
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@DATE datetime IN Date
@PAYMENTMETHODCODE tinyint IN Payment method
@CHECKDATE UDT_FUZZYDATE IN Check date
@CHECKNUMBER nvarchar(20) IN Check number
@REFERENCEDATE UDT_FUZZYDATE IN Reference date
@REFERENCENUMBER nvarchar(20) IN Reference number
@CARDHOLDERNAME nvarchar(255) IN Cardholder name
@CREDITCARDNUMBER nvarchar(4) IN Card number
@CREDITTYPECODEID uniqueidentifier IN Card type
@AUTHORIZATIONCODE nvarchar(20) IN Authorization code
@EXPIRESON UDT_FUZZYDATE IN Expires on
@ISSUER nvarchar(100) IN Issuer
@NUMBEROFUNITS decimal(20, 3) IN Number of units
@SYMBOL nvarchar(25) IN Symbol
@MEDIANPRICE decimal(19, 4) IN Median price
@GIFTINKINDSUBTYPECODEID uniqueidentifier IN Subtype
@PROPERTYSUBTYPECODEID uniqueidentifier IN Subtype
@CONSTITUENTACCOUNTID uniqueidentifier IN Account
@POSTSTATUSCODE tinyint IN Post status
@POSTDATE datetime IN Post date
@GIVENANONYMOUSLY bit IN Payment is anonymous
@DONOTRECEIPT bit IN Do not receipt

Definition

Copy


                    CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_REVENUEPAYMENT
                    (
                        @ID uniqueidentifier,
                        @CURRENTAPPUSERID uniqueidentifier,
                        @CHANGEAGENTID uniqueidentifier,
                        @DATE datetime,
                        @PAYMENTMETHODCODE tinyint,
                        @CHECKDATE dbo.UDT_FUZZYDATE,
                        @CHECKNUMBER nvarchar(20),
                        @REFERENCEDATE dbo.UDT_FUZZYDATE,
                        @REFERENCENUMBER nvarchar(20),
                        @CARDHOLDERNAME nvarchar(255),
                        @CREDITCARDNUMBER nvarchar(4),
                        @CREDITTYPECODEID uniqueidentifier,
                        @AUTHORIZATIONCODE nvarchar(20),
                        @EXPIRESON dbo.UDT_FUZZYDATE,
                        @ISSUER nvarchar(100),
                        @NUMBEROFUNITS decimal(20,3),
                        @SYMBOL nvarchar(25),
                        @MEDIANPRICE decimal(19,4),
                        @GIFTINKINDSUBTYPECODEID uniqueidentifier,
                        @PROPERTYSUBTYPECODEID uniqueidentifier,
                        @CONSTITUENTACCOUNTID uniqueidentifier,
                        @POSTSTATUSCODE tinyint,
                        @POSTDATE datetime,
                        @GIVENANONYMOUSLY bit,
                        @DONOTRECEIPT bit
                    )
                    as
                    set nocount on;

                    declare @CHANGEDATE datetime;

                    begin try

                        set @CHANGEDATE = getdate();

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

                        /* Validate payment information */

                        --IS THE REVENUE POSTED?

                        if (select count(REVENUE.ID) from dbo.REVENUE
                            inner join dbo.REVENUEPOSTED on REVENUEPOSTED.ID = REVENUE.ID
                            where REVENUE.ID = @ID) > 0
                            raiserror('You cannot edit a posted gift.', 13, 1)

                        if @POSTSTATUSCODE = 0
                            raiserror('You cannot edit a gift to post it.', 13, 1)

                        -- if the payment method has changed, clear any user-defined gl distributions for this revenue record

                        if exists (select ID from dbo.REVENUEGLDISTRIBUTION where REVENUEID = @ID)
                        begin

                            -- check to see if amount has changed

                            if (select count(REVENUEPAYMENTMETHOD.ID) from dbo.REVENUEPAYMENTMETHOD where REVENUEPAYMENTMETHOD.REVENUEID = @ID and PAYMENTMETHODCODE = @PAYMENTMETHODCODE) = 0
                            begin                            
                                --Clear GL

                                --Cache CONTEXT INFO

                                declare @contextCache varbinary(128);
                                set @contextCache = CONTEXT_INFO();

                                if not @CHANGEAGENTID is null
                                    set CONTEXT_INFO @CHANGEAGENTID;

                                delete from dbo.REVENUEGLDISTRIBUTION where REVENUEID = @ID;

                                --Restore CONTEXT_INFO

                                if not @contextCache is null
                                    set CONTEXT_INFO @contextCache;
                            end
                        end


                        exec dbo.USP_REVENUEPAYMENT_EDIT @ID, @CURRENTAPPUSERID, @CHANGEAGENTID, @DATE
                            @PAYMENTMETHODCODE, @CHECKDATE, @CHECKNUMBER, @REFERENCEDATE, @REFERENCENUMBER
                            @CARDHOLDERNAME, @CREDITCARDNUMBER, @CREDITTYPECODEID, @AUTHORIZATIONCODE, @EXPIRESON
                            @ISSUER, @NUMBEROFUNITS, @SYMBOL, @MEDIANPRICE, @GIFTINKINDSUBTYPECODEID,
                            @PROPERTYSUBTYPECODEID, @CONSTITUENTACCOUNTID, @GIVENANONYMOUSLY, @DONOTRECEIPT, @CHANGEDATE;

                        /*JamesWill 2007/03/23 Only run this update if POSTDATE or DONOTPOST actually changed to avoid unnecessary rows in the audit table. 
                          Also, add CHANGEDBYID and DATECHANGED to the update statement */

                        declare @OLDPOSTDATE datetime;
                        declare @OLDDONOTPOST bit;
                        declare @DONOTPOST bit;

                        select @DONOTPOST = case when @POSTSTATUSCODE = 2 then 1 else 0 end;
                        select top 1 @OLDPOSTDATE = POSTDATE, @OLDDONOTPOST = DONOTPOST from dbo.REVENUE where ID = @ID;

                        if @OLDPOSTDATE <> @POSTDATE or @OLDDONOTPOST <> @DONOTPOST 
                            update dbo.REVENUE
                            set    POSTDATE = @POSTDATE,
                                DONOTPOST = case when @POSTSTATUSCODE = 2 then 1 else 0 end,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CHANGEDATE
                            where ID = @ID;

                    end try

                    begin catch
                        exec dbo.USP_RAISE_ERROR;
                    end catch
                    return 0;