USP_KPIINSTANCE_GETLISTBYKPIDASHBOARDPAGETABID

Returns a list of KPI instances for a given KPI dashboard page tab.

Parameters

Parameter Parameter Type Mode Description
@CURRENTAPPUSERID uniqueidentifier IN
@KPIDASHBOARDPAGETABID uniqueidentifier IN
@STARTDATE datetime IN
@ENDDATE datetime IN
@CONTEXTRECORDTYPE nvarchar(255) IN
@CONTEXTRECORDID nvarchar(100) IN
@MAXROWS int IN

Definition

Copy


CREATE procedure dbo.USP_KPIINSTANCE_GETLISTBYKPIDASHBOARDPAGETABID(@CURRENTAPPUSERID uniqueidentifier,
    @KPIDASHBOARDPAGETABID uniqueidentifier,
    @STARTDATE datetime,
    @ENDDATE datetime,
    @CONTEXTRECORDTYPE nvarchar(255),
    @CONTEXTRECORDID nvarchar(100),
    @MAXROWS int)
as
    set nocount on;

    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.KPICATALOGID,
        KPIINSTANCE.ID KPIINSTANCEID,
        KPIINSTANCE.NAME,
        KPICATALOG.GOALTYPECODE,
        KPICATALOG.GOALTYPE,
        KPICATALOG.GOALRETRIEVALTYPECODE,
        KPIINSTANCE.GOALVALUE,
        KPIINSTANCE.GOALINDICATORTYPECODE,
        KPIINSTANCE.GOALAIMTYPECODE,
        KPIINSTANCE.GOALVALUE,
        KPIINSTANCE.GOALUPWARDLOWVALUE,
        KPIINSTANCE.GOALUPWARDMIDVALUE,
        KPIINSTANCE.GOALDOWNWARDMIDVALUE,
        KPIINSTANCE.GOALDOWNWARDHIGHVALUE,
        KPIINSTANCEHISTORY.VALUE KPIVALUE,
        case when KPIINSTANCEHISTORY.VALUE is null then convert(bit, 0)
            else convert(bit, 1) end HASVALUE,
        KPIINSTANCEHISTORY.ASOFDATE CLOSESTASOFDATE,
        KPIINSTANCE.PARAMETERSXML,
        (select top(1) KPIINSTANCEMILESTONE.ASOFDATE from dbo.KPIINSTANCEMILESTONE
            where KPIINSTANCEMILESTONE.ASOFDATE <= KPIINSTANCEHISTORY.ASOFDATE
            order by KPIINSTANCEMILESTONE.ASOFDATE desc) MILESTONEASOFDATE,
        (select top(1) KPIINSTANCEMILESTONE.VALUE from dbo.KPIINSTANCEMILESTONE
            where KPIINSTANCEMILESTONE.ASOFDATE <= KPIINSTANCEHISTORY.ASOFDATE
            order by KPIINSTANCEMILESTONE.ASOFDATE desc) MILESTONEVALUE,
        KPICATALOG.DECIMALPLACES
    from dbo.KPIINSTANCE
        left join dbo.KPIINSTANCEHISTORY on KPIINSTANCE.ID = KPIINSTANCEHISTORY.KPIINSTANCEID
        inner join dbo.KPICATALOG on KPIINSTANCE.KPICATALOGID = KPICATALOG.ID
        left join dbo.KPIDASHBOARDPAGETABKPIINSTANCE on KPIINSTANCE.ID = KPIDASHBOARDPAGETABKPIINSTANCE.KPIINSTANCEID and KPIDASHBOARDPAGETABKPIINSTANCE.KPIDASHBOARDPAGETABID = @KPIDASHBOARDPAGETABID
    where 
        -- Double-check security here; this is needed when the specified tab ID is blank, so in case security doesn't need to be double-checked

        -- for every KPI instance, this function call must be moved into the part of the WHERE clause that checks for a blank tab ID.

        dbo.UFN_SECURITY_APPUSER_GRANTED_KPIINSTANCE(@CURRENTAPPUSERID, KPIINSTANCE.ID) = 1 
        and 
            ((KPIINSTANCEHISTORY.ASOFDATE between dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE) and dbo.UFN_DATE_GETLATESTTIME(@ENDDATE)) or KPIINSTANCEHISTORY.ID is null)
        and (
            -- No tab ID was supplied; just return all the KPIs to which he has rights.

            @KPIDASHBOARDPAGETABID is null 
            or @KPIDASHBOARDPAGETABID = '00000000-0000-0000-0000-000000000000'
            or KPIDASHBOARDPAGETABKPIINSTANCE.ID is not null
        )
        and ((@CONTEXTRECORDID is null or len(@CONTEXTRECORDID) = 0 or @CONTEXTRECORDID = '00000000-0000-0000-0000-000000000000'
            or (len(@CONTEXTRECORDID) > 0 and KPIINSTANCE.CONTEXTRECORDID = @CONTEXTRECORDID and exists(select RECORDTYPE.ID from dbo.RECORDTYPE where ID = KPICATALOG.CONTEXTRECORDTYPEID and RECORDTYPE.NAME = @CONTEXTRECORDTYPE)))
        and
        (
            KPICATALOG.HASSITEFILTER = 0 or 
            KPIINSTANCE.SITEFILTERENABLEDFORINSTANCE = 0 or 
            @SITEPRODUCTINSTALLED = 0 or
            @ISSYSADMIN = 1 or
            exists
            (
                select 1
                from dbo.SYSTEMROLEAPPUSER
                where
                    SYSTEMROLEAPPUSER.APPUSERID = @CURRENTAPPUSERID and
                    -- Make sure the kpi instance is permissioned for this role 

                    exists 
                    (
                        select 1 
                        from dbo.SYSTEMROLEKPIINSTANCE 
                        where 
                            SYSTEMROLEKPIINSTANCE.SYSTEMROLEID = SYSTEMROLEAPPUSER.SYSTEMROLEID and
                            SYSTEMROLEKPIINSTANCE.KPIINSTANCEID = KPIINSTANCE.ID 
                    ) and
                    (
                        SYSTEMROLEAPPUSER.SECURITYMODECODE = 0 or -- All Sites

                        (
                            SYSTEMROLEAPPUSER.SECURITYMODECODE = 1 and -- No Site

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

                            exists
                            (
                                select 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 KPIDASHBOARDPAGETABKPIINSTANCE.SEQUENCE, KPIINSTANCEHISTORY.ASOFDATE desc;