USP_DATAFORMTEMPLATE_EDIT_GRANTAWARD_4
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@DATE | datetime | IN | |
@AMOUNT | money | IN | |
@POSTSTATUSCODE | tinyint | IN | |
@POSTDATE | datetime | IN | |
@SPLITS | xml | IN | |
@FREQUENCYCODE | tinyint | IN | |
@NUMBEROFINSTALLMENTS | int | IN | |
@NEXTTRANSACTIONDATE | datetime | IN | |
@INSTALLMENTS | xml | IN | |
@DONOTACKNOWLEDGE | bit | IN | |
@CATEGORYCODEID | uniqueidentifier | IN | |
@ISREIMBURSABLE | bit | IN | |
@OPPORTUNITYID | uniqueidentifier | IN | |
@BASECURRENCYID | uniqueidentifier | IN | |
@TRANSACTIONCURRENCYID | uniqueidentifier | IN | |
@BASEEXCHANGERATEID | uniqueidentifier | IN | |
@EXCHANGERATE | decimal(20, 8) | IN | |
@HADSPOTRATE | bit | IN | |
@RATECHANGED | bit | IN | |
@ADJPAYMENT_DATE | datetime | IN | |
@ADJPAYMENT_POSTDATE | datetime | IN | |
@ADJPAYMENT_REASONCODEID | uniqueidentifier | IN | |
@ADJPAYMENT_DETAILS | nvarchar(255) | IN | |
@UPDATERECOGNITIONOPTION | tinyint | IN |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_GRANTAWARD_4 (
@ID uniqueidentifier
,@CHANGEAGENTID uniqueidentifier = null
,@DATE datetime
,@AMOUNT money
,@POSTSTATUSCODE tinyint
,@POSTDATE datetime
,@SPLITS xml
,@FREQUENCYCODE tinyint
,@NUMBEROFINSTALLMENTS int
,@NEXTTRANSACTIONDATE datetime
,@INSTALLMENTS xml
,@DONOTACKNOWLEDGE bit
,@CATEGORYCODEID uniqueidentifier
,@ISREIMBURSABLE bit
,@OPPORTUNITYID uniqueidentifier
,@BASECURRENCYID uniqueidentifier
,@TRANSACTIONCURRENCYID uniqueidentifier
,@BASEEXCHANGERATEID uniqueidentifier
,@EXCHANGERATE decimal(20, 8)
,@HADSPOTRATE bit
,@RATECHANGED bit
,@ADJPAYMENT_DATE datetime
,@ADJPAYMENT_POSTDATE datetime
,@ADJPAYMENT_REASONCODEID uniqueidentifier
,@ADJPAYMENT_DETAILS nvarchar(255)
,@UPDATERECOGNITIONOPTION tinyint
)
as
set nocount on;
-- Check GL business rule for this account system and set to 'Do not post' if needed.
-- ****
declare @PDACCOUNTSYSTEMID uniqueidentifier;
select @PDACCOUNTSYSTEMID = PDACCOUNTSYSTEMID
from dbo.PDACCOUNTSYSTEMFORREVENUE
where ID = @ID;
declare @ALLOWGLDISTRIBUTIONS bit;
set @ALLOWGLDISTRIBUTIONS = dbo.UFN_PDACCOUNTSYSTEM_ALLOWGLDISTRIBUTIONS(@PDACCOUNTSYSTEMID);
if @ALLOWGLDISTRIBUTIONS = 0
begin
set @POSTSTATUSCODE = 2 -- Do not post
set @POSTDATE = null
end
-- ****
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
begin try
declare @SUM money;
declare @COUNT int;
declare @contextCache varbinary(128);
-- Multicurrency - If the revenue previously used a spot rate, but
-- its rate has changed, store the old rate's ID, so we can remove it later.
declare @OLDSPOTRATE uniqueidentifier
if @HADSPOTRATE = 1
and @RATECHANGED = 1
begin
select @OLDSPOTRATE = BASEEXCHANGERATEID
from dbo.REVENUE
where ID = @ID
end
--If the record uses a new spot rate, create it and set the rate ID.
if @BASEEXCHANGERATEID = '00000000-0000-0000-0000-000000000001'
begin
set @BASEEXCHANGERATEID = newid()
insert into dbo.CURRENCYEXCHANGERATE (
ID
,FROMCURRENCYID
,TOCURRENCYID
,RATE
,ASOFDATE
,TYPECODE
,SOURCECODEID
,ADDEDBYID
,CHANGEDBYID
,DATEADDED
,DATECHANGED
)
values (
@BASEEXCHANGERATEID
,@TRANSACTIONCURRENCYID
,@BASECURRENCYID
,@EXCHANGERATE
,@DATE
,2
,null
,@CHANGEAGENTID
,@CHANGEAGENTID
,@CURRENTDATE
,@CURRENTDATE
);
end
exec dbo.USP_REVENUESPLIT_VALIDATESPLITS @SPLITS = @SPLITS
,@REVENUEAMOUNT = @AMOUNT
,@REVENUEID = @ID
,@TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID;
select @SUM = sum(AMOUNT)
,@COUNT = count(AMOUNT)
from dbo.UFN_INSTALLMENT_GETINSTALLMENTS_2_FROMITEMLISTXML(@INSTALLMENTS);
if @COUNT = 0
raiserror (
'INSTALLMENTCOUNT'
,13
,1
);
if @SUM <> @AMOUNT
raiserror (
'INSTALLMENTSUM'
,13
,1
);
/* You can only edit unposted grant awards here */
if exists (
select 1
from dbo.REVENUEPOSTED
where REVENUEPOSTED.ID = @ID
)
raiserror (
'You cannot edit a posted grant award.'
,13
,1
);
if dbo.UFN_INSTALLMENT_DATESOVERLAP(@INSTALLMENTS) = 1
raiserror (
'Installment dates are out of sequence.'
,13
,1
);
if exists (
select 1
from dbo.INSTALLMENT
inner join dbo.UFN_INSTALLMENT_GETINSTALLMENTS_2_FROMITEMLISTXML(@INSTALLMENTS) XMLINST on INSTALLMENT.ID = XMLINST.ID
where XMLINST.AMOUNT < XMLINST.APPLIED
)
raiserror (
'GRANTAWARDPAYMENT_INSTALLMENTAPPLIED'
,13
,1
);
if exists (
select 1
from dbo.INSTALLMENT
inner join dbo.UFN_INSTALLMENT_GETINSTALLMENTS_2_FROMITEMLISTXML(@INSTALLMENTS) XMLINST on INSTALLMENT.ID = XMLINST.ID
where XMLINST.Date < @DATE
)
raiserror (
'CK_INSTALLMENT_STARTDATEVALID2'
,13
,1
);
declare @DONOTPOST bit;
set @DONOTPOST = case @POSTSTATUSCODE
when 2
then 1
else 0
end;
declare @REACKNOWLEDGEFIELDCHANGED bit;
declare @CLEARGLDISTRIBUTION bit;
declare @CLEARWRITEOFFGLDISTRIBUTION bit;
set @REACKNOWLEDGEFIELDCHANGED = 0;
set @CLEARGLDISTRIBUTION = 0;
set @CLEARWRITEOFFGLDISTRIBUTION = 0;
-- check to see if designations have changed
if dbo.UFN_CHECKDETAIL_SPLITSCHANGED(@ID, @SPLITS) = 1
begin
set @CLEARGLDISTRIBUTION = 1;
set @CLEARWRITEOFFGLDISTRIBUTION = 1;
set @REACKNOWLEDGEFIELDCHANGED = 1;
end
declare @OLDCATEGORYCODEID uniqueidentifier
select top 1 @OLDCATEGORYCODEID = REVENUECATEGORY.GLREVENUECATEGORYMAPPINGID
from dbo.REVENUECATEGORY
inner join dbo.REVENUESPLIT on REVENUECATEGORY.ID = REVENUESPLIT.ID
where REVENUESPLIT.REVENUEID = @ID;
/* Check if revenue category changed */
if (
@CATEGORYCODEID is null
and @OLDCATEGORYCODEID is not null
)
or (
@CATEGORYCODEID is not null
and @OLDCATEGORYCODEID is null
)
or (@CATEGORYCODEID <> @OLDCATEGORYCODEID)
begin
set @CLEARGLDISTRIBUTION = 1;
set @CLEARWRITEOFFGLDISTRIBUTION = 1;
end
--Multicurrency - Retrieve and calculate the necessary multicurrency values.
declare @BASEAMOUNT money;
declare @ORGANIZATIONCURRENCYID uniqueidentifier;
declare @ORGANIZATIONAMOUNT money;
declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
exec dbo.USP_CURRENCY_GETCURRENCYVALUES @AMOUNT
,@DATE
,@BASECURRENCYID
,@BASEEXCHANGERATEID
,@TRANSACTIONCURRENCYID output
,@BASEAMOUNT output
,@ORGANIZATIONCURRENCYID output
,@ORGANIZATIONAMOUNT output
,@ORGANIZATIONEXCHANGERATEID output
,1;
-- check to see if amounts, postdate, post status, or exchange rates has changed
if @CLEARGLDISTRIBUTION = 0
if not exists (
select 1
from dbo.REVENUE
where REVENUE.ID = @ID
and TRANSACTIONAMOUNT = @AMOUNT
and POSTDATE = @POSTDATE
and (
(
@POSTSTATUSCODE = 2
and DONOTPOST = 1
)
or (
@POSTSTATUSCODE = 1
and DONOTPOST = 0
)
)
and AMOUNT = @BASEAMOUNT
and ORGANIZATIONAMOUNT = @ORGANIZATIONAMOUNT
and ((BASEEXCHANGERATEID = @BASEEXCHANGERATEID) or (BASEEXCHANGERATEID is null and @BASEEXCHANGERATEID is null))
and ((ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID) or (ORGANIZATIONEXCHANGERATEID is null and @ORGANIZATIONEXCHANGERATEID is null))
and TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID
and BASECURRENCYID = @BASECURRENCYID
)
begin
set @CLEARGLDISTRIBUTION = 1;
end
-- check to see if the revenue record needs to be re-acknowledged
if (
coalesce((
select top 1 REACKNOWLEDGEREVENUE
from dbo.ACKNOWLEDGEMENTPREFERENCE
), 0)
) = 1
begin
-- check to see if amount have changed
if @REACKNOWLEDGEFIELDCHANGED = 0
if not exists (
select 1
from dbo.REVENUE
where REVENUE.ID = @ID
and TRANSACTIONAMOUNT = @AMOUNT
)
set @REACKNOWLEDGEFIELDCHANGED = 1;
-- if a field has changed, mark the revenue letters for this record out of date, if necessary
if @REACKNOWLEDGEFIELDCHANGED = 1
exec dbo.USP_REVENUELETTER_SETREACKNOWLEDGEMENTS @ID
,@CHANGEAGENTID;
end
update dbo.REVENUE
set [DATE] = @DATE
,DONOTPOST = @DONOTPOST
,POSTDATE = @POSTDATE
,AMOUNT = @BASEAMOUNT
,DONOTACKNOWLEDGE = @DONOTACKNOWLEDGE
,CHANGEDBYID = @CHANGEAGENTID
,DATECHANGED = @CURRENTDATE
,ISREIMBURSABLE = @ISREIMBURSABLE
,BASECURRENCYID = @BASECURRENCYID
,ORGANIZATIONAMOUNT = @ORGANIZATIONAMOUNT
,TRANSACTIONAMOUNT = @AMOUNT
,BASEEXCHANGERATEID = @BASEEXCHANGERATEID
,ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID
where ID = @ID;
update dbo.REVENUESCHEDULE
set FREQUENCYCODE = @FREQUENCYCODE
,NUMBEROFINSTALLMENTS = @COUNT
,NEXTTRANSACTIONDATE = @NEXTTRANSACTIONDATE
,CHANGEDBYID = @CHANGEAGENTID
,DATECHANGED = @CURRENTDATE
from dbo.REVENUESCHEDULE
where REVENUESCHEDULE.ID = @ID;
-- Cache the old split and recognition values for recognition updates
declare @OLDSPLITS xml = dbo.UFN_REVENUE_GETSPLITS_2_TOITEMLISTXML(@ID);
declare @OLDRECOGNITIONS xml = dbo.UFN_REVENUE_GETRECOGNITIONS_FORREVENUE_TOITEMLISTXML(@ID);
declare @SPLITSCHANGED bit
set @SPLITSCHANGED = dbo.UFN_CHECKDETAIL_SPLITSCHANGED(@ID, @SPLITS)
-- Multicurrency - Process the splits xml to calculate the base and organization amounts and place them in proper nodes.
set @SPLITS = dbo.UFN_REVENUESPLIT_CONVERTAMOUNTSINXML(@SPLITS, @BASECURRENCYID, @ORGANIZATIONEXCHANGERATEID, @TRANSACTIONCURRENCYID, @BASEEXCHANGERATEID);
exec dbo.USP_REVENUE_GETSPLITS_2_CUSTOMUPDATEFROMXML @ID
,@SPLITS
,@CHANGEAGENTID
,@CURRENTDATE;
exec dbo.USP_REVENUECATEGORY_UPDATESPLITS @ID
,@CATEGORYCODEID
,@CHANGEAGENTID
,@CURRENTDATE;
-- Update recognition credits based on user selected option
exec dbo.USP_REVENUE_UPDATERECOGNITION @ID
,@OLDSPLITS
,@UPDATERECOGNITIONOPTION
,@CHANGEAGENTID
,@CURRENTDATE
,@OLDRECOGNITIONS;
if (@OPPORTUNITYID is not null)
and (@OPPORTUNITYID <> '00000000-0000-0000-0000-000000000000')
begin
--Pull in default solicitors before changing the opportunity record.
exec dbo.USP_REVENUE_PULLSOLICITORSFROMOPPORTUNITY @ID
,@OPPORTUNITYID
,@CHANGEAGENTID
,@CURRENTDATE
update dbo.REVENUEOPPORTUNITY
set OPPORTUNITYID = @OPPORTUNITYID
,CHANGEDBYID = @CHANGEAGENTID
,DATECHANGED = @CURRENTDATE
where ID in (
select ID
from dbo.REVENUESPLIT
where REVENUEID = @ID
)
insert into dbo.REVENUEOPPORTUNITY (
ID
,OPPORTUNITYID
,ADDEDBYID
,CHANGEDBYID
,DATEADDED
,DATECHANGED
)
select ID
,@OPPORTUNITYID
,@CHANGEAGENTID
,@CHANGEAGENTID
,@CURRENTDATE
,@CURRENTDATE
from (
select REVENUESPLIT.ID [ID]
from dbo.REVENUESPLIT
left join dbo.REVENUEOPPORTUNITY on REVENUEOPPORTUNITY.ID = REVENUESPLIT.ID
where REVENUEID = @ID
and REVENUEOPPORTUNITY.ID is null
) [NEWSPLITS];
exec dbo.USP_OPPORTUNITY_UPDATEACCEPTEDSTATUS @OPPORTUNITYID
,@DATE
,@CHANGEAGENTID
,@CURRENTDATE
end
else
begin
exec dbo.USP_REVENUE_PULLSOLICITORSFROMFUNDINGREQUEST_ONLYNEWSPLITS @SPLITS
,@ID
,@CHANGEAGENTID
,@CURRENTDATE;
end
--MMR not sure we still need this?
--exec dbo.USP_PLEDGE_FIXDEPENDENTSPLITS @ID
-- ,@CHANGEAGENTID
-- ,@CURRENTDATE;
exec dbo.USP_REVENUE_UPDATESOLICITORS @ID
,@CHANGEAGENTID
,@CURRENTDATE;
-- Multicurrency - Pass in multicurrency information so we can convert the amount in the xml
-- once installment splits are pulled out of their installments.
exec dbo.USP_PLEDGE_UPDATEINSTALLMENT3 @ID
,@INSTALLMENTS
,@CHANGEAGENTID
,@CURRENTDATE
,@ADJPAYMENT_DATE
,@ADJPAYMENT_POSTDATE
,@ADJPAYMENT_REASONCODEID
,@ADJPAYMENT_DETAILS
,@BASECURRENCYID
,@ORGANIZATIONEXCHANGERATEID
,@TRANSACTIONCURRENCYID
,@BASEEXCHANGERATEID;
/* USP_PLEDGE_UPDATEINSTALLMENT3 has to update the writeoffs, so USP_REVENUE_UPDATEWRITEOFFS should not be called
exec dbo.USP_REVENUE_UPDATEWRITEOFFS @ID
,@CHANGEAGENTID
,@CURRENTDATE
,null
,null
,null
,null
,@CLEARWRITEOFFGLDISTRIBUTION
*/
-- clear the user-defined gl distributions
if @CLEARGLDISTRIBUTION = 1
begin
-- Clear GL
delete
from dbo.REVENUEGLDISTRIBUTION
where REVENUEID = @ID
and OUTDATED = 0;
-- Add new GL distributions
if @POSTSTATUSCODE <> 2
exec dbo.USP_SAVE_REVENUEGLDISTRIBUTION @ID
,@CHANGEAGENTID
,@CURRENTDATE;
end
exec dbo.USP_PLEDGE_VALIDATE @ID;
if @SPLITSCHANGED = 1
exec dbo.USP_PLEDGE_CLEARANDADDCAMPAIGNS @ID
,null
,@CHANGEAGENTID
,@CURRENTDATE;
-- Multicurrency - If we stored an old spot rate earlier, now is the time to remove it.
if @OLDSPOTRATE is not null
begin
delete CURRENCYEXCHANGERATE
where ID = @OLDSPOTRATE;
end
end try
begin catch
--reset CONTEXT_INFO to previous value
if not @contextCache is null
set CONTEXT_INFO @contextCache;
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
--reset CONTEXT_INFO to previous value
if not @contextCache is null
set CONTEXT_INFO @contextCache;
return 0;