USP_DATAFORMTEMPLATE_ADD_GRANTAWARDFROMOPPORTUNITY
The save procedure used by the add dataform template "Grant Award From Opportunity Add Form".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | The output parameter indicating the ID of the record added. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the procedure. |
@OPPORTUNITYID | uniqueidentifier | IN | Input parameter indicating the context ID for the record being added. |
@DATE | datetime | IN | Date |
@AMOUNT | money | IN | Amount |
@POSTDATE | datetime | IN | Post date |
@POSTSTATUSCODE | tinyint | IN | Post status |
@FREQUENCYCODE | tinyint | IN | Frequency |
@NUMBEROFINSTALLMENTS | int | IN | No. installments |
@STARTDATE | datetime | IN | Starting on |
@SPLITS | xml | IN | Designations |
@INSTALLMENTS | xml | IN | |
@DONOTACKNOWLEDGE | bit | IN | Do not acknowledge |
@CATEGORYCODEID | uniqueidentifier | IN | Revenue category |
@ISREIMBURSABLE | bit | IN | Grant award is reimbursable |
@PDACCOUNTSYSTEMID | uniqueidentifier | IN | Account system |
@TRANSACTIONCURRENCYID | uniqueidentifier | IN | Transaction currency |
@BASEEXCHANGERATEID | uniqueidentifier | IN | Exchange rate ID |
@EXCHANGERATE | decimal(20, 8) | IN | Exchange rate |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_GRANTAWARDFROMOPPORTUNITY
(
@ID uniqueidentifier = null output,
@CHANGEAGENTID uniqueidentifier = null,
@OPPORTUNITYID uniqueidentifier,
@DATE datetime,
@AMOUNT money,
@POSTDATE datetime = null,
@POSTSTATUSCODE tinyint = 1,
@FREQUENCYCODE tinyint = 5,
@NUMBEROFINSTALLMENTS int = 1,
@STARTDATE datetime = null,
@SPLITS xml,
@INSTALLMENTS xml = null,
@DONOTACKNOWLEDGE bit = 0,
@CATEGORYCODEID uniqueidentifier = null,
@ISREIMBURSABLE bit = 0,
@PDACCOUNTSYSTEMID uniqueidentifier = null,
@TRANSACTIONCURRENCYID uniqueidentifier = null,
@BASEEXCHANGERATEID uniqueidentifier = null,
@EXCHANGERATE decimal(20,8) = null
)
as
set nocount on;
if @ID is null
set @ID = newid();
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
if @PDACCOUNTSYSTEMID is null
set @PDACCOUNTSYSTEMID = '4B121C2C-CCE6-440D-894C-EA0DEF80D50B'
--Multicurrency - Retrieve base currency from the account system's currency set.
declare @CURRENCYSETID uniqueidentifier
select
@CURRENCYSETID = CURRENCYSETID
from
dbo.PDACCOUNTSYSTEM
where
ID = @PDACCOUNTSYSTEMID
declare @BASECURRENCYID uniqueidentifier;
select
@BASECURRENCYID = BASECURRENCYID
from
dbo.CURRENCYSET
where
ID = coalesce(@CURRENCYSETID,dbo.UFN_CURRENCYSET_GETAPPUSERDEFAULTCURRENCYSET())
--Multicurrency - Add a spot exchange rate if an existing rate hasn't
--been selected, the base and transaction currencies are different, and the rate
--entered isn't zero (which indicates that the user wants to enter the record without a rate).
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
begin try
-- Check GL business rule for this account system and set to 'Do not post' if needed.
if dbo.UFN_PDACCOUNTSYSTEM_ALLOWGLDISTRIBUTIONS(@PDACCOUNTSYSTEMID) = 0
begin
set @POSTSTATUSCODE = 2 -- Do not post
set @POSTDATE = null
end
--Validate splits
exec dbo.USP_REVENUESPLIT_VALIDATESPLITS @SPLITS, @AMOUNT, 6, default, @TRANSACTIONCURRENCYID;
-- Multicurrency - Ensure that the installment's transaction currency is the same as its revenue.
if exists(
select 1
from dbo.UFN_INSTALLMENT_GETINSTALLMENTS_2_FROMITEMLISTXML(@INSTALLMENTS)
where TRANSACTIONCURRENCYID <> @TRANSACTIONCURRENCYID
)
begin
raiserror('An installment''s transaction currency must match that of its revenue.',13,1);
end
--Validate installments
declare @SUM money;
declare @COUNT int;
select
@SUM = sum(AMOUNT),
@COUNT = count(AMOUNT)
from
dbo.UFN_INSTALLMENT_GETINSTALLMENTS_2_FROMITEMLISTXML(@INSTALLMENTS);
if @COUNT = 0
raiserror('ATLEASTONEINSTALLMENT',13,1);
if @SUM <> @AMOUNT
raiserror('INSTALLMENTTOTALAMOUNTVALID',13,1);
if dbo.UFN_INSTALLMENT_DATESOVERLAP(@INSTALLMENTS) = 1
raiserror('INSTALLMENTDATESOVERLAP',13,1);
declare @DONOTPOST bit;
set @DONOTPOST = case @POSTSTATUSCODE when 2 then 1 else 0 end;
declare @CONSTITUENTID uniqueidentifier;
select
@CONSTITUENTID = PROSPECTPLAN.PROSPECTID
from
dbo.OPPORTUNITY
inner join dbo.PROSPECTPLAN on OPPORTUNITY.PROSPECTPLANID = PROSPECTPLAN.ID
where OPPORTUNITY.ID = @OPPORTUNITYID;
--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;
--Add the grant award record
insert into dbo.REVENUE (ID,CONSTITUENTID,DATE,DONOTPOST,POSTDATE,DONOTRECEIPT,AMOUNT,TRANSACTIONTYPECODE,RECEIPTAMOUNT, DONOTACKNOWLEDGE,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED,ISREIMBURSABLE,BASECURRENCYID,ORGANIZATIONAMOUNT,ORGANIZATIONEXCHANGERATEID,TRANSACTIONAMOUNT,TRANSACTIONCURRENCYID,BASEEXCHANGERATEID)
values (@ID,@CONSTITUENTID,@DATE,@DONOTPOST,@POSTDATE,1,@BASEAMOUNT,6,0,@DONOTACKNOWLEDGE,@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE,@ISREIMBURSABLE,@BASECURRENCYID,@ORGANIZATIONAMOUNT,@ORGANIZATIONEXCHANGERATEID,@AMOUNT,@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID);
--Add origination source
exec dbo.USP_REVENUE_ADDORIGIN @ID, @CONSTITUENTID, @CHANGEAGENTID, @CURRENTDATE;
--Add the payment method record
insert into dbo.REVENUEPAYMENTMETHOD (ID,REVENUEID,PAYMENTMETHODCODE,AMOUNT,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
values (newid(),@ID,9,@AMOUNT,@CHANGEAGENTID, @CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE);
--Add the revenue schedule record
insert into dbo.REVENUESCHEDULE (ID,STARTDATE,FREQUENCYCODE,NUMBEROFINSTALLMENTS,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
values (@ID,@STARTDATE,@FREQUENCYCODE,@NUMBEROFINSTALLMENTS,@CHANGEAGENTID,@CHANGEAGENTID,@CURRENTDATE,@CURRENTDATE);
--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_ADDFROMXML @ID, @SPLITS, @CHANGEAGENTID, @CURRENTDATE;
--Multicurrency - AdamBu 3/30/10 - Process the installments xml to calculate the base and organization amounts and place them in proper nodes.
set @INSTALLMENTS = dbo.UFN_INSTALLMENT_CONVERTAMOUNTSINXML(@INSTALLMENTS,@BASECURRENCYID,@ORGANIZATIONEXCHANGERATEID,@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID)
exec dbo.USP_INSTALLMENT_GETINSTALLMENTS_2_ADDFROMXML @ID, @INSTALLMENTS, @CHANGEAGENTID, @CURRENTDATE;
exec dbo.USP_REVENUECATEGORY_UPDATESPLITS @REVENUEID = @ID,@CATEGORYCODEID = @CATEGORYCODEID,@CHANGEAGENTID = @CHANGEAGENTID,@CURRENTDATE = @CURRENTDATE;
--Pull in default solicitors before adding the opportunity record
exec dbo.USP_REVENUE_PULLSOLICITORSFROMOPPORTUNITY @ID, @OPPORTUNITYID, @CHANGEAGENTID, @CURRENTDATE
--Add the revenue opportunity record
insert into dbo.REVENUEOPPORTUNITY
(
ID,
OPPORTUNITYID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
ID,
@OPPORTUNITYID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
dbo.REVENUESPLIT
where
REVENUEID = @ID
exec dbo.USP_OPPORTUNITY_UPDATEACCEPTEDSTATUS @OPPORTUNITYID, @DATE, @CHANGEAGENTID, @CURRENTDATE
exec dbo.USP_REVENUE_CREATERECOGNITIONS @ID, @CHANGEAGENTID, @CURRENTDATE;
exec dbo.USP_PLEDGE_GENERATEINSTALLMENTSPLITS @ID, @CHANGEAGENTID, @CURRENTDATE;
exec dbo.USP_PLEDGE_CLEARANDADDCAMPAIGNS @ID,null,@CHANGEAGENTID,@CURRENTDATE;
if dbo.UFN_PLEDGE_INSTALLMENTSPLITSBALANCE(@ID) = 0
raiserror('INSTALLMENTSPLITSBALANCE', 13, 1);
-- Link revenue to Account System
exec dbo.USP_PDACCOUNTSYSTEM_LINKTOREVENUE @ID, @PDACCOUNTSYSTEMID, @CURRENTDATE, @CHANGEAGENTID
--Save the GL distributions
if @POSTSTATUSCODE <> 2
exec dbo.USP_SAVE_REVENUEGLDISTRIBUTION @ID, @CHANGEAGENTID, @CURRENTDATE;
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;