USP_DATALIST_OPPORTUNITYPYRAMIDDESIGNATION

Returns the opportunity pyramid for a given designation.

Parameters

Parameter Parameter Type Mode Description
@STATUSCODE tinyint IN Status
@DESIGNATIONID uniqueidentifier IN Input parameter indicating the context ID for the data list.
@ORGPOSITIONSSELECTIONID uniqueidentifier IN Organizational team
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.
@SECURITYFEATUREID uniqueidentifier IN Input parameter indicating the ID of the feature to use for site security checking.
@SECURITYFEATURETYPE tinyint IN Input parameter indicating the type of the feature to use for site security checking.

Definition

Copy


        CREATE procedure dbo.USP_DATALIST_OPPORTUNITYPYRAMIDDESIGNATION(
          @STATUSCODE tinyint = 0,
          @DESIGNATIONID uniqueidentifier,
          @ORGPOSITIONSSELECTIONID uniqueidentifier = null,
          @CURRENTAPPUSERID uniqueidentifier = null,
          @SECURITYFEATUREID uniqueidentifier = null,
          @SECURITYFEATURETYPE tinyint = null
        ) as 
          set nocount on;

          if @ORGPOSITIONSSELECTIONID is null
            begin
            with DESIGNATIONS_CTE as (
              select D2.ID 
              from dbo.DESIGNATION D
                inner join dbo.DESIGNATION D2 on (D.DESIGNATIONLEVEL1ID = D2.DESIGNATIONLEVEL1ID
                      and (D.DESIGNATIONLEVEL2ID = D2.DESIGNATIONLEVEL2ID or D.DESIGNATIONLEVEL2ID is null)
                      and (D.DESIGNATIONLEVEL3ID = D2.DESIGNATIONLEVEL3ID or D.DESIGNATIONLEVEL3ID is null)
                      and (D.DESIGNATIONLEVEL4ID = D2.DESIGNATIONLEVEL4ID or D.DESIGNATIONLEVEL4ID is null)
                      and (D.DESIGNATIONLEVEL5ID = D2.DESIGNATIONLEVEL5ID or D.DESIGNATIONLEVEL5ID is null))
              where D.ID = @DESIGNATIONID
              ),

            AMOUNTS_CTE as (
              select R.ID,
                sum(
                case OD.BASECURRENCYID when R.BASECURRENCYID then 
                  OD.AMOUNT 
                else 
                  dbo.UFN_CURRENCY_CONVERT(OD.AMOUNT,dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(OD.BASECURRENCYID,R.BASECURRENCYID,getdate(),0,null)) 
                end
                ) as TOTALAMOUNT,
                count(distinct O.ID) as NUMOPPS
              from dbo.UFN_OPPORTUNITYAMOUNTRANGES_BYGROUPANDUSER(@CURRENTAPPUSERID) R 
              cross apply OPPORTUNITY O 
              inner join dbo.OPPORTUNITYDESIGNATION OD on O.ID = OD.OPPORTUNITYID
              inner join DESIGNATIONS_CTE D on OD.DESIGNATIONID = D.ID
              where (O.STATUSCODE = @STATUSCODE or (@STATUSCODE = 0 and O.STATUSCODE in (1,2,3)))
              and ((O.BASECURRENCYID = R.BASECURRENCYID and O.AMOUNT between R.LOWERLIMIT and R.UPPERLIMIT)
              or
              (O.BASECURRENCYID <> R.BASECURRENCYID and 
                coalesce(
                  dbo.UFN_CURRENCY_CONVERT(O.AMOUNT,dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(O.BASECURRENCYID,R.BASECURRENCYID,getdate(),0,null)),
                  0
                ) between R.LOWERLIMIT and R.UPPERLIMIT
              ))
              group by R.ID

            )

            select 
                R.NAME,
                R.LOWERLIMIT,
                R.UPPERLIMIT,
                coalesce(A.TOTALAMOUNT, 0) as TOTALAMOUNT,
                coalesce(A.NUMOPPS, 0) as NUMOPPS,
                R.BASECURRENCYID,
                CURRENCYINFO.CURRENCYSYMBOL,
                CURRENCYINFO.ISO4217,
                CURRENCYINFO.DECIMALDIGITS,
                CURRENCYINFO.SYMBOLDISPLAYSETTINGCODE
            from 
                dbo.UFN_OPPORTUNITYAMOUNTRANGES_BYGROUPANDUSER(@CURRENTAPPUSERID) R 
                left join AMOUNTS_CTE A on R.ID = A.ID
                outer apply dbo.UFN_CURRENCY_GETPROPERTIES(R.BASECURRENCYID) as CURRENCYINFO
            order by 
                R.LOWERLIMIT desc
            end
          else
            begin
            declare @IDS as table(ID uniqueidentifier);
            insert into @IDS exec USP_ORGANIZATIONHIERARCHY_IDSET_POSITIONHOLDERS @ORGPOSITIONSSELECTIONID, @CURRENTAPPUSERID;               

            with DESIGNATIONS_CTE as (
              select D2.ID 
              from dbo.DESIGNATION D
                inner join dbo.DESIGNATION D2 on (D.DESIGNATIONLEVEL1ID = D2.DESIGNATIONLEVEL1ID
                      and (D.DESIGNATIONLEVEL2ID = D2.DESIGNATIONLEVEL2ID or D.DESIGNATIONLEVEL2ID is null)
                      and (D.DESIGNATIONLEVEL3ID = D2.DESIGNATIONLEVEL3ID or D.DESIGNATIONLEVEL3ID is null)
                      and (D.DESIGNATIONLEVEL4ID = D2.DESIGNATIONLEVEL4ID or D.DESIGNATIONLEVEL4ID is null)
                      and (D.DESIGNATIONLEVEL5ID = D2.DESIGNATIONLEVEL5ID or D.DESIGNATIONLEVEL5ID is null))
              where D.ID = @DESIGNATIONID
              ),
            FUNDRAISERS_CTE as (
              select F.PROSPECTPLANID, F.FUNDRAISERID, OPH.DATEFROM, OPH.DATETO
              from (
                  select ID as PROSPECTPLANID,
                    PRIMARYMANAGERFUNDRAISERID as FUNDRAISERID
                  from dbo.PROSPECTPLAN 
                  where PRIMARYMANAGERFUNDRAISERID is not null
                  union all
                  select ID as PROSPECTPLANID,
                    SECONDARYMANAGERFUNDRAISERID as FUNDRAISERID
                  from dbo.PROSPECTPLAN 
                  where SECONDARYMANAGERFUNDRAISERID is not null
                  union all
                  select PROSPECTPLANID as PROSPECTPLANID,
                    FUNDRAISERID as FUNDRAISERID
                  from dbo.SECONDARYFUNDRAISER
                ) as F
              inner join dbo.ORGANIZATIONPOSITIONHOLDER OPH 
                on OPH.CONSTITUENTID = F.FUNDRAISERID
              inner join @IDS as SELECTION on OPH.[ID] = SELECTION.[ID]
              ),  

            AMOUNTS_CTE as (
              select R.ID,
                sum(
                case OD.BASECURRENCYID when R.BASECURRENCYID then 
                  OD.AMOUNT 
                else 
                  dbo.UFN_CURRENCY_CONVERT(OD.AMOUNT,dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(OD.BASECURRENCYID,R.BASECURRENCYID,getdate(),0,null)) 
                end
                ) as TOTALAMOUNT,
                count(distinct O.ID) as NUMOPPS
              from dbo.UFN_OPPORTUNITYAMOUNTRANGES_BYGROUPANDUSER(@CURRENTAPPUSERID) R 
              cross apply OPPORTUNITY O 
              inner join dbo.OPPORTUNITYDESIGNATION OD on O.ID = OD.OPPORTUNITYID
              inner join dbo.PROSPECTPLAN on PROSPECTPLAN.ID = O.PROSPECTPLANID
              inner join DESIGNATIONS_CTE D on OD.DESIGNATIONID = D.ID
                where (O.STATUSCODE = @STATUSCODE or (@STATUSCODE = 0 and O.STATUSCODE in (1,2,3)))
                  and exists (select PROSPECTPLANID from FUNDRAISERS_CTE F 
                          where F.PROSPECTPLANID = O.PROSPECTPLANID 
                            and O.ASKDATE between F.DATEFROM and coalesce(F.DATETO, O.ASKDATE))
                  and ((O.BASECURRENCYID = R.BASECURRENCYID and O.AMOUNT between R.LOWERLIMIT and R.UPPERLIMIT)
                    or
                    (O.BASECURRENCYID <> R.BASECURRENCYID and 
                      coalesce(
                        dbo.UFN_CURRENCY_CONVERT(O.AMOUNT,dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(O.BASECURRENCYID,R.BASECURRENCYID,getdate(),0,null)),
                        0
                      ) between R.LOWERLIMIT and R.UPPERLIMIT
                    ))
                                  and (
                                      select count(*
                                      from dbo.UFN_SITEID_MAPFROM_PROSPECTPLANID(PROSPECTPLAN.ID) as PROSPECTPLANSITE 
                                      where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[PROSPECTPLANSITE].[SITEID] or (SITEID is null and [PROSPECTPLANSITE].[SITEID] is null)))
                                  ) > 0
              group by R.ID
            )

            select 
                R.NAME,
                R.LOWERLIMIT,
                R.UPPERLIMIT,
                coalesce(A.TOTALAMOUNT, 0) as TOTALAMOUNT,
                coalesce(A.NUMOPPS, 0) as NUMOPPS,
                R.BASECURRENCYID,
                CURRENCYINFO.CURRENCYSYMBOL,
                CURRENCYINFO.ISO4217,
                CURRENCYINFO.DECIMALDIGITS,
                CURRENCYINFO.SYMBOLDISPLAYSETTINGCODE
            from 
                dbo.UFN_OPPORTUNITYAMOUNTRANGES_BYGROUPANDUSER(@CURRENTAPPUSERID) R 
                left join AMOUNTS_CTE A on R.ID = A.ID
                outer apply dbo.UFN_CURRENCY_GETPROPERTIES(R.BASECURRENCYID) as CURRENCYINFO
            order by 
                R.LOWERLIMIT desc

            end