UFN_REVENUE_GETPROPERTYDETAILSPLITSBYTRANSACTION
Generates the splits for property gain/loss and brokerfee by transaction.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@TRANSACTIONID | uniqueidentifier | IN | |
@PAYMENTMETHODCODE | int | IN |
Definition
Copy
CREATE function dbo.UFN_REVENUE_GETPROPERTYDETAILSPLITSBYTRANSACTION
(
@TRANSACTIONID uniqueidentifier,
@PAYMENTMETHODCODE int
)
returns @SPLITS TABLE
(
REVENUESPLITID uniqueidentifier,
AMOUNT money,
TRANSACTIONAMOUNT money,
REVENUEID uniqueidentifier,
SPLITTRANSACTIONAMOUNT money,
ORGANIZATIONAMOUNT money,
TRANSACTIONCURRENCYID uniqueidentifier,
BASECURRENCYID uniqueidentifier,
BASEEXCHANGERATEID uniqueidentifier,
ORGANIZATIONEXCHANGERATEID uniqueidentifier
)
as
begin
declare @REVENUETRANSACTIONAMOUNT money;
declare @REVENUEAMOUNT money;
declare @REVENUEORGANIZATIONAMOUNT money;
declare @TRANSACTIONCURRENCYID uniqueidentifier;
declare @BASECURRENCYID uniqueidentifier;
declare @BASEEXCHANGERATEID uniqueidentifier;
declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
-- get Revenue values
select
@REVENUETRANSACTIONAMOUNT = TRANSACTIONAMOUNT,
@REVENUEAMOUNT = AMOUNT,
@REVENUEORGANIZATIONAMOUNT = ORGANIZATIONAMOUNT,
@TRANSACTIONCURRENCYID = TRANSACTIONCURRENCYID,
@BASECURRENCYID = BASECURRENCYID,
@BASEEXCHANGERATEID = BASEEXCHANGERATEID,
@ORGANIZATIONEXCHANGERATEID = ORGANIZATIONEXCHANGERATEID
from dbo.REVENUE with (nolock)
where ID = @TRANSACTIONID;
declare @NUMBEROFSPLITS int
select @NUMBEROFSPLITS = count(ID)
from dbo.REVENUESPLIT
where REVENUEID = @TRANSACTIONID;
declare @TRANSACTIONAMOUNT_TO_DISTRIBUTE money;
declare @AMOUNT_TO_DISTRIBUTE money;
declare @ORGANIZATIONAMOUNT_TO_DISTRIBUTE money;
-- get the amount to be distributed
if @PAYMENTMETHODCODE = 201 or @PAYMENTMETHODCODE = 203
begin
declare @TRANSACTIONSALEAMOUNT money;
declare @SALEDATE datetime
select top 1
@TRANSACTIONSALEAMOUNT = PROPERTYDETAIL.TRANSACTIONSALEAMOUNT,
@SALEDATE = PROPERTYDETAIL.SALEDATE
from dbo.PROPERTYDETAIL with (nolock)
inner join dbo.REVENUEPAYMENTMETHOD with (nolock) on PROPERTYDETAIL.ID = REVENUEPAYMENTMETHOD.ID
where
REVENUEPAYMENTMETHOD.REVENUEID = @TRANSACTIONID;
set @TRANSACTIONAMOUNT_TO_DISTRIBUTE = abs(@TRANSACTIONSALEAMOUNT - @REVENUETRANSACTIONAMOUNT)
select
@AMOUNT_TO_DISTRIBUTE = BASEAMOUNT,
@ORGANIZATIONAMOUNT_TO_DISTRIBUTE = ORGANIZATIONAMOUNT
from dbo.UFN_CURRENCY_GETCURRENCYVALUES(
@TRANSACTIONAMOUNT_TO_DISTRIBUTE,
@SALEDATE,
@BASECURRENCYID,
@BASEEXCHANGERATEID,
@TRANSACTIONCURRENCYID
)
end
else if @PAYMENTMETHODCODE = 204
begin
select top 1
@TRANSACTIONAMOUNT_TO_DISTRIBUTE =PROPERTYDETAIL.TRANSACTIONBROKERFEE,
@AMOUNT_TO_DISTRIBUTE = PROPERTYDETAIL.BROKERFEE,
@ORGANIZATIONAMOUNT_TO_DISTRIBUTE = PROPERTYDETAIL.ORGANIZATIONBROKERFEE
from dbo.PROPERTYDETAIL with (nolock)
inner join dbo.REVENUEPAYMENTMETHOD with (nolock) on PROPERTYDETAIL.ID = REVENUEPAYMENTMETHOD.ID
where
REVENUEPAYMENTMETHOD.REVENUEID = @TRANSACTIONID;
end
declare @TRANSACTIONCURRENCYDECIMALDIGITS int
select @TRANSACTIONCURRENCYDECIMALDIGITS = DECIMALDIGITS
from dbo.CURRENCY
where ID = @TRANSACTIONCURRENCYID
declare @BASECURRENCYDECIMALDIGITS int
select @BASECURRENCYDECIMALDIGITS = DECIMALDIGITS
from dbo.CURRENCY
where ID = @BASECURRENCYID
declare @ORGANIZATIONCURRENCYDECIMALDIGITS int
select @ORGANIZATIONCURRENCYDECIMALDIGITS = DECIMALDIGITS
from dbo.CURRENCY
where ID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY()
declare @REVENUESPLITID uniqueidentifier;
declare @SPLITTRANSACTIONAMOUNT money;
declare @SPLITAMOUNT money;
declare @SPLITORGANIZATIONAMOUNT money;
declare @DISTRIBUTEDTRANSACTIONAMOUNT money = 0;
declare @DISTRIBUTEDAMOUNT money = 0;
declare @DISTRIBUTEDORGANIZATIONAMOUNT money = 0;
declare @SPLITCOUNT int = 0
declare @TOTALDISTRIBUTEDTRANSACTIONAMOUNT money = 0;
declare @TOTALDISTRIBUTEDAMOUNT money = 0;
declare @TOTALDISTRIBUTEDORGANIZATIONAMOUNT money = 0;
-- get the Revenue splits
declare SPLITS_CURSOR cursor local fast_forward for
select
SPLIT.ID as REVENUESPLITID,
SPLIT.AMOUNT,
SPLIT.TRANSACTIONAMOUNT,
SPLIT.ORGANIZATIONAMOUNT
from dbo.REVENUE with (nolock)
inner join dbo.REVENUESPLIT as SPLIT with (nolock) on REVENUE.ID = SPLIT.REVENUEID
where
REVENUE.ID = @TRANSACTIONID;
open SPLITS_CURSOR;
fetch next from SPLITS_CURSOR into @REVENUESPLITID, @SPLITAMOUNT, @SPLITTRANSACTIONAMOUNT, @SPLITORGANIZATIONAMOUNT;
while @@FETCH_STATUS = 0 begin
set @SPLITCOUNT = @SPLITCOUNT + 1
if @SPLITCOUNT < @NUMBEROFSPLITS
begin
set @DISTRIBUTEDTRANSACTIONAMOUNT = dbo.UFN_CURRENCY_CONVERTBYPROPORTION(@SPLITTRANSACTIONAMOUNT, @REVENUETRANSACTIONAMOUNT, @TRANSACTIONAMOUNT_TO_DISTRIBUTE, @TRANSACTIONCURRENCYDECIMALDIGITS);
set @TOTALDISTRIBUTEDTRANSACTIONAMOUNT = @TOTALDISTRIBUTEDTRANSACTIONAMOUNT + @DISTRIBUTEDTRANSACTIONAMOUNT;
set @DISTRIBUTEDAMOUNT = dbo.UFN_CURRENCY_CONVERTBYPROPORTION(@SPLITAMOUNT, @REVENUEAMOUNT, @AMOUNT_TO_DISTRIBUTE, @BASECURRENCYDECIMALDIGITS);
set @TOTALDISTRIBUTEDAMOUNT = @TOTALDISTRIBUTEDAMOUNT + @DISTRIBUTEDAMOUNT;
set @DISTRIBUTEDORGANIZATIONAMOUNT = dbo.UFN_CURRENCY_CONVERTBYPROPORTION(@SPLITORGANIZATIONAMOUNT, @REVENUEORGANIZATIONAMOUNT, @ORGANIZATIONAMOUNT_TO_DISTRIBUTE, @ORGANIZATIONCURRENCYDECIMALDIGITS);
set @TOTALDISTRIBUTEDORGANIZATIONAMOUNT = @TOTALDISTRIBUTEDORGANIZATIONAMOUNT + @DISTRIBUTEDORGANIZATIONAMOUNT;
end
else
begin
set @DISTRIBUTEDTRANSACTIONAMOUNT = @TRANSACTIONAMOUNT_TO_DISTRIBUTE - @TOTALDISTRIBUTEDTRANSACTIONAMOUNT;
set @DISTRIBUTEDAMOUNT = @AMOUNT_TO_DISTRIBUTE - @TOTALDISTRIBUTEDAMOUNT;
set @DISTRIBUTEDORGANIZATIONAMOUNT = @ORGANIZATIONAMOUNT_TO_DISTRIBUTE - @TOTALDISTRIBUTEDORGANIZATIONAMOUNT;
end
insert into @SPLITS(
REVENUESPLITID,
AMOUNT,
TRANSACTIONAMOUNT,
REVENUEID,
SPLITTRANSACTIONAMOUNT,
ORGANIZATIONAMOUNT,
TRANSACTIONCURRENCYID,
BASECURRENCYID,
BASEEXCHANGERATEID,
ORGANIZATIONEXCHANGERATEID
)
values(
@REVENUESPLITID,
@DISTRIBUTEDAMOUNT,
@REVENUEAMOUNT,
@TRANSACTIONID,
@DISTRIBUTEDTRANSACTIONAMOUNT,
@DISTRIBUTEDORGANIZATIONAMOUNT,
@TRANSACTIONCURRENCYID,
@BASECURRENCYID,
@BASEEXCHANGERATEID,
@ORGANIZATIONEXCHANGERATEID
);
fetch next from SPLITS_CURSOR into @REVENUESPLITID, @SPLITAMOUNT, @SPLITTRANSACTIONAMOUNT, @SPLITORGANIZATIONAMOUNT;
end
close SPLITS_CURSOR;
deallocate SPLITS_CURSOR;
return;
end