﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
  <Reports>
    <Report id="28a490a3-1e7c-4dda-92d9-4965b26d9c3e" codekey="ERGO_e-campus_OrgstructureWIthFK" name="Organisationsstrukturen mit Führungskräfte" description="Listet alle Organisationseinheiten und die entsprechenden Führungskräfte. Ist keine FK direkt zugeordnet, wird so lange in der oberen OE nach einer FK gesucht, bis eine gefunden wurde.">
      <MetaData created="2022-05-17T11:55:27" createdBy="Administrator_LastName, Administrator_FirstName (Administrator)" createdBy_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" isStandard="False" isUsedByMenu="False" />
      <Roles>
        <Role id="90" />
      </Roles>
      <command>-- 1) Setup Variables
/*
DECLARE @current_mandator_id UNIQUEIDENTIFIER
SET @current_mandator_id = 'BFA70F6B-484C-49DA-9AD7-1CCD8F0D684C'
*/

-- 2) Get the FK
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

-- The Result
SELECT DISTINCT 
descUserCn,
Vorname, 
Nachname,
ISNULL(STUFF((
SELECT '|' + codekey + '#1'
FROM #OUManagers oum2
INNER JOIN tblOrganisationUnits ou ON ou.id = oum2.orgId
WHERE oum2.user_id = oum.user_id
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, ''), '') AS "organisationUnitPositions"
FROM #OUManagers oum
INNER JOIN v_Users vu ON vu.intUserCn = oum.user_id


-- Cleanup
DROP TABLE #OUStructure
DROP TABLE #OUManagers</command>
    </Report>
  </Reports>
</ReportsExport>