﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
  <Reports>
    <Report id="b07ff62e-1c7f-44bb-9329-154b152fd8af" codekey="ADAC_AuswertungWBT" categoryCodekey="LearningPrograms" name="Auswertung WBT" description="">
      <MetaData created="2017-08-25T13:09:25" createdBy="VIWIS, Administrator (Administrator)" createdBy_user_id="3" modified="2020-06-23T15:29:22" modifiedBy="Administrator, Rolle (Administrator)" modifiedBy_user_id="12" />
      <ExecutionDetails format="TableResult" commandType="SqlCommandOrQuery" exportHandler="" adminControl="" exportMultipleTablesToSheets="False" datesWithTime="False" extraParams="" />
      <Mandators mandatorMode="ExcludeMandators" mandator_id="96ba2868-8baf-4e69-b1fb-d2cc6d6832e8" mandatorName="ADAC" 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="de3b4e9d-6c04-4df0-a8cd-9ebb024776f2" isRequired="False" allowMultiSelect="True" name="WBTs for selected Target Groups" contextName="WBTs for selected Target Groups " defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="eb0d675e-b2c5-4b7c-b28b-ccfd07e7e13c" isRequired="False" allowMultiSelect="False" name="Benutzer abhängig von Zielgruppen" contextName="Benutzer abhängig von Zielgruppen" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
      </Parameters>
      <Roles>
        <Role id="90" />
        <Role id="94" />
      </Roles>
      <command>
        --START: Parameter simulating for debugging
        --DECLARE @targetGroupId AS dbo.typeIntList
        --DECLARE @wbtsForTargetGroups AS dbo.typeGuidList
        --DECLARE @user_id AS INT
        --DECLARE @current_mandator_id UNIQUEIDENTIFIER
        --SELECT @current_mandator_id = id FROM tblMandators WHERE name = 'testallfeatures'

        --INSERT INTO @targetGroupId SELECT 13
        --INSERT INTO @wbtsForTargetGroups SELECT 'B06AFDCA-4DC8-48B5-A055-BAFD2F119085'
        --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 #wbts
        (
        item_id UNIQUEIDENTIFIER
        )

        CREATE TABLE #result1
        (
        id UNIQUEIDENTIFIER,
        countUser INT, -- all users which are assigned to this test (not touched will also be included)
        complete INT,
        incomplete INT
        )

        CREATE TABLE #result2
        (
        user_id INT,
        item_id UNIQUEIDENTIFIER,
        recertificationMonth INT,
        firstMail DATETIME NULL,
        secondMail DATETIME NULL,
        expired DATETIME NULL,
        assignedDate 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 @wbtsForTargetGroups)
        BEGIN
        -- in case we don't have themes selected use the test which are available via the targetgroups
        INSERT INTO
        #wbts
        SELECT DISTINCT
        tblThemes.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 tblThemes
        ON tblThemes.id = tblModuleItems.item_id
        INNER JOIN tblItems
        ON tblItems.id = tblThemes.id
        WHERE
        tblThemes.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 #wbts SELECT value FROM @wbtsForTargetGroups
        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',
        tblStatusUserItemOverride.assignedDate AS 'Zugewiesen',
        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 = 1
        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 #wbts AS hlpWbts WHERE tblItems.id = hlpWbts.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 THEN 1 ELSE 0 END) AS complete,
        SUM(CASE WHEN res.status = 0 OR res.status = 1 THEN 1 ELSE 0 END) AS incomplete
        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 'Lernprogramm',
        res.countUser AS 'Benutzer',
        res.complete AS 'Benutzer Lernprogramm bearbeitet',
        res.incomplete AS 'Benutzer Lernprogramm nicht bearbeitet'
        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 'Nutzer',
        v_Users.Nachname AS Name,
        v_Users.Vorname AS Vorname,
        ISNULL
        (
        STUFF
        (
        (
        SELECT
        ', ' + title
        FROM
        tblTargetGroups
        INNER JOIN tblUsersTargetGroups
        ON tblUsersTargetGroups.targetGroup_id = tblTargetgroups.id
        AND tblUsersTargetGroups.UserCn = res.[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,
        v_Users.office as 'Dienststelle',
        res.assignedDate as 'Zugewiesen',
        tblItems.title AS 'Lernprogramm',
        CASE res.status
        WHEN 0 THEN 'nicht bearbeitet'
        WHEN 1 THEN 'in Bearbeitung'
        WHEN 2 THEN 'bearbeitet'
        ELSE 'unbekannter Status'
        END AS 'Status',
        dbo.fn_GetUserPlainModuleItemLastPassedEver(res.[user_id], res.item_id) AS 'Zuletzt erfolgreich bearbeitet',
        dbo.fn_GetUserItemStatusWillOverrideDate(res.[user_id], res.item_id) AS 'Gültig bis',
        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, tblItems.title

        --START: cleanup report
        DROP TABLE #result1
        DROP TABLE #result2
        DROP TABLE #wbts
        --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="de3b4e9d-6c04-4df0-a8cd-9ebb024776f2" isSystem="False" name="WBTs for selected Target Groups" reportParameterType_id="50b9f668-69cf-4016-b16d-05668e656196" queryParameterName="@wbtsForTargetGroups" />
    <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="50b9f668-69cf-4016-b16d-05668e656196" isSystem="False" name="WBTs for seleted Target Groups mandatory Type" datatype="GuidDDL" dataValueField="id" dataTextField="title">
      <query>
        SELECT DISTINCT tblThemes.id,
        tblItems.title
        FROM tblEduOffersTargetGroups
        INNER JOIN tblEduOffersModules ON tblEduOffersModules.eduOffer_id = tblEduOffersTargetGroups.eduOffer_id
        INNER JOIN tblModuleItems ON tblModuleItems.module_id = tblEduOffersModules.module_id
        INNER JOIN tblThemes ON tblThemes.id = tblModuleItems.item_id
        INNER JOIN tblItems ON tblItems.id = tblThemes.id
        WHERE tblThemes.mandator_id = @current_mandator_id
        AND tblEduOffersTargetGroups.targetGroup_id IN (SELECT value 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>