UFN_SALESORDER_GETSPLITSFORPAYMENT
Returns the splits for a payment, pro-rated to the given amount.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@PAYMENTID | uniqueidentifier | IN | |
@AMOUNT | money | IN |
Definition
Copy
create function dbo.UFN_SALESORDER_GETSPLITSFORPAYMENT
(
@PAYMENTID uniqueidentifier,
@AMOUNT money
)
returns @PAYMENTSPLITS table
(
ID uniqueidentifier,
APPLICATIONCODE tinyint,
TYPECODE tinyint,
DESIGNATIONID uniqueidentifier,
AMOUNT money
)
as
begin
declare @WEIGHTSUM decimal(30, 5);
declare @IDEALAMOUNT decimal(30, 5);
declare @AMOUNTDISTRIBUTEDIDEAL decimal(30, 5);
declare @AMOUNTDISTRIBUTED decimal(30, 5);
declare @WEIGHTAMOUNT decimal(30, 5);
declare @DESIGNATIONID uniqueidentifier;
declare @APPLICATIONID uniqueidentifier;
set @AMOUNTDISTRIBUTEDIDEAL = 0;
set @AMOUNTDISTRIBUTED = 0;
insert into @PAYMENTSPLITS(ID, TYPECODE, APPLICATIONCODE, DESIGNATIONID, AMOUNT)
select ID, TYPECODE, APPLICATIONCODE, DESIGNATIONID, AMOUNT
from dbo.REVENUESPLIT
where REVENUEID = @PAYMENTID
order by DATEADDED;
select
@WEIGHTSUM = sum(AMOUNT)
from @PAYMENTSPLITS;
declare PAYMENTSPLITS cursor local fast_forward for
select ID, AMOUNT
from @PAYMENTSPLITS
open PAYMENTSPLITS;
fetch next from PAYMENTSPLITS into @APPLICATIONID, @WEIGHTAMOUNT;
while @@FETCH_STATUS = 0
begin
if @WEIGHTSUM <> 0
set @IDEALAMOUNT = (@WEIGHTAMOUNT / @WEIGHTSUM) * @AMOUNT;
else
set @IDEALAMOUNT = 0;
set @WEIGHTAMOUNT = ROUND(@IDEALAMOUNT + @AMOUNTDISTRIBUTEDIDEAL - @AMOUNTDISTRIBUTED, 2);
update @PAYMENTSPLITS
set AMOUNT = @WEIGHTAMOUNT
where ID = @APPLICATIONID;
set @AMOUNTDISTRIBUTEDIDEAL = @AMOUNTDISTRIBUTEDIDEAL + @IDEALAMOUNT;
set @AMOUNTDISTRIBUTED = @AMOUNTDISTRIBUTED + @WEIGHTAMOUNT;
fetch next from PAYMENTSPLITS into @APPLICATIONID, @WEIGHTAMOUNT;
end
close PAYMENTSPLITS;
deallocate PAYMENTSPLITS;
return;
end