UFN_PLEDGE_GETAMOUNTPAIDINCURRENCY_BULK

Returns the amount paid for all pledges in the given currency.

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@CURRENCYID uniqueidentifier IN
@ORGANIZATIONCURRENCYID uniqueidentifier IN
@DECIMALDIGITS tinyint IN
@ROUNDINGTYPECODE tinyint IN
@ASOFDATE datetime IN
@ORIGINCODE tinyint IN
@CURRENCYCODE tinyint IN

Definition

Copy


CREATE function dbo.UFN_PLEDGE_GETAMOUNTPAIDINCURRENCY_BULK
(
    -- If you want to convert to...

    --    The base currency of each row:

    --        set @CURRENCYCODE = 0

    --        set @ORGANIZATIONCURRENCYID, @ASOFDATE, and @ORIGINCODE appropriately

    --    The transaction currency of each row:

    --        set @CURRENCYCODE = 2

    --        set @ORGANIZATIONCURRENCYID, @ASOFDATE and @ORIGINCODE appropriately

    --    The organization currency:

    --        set @CURRENCYCODE = anything but 0 or 2

    --        set @CURRENCYID = the org currency's ID

    --        set @DECIMALDIGITS and @ROUNDINGTYPECODE according to the org currency

    --        set @ORGANIZATIONCURRENCYID, @ASOFDATE and @ORIGINCODE appropriately

    --    An arbitrary currency:

    --        set @CURRENCYCODE = anything but 0 or 2

    --        set @CURRENCYID = the currency's ID

    --        set @DECIMALDIGITS and @ROUNDINGTYPECODE according to the currency

    --        set @ORGANIZATIONCURRENCYID, @ASOFDATE and @ORIGINCODE appropriately

    @CURRENCYID uniqueidentifier,
    @ORGANIZATIONCURRENCYID uniqueidentifier,
    @DECIMALDIGITS tinyint,
    @ROUNDINGTYPECODE tinyint,
    @ASOFDATE datetime,
    @ORIGINCODE tinyint,
    @CURRENCYCODE tinyint
)
returns table
as
return
(
  with REVENUECTE as (
    select
      PLEDGE.ID as [PLEDGEID],
      SUM(INSTALLMENTSPLITPAYMENT.AMOUNT) [AMOUNTPAID],
      PLEDGE.TRANSACTIONCURRENCYID,
      V.BASECURRENCYID,
      BASEEXCHANGERATE.RATE as BASERATE,
      ORGANIZATIONEXCHANGERATE.RATE as ORGANIZATIONRATE,
      case @CURRENCYCODE
        when 0 then V.BASECURRENCYID
        when 2 then PLEDGE.TRANSACTIONCURRENCYID
        else @CURRENCYID
      end as CURRENCYID,
      cast(PLEDGE.DATE as datetime) as [DATE]
    from
      dbo.INSTALLMENTSPLITPAYMENT
      inner join dbo.FINANCIALTRANSACTION as PLEDGE on PLEDGE.ID = INSTALLMENTSPLITPAYMENT.PLEDGEID
      left outer join  dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I V with (noexpand) on PLEDGE.ID = V.FINANCIALTRANSACTIONID
      inner join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT on REVENUESPLIT.ID = INSTALLMENTSPLITPAYMENT.PAYMENTID
      inner join dbo.FINANCIALTRANSACTION as PAYMENT on PAYMENT.ID = REVENUESPLIT.FINANCIALTRANSACTIONID
      left join dbo.CURRENCYEXCHANGERATE BASEEXCHANGERATE on BASEEXCHANGERATE.ID = PLEDGE.BASEEXCHANGERATEID
      left join dbo.CURRENCYEXCHANGERATE ORGANIZATIONEXCHANGERATE on ORGANIZATIONEXCHANGERATE.ID = PLEDGE.ORGEXCHANGERATEID
    where PLEDGE.TYPECODE in (0,1,2,3,4,5,6,7,8,9) and PAYMENT.TYPECODE in (0,1,2,3,4,5,6,7,8,9) and PLEDGE.DELETEDON is null and REVENUESPLIT.DELETEDON is null and PAYMENT.DELETEDON is null and
      cast(PAYMENT.DATE as datetime) <= @ASOFDATE
    group by
      PLEDGE.ID, 
      V.BASECURRENCYID,
      PLEDGE.TRANSACTIONCURRENCYID,
      BASEEXCHANGERATE.RATE,
      ORGANIZATIONEXCHANGERATE.RATE,
      cast(PLEDGE.DATE as datetime)
    )

    -- Transaction currency

    select            
      REVENUECTE.PLEDGEID, 
      REVENUECTE.AMOUNTPAID as AMOUNTPAIDINCURRENCY,
      REVENUECTE.TRANSACTIONCURRENCYID,
      REVENUECTE.BASECURRENCYID
    from 
      REVENUECTE
    where 
      (REVENUECTE.CURRENCYID is null
      or REVENUECTE.CURRENCYID = REVENUECTE.TRANSACTIONCURRENCYID

    -- Base or org currency

    union all        
    select 
      REVENUECTE.PLEDGEID,
      case
        when REVENUECTE.CURRENCYID = REVENUECTE.BASECURRENCYID
          then dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(REVENUECTE.AMOUNTPAID, REVENUECTE.BASERATE), BASECURRENCY.DECIMALDIGITS, BASECURRENCY.ROUNDINGTYPECODE)
        when REVENUECTE.CURRENCYID = @ORGANIZATIONCURRENCYID then                                                        
          case @ORIGINCODE
            when 0 then 
              case
                when REVENUECTE.TRANSACTIONCURRENCYID = REVENUECTE.BASECURRENCYID then 
                  dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(REVENUECTE.AMOUNTPAID, REVENUECTE.ORGANIZATIONRATE), @DECIMALDIGITS, @ROUNDINGTYPECODE)
                else 
                  dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(REVENUECTE.AMOUNTPAID, REVENUECTE.BASERATE), BASECURRENCY.DECIMALDIGITS, BASECURRENCY.ROUNDINGTYPECODE), REVENUECTE.ORGANIZATIONRATE), @DECIMALDIGITS, @ROUNDINGTYPECODE)
              end
            when 1 then 
              dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(REVENUECTE.AMOUNTPAID, REVENUECTE.ORGANIZATIONRATE), @DECIMALDIGITS, @ROUNDINGTYPECODE)
          end
        else 0
      end as [AMOUNTPAIDINCURRENCY],
      REVENUECTE.TRANSACTIONCURRENCYID,
      REVENUECTE.BASECURRENCYID
    from 
      REVENUECTE
      left join dbo.CURRENCY BASECURRENCY on BASECURRENCY.ID = REVENUECTE.BASECURRENCYID
    where 
      (REVENUECTE.CURRENCYID is not null)
      and (REVENUECTE.CURRENCYID <> REVENUECTE.TRANSACTIONCURRENCYID)
      and (REVENUECTE.CURRENCYID = @ORGANIZATIONCURRENCYID
        or REVENUECTE.CURRENCYID = REVENUECTE.BASECURRENCYID)

    -- Arbitrary currency

    union all        
    select 
      REVENUECTE.PLEDGEID,
      case
        when LATESTEXCHANGERATE.RATE is not null then 
          dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(REVENUECTE.AMOUNTPAID, LATESTEXCHANGERATE.RATE), @DECIMALDIGITS, @ROUNDINGTYPECODE)
        when LATESTINVERSEEXCHANGERATE.RATE is not null then 
          dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(REVENUECTE.AMOUNTPAID, cast((1 / LATESTINVERSEEXCHANGERATE.RATE) as decimal(20,8))), @DECIMALDIGITS, @ROUNDINGTYPECODE)
        else 0
      end AS [AMOUNTPAIDINCURRENCY],
      REVENUECTE.TRANSACTIONCURRENCYID,
      REVENUECTE.BASECURRENCYID
    from 
      REVENUECTE
      outer apply (
        select
          RATE
        from
          dbo.CURRENCYEXCHANGERATE
        where
          CURRENCYEXCHANGERATE.FROMCURRENCYID = REVENUECTE.TRANSACTIONCURRENCYID 
          and CURRENCYEXCHANGERATE.TOCURRENCYID = REVENUECTE.CURRENCYID
          and CURRENCYEXCHANGERATE.TYPECODE in (0,1)
          and CURRENCYEXCHANGERATE.ISLATESTRATEFORASOFDATE = 1
          and CURRENCYEXCHANGERATE.ASOFDATESDTZ <= dateadd(ms, 86399996, REVENUECTE.DATE)
          and CURRENCYEXCHANGERATE.NEXTRATEASOFDATEORMAXSDTZ >= dateadd(ms, 86399996, REVENUECTE.DATE
      ) LATESTEXCHANGERATE
      outer apply (
        select
          RATE
        from
          dbo.CURRENCYEXCHANGERATE
        where
          CURRENCYEXCHANGERATE.FROMCURRENCYID = REVENUECTE.CURRENCYID
          and CURRENCYEXCHANGERATE.TOCURRENCYID = REVENUECTE.TRANSACTIONCURRENCYID
          and CURRENCYEXCHANGERATE.TYPECODE in (0,1)
          and CURRENCYEXCHANGERATE.ISLATESTRATEFORASOFDATE = 1
          and CURRENCYEXCHANGERATE.ASOFDATESDTZ <= dateadd(ms, 86399996, REVENUECTE.DATE)
          and CURRENCYEXCHANGERATE.NEXTRATEASOFDATEORMAXSDTZ >= dateadd(ms, 86399996, REVENUECTE.DATE
      ) LATESTINVERSEEXCHANGERATE
    where 
      (REVENUECTE.CURRENCYID is not null)
      and REVENUECTE.CURRENCYID <> REVENUECTE.TRANSACTIONCURRENCYID
      and REVENUECTE.CURRENCYID <> REVENUECTE.BASECURRENCYID
      and REVENUECTE.CURRENCYID <> @ORGANIZATIONCURRENCYID
 )