USP_REVENUE_UPDATESPLITAMOUNTS
Updates split amounts to match the amount of a revenue detail while maintaining the correct percentages.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@REVENUEID | uniqueidentifier | IN | |
@ORIGINALAMOUNT | money | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_REVENUE_UPDATESPLITAMOUNTS
(
@REVENUEID uniqueidentifier,
@ORIGINALAMOUNT money,
@CHANGEAGENTID uniqueidentifier,
@CHANGEDATE datetime
)
as
set nocount on;
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 @SPLITID uniqueidentifier;
set @AMOUNTDISTRIBUTEDIDEAL = 0;
set @AMOUNTDISTRIBUTED = 0;
select @WEIGHTSUM = AMOUNT from dbo.REVENUE where ID = @REVENUEID;
declare SPLITSCURSOR cursor local fast_forward
for
select ID, AMOUNT from dbo.REVENUESPLIT where REVENUEID = @REVENUEID;
open SPLITSCURSOR;
fetch next from SPLITSCURSOR into @SPLITID, @WEIGHTAMOUNT;
while @@FETCH_STATUS = 0
begin
if @ORIGINALAMOUNT <> 0
set @IDEALAMOUNT = (@WEIGHTAMOUNT / @ORIGINALAMOUNT) * @WEIGHTSUM;
else
set @IDEALAMOUNT = 0;
set @WEIGHTAMOUNT = ROUND(@IDEALAMOUNT + @AMOUNTDISTRIBUTEDIDEAL - @AMOUNTDISTRIBUTED, 2);
update
dbo.REVENUESPLIT
set
AMOUNT = @WEIGHTAMOUNT,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
where
ID = @SPLITID;
set @AMOUNTDISTRIBUTEDIDEAL = @AMOUNTDISTRIBUTEDIDEAL + @IDEALAMOUNT;
set @AMOUNTDISTRIBUTED = @AMOUNTDISTRIBUTED + @WEIGHTAMOUNT;
fetch next from SPLITSCURSOR into @SPLITID, @WEIGHTAMOUNT;
end
--When a cursor is used, it should be explicitly closed/deallocated in case of blocking or USP running long
close SPLITSCURSOR;
deallocate SPLITSCURSOR;