UFN_RECOGNITIONPROGRAM_GETREVENUERECOGNITION_INCURRENCY

Returns all valid revenue recognitions in the given currency, for the supplied recognition program.

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@PROGRAMID uniqueidentifier IN
@STARTDATE datetime IN
@PROCESSDATE datetime IN
@PLANNEDGIFTCODE tinyint IN
@REVENUESELECTIONID uniqueidentifier IN
@CURRENCYID uniqueidentifier IN
@ORGANIZATIONCURRENCYID uniqueidentifier IN
@DECIMALDIGITS tinyint IN
@ROUNDINGTYPECODE tinyint IN

Definition

Copy


CREATE function dbo.UFN_RECOGNITIONPROGRAM_GETREVENUERECOGNITION_INCURRENCY
(
  @PROGRAMID uniqueidentifier,
  @STARTDATE datetime,
  @PROCESSDATE datetime,
  @PLANNEDGIFTCODE tinyint,
  @REVENUESELECTIONID uniqueidentifier,
  @CURRENCYID uniqueidentifier,
  @ORGANIZATIONCURRENCYID uniqueidentifier,
  @DECIMALDIGITS tinyint,
  @ROUNDINGTYPECODE tinyint
)
returns table
as
return
(
  select 
    RREC.CONSTITUENTID,
    case
      when R.TYPECODE = 4 and @PLANNEDGIFTCODE = 2 then 0
      else RREC.AMOUNTINCURRENCY
    end as AMOUNT,
    --The "GETEARLIESTTIME" date function has been inlined here for performance (the part with "cast(@DATE as date)")...

    dateadd(s, row_number() over(partition by RREC.CONSTITUENTID order by RREC.CONSTITUENTID), cast(RREC.EFFECTIVEDATE as date)) as EFFECTIVEDATE,
    case
      when R.TYPECODE = 4 and @PLANNEDGIFTCODE = 2 then RREC.AMOUNTINCURRENCY -- Separate minimum amount for planned gifts

      else 0
    end as PLANNEDGIFTAMOUNT,
    null as YEARSTART,
    null as YEAREND,
    RREC.ID as REVENUERECOGNITIONID
  from dbo.UFN_REVENUERECOGNITION_GETAMOUNTINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE) RREC
  inner join dbo.FINANCIALTRANSACTIONLINEITEM RS with (nolock) on RREC.REVENUESPLITID = RS.ID
  inner join dbo.REVENUESPLIT_EXT RSE with (nolock) on RSE.ID = RS.ID
  inner join dbo.FINANCIALTRANSACTION R with (nolock) on RS.FINANCIALTRANSACTIONID = R.ID
  where
    RS.TYPECODE <> 1
    and R.DELETEDON is null 
    and RS.DELETEDON is null
    and (RREC.EFFECTIVEDATE >= @STARTDATE or @STARTDATE is null
    and (RREC.EFFECTIVEDATE <= @PROCESSDATE or @PROCESSDATE is null)
    and(
      exists(
        select RECOGNITIONPROGRAM.ID
        from dbo.RECOGNITIONPROGRAM with (nolock)
        cross apply GIFTTYPESFILTER.nodes('/GIFTTYPESFILTER/ITEM') T(c)
        where 
          RECOGNITIONPROGRAM.ID = @PROGRAMID 
          and(
            (R.TYPECODE = 0 and (T.c.value('(TYPECODEID)[1]','tinyint') = RSE.APPLICATIONCODE)) or -- Payment

            (T.c.value('(TYPECODEID)[1]','tinyint') = 21 and R.TYPECODE = 1) or --Pledge

            (T.c.value('(TYPECODEID)[1]','tinyint') = 22 and R.TYPECODE = 2) or --Recurring Gift

            (T.c.value('(TYPECODEID)[1]','tinyint') = 23 and R.TYPECODE = 3) or -- Matching Gift Claim

            (T.c.value('(TYPECODEID)[1]','tinyint') = 24 and R.TYPECODE = 7) --Auction donations

          )
      ) 
      or(R.TYPECODE = 4 and @PLANNEDGIFTCODE <> 0) -- Planned Gift, not separate

    )
    and(
      (
        select count(DESIGNATIONID) from dbo.RECOGNITIONPROGRAMDESIGNATION RPD with (nolock)
        where RPD.RECOGNITIONPROGRAMID = @PROGRAMID
      ) = 0 
      or exists(
        select ID from dbo.UFN_RECOGNITIONPROGRAM_GETDESIGNATIONS_ALL(@PROGRAMID) DS
        where RSE.DESIGNATIONID = DS.ID
      )
    )
    and(
      @REVENUESELECTIONID is null 
      or exists(
        select 1 from dbo.UFN_IDSETREADER_GETRESULTS_GUID(@REVENUESELECTIONID) as SEL
        where SEL.ID = R.ID
      )
    )
    and dbo.UFN_RECOGNITIONPROGRAM_VALIDCONSTITUENT(@PROGRAMID, RREC.CONSTITUENTID) = 1
);