﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
  <Reports>
    <Report id="34ee8634-d508-4e76-a940-f86691a23de1" codekey="ApetitoWBTsTestsStatus" categoryCodekey="SpecialPurpose" name="Auswertung WBTS and Tests" description="Der Report listet für alle Nutzer, denen im gewählten  ZEITRAUM das angegebene LERNPROGRAMM oder der angegebene TEST zugeordnet war den jeweils LETZTEN BESTEN Bearbeitungsstand  innerhalb des gewählten Zeitraums und dessen Datum. Der Bearbeitungsstand in Prozent kann für WBTs nur für aktuelle Sitzungen und abgeschlossene Bearbeitungen ausgegeben werden.">
      <MetaData created="2016-09-05T15:07:36" createdBy="Administrator Apetito (Administrator)" createdBy_user_id="2" modified="2016-11-12T16:50:54" modifiedBy="Administrator Apetito" />
      <ExecutionDetails format="TableResult" commandType="SqlCommandOrQuery" exportHandler="" adminControl="" exportMultipleTablesToSheets="False" datesWithTime="True" extraParams="" />
      <Mandators mandatorMode="OnlyOwner" mandator_id="a21905e0-a946-4f0f-8304-e0ad1d4ce9ba" mandatorName="Apetito" isStandard="False" isUsedByMenu="False" />
      <Parameters>
        <Parameter id="a3916c66-34e4-4a8c-a399-12e038af0e93" isRequired="True" allowMultiSelect="False" name="Lernprogramm" contextName="Lernprogramm" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="4aaf4f45-f70a-452a-92b5-f8e9b8b0dfb6" isRequired="False" allowMultiSelect="False" name="Test" contextName="Test" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="bf72399d-7582-4b2a-a06c-8d47afe576f2" isRequired="False" allowMultiSelect="False" name="Von" contextName="Von" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="80245dc5-ca96-4c76-9449-2b5d07b129e9" isRequired="False" allowMultiSelect="False" name="Bis" contextName="Bis" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
      </Parameters>
      <Roles>
        <Role id="90" />
      </Roles>
      <command>
/*DECLARE @startDate DATETIME = '2016-04-01'
DECLARE @endDate DATETIME = '2016-05-01'

DECLARE @theme_id UNIQUEIDENTIFIER = (SELECT id FROM tblitems WHERE title = 'Hygiene am Arbeitsplatz (Emden - 1/2015)')
DECLARE @test_id UNIQUEIDENTIFIER = (SELECT id FROM tblitems WHERE title = 'Emden_Einsteiger _Hygienetest')

DECLARE @current_mandator_id UNIQUEIDENTIFIER = (SELECT id  FROM tblMandators  WHERE name = 'Apetito')
*/

-- calculate all users assigned to the item
WITH assignedUsers
AS
(
    SELECT DISTINCT
        intUserCn
    FROM
        v_Users
        JOIN tblUsersTargetGroups
            ON tblUsersTargetGroups.UserCn = v_Users.intUserCn
        JOIN tblEduOffersTargetGroups
            ON tblEduOffersTargetGroups.targetgroup_id = tblUsersTargetGroups.targetGroup_id
        JOIN tblEduOffersModules
            ON tblEduOffersModules.eduOffer_id = tblEduOffersTargetGroups.eduOffer_id
        JOIN tblModuleItems
            ON tblEduOffersModules.module_id = tblModuleItems.module_id
        JOIN tblItems
            ON tblItems.id = tblModuleItems.item_id
    WHERE
        tblItems.id = @theme_id
        OR tblItems.id = @test_id
),

-- calculate last best theme status for the users that have some status related to the item for the given time range
bestUserThemeStatus
AS
(
    SELECT
        bestStatus.*,
        MAX(startDate)AS maxDate,
        CASE
            WHEN
                bestStatus.maxStatus = 2
                THEN
                (
                    SELECT
                        percentage
                    FROM
                        tblStatusUserItemHistory UserItemHistory
                    WHERE
                        UserItemHistory.user_id = bestStatus.user_id
                        AND UserItemHistory.startDate = MAX(tblStatusUserItemHistory.startDate)
                        AND UserItemHistory.item_id = @theme_id
                )
            ELSE
            (
                SELECT
                    ROUND(MAX(complete),2)
                FROM
                    tblStatusUserCourseHistory uch
                WHERE
                    user_id = bestStatus.user_id
                    AND theme_id = @theme_id
                    AND themeSessionStartTime &gt;= MAX(tblStatusUserItemHistory.startDate)
                    AND themeSessionStartTime &lt;= ISNULL(@endDate, themeSessionStartTime)
            )
        END AS maxPercent
    FROM
        tblStatusUserItemHistory
        JOIN
        (
            SELECT
                user_id,
                MAX(status) AS maxStatus
            FROM
                tblStatusUserItemHistory
            WHERE
                item_id = @theme_id
                AND startDate &gt;= ISNULL(@startDate, startDate)
                AND startDate &lt;= ISNULL(@endDate, startDate)
            GROUP BY
                user_id
        ) AS bestStatus
            ON tblStatusUserItemHistory.user_id = bestStatus.user_id
            AND item_id = @theme_id
            AND tblStatusUserItemHistory.status = bestStatus.maxStatus
    WHERE
        startDate &gt;= ISNULL(@startDate, startDate)
        AND startDate &lt;= ISNULL(@endDate, startDate)
    GROUP BY
        bestStatus.user_id,
        maxStatus
),

-- calculate last best test status for the users that have some status related to the item for the given time range
bestUserTestStatus
AS
(
    SELECT
        bestStatus.*,
        MAX(startDate)AS maxDate
    FROM
        tblStatusUserItemHistory
        JOIN
        (
            SELECT
                user_id,
                MAX(CASE WHEN status = 2 THEN 4 ELSE status END) AS maxStatus -- MAX(status)AS maxStatus
            FROM
                tblStatusUserItemHistory
            WHERE
                item_id = @test_id
                AND startDate &gt;= ISNULL(@startDate, startDate)
                AND startDate &lt;= ISNULL(@endDate, startDate)
            GROUP BY
                user_id
        ) AS bestStatus
            ON tblStatusUserItemHistory.user_id = bestStatus.user_id
            AND item_id = @test_id
            AND
            (
                (
                    maxStatus = 4
                    AND tblStatusUserItemHistory.status = 2
                )
                OR tblStatusUserItemHistory.status = bestStatus.maxStatus
            )
    WHERE
        startDate &gt;= ISNULL(@startDate, startDate)
        AND startDate &lt;= ISNULL(@endDate, startDate)
    GROUP BY
        bestStatus.user_id,
        maxStatus
)

SELECT
    descUserCn AS Personalnummer,
    Vorname,
    Nachname,
    companyAD AS Firma,
    division AS Abteilung,
    office AS Dienstelle,
    tblUserCustomAttributes.customAttribute1 AS 'Abwesenheitskürzel',
    accountExpiresOn AS Vertragsende,
    CASE
        WHEN
            bestUserThemeStatus.maxStatus = 0
            OR bestUserThemeStatus.maxStatus IS NULL
            THEN 'Nicht bearbeitet'
        WHEN
            bestUserThemeStatus.maxstatus = 1
            THEN 'In Bearbeitung'
        WHEN
            bestUserThemeStatus.maxStatus = 2
            THEN 'Bearbeitet'
    END AS 'Bearbeitungsstand WBT',
    bestUserThemeStatus.maxPercent AS 'Bearbeitungsstand WBT (%)',
    bestUserThemeStatus.maxDate AS 'Datum WBT',
    CASE
        WHEN
            @test_id IS NULL
            THEN '-'
        ELSE
            CASE
                WHEN
                    bestUserTestStatus.maxStatus = 0
                    OR bestUserTestStatus.maxStatus IS NULL
                    THEN 'Nicht bearbeitet'
                WHEN bestUserTestStatus.maxstatus = 1
                    THEN 'In Bearbeitung'
                WHEN
                    bestUserTestStatus.maxStatus = 2
                    OR bestUserTestStatus.maxStatus = 4
                    THEN 'Bestanden'
                WHEN
                    bestUserTestStatus.maxStatus = 3
                    THEN 'Nicht bestanden'
                WHEN
                    bestUserTestStatus.maxStatus = -1
                    THEN '-'
            END
    END AS 'Bearbeitungsstand Test',
    bestUserTestStatus.maxDate AS 'Datum Test'
--into #tmp
FROM
    assignedUsers
    JOIN v_Users
        ON v_Users.intUserCn = assignedUsers.intUserCn
    LEFT JOIN bestUserThemeStatus
        ON bestUserThemeStatus.user_id = assignedUsers.intUserCn
    LEFT JOIN bestUserTestStatus
        ON bestUserTestStatus.user_id = assignedUsers.intUserCn
    LEFT JOIN tblUserCustomAttributes
        ON tblUserCustomAttributes.user_id = assignedUsers.intUserCn
ORDER BY
    Nachname, Vorname;
      </command>
    </Report>
  </Reports>
  <Parameters>
    <Parameter id="a3916c66-34e4-4a8c-a399-12e038af0e93" isSystem="True" name="Lernprogramm" reportParameterType_id="9b1ab1b2-f839-433b-8da7-02781b96def7" queryParameterName="@theme_id" />
    <Parameter id="4aaf4f45-f70a-452a-92b5-f8e9b8b0dfb6" isSystem="True" name="Test" reportParameterType_id="c613c165-96af-465b-bf6c-c0cba9a2dc5d" queryParameterName="@test_id" />
    <Parameter id="bf72399d-7582-4b2a-a06c-8d47afe576f2" isSystem="True" name="Von" reportParameterType_id="74253ba7-a386-4620-bff7-b65c16fe1e64" queryParameterName="@startDate" />
    <Parameter id="80245dc5-ca96-4c76-9449-2b5d07b129e9" isSystem="True" name="Bis" reportParameterType_id="74253ba7-a386-4620-bff7-b65c16fe1e64" queryParameterName="@endDate" />
  </Parameters>
  <ParameterTypes>
    <ParameterType id="9b1ab1b2-f839-433b-8da7-02781b96def7" isSystem="True" name="Theme" datatype="Theme" dataValueField="" dataTextField="" />
    <ParameterType id="c613c165-96af-465b-bf6c-c0cba9a2dc5d" isSystem="True" name="Test" datatype="Test" dataValueField="" dataTextField="" />
    <ParameterType id="74253ba7-a386-4620-bff7-b65c16fe1e64" isSystem="True" name="Date" datatype="Date" dataValueField="" dataTextField="" />
  </ParameterTypes>
</ReportsExport>