UFN_OPPORTUNITY_AMOUNTINCURRENCY_BULK

Summary of opportunities and asks.

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@CURRENCYID uniqueidentifier IN
@ORGANIZATIONCURRENCYID uniqueidentifier IN

Definition

Copy


CREATE function dbo.UFN_OPPORTUNITY_AMOUNTINCURRENCY_BULK( 
    @CURRENCYID uniqueidentifier,
    @ORGANIZATIONCURRENCYID uniqueidentifier
)
returns table
as return(

    select  OPPORTUNITY.ID, OPPORTUNITY.BASECURRENCYID, OPPORTUNITY.STATUSCODE, OPPORTUNITY.DATEADDED, 
                 OPPORTUNITY.ORGANIZATIONEXPECTEDASKAMOUNT,OPPORTUNITY.ORGANIZATIONASKAMOUNT,OPPORTUNITY.PROSPECTPLANID,
                 OPPORTUNITY.ASKDATE,OPPORTUNITY.EXPECTEDASKDATE, OPPORTUNITY.RESPONSEDATE,
        coalesce (
            (case when STATUSCODE = 3 then  -- Accepted        

              coalesce((
                    select 
                        case when (@CURRENCYID is null) or (@CURRENCYID = @ORGANIZATIONCURRENCYID) then sum(ORGANIZATIONAMOUNT)
                        else sum(AMOUNT)
                        end
                    from
                        dbo.OPPORTUNITYDESIGNATION
                    where
                        OPPORTUNITYID=OPPORTUNITY.ID
                ), OPPORTUNITY.ACCEPTEDASKAMOUNT)
            else
                case when (@CURRENCYID is null) or (@CURRENCYID = @ORGANIZATIONCURRENCYID) then
                    case when ORGANIZATIONASKAMOUNT > 0 then ORGANIZATIONASKAMOUNT
                    else ORGANIZATIONEXPECTEDASKAMOUNT
                    end
                else
                    case when ASKAMOUNT > 0 then ASKAMOUNT
                    else EXPECTEDASKAMOUNT
                    end
                end
            end),
            0
        ) as AMOUNTINCURRENCY
    from
        dbo.OPPORTUNITY
    where @CURRENCYID is null 
     or (@CURRENCYID = @ORGANIZATIONCURRENCYID)
     or (@CURRENCYID = OPPORTUNITY.BASECURRENCYID)

    union all

    select OPPORTUNITY.ID, OPPORTUNITY.BASECURRENCYID, OPPORTUNITY.STATUSCODE, OPPORTUNITY.DATEADDED, 
             OPPORTUNITY.ORGANIZATIONEXPECTEDASKAMOUNT,OPPORTUNITY.ORGANIZATIONASKAMOUNT,OPPORTUNITY.PROSPECTPLANID,
             OPPORTUNITY.ASKDATE,OPPORTUNITY.EXPECTEDASKDATE, OPPORTUNITY.RESPONSEDATE,
        coalesce(
        case when OPPORTUNITY.STATUSCODE = 3 then  -- Accepted

             case when LATESTEXCHANGERATE.ID is not null then
                    dbo.UFN_CURRENCY_CONVERT(OPPORTUNITY.DESIGNATIONORGAMOUNT,[LATESTEXCHANGERATE].ID)
                    --dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(OPPORTUNITY.DESIGNATIONORGAMOUNT, [LATESTEXCHANGERATE].RATE), @DECIMALDIGITS, @ROUNDINGTYPECODE)

                else
                    dbo.UFN_CURRENCY_CONVERTINVERSE(OPPORTUNITY.DESIGNATIONORGAMOUNT,[LATESTEXCHANGERATE].ID)
             end
         else
             case when ORGANIZATIONASKAMOUNT > 0 then 
                case when LATESTEXCHANGERATE.ID is not null then
                    dbo.UFN_CURRENCY_CONVERT(OPPORTUNITY.ORGANIZATIONASKAMOUNT, LATESTEXCHANGERATE.ID)
                    --dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(OPPORTUNITY.ORGANIZATIONASKAMOUNT, LATESTEXCHANGERATE.RATE), @DECIMALDIGITS, @ROUNDINGTYPECODE)

                else 
                    dbo.UFN_CURRENCY_CONVERTINVERSE(OPPORTUNITY.ORGANIZATIONASKAMOUNT, LATESTEXCHANGERATE.ID)
                    --dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(OPPORTUNITY.ORGANIZATIONASKAMOUNT, cast((1 / LATESTINVERSEEXCHANGERATE.RATE) as decimal(20,8))), @DECIMALDIGITS, @ROUNDINGTYPECODE)

                end
             else 
                case when LATESTEXCHANGERATE.ID is not null then 
                    dbo.UFN_CURRENCY_CONVERT(OPPORTUNITY.ORGANIZATIONEXPECTEDASKAMOUNT, LATESTEXCHANGERATE.ID)
                    --dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(OPPORTUNITY.ORGANIZATIONEXPECTEDASKAMOUNT, LATESTEXCHANGERATE.RATE), @DECIMALDIGITS, @ROUNDINGTYPECODE)

                else 
                    dbo.UFN_CURRENCY_CONVERTINVERSE(OPPORTUNITY.ORGANIZATIONEXPECTEDASKAMOUNT, LATESTEXCHANGERATE.ID)
                    --dbo.UFN_CURRENCY_ROUND(dbo.UFN_CURRENCY_APPLYRATE(OPPORTUNITY.ORGANIZATIONEXPECTEDASKAMOUNT, cast((1 / LATESTINVERSEEXCHANGERATE.RATE) as decimal(20,8))), @DECIMALDIGITS, @ROUNDINGTYPECODE)

                end
             end
         end,
             0
        ) as AMOUNTINCURRENCY
    from (select OPPORTUNITY.ID, OPPORTUNITY.BASECURRENCYID, OPPORTUNITY.STATUSCODE, OPPORTUNITY.DATEADDED, 
                 OPPORTUNITY.ORGANIZATIONEXPECTEDASKAMOUNT,OPPORTUNITY.ORGANIZATIONASKAMOUNT,OPPORTUNITY.PROSPECTPLANID,
                 OPPORTUNITY.ASKDATE,OPPORTUNITY.EXPECTEDASKDATE, OPPORTUNITY.RESPONSEDATE,
                 (select SUM (OPPORTUNITYDESIGNATION.ORGANIZATIONAMOUNT) from OPPORTUNITYDESIGNATION
                  where OPPORTUNITYDESIGNATION.OPPORTUNITYID = OPPORTUNITY.ID) DESIGNATIONORGAMOUNT
            from dbo.OPPORTUNITY
            ) as OPPORTUNITY
    outer apply
    (
        select
            ID
        from
            dbo.CURRENCYEXCHANGERATE
        where
            CURRENCYEXCHANGERATE.FROMCURRENCYID = @ORGANIZATIONCURRENCYID 
            and CURRENCYEXCHANGERATE.TOCURRENCYID = @CURRENCYID
            and CURRENCYEXCHANGERATE.TYPECODE in (0,1)
            and CURRENCYEXCHANGERATE.ISLATESTRATEFORASOFDATE = 1
            and CURRENCYEXCHANGERATE.ASOFDATESDTZ <= OPPORTUNITY.DATEADDED
            and CURRENCYEXCHANGERATE.NEXTRATEASOFDATEORMAXSDTZ >= OPPORTUNITY.DATEADDED 
    ) LATESTEXCHANGERATE
    outer apply
    (
        select
            ID
        from
            dbo.CURRENCYEXCHANGERATE
        where
            CURRENCYEXCHANGERATE.FROMCURRENCYID = @CURRENCYID
            and CURRENCYEXCHANGERATE.TOCURRENCYID = @ORGANIZATIONCURRENCYID
            and CURRENCYEXCHANGERATE.TYPECODE in (0,1)
            and CURRENCYEXCHANGERATE.ISLATESTRATEFORASOFDATE = 1
            and CURRENCYEXCHANGERATE.ASOFDATESDTZ <= OPPORTUNITY.DATEADDED
            and CURRENCYEXCHANGERATE.NEXTRATEASOFDATEORMAXSDTZ >= OPPORTUNITY.DATEADDED 
    ) LATESTINVERSEEXCHANGERATE
    where (@CURRENCYID is not null
    and (@CURRENCYID <> @ORGANIZATIONCURRENCYID)
    and @CURRENCYID <> OPPORTUNITY.BASECURRENCYID        
);