USP_DATALIST_APPUSERWORKSPACEKPI

Returns a list of KPIs for the application user's workspace.

Parameters

Parameter Parameter Type Mode Description
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.
@SITEFILTERMODE tinyint IN
@SITESSELECTED xml IN

Definition

Copy


CREATE procedure dbo.USP_DATALIST_APPUSERWORKSPACEKPI
(
    @CURRENTAPPUSERID uniqueidentifier,
    @SITEFILTERMODE tinyint = 0,
    @SITESSELECTED xml = null
)
as
    set nocount on;

    declare @ISSYSADMIN bit;
    select @ISSYSADMIN = [ISSYSADMIN] from dbo.[APPUSER] where [ID] = @CURRENTAPPUSERID;

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

    with 
    [USERKPIS] as 
    (
        select distinct [KPIINSTANCEID]
        from
            (
                -- Gets all KPI instances directly added on app-user's system role
                select
                    distinct [SYSTEMROLEKPIINSTANCE].[KPIINSTANCEID]
                from
                    dbo.[SYSTEMROLEKPIINSTANCE]
                    inner join dbo.[SYSTEMROLEAPPUSER] on [SYSTEMROLEKPIINSTANCE].[SYSTEMROLEID] = [SYSTEMROLEAPPUSER].[SYSTEMROLEID]
                where
                    [SYSTEMROLEAPPUSER].[APPUSERID] = @CURRENTAPPUSERID

                union all

                -- Gets all KPI instances of the KPI types to which the app-user
                -- has been granted permission through their assigned system roles
                select
                    [KPIINSTANCE].[ID]
                from
                    dbo.[V_SECURITY_SYSTEMROLEASSIGNMENT_USER_KPI] [SECURITYVIEW]
                    inner join dbo.[KPIINSTANCE] on [SECURITYVIEW].[KPICATALOGID] = [KPIINSTANCE].[KPICATALOGID]
                where
                    [SECURITYVIEW].[APPUSERID] = @CURRENTAPPUSERID
                group by
                    [KPIINSTANCE].[ID]
                having 
                    min(cast([SECURITYVIEW].[GRANTORDENY] as tinyint)) = 1
            ) as [KPI]
    )
    select
        'res:' + case
            when HISTORY.VALUE is null then 'roadblank'
            when KPIINSTANCE.GOALAIMTYPECODE = 0 then 
                case
                    when HISTORY.VALUE < case when KPIINSTANCE.GOALAIMTYPECODE = 0 then KPIINSTANCE.GOALUPWARDLOWVALUE else KPIINSTANCE.GOALDOWNWARDHIGHVALUE end then 'road0'
                    when HISTORY.VALUE < case when KPIINSTANCE.GOALAIMTYPECODE = 0 then KPIINSTANCE.GOALUPWARDMIDVALUE else KPIINSTANCE.GOALDOWNWARDMIDVALUE end then 'road1'
                    else 'road2'
                end
            when KPIINSTANCE.GOALAIMTYPECODE = 1 then
                case
                    when HISTORY.VALUE > case when KPIINSTANCE.GOALAIMTYPECODE = 0 then KPIINSTANCE.GOALUPWARDLOWVALUE else KPIINSTANCE.GOALDOWNWARDHIGHVALUE end then 'road0'
                    when HISTORY.VALUE > case when KPIINSTANCE.GOALAIMTYPECODE = 0 then KPIINSTANCE.GOALUPWARDMIDVALUE else KPIINSTANCE.GOALDOWNWARDMIDVALUE end then 'road1'
                    else 'road2'
                end
            else ''
        end [STATUSIMAGE],
        KPIINSTANCE.ID,
        KPIINSTANCE.NAME,
        KPIINSTANCE.DESCRIPTION,
        KPICATALOG.NAME KPINAME
    from
        dbo.KPIINSTANCE
    inner join
        dbo.KPICATALOG on KPIINSTANCE.KPICATALOGID = KPICATALOG.ID
    outer apply (select top (1) ID, KPIINSTANCEID, VALUE, ASOFDATE
                             from dbo.KPIINSTANCEHISTORY
                             where KPIINSTANCEID = KPIINSTANCE.ID
                             and ASOFDATE <= dbo.UFN_DATE_GETLATESTTIME(getDate())
                             order by ASOFDATE desc) as HISTORY
    where
         (
            @ISSYSADMIN = 1
            or exists
            (
                select [KPIINSTANCEID]
                from [USERKPIS]
                where [USERKPIS].[KPIINSTANCEID] = [KPIINSTANCE].[ID]
            )
        )  --Security check
        and
        (
            @ISSYSADMIN = 1 or
            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]
                        )
                    )
                )
            )
        )
    order by
        KPIINSTANCE.NAME;

    return 0;