﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
	<Reports>
		<Report id="462e354f-4f30-4e87-bfad-60faee7c73ea" codekey="IDD_Evaluation" categoryCodekey="CreditPoints" name="Auswertung Bildungszeiten (IDD)" description="Report zur Auswertung von Bildungszeiten mit Jahresauswahl">
			<MetaData created="2018-12-20T21:36:03" createdBy="Rolle, Administrator (Administrator)" createdBy_user_id="12" modified="2021-07-21T11:21:58" modifiedBy="Rolle, Administrator (Administrator)" modifiedBy_user_id="12" />
			<ExecutionDetails format="TableResult" commandType="SqlCommandOrQuery" exportHandler="" adminControl="" exportMultipleTablesToSheets="False" datesWithTime="False" extraParams="" />
			<Mandators mandatorMode="ExcludeMandators" mandator_id="96ba2868-8baf-4e69-b1fb-d2cc6d6832e8" isStandard="False" isUsedByMenu="False">
				<Mandator mandatorName="ADAC" />
			</Mandators>
			<Parameters>
				<Parameter id="9b923abd-0377-4e6f-a345-58798cf88493" isRequired="True" allowMultiSelect="False" name="IDD jahr" contextName="IDD Jahr" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
				<Parameter id="76f4d3c5-2618-4c32-bade-747a2fd8b2ad" isRequired="False" allowMultiSelect="False" name="Target Groups Current Mandator" contextName="Zielgruppe" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
				<Parameter id="41f600d5-055f-4148-a984-0eab9845d667" isRequired="True" allowMultiSelect="False" name="IDD Qualifizierung" contextName="IDD Qualifizierung" defaultValue="" renderHint="DropDownList" disableParameter="DontDisable" />
			</Parameters>
			<Roles>
				<Role id="55" />
				<Role id="90" />
			</Roles>
			<command>
				DECLARE @mandator_name AS NVARCHAR(255)
				DECLARE @ResultTable TABLE
				(
				user_id NVARCHAR(64),
				lastname NVARCHAR(128),
				firstname NVARCHAR(128),
				username NVARCHAR(128),
				division NVARCHAR(128),
				qualification_id NVARCHAR(64),
				qualificationPeriod_id NVARCHAR(64),
				status NVARCHAR(8),
				currentEducationTime REAL,
				seminarEducationTime REAL,
				qualificationMinTime INT,
				startDate DATETIME,
				endDate DATETIME
				)

				DECLARE @OrgUnits TABLE
				(
				id UNIQUEIDENTIFIER,
				parent_id UNIQUEIDENTIFIER,
				parentTitle NVARCHAR(256),
				title NVARCHAR(256),
				nodeType INT,
				codekey NVARCHAR(256),
				mandator_id UNIQUEIDENTIFIER,
				mandatorName NVARCHAR(256),
				orgUnitPath NVARCHAR(750)
				)

				INSERT @OrgUnits
				EXEC dbo.sp_GetOrganisationUnitsForUser @mandator_id = @current_mandator_id, @user_id = @current_user_id

				SELECT @mandator_name = name FROM tblMandators WHERE id = @current_mandator_id

				INSERT INTO @ResultTable
				SELECT DISTINCT
				u.intUserCn AS user_id,
				u.Nachname AS lastname,
				u.Vorname AS firstname,
				u.descUserCn AS username,
				u.division AS division,
				q.id,
				uqp.id,
				'Grau' AS status,
				uqp.currentEducationTime,
				0 AS seminarEducationTime,
				q.minTime AS qualificationMinTime,
				DATEFROMPARTS(@idd_year, 1, 1) AS startDate,
				DATEFROMPARTS(@idd_year, 12, 31) AS endDate
				FROM v_Users u
				INNER JOIN tblUserQualificationPeriods uqp ON u.intUserCn = uqp.user_id
				INNER JOIN tblQualifications q ON uqp.qualification_id = q.id
				LEFT OUTER JOIN tblUsersTargetGroups utg ON u.intUserCn = utg.UserCn
				INNER JOIN tblTargetGroups tg ON utg.targetGroup_id = tg.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 ISNULL(@targetGroup_id, tg.id) = tg.id
				AND (EXISTS(SELECT * FROM v_Users WHERE intUserCn = @current_user_id AND securityId = 100)
				OR EXISTS(SELECT * FROM tblTargetGroupManagers WHERE tblTargetGroupManagers.user_id = @current_user_id
				AND tblTargetGroupManagers.targetGroup_id = tg.id)
				OR EXISTS(SELECT * FROM @OrgUnits AS OrgUnits JOIN tblUsersOrganisationUnits ON organisationunit_id = OrgUnits.id AND user_id = u.intUserCn)
				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 tg.mandator_id = @current_mandator_id
				AND defaultforlibrary = 0

				UPDATE @ResultTable
				SET currentEducationTime = ISNULL(userScores.totalEducationTime, 0),
				seminarEducationTime = ISNULL(userScores.totalSeminarEducationTime, 0)
				FROM @ResultTable AS res
				LEFT JOIN
				(
				SELECT DISTINCT
				user_id,
				qualificationPeriod_id,
				SUM(educationTime) AS totalEducationTime,
				SUM(seminarEducationTime) AS totalSeminarEducationTime
				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
				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
				-- AND tblUserQualificationPeriods.endDate IS NULL
				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)

				IF @mandator_name = 'Continentale'
				BEGIN
				SELECT
				lastname AS 'Name',
				firstname AS 'Vorname',
				username 'Kennung',
				employeeId AS 'Interne ID',
				rt.division 'Abteilung',
				status 'Status',
				dbo.fn_GetEducationTimeString(currentEducationTime) 'Ist-BZ',
				dbo.fn_GetEducationTimeString(seminarEducationTime) 'Seminar',
				dbo.fn_GetEducationTimeString(qualificationMinTime) 'Soll-BZ',
				DATEADD(dd, 0, DATEDIFF(dd, 0, startDate)) 'Beginn',
				DATEADD(dd, 0, DATEDIFF(dd, 0, endDate)) 'End'
				FROM @ResultTable AS rt
				INNER JOIN tableUsers AS tu ON tu.intUserCn = rt.user_id
				ORDER BY lastname ASC, firstname ASC
				END
				ELSE
				BEGIN
				SELECT
				lastname AS 'Name',
				firstname AS 'Vorname',
				username 'Kennung',
				division 'Abteilung',
				status 'Status',
				dbo.fn_GetEducationTimeString(currentEducationTime) 'Ist-BZ',
				dbo.fn_GetEducationTimeString(seminarEducationTime) 'Seminar',
				dbo.fn_GetEducationTimeString(qualificationMinTime) 'Soll-BZ',
				DATEADD(dd, 0, DATEDIFF(dd, 0, startDate)) 'Beginn',
				DATEADD(dd, 0, DATEDIFF(dd, 0, endDate)) 'End'
				FROM @ResultTable
				ORDER BY lastname ASC, firstname ASC
				END
			</command>
		</Report>
	</Reports>
	<Parameters>
		<Parameter id="9b923abd-0377-4e6f-a345-58798cf88493" isSystem="False" name="IDD jahr" reportParameterType_id="9a0eea61-5322-4399-9e4e-7a881ea5b9cf" queryParameterName="@idd_year" />
		<Parameter id="76f4d3c5-2618-4c32-bade-747a2fd8b2ad" isSystem="False" name="Target Groups Current Mandator" reportParameterType_id="4123c2c2-d408-476a-82bf-ca77f9ecf944" 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" />
	</Parameters>
	<ParameterTypes>
		<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>
		<ParameterType id="4123c2c2-d408-476a-82bf-ca77f9ecf944" isSystem="False" name="TargetGroup" datatype="IntegerDDL" dataValueField="id" dataTextField="title">
			<query>
				SELECT id, title
				FROM tblTargetGroups
				WHERE(mandator_id = @current_mandator_id)
				AND (EXISTS(SELECT * FROM v_Users WHERE intUserCn = @current_user_id AND securityId = 100)
				OR EXISTS(SELECT * FROM tblTargetGroupManagers WHERE tblTargetGroupManagers.user_id = @current_user_id
				AND tblTargetGroupManagers.targetGroup_id = tblTargetGroups.id)
				OR EXISTS(SELECT *
				FROM tblRolesFunctions
				JOIN tblRoles ON tblRoles.id = tblRolesFunctions.role_id
				JOIN tblFunctions ON tblFunctions.id = tblRolesFunctions.function_id
				JOIN v_Users ON v_Users.intUserCn = @current_user_id
				WHERE tblFunctions.shortcut = 'FcnIsAuthorizedForAllTGs' AND tblRoles.id = v_Users.SecurityID))
				AND defaultforlibrary = 0
				ORDER BY title
			</query>
		</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>
	</ParameterTypes>
</ReportsExport>