USP_REVENUESPLIT_UPDATERECOGNITION
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@REVENUESPLITID | uniqueidentifier | IN | |
@ORIGINALREVENUESPLITAMOUNT | money | IN | |
@UPDATETYPE | tinyint | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN | |
@APPLICATIONTYPE | tinyint | IN | |
@APPLICATIONID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_REVENUESPLIT_UPDATERECOGNITION
(
@REVENUESPLITID uniqueidentifier,
@ORIGINALREVENUESPLITAMOUNT money,
@UPDATETYPE tinyint, -- 0 = no update, 1 = update proportionally, 2 = update based on defaults
@CHANGEAGENTID uniqueidentifier,
@CHANGEDATE datetime,
@APPLICATIONTYPE tinyint = null,
@APPLICATIONID uniqueidentifier = null
)
as
begin
set nocount on;
declare @REVENUEGIVENANONYMOUSLY bit
declare @CONSTITUENTID uniqueidentifier
declare @DATE datetime
declare @ORGANIZATIONCURRENCYID uniqueidentifier;
declare @BASETOORGANIZATIONEXCHANGERATEID uniqueidentifier;
declare @BASECURRENCYID uniqueidentifier;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CHANGEDATE is null
set @CHANGEDATE = getdate()
begin try
select
@REVENUEGIVENANONYMOUSLY = REVENUE_EXT.GIVENANONYMOUSLY,
@CONSTITUENTID = R.CONSTITUENTID,
@DATE = R.DATE,
@BASECURRENCYID = CURRENCYSET.BASECURRENCYID
from dbo.FINANCIALTRANSACTION R inner join dbo.PDACCOUNTSYSTEM on R.PDACCOUNTSYSTEMID = PDACCOUNTSYSTEM.ID
inner join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID
inner join dbo.REVENUE_EXT on R.ID = REVENUE_EXT.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM on R.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
where FINANCIALTRANSACTIONLINEITEM.ID = @REVENUESPLITID
-- Get currency settings
exec dbo.USP_CURRENCY_GETCURRENCYVALUES
@AMOUNT=null,
@DATE=@DATE,
@BASECURRENCYID=@BASECURRENCYID,
@BASEEXCHANGERATEID=null,
@TRANSACTIONCURRENCYID=null,
@BASEAMOUNT=null,
@ORGANIZATIONCURRENCYID=@ORGANIZATIONCURRENCYID output,
@ORGANIZATIONAMOUNT=null,
@ORGANIZATIONEXCHANGERATEID=null,
@LOOKUPORGANIZATIONEXCHANGERATE=0,
@BASETOORGANIZATIONEXCHANGERATEID=@BASETOORGANIZATIONEXCHANGERATEID output;
if @UPDATETYPE = 1 -- Update proportionally
begin
declare @NEWREVENUESPLITAMOUNT money;
select @NEWREVENUESPLITAMOUNT = BASEAMOUNT from dbo.FINANCIALTRANSACTIONLINEITEM where ID = @REVENUESPLITID;
update dbo.REVENUERECOGNITION set
AMOUNT = CALCULATION.AMOUNT,
ORGANIZATIONAMOUNT = case
when @BASECURRENCYID <> @ORGANIZATIONCURRENCYID
then dbo.UFN_CURRENCY_CONVERT(CALCULATION.AMOUNT, @BASETOORGANIZATIONEXCHANGERATEID)
else CALCULATION.AMOUNT
end,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
from dbo.REVENUERECOGNITION
inner join dbo.CURRENCY BASECURRENCY on BASECURRENCY.ID = @BASECURRENCYID
cross apply
(
select dbo.UFN_CURRENCY_ROUND((@NEWREVENUESPLITAMOUNT * (REVENUERECOGNITION.AMOUNT / @ORIGINALREVENUESPLITAMOUNT)), BASECURRENCY.DECIMALDIGITS, BASECURRENCY.ROUNDINGTYPECODE) AMOUNT
) as CALCULATION
where REVENUESPLITID = @REVENUESPLITID
end
else if @UPDATETYPE = 2 -- Update using defaults
begin
-- Delete old recognitions, if they exist
declare @CONTEXTCACHE varbinary(128);
set @CONTEXTCACHE = CONTEXT_INFO();
set context_info @changeagentid;
delete from dbo.REVENUERECOGNITION
where REVENUESPLITID = @REVENUESPLITID;
--Remove other recognition credits
delete dbo.RECOGNITIONCREDIT
from dbo.RECOGNITIONCREDIT
inner join dbo.DONORCHALLENGEENCUMBERED on RECOGNITIONCREDIT.DONORCHALLENGEENCUMBEREDID = DONORCHALLENGEENCUMBERED.ID
where RECOGNITIONCREDIT.RECOGNITIONCREDITTYPECODE = 1
and DONORCHALLENGEENCUMBERED.REVENUESPLITID = @REVENUESPLITID
and @UPDATETYPE <> 0;
--Remove credits on the donor challenge claim to match edit form
delete dbo.REVENUERECOGNITION
from dbo.REVENUERECOGNITION
inner join dbo.FINANCIALTRANSACTIONLINEITEM on REVENUERECOGNITION.REVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID
inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
inner join dbo.DONORCHALLENGEENCUMBERED on FINANCIALTRANSACTION.ID = DONORCHALLENGEENCUMBERED.MATCHEDREVENUEID
where DONORCHALLENGEENCUMBERED.REVENUESPLITID = @REVENUESPLITID
and FINANCIALTRANSACTION.CONSTITUENTID <> REVENUERECOGNITION.CONSTITUENTID
and REVENUESPLIT_EXT.DESIGNATIONID = DONORCHALLENGEENCUMBERED.DESIGNATIONID
and @UPDATETYPE <> 0;
if @CONTEXTCACHE is not null
set context_info @CONTEXTCACHE
declare @ORIGINALDONORID uniqueidentifier;
declare @ORIGINALDONATIONDATE datetime;
declare @ORIGINALGIFTID uniqueidentifier;
if @APPLICATIONTYPE = 7 -- Application MG claim
begin
declare @CREATEDSPLITS xml
set @CREATEDSPLITS =
(
select
FINANCIALTRANSACTIONLINEITEM.BASEAMOUNT as AMOUNT,
REVENUESPLIT_EXT.DESIGNATIONID,
FINANCIALTRANSACTIONLINEITEM.ID,
FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID,
REVENUESPLIT_EXT.APPLICATIONCODE,
REVENUESPLIT_EXT.TYPECODE,
FINANCIALTRANSACTION.TRANSACTIONCURRENCYID
from dbo.FINANCIALTRANSACTIONLINEITEM
inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
where FINANCIALTRANSACTIONLINEITEM.ID = @REVENUESPLITID
for xml raw('ITEM'),type,elements,root('SPLITS'),BINARY BASE64
)
set @CREATEDSPLITS = dbo.UFN_REVENUESPLIT_CONVERTAMOUNTSINXML(@CREATEDSPLITS, @BASECURRENCYID, @BASETOORGANIZATIONEXCHANGERATEID, @BASECURRENCYID, null)
exec dbo.USP_RECOGNITIONCREDITS_ADDBASEDONMGCPREFERENCES
@SPLITS = @CREATEDSPLITS,
@APPLICATIONID = @APPLICATIONID,
@CHANGEAGENTID = @CHANGEAGENTID,
@CURRENTDATE = @CHANGEDATE,
@REVENUEGIVENANONYMOUSLY = @REVENUEGIVENANONYMOUSLY;
end
else
begin
insert into dbo.REVENUERECOGNITION
(
REVENUESPLITID,
CONSTITUENTID,
AMOUNT,
EFFECTIVEDATE,
REVENUERECOGNITIONTYPECODEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED,
BASECURRENCYID,
ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID
)
select
FINANCIALTRANSACTIONLINEITEM.ID,
RECOGNITIONS.CONSTITUENTID,
RECOGNITIONS.AMOUNT,
@DATE,
RECOGNITIONS.REVENUERECOGNITIONTYPECODEID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE,
@BASECURRENCYID,
case
when @BASECURRENCYID <> @ORGANIZATIONCURRENCYID
then dbo.UFN_CURRENCY_CONVERT(RECOGNITIONS.AMOUNT, @BASETOORGANIZATIONEXCHANGERATEID)
else RECOGNITIONS.AMOUNT
end,
@BASETOORGANIZATIONEXCHANGERATEID ORGANIZATIONEXCHANGERATEID
from dbo.FINANCIALTRANSACTIONLINEITEM
cross apply dbo.UFN_REVENUEDETAIL_GETDEFAULTRECOGNITIONS(@REVENUEGIVENANONYMOUSLY, @CONSTITUENTID, FINANCIALTRANSACTIONLINEITEM.BASEAMOUNT, @DATE, null) as RECOGNITIONS
where
FINANCIALTRANSACTIONLINEITEM.ID = @REVENUESPLITID
end
end
return 0;
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1;
end catch
end