USP_DATAFORMTEMPLATE_EDIT_PLANNEDGIFTREVENUE_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 | |
@SOURCECODE | nvarchar(50) | IN | |
@APPEALID | uniqueidentifier | IN | |
@BENEFITS | xml | IN | |
@BENEFITSWAIVED | bit | IN | |
@GIVENANONYMOUSLY | bit | IN | |
@MAILINGID | uniqueidentifier | IN | |
@CHANNELCODEID | uniqueidentifier | IN | |
@DONOTACKNOWLEDGE | bit | IN | |
@PLEDGESUBTYPEID | uniqueidentifier | IN | |
@OPPORTUNITYID | uniqueidentifier | IN | |
@REFERENCE | nvarchar(255) | IN | |
@CATEGORYCODEID | uniqueidentifier | IN | |
@PERCENTAGEBENEFITS | xml | IN | |
@BASECURRENCYID | uniqueidentifier | IN | |
@TRANSACTIONCURRENCYID | uniqueidentifier | IN | |
@BASEEXCHANGERATEID | uniqueidentifier | IN | |
@EXCHANGERATE | decimal(20, 8) | IN | |
@HADSPOTRATE | bit | IN | |
@RATECHANGED | bit | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@DONOTRECEIPT | bit | IN | |
@RECEIPTAMOUNT | money | IN | |
@UPDATESOLICITORS | bit | IN |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_PLANNEDGIFTREVENUE_4
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@DATE datetime,
@AMOUNT money,
@POSTSTATUSCODE tinyint,
@POSTDATE datetime,
@SPLITS xml,
@SOURCECODE nvarchar(50),
@APPEALID uniqueidentifier,
@BENEFITS xml,
@BENEFITSWAIVED bit,
@GIVENANONYMOUSLY bit,
@MAILINGID uniqueidentifier,
@CHANNELCODEID uniqueidentifier,
@DONOTACKNOWLEDGE bit,
@PLEDGESUBTYPEID uniqueidentifier,
@OPPORTUNITYID uniqueidentifier,
@REFERENCE nvarchar(255),
@CATEGORYCODEID uniqueidentifier,
@PERCENTAGEBENEFITS xml,
@BASECURRENCYID uniqueidentifier,
@TRANSACTIONCURRENCYID uniqueidentifier,
@BASEEXCHANGERATEID uniqueidentifier,
@EXCHANGERATE decimal(20,8),
@HADSPOTRATE bit,
@RATECHANGED bit,
@CURRENTAPPUSERID uniqueidentifier = null,
@DONOTRECEIPT bit,
@RECEIPTAMOUNT money,
@UPDATESOLICITORS bit
)
as
begin
set nocount on;
declare @CURRENTDATE datetime;
declare @contextCache varbinary(128);
--cache current context information
set @contextCache = CONTEXT_INFO();
--set CONTEXT_INFO to @CHANGEAGENTID
set CONTEXT_INFO @CHANGEAGENTID;
begin try
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
set @CURRENTDATE = GetDate();
--Business units - Calculate and store business unit ratios for all new splits given
--the old splits.
declare @BUSINESSUNITSRATIO table (
DESIGNATIONID uniqueidentifier
,OVERRIDEBUSINESSUNITS bit
,REASON uniqueidentifier
,BUSINESSUNITCODEID uniqueidentifier
,RATIO float
)
insert into @BUSINESSUNITSRATIO
select REVENUESPLIT_EXT.DESIGNATIONID
,REVENUESPLIT_EXT.OVERRIDEBUSINESSUNITS
,REVENUESPLIT_EXT.REVENUESPLITBUSINESSUNITOVERRIDECODEID as REASON
,REVENUESPLITBUSINESSUNIT.BUSINESSUNITCODEID
,isnull(REVENUESPLITBUSINESSUNIT.AMOUNT / nullif(FINANCIALTRANSACTIONLINEITEM.BASEAMOUNT, 0), 0) as RATIO
from dbo.FINANCIALTRANSACTIONLINEITEM
inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
inner join dbo.REVENUESPLITBUSINESSUNIT on REVENUESPLITBUSINESSUNIT.REVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID
where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
set @RECEIPTAMOUNT = coalesce(@RECEIPTAMOUNT, @AMOUNT); --For backwards compatibility with old behavior
declare @PLANNEDGIFTID uniqueidentifier;
declare @PLANNEDGIFTADDITIONID uniqueidentifier;
declare @OLDAMOUNT money;
declare @OLDDATE datetime;
declare @SPLITSCHANGED bit;
declare @DESIGNATIONSCHANGED bit;
declare @OLDTRANSACTIONAMOUNT money;
declare @OLDDONOTRECEIPT bit;
declare @OLDRECEIPTAMOUNT money;
select @PLANNEDGIFTID = PLANNEDGIFTID, @PLANNEDGIFTADDITIONID = PLANNEDGIFTADDITIONID
from dbo.V_PLANNEDGIFTREVENUE_WITHADDITIONS
where REVENUEID = @ID
select
@OLDAMOUNT = AMOUNT,
@OLDDATE = DATE,
@OLDTRANSACTIONAMOUNT = TRANSACTIONAMOUNT,
@OLDDONOTRECEIPT = DONOTRECEIPT,
@OLDRECEIPTAMOUNT = RECEIPTAMOUNT
from dbo.REVENUE where ID = @ID
set @SPLITSCHANGED = dbo.UFN_CHECKDETAIL_SPLITSCHANGED(@ID, @SPLITS);
set @DESIGNATIONSCHANGED = dbo.UFN_CHECKDETAIL_DESIGNATIONSCHANGED(@ID, @SPLITS);
--Multicurrency - AdamBu 5/21/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,
@CURRENTDATE,
@CURRENTDATE
);
end
exec dbo.USP_REVENUESPLIT_VALIDATESPLITS @SPLITS, @AMOUNT, 1, @TRANSACTIONCURRENCYID=@TRANSACTIONCURRENCYID;
declare @PLANNEDGIFTPAYOUTSPLITS xml;
set @PLANNEDGIFTPAYOUTSPLITS = (
select
AMOUNT, DESIGNATIONID, TRANSACTIONCURRENCYID
from
dbo.UFN_REVENUE_GETSPLITS_2_FROMITEMLISTXML(@SPLITS)
for xml raw('ITEM'),type,elements,root('DESIGNATION'),binary base64
)
/* You can only edit unposted planned gifts here */
if (
select count(REVENUE.ID)
from dbo.REVENUE
inner join dbo.REVENUEPOSTED on REVENUEPOSTED.ID = REVENUE.ID
where REVENUE.ID = @ID
) > 0
raiserror('You cannot edit a posted planned gift.', 13, 1)
declare @TRIBUTEAMOUNT money;
select
@TRIBUTEAMOUNT = sum(AMOUNT)
from
dbo.REVENUETRIBUTE
where
REVENUEID = @ID;
-- do not allow the gift amount to be adjusted less than the applied tribute amount
if (@TRIBUTEAMOUNT is not null) and (@AMOUNT < @TRIBUTEAMOUNT)
begin
raiserror('The planned gift amount cannot be less than the sum of the tribute amounts applied to this planned gift.', 13, 1)
end
--Multicurrency - AdamBu 5/21/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;
declare @DONOTPOST bit;
set @DONOTPOST = case @POSTSTATUSCODE when 2 then 1 else 0 end;
declare @CLEARGLDISTRIBUTION bit;
set @CLEARGLDISTRIBUTION = 0;
if @SPLITSCHANGED = 1
set @CLEARGLDISTRIBUTION = 1;
-- check to see if amounts, postdate, post status, or exchange rates have changed
-- changing AppealID can change the calculated account number
if @CLEARGLDISTRIBUTION = 0
if (
select count(REVENUE.ID) 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 isnull(APPEALID,'00000000-0000-0000-0000-000000000000') = isnull(@APPEALID,'00000000-0000-0000-0000-000000000000')
and AMOUNT = @BASEAMOUNT
and ORGANIZATIONAMOUNT = @ORGANIZATIONAMOUNT
and BASEEXCHANGERATEID = @BASEEXCHANGERATEID
and ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID
and TRANSACTIONCURRENCYID = @TRANSACTIONCURRENCYID
and BASECURRENCYID = @BASECURRENCYID
) = 0
begin
set @CLEARGLDISTRIBUTION = 1;
end
--Check to see if revenue category changed.
if @CLEARGLDISTRIBUTION = 0
begin
if (@SPLITS.exist('(/SPLITS/ITEM/CATEGORYCODEID)') = 0)
begin
if (exists (
select
REVENUECATEGORY.ID
from dbo.REVENUECATEGORY
left outer join dbo.UFN_REVENUE_GETSPLITS_2_FROMITEMLISTXML(@SPLITS) as SPLITS on REVENUECATEGORY.ID = SPLITS.ID
where ((REVENUECATEGORY.GLREVENUECATEGORYMAPPINGID <> SPLITS.CATEGORYCODEID) or
((REVENUECATEGORY.GLREVENUECATEGORYMAPPINGID is null) and (SPLITS.CATEGORYCODEID is not null)) or
((REVENUECATEGORY.GLREVENUECATEGORYMAPPINGID is not null) and (SPLITS.CATEGORYCODEID is null)))))
begin
set @CLEARGLDISTRIBUTION = 1;
end
end
else if (exists (
select
REVENUECATEGORY.ID
from
dbo.REVENUECATEGORY
inner join dbo.REVENUESPLIT on REVENUECATEGORY.ID = REVENUESPLIT.ID
where (REVENUESPLIT.REVENUEID = @ID) and
((REVENUECATEGORY.GLREVENUECATEGORYMAPPINGID <> @CATEGORYCODEID) or
((REVENUECATEGORY.GLREVENUECATEGORYMAPPINGID is null) and (@CATEGORYCODEID is not null)) or
((REVENUECATEGORY.GLREVENUECATEGORYMAPPINGID is not null) and (@CATEGORYCODEID is null)))))
begin
set @CLEARGLDISTRIBUTION = 1;
end
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
declare @FIELDCHANGED bit;
set @FIELDCHANGED = 0;
-- check to see if amount have changed
if (select count(REVENUE.ID) from dbo.REVENUE where REVENUE.ID = @ID and AMOUNT = @AMOUNT) = 0
set @FIELDCHANGED = 1;
-- check to see if designations have changed
if @FIELDCHANGED = 0
if @SPLITSCHANGED = 1
set @FIELDCHANGED = 1;
-- if a field has changed, mark the revenue letters for this record out of date, if necessary
if @FIELDCHANGED = 1
exec dbo.USP_REVENUELETTER_SETREACKNOWLEDGEMENTS @ID, @CHANGEAGENTID;
end
update dbo.REVENUE
set
DATE = @DATE,
DONOTPOST = @DONOTPOST,
POSTDATE = @POSTDATE,
AMOUNT = @BASEAMOUNT,
SOURCECODE = @SOURCECODE,
APPEALID = @APPEALID,
BENEFITSWAIVED = @BENEFITSWAIVED,
GIVENANONYMOUSLY = @GIVENANONYMOUSLY,
MAILINGID = @MAILINGID,
CHANNELCODEID = @CHANNELCODEID,
DONOTACKNOWLEDGE = @DONOTACKNOWLEDGE,
RECEIPTAMOUNT = @RECEIPTAMOUNT,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE,
BASECURRENCYID = @BASECURRENCYID,
ORGANIZATIONAMOUNT = @ORGANIZATIONAMOUNT,
TRANSACTIONAMOUNT = @AMOUNT,
BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID,
DONOTRECEIPT = @DONOTRECEIPT
where ID = @ID;
if exists (select ID from dbo.REVENUEPOSTED where ID = @ID)
begin
if @POSTSTATUSCODE <> 0
delete dbo.REVENUEPOSTED
where ID = @ID;
end
else
begin
if @POSTSTATUSCODE = 0
insert into dbo.REVENUEPOSTED(
ID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values(
@ID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
end
update dbo.INSTALLMENT
set
AMOUNT = @BASEAMOUNT,
DATE = @DATE,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE,
BASECURRENCYID = @BASECURRENCYID,
ORGANIZATIONAMOUNT = @ORGANIZATIONAMOUNT,
TRANSACTIONAMOUNT = @AMOUNT,
BASEEXCHANGERATEID = @BASEEXCHANGERATEID,
ORGANIZATIONEXCHANGERATEID = @ORGANIZATIONEXCHANGERATEID
where REVENUEID = @ID;
--Multicurrency - AdamBu 5/21/10 - 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;
declare @PAYOUTAMOUNT money;
if dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('0E85C527-E6E9-4C5F-A8E8-105FD0E18FE7') = 1
and @PLANNEDGIFTADDITIONID is null -- Planned gift additions do not have payout entrees
and not exists(select top 1 1 from dbo.PLANNEDGIFTPAYOUT where REVENUEID = @ID)
begin
declare @ISANONYMOUS bit;
declare @VEHICLECODE smallint;
declare @GENERATEGLDISTRIBUTIONS bit = case when @DONOTPOST = 1 then 0 else 1 end;
select
@ISANONYMOUS = ISANONYMOUS,
@VEHICLECODE = VEHICLECODE,
@PAYOUTAMOUNT = case VEHICLECODE when 6 then TRANSACTIONLIFEINSURANCEPREMIUM else TRANSACTIONPAYOUTAMOUNT end
from dbo.PLANNEDGIFT where ID = @PLANNEDGIFTID;
if (@VEHICLECODE = 0 or @VEHICLECODE = 5 or @VEHICLECODE = 6)
exec USP_ADDPLANNEDGIFTPAYOUT @PLANNEDGIFTID, @PAYOUTAMOUNT, @DATE, @AMOUNT, @CHANGEAGENTID, @ISANONYMOUS,
@ID, @GENERATEGLDISTRIBUTIONS, @TRANSACTIONCURRENCYID, @BASECURRENCYID, @BASEEXCHANGERATEID;
end
if @PAYOUTAMOUNT is null
begin
select
@PAYOUTAMOUNT = PLANNEDGIFT.TRANSACTIONPAYOUTAMOUNT
from
dbo.PLANNEDGIFTPAYOUT
inner join dbo.PLANNEDGIFT on PLANNEDGIFTPAYOUT.ID = PLANNEDGIFT.ID
where
PLANNEDGIFTPAYOUT.REVENUEID = @ID;
end
declare @PGVEHICLECODE tinyint;
select @PGVEHICLECODE = VEHICLECODE from dbo.PLANNEDGIFT where ID = @PLANNEDGIFTID;
if @PAYOUTAMOUNT is not null and (@PGVEHICLECODE = 0 or @PGVEHICLECODE = 5 or @PGVEHICLECODE = 6)
begin
--Need to prorate splits.
set @PLANNEDGIFTPAYOUTSPLITS = dbo.UFN_PLANNEDGIFTGETSPLITS_XML(@AMOUNT,@PAYOUTAMOUNT,@PLANNEDGIFTPAYOUTSPLITS);
set @PLANNEDGIFTPAYOUTSPLITS = dbo.UFN_PLANNEDGIFTDESIGNATION_CONVERTAMOUNTSINXML(@PLANNEDGIFTPAYOUTSPLITS,@BASECURRENCYID,@ORGANIZATIONEXCHANGERATEID,@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID);
--The payout splits need to match the splits on the revenue.
exec dbo.USP_PLANNEDGIFT_GETPAYOUTSPLITS_UPDATEFROMXML @ID, @PLANNEDGIFTPAYOUTSPLITS, @CHANGEAGENTID, @CURRENTDATE;
end
-- update benefits
declare @TOTALBENEFITS xml;
set @TOTALBENEFITS = dbo.UFN_REVENUEDETAIL_JOINBENEFITS(@BENEFITS, @PERCENTAGEBENEFITS);
set @TOTALBENEFITS = dbo.UFN_REVENUEBENEFIT_CONVERTAMOUNTSINXML_2(@TOTALBENEFITS,@TRANSACTIONCURRENCYID,@BASECURRENCYID);
exec dbo.USP_REVENUE_GETBENEFITS_4_UPDATEFROMXML @ID, @TOTALBENEFITS, @CHANGEAGENTID, @CURRENTDATE, null;
-- Delete/Re-default solicitors if prompt returns yes, still update amounts if greater than new total revenue amount - WI 470535 Josh Jones
if @UPDATESOLICITORS = 1
begin
delete REVENUESOLICITOR
from dbo.REVENUESOLICITOR
inner join dbo.FINANCIALTRANSACTIONLINEITEM on REVENUESOLICITOR.REVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID
where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
exec dbo.USP_PLANNEDGIFTREVENUE_DEFAULTSOLICITORS @PLANNEDGIFTID, @ID, @CHANGEAGENTID, @CURRENTDATE;
end
else
begin
update REVENUESOLICITOR
set REVENUESOLICITOR.AMOUNT = @AMOUNT
from dbo.REVENUESOLICITOR
inner join dbo.FINANCIALTRANSACTIONLINEITEM on REVENUESOLICITOR.REVENUESPLITID = FINANCIALTRANSACTIONLINEITEM.ID
where REVENUESOLICITOR.AMOUNT > @AMOUNT
and FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
end
--assume one installment
declare @INSTALLMENTSPLITS xml;
set @INSTALLMENTSPLITS = (
select distinct
INSTALLMENTSPLIT.ID,
INSTALLMENT.ID INSTALLMENTID,
REVENUESPLIT.DESIGNATIONID,
REVENUESPLIT.TRANSACTIONAMOUNT AMOUNT,
REVENUESPLIT.ID as REVENUESPLITID
from dbo.REVENUESPLIT
inner join dbo.INSTALLMENT on INSTALLMENT.REVENUEID = REVENUESPLIT.REVENUEID
left outer join dbo.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
);
set @INSTALLMENTSPLITS = dbo.UFN_INSTALLMENTSPLIT_CONVERTAMOUNTSINXML(@INSTALLMENTSPLITS,@BASECURRENCYID,@ORGANIZATIONEXCHANGERATEID,@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID)
exec dbo.USP_PLEDGE_GETINSTALLMENTSPLITS_2_UPDATEFROMXML @ID, @INSTALLMENTSPLITS, @CHANGEAGENTID, @CURRENTDATE;
exec dbo.USP_REVENUEREFERENCE_EDIT @ID, @REFERENCE, @CHANGEAGENTID
exec dbo.USP_REVENUECATEGORY_UPDATESPLITS @ID, @CATEGORYCODEID, @CHANGEAGENTID, @CURRENTDATE
if @OPPORTUNITYID is null
exec dbo.USP_RECORDOPERATION_REVENUEOPPORTUNITYUNLINK @ID, @CHANGEAGENTID;
else
begin
exec dbo.USP_REVENUE_PULLSOLICITORSFROMOPPORTUNITY @ID, @OPPORTUNITYID, @CHANGEAGENTID, @CURRENTDATE
if not exists (select top 1 O.ID from dbo.REVENUEOPPORTUNITY O inner join dbo.FINANCIALTRANSACTIONLINEITEM I on O.ID = I.ID where I.FINANCIALTRANSACTIONID = @ID)
exec dbo.USP_DATAFORMTEMPLATE_ADD_REVENUEOPPORTUNITYLINK @REVENUEID = @ID, @OPPORTUNITYID = @OPPORTUNITYID;
else
exec dbo.USP_REVENUEOPPORTUNITY_UPDATEOPPORTUNITY @REVENUEID = @ID, @OPPORTUNITYID = @OPPORTUNITYID;
exec dbo.USP_OPPORTUNITY_UPDATEACCEPTEDSTATUS @OPPORTUNITYID, @DATE, @CHANGEAGENTID, @CURRENTDATE
end
-- update campaigns
if @SPLITSCHANGED = 1
begin
exec dbo.USP_PLEDGE_CLEARANDADDCAMPAIGNS @REVENUEID = @ID, @OPPORTUNITYID = @OPPORTUNITYID, @CHANGEAGENTID = @CHANGEAGENTID, @CHANGEDATE = @CURRENTDATE
end
-- clear the user-defined gl distributions
if @CLEARGLDISTRIBUTION = 1
begin
--Clear GL
delete from dbo.REVENUEGLDISTRIBUTION where REVENUEID = @ID and OUTDATED = 0;
delete from dbo.PLANNEDGIFTPAYOUTGLDISTRIBUTION where REVENUEID = @ID and OUTDATED = 0;
-- Add new GL distributions
if @POSTSTATUSCODE <> 2
exec dbo.USP_PLANNEDGIFTREVENUE_GENERATEGLDISTRIBUTIONS @ID, @CHANGEAGENTID;
end
update dbo.FINANCIALTRANSACTION
set
POSTDATE = @POSTDATE
,POSTSTATUSCODE = case @POSTSTATUSCODE when 0 then 2 when 2 then 3 else 1 end
,CHANGEDBYID = @CHANGEAGENTID
,DATECHANGED = @CURRENTDATE
where TYPECODE = 26 and POSTSTATUSCODE != 2 and PARENTID = @ID;
update T2
set
T2.POSTDATE = @POSTDATE
,T2.POSTSTATUSCODE = case @POSTSTATUSCODE when 0 then 2 when 2 then 3 else 1 end
,T2.CHANGEDBYID = @CHANGEAGENTID
,T2.DATECHANGED = @CURRENTDATE
from dbo.FINANCIALTRANSACTION T1
join dbo.FINANCIALTRANSACTIONLINEITEM T2 on T1.ID = T2.FINANCIALTRANSACTIONID
where T1.TYPECODE = 26 and T2.TYPECODE in (0,98) and T2.POSTSTATUSCODE != 2 and T1.PARENTID = @ID;
if dbo.UFN_PLEDGEPAYMENT_DESIGNATIONSBALANCE(@ID) = 0
raiserror('PLEDGEPAYMENT_DESIGNATIONSBALANCE', 13, 10);
--Multicurrency - AdamBu 5/21/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
-- If the rate changed this could cause a recalculation of the payment distributions.
if @RATECHANGED = 1
exec USP_EDITPLANNEDGIFTREVENUE_RECREATEPAYMENTGLDISTRIBUTIONS @ID, @CHANGEAGENTID
exec dbo.USP_PLANNEDGIFTRECONCILE_SAVE
@PLANNEDGIFTID,
@ID,
@PLANNEDGIFTADDITIONID,
@OLDAMOUNT,
@BASEAMOUNT,
@OLDDATE,
@DATE,
@DESIGNATIONSCHANGED,
@CHANGEAGENTID,
@CURRENTDATE,
@OLDTRANSACTIONAMOUNT,
@AMOUNT,
@OLDDONOTRECEIPT,
@DONOTRECEIPT,
@OLDRECEIPTAMOUNT,
@RECEIPTAMOUNT,
@BASECURRENCYID,
@TRANSACTIONCURRENCYID;
--Business units - add adjusted splits back.
declare @REVENUESPLITBUSINESSUNITID uniqueidentifier;
declare BUSINESSUNITS cursor local fast_forward
for
select REVENUESPLITBUSINESSUNIT.ID
from dbo.REVENUESPLITBUSINESSUNIT
inner join dbo.FINANCIALTRANSACTIONLINEITEM on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLITBUSINESSUNIT.REVENUESPLITID
where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
open BUSINESSUNITS;
begin try
fetch next
from BUSINESSUNITS
into @REVENUESPLITBUSINESSUNITID
while (@@FETCH_STATUS = 0)
begin
exec dbo.USP_REVENUESPLITBUSINESSUNIT_DELETEBYID_WITHCHANGEAGENTID @REVENUESPLITBUSINESSUNITID
,@CHANGEAGENTID;
fetch next
from BUSINESSUNITS
into @REVENUESPLITBUSINESSUNITID
end
close BUSINESSUNITS;
deallocate BUSINESSUNITS;
end try
begin catch
close BUSINESSUNITS;
deallocate BUSINESSUNITS;
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
update REVENUESPLIT_EXT
set OVERRIDEBUSINESSUNITS = BUR.OVERRIDEBUSINESSUNITS
,REVENUESPLITBUSINESSUNITOVERRIDECODEID = BUR.REASON
,CHANGEDBYID = @CHANGEAGENTID
,DATECHANGED = @CURRENTDATE
from dbo.REVENUESPLIT_EXT
inner join dbo.FINANCIALTRANSACTIONLINEITEM on REVENUESPLIT_EXT.ID = FINANCIALTRANSACTIONLINEITEM.ID
inner join @BUSINESSUNITSRATIO as BUR on REVENUESPLIT_EXT.DESIGNATIONID = BUR.DESIGNATIONID
where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
and BUR.OVERRIDEBUSINESSUNITS = 1
and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
and FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1
insert into dbo.REVENUESPLITBUSINESSUNIT (
ID
,REVENUESPLITID
,BUSINESSUNITCODEID
,AMOUNT
,BASECURRENCYID
,ADDEDBYID
,CHANGEDBYID
,DATEADDED
,DATECHANGED
)
select newid()
,FINANCIALTRANSACTIONLINEITEM.ID
,BUR.BUSINESSUNITCODEID
,FINANCIALTRANSACTIONLINEITEM.BASEAMOUNT * BUR.RATIO
,CURRENCYSET.BASECURRENCYID
,@CHANGEAGENTID
,@CHANGEAGENTID
,@CURRENTDATE
,@CURRENTDATE
from dbo.FINANCIALTRANSACTIONLINEITEM
inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
inner join dbo.PDACCOUNTSYSTEM on FINANCIALTRANSACTION.PDACCOUNTSYSTEMID = PDACCOUNTSYSTEM.ID
inner join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID
inner join @BUSINESSUNITSRATIO BUR on BUR.DESIGNATIONID = REVENUESPLIT_EXT.DESIGNATIONID
where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
and REVENUESPLIT_EXT.OVERRIDEBUSINESSUNITS = 1
and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
and FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1
--$0 business units are not allowed, so don't create them
and BUR.RATIO != 0
and FINANCIALTRANSACTIONLINEITEM.BASEAMOUNT != 0
exec dbo.USP_REVENUESPLIT_APPLYBUSINESSUNITS @ID
,@CHANGEAGENTID
,@CURRENTDATE;
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;
end