﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
  <Reports>
    <Report id="82e646e0-1e4c-4238-b30f-2bf1408b00da" codekey="expertsuisse_TestQuestionsStats_per_test" categoryCodekey="TestsAndQuestions" name="Testfragenstatistik per Test" description="Listet die Fragenstatistik für einen Test für alle Benutzer auf.">
      <MetaData created="2022-11-21T10:56:15" createdBy="Administrator, VIWIS (Administrator)" createdBy_user_id="3" modified="2023-11-29T12:28:31" modifiedBy="Rolle, Administrator (Administrator)" modifiedBy_user_id="12" />
      <ExecutionDetails format="TableResult" commandType="SqlCommandOrQuery" exportHandler="" adminControl="" exportMultipleTablesToSheets="True" datesWithTime="True" extraParams="" />
      <Mandators mandatorMode="OnlyOwner" mandator_id="96ba2868-8baf-4e69-b1fb-d2cc6d6832e8" mandatorName="expertsuisse" isStandard="False" isUsedByMenu="False" />
      <Parameters>
        <Parameter id="76f4d3c5-2618-4c32-bade-747a2fd8b2ad" isRequired="True" allowMultiSelect="True" name="Target Groups Current Mandator" contextName="Zielgruppen" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="dcc129b9-a6af-4893-8960-329bb06af895" isRequired="True" allowMultiSelect="False" name="Tests von Zielgruppen" contextName="Tests von Zielgruppen" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
      </Parameters>
      <Roles>
        <Role id="90" />
      </Roles>
      <command>/*DECLARE @current_mandator_id UNIQUEIDENTIFIER = (SELECT id FROM tblMandators WHERE name = 'expertsuisse')
DECLARE @tests UNIQUEIDENTIFIER = 'DDC0A797-6D2C-4717-ADE1-F4FEEF065133' -- Test "Fundamentals of Financial Accounting (FFA)"

DECLARE @targetGroup_id typeIntList
INSERT INTO @targetGroup_id 
SELECT TOP 1 id FROM tblTargetgroups 
WHERE mandator_id = @current_mandator_id
AND id = 1437
*/
DECLARE @question_count INT 
DECLARE @item_id_nvarchar NVARCHAR(36) = ''+TRY_CAST(@tests AS nvarchar(36))+''

CREATE TABLE #usersAndSessions(
	descUserCn NVARCHAR(64),
	user_id INT,
	email NVARCHAR(512),
	session_id UNIQUEIDENTIFIER,
	startDate DATETIME,
	endDate DATETIME,
	item_version INT,
	in_tg BIT
)
/*
SELECT	descUserCn AS Benutzer, tg.title AS Zielgruppe
FROM	tblUsersTargetGroups utg
JOIN	v_Users u
		ON u.intUserCn = utg.UserCn
JOIN	tblTargetGroups tg
		ON tg.id = utg.targetGroup_id
WHERE	utg.targetGroup_id = (SELECT * FROM @targetGroup_id)
ORDER BY descUserCn ASC

SELECT	descUserCn AS "Benutzer",
		startDate AS Begonnen,
		case
		WHEN status = 2 THEN 'bestanden'
		WHEN status = 3 THEN 'nicht bestanden'
		END AS "Status"
FROM	tblStatusUserItemHistory suih
JOIN	v_Users u
		ON u.intUserCn = suih.user_id
WHERE	suih.item_id = @tests
AND	EXISTS(SELECT * FROM tblUsersTargetGroups utg WHERE utg.UserCn = suih.user_id AND utg.targetGroup_id IN (SELECT * FROM @targetGroup_id))
ORDER BY u.descUserCn
*/
INSERT INTO #usersAndSessions
SELECT	ud.DescUserCn,suih.user_id,email,session_id,startDate,endDate,item_version,CASE WHEN EXISTS(SELECT * FROM tblUsersTargetGroups WHERE tblUsersTargetGroups.UserCn = ud.intUserCn AND targetGroup_id IN (SELECT * FROM @targetGroup_id)) THEN 1 ELSE 0 END
FROM	tblItems i
JOIN	tblStatusUserItemHistory suih ON suih.item_id = i.id
JOIN	v_UsersWithData ud ON ud.intUserCn = suih.user_id
WHERE	i.mandator_id = @current_mandator_id
AND		i.deleted IS NULL
AND		i.id = @tests
AND		EXISTS(SELECT * FROM tblUsersTargetGroups WHERE tblUsersTargetGroups.UserCn = ud.intUserCn AND targetGroup_id IN (SELECT * FROM @targetGroup_id))
ORDER BY ud.descUserCn ASC,startDate DESC

CREATE TABLE #TestSessionQuestionStats( 
	test_id UNIQUEIDENTIFIER,
	testsession_id UNIQUEIDENTIFIER,
	testpart_id UNIQUEIDENTIFIER,
	question_id UNIQUEIDENTIFIER,
	correct INT,
	sortOrder INT,
	numberPrefix NVARCHAR(32),
	numberSuffix INT
)

DECLARE @Testsession_id UNIQUEIDENTIFIER

DECLARE session_cur CURSOR FAST_FORWARD FOR
SELECT session_id FROM #usersAndSessions

OPEN session_cur
FETCH NEXT FROM session_cur INTO @Testsession_id
WHILE @@FETCH_STATUS = 0
BEGIN
	INSERT INTO #TestSessionQuestionStats
	EXEC dbo.sp_GetTasStatsTestSessionQuestionStatisticsByTest @tests, @Testsession_id,DEFAULT,0,1
	FETCH NEXT FROM session_cur INTO @Testsession_id
END
CLOSE session_cur
DEALLOCATE session_cur

SELECT  @question_count = MAX(sortOrder) 
FROM	#TestSessionQuestionStats questions
JOIN	#usersAndSessions us ON us.session_id = questions.testsession_id

-- BUILD Result TABLE
DECLARE @cnt INT = 0
DECLARE @SQL NVARCHAR(MAX)
DECLARE @SQL_start NVARCHAR(MAX) = 'DECLARE @tests UNIQUEIDENTIFIER = '''+ @item_id_nvarchar +''';
									SELECT	us.descUserCn AS Benutzername, us.email AS Emailadresse,us.startDate AS Startdatum,'

DECLARE @SQL_questions NVARCHAR(MAX) = ''

-- Cursor to get the stats of the Quesitions

DECLARE @question_id UNIQUEIDENTIFIER
DECLARE @number_suffix INT
DECLARE @question_title NVARCHAR(256)

DECLARE question_cur CURSOR FAST_FORWARD FOR
SELECT DISTINCT 
question_id, 
numberSuffix,
dbo.fn_GetResourceString((SELECT c.name_resource_id FROM tblTasQuestions c WHERE c.id = question_id), 1031,1,1033) AS question_title
FROM #TestSessionQuestionStats
ORDER BY question_title

OPEN question_cur
FETCH NEXT FROM question_cur INTO @question_id, @number_suffix, @question_title
WHILE @@FETCH_STATUS = 0
BEGIN 
	SET @SQL_questions = @SQL_questions + '(SELECT CASE WHEN MAX(correct) = 1 THEN ''richtig'' WHEN MAX(correct) IS NULL THEN '''' ELSE ''FALSCH'' END AS "correct" FROM #TestSessionQuestionStats WHERE testsession_id = us.session_id AND question_id = ''' + TRY_CAST(@question_id AS nvarchar(255)) + ''') AS "'+ @question_title +'",'
	PRINT @SQL_questions
	FETCH NEXT FROM question_cur INTO @question_id, @number_suffix, @question_title
END

CLOSE question_cur
DEALLOCATE question_cur

DECLARE @SQL_end NVARCHAR(MAX) ='	(SELECT COUNT(question_id) FROM #TestSessionQuestionStats WHERE test_id = @tests and testsession_id = us.session_id) AS "Anzahl Testfragen",
									us.item_version AS "Testversion",
									DATEDIFF(minute,sessions.startDate,sessions.endDate) AS "Zeitaufwand (min)",	
									CAST((stats.pctQuestions * (SELECT COUNT(question_id) FROM #TestSessionQuestionStats WHERE test_id = @tests and testsession_id = us.session_id) / 100) AS DECIMAL) AS "Anzahl richtige Fragen",
									stats.pctQuestions AS "richtige Fragen in %",
									CAST((stats.pctQuestions * (SELECT COUNT(question_id) FROM #TestSessionQuestionStats WHERE test_id = @tests and testsession_id = us.session_id) / 100) AS DECIMAL) * 2 AS "Erreichte Punktezahl (2 Punkte pro Frage)",
									CASE WHEN stats.passed = 1 THEN ''Ja'' ELSE ''NEIN'' END AS "Bestanden"
									FROM #usersAndSessions us
									INNER JOiN v_TblTasStatsTestSessions stats ON stats.testsession_id = us.session_id
									INNER JOIN tblTasTestSessions sessions ON sessions.id = us.session_id'

SET @SQL = CONCAT(@SQL_start,@SQL_questions,@SQL_end)

EXEC sp_executesql @SQL

PRINT @SQL

DROP TABLE #TestSessionQuestionStats
DROP TABLE #usersAndSessions</command>
    </Report>
  </Reports>
  <Parameters>
    <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="dcc129b9-a6af-4893-8960-329bb06af895" isSystem="True" name="Tests von Zielgruppen" reportParameterType_id="fdf34b0e-b637-48af-a319-710774eba482" queryParameterName="@tests" />
    <Parameter id="93460158-2520-48a7-ac64-9350fa3d159f" isSystem="True" name="Zielgruppen Multiselektion" reportParameterType_id="f4c178f7-fa5a-4229-92ea-2839c7c82ea4" queryParameterName="@targetGroupId" />
  </Parameters>
  <ParameterTypes>
    <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="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="f4c178f7-fa5a-4229-92ea-2839c7c82ea4" isSystem="False" name="Auswahl 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>
  </ParameterTypes>
</ReportsExport>