USP_DATAFORMTEMPLATE_ADD_RECURRINGGIFTINSTALLMENTSKIP_PRELOAD
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@INSTALLMENTCONTEXT | nvarchar(85) | IN | |
@INSTALLMENTNUMBER | int | INOUT | |
@INSTALLMENTDATE | datetime | INOUT | |
@INSTALLMENTBALANCE | money | INOUT | |
@INSTALLMENTS | xml | INOUT | |
@SKIPPEDINSTALLMENTS | tinyint | INOUT | |
@TRANSACTIONCURRENCYID | uniqueidentifier | INOUT | |
@RGFREQUENCYCODE | tinyint | INOUT | |
@RGENDDATE | date | INOUT | |
@RGSEEDDATE | date | INOUT |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_RECURRINGGIFTINSTALLMENTSKIP_PRELOAD
(
@INSTALLMENTCONTEXT nvarchar(85),
@INSTALLMENTNUMBER int = null output,
@INSTALLMENTDATE datetime= null output,
@INSTALLMENTBALANCE money = null output,
@INSTALLMENTS xml = null output,
@SKIPPEDINSTALLMENTS tinyint = null output,
@TRANSACTIONCURRENCYID uniqueidentifier = null output,
@RGFREQUENCYCODE tinyint = null output,
@RGENDDATE date = null output,
@RGSEEDDATE date = null output
)
as
set nocount on;
-- if no other installments precede this one then this will be the first installment
set @INSTALLMENTNUMBER = 1
declare @REVENUEID uniqueidentifier = cast(substring(@INSTALLMENTCONTEXT,1,36) as uniqueidentifier);
set @INSTALLMENTDATE = cast(substring(@INSTALLMENTCONTEXT,38,10) as date);
select @RGENDDATE = ENDDATE,
@RGSEEDDATE = SCHEDULESEEDDATE
from dbo.REVENUESCHEDULE where ID = @REVENUEID;
declare @INSTALLMENTID uniqueidentifier = null;
if len(@INSTALLMENTCONTEXT) > 48
set @INSTALLMENTID = cast(substring(@INSTALLMENTCONTEXT,49,36) as uniqueidentifier);
if @INSTALLMENTID is not null --installment exists so use the ID to retrieve the data
begin
select @INSTALLMENTBALANCE = dbo.UFN_RECURRINGGIFTINSTALLMENT_GETINSTALLMENTBALANCE(@INSTALLMENTID),
@TRANSACTIONCURRENCYID = I.TRANSACTIONCURRENCYID,
@RGFREQUENCYCODE = RS.FREQUENCYCODE
from dbo.RECURRINGGIFTINSTALLMENT I
inner join dbo.REVENUESCHEDULE RS on I.REVENUEID = RS.ID
where I.ID = @INSTALLMENTID
end
else --use the date and revenue ID to retrieve the data
begin
select @INSTALLMENTBALANCE = R.TRANSACTIONAMOUNT,
@TRANSACTIONCURRENCYID = R.TRANSACTIONCURRENCYID,
@RGFREQUENCYCODE = RS.FREQUENCYCODE
from FINANCIALTRANSACTION R
inner join dbo.REVENUESCHEDULE RS on R.ID = RS.ID
where R.ID = @REVENUEID
end
set @SKIPPEDINSTALLMENTS = 1
-- add the installment to be skipped along with most recent installment to the collection. The rest of the installments to be skipped (based on user input) are added in the uiModel code
set @INSTALLMENTS =
(
select ID, DATE, WRITEOFFAMOUNT, BALANCE, NUMBER, ACTIVITY
from
(select
isnull(@INSTALLMENTID,'00000000-0000-0000-0000-000000000000') ID,
@INSTALLMENTDATE DATE,
@INSTALLMENTBALANCE WRITEOFFAMOUNT,
@INSTALLMENTBALANCE BALANCE,
0 NUMBER,
' ' ACTIVITY
union all
select top 1 isnull(ID,'00000000-0000-0000-0000-000000000000'),
DATE,
0 WRITEOFFAMOUNT,
BALANCE,
INSTALLMENTNUMBER NUMBER,
ACTIVITY
from dbo.UFN_QUERY_RECURRINGGIFTACTIVITY(@REVENUEID, 0, 0)
where DATE < @INSTALLMENTDATE
and INSTALLMENTNUMBER is not null
order by DATE desc) X
for xml raw('ITEM'),type,elements,root('INSTALLMENTS'),BINARY BASE64
);
--set the installment to be skipped number based on the previous (most recent) installment's number
select @INSTALLMENTNUMBER = max(T.c.value('(NUMBER)[1]', 'int')) + 1
from @INSTALLMENTS.nodes('/INSTALLMENTS/ITEM') T(c);
return 0;