UFN_RECURRINGGIFT_BUILDINSTALLMENTSCHEDULE

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@NEXTTRANSACTIONDATE datetime IN
@ENDDATE datetime IN
@FREQUENCY tinyint IN

Definition

Copy


create function dbo.UFN_RECURRINGGIFT_BUILDINSTALLMENTSCHEDULE(
  @NEXTTRANSACTIONDATE datetime,
  @ENDDATE datetime,
  @FREQUENCY tinyint
)
returns @INSTALLMENTS table (DATE date)
as begin

  declare @CURRENTDATE datetime = getdate();
  declare @NUMBEROFINSTALLMENTS smallint;

  if datediff(day,@CURRENTDATE,@ENDDATE) > 0
    set @ENDDATE = @CURRENTDATE

  if @FREQUENCY = 0 --ANNUALLY

        set @NUMBEROFINSTALLMENTS = datediff(year, @NEXTTRANSACTIONDATE, @ENDDATE)
    if @FREQUENCY = 1 --SEMI-ANNUALLY

    set @NUMBEROFINSTALLMENTS = datediff(month, @NEXTTRANSACTIONDATE, @ENDDATE) / 6
    if @FREQUENCY = 2 --QUARTYERLY

    set @NUMBEROFINSTALLMENTS = datediff(quarter, @NEXTTRANSACTIONDATE, @ENDDATE)
    if @FREQUENCY = 3 --MONTHLY

    set @NUMBEROFINSTALLMENTS = datediff(month, @NEXTTRANSACTIONDATE, @ENDDATE)
    if @FREQUENCY = 6 --BIMONTHLY

    set @NUMBEROFINSTALLMENTS = datediff(month, @NEXTTRANSACTIONDATE, @ENDDATE) / 2
    if @FREQUENCY = 7 --SEMI-MONTHLY

      set @NUMBEROFINSTALLMENTS = (datediff(day, @NEXTTRANSACTIONDATE, @ENDDATE) / 15
    if @FREQUENCY = 8 --BIWEEKLY

     set @NUMBEROFINSTALLMENTS = datediff(day, @NEXTTRANSACTIONDATE, @ENDDATE) / 14
    if @FREQUENCY = 9 --WEEKLY

     set @NUMBEROFINSTALLMENTS = datediff(day, @NEXTTRANSACTIONDATE, @ENDDATE) / 7 

  insert into @INSTALLMENTS
  select
    dbo.UFN_REVENUE_GETNEXTTRANSACTIONDATE_BYINSTALLMENTS(NUM, @FREQUENCY,@NEXTTRANSACTIONDATE)
  from dbo.NUMBERS
  where NUM <=@NUMBEROFINSTALLMENTS and NUM>0 and dbo.UFN_REVENUE_GETNEXTTRANSACTIONDATE_BYINSTALLMENTS(NUM, @FREQUENCY,@NEXTTRANSACTIONDATE) < @ENDDATE

  return;

end