﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
  <Reports>
    <Report id="1496f69a-f3cc-440f-b6ba-b81bdfe2f260" codekey="Kosmos_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="OnlyOwner" mandator_id="0ab3e804-57cb-42a7-82a3-a6fd412d317d" mandatorName="Kosmos" isStandard="False" isUsedByMenu="False" />
      <Parameters>
		<Parameter id="f5d69246-37d4-4c96-a9dc-8cdcbeee1705" isRequired="True" allowMultiSelect="False" name="Ignore OU" contextName="Organisationseinheiten ignorieren" defaultValue="0" renderHint="Undefined" disableParameter="DontDisable" />
		<Parameter id="3ffbb2af-4676-4bf7-9f52-8b5c2b672971" isRequired="False" allowMultiSelect="True" name="OrgUnits" contextName="Organisationseinheiten" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <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="True" allowMultiSelect="True" name="WBTs for selected Target Groups" contextName="WBTs for selected Target Groups " defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
      </Parameters>
      <Roles>
        <Role id="19" />
        <Role id="20" />
        <Role id="22" />
        <Role id="24" />
        <Role id="34" />
        <Role id="36" />
        <Role id="37" />
        <Role id="38" />
        <Role id="39" />
        <Role id="40" />
        <Role id="41" />
        <Role id="42" />
        <Role id="43" />
        <Role id="44" />
        <Role id="46" />
        <Role id="47" />
        <Role id="48" />
      </Roles>
      <command>
        --START: Parameter simulating for debugging
        --DECLARE @targetGroupId AS dbo.typeIntList
        --DECLARE @wbtsForTargetGroups AS dbo.typeGuidList
        --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)
            INNER JOIN  v_UsersAssignedItems WITH (NOLOCK)
            ON v_UsersAssignedItems.user_id = v_Users.intUserCn
            INNER JOIN tblItems WITH (NOLOCK)
            ON tblItems.id = v_UsersAssignedItems.item_id
            LEFT JOIN  tblStatusUserItemOverride WITH (NOLOCK)
            ON tblStatusUserItemOverride.user_id = v_Users.intUserCn AND tblStatusUserItemOverride.item_id = tblItems.id
        WHERE
            v_Users.mandator_id = @current_mandator_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)
            )
            )
			AND
			(
			    @boolean = 1
				or
				exists(select 1 from tblUsersOrganisationUnits uou 
				 		 join @orgUnit_id on value = uou.organisationUnit_id
						where v_Users.intUserCn = uou.user_id)				
			)

        --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

        DECLARE @item_id UNIQUEIDENTIFIER
		DECLARE cursor_wbts CURSOR LOCAL FORWARD_ONLY
			FOR SELECT #result1.id FROM #result1 join tblItems on tblItems.id = #result1.id ORDER BY title
		OPEN cursor_wbts

        FETCH next FROM cursor_wbts INTO @item_id
		WHILE @@fetch_status = 0
			BEGIN
                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
				WHERE
					tblItems.id = @item_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 tblItems.id = @item_id
                ORDER BY v_Users.descUserCn

				FETCH next FROM cursor_wbts INTO @item_id
			END
		CLOSE cursor_wbts
		DEALLOCATE cursor_wbts

        --START: cleanup report
        DROP TABLE #result1
        DROP TABLE #result2
        DROP TABLE #wbts
        --END: cleanup report
      </command>
    </Report>
  </Reports>
  <Parameters>
	<Parameter id="f5d69246-37d4-4c96-a9dc-8cdcbeee1705" isSystem="False" name="Ignore OU" reportParameterType_id="9ec1e04a-1a50-4938-8d12-54041c902407" queryParameterName="@boolean" />
	<Parameter id="3ffbb2af-4676-4bf7-9f52-8b5c2b672971" isSystem="True" name="OrgUnits" reportParameterType_id="8a3022c2-6ef5-4246-b2bf-58fdf7f30afa" queryParameterName="@orgUnit_id" />
    <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" />
  </Parameters>
  <ParameterTypes>
    <ParameterType id="9ec1e04a-1a50-4938-8d12-54041c902407" isSystem="True" name="Boolean" datatype="StringDDL" dataValueField="Value" dataTextField="Text">
	    <query>
		    DECLARE	@userRole_id INT = 10
		    SELECT @userRole_id = SecurityID FROM tableUsers WHERE intUserCn = @current_user_id

		    IF(
				    -- Ignore OU choice is available only for tg manager or for users with function FcnIsAuthorizedForAllTGs
				    ( 
				    dbo.fn_IsTGManager(@current_user_id, NULL) = 1
				    OR
				    @userRole_id = 100 -- PLATMIN
				    OR
				    EXISTS
					    (
						    select 1 
							    from tblRolesFunctions rf
							    join tblFunctions f on f.id = rf.function_id
							    where rf.mandator_id = @current_mandator_id
							    and f.shortcut like 'FcnIsAuthorizedForAllTGs'
							    and rf.role_id = @userRole_id
					    )
				    )
				    AND
				    -- and only when any OU is visible to the user
				    (
				    @userRole_id = 100 -- PLATMIN
				    OR
				    EXISTS
					    (
						    select 1 
							    from tblRolesFunctions rf
							    join tblFunctions f on f.id = rf.function_id
							    where rf.mandator_id = @current_mandator_id
							    and f.shortcut like 'FcnIsAuthorizedForEvalOfOrgUnits'
							    and rf.role_id = @userRole_id
					    )
				    OR
				    EXISTS(
						        SELECT 1
								    FROM tblUsersOrganisationUnits
								    WHERE user_id = @current_user_id
								    AND position IN (1, 2) -- Manager or Delegate 
						    )
				    )
			    )
			    BEGIN
			    SELECT 0 AS Value, 'Nein' AS Text
			    UNION
			    SELECT 1 AS Value, 'Ja' AS Text
			    END	
			    ELSE
			    SELECT 1 AS Value, 'Ja' AS Text
	    </query>
    </ParameterType>
    <ParameterType id="8a3022c2-6ef5-4246-b2bf-58fdf7f30afa" isSystem="True" name="OrgUnit" datatype="OrgUnit" dataValueField="" dataTextField="">
	    <Parameters>
		    <Parameter id="f5d69246-37d4-4c96-a9dc-8cdcbeee1705" isRequired="False" allowMultiSelect="False" name="Ignore OU" contextName="Ignore OU" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
	    </Parameters>
    </ParameterType>	  
    <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 tblThemes
         INNER JOIN tblItems ON tblItems.id = tblThemes.id
         WHERE tblThemes.mandator_id = @current_mandator_id
            AND tblItems.deleted IS NULL
			AND (
				NOT EXISTS (SELECT * FROM @targetGroupId)
				OR
				EXISTS (SELECT 1 FROM tblEduOffersTargetGroups
						INNER JOIN @targetGroupId tg ON tg.value = tblEduOffersTargetGroups.targetGroup_id
						INNER JOIN tblEduOffersModules ON tblEduOffersModules.eduOffer_id = tblEduOffersTargetGroups.eduOffer_id
						INNER JOIN tblModuleItems ON tblModuleItems.module_id = tblEduOffersModules.module_id
						WHERE tblThemes.id = tblModuleItems.item_id
						)
				)
        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>
  </ParameterTypes>
</ReportsExport>