USP_DATAFORMTEMPLATE_EDIT_MGPLEDGE_5
The save procedure used by the edit dataform template "Matching Gift Claim Edit Form 3".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | The input ID parameter indicating the ID of the record being edited. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the procedure. |
@ORIGINALGIFTID | uniqueidentifier | IN | Original Gift |
@MATCHINGORGANIZATIONID | uniqueidentifier | IN | Matching organization |
@DATE | datetime | IN | Date |
@AMOUNT | money | IN | Amount |
@SPLITS | xml | IN | Designations |
@MATCHINGGIFTCONDITIONID | uniqueidentifier | IN | Matching gift condition type |
@RELATIONSHIPID | uniqueidentifier | IN | Relationship |
@BASECURRENCYID | uniqueidentifier | IN | Base currency |
@TRANSACTIONCURRENCYID | uniqueidentifier | IN | Transaction currency |
@BASEEXCHANGERATEID | uniqueidentifier | IN | Exchange rate ID |
@EXCHANGERATE | decimal(20, 8) | IN | Exchange rate |
@HADSPOTRATE | bit | IN | Had spot rate |
@RATECHANGED | bit | IN | Rate changed |
@UPDATERECOGNITIONOPTION | tinyint | IN | Recognition update option |
@CURRENTAPPUSERID | uniqueidentifier | IN | Input parameter indicating the ID of the current user. |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_MGPLEDGE_5
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@ORIGINALGIFTID uniqueidentifier,
@MATCHINGORGANIZATIONID uniqueidentifier,
@DATE datetime,
@AMOUNT money,
@SPLITS xml,
@MATCHINGGIFTCONDITIONID uniqueidentifier,
@RELATIONSHIPID uniqueidentifier,
@BASECURRENCYID uniqueidentifier,
@TRANSACTIONCURRENCYID uniqueidentifier,
@BASEEXCHANGERATEID uniqueidentifier,
@EXCHANGERATE decimal(20,8),
@HADSPOTRATE bit,
@RATECHANGED bit,
@UPDATERECOGNITIONOPTION tinyint,
@CURRENTAPPUSERID uniqueidentifier = null
)
as
set nocount on;
declare @CHANGEDATE datetime;
set @CHANGEDATE = getdate();
declare @OLDDATE datetime;
declare @COUNT int;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
begin try
--Multicurrency - AdamBu 5/10/10 - 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()
--Replace with call to USP_CURRENCYEXCHANGERATE_ENSURESPOTRATEEXISTS for PBI 102747 in the future
/*if not dbo.UFN_SECURITY_APPUSER_GRANTED_SYSTEMPRIVILEGE_IN_SYSTEMROLE(@CURRENTAPPUSERID,'911f104d-ba5f-4469-b0ae-184c879aea99') = 1
and not dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1
begin
raiserror('User does not have the right to add a new spot rate.', 13, 1);
return 1;
end*/
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,
@CHANGEDATE,
@CHANGEDATE
);
end
exec dbo.USP_REVENUESPLIT_VALIDATESPLITS @SPLITS=@SPLITS, @REVENUEAMOUNT=@AMOUNT, @REVENUEID=@ID, @TRANSACTIONCURRENCYID=@TRANSACTIONCURRENCYID;
select
@COUNT = count(REVENUE.ID)
from dbo.REVENUE
inner join dbo.REVENUEMATCHINGGIFT RMG on REVENUE.ID = RMG.ID
where
REVENUE.CONSTITUENTID = @MATCHINGORGANIZATIONID and
RMG.MGSOURCEREVENUEID = @ORIGINALGIFTID;
--Bug 98537 - AdamBu 5/25/10 - We are not longer enforcing one claim per org per gift.
--if (@COUNT - 1) > 0 --Use (@COUNT - 1) because the gift being edited will be counted in this.
-- raiserror('An organization cannot match a single gift more than once.', 13, 1);
select
@OLDDATE = DATE
from dbo.REVENUE
where ID = @ID;
-- make sure we aren't trying to modify revenue in a locked/closed deposit/bank
exec dbo.USP_EDIT_REVENUE_VALIDATE_DEPOSIT_STATUS @ID;
--Multicurrency - AdamBu 5/7/10 - 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 output, @TRANSACTIONCURRENCYID output, @BASEAMOUNT output, @ORGANIZATIONCURRENCYID output, @ORGANIZATIONAMOUNT output, @ORGANIZATIONEXCHANGERATEID output, 1;
update dbo.REVENUE
set
DATE = @DATE,
AMOUNT = @BASEAMOUNT,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE,
BASECURRENCYID = @BASECURRENCYID,
ORGANIZATIONAMOUNT = @ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID,
TRANSACTIONAMOUNT = @AMOUNT,
TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
-- Matching gift claims shouldn't have receipt amounts. However, converted data may have it set so it needs to be set to 0 to prevent AMOUNT
-- from being less than RECEIPTAMOUNT (which would result in a constraint violation).
RECEIPTAMOUNT = 0
where ID = @ID;
update dbo.REVENUEMATCHINGGIFT
set MATCHINGGIFTCONDITIONID = @MATCHINGGIFTCONDITIONID,
RELATIONSHIPID = @RELATIONSHIPID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
where ID = @ID;
if @DATE <> @OLDDATE
update dbo.REVENUESCHEDULE
set STARTDATE = @DATE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
where ID = @ID;
update dbo.INSTALLMENT
set AMOUNT = @BASEAMOUNT,
DATE = @DATE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE,
BASECURRENCYID = @BASECURRENCYID,
ORGANIZATIONAMOUNT = @ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID,
TRANSACTIONAMOUNT = @AMOUNT,
TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID = @BASEEXCHANGERATEID
where REVENUEID = @ID;
declare @SPLITSCHANGED bit
set @SPLITSCHANGED = dbo.UFN_CHECKDETAIL_SPLITSCHANGED(@ID, @SPLITS)
-- Cache current values for recognition updates.
declare @OLDSPLITS xml = dbo.UFN_REVENUE_GETSPLITS_2_TOITEMLISTXML(@ID);
declare @OLDRECOGNITIONS xml = dbo.UFN_REVENUE_GETRECOGNITIONS_FORREVENUE_TOITEMLISTXML(@ID);
set @SPLITS = dbo.UFN_REVENUESPLIT_CONVERTAMOUNTSINXML(@SPLITS,@BASECURRENCYID,@ORGANIZATIONEXCHANGERATEID,@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID)
if(
exists(
select
1
from
dbo.INSTALLMENTSPLITPAYMENT
inner join dbo.REVENUESPLIT on REVENUESPLIT.ID = INSTALLMENTSPLITPAYMENT.PAYMENTID
where
INSTALLMENTSPLITPAYMENT.PLEDGEID = @ID
and REVENUESPLIT.APPLICATIONCODE = 7
and REVENUESPLIT.DESIGNATIONID
not in(
select
REVENUESTREAMS.DESIGNATIONID
from
dbo.UFN_REVENUE_GETSPLITS_2_FROMITEMLISTXML(@SPLITS) REVENUESTREAMS
)
)
)
begin
raiserror('BBERR_PAYMENTAPPLIED_APPLIEDDESIGNATIONMG', 13, 1);
end
exec dbo.USP_REVENUE_GETSPLITS_2_UPDATEFROMXML @ID, @SPLITS, @CHANGEAGENTID, @CHANGEDATE;
-- Update revenue recognition based on user selection.
if @UPDATERECOGNITIONOPTION != 0
exec dbo.USP_REVENUE_UPDATERECOGNITION @ID, @OLDSPLITS, @UPDATERECOGNITIONOPTION, @CHANGEAGENTID, @CHANGEDATE, @OLDRECOGNITIONS, null, null, 3;
exec dbo.USP_REVENUE_UPDATESOLICITORS @ID, @CHANGEAGENTID, @CHANGEDATE;
if @SPLITSCHANGED = 1
begin
--assume one installment
declare @INSTALLMENTSPLITS xml;
set @INSTALLMENTSPLITS = (
select distinct
INSTALLMENTSPLIT.ID,
INSTALLMENT.ID
INSTALLMENTID,
REVENUESPLIT.DESIGNATIONID,
REVENUESPLIT.AMOUNT,
REVENUESPLIT.BASECURRENCYID,
REVENUESPLIT.ORGANIZATIONAMOUNT,
REVENUESPLIT.ORGANIZATIONEXCHANGERATEID,
REVENUESPLIT.TRANSACTIONAMOUNT,
REVENUESPLIT.TRANSACTIONCURRENCYID,
REVENUESPLIT.BASEEXCHANGERATEID,
REVENUESPLIT.ID as REVENUESPLITID
from REVENUESPLIT
inner join INSTALLMENT on INSTALLMENT.REVENUEID = REVENUESPLIT.REVENUEID
left outer join INSTALLMENTSPLIT
on REVENUESPLIT.ID = INSTALLMENTSPLIT.REVENUESPLITID and REVENUESPLIT.DESIGNATIONID = INSTALLMENTSPLIT.DESIGNATIONID
where REVENUESPLIT.REVENUEID = @ID
for xml raw('ITEM'),type,elements,root('INSTALLMENTSPLITS'),BINARY BASE64
);
exec dbo.USP_PLEDGE_GETINSTALLMENTSPLITS_2_UPDATEFROMXML @ID, @INSTALLMENTSPLITS, @CHANGEAGENTID, @CHANGEDATE;
exec dbo.USP_REVENUE_CLEARANDADDCAMPAIGNS @REVENUEID = @ID,
@CHANGEAGENTID = @CHANGEAGENTID,
@CHANGEDATE = @CHANGEDATE
end
exec dbo.USP_PLEDGE_VALIDATE_2 @ID, 0;
--Multicurrency - AdamBu 5/10/10 - 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
--Opportunity - Josh.Jones 9/3/15 - Link new splits to opportunity associated with claim
declare @OPPORTUNITYID uniqueidentifier;
select
@OPPORTUNITYID = REVENUEOPPORTUNITY.OPPORTUNITYID
from
dbo.REVENUEOPPORTUNITY
inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = REVENUEOPPORTUNITY.ID
where
FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID;
if @OPPORTUNITYID is not null
begin
exec dbo.USP_REVENUE_PULLSOLICITORSFROMOPPORTUNITY @ID, @OPPORTUNITYID, @CHANGEAGENTID, @CHANGEDATE;
insert into dbo.REVENUEOPPORTUNITY (
ID,
OPPORTUNITYID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
FINANCIALTRANSACTIONLINEITEM.ID,
@OPPORTUNITYID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE
from
dbo.FINANCIALTRANSACTIONLINEITEM
where
FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
and not exists (
select top 1 REVENUEOPPORTUNITY.ID
from REVENUEOPPORTUNITY
where REVENUEOPPORTUNITY.ID = FINANCIALTRANSACTIONLINEITEM.ID
)
and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
and FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1;
end
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;