﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
  <Reports>
    <Report id="c6a67ee6-edea-4979-b9fa-c127b4f8a3b5" codekey="Kosmos_TestStatisticsRecentStatus" categoryCodekey="TestsAndQuestions" name="Teststatistik zuletzt" description="Der Report gibt für die gewählten Tests eine Übersicht über die letzte erfolgreiche Bearbeitung sowie die Gültigkeit des Status, falls für einen Test eine Rezertifizierung konfiguriert ist.">
      <MetaData created="2017-07-31T13:26:15" createdBy="Rolle Administrator (Administrator)" createdBy_user_id="1" modified="2018-07-02T11:02:36" modifiedBy="Administrator SAS" />
      <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="93460158-2520-48a7-ac64-9350fa3d159f" isRequired="False" allowMultiSelect="True" name="Zielgruppen Multiselektion" contextName="Zielgruppen Multiselektion" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="dcc129b9-a6af-4893-8960-329bb06af895" isRequired="False" allowMultiSelect="True" name="Tests von Zielgruppen" contextName="Tests von Zielgruppen" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="eb0d675e-b2c5-4b7c-b28b-ccfd07e7e13c" isRequired="False" allowMultiSelect="False" name="Benutzer abhängig von Zielgruppen" contextName="Benutzer" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
      </Parameters>
      <Roles>
        <Role id="15" />
        <Role id="16" />
        <Role id="17" />
        <Role id="22" />
        <Role id="28" />
        <Role id="36" />
        <Role id="37" />
        <Role id="38" />
        <Role id="39" />
        <Role id="46" />
        <Role id="47" />
      </Roles>
      <command>--START: Parameter simulating for debugging

--DECLARE @targetGroupId AS dbo.typeIntList
--DECLARE @tests AS dbo.typeGuidList
--DECLARE @current_mandator_id UNIQUEIDENTIFIER = 'FAF02CBD-37CC-4026-B66F-3AE28BBA4612'
--SELECT @current_mandator_id = id FROM tblMandators WHERE name = 'testallfeatures'
--DECLARE @user_id INT
--DECLARE @current_user_id INT = 1502
--INSERT INTO @targetGroupId SELECT 558
--INSERT INTO @tests SELECT 'bb381bf0-920d-4b6c-b584-2c7442931457'

--END: Parameter simulating for debugging

        --START: Helping variables for the logic
		DECLARE @isTGM INT
		DECLARE @roleId INT
		IF EXISTS(SELECT 1 FROM tblTargetGroupManagers WHERE user_id = @current_user_id)
			SET @isTGM = 1
		ELSE
			SET @isTGM = 0

		SELECT @roleId = SecurityID FROM v_Users WHERE intUserCn = @current_user_id
        CREATE TABLE #tests
        (
        item_id UNIQUEIDENTIFIER
        )
        CREATE TABLE #result1
        (
        id UNIQUEIDENTIFIER,
        countUser INT, -- all users which are assigned to this test (not touched will also be included)
        incompleted INT,
        completed INT,
        failed INT
        )

        CREATE TABLE #result2
        (
        user_id INT,
        item_id UNIQUEIDENTIFIER,
        recertificationMonth INT,
        firstMail DATETIME NULL,
        secondMail DATETIME NULL,
        expired DATETIME NULL,
        status INT
        )
        create nonclustered index #temp_index
        on #result2 (item_id, user_id) include (status)


        --END: Helping variables for the logic

        --START: Logic
        IF EXISTS ((SELECT * FROM @targetGroupId)) AND NOT EXISTS (SELECT * FROM @tests)
        BEGIN
        -- in case we don't have tests selected use the test which are available via the targetgroups
        INSERT INTO #tests
        SELECT distinct tblTasTests.id FROM tblEduOffersTargetGroups INNER JOIN tblEduOffersModules ON tblEduOffersModules.eduOffer_id = tblEduOffersTargetGroups.eduOffer_id INNER JOIN tblModuleItems ON tblModuleItems.module_id = tblEduOffersModules.module_id INNER JOIN tblTasTests ON tblTasTests.id = tblModuleItems.item_id INNER JOIN tblItems ON tblItems.id = tblTasTests.id WHERE tblTasTests.mandator_id = @current_mandator_id AND (NOT EXISTS (SELECT * FROM @targetGroupId) OR tblEduOffersTargetGroups.targetGroup_id IN (SELECT * FROM @targetGroupId)) AND tblItems.deleted IS NULL
        END
        ELSE
        BEGIN
        INSERT INTO #tests SELECT value FROM @tests
        END

        INSERT INTO #result2
        SELECT v_Users.intUserCn,
        tblItems.id,
        tblItems.overrideSpanMonths AS ReZertiMonate,
        tblStatusUserItemOverride.overrideAlertSentDate AS '1. Mail',
        tblStatusUserItemOverride.overrideFinalAlertSentDate AS '2. Mail',
        tblStatusUserItemOverride.overrideDate AS 'Abgelaufen am',
        dbo.fn_GetUserItemStatus(v_Users.intUserCn, tblItems.id) AS status
        FROM v_Users WITH (NOLOCK)
        LEFT JOIN  tblStatusUserItemOverride WITH (NOLOCK) ON tblStatusUserItemOverride.user_id = v_Users.intUserCn
        INNER JOIN tblItems WITH (NOLOCK) ON tblItems.id = tblStatusUserItemOverride.item_id
        WHERE v_Users.mandator_id = @current_mandator_id
        AND v_Users.intUserCn = tblStatusUserItemOverride.user_id
        AND tblItems.id = tblStatusUserItemOverride.item_id
        AND tblItems.deleted IS NULL
        AND tblItems.itemType_id = 0
        AND v_Users.deleted IS NULL
        AND (NOT EXISTS (SELECT * FROM @targetGroupId)
        OR EXISTS(SELECT * FROM tblUsersTargetGroups WITH (NOLOCK) INNER JOIN @targetGroupId AS hlp ON hlp.value = tblUsersTargetGroups.targetGroup_id AND tblUsersTargetGroups.UserCn = v_Users.intUserCn)
        )
        AND EXISTS(SELECT * FROM #tests AS hlpTests WHERE tblItems.id = hlpTests.item_id)
		AND 
			(
				(@isTGM = 0 AND EXISTS(SELECT * FROM @targetGroupId))  -- user is not a TGM take and we have selected targetgroups
				OR (@roleId = 100 OR EXISTS(SELECT * FROM tblRolesFunctions
									INNER JOIN tblFunctions ON tblFunctions.id = tblRolesFunctions.function_id AND tblFunctions.shortcut = 'FcnIsAuthorizedForAllTGs'
									WHERE tblRolesFunctions.role_id = @roleId AND tblRolesFunctions.mandator_id = @current_mandator_id
									) -- user has the right for accessing all TG
				) OR
					( -- user is TGM and no targetGroup is selected only those which the user can access
						@isTGM = 1 
						AND EXISTS(SELECT * FROM tblTargetGroupManagers AS A INNER JOIN tblUsersTargetGroups AS B ON A.targetGroup_id = B.targetGroup_id WHERE A.user_id = @current_user_id AND B.UserCn = v_Users.intUserCn)
					)
			)

        --getting first result set for grouped by test
        INSERT INTO #result1 SELECT item_id, COUNT(DISTINCT user_id),
        SUM(CASE WHEN res.status = 2 OR res.status = 3 THEN 1 ELSE 0 END) AS incompleted,
        SUM(CASE WHEN res.status = 2 THEN 1 ELSE 0 END) AS completed,
        SUM(CASE WHEN res.status = 3 THEN 1 ELSE 0 END) AS failed
        FROM #result2 AS res WITH (NOLOCK)
        WHERE EXISTS(SELECT * FROM tblModuleItems WITH (NOLOCK)
        INNER JOIN tblEduOffersModules WITH (NOLOCK) ON tblEduOffersModules.module_id = tblModuleItems.module_id INNER JOIN
        tblEduOffersTargetGroups WITH (NOLOCK) ON tblEduOffersTargetGroups.eduOffer_id = tblEduOffersModules.eduOffer_id INNER JOIN
        tblUsersTargetGroups WITH (NOLOCK) ON tblUsersTargetGroups.targetGroup_id = tblEduOffersTargetGroups.targetGroup_id AND tblUsersTargetGroups.UserCn = res.user_id
        WHERE tblModuleItems.item_id = res.item_id
        )

        GROUP BY item_id
        --END: logic

        SELECT tblItems.title AS 'Test',
        res.countUser AS 'Benutzer',
        res.incompleted AS 'Benutzer Test bearbeitet',
        res.completed AS 'Benutzer Test bestanden',
        res.failed AS 'Benutzer Test nicht bestanden'
        FROM #result1 AS res WITH (NOLOCK)
        INNER JOIN tblItems WITH (NOLOCK) ON tblItems.id = res.id
        ORDER BY tblItems.title

        SELECT
        v_Users.descUserCn AS 'User/Nutzer',
        v_Users.Nachname AS Nachname,
        v_Users.Vorname AS Vorname,
        ISNULL(STUFF((SELECT ', ' + title
        FROM tblTargetGroups
        INNER JOIN tblUsersTargetGroups ON tblUsersTargetGroups.targetGroup_id = tblTargetgroups.id AND tblUsersTargetGroups.UserCn = user_id
        WHERE
        (NOT EXISTS (SELECT * FROM @targetGroupId)
        OR EXISTS(SELECT * FROM @targetGroupId AS hlp WHERE hlp.value = tblTargetgroups.id
        ))
        AND tblTargetGroups.defaultforlibrary = 0
        FOR XML PATH('') ),1,2,''),'') AS Zielgruppe,
        tblItems.title AS 'Testname (ausschließlich)',
        CASE res.status
        WHEN 0 THEN
        'nicht bearbeitet'
        WHEN 1 THEN 'in Bearbeitung'
        WHEN 2 THEN 'bestanden'
        WHEN 3 THEN 'nicht bestanden'
        END AS 'Teststatus',
        dbo.fn_GetUserPlainModuleItemLastPassedEver(res.user_id, res.item_id) AS 'Testdatum/letztes Ergebnis (zuletzt erfolgreich durchgeführt)',
        dbo.fn_GetUserItemStatusWillOverrideDate(res.user_id, res.item_id) AS 'Gültig bis (Ablauftag)',
        res.recertificationMonth AS 'ReZertiMonate',
        res.firstMail AS '1. Mail',
        res.secondMail AS '2. Mail',
        res.expired AS 'Abgelaufen am'
        FROM #result2 AS res WITH (NOLOCK)
        INNER JOIN tblItems WITH (NOLOCK) ON tblItems.id = res.item_id
        INNER JOIN v_Users WITH (NOLOCK) ON v_Users.intUserCn = res.user_id
        WHERE
        @user_id IS NULL OR v_Users.intUserCn = @user_id
        ORDER BY v_Users.descUserCn


        --START: cleanup report
        DROP TABLE #result1
        DROP TABLE #result2
        DROP TABLE #tests
        --END: cleanup report</command>
    </Report>
  </Reports>
  <Parameters>
    <Parameter id="93460158-2520-48a7-ac64-9350fa3d159f" isSystem="True" name="Zielgruppen Multiselektion" reportParameterType_id="f4c178f7-fa5a-4229-92ea-2839c7c82ea4" queryParameterName="@targetGroupId" />
    <Parameter id="dcc129b9-a6af-4893-8960-329bb06af895" isSystem="True" name="Tests von Zielgruppen" reportParameterType_id="fdf34b0e-b637-48af-a319-710774eba482" queryParameterName="@tests" />
    <Parameter id="eb0d675e-b2c5-4b7c-b28b-ccfd07e7e13c" isSystem="False" name="Benutzer abhängig von Zielgruppen" reportParameterType_id="122b7605-e631-4f7f-88c2-5d3707a42c17" queryParameterName="@user_id" />
    <Parameter id="35ceb0d3-29e6-4108-910a-89e858dda847" isSystem="False" name="Auswahl Target Group" reportParameterType_id="dbbd7bc6-a373-4ddc-b6a5-f8cbe242217d" queryParameterName="@targetGroupId" />
    <Parameter id="a785aecc-668a-4609-9613-394bd4d708c2" isSystem="True" name="Mandant" reportParameterType_id="6b8fa242-5449-45b3-a81a-65a7e5e3b51d" queryParameterName="@mandator_id" />
  </Parameters>
  <ParameterTypes>
    <ParameterType id="f4c178f7-fa5a-4229-92ea-2839c7c82ea4" isSystem="False" name="Auswhal Target Groups CurrentMandator" datatype="IntegerDDL" dataValueField="id" dataTextField="title">
      <query>
        SELECT
        id, title
        FROM
        tblTargetGroups
        WHERE
        mandator_id = @current_mandator_id
        AND
        (
        EXISTS
        (
        SELECT  *
        FROM    v_Users
        WHERE
        intUserCn = @current_user_id
        AND securityId = 100
        )
        OR
        EXISTS
        (
        SELECT  *
        FROM    tblTargetGroupManagers
        WHERE
        tblTargetGroupManagers.user_id = @current_user_id
        AND tblTargetGroupManagers.targetGroup_id = tblTargetGroups.id
        )
        OR
        EXISTS
        (
        SELECT  *
        FROM
        tblRolesFunctions
        JOIN tblRoles
        ON  tblRoles.id = tblRolesFunctions.role_id
        JOIN tblFunctions
        ON  tblFunctions.id = tblRolesFunctions.function_id
        AND tblFunctions.shortcut = 'FcnIsAuthorizedForAllTGs'
        INNER JOIN v_Users
        ON  v_Users.SecurityID = tblRoles.id
        WHERE
        tblRolesFunctions.mandator_id = @current_mandator_id
        AND v_Users.intUserCn = @current_user_id
        )
        )
        AND defaultforlibrary = 0
        ORDER BY
        title
      </query>
    </ParameterType>
    <ParameterType id="fdf34b0e-b637-48af-a319-710774eba482" isSystem="True" name="Auswahl Tests von Zielgruppen" datatype="GuidDDL" dataValueField="value" dataTextField="text">
      <query>
        SELECT distinct tblTasTests.id as value, tblItems.title as text
        FROM tblEduOffersTargetGroups
        INNER JOIN tblEduOffersModules ON tblEduOffersModules.eduOffer_id = tblEduOffersTargetGroups.eduOffer_id
        INNER JOIN tblModuleItems ON tblModuleItems.module_id = tblEduOffersModules.module_id
        INNER JOIN tblTasTests ON tblTasTests.id = tblModuleItems.item_id
        INNER JOIN tblItems ON tblItems.id = tblTasTests.id
        WHERE tblTasTests.mandator_id = @current_mandator_id
        AND (NOT EXISTS (SELECT * FROM @targetGroupId)
        OR tblEduOffersTargetGroups.targetGroup_id IN (SELECT * FROM @targetGroupId))
        AND tblItems.deleted IS NULL
        ORDER BY title
      </query>
      <Parameters>
        <Parameter id="93460158-2520-48a7-ac64-9350fa3d159f" isRequired="False" allowMultiSelect="True" name="Zielgruppen Multiselektion" contextName="Zielgruppen Multiselektion" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
      </Parameters>
    </ParameterType>
    <ParameterType id="122b7605-e631-4f7f-88c2-5d3707a42c17" isSystem="False" name="Benutzer abhängig von Zielgruppen" datatype="IntegerDDL" dataValueField="value" dataTextField="text">
      <query>
        SELECT distinct v_Users.intUserCn as value, v_Users.FullUserName AS text
        FROM v_Users
        INNER JOIN tblUsersTargetGroups ON tblUsersTargetGroups.UserCn = v_Users.intUserCn
        WHERE v_Users.mandator_id = @current_mandator_id
        AND (NOT EXISTS (SELECT * FROM @targetGroupId)
        OR tblUsersTargetGroups.targetGroup_id IN (SELECT * FROM @targetGroupId))
        ORDER BY 2
      </query>
      <Parameters>
        <Parameter id="35ceb0d3-29e6-4108-910a-89e858dda847" isRequired="False" allowMultiSelect="True" name="Auswahl Target Group" contextName="Auswahl Target Group" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
      </Parameters>
    </ParameterType>
    <ParameterType id="dbbd7bc6-a373-4ddc-b6a5-f8cbe242217d" isSystem="False" name="Auswahlliste Target Groups" datatype="IntegerDDL" dataValueField="id" dataTextField="title">
      <query>
SELECT id, 
       title
  FROM tblTargetGroups
 WHERE(mandator_id = @mandator_id)
  AND (EXISTS(
              SELECT *
                FROM v_Users
               WHERE intUserCn = @current_user_id AND securityId = 100)
    OR EXISTS(
              SELECT *
                FROM tblTargetGroupManagers
               WHERE tblTargetGroupManagers.user_id = @current_user_id
                 AND tblTargetGroupManagers.targetGroup_id = tblTargetGroups.id)
     OR EXISTS(SELECT *
                FROM tblRolesFunctions
                    JOIN tblRoles ON tblRoles.id = tblRolesFunctions.role_id 
                    JOIN tblFunctions ON tblFunctions.id = tblRolesFunctions.function_id
                    JOIN v_Users ON v_Users.intUserCn = @current_user_id
                WHERE tblFunctions.shortcut = 'FcnIsAuthorizedForAllTGs' AND tblRoles.id = v_Users.SecurityID))
  AND defaultforlibrary = 0
 ORDER BY title

      </query>
      <Parameters>
        <Parameter id="a785aecc-668a-4609-9613-394bd4d708c2" isRequired="False" allowMultiSelect="False" name="Mandant" contextName="Mandant" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
      </Parameters>
    </ParameterType>
    <ParameterType id="6b8fa242-5449-45b3-a81a-65a7e5e3b51d" isSystem="True" name="Mandator" datatype="Mandator" dataValueField="" dataTextField="" />
  </ParameterTypes>
</ReportsExport>