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