USP_KPIINSTANCE_GETLISTBYAPPUSERID

Returns a list of KPIs instances.

Parameters

Parameter Parameter Type Mode Description
@CURRENTAPPUSERID uniqueidentifier IN
@ASOFDATE datetime IN
@ONLYSHOWINSTANCESWITHVALUES bit IN
@MAXROWS int IN
@SITEFILTERMODE tinyint IN
@SITESSELECTED xml IN
@GOALSTATUS int IN
@CATEGORY nvarchar(200) IN
@TYPEID uniqueidentifier IN
@CONTEXTRECORDTYPE nvarchar(50) IN
@CONTEXTRECORDID nvarchar(100) IN

Definition

Copy


CREATE procedure dbo.[USP_KPIINSTANCE_GETLISTBYAPPUSERID]
(
  @CURRENTAPPUSERID uniqueidentifier,
  @ASOFDATE datetime = null,
  @ONLYSHOWINSTANCESWITHVALUES bit = 0,
  @MAXROWS int = 500,
  @SITEFILTERMODE tinyint = null,
  @SITESSELECTED xml = null,
  @GOALSTATUS int = null,
  @CATEGORY nvarchar(200) = null,
  @TYPEID uniqueidentifier = null,
  @CONTEXTRECORDTYPE nvarchar(50) = null,
  @CONTEXTRECORDID nvarchar(100) = null
)
as
  set nocount on;

  declare @LATESTTIME datetime;

  if @ASOFDATE is null set @ASOFDATE = getdate();

  set @LATESTTIME = dbo.[UFN_DATE_GETLATESTTIME](@ASOFDATE);

  declare @ISSYSADMIN bit;
  declare @SITEPRODUCTINSTALLED bit;

  set @ISSYSADMIN = dbo.[UFN_APPUSER_ISSYSADMIN](@CURRENTAPPUSERID);
  set @SITEPRODUCTINSTALLED = dbo.[UFN_INSTALLEDPRODUCTS_PRODUCTIS]('133f9bca-00f1-4007-9792-586b931340c6');

  select top (@MAXROWS)
    [KPIINSTANCE].[ID] as [KPIINSTANCEID],
    [KPIINSTANCE].[KPICATALOGID],
    [KPIINSTANCE].[NAME],
    [KPICATALOG].[GOALTYPECODE],
    [KPIINSTANCE].[GOALINDICATORTYPECODE],
    [KPIINSTANCE].[GOALAIMTYPECODE],
    [KPIINSTANCE].[GOALVALUE],
    [KPIINSTANCE].[GOALUPWARDLOWVALUE],
    [KPIINSTANCE].[GOALUPWARDMIDVALUE],
    [KPIINSTANCE].[GOALDOWNWARDMIDVALUE],
    [KPIINSTANCE].[GOALDOWNWARDHIGHVALUE],
    cast((case when [HISTORY].[VALUE] is null then 0 else 1 end) as bit) as [HASVALUE],
    [KPICATALOG].[GOALRETRIEVALTYPECODE],
    [HISTORY].[VALUE] as [KPIVALUE],
    [HISTORY].[ASOFDATE] as [CLOSESTASOFDATE],
    [KPIINSTANCE].[PARAMETERSXML],
    [RECORDTYPE].[NAME] as [CONTEXTRECORDTYPE],
    [KPIINSTANCE].[CONTEXTRECORDID],
    dbo.[UFN_SECURITY_APPUSER_GRANTED_KPI](@CURRENTAPPUSERID, [KPIINSTANCE].[KPICATALOGID]) as [USERHASRIGHTSTOKPI],
    [KPICATALOG].[DECIMALPLACES],
    case 
      when [KPIINSTANCE].[SITEFILTERENABLEDFORINSTANCE] = 1 
      then
      (
        select 
           dbo.[UDA_BUILDLIST]([SITE].[NAME]) as [SITES]
        from dbo.[KPIINSTANCESITE]
        inner join dbo.[SITE] on [KPIINSTANCESITE].[SITEID] = [SITE].[ID]
        where [KPIINSTANCESITE].[KPIINSTANCEID] = [KPIINSTANCE].[ID]
      )
      else ''
    end as [SITES],
    [KPICATALOG].[NAME] as [KPICATALOGNAME]
  from dbo.[KPIINSTANCE]
  inner join dbo.[KPICATALOG] on [KPIINSTANCE].[KPICATALOGID] = [KPICATALOG].[ID]
  left join dbo.[RECORDTYPE] on [KPICATALOG].[CONTEXTRECORDTYPEID] = [RECORDTYPE].[ID]
  outer apply (
    select top (1) [ID], [KPIINSTANCEID], [VALUE], [ASOFDATE]
    from dbo.[KPIINSTANCEHISTORY]
    where [KPIINSTANCEID] = [KPIINSTANCE].[ID]
    and [ASOFDATE] <= @LATESTTIME
    order by [ASOFDATE] desc
  ) as [HISTORY]
  where dbo.[UFN_SECURITY_APPUSER_GRANTED_KPIINSTANCE](@CURRENTAPPUSERID, [KPIINSTANCE].[ID]) = 1 
  and ((@ONLYSHOWINSTANCESWITHVALUES = 0 and [HISTORY].[ID] is null) or [HISTORY].[ID] is not null
  and
    (
      isnull(@SITEFILTERMODE, 0) = 0
      or exists
      (
        select top 1 1
        from dbo.[KPIINSTANCESITE]
        inner join dbo.[UFN_SITE_BUILDDATALISTSITEFILTER] (@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) as [VALIDSITE] on [KPIINSTANCESITE].[SITEID] = [VALIDSITE].[SITEID]
        where [KPIINSTANCESITE].[KPIINSTANCEID] = [KPIINSTANCE].[ID]
      )
    )
    and 
    (
      [KPICATALOG].[HASSITEFILTER] = 0
      or [KPIINSTANCE].[SITEFILTERENABLEDFORINSTANCE] = 0
      or @SITEPRODUCTINSTALLED = 0
      or @ISSYSADMIN = 1
      or exists
      (
        select top 1 1
        from dbo.[SYSTEMROLEAPPUSER]
        where [SYSTEMROLEAPPUSER].[APPUSERID] = @CURRENTAPPUSERID
        -- make sure the kpi instance is permissioned for this role 

        and exists 
        (
          select top 1 1 
          from dbo.[SYSTEMROLEKPIINSTANCE]
          where [SYSTEMROLEKPIINSTANCE].[SYSTEMROLEID] = [SYSTEMROLEAPPUSER].[SYSTEMROLEID]
          and [SYSTEMROLEKPIINSTANCE].[KPIINSTANCEID] = [KPIINSTANCE].[ID]
        )
        and
        (
          [SYSTEMROLEAPPUSER].[SECURITYMODECODE] = 0 -- all sites

          or
          (
            [SYSTEMROLEAPPUSER].[SECURITYMODECODE] = 1 -- no site

            and not exists (select top 1 1 from dbo.[KPIINSTANCESITE] where [KPIINSTANCEID] = [KPIINSTANCE].[ID])
          ) 
          or
          (
            [SYSTEMROLEAPPUSER].[SECURITYMODECODE] in (2, 3) -- records with one of these sites assigned or within a branch

            and exists
            (
              select top 1 1
              from dbo.[SITEPERMISSION]
              inner join dbo.[KPIINSTANCESITE] on [SITEPERMISSION].[SITEID] = [KPIINSTANCESITE].[SITEID]
              where [SITEPERMISSION].[SYSTEMROLEID] = [SYSTEMROLEAPPUSER].[SYSTEMROLEID]
              and [SITEPERMISSION].[APPUSERID] = [SYSTEMROLEAPPUSER].[APPUSERID]
              and [KPIINSTANCESITE].[KPIINSTANCEID] = [KPIINSTANCE].[ID]
            )
          )
        )       
      )
    )
    and
    (
      @GOALSTATUS is null
      or
      (
        @GOALSTATUS = 0 -- red

        and
        (
          (
            [KPIINSTANCE].[GOALAIMTYPECODE] = 0 -- high is good

            and [HISTORY].[VALUE] < [KPIINSTANCE].[GOALUPWARDLOWVALUE]
          )
          or
          (
            [KPIINSTANCE].[GOALAIMTYPECODE] = 1 -- low is good

            and [HISTORY].[VALUE] > [KPIINSTANCE].[GOALDOWNWARDHIGHVALUE]
          )
        )
      )
      or
      (
        @GOALSTATUS = 1 -- yellow

        and
        (
          (
            [KPIINSTANCE].[GOALAIMTYPECODE] = 0 -- high is good

            and [HISTORY].[VALUE] >= [KPIINSTANCE].[GOALUPWARDLOWVALUE]
            and [HISTORY].[VALUE] < [KPIINSTANCE].[GOALUPWARDMIDVALUE]
          )
          or
          (
            [KPIINSTANCE].[GOALAIMTYPECODE] = 1 -- low is good

            and [HISTORY].[VALUE] <= [KPIINSTANCE].[GOALDOWNWARDHIGHVALUE]
            and [HISTORY].[VALUE] > [KPIINSTANCE].[GOALDOWNWARDMIDVALUE]
          )
        )
      )
      or
      (
        @GOALSTATUS = 2 -- green

        and
        (
          (
            [KPIINSTANCE].[GOALAIMTYPECODE] = 0 -- high is good

            and [HISTORY].[VALUE] >= [KPIINSTANCE].[GOALUPWARDMIDVALUE]
          )
          or
          (
            [KPIINSTANCE].[GOALAIMTYPECODE] = 1 -- low is good

            and [HISTORY].[VALUE] <= [KPIINSTANCE].[GOALDOWNWARDMIDVALUE]
          )
        )
      )
    )
    and (@CATEGORY is null or [KPICATALOG].[UIFOLDER] like @CATEGORY + '%')
    and (@TYPEID is null or [KPICATALOG].[ID] = @TYPEID)
    and (@CONTEXTRECORDTYPE is null or [RECORDTYPE].[NAME] = @CONTEXTRECORDTYPE)
    and (@CONTEXTRECORDID is null or [KPIINSTANCE].[CONTEXTRECORDID] = @CONTEXTRECORDID)
  order by [KPIINSTANCE].[NAME];

  return 0;