UFN_GIFTAID_CALCULATETAXCLAIMAMOUNT
Calculates the tax claim amount for the given split.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SPLITID | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.UFN_GIFTAID_CALCULATETAXCLAIMAMOUNT
(
@SPLITID uniqueidentifier
)
returns @TAXCLAIMAMOUNTS table
(
BASETAXCLAIMAMOUNT money,
TRANSITIONALTAXCLAIMAMOUNT money,
TRANSACTIONBASETAXCLAIMAMOUNT money,
TRANSACTIONTRANSITIONALTAXCLAIMAMOUNT money,
ORGANIZATIONBASETAXCLAIMAMOUNT money,
ORGANIZATIONTRANSITIONALTAXCLAIMAMOUNT money
)
as
begin
declare @REVENUEID uniqueidentifier;
declare @CONSTITUENTID uniqueidentifier;
declare @TRANSACTIONTYPECODE tinyint;
declare @DESIGNATIONID uniqueidentifier;
declare @DATE datetime;
declare @AMOUNT money;
declare @REGISTRANTID uniqueidentifier;
declare @MEMBERSHIPID uniqueidentifier;
declare @STATUS bit;
declare @ELIGIBILITY tinyint;
declare @BASECURRENCYID uniqueidentifier;
declare @TRANSACTIONCURRENCYID uniqueidentifier;
declare @BASEEXCHANGERATEID uniqueidentifier;
declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
select
@REVENUEID = REVENUE.ID,
@CONSTITUENTID = REVENUE.CONSTITUENTID,
@TRANSACTIONTYPECODE = REVENUE.TRANSACTIONTYPECODE,
@DATE = REVENUE.DATE,
@DESIGNATIONID = REVENUESPLIT.DESIGNATIONID,
@AMOUNT = REVENUESPLIT.TRANSACTIONAMOUNT,
@STATUS = (REVENUESPLITGIFTAID.RULES_STATUS & REVENUESPLITGIFTAID.ATTRIBUTES_STATUS) ^ REVENUESPLITGIFTAID.DECLINESGIFTAID,
@BASECURRENCYID = REVENUESPLIT.BASECURRENCYID,
@TRANSACTIONCURRENCYID = REVENUESPLIT.TRANSACTIONCURRENCYID,
@BASEEXCHANGERATEID = REVENUESPLIT.BASEEXCHANGERATEID,
@ORGANIZATIONEXCHANGERATEID = REVENUESPLIT.ORGANIZATIONEXCHANGERATEID
from dbo.REVENUESPLIT
inner join dbo.REVENUESPLITGIFTAID
on REVENUESPLIT.ID = REVENUESPLITGIFTAID.ID
inner join dbo.REVENUE
on REVENUESPLIT.REVENUEID = REVENUE.ID
where REVENUESPLIT.ID = @SPLITID;
declare @ORGANIZATIONCURRENCYID uniqueidentifier;
set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
if @BASECURRENCYID is null
set @BASECURRENCYID = @ORGANIZATIONCURRENCYID;
declare @DECIMALDIGITS tinyint;
declare @ROUNDINGTYPECODE tinyint;
set @DECIMALDIGITS = 2;
set @ROUNDINGTYPECODE = 0;
select
@DECIMALDIGITS = DECIMALDIGITS,
@ROUNDINGTYPECODE = ROUNDINGTYPECODE
from dbo.UFN_CURRENCY_GETPROPERTIES(@TRANSACTIONCURRENCYID);
set @ELIGIBILITY = dbo.UFN_VALIDDECLARATION(@DATE, @CONSTITUENTID, @DESIGNATIONID, @REGISTRANTID, @MEMBERSHIPID);
--if qualified and not 'Not eligible', calculate tax claim amount
if @STATUS = 1 and @ELIGIBILITY != 1
if @TRANSACTIONTYPECODE = 0 or @TRANSACTIONTYPECODE = 2
begin
declare @BASERATE numeric(30,6);
declare @TRANSITIONALRATE numeric(30,6);
declare @RATE numeric(30,6);
set @BASERATE = dbo.UFN_GETGIFTAIDBASETAXRATE(@DATE);
set @TRANSITIONALRATE = dbo.UFN_GETGIFTAIDTRANSITIONALTAXRATE(@DATE);
set @RATE = @BASERATE + @TRANSITIONALRATE
declare @BASETAXCLAIMAMOUNT money = 0;
declare @TRANSITIONALTAXCLAIMAMOUNT money = 0;
declare @TRANSACTIONBASETAXCLAIMAMOUNT money = 0;
declare @TRANSACTIONTRANSITIONALTAXCLAIMAMOUNT money = 0;
declare @ORGANIZATIONBASETAXCLAIMAMOUNT money = 0;
declare @ORGANIZATIONTRANSITIONALTAXCLAIMAMOUNT money = 0;
set @TRANSACTIONBASETAXCLAIMAMOUNT = dbo.UFN_CURRENCY_ROUND(@AMOUNT * (@BASERATE / (100 - @BASERATE)), @DECIMALDIGITS, @ROUNDINGTYPECODE);
set @TRANSACTIONTRANSITIONALTAXCLAIMAMOUNT = dbo.UFN_CURRENCY_ROUND((@AMOUNT * (@RATE / (100 - @RATE))) - @TRANSACTIONBASETAXCLAIMAMOUNT, @DECIMALDIGITS, @ROUNDINGTYPECODE);
select @BASETAXCLAIMAMOUNT = CURRENCYVALUES.BASEAMOUNT, @ORGANIZATIONBASETAXCLAIMAMOUNT = CURRENCYVALUES.ORGANIZATIONAMOUNT
from dbo.UFN_CURRENCY_GETCURRENCYVALUES_2(@TRANSACTIONBASETAXCLAIMAMOUNT,
@DATE,
@BASECURRENCYID,
@BASEEXCHANGERATEID,
@TRANSACTIONCURRENCYID,
null,
@ORGANIZATIONCURRENCYID,
null,
@ORGANIZATIONEXCHANGERATEID,
0) as CURRENCYVALUES;
select @TRANSITIONALTAXCLAIMAMOUNT = CURRENCYVALUES.BASEAMOUNT, @ORGANIZATIONTRANSITIONALTAXCLAIMAMOUNT = CURRENCYVALUES.ORGANIZATIONAMOUNT
from dbo.UFN_CURRENCY_GETCURRENCYVALUES_2(@TRANSACTIONTRANSITIONALTAXCLAIMAMOUNT,
@DATE,
@BASECURRENCYID,
@BASEEXCHANGERATEID,
@TRANSACTIONCURRENCYID,
null,
@ORGANIZATIONCURRENCYID,
null,
@ORGANIZATIONEXCHANGERATEID,
0) as CURRENCYVALUES;
insert into @TAXCLAIMAMOUNTS (BASETAXCLAIMAMOUNT, TRANSITIONALTAXCLAIMAMOUNT, TRANSACTIONBASETAXCLAIMAMOUNT, TRANSACTIONTRANSITIONALTAXCLAIMAMOUNT, ORGANIZATIONBASETAXCLAIMAMOUNT, ORGANIZATIONTRANSITIONALTAXCLAIMAMOUNT)
values (@BASETAXCLAIMAMOUNT, @TRANSITIONALTAXCLAIMAMOUNT, @TRANSACTIONBASETAXCLAIMAMOUNT, @TRANSACTIONTRANSITIONALTAXCLAIMAMOUNT, @ORGANIZATIONBASETAXCLAIMAMOUNT, @ORGANIZATIONTRANSITIONALTAXCLAIMAMOUNT)
end
--pledge has its own gross amount calculation, so it has to be a special case
if @TRANSACTIONTYPECODE = 1 and @STATUS = 1
begin
insert into @TAXCLAIMAMOUNTS (BASETAXCLAIMAMOUNT, TRANSITIONALTAXCLAIMAMOUNT, TRANSACTIONBASETAXCLAIMAMOUNT, TRANSACTIONTRANSITIONALTAXCLAIMAMOUNT, ORGANIZATIONBASETAXCLAIMAMOUNT, ORGANIZATIONTRANSITIONALTAXCLAIMAMOUNT)
select BASEAMOUNT.BASETAXCLAIMAMOUNT, BASEAMOUNT.TRANSITIONALTAXCLAIMAMOUNT, TRANSACTIONAMOUNT.BASETAXCLAIMAMOUNT, TRANSACTIONAMOUNT.TRANSITIONALTAXCLAIMAMOUNT, ORGANIZATIONAMOUNT.BASETAXCLAIMAMOUNT, ORGANIZATIONAMOUNT.TRANSITIONALTAXCLAIMAMOUNT
from dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGETAXCLAIMAMOUNT_2(@SPLITID, 0) as BASEAMOUNT
cross apply dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGETAXCLAIMAMOUNT_2(@SPLITID, 1) as TRANSACTIONAMOUNT
cross apply dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGETAXCLAIMAMOUNT_2(@SPLITID, 2) as ORGANIZATIONAMOUNT
declare @BASEDECIMALDIGITS tinyint;
declare @BASEROUNDINGTYPECODE tinyint;
declare @ORGANIZATIONDECIMALDIGITS tinyint;
declare @ORGANIZATIONROUNDINGTYPECODE tinyint;
set @BASEDECIMALDIGITS = 2;
set @BASEROUNDINGTYPECODE = 0;
set @ORGANIZATIONDECIMALDIGITS = 2;
set @ORGANIZATIONROUNDINGTYPECODE = 0;
select
@BASEDECIMALDIGITS = DECIMALDIGITS,
@BASEROUNDINGTYPECODE = ROUNDINGTYPECODE
from dbo.UFN_CURRENCY_GETPROPERTIES(@BASECURRENCYID);
select
@ORGANIZATIONDECIMALDIGITS = DECIMALDIGITS,
@ORGANIZATIONROUNDINGTYPECODE = ROUNDINGTYPECODE
from dbo.UFN_CURRENCY_GETPROPERTIES(@ORGANIZATIONCURRENCYID);
update @TAXCLAIMAMOUNTS set
BASETAXCLAIMAMOUNT = dbo.UFN_CURRENCY_ROUND(coalesce(BASETAXCLAIMAMOUNT, 0), @BASEDECIMALDIGITS, @BASEROUNDINGTYPECODE),
TRANSITIONALTAXCLAIMAMOUNT = dbo.UFN_CURRENCY_ROUND(coalesce(TRANSITIONALTAXCLAIMAMOUNT, 0), @BASEDECIMALDIGITS, @BASEROUNDINGTYPECODE),
TRANSACTIONBASETAXCLAIMAMOUNT = dbo.UFN_CURRENCY_ROUND(coalesce(TRANSACTIONBASETAXCLAIMAMOUNT, 0), @DECIMALDIGITS, @ROUNDINGTYPECODE),
TRANSACTIONTRANSITIONALTAXCLAIMAMOUNT = dbo.UFN_CURRENCY_ROUND(coalesce(TRANSACTIONTRANSITIONALTAXCLAIMAMOUNT, 0), @DECIMALDIGITS, @ROUNDINGTYPECODE),
ORGANIZATIONBASETAXCLAIMAMOUNT = dbo.UFN_CURRENCY_ROUND(coalesce(ORGANIZATIONBASETAXCLAIMAMOUNT, 0), @ORGANIZATIONDECIMALDIGITS, @ORGANIZATIONROUNDINGTYPECODE),
ORGANIZATIONTRANSITIONALTAXCLAIMAMOUNT = dbo.UFN_CURRENCY_ROUND(coalesce(ORGANIZATIONTRANSITIONALTAXCLAIMAMOUNT, 0), @ORGANIZATIONDECIMALDIGITS, @ORGANIZATIONROUNDINGTYPECODE)
end
return
end