﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
  <Reports>
    <Report id="1d7eccba-ed75-4d8b-931a-df012211c514" codekey="BGV_Export_Perbit" categoryCodekey="SpecialPurpose" name="Export Lernstandsdaten BGV" description="Der Report exportiert alle erfolgreich abgeschlossenen Lernmaßnahmen aller Nutzer des Mandanten BGV, die im angegebenen Zeitraum erzeugt oder geändert (Korrekturfunktion) wurden. Damit sind alle Lernmaßnahmen gemeint, die zu einem Eintrag im Bildungspass des Nutzers führen (also insbesondere auch externe Bausteine).">
      <MetaData created="2019-10-31T18:13:14" createdBy="Administrator_LastName, Administrator_FirstName (Administrator)" createdBy_user_id="34292" modified="2021-08-02T15:57:30" modifiedBy="Administrator_LastName, Administrator_FirstName (Administrator)" modifiedBy_user_id="34292" />
      <ExecutionDetails format="TableResult" commandType="SqlCommandOrQuery" exportHandler="" adminControl="" exportMultipleTablesToSheets="False" datesWithTime="False" extraParams="" />
      <Mandators mandatorMode="OnlyOwner" mandator_id="ddaf9cce-7524-4818-9a27-328208325ad4" mandatorName="BGV" 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>		--DECLARE @current_mandator_id UNIQUEIDENTIFIER = (SELECT TOP 1 id FROM tblMandators WHERE name = 'BGV')
		--DECLARE @dateRange_start DATETIME
		--DECLARE @dateRange_end DATETIME 


        DECLARE @qualification_IDD UNIQUEIDENTIFIER = (SELECT TOP 1 id FROM tblQualifications WHERE referenceKey = 'IDD')
        DECLARE @qualification_BSC1 UNIQUEIDENTIFIER = (SELECT TOP 1 id FROM tblQualifications WHERE referenceKey = 'BSC_p')
        DECLARE @qualification_BSC2 UNIQUEIDENTIFIER = (SELECT TOP 1 id FROM tblQualifications WHERE referenceKey = '1')

		--help tables for quicker calculation of status educationTime
		CREATE TABLE #idd
		(
			status_id UNIQUEIDENTIFIER,
			educationTime BIGINT
		)
		CREATE TABLE #bsc1
		(
			status_id UNIQUEIDENTIFIER,
			educationTime BIGINT
		)
		CREATE TABLE #bsc2
		(
			status_id UNIQUEIDENTIFIER,
			educationTime BIGINT
		)

        -- Calculate educationTime for Qualification IDD
		INSERT INTO #idd
		SELECT
		ISNULL(referenceScore_id, status_id),
		educationTime
        FROM tblUserItemScores UIS
        INNER JOIN tblUserItemScoresQualifications UISQ ON UISQ.useritemscore_id = UIS.id 
        AND UISQ.qualification_id = @qualification_IDD

		INSERT INTO #idd
		SELECT
		ISNULL(referenceScore_id, status_id),
		educationTime
        FROM tblUserItemScores UIS
        INNER JOIN tblUserItemScoresQualifications UISQ ON UISQ.useritemscore_id = UIS.id 
        AND UISQ.qualification_id = @qualification_BSC1
		
		INSERT INTO #idd
		SELECT
		ISNULL(referenceScore_id, status_id),
		educationTime
        FROM tblUserItemScores UIS
        INNER JOIN tblUserItemScoresQualifications UISQ ON UISQ.useritemscore_id = UIS.id 
        AND UISQ.qualification_id = @qualification_BSC2


        SELECT
        Users.employeeId AS [Schlüssel MA],
        'manuelle Einzelnaßnahme' AS [Kurzbezeichnung],
        'Einzelmaßnahme' AS [Maßnahmentyp],
        ISNULL(NULLIF(LTRIM(RTRIM(Items.titleForLearners)),''), Items.title) AS [Art der Maßnahme],
        CASE
        WHEN Items.isExternal = 1
        -- For external items, get starteDate from external Item Properties
        THEN iSNULL((SELECT TOP 1 FORMAT(EI.startDate,'dd.MM.yyyy') FROM tblExternalItems EI WHERE EI.id = Items.id),'')
        WHEN Items.itemType_id = 0
        -- For Test, check Testsession startDate
        THEN (SELECT TOP 1 FORMAT(TTS.startDate,'dd.MM.yyyy') FROM tblTasTestSessions TTS WHERE TTS.id = SUIH.session_id )
        WHEN Items.itemType_id = 1
        -- For Theme, check Themesession startDate
        THEN (SELECT TOP 1 FORMAT(TS.startDate,'dd.MM.yyyy') FROM tblThemeSessions TS WHERE TS.id = SUIH.session_id )
        WHEN Items.itemType_id = 2
        -- For Training events, check training event startDate
        THEN (SELECT TOP 1 FORMAT(Trainings.startDate,'dd.MM.yyyy') FROM tblTrainings Trainings WHERE Trainings.id = Items.id)
        WHEN Items.itemType_id = 6
        -- For documents, use green status date
        THEN FORMAT(SUIH.startDate,'dd.MM.yyyy')
        ELSE
        (SELECT TOP 1 FORMAT(SUIHS.startDate,'dd.MM.yyyy') FROM tblStatusUserItemHistory SUIHS WHERE SUIHS.status = 0 AND SUIHS.session_id = SUIH.session_id)
        END AS [von],
        CASE
        WHEN Items.isExternal = 1
        -- For external items, get endDate from external Item Properties
        THEN iSNULL((SELECT TOP 1 FORMAT(EI.endDate,'dd.MM.yyyy') FROM tblExternalItems EI WHERE EI.id = Items.id),'')
        WHEN Items.itemType_id = 2
        -- For Training events, check training event startDate
        THEN (SELECT TOP 1 FORMAT(Trainings.endDate,'dd.MM.yyyy') FROM tblTrainings Trainings WHERE Trainings.id = Items.id)
        ELSE
        -- Use status start date otherwise
        FORMAT(SUIH.startDate,'dd.MM.yyyy')
        END AS [bis],
        CASE
        WHEN Items.isExternal = 1
        -- For external items, get organizer from external Item Properties
        THEN iSNULL((SELECT TOP 1 organizer FROM tblExternalItems EI WHERE EI.id = Items.id),'')
        WHEN Items.itemType_id = 2
        -- For Training events, check training event organizer
        THEN (SELECT TOP 1 OUs.title FROM tblTrainings Trainings INNER JOIN tblOrganisationUnits OUs ON Trainings.organizer = OUs.id AND Trainings.id = Items.id)
        ELSE ''
        END AS [Veranstalter],
        CASE
        WHEN Items.isExternal = 1
        -- For external items, get location from external Item Properties
        THEN iSNULL((SELECT TOP 1 location FROM tblExternalItems EI WHERE EI.id = Items.id),'')
        WHEN Items.itemType_id = 2
        -- For Training events, check training event location
        THEN (SELECT TOP 1 Trainings.location FROM tblTrainings Trainings WHERE Trainings.id = Items.id)
        ELSE ''
        END AS [Veranstaltungsort],
        -- Calculate educationTime for Qualification IDD
        (SELECT SUM(educationTime)
            FROM #idd
			WHERE #idd.status_id = suih.id
        )
        AS [Bildungszeiten IDD],
        -- Calculate educationTime for Qualification BSC 1
        (SELECT SUM(educationTime)
            FROM #bsc1
			WHERE #bsc1.status_id = suih.id
        )
        AS [Bildungszeiten BSC 1],
        -- Calculate educationTime for Qualification BSC 2
        (SELECT SUM(educationTime)
            FROM #bsc2
			WHERE #bsc2.status_id = suih.id
        )
        AS [Bildungszeiten BSC 2],
        SUIH.status AS [Status]
        INTO #tempResult
        FROM tblStatusUserItemHistory SUIH
        INNER JOIN v_Users Users ON Users.intUserCn = SUIH.user_id
        INNER JOIN tblItems Items on Items.id = SUIH.item_id
        WHERE
        Users.mandator_id = @current_mandator_id
        AND SUIH.status = 2
        AND (Users.employeeId IS NOT NULL AND Users.employeeId &lt;&gt; '')
        AND Items.itemType_id &lt;&gt; 15 -- no Feedbacks
        AND Items.itemType_id &lt;&gt; 3 -- no Polls		

		SELECT 
        [Schlüssel MA],
        [Kurzbezeichnung],
        [Maßnahmentyp],
        [Art der Maßnahme],
        [von],
        [bis],
        [Veranstalter],
        [Veranstaltungsort],
		[Bildungszeiten IDD],
		[Bildungszeiten BSC 1],
		[Bildungszeiten BSC 2]
		FROM
		(
			SELECT
			[Schlüssel MA],
			[Kurzbezeichnung],
			[Maßnahmentyp],
			[Art der Maßnahme],
			[von],
			[bis],
			[Veranstalter],
			[Veranstaltungsort],
			(SELECT LEFT(CONVERT(TIME,DATEADD(minute,[Bildungszeiten IDD],0)),5)) AS [Bildungszeiten IDD],
			(SELECT LEFT(CONVERT(TIME,DATEADD(minute,[Bildungszeiten BSC 1],0)),5)) AS [Bildungszeiten BSC 1],
			(SELECT LEFT(CONVERT(TIME,DATEADD(minute,[Bildungszeiten BSC 2],0)),5)) AS  [Bildungszeiten BSC 2],
			CASE WHEN NULLIF(#tempResult.von,'') IS NULL THEN
				NULL
			ELSE
				CAST(SUBSTRING(#tempResult.von,7,4) + '-' + SUBSTRING([von],4,2) + '-' + LEFT([von],2) AS DATETIME)
			END AS startDate,
			CASE WHEN NULLIF(#tempResult.bis,'') IS NULL THEN
				NULL
			ELSE
				CAST(SUBSTRING(#tempResult.bis,7,4) + '-' + SUBSTRING(bis,4,2) + '-' + LEFT(bis,2) AS DATETIME)
			END AS endDate
			FROM #tempResult
		) AS innerQuery
		WHERE
		(
			@dateRange_start IS NULL
			OR
			startDate &gt;= @dateRange_start
		)
		AND
		(
			@dateRange_end IS NULL
			OR
			endDate &lt;= @dateRange_end
		)
		order by endDate

        DROP TABLE #tempResult
		DROP TABLE #bsc1
		DROP TABLE #bsc2
		DROP TABLe #idd</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>