﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
  <Reports>
    <Report id="578a3ba5-b646-4ae1-9c20-0ede4e6c7211" codekey="Mecklenburgische_StatusAllTrainingsAllUsers" categoryCodekey="Trainings" name="Seminarstatistik Mecklenburgische" description="Listet alle Benutzer, sowie ihre Zielgruppen, und die ihnen zugeordneten Seminare, sowie das Datum, wann das jeweilige Seminar stattfindet. ACHTUNG: Lange Ausführungszeit!">
      <MetaData created="2021-02-12T11:26:57" createdBy="Kaiser, Jan (jan.kaiser)" createdBy_user_id="53284" modified="2021-02-12T16:04:59" modifiedBy="Kaiser, Jan (jan.kaiser)" modifiedBy_user_id="53284" />
      <ExecutionDetails format="TableResult" commandType="SqlCommandOrQuery" exportHandler="" adminControl="" exportMultipleTablesToSheets="False" datesWithTime="False" extraParams="" />
      <Mandators mandatorMode="OnlyOwner" mandator_id="35f3db1c-1b05-4a11-883a-2e57dafb9a9a" mandatorName="Mecklenburgische" isStandard="False" isUsedByMenu="False" />
      <Parameters>
        <Parameter id="83428ef6-aa30-41f4-a047-131633de7ed6" isRequired="False" allowMultiSelect="True" name="OrgUnits" contextName="OrgUnits" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="3a54b6f1-18ce-4f5b-96dd-7c8d958f904e" isRequired="False" allowMultiSelect="False" name="Seminarart" contextName="Seminarart" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="d8e4595f-8bdd-4a54-9298-8f378450e6a0" isRequired="False" allowMultiSelect="False" name="Zeitraum" contextName="Zeitraum" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
      </Parameters>
      <Roles>
        <Role id="81" />
        <Role id="90" />
      </Roles>
      <command>-- Schlüssel für Code: Mecklenburgische_StatusAllTrainingsAllUsers
-- Name:               Status aller Seminare aller Benutzer
-- Beschreibung:       Listet alle Benutzer, sowie ihre Zielgruppen, und die ihnen zugeordneten Seminare, sowie das Datum, wann das jeweilige Seminar stattfindet. ACHTUNG: Lange Ausführungszeit!
-- Parameterliste:     OPTIONAL workflow (Seminarart)
-- Ergebnisformat:     Tabelle
-- Für alle Mandanten: Nein
-- Verfügbar für:      Mecklenburgische
/*
Declare @current_mandator_id uniqueidentifier = (SELECT id FROM tblMandators WHERE name = 'mecklenburgische')
DECLARE @dateRange_start DATETIME = NULL
DECLARE @dateRange_end DATETIME = NULL
DECLARE @workflow INT
SET @workflow = NULL -- 0 PULL , 1 PUSH, 2 MICRO, NULL All
*/
DECLARE @mandator_id UNIQUEIDENTIFIER
SET @mandator_id = @current_mandator_id
/*
DECLARE @orgUnit_id TABLE (
	id UNIQUEIDENTIFIER
) 
INSERT INTO @orgUnit_id VALUES  ('D682DB77-B23C-499A-B15A-7F501BA390C3') --Mecklenburgische Hauptknoten
*/

-- table for the result
DECLARE @tblResult TABLE
(
    lastname NVARCHAR(128),
    firstname NVARCHAR(128),
    username NVARCHAR(64),
    orgunit NVARCHAR(MAX),
    companyAD NVARCHAR(255),
    trainingTag NVARCHAR(64),
    courseUnits nvarchar(5),
    targetGroups NVARCHAR(4000),
    trainingTitle NVARCHAR(255),
    trainingTitleTitle NVARCHAR(256),
    location NVARCHAR(255),
    startDate DATETIME,
    endDate DATETIME,
    userTrainingStatus NVARCHAR(255),
	note NVARCHAR(MAX)
)

DECLARE @curUsersAndTrainings CURSOR
DECLARE @curTargetGroups CURSOR

DECLARE @currentDate DATETIME
DECLARE @user_id INT
DECLARE @lastuser_id INT
DECLARE @lastname NVARCHAR(128)
DECLARE @firstname NVARCHAR(128)
DECLARE @username NVARCHAR(64)
DECLARE @orgunit NVARCHAR(MAX)
DECLARE @companyAD NVARCHAR(255)
DECLARE @trainingTag NVARCHAR(20)
DECLARE @targetGroupName NVARCHAR(256)
DECLARE @targetGroups NVARCHAR(4000)
DECLARE @training_id UNIQUEIDENTIFIER
DECLARE @trainingTitle_id UNIQUEIDENTIFIER
DECLARE @trainingTitle NVARCHAR(1024)
DECLARE @trainingTitleTitle NVARCHAR(1024)
DECLARE @location NVARCHAR(255)
DECLARE @startDate DATETIME
DECLARE @endDate DATETIME
DECLARE @status NVARCHAR(255)
DECLARE @userTrainingStatus INT

SET @currentDate = GETDATE()

SET @curUsersAndTrainings = CURSOR FORWARD_ONLY STATIC FOR
    SELECT
        v_Users.intUserCn as user_id,
        Nachname AS lastname,
        Vorname AS firstname,
        descUserCn AS username,
        ISNULL(STUFF((
        SELECT ', ' + title + ' (' + CASE WHEN position = 0 THEN 'M' WHEN position = 1 THEN 'F' WHEN position = 2 THEN 'V' END + ')'
        FROM tblOrganisationUnits
        JOIN tblUsersOrganisationUnits ON tblUsersOrganisationUnits.organisationUnit_id = tblOrganisationUnits.id
        WHERE tblUsersOrganisationUnits.user_id = v_Users.intUserCn
        ORDER BY title
        FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, ''), '') AS ou_id,
        companyAD,
        (SELECT tblItems.tag FROM tblItems WHERE tblItems.id = training_id) AS trainingTag,
        tblTrainings.id AS training_id,
        tblTrainingTitles.id AS trainingTitle_id,
        (SELECT tblItems.title FROM tblItems WHERE tblItems.id = training_id) AS trainingTitle,
        tblItems.title AS trainingTitleTitle,
        tblTrainings.location AS location,
        tblTrainings.startDate AS startDate,
        tblTrainings.endDate AS endDate,
        userTrainingStatus
    FROM
        (
            SELECT
                tblUserTrainingStatus.user_id,
                --intUserCn AS user_id,
                tblUserTrainingStatus.training_id,
                MAX(tblUserTrainingStatus.actionclass_id) AS userTrainingStatus
            FROM
                tblUserTrainingStatus
            GROUP BY
                user_id,
                training_id
        ) AS #userStatus
        JOIN v_Users
            ON #userStatus.user_id = v_Users.intUserCn
        JOIN tblTrainings
            ON tblTrainings.id = #userStatus.training_id
        JOIN tblTrainingTitles
            ON tblTrainingTitles.id = tblTrainings.trainingTitle_id
        JOIN tblItems
            ON tblItems.id = tblTrainingTitles.id
    WHERE
        v_Users.mandator_id = @mandator_id
    AND EXISTS(SELECT * FROM tblUsersOrganisationUnits WHERE user_id = v_Users.intUserCn AND organisationUnit_id IN (SELECT * FROM @orgUnit_id))
        AND tblItems.itemType_id = 8
        AND (@workflow IS NULL OR tblTrainingTitles.workflow = @workflow
        OR (@workflow = 2 AND tblTrainings.isMicroTraining = 1))
    ORDER BY 
        v_Users.Nachname, v_Users.Vorname, v_Users.descUserCn, trainingTitle --ORDER BY isMicroTraining DESC


OPEN @curUsersAndTrainings
FETCH NEXT FROM
    @curUsersAndTrainings
INTO
    @user_id, @lastname, @firstname, @username, @orgunit,@companyAD,@trainingTag, @training_id, @trainingTitle_id, @trainingTitle, @trainingTitleTitle, @location, @startDate, @endDate, @userTrainingStatus

WHILE(@@FETCH_STATUS = 0)
BEGIN -- loop @curUsersAndTrainings
    IF(@lastuser_id IS NULL OR NOT @user_id = @lastuser_id) -- do this only as necessary
    BEGIN
        SET @lastuser_id = @user_id

        -- ======== create a list of target groups ========
        SET @targetGroups = '' -- initialize

        SET @curTargetGroups = CURSOR FORWARD_ONLY STATIC
        FOR
            SELECT
                ISNULL(NULLIF(titleForLearners, ''), title)AS targetGroupName
            FROM
                tblTargetGroups, tblUsersTargetGroups
            WHERE
                tblTargetGroups.id = tblUsersTargetGroups.targetGroup_id
                AND tblUsersTargetGroups.UserCn = @user_id
            ORDER BY ISNULL(titleForLearners, title)

        OPEN @curTargetGroups
        FETCH NEXT FROM
            @curTargetGroups
        INTO
            @targetGroupName

        WHILE(@@FETCH_STATUS = 0)
        BEGIN -- loop @curTargetGroups
            IF
            (
                NOT @targetGroupName = 'Bibliothek'
                AND
                NOT @targetGroupName IS NULL
                AND
                NOT @targetGroupName = ''
            )
                SET @targetGroups = @targetGroups + @targetGroupName + ', '

            FETCH NEXT FROM @curTargetGroups INTO @targetGroupName
        END -- loop @curTargetGroups
    
        CLOSE @curTargetGroups
        DEALLOCATE @curTargetGroups

        IF(LEN(@targetGroups) &gt; 1)
            SET @targetGroups = LEFT(@targetGroups, LEN(@targetGroups) - 1)
    END

    IF(@userTrainingStatus IS NOT NULL)
    BEGIN
        SET @status = CASE @userTrainingStatus
            WHEN 10 THEN 'Auf Warteliste'
            WHEN 20 THEN 'Gebucht'
            WHEN 30 THEN 'Eingeladen'
            WHEN 40 THEN 'Storniert'
            WHEN 50 THEN 'Zurückgesetzt'
            WHEN 60 THEN 'Einladung bestätigt'
			WHEN 65 THEN 'Abgesagt'
            WHEN 70 THEN 'Anwesenheit bestätigt'
            WHEN 80 THEN 'Teilnahme bestätigt'
			WHEN 85 THEN 'Teilnahme bestätigt (nicht alle Feedbackbögen ausgeführt)'
        END
    END
    ELSE
        SET @status = 'Undefiniert' -- ISNULL(@status,'undefiniert')

    -- ======== finally, insert into our result table ========
    INSERT INTO @tblResult
    (
        lastname,
        firstname,
        username,
        orgunit,
        companyAD,
        trainingtag,
        courseUnits,
        targetGroups,
        trainingTitle,
        trainingTitleTitle,
        location,
        startDate,
        endDate,
        userTrainingStatus,
		note
    )
    VALUES
    (
        @lastname,
        @firstname,
        @username,
        @orgunit,
        @companyAD,
        @trainingTag,
        (SELECT courseUnits FROM tblTrainings WHERE id = @training_id),
        @targetGroups,
        @trainingTitle,
        @trainingTitleTitle,
        @location,
        @startDate,
        @endDate,
        @status,
		(SELECT note from tblUserTrainingStatus WHERE tblUserTrainingStatus.user_id = @user_id and tblUserTrainingStatus.training_id = @training_id)
    )

    FETCH NEXT FROM @curUsersAndTrainings INTO @user_id, @lastname, @firstname, @username, @orgunit,@companyAD,@trainingTag, @training_id, @trainingTitle_id, @trainingTitle, @trainingTitleTitle, @location, @startDate, @endDate, @userTrainingStatus
END -- loop @@curUsersAndTrainings
CLOSE @curUsersAndTrainings
DEALLOCATE @curUsersAndTrainings

--  now add external items if required
IF(@workflow IS NULL or @workflow = 3) -- if only external items or all
BEGIN
    INSERT INTO
        @tblResult
    SELECT
        v_Users.Nachname as Name,
        v_Users.Vorname as firstname,
        v_Users.descUserCn as username,
        ISNULL(STUFF((
        SELECT ', ' + title + ' (' + CASE WHEN position = 0 THEN 'M' WHEN position = 1 THEN 'F' WHEN position = 2 THEN 'V' END + ')'
        FROM tblOrganisationUnits
        JOIN tblUsersOrganisationUnits ON tblUsersOrganisationUnits.organisationUnit_id = tblOrganisationUnits.id
        WHERE tblUsersOrganisationUnits.user_id = v_Users.intUserCn
        ORDER BY title
        FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, ''), '') AS orgunit,
        v_Users.companyAD,
        tblItems.tag as trainingTag,
        '' as courseUnits,
        '' as targetGroups,
        tblItems.title as trainingTitle,
        tblItems.titleForLearners as trainingTitleTitle,
        '' as location,
        tblExternalItems.startdate,
        tblExternalItems.endDate,
        'nachgetragen' as userTrainingStatus,
		(SELECT note from tblUserTrainingStatus WHERE tblUserTrainingStatus.user_id = v_Users.intUserCn and tblUserTrainingStatus.training_id = tblItems.id)
    FROM
        tblStatusUserItemHistory
        join tblExternalItems
            on tblExternalItems.id = tblStatusUserItemHistory.item_id
        join tblItems
            on tblItems.id = tblExternalItems.id
        join v_Users
            on v_Users.intUserCn = tblStatusUserItemHistory.user_id
    WHERE
        tblItems.mandator_id = @mandator_id
        AND tblItems.itemType_id = 8
		AND EXISTS(SELECT * FROM tblUsersOrganisationUnits WHERE user_id = v_Users.intUserCn AND organisationUnit_id IN (SELECT * FROM @orgUnit_id))
END

-- get the result
SELECT
    lastname AS Name,
    firstname AS Vorname,
    username AS Kennung,
    --companyAD AS Unternehmen,
    --(SELECT codekey FROM tblOrganisationUnits WHERE id = orgunit) AS "OE-ID",
    orgunit AS OE,
    targetGroups AS 'Zugeordnete Zielgruppen',
    trainingTitle AS 'Seminartitel',
    trainingTitleTitle AS 'Titel des Seminartermin',
    startDate as Startdatum,
    endDate AS Enddatum,
    courseUnits AS Unterrichtseinheiten,
    location AS 'Ort',
    userTrainingStatus AS Status,
    trainingTag AS 'Seminarkennzeichen',
	ISNULL(note,'-') AS 'Notiz'
FROM
    @tblResult
WHERE
    startDate &gt;= ISNULL(@dateRange_start,'2010-01-01')
    AND endDate &lt;= ISNULL(@dateRange_end, GETDATE())
ORDER BY
    Name</command>
    </Report>
  </Reports>
  <Parameters>
    <Parameter id="83428ef6-aa30-41f4-a047-131633de7ed6" isSystem="True" name="OrgUnits" reportParameterType_id="6237f8f6-9e0a-452a-800b-df8144d2d3f2" queryParameterName="@orgUnit_id" />
    <Parameter id="3a54b6f1-18ce-4f5b-96dd-7c8d958f904e" isSystem="True" name="Seminarart" reportParameterType_id="325c0998-6bc6-4287-bd10-a70e90a78bd1" queryParameterName="@workflow" />
    <Parameter id="d8e4595f-8bdd-4a54-9298-8f378450e6a0" isSystem="True" name="Zeitraum" reportParameterType_id="abff13be-91c3-4ee1-93a3-7292f8e013ba" queryParameterName="@dateRange" />
  </Parameters>
  <ParameterTypes>
    <ParameterType id="6237f8f6-9e0a-452a-800b-df8144d2d3f2" isSystem="True" name="OrgUnit" datatype="OrgUnit" dataValueField="" dataTextField="" />
    <ParameterType id="325c0998-6bc6-4287-bd10-a70e90a78bd1" isSystem="True" name="Auswahlliste Zahlen" datatype="IntegerDDL" dataValueField="Value" dataTextField="Text">
      <query>
        SELECT
        0 AS Value,
        'Pull' AS Text
        UNION
        SELECT
        1 AS Value,
        'Push' AS Text
        UNION
        SELECT
        2 AS Value,
        'Micro' AS Text
        UNION
        SELECT
        3 AS Value,
        'Nachtrag' AS Text

      </query>
    </ParameterType>
    <ParameterType id="abff13be-91c3-4ee1-93a3-7292f8e013ba" isSystem="True" name="DateRange" datatype="DateRange" dataValueField="" dataTextField="" />
  </ParameterTypes>
</ReportsExport>