﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
  <Reports>
    <Report id="b07ff62e-1c7f-44bb-9329-154b152fd8aa" codekey="ADAC_AuswertungWBT_Manager" categoryCodekey="LearningPrograms" name="Auswertung WBT FK" 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',
		  (
		  ISNULL(STUFF(
		  (
		  SELECT ', ' + ISNULL(tgmu.FullUserName,'') FROM tblTargetGroups AS tg
		  INNER JOIN tblTargetGroupManagers AS tgm ON tg.id = tgm.targetGroup_id
		  INNER JOIN v_Users AS tgmu ON tgmu.intUserCn = tgm.user_id
		  WHERE tg.title = v_Users.office
		  AND v_Users.mandator_id = @current_mandator_id
		  AND tg.mandator_id = @current_mandator_id
		  FOR XML PATH('')),1,2,''),'')
		  ) AS 'Führungskraft',
		  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>