USP_SALESORDER_ADDRECEIPTAMOUNTS

Adds receipt amounts to transactions related to the given sales order

Parameters

Parameter Parameter Type Mode Description
@SALESORDERID uniqueidentifier IN
@REVENUEID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@DATECHANGED datetime IN

Definition

Copy


CREATE procedure [dbo].[USP_SALESORDER_ADDRECEIPTAMOUNTS]
(
    @SALESORDERID uniqueidentifier,
    @REVENUEID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier,
    @DATECHANGED datetime
)
as
begin

    declare @RECEIPTAMOUNT money
    declare @TOTALAMOUNT money

    set @RECEIPTAMOUNT = dbo.UFN_SALESORDER_GETRECEIPTAMOUNT(@SALESORDERID)

    if @RECEIPTAMOUNT = 0
        return;  -- do nothing, all the receipt amounts default to zero and remain zero

    else begin
        set @TOTALAMOUNT = dbo.UFN_SALESORDER_TOTAL(@SALESORDERID);

        declare @MERGE table 
        (
            ID uniqueidentifier primary key,
            AMOUNT money,
            RECEIPTAMOUNT money,
            DATEADDED datetime
        )

        insert into @MERGE (ID, AMOUNT, RECEIPTAMOUNT)
        select FINANCIALTRANSACTION.ID, FINANCIALTRANSACTION.BASEAMOUNT, REVENUE_EXT.RECEIPTAMOUNT
        from dbo.FINANCIALTRANSACTION inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
        inner join dbo.SALESORDERPAYMENT on REVENUE_EXT.ID = SALESORDERPAYMENT.PAYMENTID
        where SALESORDERPAYMENT.SALESORDERID = @SALESORDERID

        declare @IDEALAMOUNT decimal(30, 5);
        declare @ORIGINALAMOUNTDISTRIBUTEDIDEAL decimal(30, 5); 
        declare @ORIGINALAMOUNTDISTRIBUTED decimal(30, 5);
        declare @WEIGHTAMOUNT decimal(30, 10);
        declare @ID uniqueidentifier;
        declare @DECIMALDIGITSFORCURRENCY int;

        set @ORIGINALAMOUNTDISTRIBUTEDIDEAL = 0;
        set @ORIGINALAMOUNTDISTRIBUTED = 0;

        declare @CURRENCYID uniqueidentifier

        select @DECIMALDIGITSFORCURRENCY = CURRENCY.DECIMALDIGITS
        from dbo.CURRENCY inner join dbo.FINANCIALTRANSACTION on CURRENCY.ID = FINANCIALTRANSACTION.TRANSACTIONCURRENCYID
        where FINANCIALTRANSACTION.ID = @REVENUEID

        declare AMOUNTSTOPRORATECURSOR cursor local fast_forward for 
            select ID, AMOUNT
            from @MERGE

        open AMOUNTSTOPRORATECURSOR;

        fetch next from AMOUNTSTOPRORATECURSOR into @ID, @WEIGHTAMOUNT;

        while @@FETCH_STATUS = 0 begin
            if @TOTALAMOUNT <> 0
                set @IDEALAMOUNT = (@WEIGHTAMOUNT / @TOTALAMOUNT) * @RECEIPTAMOUNT;
            else
                set @IDEALAMOUNT = 0;

            set @WEIGHTAMOUNT = ROUND(@IDEALAMOUNT + @ORIGINALAMOUNTDISTRIBUTEDIDEAL - @ORIGINALAMOUNTDISTRIBUTED, @DECIMALDIGITSFORCURRENCY);

            update @MERGE set RECEIPTAMOUNT = @WEIGHTAMOUNT
            where ID = @ID

            set @ORIGINALAMOUNTDISTRIBUTEDIDEAL = @ORIGINALAMOUNTDISTRIBUTEDIDEAL + @IDEALAMOUNT;
            set @ORIGINALAMOUNTDISTRIBUTED = @ORIGINALAMOUNTDISTRIBUTED + @WEIGHTAMOUNT;

            fetch next from AMOUNTSTOPRORATECURSOR into @ID, @WEIGHTAMOUNT;
        end

        close AMOUNTSTOPRORATECURSOR;
        deallocate AMOUNTSTOPRORATECURSOR;

        update dbo.REVENUE_EXT set
            RECEIPTAMOUNT = MERGETABLE.RECEIPTAMOUNT,
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @DATECHANGED
        from
            dbo.REVENUE_EXT
        inner join
            @MERGE as MERGETABLE on MERGETABLE.ID = REVENUE_EXT.ID
    end
end