USP_RECURRINGGIFTINSTALLMENTEVENT_CREATEFORBATCH
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@BATCHID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@PROCESSNAME | nvarchar(60) | IN | |
@PROCESSRUNDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_RECURRINGGIFTINSTALLMENTEVENT_CREATEFORBATCH
(
@BATCHID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@PROCESSNAME nvarchar(60),
@PROCESSRUNDATE datetime
)
as
begin
set nocount on;
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if exists(select 'x' from dbo.UFN_RECURRINGGIFTSETTING_GETCURRENT() where FIRSTINSTALLMENTCODE = 1)
begin
-- If the first installment setting for recurring gift payment handling is "Most recent", then
-- the events should be logged on the most recent installment, not the oldest. It is not guaranteed
-- that the most recent installment will exist in the database yet. As such, we would need to call
-- USP_RECURRINGGIFT_ADDMISSINGINSTALLMENTS for any RG where that next installment in fact does not
-- exist, so that the installment will exist so we can associate the event with it.
declare @RGS table (ID uniqueidentifier,
AMOUNT money,
BASECURRENCYID uniqueidentifier,
ORGANIZATIONAMOUNT money,
ORGANIZATIONEXCHANGERATEID uniqueidentifier,
TRANSACTIONAMOUNT money,
TRANSACTIONCURRENCYID uniqueidentifier,
BASEEXCHANGERATEID uniqueidentifier);
-- get list of RGs where the next installment doesn't exist yet
--CC only
insert into @RGS
select R.ID,
R.AMOUNT,
R.BASECURRENCYID,
R.ORGANIZATIONAMOUNT,
R.ORGANIZATIONEXCHANGERATEID,
R.TRANSACTIONAMOUNT,
R.TRANSACTIONCURRENCYID,
R.BASEEXCHANGERATEID
from dbo.BATCHREVENUE BR
left join dbo.BATCHREVENUEAPPLICATION BRA on BRA.BATCHREVENUEID = BR.ID
cross apply dbo.UFN_RECURRINGGIFT_GETNEXTINSTALLMENTINFO(BRA.REVENUEID, null) NEXTINSTALLMENT
inner join dbo.REVENUE R on R.ID = BRA.REVENUEID
where BR.PAYMENTMETHODCODE in (2) -- CC only
and BRA.REVENUEID in (select ID from dbo.FINANCIALTRANSACTION where TYPECODE = 2) --recurring gifts only
and BR.BATCHID = @BATCHID
and NEXTINSTALLMENT.ID is null;
--EFT Only
insert into @RGS
select R.ID,
R.AMOUNT,
R.BASECURRENCYID,
R.ORGANIZATIONAMOUNT,
R.ORGANIZATIONEXCHANGERATEID,
R.TRANSACTIONAMOUNT,
R.TRANSACTIONCURRENCYID,
R.BASEEXCHANGERATEID
from dbo.BATCHREVENUE BR
left join dbo.BATCHREVENUEAPPLICATION BRA on BRA.BATCHREVENUEID = BR.ID
cross apply dbo.UFN_RECURRINGGIFT_GETNEXTINSTALLMENTINFO(isnull(BR.PAYINGPENDINGREVENUEID, BRA.REVENUEID),null) NEXTINSTALLMENT
inner join dbo.REVENUE R on R.ID = isnull(BR.PAYINGPENDINGREVENUEID, BRA.REVENUEID)
where BR.PAYMENTMETHODCODE in (3) -- EFT only
and isnull(BR.PAYINGPENDINGREVENUEID, BRA.REVENUEID) in (select ID from dbo.FINANCIALTRANSACTION where TYPECODE = 2) --recurring gifts only
and BR.BATCHID = @BATCHID
and NEXTINSTALLMENT.ID is null;
declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
-- add missing installments to those RGs
insert into dbo.RECURRINGGIFTINSTALLMENT (
ID,
REVENUEID,
AMOUNT,
DATE,
BASECURRENCYID,
ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID,
TRANSACTIONAMOUNT,
TRANSACTIONCURRENCYID,
BASEEXCHANGERATEID,
ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
newid(),
rg.ID,
rg.AMOUNT,
i.DATE,
coalesce(rg.BASECURRENCYID,@ORGANIZATIONCURRENCYID),
coalesce(rg.ORGANIZATIONAMOUNT,rg.AMOUNT),
rg.ORGANIZATIONEXCHANGERATEID,
coalesce(rg.TRANSACTIONAMOUNT,rg.AMOUNT),
coalesce(rg.TRANSACTIONCURRENCYID,@ORGANIZATIONCURRENCYID),
rg.BASEEXCHANGERATEID,
@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from @RGS rg
cross apply dbo.UFN_RECURRINGGIFT_GETMISSINGINSTALLMENTS_ASOFDATE(rg.ID,@CURRENTDATE) i;
end
-- capture CC events
insert into dbo.RECURRINGGIFTINSTALLMENTEVENT
(
ID,
RECURRINGGIFTINSTALLMENTID,
EVENTCODE,
DATE,
PROCESSNAME,
RESULTCODE,
REJECTIONMESSAGE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED,
BATCHID
)
select
newid(),
dbo.UFN_RECURRINGGIFT_GETNEXTINSTALLMENT(BRA.REVENUEID, null),
case when AUTHORIZATIONCODE <> '' then 1 when REJECTIONMESSAGE <> '' then 2 when DIRECTDEBITISREJECTED = 1 then 3 else 0 end,
isnull(@PROCESSRUNDATE, @CURRENTDATE),
isnull(@PROCESSNAME,''),
case when DIRECTDEBITISREJECTED = 1 then DIRECTDEBITRESULTCODE else AUTHORIZATIONCODE end,
REJECTIONMESSAGE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE,
@BATCHID
from dbo.BATCHREVENUE BR
left join dbo.BATCHREVENUEAPPLICATION BRA on BRA.BATCHREVENUEID = BR.ID
where
BR.PAYMENTMETHODCODE in (2) -- CC only
and BRA.REVENUEID in (select ID from dbo.FINANCIALTRANSACTION where TYPECODE = 2) --recurring gifts only
and BR.BATCHID = @BATCHID
-- capture EFT events
insert into dbo.RECURRINGGIFTINSTALLMENTEVENT
(
ID,
RECURRINGGIFTINSTALLMENTID,
EVENTCODE,
DATE,
PROCESSNAME,
RESULTCODE,
REJECTIONMESSAGE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED,
BATCHID
)
select
newid(),
dbo.UFN_RECURRINGGIFT_GETNEXTINSTALLMENT(isnull(BR.PAYINGPENDINGREVENUEID, BRA.REVENUEID),null),
case when AUTHORIZATIONCODE <> '' then 1 when REJECTIONMESSAGE <> '' then 2 when DIRECTDEBITISREJECTED = 1 then 3 else 0 end,
isnull(@PROCESSRUNDATE, @CURRENTDATE),
isnull(@PROCESSNAME,''),
case when DIRECTDEBITISREJECTED = 1 then DIRECTDEBITRESULTCODE else AUTHORIZATIONCODE end,
REJECTIONMESSAGE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE,
@BATCHID
from dbo.BATCHREVENUE BR
left join dbo.BATCHREVENUEAPPLICATION BRA on BRA.BATCHREVENUEID = BR.ID
where
BR.PAYMENTMETHODCODE in (3) -- EFT only
and isnull(BR.PAYINGPENDINGREVENUEID, BRA.REVENUEID) in (select ID from dbo.FINANCIALTRANSACTION where TYPECODE = 2) --recurring gifts only
and BR.BATCHID = @BATCHID
end