USP_REVENUEBATCH_ADDSOLICITORS
Add solicitors to the system from a revenue batch.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@REVENUEID | uniqueidentifier | IN | |
@SOLICITORS | xml | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_REVENUEBATCH_ADDSOLICITORS
(
@REVENUEID uniqueidentifier,
@SOLICITORS xml,
@CHANGEAGENTID uniqueidentifier,
@CHANGEDATE datetime
)
as
set nocount on;
declare @BASECURRENCYID uniqueidentifier;
declare @ORGANIZATIONCURRENCYID uniqueidentifier;
declare @DATE datetime;
select
@BASECURRENCYID = BASECURRENCYID,
@DATE = DATE
from dbo.REVENUE where ID = @REVENUEID;
-- Process the solicitors xml to calculate organization amounts.
--Multicurrency - SlyyMu 8/19/10 - Get the updated exchange rate.
declare @BASETOORGANIZATIONEXCHANGERATEID uniqueidentifier;
exec dbo.USP_CURRENCY_GETCURRENCYVALUES
@AMOUNT=null,
@DATE=@DATE,
@BASECURRENCYID=@BASECURRENCYID,
@BASEEXCHANGERATEID=null,
@TRANSACTIONCURRENCYID=null,
@BASEAMOUNT=null,
@ORGANIZATIONCURRENCYID=@ORGANIZATIONCURRENCYID,
@ORGANIZATIONAMOUNT=null,
@ORGANIZATIONEXCHANGERATEID=null,
@LOOKUPORGANIZATIONEXCHANGERATE=0,
@BASETOORGANIZATIONEXCHANGERATEID=@BASETOORGANIZATIONEXCHANGERATEID output;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CHANGEDATE is null
set @CHANGEDATE = getdate();
begin try
declare @REVENUESPLITID uniqueidentifier, @SPLITCOUNT int
select @SPLITCOUNT = count(*) from dbo.REVENUESPLIT
where
REVENUEID = @REVENUEID and
-- Only include donations since solicitors for other applications
-- will be created when applied
APPLICATIONCODE in (0, 4, 7)
-- Determine if there are multiple splits for this revenue
if @SPLITCOUNT > 1
begin
declare @FULLAMOUNT money, @SPLITAMOUNT money, @SPLITSOLICITORS xml
select @FULLAMOUNT = AMOUNT from dbo.REVENUE where ID = @REVENUEID
-- Loop through splits
declare SPLIT_CURSOR cursor local fast_forward for
select ID, AMOUNT from dbo.REVENUESPLIT
where
REVENUEID = @REVENUEID and
-- Only include donations since solicitors for other applications
-- will be created when applied
APPLICATIONCODE = 0
open SPLIT_CURSOR
fetch next from SPLIT_CURSOR into @REVENUESPLITID, @SPLITAMOUNT;
while @@FETCH_STATUS = 0
begin
-- Calculate the prorated amount per split
set @SPLITSOLICITORS = (select
ID,
AMOUNT
from dbo.UFN_REVENUE_GETSOLICITORS_FROMITEMLISTXML(@SOLICITORS)
for xml raw('ITEM'),type,elements,root('AMOUNTSTOPRORATE'),binary base64)
declare @BASEDECIMALDIGITS tinyint;
select @BASEDECIMALDIGITS = DECIMALDIGITS from dbo.CURRENCY where CURRENCY.ID = @BASECURRENCYID
set @SPLITSOLICITORS = (select
newid() as ID,
R.CONSTITUENTID,
PRS.AMOUNT,
R.SEQUENCE,
@BASECURRENCYID as BASECURRENCYID,
case
when @BASECURRENCYID <> @ORGANIZATIONCURRENCYID
then dbo.UFN_CURRENCY_CONVERT(PRS.AMOUNT, @BASETOORGANIZATIONEXCHANGERATEID)
else PRS.AMOUNT
end ORGANIZATIONAMOUNT,
@BASETOORGANIZATIONEXCHANGERATEID as ORGANIZATIONEXCHANGERATEID
from dbo.UFN_SPLITS_PRORATEAMOUNTS(@FULLAMOUNT, @SPLITAMOUNT, @BASEDECIMALDIGITS, @SPLITSOLICITORS) PRS
cross apply dbo.UFN_REVENUE_GETSOLICITORS_FROMITEMLISTXML(@SOLICITORS) R
where PRS.ID = R.ID
for xml raw('ITEM'),type,elements,root('SOLICITORS'),binary base64)
exec dbo.USP_REVENUE_GETSOLICITORS_2_ADDFROMXML @REVENUESPLITID, @SPLITSOLICITORS, @CHANGEAGENTID, @CHANGEDATE;
fetch next from SPLIT_CURSOR into @REVENUESPLITID, @SPLITAMOUNT;
end
close SPLIT_CURSOR
deallocate SPLIT_CURSOR
end
else
begin
select top 1 @REVENUESPLITID = ID from dbo.REVENUESPLIT
where
REVENUEID = @REVENUEID and
-- Only include donations since solicitors for other applications
-- will be created when applied
APPLICATIONCODE in (0, 4, 7)
-- Process the solicitors xml to calculate organization amounts.
set @SOLICITORS = dbo.UFN_REVENUESOLICITOR_CONVERTAMOUNTSINXML(@SOLICITORS,@BASECURRENCYID,@BASETOORGANIZATIONEXCHANGERATEID);
exec dbo.USP_REVENUE_GETSOLICITORS_2_ADDFROMXML @REVENUESPLITID, @SOLICITORS, @CHANGEAGENTID, @CHANGEDATE;
end
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;