USP_REVENUETRIBUTETAXCLAIMAMOUNT_ADDUPDATEBYCONSTITUENT
Adds or updates entries in the REVENUETRIBUTETAXCLAIMAMOUNT table for all transactions belonging to a constituent.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CONSTITUENTID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CURRENTDATE | datetime | IN |
Definition
Copy
create procedure dbo.USP_REVENUETRIBUTETAXCLAIMAMOUNT_ADDUPDATEBYCONSTITUENT
(
@CONSTITUENTID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@CURRENTDATE datetime
)
as
begin
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
if @CURRENTDATE is null
set @CURRENTDATE = getdate()
declare @TRANSACTIONTOINCLUDE table
(
ID uniqueidentifier,
TRIBUTETOTAL money,
TRANSACTIONTOTAL money,
REVENUETAXCLAIMAMOUNT money,
BASECURRENCYID uniqueidentifier,
ORGANIZATIONEXCHANGERATEID uniqueidentifier
)
insert into @TRANSACTIONTOINCLUDE
(
ID,
TRIBUTETOTAL,
TRANSACTIONTOTAL,
REVENUETAXCLAIMAMOUNT,
BASECURRENCYID,
ORGANIZATIONEXCHANGERATEID
)
select
REVENUE.ID,
(
select
SUM(AMOUNT)
from dbo.REVENUETRIBUTE
where REVENUEID = REVENUE.ID
),
REVENUE.AMOUNT,
case
when REVENUE.TRANSACTIONTYPECODE = 1 then
(
select
(sum(coalesce(TAXCLAIM.BASETAXCLAIMAMOUNT + TAXCLAIM.TRANSITIONALTAXCLAIMAMOUNT, 0)))
from dbo.REVENUESPLIT
cross apply dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGETAXCLAIMAMOUNT(REVENUESPLIT.ID) as TAXCLAIM
where REVENUESPLIT.REVENUEID = REVENUE.ID
)
else dbo.UFN_GIFTAIDREVENUESPLIT_GETTAXCLAIMAMOUNT(REVENUE.ID, 1)
end,
REVENUE.BASECURRENCYID,
REVENUE.ORGANIZATIONEXCHANGERATEID
from dbo.REVENUE
where
REVENUE.CONSTITUENTID = @CONSTITUENTID and
exists
(
select 1
from dbo.REVENUETRIBUTE
where REVENUEID = REVENUE.ID
)
declare @REVENUETRIBUTE table
(
ID uniqueidentifier,
REVENUEID uniqueidentifier,
AMOUNT money,
TAXCLAIMAMOUNT money
)
insert into @REVENUETRIBUTE
(
ID,
REVENUEID,
AMOUNT,
TAXCLAIMAMOUNT
)
select
ID,
REVENUEID,
AMOUNT,
round(dbo.UFN_REVENUETRIBUTE_CALCULATEGROSSAMOUNT(TRIBUTEID, REVENUEID, AMOUNT),2) - AMOUNT
from dbo.REVENUETRIBUTE
where REVENUEID in
(
select ID from @TRANSACTIONTOINCLUDE
)
-- Make sure all the transaction's tax claim amount is allocated if the tribute amounts equal the transaction amount
update @REVENUETRIBUTE set
TAXCLAIMAMOUNT += TAXCLAIMDIFFERENCE
from @REVENUETRIBUTE REVENUETRIBUTE
inner join
(
select
ID,
(REVENUETAXCLAIMAMOUNT - ( select
sum(TAXCLAIMAMOUNT)
from @REVENUETRIBUTE
where REVENUEID = TRANSACTIONTOINCLUDE.ID
)) as TAXCLAIMDIFFERENCE
from @TRANSACTIONTOINCLUDE as TRANSACTIONTOINCLUDE
where
TRIBUTETOTAL = TRANSACTIONTOTAL
)
TRANSACTIONTOINCLUDEWITHDIFFERENCE on REVENUETRIBUTE.REVENUEID = TRANSACTIONTOINCLUDEWITHDIFFERENCE.ID
where
TAXCLAIMDIFFERENCE <> 0 and
REVENUETRIBUTE.ID =
-- If the tax claim difference is positive, update the tribute with the least amount. Otherwise, update
-- the tribute with the greatest amount.
case
when TAXCLAIMDIFFERENCE > 0 then
(
select top 1
ID
from @REVENUETRIBUTE
where
REVENUEID = TRANSACTIONTOINCLUDEWITHDIFFERENCE.ID
order by TAXCLAIMAMOUNT asc
)
else
(
select top 1
ID
from @REVENUETRIBUTE
where
REVENUEID = TRANSACTIONTOINCLUDEWITHDIFFERENCE.ID
order by TAXCLAIMAMOUNT desc
)
end
update dbo.REVENUETRIBUTETAXCLAIMAMOUNT
set
TAXCLAIMAMOUNT = SOURCETRIBUTE.TAXCLAIMAMOUNT,
BASECURRENCYID = TRANSACTIONTOINCLUDE.BASECURRENCYID,
ORGANIZATIONTAXCLAIMAMOUNT = dbo.UFN_CURRENCY_CONVERT(SOURCETRIBUTE.TAXCLAIMAMOUNT, TRANSACTIONTOINCLUDE.ORGANIZATIONEXCHANGERATEID),
ORGANIZATIONEXCHANGERATEID = TRANSACTIONTOINCLUDE.ORGANIZATIONEXCHANGERATEID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from @REVENUETRIBUTE SOURCETRIBUTE
inner join @TRANSACTIONTOINCLUDE TRANSACTIONTOINCLUDE on SOURCETRIBUTE.REVENUEID = TRANSACTIONTOINCLUDE.ID
where
REVENUETRIBUTETAXCLAIMAMOUNT.ID = SOURCETRIBUTE.ID and
exists(select 1 from dbo.REVENUETRIBUTETAXCLAIMAMOUNT where ID = SOURCETRIBUTE.ID) and
-- Avoid updating the table unnecessarily. If the TAXCLAIMAMOUNT didn't change,
-- none of the other fields need to change.
REVENUETRIBUTETAXCLAIMAMOUNT.TAXCLAIMAMOUNT <> SOURCETRIBUTE.TAXCLAIMAMOUNT
insert into dbo.REVENUETRIBUTETAXCLAIMAMOUNT
(
ID,
TAXCLAIMAMOUNT,
BASECURRENCYID,
ORGANIZATIONTAXCLAIMAMOUNT,
ORGANIZATIONEXCHANGERATEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
SOURCETRIBUTE.ID,
SOURCETRIBUTE.TAXCLAIMAMOUNT,
TRANSACTIONTOINCLUDE.BASECURRENCYID,
dbo.UFN_CURRENCY_CONVERT(SOURCETRIBUTE.TAXCLAIMAMOUNT, TRANSACTIONTOINCLUDE.ORGANIZATIONEXCHANGERATEID),
TRANSACTIONTOINCLUDE.ORGANIZATIONEXCHANGERATEID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from @REVENUETRIBUTE SOURCETRIBUTE
inner join @TRANSACTIONTOINCLUDE TRANSACTIONTOINCLUDE on SOURCETRIBUTE.REVENUEID = TRANSACTIONTOINCLUDE.ID
where
not exists(select 1 from dbo.REVENUETRIBUTETAXCLAIMAMOUNT where ID = SOURCETRIBUTE.ID)
end