﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
  <Reports>
    <Report id="64269a12-42c5-4adf-8297-626526ea29d2" codekey="ERGO_e-campus_CPL" name="CPL Bereichsleiter Gruppenleiter" description="">
      <MetaData created="2021-03-08T16:19:24" createdBy="Administrator, Albrecht (Administrator)" createdBy_user_id="1" modified="2023-08-02T15:11:24" modifiedBy="ERGO_e-Campus, Administrator (Administrator)" modifiedBy_user_id="243" />
      <ExecutionDetails format="TableResult" commandType="SqlCommandOrQuery" exportHandler="" adminControl="" exportMultipleTablesToSheets="False" datesWithTime="False" extraParams="" />
      <Mandators mandatorMode="OnlyOwner" mandator_id="bfa70f6b-484c-49da-9ad7-1ccd8f0d684c" mandatorName="ERGO_e-Campus" isStandard="False" isUsedByMenu="False" />
      <Parameters>
        <Parameter id="83428ef6-aa30-41f4-a047-131633de7ed6" isRequired="False" allowMultiSelect="False" name="OrgUnits" contextName="OrgUnits" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="d9203e83-9abe-424c-a706-b20cd7d58c41" isRequired="True" allowMultiSelect="False" name="Baustein abhängig vom Modul" contextName="Baustein abhängig vom Modul" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="d8e4595f-8bdd-4a54-9298-8f378450e6a0" isRequired="True" allowMultiSelect="False" name="Zeitraum" contextName="Zeitraum" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
      </Parameters>
      <Roles />
      <command>/*
DECLARE @current_mandator_id UNIQUEIDENTIFIER, 
		@tg_id typeIntList,
		@orgUnit_id UNIQUEIDENTIFIER,
		@item_id UNIQUEIDENTIFIER,
		@dateRange_start DATETIME,
		@dateRange_end DATETIME

SET @current_mandator_id = 'BFA70F6B-484C-49DA-9AD7-1CCD8F0D684C'

SET @orgUnit_id = '5A5CC5F9-132C-40A4-83D0-110ABB231080' -- PT D

set @item_id = 'DA234EEA-6500-4C22-8D15-57496001CD1C' -- Informationssicherheit (Stand 21-05-2019)
*/
SET @dateRange_start = ISNULL(@dateRange_start,'2018-01-01 00:00:00.000')
SET @dateRange_end = ISNULL(@dateRange_end,GETDATE())

DECLARE @Firmenschluessel typeStringList
DECLARE @MAKreis typeStringList

INSERT INTO @Firmenschluessel 
	VALUES	('0831'),
			('0501'),
			('0010'),
			('0152'),
			('0504'),
			('0323'),
			('0002'),
			('0301'),
			('0334'),
			('0830'),
			('0006'),
			('0082'),
			('0017'),
			('0003'),
			('0079'),
			('0509')


INSERT INTO @MAKreis 
	VALUES ('10'),('13'),('15'),('30'),('39'),('41'),('40'),('42'),('43'),('50'),('45')

create TABLE #ou_tree (
id UNIQUEIDENTIFIER,
title NVARCHAR(MAX)
)

-- ADD child Ous
DECLARE @orgUnit_ids typeGuidList

INSERT INTO #ou_tree
EXEC sp_GetOrganisationUnitChildren @current_mandator_id, @orgUnit_id

INSERT INTO @orgUnit_ids
SELECT id FROM #ou_tree

DROP TABLE #ou_tree

-- The Führungskräfte
CREATE TABLE #OUStructure
(
	orgId UNIQUEIDENTIFIER,
	parentId UNIQUEIDENTIFIER,
	orgUnitPath NVARCHAR(MAX),
	hasManager INT
)
CREATE TABLE #OUManagers
(
	orgId UNIQUEIDENTIFIER,
	user_id INT
)
-- 1 Building up the structure for the OUs
;WITH Structure(id,parent_id,orgUnitPath,hasManager)
AS
(
SELECT 
id, parent_id, orgUnitPath,
CASE WHEN EXISTS(SELECT * FROM tblUsersOrganisationUnits WHERE organisationUnit_id = tblOrganisationUnits.id AND position = 1) THEN
	1 
	ELSE 
	0 
	END 
FROM tblOrganisationUnits
WHERE mandator_id = @current_mandator_id AND deleted IS NULL AND parent_id IS NULL
UNION ALL
SELECT 
tblOrganisationUnits.id, tblOrganisationUnits.parent_id, tblOrganisationUnits.orgUnitPath,
CASE WHEN EXISTS(SELECT * FROM tblUsersOrganisationUnits WHERE organisationUnit_id = tblOrganisationUnits.id AND position = 1) THEN
	1 
	ELSE 
	0 
	END 
FROM tblOrganisationUnits
INNER JOIN Structure ON tblOrganisationUnits.parent_id = Structure.id
WHERE tblOrganisationUnits.deleted IS NULL
)
INSERT INTO #OUStructure
SELECT * FROM Structure

-- 2 checking for already available OU Managers
INSERT INTO #OUManagers
SELECT tblUsersOrganisationUnits.organisationUnit_id, tblUsersOrganisationUnits.user_id  FROM #OUStructure
INNER JOIN tblUsersOrganisationUnits ON tblUsersOrganisationUnits.organisationUnit_id = #OUStructure.orgId
WHERE tblUsersOrganisationUnits.position = 1 AND #OUStructure.hasManager = 1

-- 3 detect missing OU Managers and get those from the parent structure
-- excluding root node
;WITH UpdateTable(orgId, user_id)
AS
(SELECT #OUStructure.orgId, #OUManagers.user_id FROM #OUStructure 
CROSS APPLY(
SELECT TOP 1 A.orgId FROM #OUStructure AS A WHERE 
#OUStructure.orgUnitPath LIKE A.orgUnitPath + '%'
AND A.hasManager = 1 ORDER BY LEN(A.orgUnitPath) DESC
) AS innerQuery
INNER JOIN #OUManagers ON #OUManagers.orgId = innerQuery.orgId
WHERE hasManager = 0 AND parentId IS NOT NULL
)
INSERT INTO #OUManagers
SELECT * FROM UpdateTable

--UPDATE #OUStructure
--SET hasManager = 1
--WHERE EXISTS(SELECT TOP 1 * FROM #OUManagers WHERE orgId = #OUStructure.orgId)


-- Get the additional Data for the Führungskräfte
SELECT #OUManagers.user_id, 
v_Users.Vorname, 
v_Users.Nachname,
v_Users.companyAD,
v_Users.office,
v_Users.division,
v_Users.descUserCn, 
tblUsersContacts.eMail,
orgId AS orgUnit_id, 
codeKey AS orgUnit_codeKey,
(SELECT COUNT(*) FROM tblUsersOrganisationUnits WHERE organisationUnit_id = orgId) AS users_in_ou
INTO #FKAllStars
FROM #OUManagers
INNER JOIN v_Users ON v_Users.intUserCn = #OUManagers.user_id
INNER JOIN tblOrganisationUnits ON tblOrganisationUnits.id = orgId
LEFT JOIN tblUsersContacts ON tblUsersContacts.user_id = v_Users.intUserCn AND tblUsersContacts.contactType_id = 1
WHERE tblUsersContacts.user_id IS NOT NULL

-- Get the users
SELECT u.intUserCn,u.Vorname,u.Nachname,u.descUserCn,u.office,u.division,u.companyAD,u.userStatus,
uou.organisationUnit_id
INTO #users
FROM tableUsers u
JOIN v_UsersWithData uwa ON uwa.user_id = u.intUserCn
LEFT JOIN tblUsersOrganisationUnits uou ON uou.user_id = u.intUserCn
--WHERE (NOT EXISTS (SELECT * FROM @tg_id )) OR EXISTS(SELECT * FROM tblUsersTargetGroups utg WHERE utg.UserCn = u.intUserCn AND utg.targetGroup_id IN (SELECT * FROM @tg_id ))
WHERE(NOT EXISTS(SELECT * FROM @orgUnit_ids)) OR EXISTS(SELECT * FROM tblUsersOrganisationUnits where user_id = u.intUserCn AND organisationUnit_id IN (SELECT * FROM @orgUnit_ids))
AND u.userStatus != 2
AND u.deleted IS NULL
AND		uwa.customAttribute11 IN (SELECT * FROM @Firmenschluessel)
AND		uwa.customAttribute13 IN (SELECT * FROM @MAKreis)

-- Get latest and best Status for the given baustein
SELECT 
*
INTO #usersAndItems
from #users u

SELECT DISTINCT
ui.Vorname AS "Vorname MA",
ui.Nachname AS "Nachname MA",
ui.descUserCn AS "Pers.-Nr. MA",
(SELECT TOP 1 email FROM tblUsersContacts WHERE user_id = ui.intUserCn) AS "E-Mail MA",
ui.division AS "Abteilung MA",
ui.office AS "Dienststelle MA",
ISNULL(STUFF((
SELECT ', ' + title + ' (' + CASE WHEN position = 0 THEN 'M' WHEN position = 1 THEN 'F' WHEN position = 2 THEN 'V' END + ')'
FROM tblOrganisationUnits
JOIN tblUsersOrganisationUnits ON tblUsersOrganisationUnits.organisationUnit_id = tblOrganisationUnits.id
WHERE tblUsersOrganisationUnits.user_id = ui.intUserCn
ORDER BY title
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, ''), '') AS "Org. Einheit MA",
ui.companyAD AS "Gesellschaft/ Firma MA",
(SELECT title FROM tblItems WHERE id = @item_id) AS "Titel des Baustein",
--CASE
--WHEN itemType_id = 0 THEN 'Test'
--WHEN itemType_id = 1 THEN 'Lernprogramm' 
--WHEN itemType_id = 6 THEN 'Dokument'
--END
--AS "Typ des Bausteins",
dbo.fn_GetUserPlainModuleItemLastPassedEver(ui.intUserCn, @item_id) AS "Baustein historisch bearbeitet",
fk.Vorname AS "Vorname FK",
fk.Nachname AS "Nachname FK",
fk.descUserCn AS "Pers.-Nr. FK",
fk.email AS "eMail FK",
fk.division AS "Abteilung FK",
fk.office AS "Dienststelle FK",
ISNULL(STUFF((
SELECT ', ' + title + ' (' + CASE WHEN position = 0 THEN 'M' WHEN position = 1 THEN 'F' WHEN position = 2 THEN 'V' END + ')'
FROM tblOrganisationUnits
JOIN tblUsersOrganisationUnits ON tblUsersOrganisationUnits.organisationUnit_id = tblOrganisationUnits.id
WHERE tblUsersOrganisationUnits.user_id = fk.user_id
ORDER BY title
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, ''), '') AS "Org. Einheit FK",
fk.companyAD AS "Gesellschaft/ Firma FK" 
FROM #usersAndItems ui
LEFT JOIN #FKAllstars fk ON fk.orgUnit_id = ui.organisationUnit_id
WHERE userStatus != 2
--AND fk.users_in_ou &gt; 5


-- Cleanup
DROP TABLE #users
DROP TABLE #usersAndItems 
DROP TABLE #FKAllstars
DROP TABLE #OUStructure
DROP TABLE #OUManagers</command>
    </Report>
  </Reports>
  <Parameters>
    <Parameter id="83428ef6-aa30-41f4-a047-131633de7ed6" isSystem="True" name="OrgUnits" reportParameterType_id="6237f8f6-9e0a-452a-800b-df8144d2d3f2" queryParameterName="@orgUnit_id" />
    <Parameter id="d9203e83-9abe-424c-a706-b20cd7d58c41" mandator_id="bfa70f6b-484c-49da-9ad7-1ccd8f0d684c" isSystem="False" name="Baustein abhängig vom Modul" reportParameterType_id="80124756-7978-4f4b-8427-e65b75a556a2" queryParameterName="@item_id" />
    <Parameter id="d8e4595f-8bdd-4a54-9298-8f378450e6a0" isSystem="True" name="Zeitraum" reportParameterType_id="abff13be-91c3-4ee1-93a3-7292f8e013ba" queryParameterName="@dateRange" />
    <Parameter id="22d867d1-0fa2-483a-92be-17d91508ea87" isSystem="True" name="Modul" reportParameterType_id="b141d3d7-0284-490f-8497-0345ae800ede" queryParameterName="@module_id" />
  </Parameters>
  <ParameterTypes>
    <ParameterType id="6237f8f6-9e0a-452a-800b-df8144d2d3f2" isSystem="True" name="OrgUnit" datatype="OrgUnit" dataValueField="" dataTextField="" />
    <ParameterType id="80124756-7978-4f4b-8427-e65b75a556a2" mandator_id="bfa70f6b-484c-49da-9ad7-1ccd8f0d684c" isSystem="False" name="Baustein abhängig vom Modul" datatype="StringDDL" dataValueField="value" dataTextField="text">
      <query>SELECT 
mi.item_id AS value,
i.title AS text
FROM tblModuleItems mi
INNER JOIN tblItems i ON i.id = mi.item_id 
WHERE (@module_id IS NULL OR mi.module_id = @module_id)
ORDER BY i.title</query>
      <Parameters>
        <Parameter id="22d867d1-0fa2-483a-92be-17d91508ea87" isRequired="False" allowMultiSelect="False" name="Modul" contextName="Modul" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
      </Parameters>
    </ParameterType>
    <ParameterType id="abff13be-91c3-4ee1-93a3-7292f8e013ba" isSystem="True" name="DateRange" datatype="DateRange" dataValueField="" dataTextField="" />
    <ParameterType id="b141d3d7-0284-490f-8497-0345ae800ede" isSystem="True" name="Module" datatype="Module" dataValueField="" dataTextField="" />
  </ParameterTypes>
</ReportsExport>