UFN_QUERY_KPISLIST
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@NODEID | nvarchar(255) | IN | |
@GROUPBY | tinyint | IN | |
@SITEFILTERMODE | tinyint | IN | |
@SITESSELECTED | xml | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.[UFN_QUERY_KPISLIST]
(
@NODEID nvarchar(255) = null,
@GROUPBY tinyint = 1,
@SITEFILTERMODE tinyint = 0,
@SITESSELECTED xml = null,
@CURRENTAPPUSERID uniqueidentifier
)
returns @KPI_DETAIL table
(
[KPIINSTANCEID] uniqueidentifier,
[NAME] nvarchar(255),
[DESCRIPTION] nvarchar(1000),
[KPICATALOGNAME] nvarchar(255),
[GOALTYPECODE] tinyint,
[KPIVALUEMONEY] decimal(20,4),
[KPIVALUENUMBER] decimal(20,4),
[KPIVALUEPERCENT] decimal(20,4),
[GOALVALUEMONEY] decimal(20,4),
[GOALVALUENUMBER] decimal(20,4),
[GOALVALUEPERCENT] decimal(20,4),
[YELLOWTARGETMONEY] decimal(20,4),
[YELLOWTARGETNUMBER] decimal(20,4),
[YELLOWTARGETPERCENT] decimal(20,4),
[GREENTARGETMONEY] decimal(20,4),
[GREENTARGETNUMBER] decimal(20,4),
[GREENTARGETPERCENT] decimal(20,4),
[GOALSTATUSIMAGE] nvarchar(255),
[VARIANCE] decimal(20,4),
[CLOSESTASOFDATE] datetime,
[DATEADDED] datetime,
[DATECHANGED] datetime,
[ADDEDBY_USERNAME] nvarchar(128),
[CHANGEDBY_USERNAME] nvarchar(128),
[CONTEXTRECORDTYPEID] uniqueidentifier,
[CONTEXTRECORDTYPE] nvarchar(50),
[HASVALUE] bit,
[USERHASRIGHTSTOKPI] bit,
[SITES] nvarchar(250),
[CURRENCYID] uniqueidentifier,
[FOLDERPATH] nvarchar(max),
[ISFAVORITE] bit,
[FAVORITEPIC] nvarchar(255),
[UIFOLDER] nvarchar(255),
[GROUPEDBY] tinyint
)
with execute as caller
as
begin
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');
--Check if NODEID is 00000000-0000-0000-0000-000000000002, display Favorites
--or if empty guid or null, display all queries available to user
--or if guid is '00000000-0000-0000-0000-000000000001', display the none node
declare @ISFAVORITE bit = 0;
declare @SHOWALL bit = 0;
declare @ISNONENODE bit = 0;
--This will handle situation where the list loads before a node is selected
declare @NODEGUID uniqueidentifier = '00000000-0000-0000-0000-000000000000';
set @NODEGUID =
case
when @NODEID like replace('00000000-0000-0000-0000-000000000000', '0', '[0-9a-fA-F]') then cast(@NODEID as uniqueidentifier)
else null
end;
if @NODEID = '00000000-0000-0000-0000-000000000002' --Favorites
set @ISFAVORITE = 1;
if @NODEID = '00000000-0000-0000-0000-000000000000' or @NODEID is null or @NODEID = ''
set @SHOWALL = 1;
if @NODEID = '00000000-0000-0000-0000-000000000001'
set @ISNONENODE = 1;
------
--Grab all the folders and subfolders based on the group type and permissions
declare @PERMISSIONEDFOLDERS table
(
[FOLDERID] uniqueidentifier,
[FOLDERPATH] nvarchar(max)
);
with [HIERARCHYCTE] as
(
select
[PARENTFOLDERID],
[ID] as [FOLDERID],
0 as [LEVEL],
cast([NAME] as nvarchar(max)) as [FOLDERPATH]
from [KPIINSTANCEFOLDER]
where [ID] = @NODEGUID or @SHOWALL = 1 or @ISFAVORITE = 1 or @GROUPBY = 1
union all
select
[FOLDERS].[PARENTFOLDERID],
[FOLDERS].[ID] as [FOLDERID],
cte.[LEVEL] + 1 as [LEVEL],
cast(cte.[FOLDERPATH] + ' | ' + [FOLDERS].[NAME] as nvarchar(max)) as [FOLDERPATH]
from [KPIINSTANCEFOLDER] as [FOLDERS]
inner join [HIERARCHYCTE] as cte on [FOLDERS].[PARENTFOLDERID] = cte.[FOLDERID]
)
insert into @PERMISSIONEDFOLDERS ([FOLDERID], [FOLDERPATH])
select
[FOLDERID],
[FOLDERPATH]
from [HIERARCHYCTE] cte
where [LEVEL] = (select max([LEVEL]) from [HIERARCHYCTE] cte2 where cte.[FOLDERID] = cte2.[FOLDERID]);
------
with
xmlnamespaces ('bb_appfx_dataforms' as [DFI]),
[USERKPIS] as
(
select distinct [KPIINSTANCEID]
from
(select
distinct [SYSTEMROLEKPIINSTANCE].[KPIINSTANCEID]
from dbo.[SYSTEMROLEKPIINSTANCE]
inner join dbo.[SYSTEMROLEAPPUSER] on [SYSTEMROLEKPIINSTANCE].[SYSTEMROLEID] = [SYSTEMROLEAPPUSER].[SYSTEMROLEID]
where [SYSTEMROLEAPPUSER].[APPUSERID] = @CURRENTAPPUSERID
union all
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]
)
insert into @KPI_DETAIL
(
[KPIINSTANCEID],
[NAME],
[DESCRIPTION],
[KPICATALOGNAME],
[GOALTYPECODE],
[KPIVALUEMONEY],
[KPIVALUENUMBER],
[KPIVALUEPERCENT],
[GOALVALUEMONEY],
[GOALVALUENUMBER],
[GOALVALUEPERCENT],
[YELLOWTARGETMONEY],
[YELLOWTARGETNUMBER],
[YELLOWTARGETPERCENT],
[GREENTARGETMONEY],
[GREENTARGETNUMBER],
[GREENTARGETPERCENT],
[GOALSTATUSIMAGE],
[VARIANCE],
[CLOSESTASOFDATE],
[DATEADDED],
[DATECHANGED],
[ADDEDBY_USERNAME],
[CHANGEDBY_USERNAME],
[CONTEXTRECORDTYPEID],
[CONTEXTRECORDTYPE],
[HASVALUE],
[USERHASRIGHTSTOKPI],
[SITES],
[CURRENCYID],
[ISFAVORITE],
[FAVORITEPIC],
[FOLDERPATH],
[UIFOLDER],
[GROUPEDBY]
)
select
[KPIINSTANCE].[ID] [KPIINSTANCEID],
[KPIINSTANCE].[NAME],
[KPIINSTANCE].[DESCRIPTION],
[KPICATALOG].[NAME] [KPICATALOGNAME],
[KPICATALOG].[GOALTYPECODE],
convert(money, case [KPICATALOG].[GOALTYPECODE]
when 0 then [HISTORY].[VALUE]
else null
end) [KPIVALUEMONEY],
convert(bigint, case [KPICATALOG].[GOALTYPECODE]
when 1 then [HISTORY].[VALUE]
else null
end) [KPIVALUENUMBER],
case [KPICATALOG].[GOALTYPECODE]
when 2 then [HISTORY].[VALUE]
else null
end [KPIVALUEPERCENT],
convert(money, case [KPICATALOG].[GOALTYPECODE]
when 0 then [KPIINSTANCE].[GOALVALUE]
else null
end) [GOALVALUEMONEY],
convert(bigint, case [KPICATALOG].[GOALTYPECODE]
when 1 then [KPIINSTANCE].[GOALVALUE]
else null
end) [GOALVALUENUMBER],
case [KPICATALOG].[GOALTYPECODE]
when 2 then [KPIINSTANCE].[GOALVALUE]
else null
end [GOALVALUEPERCENT],
convert(money, case [KPICATALOG].[GOALTYPECODE]
when 0 then case [KPIINSTANCE].[GOALAIMTYPECODE]
when 0 then [GOALUPWARDLOWVALUE]
else [GOALDOWNWARDHIGHVALUE]
end
else null
end) [YELLOWTARGETMONEY],
convert(bigint, case [KPICATALOG].[GOALTYPECODE]
when 1 then case [KPIINSTANCE].[GOALAIMTYPECODE]
when 0 then [GOALUPWARDLOWVALUE]
else [GOALDOWNWARDHIGHVALUE]
end
else null
end) [YELLOWTARGETNUMBER],
case [KPICATALOG].[GOALTYPECODE]
when 2 then case [KPIINSTANCE].[GOALAIMTYPECODE]
when 0 then [GOALUPWARDLOWVALUE]
else [GOALDOWNWARDHIGHVALUE]
end
else null
end [YELLOWTARGETPERCENT],
convert(money, case [KPICATALOG].[GOALTYPECODE]
when 0 then case [KPIINSTANCE].[GOALAIMTYPECODE]
when 0 then [GOALUPWARDMIDVALUE]
else [GOALDOWNWARDMIDVALUE]
end
end) [GREENTARGETMONEY],
convert(bigint, case [KPICATALOG].[GOALTYPECODE]
when 1 then case [KPIINSTANCE].[GOALAIMTYPECODE]
when 0 then [GOALUPWARDMIDVALUE]
else [GOALDOWNWARDMIDVALUE]
end
end) [GREENTARGETNUMBER],
case [KPICATALOG].[GOALTYPECODE]
when 2 then
case [KPIINSTANCE].[GOALAIMTYPECODE]
when 0 then [GOALUPWARDMIDVALUE]
else [GOALDOWNWARDMIDVALUE]
end
end [GREENTARGETPERCENT],
case
when [HISTORY].[VALUE] is null then 'res:roadblank'
else
case [KPIINSTANCE].[GOALAIMTYPECODE]
when 0 then
case
when [HISTORY].[VALUE] < [GOALUPWARDMIDVALUE] then 'res:road0'
when [HISTORY].[VALUE] < [GOALUPWARDLOWVALUE] then 'res:road1'
else 'res:road2'
end
when 1 then
case
when [HISTORY].[VALUE] > [GOALDOWNWARDMIDVALUE] then 'res:road0'
when [HISTORY].[VALUE] > [GOALDOWNWARDHIGHVALUE] then 'res:road1'
else 'res:road2'
end
end
end [GOALSTATUSIMAGE],
case
when [KPIINSTANCE].[GOALVALUE] <> 0 then
case [KPIINSTANCE].[GOALAIMTYPECODE]
when 0 then ([HISTORY].[VALUE] - [KPIINSTANCE].[GOALVALUE]) / abs([KPIINSTANCE].[GOALVALUE])
when 1 then -1 * (([HISTORY].[VALUE] - [KPIINSTANCE].[GOALVALUE]) / abs([KPIINSTANCE].[GOALVALUE]))
end
else 0
end [VARIANCE],
[HISTORY].[ASOFDATE] as [CLOSESTASOFDATE],
[KPIINSTANCE].[DATEADDED],
[KPIINSTANCE].[DATECHANGED],
[ADDEDBY].[USERNAME] [ADDEDBY_USERNAME],
[CHANGEDBY].[USERNAME] [CHANGEDBY_USERNAME],
isnull([RECORDTYPE].[ID], '00000000-0000-0000-0000-000000000000') [CONTEXTRECORDTYPEID],
[RECORDTYPE].[NAME] [CONTEXTRECORDTYPE],
cast((case when [HISTORY].[VALUE] is null then 0 else 1 end) as bit) as [HASVALUE],
1 as [USERHASRIGHTSTOKPI],
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],
[KPIINSTANCE].PARAMETERSXML.value('data(/DFI:DataFormItem/DFI:Values/DFI:fv[@ID="CURRENCYID"]/DFI:Value)[1]','varchar(36)') as [CURRENCYID],
case
when [FAVORITE].[ID] is not null then convert(bit, 1)
else convert(bit, 0)
end as [ISFAVORITE],
case
when [FAVORITE].[ID] is not null then 'catalog:Blackbaud.AppFx.Platform.Catalog.dll,Blackbaud.AppFx.Platform.Catalog.favorites_blue_star_16.png'
else 'catalog:Blackbaud.AppFx.Platform.Catalog.dll,Blackbaud.AppFx.Platform.Catalog.favorites_gray_star_16.png'
end as [FAVORITEPIC],
[FOLDERS].[FOLDERPATH],
[KPICATALOG].[UIFOLDER],
@GROUPBY as [GROUPEDBY]
from dbo.[KPIINSTANCE]
left join dbo.[KPICATALOG] on [KPIINSTANCE].[KPICATALOGID] = [KPICATALOG].[ID]
left join dbo.[RECORDTYPE] on [KPICATALOG].[CONTEXTRECORDTYPEID] = [RECORDTYPE].[ID]
left join dbo.[CHANGEAGENT] [ADDEDBY] on [KPIINSTANCE].ADDEDBYID = [ADDEDBY].[ID]
left join dbo.[CHANGEAGENT] [CHANGEDBY] on [KPIINSTANCE].CHANGEDBYID = [CHANGEDBY].[ID]
left join dbo.[APPUSERKPIINSTANCEFAVORITE] [FAVORITE] on [FAVORITE].[KPIINSTANCEID] = [KPIINSTANCE].[ID] and [FAVORITE].[APPUSERID] = @CURRENTAPPUSERID
left join @PERMISSIONEDFOLDERS as [FOLDERS] on [FOLDERS].[FOLDERID] = [KPIINSTANCE].[FOLDERID]
outer apply (
select top (1) [ID], [KPIINSTANCEID], [VALUE], [ASOFDATE]
from dbo.[KPIINSTANCEHISTORY]
where [KPIINSTANCEID] = [KPIINSTANCE].[ID]
order by [ASOFDATE] desc
) as [HISTORY]
where
(
(
[KPIINSTANCE].[FOLDERID] in
(
select [FOLDERID]
from @PERMISSIONEDFOLDERS
)
and @ISFAVORITE = 0 and @GROUPBY = 0
) --Selected folder
or (
(
[KPICATALOG].[UIFOLDER] + '\' + [KPICATALOG].[NAME] = @NODEID
or
[KPICATALOG].[UIFOLDER] like @NODEID + '\%'
or
[KPICATALOG].[UIFOLDER] = @NODEID
)
and @GROUPBY = 1
) --Selected type
or ([KPICATALOG].[CONTEXTRECORDTYPEID] = @NODEGUID and @GROUPBY = 2) --Selected recordtype
or (@SHOWALL = 1) --All queries
or ([KPIINSTANCE].[FOLDERID] is null and @ISNONENODE = 1 and @GROUPBY = 0) --none folder node
or ([KPICATALOG].[CONTEXTRECORDTYPEID] is null and @ISNONENODE = 1 and @GROUPBY = 2) --none record type node
or ([FAVORITE].[APPUSERID] = @CURRENTAPPUSERID and @ISFAVORITE = 1) --Favorites
)
and
(@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]
)
)
)
)
);
return;
end;