﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
	<Reports>
		<Report id="aec65a46-fd84-4808-bd0d-05775d4ba355" codekey="IMS Controlling " categoryCodekey="Trainings" name="Absolvierte Seminare pro User" description="Der Report gibt alle absolvierten Seminare von Usern aus. ">
			<MetaData created="2020-08-31T17:06:51" createdBy="ims-lernen, Administrator (Administrator)" createdBy_user_id="36389" modified="2021-01-21T20:15:49" modifiedBy="ims-lernen, Administrator (Administrator)" modifiedBy_user_id="36389" />
			<ExecutionDetails format="TableResult" commandType="SqlCommandOrQuery" exportHandler="" adminControl="" exportMultipleTablesToSheets="False" datesWithTime="False" extraParams="" />
			<Mandators mandatorMode="OnlyOwner" mandator_id="803f80c7-1196-4699-bf1f-ac36ad22ecd8" isStandard="False" isUsedByMenu="False" />
			<Parameters>
				<Parameter id="d8e4595f-8bdd-4a54-9298-8f378450e6a0" isRequired="False" allowMultiSelect="False" name="Zeitraum" contextName="Zeitraum" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
			</Parameters>
			<Roles>
				<Role id="90" />
			</Roles>
			<command>
				-- CleanUP
				IF OBJECT_ID('tempdb..#trainings') IS NOT NULL
				DROP TABLE #trainings

				IF OBJECT_ID('tempdb..#agendaEntries') IS NOT NULL
				DROP TABLE #agendaEntries
				/*
				DECLARE @current_mandator_id UNIQUEIDENTIFIER
				DECLARE @dateRange_start Date = '2020-11-11'
				DECLARE @dateRange_end Date = '2020-11-12'


				SET @current_mandator_id = (SELECT id FROM tblMandators WHERE name like 'ims%')
				*/
				CREATE TABLE #trainings(
					Jahr NVARCHAR(4),
					Monat NVARCHAR(10),
					Firma Nvarchar(256),
					Nachname NVARCHAR(128),
					Vorname NVARCHAR(128),
					"Interne ID" NVARCHAR(50),
					Kostenstelle NVARCHAR(64),
					Abteilung NVARCHAR(128),
					Schulungstitel NVARCHAR(MAX),
					"Schulungs-Nr." NVARCHAR(MAX),
					"Beginn der Schulung (Tag)" datetime,
					"Ende der Schulung (Tag)" datetime,
					"Dauer in Stunden" FLOAT
				)

				CREATE TABLE #agendaEntries(
					startDate DATETIME,
					endDate DATETIME,
					location NVARCHAR(MAX),
					duration INT,
					startTime DATETIME,
					dayNumber INT,
					active INT
				)

				DECLARE @startDate DATETIME
				DECLARE @endDate DATETIME
				DECLARE @training_id uniqueidentifier
				DECLARE @companyAD NVARCHAR(256)
				DECLARE @Nachname NVARCHAR(128)
				DECLARE @Vorname NVARCHAR(128)
				DECLARE @employeeId NVARCHAR(50)
				DECLARE @kostenstelle NVARCHAR(64)
				DECLARE @division NVARCHAR(128)
				DECLARE @tag NVARCHAR(MAX)
				DECLARE @titleForLearners NVARCHAR(MAX)
				DECLARE @duration FLOAT

				DECLARE trainings_cursor CURSOR FAST_FORWARD FOR
				SELECT
					suih.startDate,
					suih.endDate,
					suih.item_id,
					u.companyAD,
					u.Nachname,
					u.Vorname,
					u.employeeId,
					uca.customAttribute4,
					u.division,
					ISNULL(items.title,items.titleForLearners),
					items.tag
				FROM tblStatusUserItemHistory suih
					INNER JOIN v_Users u ON suih.user_id = u.intUserCn AND u.mandator_id = @current_mandator_id
					INNER JOIN tblUserCustomAttributes uca on u.intUserCn = uca.user_id
					INNER JOIN (SELECT id, title, titleForLearners, tag FROM tblItems i WHERE i.itemType_id = 2 AND deleted IS NULL) AS items ON items.id = suih.item_id
				WHERE (suih.startDate &gt;= ISNULL(@dateRange_start,'2018-01-01'))
					AND (ISNULL(suih.endDate, suih.startDate) &lt;= ISNULL(@dateRange_end,GETDATE()))
					AND
					(
						suih.status = 2
					OR 
						(
						dbo.fn_GetTrainingStatusCodeForUser(@current_mandator_id, suih.item_id, suih.user_id) = 'S85_PARTICIPATED_NO_POLLS'
						AND
						NOT EXISTS(SELECT 1 FROM tblStatusUserItemHistory WHERE user_id=suih.user_id AND item_id=suih.item_id AND status=2)
						)
					)
				ORDER BY suih.startDate

				OPEN trainings_cursor
				FETCH NEXT FROM trainings_cursor INTO
					@startDate,
					@endDate,
					@training_id,
					@companyAD,
					@Nachname,
					@Vorname,
					@employeeId,
					@kostenstelle,
					@division,
					@titleForLearners,
					@tag

				WHILE @@FETCH_STATUS = 0
				BEGIN
					INSERT INTO #agendaEntries
					EXEC sp_GetTrainingAgendaEntriesInfo @training_id

					SET @duration = (SELECT SUM(duration) FROM #agendaEntries)

					-- There are only agendaentries for trainings with multiple days
					IF(@duration IS NULL)
					SET @duration =  CAST(DATEDIFF(MINUTE,(SELECT DISTINCT startDate FROM #agendaEntries),(SELECT DISTINCT endDate FROM #agendaEntries)) AS FLOAT)

					INSERT INTO #trainings
					VALUES (
						DATENAME(YEAR,@startDate),
						DATENAME(MONTH,@startDate),
						@companyAD,
						@Nachname,
						@Vorname,
						@employeeId,
						ISNULL(@kostenstelle,'-'),
						@division,
						@titleForLearners,
						ISNULL(@tag, '-'),
						(SELECT DISTINCT startDate FROM #agendaEntries),
						(SELECT DISTINCT endDate FROM #agendaEntries),
						ROUND(@duration/60,2)
					)
					
					DELETE FROM #agendaEntries
					
					FETCH NEXT FROM trainings_cursor INTO
						@startDate,
						@endDate,
						@training_id,
						@companyAD,
						@Nachname,
						@Vorname,
						@employeeId,
						@kostenstelle,
						@division,
						@titleForLearners,
						@tag

				END

				CLOSE trainings_cursor
				DEALLOCATE trainings_cursor

				SELECT * FROM #trainings
				
				DROP TABLE #trainings
				DROP TABLE #agendaEntries
			</command>
		</Report>
	</Reports>
	<Parameters>
		<Parameter id="d8e4595f-8bdd-4a54-9298-8f378450e6a0" isSystem="True" name="Zeitraum" reportParameterType_id="abff13be-91c3-4ee1-93a3-7292f8e013ba" queryParameterName="@dateRange" />
	</Parameters>
	<ParameterTypes>
		<ParameterType id="abff13be-91c3-4ee1-93a3-7292f8e013ba" isSystem="True" name="DateRange" datatype="DateRange" dataValueField="" dataTextField="" />
	</ParameterTypes>
</ReportsExport>