﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
	<Reports>
		<Report id="64f01118-a881-4f92-9428-94ff5e9429ce" codekey="Kosmos_IDDEvaluation_2" categoryCodekey="CreditPoints" name="Auswertung IDD 2" description="Auswertung IDD 2">
			<MetaData created="2018-05-14T10:28:40" createdBy="Administrator, TestAllFeatures (Administrator)" createdBy_user_id="12" modified="2025-02-05T14:59:18" modifiedBy="Administrator, TestAllFeatures (Administrator)" modifiedBy_user_id="12" />
			<ExecutionDetails format="TableResult" commandType="SqlCommandOrQuery" exportHandler="" adminControl="" exportMultipleTablesToSheets="False" datesWithTime="False" extraParams="" />
			<Mandators mandatorMode="OnlyOwner" mandator_id="96ba2868-8baf-4e69-b1fb-d2cc6d6832e8" mandatorName="Kosmos" isStandard="False" isUsedByMenu="False" />
			<Parameters>
				<Parameter id="f5d69246-37d4-4c96-a9dc-8cdcbeee1705" isRequired="True" allowMultiSelect="False" name="Ignore OU" contextName="Organisationseinheiten ignorieren" defaultValue="0" renderHint="Undefined" disableParameter="DontDisable" />
				<Parameter id="3ffbb2af-4676-4bf7-9f52-8b5c2b672971" isRequired="False" allowMultiSelect="True" name="OrgUnits" contextName="Organisationseinheit" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
				<Parameter id="d778399c-e04d-4fb5-a2eb-2ef689bf956f" isRequired="False" allowMultiSelect="True" name="Target Groups Current Mandator" contextName="Zielgruppen" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
				<Parameter id="41f600d5-055f-4148-a984-0eab9845d667" isRequired="True" allowMultiSelect="False" name="IDD Qualifizierung" contextName="IDD Qualifizierung" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
				<Parameter id="9b923abd-0377-4e6f-a345-58798cf88493" isRequired="True" allowMultiSelect="False" name="IDD jahr" contextName="Jahr" defaultValue="" renderHint="DropDownList" disableParameter="DontDisable" />
			</Parameters>
			<Roles>
				<Role id="90" />
			</Roles>
			<command>
				DECLARE	@ignoreOu INT = @boolean

				DECLARE @ResultTable TABLE
				(
				user_id NVARCHAR(64),
				lastname NVARCHAR(128),
				firstname NVARCHAR(128),
				ous NVARCHAR(MAX),
				targetgroups NVARCHAR(MAX),
				qualification_id NVARCHAR(64),
				qualificationPeriod_id NVARCHAR(64),
				status NVARCHAR(8),
				currentEducationTime REAL,
				seminarEducationTime REAL,
				wbtEducationTime REAL,
				qualificationMinTime INT,
				iddStatus NVARCHAR(64),
				iddStatusStart DATETIME,
				startDate DATETIME,
				endDate DATETIME
				)

				INSERT INTO @ResultTable
				SELECT DISTINCT
				u.intUserCn AS user_id,
				u.Nachname AS lastname,
				u.Vorname AS firstname,
				ISNULL(STUFF((
				SELECT ', ' + title
				FROM tblOrganisationUnits
				JOIN tblUsersOrganisationUnits ON tblUsersOrganisationUnits.organisationUnit_id = tblOrganisationUnits.id
				WHERE tblUsersOrganisationUnits.user_id = u.intUserCn
				ORDER BY title
				FOR XML PATH(''), TYPE
				).value('.','NVARCHAR(MAX)'), 1, 1,''),
				'')  AS 'ous',
				STUFF((
				SELECT ', ' + title
				FROM tblTargetGroups tg
				INNER JOIN tblusersTargetGroups utg ON tg.id = utg.targetGroup_id
				WHERE utg.userCn = u.intUserCn
				AND tg.mandator_id = @current_mandator_id
				AND tg.defaultforlibrary = 0
				AND tg.id IN (SELECT value FROM @targetGroup_id)
				ORDER BY title
				FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)'), 1, 2, '') AS targetgroups,
				q.id,
				uqp.id,
				'Grau' AS status,
				uqp.currentEducationTime,
				0 AS seminarEducationTime,
				0 AS wbtEducationTime,
				q.minTime AS qualificationMinTime,
				customs.CustomAttribute11,
				customs.CustomAttribute12,
				DATEFROMPARTS(@idd_year, 1, 1) AS startDate,
				DATEFROMPARTS(@idd_year, 12, 31) AS endDate

				FROM v_Users u
				INNER JOIN tblUserCustomAttributes customs ON customs.user_id = u.intUserCn
				INNER JOIN tblUserQualificationPeriods uqp ON u.intUserCn = uqp.user_id
				INNER JOIN tblQualifications q ON uqp.qualification_id = q.id

				WHERE u.mandator_id = @current_mandator_id
				AND q.id = @idd_qualification_id
				AND @idd_year = YEAR(uqp.startDate)
				AND YEAR(uqp.startDate) &lt;&gt; YEAR(ISNULL(uqp.endDate, DATEADD(MONTH, q.periodDurationMonths, uqp.startDate))) -- to make sure any invalid periods aren't taken

				AND
				(
				@ignoreOu = 1
				OR
				u.intUserCn IN(
				SELECT user_id
				FROM @orgUnit_id
				JOIN tblUsersOrganisationUnits ON tblUsersOrganisationUnits.organisationUnit_id = value)
				)

				AND u.intUserCn IN(
				SELECT UserCn
				FROM @targetGroup_id
				JOIN tblUsersTargetGroups ON tblUsersTargetGroups.targetGroup_id = value)

				AND (
				EXISTS(SELECT * FROM v_Users WHERE intUserCn = @current_user_id AND securityId = 100)
				OR
				EXISTS(SELECT * FROM tblTargetGroupManagers JOIN tblUsersTargetGroups ON tblUsersTargetGroups.targetGroup_id = tblTargetGroupManagers.targetGroup_id
				WHERE tblTargetGroupManagers.user_id = @current_user_id)
				OR
				EXISTS(SELECT * FROM tblRolesFunctions
				JOIN tblRoles ON tblRoles.id = tblRolesFunctions.role_id
				JOIN tblFunctions ON tblFunctions.id = tblRolesFunctions.function_id
				AND tblFunctions.shortcut = 'FcnIsAuthorizedForAllTGs'
				INNER JOIN v_Users ON  v_Users.SecurityID = tblRoles.id
				WHERE
				tblRolesFunctions.mandator_id = @current_mandator_id
				AND v_Users.intUserCn = @current_user_id)
				)
				AND u.mandator_id = @current_mandator_id

				UPDATE @ResultTable
				SET currentEducationTime = ISNULL(userScores.totalEducationTime, 0),
				seminarEducationTime = ISNULL(userScores.totalSeminarEducationTime, 0),
				wbtEducationTime = ISNULL(userScores.totalWBTEducationTime, 0)
				FROM @ResultTable AS res
				LEFT JOIN
				(
				SELECT DISTINCT
				user_id,
				qualificationPeriod_id,
				SUM(educationTime) AS totalEducationTime,
				SUM(seminarEducationTime) AS totalSeminarEducationTime,
				SUM(wbtEducationTime) AS totalWBTEducationTime
				FROM
				(
				SELECT
				tbluserItemScores.user_id,
				tblUserQualificationPeriods.id AS qualificationPeriod_id,
				ISNULL(tbluserItemScores.educationTime, 0) AS educationTime,
				(SELECT ISNULL(tbluserItemScores.educationTime, 0)
				FROM tblItems
				WHERE id = item_id
				AND (itemType_id = 2
				OR itemType_id = 8)) AS seminarEducationTime,
				(SELECT ISNULL(tbluserItemScores.educationTime, 0)
				FROM tblItems
				WHERE id = item_id
				AND (itemType_id = 0
				OR itemType_id = 1
				OR itemType_id = 6)) AS wbtEducationTime
				FROM
				tblUserItemScores
				INNER JOIN tblUserItemScoresQualifications
				ON tblUserItemScores.id = tblUserItemScoresQualifications.useritemscore_id
				INNER JOIN tblQualifications ON tblQualifications.id = tblUserItemScoresQualifications.qualification_id
				INNER JOIN tblUserQualificationPeriods
				ON tblUserQualificationPeriods.user_id = tblUserItemScores.user_id
				AND tblUserQualificationPeriods.qualification_id = tblUserItemScoresQualifications.qualification_id
				WHERE
				tblUserItemScoresQualifications.qualification_id = @idd_qualification_id
				AND (tblUserItemScores.endDate IS NULL
				OR
				YEAR(tblUserItemScores.endDate) = @idd_year
				)
				) AS A
				GROUP BY qualificationPeriod_id, user_id
				) AS userScores
				ON userScores.user_id = res.user_id
				AND res.qualificationPeriod_id = userScores.qualificationPeriod_id
				WHERE startDate IS NOT NULL

				UPDATE @ResultTable
				SET status = CASE
				WHEN currentEducationTime &gt;= 15 * 60 THEN 'Grün'
				WHEN currentEducationTime &lt; 15 * 60
				AND currentEducationTime &gt;= 5 * 60 THEN 'Gelb'
				WHEN currentEducationTime &lt; 5 * 60 THEN 'Rot'
				ELSE 'Grau'
				END
				FROM @ResultTable AS res
				LEFT JOIN tblQualificationExchangers
				ON tblQualificationExchangers.qualification_id = res.qualification_id
				AND tblQualificationExchangers.exchangerCodeKey = 'GDVIMPORTPOINT'
				AND tblQualificationExchangers.isActive = 1
				WHERE (ISNULL(res.qualificationMinTime, 0) &gt; 0)	/* hasQuota = 1 */
				AND (tblQualificationExchangers.id IS NULL
				OR /* checking if the user is tpservice */
				(
				SELECT ISNULL(isTpService, 0)
				FROM tblUserGdvAttributes
				WHERE user_id = res.user_id) = 1
				AND /* and the qualification has a exporter of type GDVIMPORTPOINTS */
				tblQualificationExchangers.id IS NOT NULL)

				SELECT
				lastname AS 'Name',
				firstname AS 'Vorname',
				ous 'OE',
				targetgroups 'Zielgruppe',
				status 'Status',
				dbo.fn_GetEducationTimeString(currentEducationTime) 'Ist-BZ',
				dbo.fn_GetEducationTimeString(seminarEducationTime) 'Seminar',
				dbo.fn_GetEducationTimeString(wbtEducationTime) 'WBT',
				dbo.fn_GetEducationTimeString(qualificationMinTime) 'Soll-BZ',
				DATEADD(dd, 0, DATEDIFF(dd, 0, startDate)) 'Beginn',
				DATEADD(dd, 0, DATEDIFF(dd, 0, endDate)) 'End',
				CASE
				WHEN iddStatus IS NULL THEN 'Unbekannt'
				ELSE iddStatus
				END
				AS 'IDD Status',
				iddStatusStart 'IDD Statusdatum'
				FROM @ResultTable
				ORDER BY lastname ASC, firstname ASC
			</command>
		</Report>
	</Reports>
	<Parameters>
		<Parameter id="f5d69246-37d4-4c96-a9dc-8cdcbeee1705" isSystem="False" name="Ignore OU" reportParameterType_id="9ec1e04a-1a50-4938-8d12-54041c902407" queryParameterName="@boolean" />
		<Parameter id="3ffbb2af-4676-4bf7-9f52-8b5c2b672971" isSystem="True" name="OrgUnits" reportParameterType_id="8a3022c2-6ef5-4246-b2bf-58fdf7f30afa" queryParameterName="@orgUnit_id" />
		<Parameter id="d778399c-e04d-4fb5-a2eb-2ef689bf956f" isSystem="False" name="Target Groups Current Mandator" reportParameterType_id="e865bdcd-f5f5-457c-8312-74fe567cd083" queryParameterName="@targetGroup_id" />
		<Parameter id="41f600d5-055f-4148-a984-0eab9845d667" isSystem="False" name="IDD Qualifizierung" reportParameterType_id="b0ac0f75-cef0-439f-83c5-126408baba62" queryParameterName="@idd_qualification_id" />
		<Parameter id="9b923abd-0377-4e6f-a345-58798cf88493" isSystem="False" name="IDD jahr" reportParameterType_id="9a0eea61-5322-4399-9e4e-7a881ea5b9cf" queryParameterName="@idd_year" />
	</Parameters>
	<ParameterTypes>
		<ParameterType id="9ec1e04a-1a50-4938-8d12-54041c902407" isSystem="True" name="Boolean" datatype="StringDDL" dataValueField="Value" dataTextField="Text">
			<query>
				DECLARE	@userRole_id INT = 10
				SELECT @userRole_id = SecurityID FROM tableUsers WHERE intUserCn = @current_user_id

				IF(
					  -- Ignore OU choice is available only for tg manager or for users with function FcnIsAuthorizedForAllTGs
					  ( 
						dbo.fn_IsTGManager(@current_user_id, NULL) = 1
						OR
						@userRole_id = 100 -- PLATMIN
						OR
						EXISTS
							(
								select 1 
								  from tblRolesFunctions rf
								  join tblFunctions f on f.id = rf.function_id
								 where rf.mandator_id = @current_mandator_id
								   and f.shortcut like 'FcnIsAuthorizedForAllTGs'
								   and rf.role_id = @userRole_id
							)
					  )
					  AND
					  -- and only when any OU is visible to the user
					  (
						@userRole_id = 100 -- PLATMIN
						OR
						EXISTS
							(
								select 1 
								  from tblRolesFunctions rf
								  join tblFunctions f on f.id = rf.function_id
								 where rf.mandator_id = @current_mandator_id
								   and f.shortcut like 'FcnIsAuthorizedForEvalOfOrgUnits'
								   and rf.role_id = @userRole_id
							)
						OR
						EXISTS(
						            SELECT 1
									  FROM tblUsersOrganisationUnits
									 WHERE user_id = @current_user_id
									   AND position IN (1, 2) -- Manager or Delegate 
							   )
					  )
				  )
				  BEGIN
					SELECT 0 AS Value, 'Nein' AS Text
					UNION
					SELECT 1 AS Value, 'Ja' AS Text
				  END	
				  ELSE
					SELECT 1 AS Value, 'Ja' AS Text
			</query>
		</ParameterType>
		<ParameterType id="8a3022c2-6ef5-4246-b2bf-58fdf7f30afa" isSystem="True" name="OrgUnit" datatype="OrgUnit" dataValueField="" dataTextField="">
			<Parameters>
				<Parameter id="f5d69246-37d4-4c96-a9dc-8cdcbeee1705" isRequired="False" allowMultiSelect="False" name="Ignore OU" contextName="Ignore OU" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
			</Parameters>
		</ParameterType>
		<ParameterType id="e865bdcd-f5f5-457c-8312-74fe567cd083" isSystem="False" name="TargetGroup" datatype="IntegerDDL" dataValueField="id" dataTextField="title">
			<query>
				DECLARE	@tgm_user_id INT = NULL
				DECLARE	@ignoreOu INT = @boolean
				DECLARE	@userRole_id INT = 10
				SELECT @userRole_id = SecurityID FROM tableUsers WHERE intUserCn = @current_user_id
				
				-- user see only his own target groups if he is tg manager (no platmin and has no function FcnIsAuthorizedForAllTGs)
				IF( 
					@userRole_id &lt; 100
					AND NOT EXISTS
						(
							select 1 
							  from tblRolesFunctions rf
							  join tblFunctions f on f.id = rf.function_id
							 where rf.mandator_id = @current_mandator_id
							   and f.shortcut like 'FcnIsAuthorizedForAllTGs'
							   and rf.role_id = @userRole_id
						)
				  )
					SET @tgm_user_id = @current_user_id

				CREATE TABLE #filteredOUs
				(
					id UNIQUEIDENTIFIER,
					positionRestriction INT
				)

				-- Apply the child managers only filtering
				if (@ignoreOu = 0)
					INSERT INTO
						#filteredOUs
					SELECT
						id,
						positionRestriction
					FROM
						dbo.fn_FilterOrganisationUnitsAccordingToChildManagersOnly(
							@orgUnit_id,
							@current_mandator_childManagersOnly,
							@current_user_id)

				SELECT id, title
				  FROM tblTargetGroups
				 WHERE mandator_id = @current_mandator_id
					AND defaultforlibrary = 0
					AND
					(
						(
							@ignoreOu = 0 AND
							EXISTS (SELECT * FROM @orgUnit_id)
							AND tblTargetGroups.id IN
							(
								SELECT
									utg.targetGroup_id
								FROM
									tblUsersTargetGroups utg
									JOIN tblUsersOrganisationUnits uou
										ON utg.UserCn = uou.user_id
									JOIN #filteredOUs AS fou
										ON fou.id = uou.organisationunit_id
								WHERE
									fou.positionRestriction IS NULL
									OR uou.position = fou.positionRestriction
							)
						)
					   OR 
						(
						  @tgm_user_id IS NULL
						  OR (EXISTS(
									SELECT *
									 FROM tblTargetGroupManagers
									WHERE tblTargetGroupManagers.user_id = @tgm_user_id
									  AND tblTargetGroupManagers.targetGroup_id = tblTargetGroups.id
									 )
							 )
						) /* in case we have a targetgroup managers without the full rights we only have to display those targetgroups he is allowed to see*/
						AND (@ignoreOu = 1 OR NOT EXISTS(SELECT * FROM @orgUnit_id))
					  )
				 ORDER BY title
				 DROP TABLE #filteredOUs
			</query>
			<Parameters>
				<Parameter id="f5d69246-37d4-4c96-a9dc-8cdcbeee1705" isRequired="False" allowMultiSelect="False" name="Ignore OU" contextName="Ignore OU" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
				<Parameter id="3ffbb2af-4676-4bf7-9f52-8b5c2b672971" isRequired="False" allowMultiSelect="True" name="OrgUnits" contextName="OrgUnits" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
			</Parameters>
		</ParameterType>
		<ParameterType id="b0ac0f75-cef0-439f-83c5-126408baba62" isSystem="False" name="IDD Qualifizierung (aktueller Mandant)" datatype="GuidDDL" dataValueField="id" dataTextField="title">
			<query>
				SELECT tblObjects.id, tblObjects.title
				FROM tblQualifications
				INNER JOIN tblObjects ON tblObjects.id = tblQualifications.id
				WHERE tblObjects.mandator_id = @current_mandator_id AND  tblObjects.deleted IS NULL
				AND periodBeginning = 0 -- only applied to IDD type of qualifications
				ORDER BY tblObjects.title
			</query>
		</ParameterType>
		<ParameterType id="9a0eea61-5322-4399-9e4e-7a881ea5b9cf" isSystem="False" name="IDD jahr" datatype="IntegerDDL" dataValueField="year_id" dataTextField="year_name">
			<query>
				; WITH yearsCTE AS
				(
				SELECT YEAR('2018-01-01') as year
				UNION ALL
				SELECT year + 1
				FROM yearsCTE
				WHERE year &lt; YEAR(GETDATE()) + 1 -- include upcoming year
				)
				SELECT year AS year_id, cast(year as nvarchar(64)) AS year_name
				FROM yearsCTE
			</query>
		</ParameterType>
	</ParameterTypes>
</ReportsExport>