USP_DATAFORMTEMPLATE_EDIT_ORDERPAYMENTADJUST

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

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter indicating the ID of the record being edited.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@DATE datetime IN Date
@AMOUNT money IN Amount
@PAYMENTMETHODCODE tinyint IN Payment method
@OTHERPAYMENTMETHODCODEID uniqueidentifier IN Other method
@CHECKDATE UDT_FUZZYDATE IN Check date
@CHECKNUMBER nvarchar(20) IN Check number
@CARDHOLDERNAME nvarchar(255) IN Name on card
@CREDITCARDNUMBER nvarchar(4) IN Card number
@CREDITTYPECODEID uniqueidentifier IN Card type
@AUTHORIZATIONCODE nvarchar(20) IN Authorization code
@EXPIRESON UDT_FUZZYDATE IN Expires on
@ADJUSTMENTDATE datetime IN Adjustment date
@ADJUSTMENTPOSTDATE datetime IN Adjustment post date
@ADJUSTMENTREASON nvarchar(300) IN Adjustment reason

Definition

Copy


CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_ORDERPAYMENTADJUST 
(
    @ID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier,
    @DATE datetime,
    @AMOUNT money,
    @PAYMENTMETHODCODE tinyint,
    @OTHERPAYMENTMETHODCODEID uniqueidentifier,
    @CHECKDATE dbo.UDT_FUZZYDATE,
    @CHECKNUMBER nvarchar(20),
    @CARDHOLDERNAME nvarchar(255),
    @CREDITCARDNUMBER nvarchar(4),
    @CREDITTYPECODEID uniqueidentifier,
    @AUTHORIZATIONCODE nvarchar(20),
    @EXPIRESON dbo.UDT_FUZZYDATE,
    @ADJUSTMENTDATE datetime,
    @ADJUSTMENTPOSTDATE datetime,
    @ADJUSTMENTREASON nvarchar(300)
)

as

    set nocount on;

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

    declare @CURRENTDATE datetime;
    set @CURRENTDATE = getdate();

    declare @ADJUSTMENTID uniqueidentifier;                
    declare @ADJUST bit;

    declare @CLEARGLDISTRIBUTIONS bit;
    set @CLEARGLDISTRIBUTIONS = 0;
    set @ADJUST = 0;

    declare @contextCache varbinary(128);

    --cache current context information

    set @contextCache = CONTEXT_INFO();

    --set CONTEXT_INFO to @CHANGEAGENTID

    set CONTEXT_INFO @CHANGEAGENTID;

    declare @PAYMENTID uniqueidentifier;

    select @PAYMENTID = PAYMENTID from dbo.SALESORDERPAYMENT where ID = @ID;

    begin try
        declare @ORIGINALPAYMETHODID uniqueidentifier; 
        declare @ORIGINALPAYMENTMETHODCODE tinyint;

        select
            @ORIGINALPAYMETHODID = ID,
            @ORIGINALPAYMENTMETHODCODE = PAYMENTMETHODCODE
        from 
            dbo.REVENUEPAYMENTMETHOD
        where 
            REVENUEID = @PAYMENTID;

        -- check to see if amount or payment method has changed

        if 
        (
            select count(REVENUE.ID) from dbo.REVENUE 
            where REVENUE.ID = @PAYMENTID 
            and AMOUNT = @AMOUNT
        ) = 0 or @ORIGINALPAYMENTMETHODCODE <> @PAYMENTMETHODCODE
        begin
            set @CLEARGLDISTRIBUTIONS = 1;
        end

        if @AMOUNT < 0 
            raiserror('BBERR_NEGATIVEAMOUNT.', 13, 1);

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

        declare @FIELDCHANGED bit;    
        set @FIELDCHANGED = 0;        

        declare @ORIGINALAMOUNT money;
        select @ORIGINALAMOUNT = AMOUNT from dbo.REVENUE where REVENUE.ID = @PAYMENTID;
        if @ORIGINALAMOUNT <> @AMOUNT
        begin
            set @FIELDCHANGED = 1;
            set @ADJUST = 1;
        end

        /* Already adjusted */
        if @ADJUST = 0
            if 
            (
                select COUNT(ADJUSTMENT.ID)
                from dbo.ADJUSTMENT
                where ADJUSTMENT.REVENUEID = @PAYMENTID and ADJUSTMENT.POSTSTATUSCODE = 1
            ) > 0
                set @ADJUST = 1;

        /* If there was a change to GL related data log an adjustment for each revenue in the transaction */
        if @ADJUST = 1
        begin
            set @ADJUSTMENTID = null;
            exec dbo.USP_SAVE_ADJUSTMENT @PAYMENTID, @ADJUSTMENTID output, @CHANGEAGENTID, @CURRENTDATE, @ADJUSTMENTDATE, @ADJUSTMENTPOSTDATE, @ADJUSTMENTREASON;
        end

        -- if a field has changed, determine if the revenue needs to be re-receipted or re-acknowledged

        declare @SALESORDERID uniqueidentifier;
        select @SALESORDERID = SALESORDERID
        from dbo.SALESORDERPAYMENT 
        where ID = @ID;

        if @FIELDCHANGED = 1
        begin
            declare @CHANGEDUE money;
            declare @AMOUNTTENDERED money;
            declare @ORDERAMOUNT money;

            --get balance before original payment amount

            set @ORDERAMOUNT = dbo.UFN_SALESORDER_GETAMOUNTDUE(@SALESORDERID) + @ORIGINALAMOUNT;

            set @AMOUNTTENDERED = @AMOUNT;
            set @CHANGEDUE = 0;

            if @PAYMENTMETHODCODE = 0 --cash

                begin
                if @AMOUNT > @ORDERAMOUNT
                    begin
                        set @CHANGEDUE = @AMOUNT - @ORDERAMOUNT;
                        set @AMOUNT = @ORDERAMOUNT;
                    end
                end
            else
                begin
                    if @AMOUNT > @ORDERAMOUNT
                        raiserror('BBERR_OVERPAY.', 13, 1);
                end

            exec dbo.USP_REVENUE_UPDATERERECEIPTS @PAYMENTID, @CHANGEAGENTID, @CURRENTDATE;     

            exec dbo.USP_REVENUELETTER_SETREACKNOWLEDGEMENTS @PAYMENTID, @CHANGEAGENTID, @CURRENTDATE;     

            update dbo.SALESORDERPAYMENT
            set AMOUNT = @AMOUNT,
                AMOUNTTENDERED = @AMOUNTTENDERED,
                CHANGEDUE = @CHANGEDUE,
                CHANGEDBYID = @CHANGEAGENTID,
                DATECHANGED = @CURRENTDATE
            where ID = @ID;

        end

        if @ORIGINALAMOUNT <> @AMOUNT 
        -- make sure we aren't trying to modify revenue in a locked/closed deposit/bank

        exec dbo.USP_EDIT_REVENUE_VALIDATE_DEPOSIT_STATUS @PAYMENTID;

        update dbo.REVENUE 
        set DATE = @DATE,
            AMOUNT = @AMOUNT
            CHANGEDBYID = @CHANGEAGENTID
            DATECHANGED = @CURRENTDATE
        where ID = @PAYMENTID;

        update dbo.REVENUEPAYMENTMETHOD set 
            PAYMENTMETHODCODE = @PAYMENTMETHODCODE,
            AMOUNT = @AMOUNT,
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CURRENTDATE
        where ID = @ORIGINALPAYMETHODID;

        exec dbo.USP_REVENUE_UPDATEPAYMENTDETAILS 
            @PAYMENTMETHODID = @ORIGINALPAYMETHODID,
            @PAYMENTMETHODCODE = @PAYMENTMETHODCODE
            @CHECKDATE = @CHECKDATE
            @CHECKNUMBER = @CHECKNUMBER
            @CARDHOLDERNAME = @CARDHOLDERNAME
            @CREDITCARDNUMBER = @CREDITCARDNUMBER
            @CREDITTYPECODEID = @CREDITTYPECODEID
            @AUTHORIZATIONCODE = @AUTHORIZATIONCODE
            @EXPIRESON = @EXPIRESON
            @CHANGEAGENTID = @CHANGEAGENTID,
            @CHANGEDATE = @CURRENTDATE
            @KEYALREADYOPEN = 0,
            @OTHERPAYMENTMETHODCODEID = @OTHERPAYMENTMETHODCODEID,
            @REVENUEAMOUNT = @AMOUNT,
            @ORIGINALPAYMENTMETHODCODE=@ORIGINALPAYMENTMETHODCODE;

        if @FIELDCHANGED = 1
        begin
            --need to update the applications.  

            declare @MAPPING table
            (
                PAYMENTSPLITID uniqueidentifier,
                AMOUNT money
            );

            insert into @MAPPING(PAYMENTSPLITID, AMOUNT)
            select 
                a.ID,
                a.AMOUNT
            from 
                dbo.UFN_PLEDGE_GETSPLITSFORPAYMENT(@PAYMENTID, @AMOUNT) as a;

            merge dbo.REVENUESPLIT as target
            using @MAPPING as source
            on (target.ID = source.PAYMENTSPLITID)
            when matched then update set
                AMOUNT = source.AMOUNT,
                CHANGEDBYID = @CHANGEAGENTID,
                DATECHANGED = @CURRENTDATE;
        end

        declare @SALESMETHODTYPECODE tinyint;
        select @SALESMETHODTYPECODE = SALESORDER.SALESMETHODTYPECODE
        from dbo.SALESORDER
        inner join dbo.SALESORDERPAYMENT on SALESORDER.ID = SALESORDERPAYMENT.SALESORDERID
        where SALESORDERPAYMENT.ID = @ID;

        -- clear the user-defined gl distributions

        if @CLEARGLDISTRIBUTIONS = 1 or @SALESMETHODTYPECODE = 3 -- Group Sales

        begin                                
            -- Clear GL

            delete from dbo.REVENUEGLDISTRIBUTION where REVENUEID = @PAYMENTID and OUTDATED = 0;    

            -- Add new GL distributions

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

        end

        /* add adjustment history information */
        if @ADJUST = 1
        begin
            if @ADJUSTMENTID is not null
                exec dbo.USP_ADJUSTMENTHISTORY_REVENUE_SAVEHISTORY @PAYMENTID, @CHANGEAGENTID, null, @ADJUSTMENTID;
        end

        if @SALESMETHODTYPECODE = 3
            --group sales reservation, progress status

            exec dbo.USP_RESERVATION_UPDATESTATUSANDHISTORY @SALESORDERID, @CHANGEAGENTID                    
    end try

    begin catch
        --reset CONTEXT_INFO to previous value

        if not @contextCache is null
            set CONTEXT_INFO @contextCache;

        exec dbo.USP_RAISE_ERROR;

        return 1;
    end catch

    --reset CONTEXT_INFO to previous value

    if not @contextCache is null
        set CONTEXT_INFO @contextCache;

return 0;