USP_REVENUE_UPDATESOLICITORS_2
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@REVENUEID | uniqueidentifier | IN | |
@OPPORTUNITYID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN | |
@OLDSPLITS | xml | IN |
Definition
Copy
CREATE procedure dbo.USP_REVENUE_UPDATESOLICITORS_2
(
@REVENUEID uniqueidentifier,
@OPPORTUNITYID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@CHANGEDATE datetime,
@OLDSPLITS xml = null
)
as
set nocount on;
--Solicitors don't have a transaction currency, @ORGANIZATIONEXCHANGERATEIDFROMBASE handles the
-- case where the revenue split ORGANIZATIONEXCHANGERATE is for converting from transaction to org currencies
declare @OVERRIDEORGANIZATIONVALUES bit = 0;
declare @ORGANIZATIONEXCHANGERATEIDFROMBASE uniqueidentifier;
declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
if (1 = (select top 1 ORGANIZATIONAMOUNTORIGINCODE from dbo.MULTICURRENCYCONFIGURATION))
begin
set @OVERRIDEORGANIZATIONVALUES = 1;
declare @DATE datetime;
declare @BASECURRENCYID uniqueidentifier;
declare @ORGEXCHANGERATEID uniqueidentifier
select
@DATE = REVENUE.DATE,
@BASECURRENCYID = REVENUE.BASECURRENCYID,
@ORGEXCHANGERATEID = REVENUE.ORGANIZATIONEXCHANGERATEID
from
dbo.REVENUE
where
REVENUE.ID = @REVENUEID;
if @BASECURRENCYID = @ORGANIZATIONCURRENCYID
begin
set @ORGANIZATIONEXCHANGERATEIDFROMBASE = null;
end
else
begin
set @ORGANIZATIONEXCHANGERATEIDFROMBASE = dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@BASECURRENCYID, @ORGANIZATIONCURRENCYID, @DATE, 0, null);
end
end
declare @PLANNEDGIFTPROSPECTPLANID uniqueidentifier
select
@PLANNEDGIFTPROSPECTPLANID = PLANNEDGIFT.PROSPECTPLANID
from
dbo.FINANCIALTRANSACTION
inner join dbo.PLANNEDGIFTREVENUE on PLANNEDGIFTREVENUE.REVENUEID = FINANCIALTRANSACTION.ID
inner join dbo.PLANNEDGIFT on PLANNEDGIFT.ID = PLANNEDGIFTREVENUE.ID
where
FINANCIALTRANSACTION.ID = @REVENUEID
declare @PROSPECTPLANID uniqueidentifier
select
@PROSPECTPLANID = PROSPECTPLANID
from
dbo.OPPORTUNITY
where
ID = @OPPORTUNITYID
declare @FUNDINGREQUESTID uniqueidentifier;
select
@FUNDINGREQUESTID = REVENUEFUNDINGREQUEST.FUNDINGREQUESTID
from
dbo.REVENUEFUNDINGREQUEST
where
REVENUEFUNDINGREQUEST.ID = @REVENUEID
if @FUNDINGREQUESTID is not null
begin
update dbo.REVENUESOLICITOR
set AMOUNT = (SOLICITORS.CREDITPERCENTAGE * REVENUESPLIT.BASEAMOUNT) / 100.0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE,
BASECURRENCYID = @BASECURRENCYID,
ORGANIZATIONAMOUNT =
case
when @BASECURRENCYID = @ORGANIZATIONCURRENCYID
then REVENUESPLIT.BASEAMOUNT
when @OVERRIDEORGANIZATIONVALUES = 1
then dbo.UFN_CURRENCY_CONVERT(REVENUESPLIT.BASEAMOUNT, @ORGANIZATIONEXCHANGERATEIDFROMBASE)
else
REVENUESPLIT.ORGAMOUNT
end,
ORGANIZATIONEXCHANGERATEID =
case
when @OVERRIDEORGANIZATIONVALUES = 1
then @ORGANIZATIONEXCHANGERATEIDFROMBASE
else
@ORGEXCHANGERATEID
end
from dbo.REVENUESOLICITOR
inner join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT on REVENUESOLICITOR.REVENUESPLITID = REVENUESPLIT.ID
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = REVENUESPLIT.ID
inner join dbo.UFN_FUNDINGREQUEST_GETFUNDRAISERSANDCREDITS(@FUNDINGREQUESTID) as SOLICITORS on SOLICITORS.ID = REVENUESOLICITOR.CONSTITUENTID
left join dbo.UFN_REVENUE_GETSPLITS_2_FROMITEMLISTXML(@OLDSPLITS) OLDSPLIT on OLDSPLIT.ID = REVENUESPLIT.ID
where
REVENUESPLIT.FINANCIALTRANSACTIONID = @REVENUEID
and REVENUESPLIT.DELETEDON is null
and REVENUESPLIT.TYPECODE != 1
-- Exclude opportunity solicitors as we will update them later
and REVENUESOLICITOR.CONSTITUENTID not in (select ID from dbo.UFN_PROSPECTPLAN_GETFUNDRAISERSANDCREDITS_2(@PROSPECTPLANID, @OPPORTUNITYID));
end
else
begin
update dbo.REVENUESOLICITOR
set AMOUNT = case
when OLDSPLIT.AMOUNT is not null and OLDSPLIT.AMOUNT > 0 then
(REVENUESOLICITOR.AMOUNT / OLDSPLIT.AMOUNT) * REVENUESPLIT.BASEAMOUNT
else
REVENUESPLIT.BASEAMOUNT
end,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE,
BASECURRENCYID = @BASECURRENCYID,
ORGANIZATIONAMOUNT =
case
when @BASECURRENCYID = @ORGANIZATIONCURRENCYID
then REVENUESPLIT.BASEAMOUNT
when @OVERRIDEORGANIZATIONVALUES = 1
then dbo.UFN_CURRENCY_CONVERT(REVENUESPLIT.BASEAMOUNT, @ORGANIZATIONEXCHANGERATEIDFROMBASE)
else
REVENUESPLIT.ORGAMOUNT
end,
ORGANIZATIONEXCHANGERATEID =
case
when @OVERRIDEORGANIZATIONVALUES = 1
then @ORGANIZATIONEXCHANGERATEIDFROMBASE
else
@ORGEXCHANGERATEID
end
from dbo.REVENUESOLICITOR
inner join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT on REVENUESOLICITOR.REVENUESPLITID = REVENUESPLIT.ID
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT_EXT.ID = REVENUESPLIT.ID
left join dbo.UFN_REVENUE_GETSPLITS_2_FROMITEMLISTXML(@OLDSPLITS) OLDSPLIT on OLDSPLIT.ID = REVENUESPLIT.ID
where
REVENUESPLIT.FINANCIALTRANSACTIONID = @REVENUEID
and REVENUESPLIT.DELETEDON is null
and REVENUESPLIT.TYPECODE != 1
-- The REVENUESOLICITOR.AMOUNT/REVENUESPLIT.BASEAMOUNT comparison is for backwards compatibility when @OLDSPLITS is not provided
and (OLDSPLIT.AMOUNT <> REVENUESPLIT.BASEAMOUNT or (OLDSPLIT.AMOUNT is null and REVENUESOLICITOR.AMOUNT <> REVENUESPLIT.BASEAMOUNT))
-- Exclude opportunity solicitors as we will update them later
and REVENUESOLICITOR.CONSTITUENTID not in (select ID from dbo.UFN_PROSPECTPLAN_GETFUNDRAISERSANDCREDITS_2(@PROSPECTPLANID, @OPPORTUNITYID));
end
if @OPPORTUNITYID is not null
begin
-- Update solicitors from opportunity
update dbo.REVENUESOLICITOR
set AMOUNT = (SOLICITORS.CREDITPERCENTAGE * REVENUESPLIT.BASEAMOUNT) / 100.0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE,
BASECURRENCYID = @BASECURRENCYID,
ORGANIZATIONAMOUNT =
case
when @BASECURRENCYID = @ORGANIZATIONCURRENCYID
then (SOLICITORS.CREDITPERCENTAGE * REVENUESPLIT.BASEAMOUNT) / 100.0
when @OVERRIDEORGANIZATIONVALUES = 1
then dbo.UFN_CURRENCY_CONVERT((SOLICITORS.CREDITPERCENTAGE * REVENUESPLIT.BASEAMOUNT) / 100.0, @ORGANIZATIONEXCHANGERATEIDFROMBASE)
else
(SOLICITORS.CREDITPERCENTAGE * REVENUESPLIT.ORGAMOUNT) / 100.0
end,
ORGANIZATIONEXCHANGERATEID =
case
when @OVERRIDEORGANIZATIONVALUES = 1
then @ORGANIZATIONEXCHANGERATEIDFROMBASE
else
@ORGEXCHANGERATEID
end
from dbo.REVENUESOLICITOR
inner join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT on REVENUESOLICITOR.REVENUESPLITID = REVENUESPLIT.ID
inner join dbo.UFN_PROSPECTPLAN_GETFUNDRAISERSANDCREDITS_2(@PROSPECTPLANID, @OPPORTUNITYID) as SOLICITORS on SOLICITORS.ID = REVENUESOLICITOR.CONSTITUENTID
where
REVENUESPLIT.FINANCIALTRANSACTIONID = @REVENUEID
and REVENUESPLIT.DELETEDON is null
and REVENUESPLIT.TYPECODE != 1
and REVENUESOLICITOR.AMOUNT <> (SOLICITORS.CREDITPERCENTAGE * REVENUESPLIT.BASEAMOUNT) / 100.0;
end
if @PLANNEDGIFTPROSPECTPLANID is not null
begin
-- Update solicitors from prospect plan if no opportunity is associated directly
update dbo.REVENUESOLICITOR
set AMOUNT = (SOLICITORS.CREDITPERCENTAGE * REVENUESPLIT.BASEAMOUNT) / 100.0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE,
BASECURRENCYID = @BASECURRENCYID,
ORGANIZATIONAMOUNT =
case
when @BASECURRENCYID = @ORGANIZATIONCURRENCYID
then (SOLICITORS.CREDITPERCENTAGE * REVENUESPLIT.BASEAMOUNT) / 100.0
when @OVERRIDEORGANIZATIONVALUES = 1
then dbo.UFN_CURRENCY_CONVERT((SOLICITORS.CREDITPERCENTAGE * REVENUESPLIT.BASEAMOUNT) / 100.0, @ORGANIZATIONEXCHANGERATEIDFROMBASE)
else
(SOLICITORS.CREDITPERCENTAGE * REVENUESPLIT.ORGAMOUNT) / 100.0
end,
ORGANIZATIONEXCHANGERATEID =
case
when @OVERRIDEORGANIZATIONVALUES = 1
then @ORGANIZATIONEXCHANGERATEIDFROMBASE
else
@ORGEXCHANGERATEID
end
from dbo.REVENUESOLICITOR
inner join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT on REVENUESOLICITOR.REVENUESPLITID = REVENUESPLIT.ID
inner join dbo.UFN_PROSPECTPLAN_GETFUNDRAISERSANDCREDITS(@PLANNEDGIFTPROSPECTPLANID) as SOLICITORS on SOLICITORS.ID = REVENUESOLICITOR.CONSTITUENTID
where
REVENUESPLIT.FINANCIALTRANSACTIONID = @REVENUEID
and REVENUESPLIT.DELETEDON is null
and REVENUESPLIT.TYPECODE != 1
and REVENUESOLICITOR.AMOUNT <> (SOLICITORS.CREDITPERCENTAGE * REVENUESPLIT.BASEAMOUNT) / 100.0;
end