﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
  <Reports>
    <Report id="795a99ae-3f91-4d39-9de9-90b72c5f9b57" codekey="Kosmos_LastPassedDateOfAllTestsOfAllUsers" categoryCodekey="TestsAndQuestions" name="Status aller Tests aller Benutzer" description="Listet alle Benutzer, deren Zielgruppen und die ihnen zugeordneten Tests sowie das Datum, an dem dieser Test das letzte Mal bestanden wurde. ACHTUNG: Dieser Report hat eine lange Ausführungszeit!">
      <MetaData created="2012-01-17T12:04:27" createdBy="Marcus Renowitsch" createdBy_user_id="12" modified="2013-09-20T08:59:32" modifiedBy="Anton Administrator" />
      <ExecutionDetails format="TableResult" commandType="SqlCommandOrQuery" exportHandler="" adminControl="" exportMultipleTablesToSheets="False" datesWithTime="False" extraParams="" />
      <Mandators mandatorMode="OnlyOwner" mandator_id="0ab3e804-57cb-42a7-82a3-a6fd412d317d" mandatorName="Kosmos" isStandard="False" isUsedByMenu="False" />
      <Parameters>
        <Parameter id="a785aecc-668a-4609-9613-394bd4d708c2" isRequired="False" name="Mandant" contextName="Mandant" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
      </Parameters>
      <Roles>
        <Role id="90" />
      </Roles>
      <command>
        -- Schlüssel für Code: ADAC_LastPassedDateOfAllTestsOfAllUsers
        -- Name:               Status aller Tests aller Benutzer
        -- Beschreibung:       Listet alle Benutzer, sowie ihre Zielgruppen, und die ihnen zugeordneten Tests, sowie das Datum, wann dieser Test das letzte Mal bestanden wurde. ACHTUNG: Lange Ausführungszeit!
        -- Parameterliste:     OPTIONAL: Mandator,Mandant~@mandator_id
        -- Ergebnisformat:     Tabelle
        -- Für alle Mandanten: Ja
        -- Verfügbar für:      ?

        -- For testing (@mandator_id must be commented in, see below):
        --DECLARE @mandator_id UNIQUEIDENTIFIER
        --SELECT @mandator_id = id FROM tblMandators WHERE name = 'zentrale'


        -- table for the result
        DECLARE @tblResult TABLE (
        lastname NVARCHAR(128),
        firstname NVARCHAR(128),
        username NVARCHAR(64),
        targetGroups NVARCHAR(4000),
        testname NVARCHAR(1024),
        lastpasseddate DATETIME
        )

        DECLARE @curUsersAndTests CURSOR
        DECLARE @curTargetGroups CURSOR

        DECLARE @user_id INT
        DECLARE @lastuser_id INT
        DECLARE @lastname NVARCHAR(128)
        DECLARE @firstname NVARCHAR(128)
        DECLARE @username NVARCHAR(64)
        DECLARE @targetGroupName NVARCHAR(256)
        DECLARE @targetGroups NVARCHAR(4000)
        DECLARE @test_id UNIQUEIDENTIFIER
        DECLARE @testname NVARCHAR(1024)
        DECLARE @lastpasseddate DATETIME

        SET @curUsersAndTests = CURSOR FORWARD_ONLY STATIC FOR
        SELECT intUserCn AS user_id,
        Nachname AS lastname,
        Vorname AS firstname,
        descUserCn AS username,
        tblTasTests.id AS test_id,
        COALESCE(tblItems.titleForLearners, tblItems.title) AS testName,
        (SELECT MAX(tblTasStatsTestSessions.endDate)
        FROM tblTasStatsTestSessions
        WHERE passed = 1
        AND tblTasStatsTestSessions.test_id = tblTasTests.id
        AND tblTasStatsTestSessions.user_id = v_Users.intUserCn) AS lastpasseddate

        FROM v_Users, tblTasTests INNER JOIN tblItems ON tblTasTests.id = tblItems.id
        WHERE (@mandator_id IS NULL OR v_Users.mandator_id = @mandator_id)
        AND(tblItems.deleted IS NULL OR tblItems.deleted = 0)
        AND EXISTS (SELECT *
        FROM tblEduOffersModules, tblEduOffersTargetGroups, tblUsersTargetGroups,
        /* Viversa 5.x
        tblSeminarsTests
        --*/
        --/* Viversa 6.x
        tblModuleItems
        --*/
        WHERE /* Viversa 5.x
        tblTasTests.id = tblSeminarsTests.test_id
        AND tblSeminarsTests.seminar_id = tblEduOffersModules.module_id
        --*/
        --/* Viversa 6.x
        tblTasTests.id = tblModuleItems.item_id
        AND tblModuleItems.module_id = tblEduOffersModules.module_id
        --*/
        AND tblEduOffersModules.eduOffer_id = tblEduOffersTargetGroups.eduOffer_id
        AND tblEduOffersTargetGroups.targetGroup_id = tblUsersTargetGroups.targetGroup_id
        AND tblUsersTargetGroups.UserCn = v_Users.intUserCn)
        ORDER BY v_Users.Nachname, v_Users.Vorname, v_Users.descUserCn,
        COALESCE(tblItems.titleForLearners, tblItems.title)

        OPEN @curUsersAndTests
        FETCH NEXT FROM @curUsersAndTests INTO @user_id, @lastname, @firstname, @username, @test_id, @testname, @lastpasseddate

        WHILE (@@FETCH_STATUS=0)
        BEGIN -- loop @curUsersAndTests

        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


        -- ======== finally, insert into our result table ========
        INSERT INTO @tblResult (lastname, firstname, username, targetGroups, testname, lastpasseddate)
        VALUES (@lastname, @firstname, @username, @targetGroups, @testname, @lastpasseddate)

        FETCH NEXT FROM @curUsersAndTests INTO @user_id, @lastname, @firstname, @username, @test_id, @testname, @lastpasseddate
        END -- loop @curUsersAndTests
        CLOSE @curUsersAndTests
        DEALLOCATE @curUsersAndTests

        -- Name, Vorname, Kennung, Zugeordnete Zielgruppen, Test, Datum des letzten Bestehens

        SELECT lastname AS Name,
        firstname AS Vorname,
        username AS Kennung,
        targetGroups AS 'Zugeordnete Zielgruppen',
        testname AS Test,
        lastpasseddate AS 'Datum des letzten Bestehens'
        FROM @tblResult
      </command>
    </Report>
  </Reports>
  <Parameters>
    <Parameter id="a785aecc-668a-4609-9613-394bd4d708c2" isRequired="False" isSystem="True" name="Mandant" reportParameterType_id="6b8fa242-5449-45b3-a81a-65a7e5e3b51d" queryParameterName="@mandator_id" />
  </Parameters>
  <ParameterTypes>
    <ParameterType id="6b8fa242-5449-45b3-a81a-65a7e5e3b51d" isSystem="True" name="Mandator" datatype="Mandator" dataValueField="" dataTextField="" />
  </ParameterTypes>
</ReportsExport>