﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
  <Reports>
    <Report id="7dcc8076-93c5-4ee1-aa14-ff8ffcf9ef85" codekey="Mecklenburgische_BZPerUser" categoryCodekey="CreditPoints" name="Bildungszeit pro User" description="Der Report gibt für alle User den aktuellen Stand der Bildungszeiten in einem Jahr aus.   ">
      <MetaData created="2021-12-21T17:10:41" createdBy="Administrator_LastName, Administrator_FirstName (Administrator)" createdBy_user_id="244" modified="2023-10-02T15:57:49" modifiedBy="Administrator_LastName, Administrator_FirstName (Administrator)" modifiedBy_user_id="244" />
      <ExecutionDetails format="TableResult" commandType="SqlCommandOrQuery" exportHandler="" adminControl="" exportMultipleTablesToSheets="False" datesWithTime="False" extraParams="" />
      <Mandators mandatorMode="OnlyOwner" mandator_id="35f3db1c-1b05-4a11-883a-2e57dafb9a9a" mandatorName="Mecklenburgische" isStandard="False" isUsedByMenu="False" />
      <Parameters>
        <Parameter id="9b923abd-0377-4e6f-a345-58798cf88493" isRequired="False" allowMultiSelect="False" name="IDD jahr" contextName="IDD jahr" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="ab9eba1f-78fb-4342-8f0b-a0e15ffe0cf8" isRequired="True" allowMultiSelect="False" name="Gesperrte User" contextName="Gesperrte User" defaultValue="1" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="76f4d3c5-2618-4c32-bade-747a2fd8b2ad" isRequired="False" allowMultiSelect="True" name="Target Groups Current Mandator" contextName="Zielgruppe" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="7f6a5453-f824-4a9e-989d-262d8364bba2" isRequired="False" allowMultiSelect="True" name="Abteilung" contextName="Abteilung/BD" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="83428ef6-aa30-41f4-a047-131633de7ed6" isRequired="False" allowMultiSelect="True" name="OrgUnits" contextName="Organisationseinheit" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
      </Parameters>
      <Roles>
        <Role id="39" />
        <Role id="50" />
        <Role id="70" />
        <Role id="81" />
        <Role id="90" />
      </Roles>
      <command>
		  /*
		  DECLARE @current_mandator_id UNIQUEIDENTIFIER = (SELECT id FROM tblMandators WHERE name = 'Mecklenburgische')
		  DECLARE @current_user_id INT = dbo.fn_GetAutoScriptUserId(@current_mandator_id)
		  DECLARE @idd_year INT = 2021
		  DECLARE @targetGroup_id typeIntList
		  INSERT INTO @targetGroup_id VALUES(200)
		  DECLARE @division typeStringList
		  DECLARE @orgUnit_id typeGuidList
		  INSERT INTO @orgUnit_id
		  SELECT id FROM tblOrganisationUnits WHERE mandator_id = @current_mandator_id
		  */

		  DECLARE @startDate DATETIME = CAST(CAST(@idd_year AS nvarchar) + '-01-01 00:00:00.000' AS datetime)
		  DECLARE @endDate DATETIME = CAST(CAST(@idd_year  AS nvarchar) + '-12-31 23:59:00.000' AS datetime)

		  DECLARE @OrgUnits TABLE
		  (
		  id UNIQUEIDENTIFIER,
		  parent_id UNIQUEIDENTIFIER,
		  parentTitle NVARCHAR(256),
		  title NVARCHAR(256),
		  nodeType INT,
		  codekey NVARCHAR(256),
		  mandator_id UNIQUEIDENTIFIER,
		  mandatorName NVARCHAR(256),
		  orgUnitPath NVARCHAR(750)
		  )

		  INSERT @OrgUnits
		  EXEC dbo.sp_GetOrganisationUnitsForUser @mandator_id = @current_mandator_id, @user_id = @current_user_id

		  DECLARE @QualiId UNIQUEIDENTIFIER

		  CREATE TABLE #Result(
		  [item_id]UNIQUEIDENTIFIER,
		  [user_id] INT,
		  [startDate] DATETIME,
		  [endDate] DATETIME,
		  educationTime INT,
		  referenceScore_id UNIQUEIDENTIFIER,
		  itemVersion INT,
		  Zielgruppen NVARCHAR(MAX)
		  )

		  CREATE TABLE #all_times(
		  [id] UNIQUEIDENTIFIER,
		  [item_id]UNIQUEIDENTIFIER,
		  [user_id] INT,
		  [startDate] DATETIME NULL,
		  [endDate] DATETIME NULL,
		  [created] DATETIME NULL,
		  [createdBy] NVARCHAR(325) NULL,
		  [createdBy_user_id] INT NULL,
		  [modified] DATETIME NULL,
		  [modifiedBy] NVARCHAR(325) NULL,
		  [modifiedBy_user_id] INT NULL,
		  [referenceScore_id] UNIQUEIDENTIFIER NULL,
		  [isExported] BIT NULL,
		  [isAcknowledged] BIT NULL,
		  educationTime INT,
		  title NVARCHAR(255) NULL,
		  titleForLearners NVARCHAR(255) NULL,
		  tag NVARCHAR(255) NULL,
		  isExternal BIT NULL,
		  itemType_id INT,
		  learningContent NVARCHAR(50) NULL,
		  learningTypeCodeKey NVARCHAR(50) NULL,
		  itemVersion INT NULL
		  )

		  CREATE TABLE #user_qualifcations(
		  qualification_id UNIQUEIDENTIFIER,
		  title NVARCHAR(255),
		  titleForLearners NVARCHAR(255),
		  referenceKey NVARCHAR(20),
		  isDeleted BIT,
		  referenceKey2 NVARCHAR(20)
		  )

		  Create Table #tempTable(
		  id UNIQUEIDENTIFIER,
		  itemType_id int,
		  title NVARCHAR(MAX),
		  educationTime int,
		  sortOrder int,
		  reQualification int,
		  qualification_id UNIQUEIDENTIFIER NULL
		  )

		  DECLARE @UserId INT
		  DECLARE user_cur CURSOR FAST_FORWARD FOR
		  SELECT DISTINCT UserCn
		  FROM v_UserQualifications uq
			INNER JOIN tableUsers u ON u.intUserCn = uq.UserCn
		  WHERE u.mandator_id = @current_mandator_id
		  AND (NOT EXISTS(SELECT * FROM @division) OR u.division IN (SELECT * FROM @division))
		  AND (
		  @is_blocked = 0                         -- 0 = All
		  OR @is_blocked = 1 AND u.blocked = 0    -- 1 = Only not locked
		  OR @is_blocked = 2 AND u.blocked = 1    -- 2 = Only locked
		  )
		  AND (EXISTS(SELECT * FROM tblUsersOrganisationUnits WHERE user_id = u.intUserCn AND organisationunit_id IN (SELECT * FROM @orgUnit_id) ))
		  AND (
		  NOT EXISTS ( SELECT * FROM @targetGroup_id)
		  OR EXISTS(SELECT * FROM tblUsersTargetGroups WHERE UserCn = intUserCn AND targetGroup_id IN  (SELECT * FROM @targetGroup_id))
		  )
		  AND (
		  EXISTS(SELECT * FROM v_Users WHERE intUserCn = @current_user_id AND securityId = 100)
		  OR EXISTS(SELECT * FROM @OrgUnits AS OrgUnits JOIN tblUsersOrganisationUnits ON organisationunit_id = OrgUnits.id AND user_id = u.intUserCn)
		  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)
		  )

		  OPEN user_cur
		  FETCH NEXT FROM user_cur INTO @UserId
		  WHILE @@FETCH_STATUS = 0
		  BEGIN
			  INSERT INTO #user_qualifcations EXEC sp_GetUserQualifications @UserId, @current_mandator_id, 0, 0, 0

			  -- inner cursor causting problems
			  DECLARE quali_cur CURSOR FAST_FORWARD FOR
			  SELECT qualification_id FROM #user_qualifcations

			  OPEN quali_cur
			  FETCH NEXT FROM quali_cur INTO @QualiId
			  WHILE @@FETCH_STATUS = 0
			  BEGIN
				  -- if the items are already available in the TempTable for the qualification
				  -- not inserting the items
				  IF NOT EXISTS(SELECT TOP 1 * FROM #tempTable WHERE qualification_id = @QualiId)
				  BEGIN
					  -- getting items for qualification
					  Create Table #qualificationItemsMapper(
					  id UNIQUEIDENTIFIER,
					  itemType_id int,
					  title NVARCHAR(MAX),
					  educationTime int,
					  sortOrder int,
					  reQualification int,
					  )
					  INSERT INTO #qualificationItemsMapper EXEC dbo.sp_GetQualificationItems @id = @QualiId
					  INSERT INTO #tempTable
					  SELECT *, @QualiId FROM #qualificationItemsMapper
					  DROP TABLE #qualificationItemsMapper
				  END

				  INSERT INTO #all_times EXEC dbo.sp_GetUserItemScores @UserId, @startDate, @endDate,@QualiId,1,DEFAULT

				  INSERT INTO #all_times (id, item_id, user_id, educationTime, title, itemType_id)
				  SELECT
				  id,
				  item_id,
				  user_id,
				  0,
				  title,
				  #tempTable.itemType_id
				  FROM #tempTable JOIN v_UsersAssignedItems ON item_id = #tempTable.id WHERE user_id = @UserId
				  AND NOT EXISTS (SELECT * FROM #all_times WHERE #all_times.user_id = @UserId AND #all_times.item_id = item_id)

				  FETCH NEXT FROM quali_cur INTO @QualiId
			  END
			  DELETE FROM #user_qualifcations
			  CLOSE quali_cur
			  DEALLOCATE quali_cur

			  FETCH NEXT FROM user_cur INTO @UserId
		  END
		  CLOSE user_cur
		  DEALLOCATE user_cur
		  PRINT 'END Reading Cursor'

		  -- eliminiere doppelte einträge
		  INSERT INTO #Result
		  SELECT DISTINCT
			  [item_id],
			  [user_id],
			  [startDate],
			  [endDate],
			  educationTime,
			  referenceScore_id,
			  itemVersion,
			  STUFF((
			  SELECT ', ' + title
			  FROM tblTargetGroups tg
			  INNER JOIN tblusersTargetGroups utg ON tg.id = utg.targetGroup_id
			  WHERE utg.userCn = user_id
			  AND tg.mandator_id = @current_mandator_id
			  AND tg.id IN (SELECT * FROM @targetGroup_id)
			  FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)'), 1, 2, '')AS Zielgruppen
		  FROM #all_times

		  --SELECT * FROM #all_times
		  SELECT
			  Nachname,
			  Vorname,
			  dbo.fn_GetEducationTimeString(SUM(r.educationTime)) AS [Ist-BZ],
			  '15:00' AS [Soll-BZ],
			  CASE
			  WHEN SUM(r.educationTime)/60 &lt;= 5 THEN 'Rot'
			  WHEN SUM(r.educationTime)/60 &lt; 15 THEN 'Gelb'
			  ELSE 'Grün'
			  END AS [Status],
			  CAST(@startDate AS date) AS [Beginn],
			  CAST(@endDate AS date) [Ende],
			  Zielgruppen,
			  u.division AS 'Abteilung/BD',
			  u.office AS 'Gruppe / Agenturnummer'
		  FROM #Result r
		  INNER JOIN tableUsers u ON u.intUserCn = r.user_id
		  GROUP BY user_id,Nachname,Vorname, Zielgruppen, division, office
		  ORDER BY Nachname
		  PRINT 'END Output Query'

		  DROP TABLE #user_qualifcations
		  DROP TABLE #Result
		  DROP TABLE #all_times
		  DROP TABLE #tempTable
	  </command>
    </Report>
  </Reports>
  <Parameters>
    <Parameter id="9b923abd-0377-4e6f-a345-58798cf88493" isSystem="False" name="IDD jahr" reportParameterType_id="9a0eea61-5322-4399-9e4e-7a881ea5b9cf" queryParameterName="@idd_year" />
    <Parameter id="ab9eba1f-78fb-4342-8f0b-a0e15ffe0cf8" isSystem="False" name="Gesperrte User" reportParameterType_id="029f1b16-0a78-4991-baee-1074a6a4bb4f" queryParameterName="@is_blocked" />
    <Parameter id="76f4d3c5-2618-4c32-bade-747a2fd8b2ad" isSystem="False" name="Target Groups Current Mandator" reportParameterType_id="4123c2c2-d408-476a-82bf-ca77f9ecf944" queryParameterName="@targetGroup_id" />
    <Parameter id="7f6a5453-f824-4a9e-989d-262d8364bba2" mandator_id="89174709-9ecf-4ca6-9919-464fdea856b3" isSystem="False" name="Abteilung" reportParameterType_id="ce7d19c1-b072-4a3a-b335-1d4cc2b940db" queryParameterName="@division" />
    <Parameter id="83428ef6-aa30-41f4-a047-131633de7ed6" isSystem="True" name="OrgUnits" reportParameterType_id="6237f8f6-9e0a-452a-800b-df8144d2d3f2" queryParameterName="@orgUnit_id" />
  </Parameters>
  <ParameterTypes>
    <ParameterType id="9a0eea61-5322-4399-9e4e-7a881ea5b9cf" isSystem="False" name="IDD jahr" datatype="IntegerDDL" dataValueField="year_id" dataTextField="year_name">
      <query>
        ; WITH yearsCTE AS
        (
        SELECT YEAR('2018-01-01') as year
        UNION ALL
        SELECT year + 1
        FROM yearsCTE
        WHERE year &lt; YEAR(GETDATE()) + 1 -- include upcoming year
        )
        SELECT year AS year_id, cast(year as nvarchar(64)) AS year_name
        FROM yearsCTE
      </query>
    </ParameterType>
    <ParameterType id="029f1b16-0a78-4991-baee-1074a6a4bb4f" isSystem="False" name="Gesperrte User" datatype="IntegerDDL" dataValueField="code" dataTextField="text">
        <query>
			DECLARE @isUserBlocked AS TABLE (
			code int,
			text NVARCHAR(50)
			)

			INSERT INTO @isUserBlocked VALUES (0, 'Alle')
			INSERT INTO @isUserBlocked VALUES (1, 'Nur nicht gesperrte User')
			INSERT INTO @isUserBlocked VALUES (2, 'Nur gesperrte User')

			SELECT code, text FROM @isUserBlocked
		</query>
    </ParameterType>	  
    <ParameterType id="4123c2c2-d408-476a-82bf-ca77f9ecf944" isSystem="False" name="TargetGroup" 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
        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>
    </ParameterType>
    <ParameterType id="ce7d19c1-b072-4a3a-b335-1d4cc2b940db" isSystem="False" name="Division" datatype="StringDDL" dataValueField="division" dataTextField="division">
      <query>select distinct(division) as division from v_Users where mandator_id=@current_mandator_id and division is not null</query>
    </ParameterType>
    <ParameterType id="6237f8f6-9e0a-452a-800b-df8144d2d3f2" isSystem="True" name="OrgUnit" datatype="OrgUnit" dataValueField="" dataTextField="" />
  </ParameterTypes>
</ReportsExport>