﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
  <Reports>
    <Report id="889b53fe-925c-4e5e-a57e-f95fcaf3a175" codekey="ERGOAT_StatusAllTrainingsAllUsers" categoryCodekey="Trainings" name="Status aller Seminare aller Benutzer" 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="2020-06-17T10:47:02" createdBy="ergo-ecampus-at, Administrator (Administrator)" createdBy_user_id="16839" modified="2021-01-07T17:20:25" modifiedBy="ergo-ecampus-at, Administrator (Administrator)" modifiedBy_user_id="16839" />
      <ExecutionDetails format="TableResult" commandType="SqlCommandOrQuery" exportHandler="" adminControl="" exportMultipleTablesToSheets="False" datesWithTime="False" extraParams="" />
      <Mandators mandatorMode="OnlyOwner" mandator_id="bc9cc935-79d3-469a-b2ea-0a622f9e8b58" mandatorName="ergo-ecampus-at" isStandard="False" isUsedByMenu="False" />
      <Parameters>
        <Parameter id="83428ef6-aa30-41f4-a047-131633de7ed6" isRequired="False" allowMultiSelect="True" name="OrgUnits" contextName="Organisationseinheiten" 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="90" />
      </Roles>
      <command>
-- Schlüssel für Code: ERGOAT_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: ErgoAT
-- Verfügbar für:      ?

--Declare @current_mandator_id uniqueidentifier = (SELECT id FROM tblMandators WHERE name = 'ergo-ecampus-at')
--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


-- table for the result
DECLARE @tblResult TABLE
(
    lastname NVARCHAR(128),
    firstname NVARCHAR(128),
    username NVARCHAR(64),
    orgunit uniqueidentifier,
    companyAD NVARCHAR(255),
    trainingTag NVARCHAR(64),
    courseUnits nvarchar(2555),
    targetGroups NVARCHAR(MAX),
    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 UNIQUEIDENTIFIER
DECLARE @companyAD NVARCHAR(255)
DECLARE @trainingTag NVARCHAR(20)
DECLARE @targetGroupName NVARCHAR(256)
DECLARE @targetGroups NVARCHAR(MAX)
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,
        (
            -- Temporary solution to adapt report to multi-OU assignment, just take the first OU found
            SELECT TOP 1
                organisationUnit_id
            FROM
                tblUsersOrganisationUnits
            WHERE
                user_id = v_Users.intUserCn
        ) AS ou_id,
        companyAD,
        (SELECT TOP 1 tblItems.tag FROM tblItems WHERE tblItems.id = training_id) AS trainingTag,
        tblTrainings.id AS training_id,
        tblTrainingTitles.id AS trainingTitle_id,
        (SELECT TOP 1 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 70 THEN 'Anwesenheit bestätigt'
        WHEN 80 THEN 'Teilnahme bestätigt'
        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 TOP 1 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,
        (
        -- Temporary solution to adapt report to multi-OU assignment, just take the first OU found
        SELECT TOP 1
        organisationUnit_id
        FROM
        tblUsersOrganisationUnits
        WHERE
        user_id = v_Users.intUserCn
        ) 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 TOP 1 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
        END

        -- get the result
        SELECT
        lastname AS Name,
        firstname AS Vorname,
        username AS Kennung,
        companyAD AS Unternehmen,
        (SELECT TOP 1 codekey FROM tblOrganisationUnits WHERE id = orgunit) AS "OE-ID",
        (SELECT TOP 1 title FROM tblOrganisationUnits WHERE id = orgunit) AS OE,
        targetGroups AS 'Zugeordnete Zielgruppen',
        trainingTitleTitle AS 'Seminartitel',
        trainingTitle AS 'Titel des Seminartermin',
        startDate as Startdatum,
        endDate AS Enddatum,
        courseUnits AS Unterrichtseinheiten,
        location AS 'Ort',
        userTrainingStatus,
        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>