UFN_BILLINGTRANSACTIONTYPETOTAL

REturns the total for a given transaction type for a given individual.

Return

Return Type
money

Parameters

Parameter Parameter Type Mode Description
@TRANSACTIONTYPECODE tinyint IN
@CONSTITUENTID uniqueidentifier IN
@STARTDATE datetime IN
@ENDDATE datetime IN
@INCLUDEAPPLICATIONS bit IN
@USEDUEDATE bit IN
@IGNOREAPPLICATIONDATE bit IN

Definition

Copy


CREATE function dbo.UFN_BILLINGTRANSACTIONTYPETOTAL
(
    @TRANSACTIONTYPECODE tinyint,
    @CONSTITUENTID uniqueidentifier,
    @STARTDATE datetime = null,
    @ENDDATE datetime = null,
    @INCLUDEAPPLICATIONS bit = 1,
    @USEDUEDATE bit = 0,
    @IGNOREAPPLICATIONDATE bit = 0
)
returns money
with execute as caller
as
begin
  if (not @STARTDATE is null)
    set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE);

  if (not @ENDDATE is null)
    set @ENDDATE = dbo.UFN_DATE_GETEARLIESTTIME(@ENDDATE);
  else if ((@ENDDATE is null) and (@USEDUEDATE = 1))
    set @ENDDATE = dbo.UFN_DATE_GETEARLIESTTIME(getdate());

  declare @TOTAL money = 0;
  select
    @TOTAL = sum(isnull(FINANCIALTRANSACTION.TRANSACTIONAMOUNT, 0))
  from dbo.FINANCIALTRANSACTION
  left outer join dbo.CHARGE on (CHARGE.ID = FINANCIALTRANSACTION.ID) and (@USEDUEDATE = 1)
  where (FINANCIALTRANSACTION.TYPECODE = @TRANSACTIONTYPECODE) and
        (FINANCIALTRANSACTION.CONSTITUENTID = @CONSTITUENTID) and
        --The "GETEARLIESTTIME" date function has been inlined here for performance (the part with "cast(@DATE as date)")...

        ((@STARTDATE is null) or (((@USEDUEDATE = 1) and (cast(CHARGE.DUEDATE as date) >= @STARTDATE)) or (cast(FINANCIALTRANSACTION.DATE as date) >= @STARTDATE))) and
        ((@ENDDATE is null) or (((@USEDUEDATE = 1) and (cast(CHARGE.DUEDATE as date) < @ENDDATE)) or 
                                (((FINANCIALTRANSACTION.TYPECODE != 104) or (@USEDUEDATE = 0)) and (cast(FINANCIALTRANSACTION.DATE as date) <= @ENDDATE))));

  if (@TOTAL is null)
    set @TOTAL = 0;

  declare @TOTALAPPLIED money = 0;

  if (@INCLUDEAPPLICATIONS = 1)
  begin
    select
      @TOTALAPPLIED = sum(isnull(FINANCIALTRANSACTIONLINEITEM_APPLICATION.TRANSACTIONAMOUNT, 0))
    from dbo.FINANCIALTRANSACTION
    left outer join dbo.CHARGE
        on (CHARGE.ID = FINANCIALTRANSACTION.ID) and
           (@USEDUEDATE = 1)
    inner join dbo.FINANCIALTRANSACTIONLINEITEM
        on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
    left outer join dbo.FINANCIALTRANSACTIONLINEITEM as FINANCIALTRANSACTIONLINEITEM_APPLICATION
        on ((FINANCIALTRANSACTIONLINEITEM.ID = FINANCIALTRANSACTIONLINEITEM_APPLICATION.TARGETLINEITEMID) and
            (FINANCIALTRANSACTION.TYPECODE = 104)) or
            ((FINANCIALTRANSACTIONLINEITEM.ID = FINANCIALTRANSACTIONLINEITEM_APPLICATION.SOURCELINEITEMID) and
            (FINANCIALTRANSACTION.TYPECODE in (105, 106)))
    inner join dbo.FINANCIALTRANSACTION as FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT
        on FINANCIALTRANSACTIONLINEITEM_APPLICATION.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.ID
    inner join dbo.FINANCIALTRANSACTIONLINEITEM as FINANCIALTRANSACTIONLINEITEM_CHARGE
        on FINANCIALTRANSACTIONLINEITEM_APPLICATION.TARGETLINEITEMID = FINANCIALTRANSACTIONLINEITEM_CHARGE.ID
    inner join dbo.FINANCIALTRANSACTION as FINANCIALTRANSACTION_CHARGE
        on FINANCIALTRANSACTION_CHARGE.ID = FINANCIALTRANSACTIONLINEITEM_CHARGE.FINANCIALTRANSACTIONID
    where (FINANCIALTRANSACTION.TYPECODE = @TRANSACTIONTYPECODE) and
          (FINANCIALTRANSACTION.CONSTITUENTID = @CONSTITUENTID) and
          (FINANCIALTRANSACTIONLINEITEM_APPLICATION.DELETEDON IS NULL) and
          --The "GETEARLIESTTIME" date function has been inlined here for performance (the part with "cast(@DATE as date)")...

          ((@STARTDATE is null) or (((@USEDUEDATE = 1) and (cast(CHARGE.DUEDATE as date) >= @STARTDATE)) or (cast(FINANCIALTRANSACTION.DATE as date) >= @STARTDATE))) and
          ((@ENDDATE is null) or (((@USEDUEDATE = 1) and (cast(CHARGE.DUEDATE as date) < @ENDDATE)) or 
                                  (((FINANCIALTRANSACTION.TYPECODE != 104) or (@USEDUEDATE = 0)) and (cast(FINANCIALTRANSACTION.DATE as date) <= @ENDDATE)))) and
          ((@IGNOREAPPLICATIONDATE = 1) or
            --The "GETEARLIESTTIME" date function has been inlined here for performance (the part with "cast(@DATE as date)")...

            ((@STARTDATE is null) or 
            ((cast(FINANCIALTRANSACTION_CHARGE.DATE as date) >= cast(FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.DATE as date)) and (cast(FINANCIALTRANSACTION_CHARGE.DATE as date) >= @STARTDATE)) or 
            ((cast(FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.DATE as date) > cast(FINANCIALTRANSACTION_CHARGE.DATE as date)) and (cast(FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.DATE as date) >= @STARTDATE))) and 
            ((@ENDDATE is null) or 
            ((cast(FINANCIALTRANSACTION_CHARGE.DATE as date) >= cast(FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.DATE as date)) and (cast(FINANCIALTRANSACTION_CHARGE.DATE as date) <= @ENDDATE)) or
            ((cast(FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.DATE as date) > cast(FINANCIALTRANSACTION_CHARGE.DATE as date)) and (cast(FINANCIALTRANSACTION_RECEIVABLEPAYMENTCREDIT.DATE as date) <= @ENDDATE))));

    if (@TOTALAPPLIED is null)
      set @TOTALAPPLIED = 0;
  end

  return @TOTAL - @TOTALAPPLIED;
end