﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
  <Reports>
    <Report id="089f8a6c-7760-4841-b0a7-15f5f9323ce5" codekey="ExternalItemsCategories" categoryCodekey="SpecialPurpose" name="Externe Baustein-Kategorien" description="Es werden die User gelistet, die externe Bausteine der zuvor gewählten Kategorie nachgetragen haben.">
      <MetaData created="2023-03-16T11:32:00" createdBy="Administrator, VIWIS (Administrator)" createdBy_user_id="3" modified="2023-05-03T10:09:32" modifiedBy="Rolle, Administrator (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" isStandard="True" isUsedByMenu="False" />
      <Parameters>
        <Parameter id="0b3d06c9-3c46-4eb2-9c54-8a75c1926ce5" isRequired="False" allowMultiSelect="True" name="OrgUnitsTgs" contextName="OrgUnitsTgs" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="d8e4595f-8bdd-4a54-9298-8f378450e6a0" isRequired="False" allowMultiSelect="False" name="Zeitraum" contextName="Zeitraum" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="837367dc-ea66-4b2c-8d36-f0299f7c2bf2" isRequired="True" allowMultiSelect="False" name="ExternalItemCategory" contextName="Externe Baustein Kategorie" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="322cd416-2112-4e6f-a91d-44cb617ded0b" isRequired="False" allowMultiSelect="False" name="External Item depending on category" contextName="Externer Baustein abhängig von Kategorie" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="7a721121-2d2e-4a3d-b9e6-c6aa238e7ab2" isRequired="False" allowMultiSelect="False" name="Auswahl (ja/nein)" contextName="Zertifikat" defaultValue="1" renderHint="Undefined" disableParameter="DontDisable" />
      </Parameters>
      <Roles>
        <Role id="90" />
      </Roles>
      <command>
        -- TEST AREA START
        
        --declare @current_user_id INT = 12;
        --declare @current_mandator_id UNIQUEIDENTIFIER;
        --select @current_mandator_id = mandator_id from tableUsers where intUserCn =  12;

        --DECLARE @tg_id dbo.typeIntList;
        --DECLARE @orgUnit_id dbo.typeGuidList;
        --INSERT INTO @orgUnit_id (value) select id from dbo.fn_GetOrgUnitsSubordinateToPositionForUser(@current_user_id, @current_mandator_id)

        --declare @dateRange_start DATETIME = '2023-01-01';
        --declare @dateRange_end DATETIME;

        --declare @categoryExternalItem_id UNIQUEIDENTIFIER;
        --declare @externalItemCategory_id UNIQUEIDENTIFIER;
        --select top 1 @externalItemCategory_id = id
        --from tblObjects
        --where mandator_id = @current_mandator_id
        --and objectType_id = 8
        --and deleted IS NULL

        ---- Certificate
        --DECLARE @selection_yesno BIT;

        -- TEST AREA END

        declare @authorizedOrgUnits typeGuidList
        declare @authrorizedTgs typeintList
        declare @isAuthorizedForAllOrgUnits bit = 0
        declare @isAuthorizedForAllTgs bit = 0
        declare @noTGselected bit = 0

        IF(EXISTS(SELECT * FROM @tg_id WHERE value = 0))
        BEGIN
        SET @noTGselected = 1
        -- select @noTGselected as notSelectedTG
        END

        -- set flag for Authorized for all Org. Units
        IF(EXISTS(SELECT * from v_Users WHERE intUserCn = @current_user_id AND SecurityID = 100)
        OR
        EXISTS(SELECT *
        FROM tblRolesFunctions
        JOIN v_Users ON SecurityID = role_id AND intUserCn = @current_user_id
        JOIN tblFunctions ON tblFunctions.id = tblRolesFunctions.function_id and shortcut = 'FcnIsAuthorizedForEvalOfOrgUnits' AND tblRolesFunctions.mandator_id = @current_mandator_id
        )
        )
        BEGIN
        SET @isAuthorizedForAllOrgUnits = 1
        END


        -- set flag for Authorized for all target groups
        IF(EXISTS(SELECT * from v_Users WHERE intUserCn = @current_user_id AND SecurityID = 100)
        OR
        EXISTS(SELECT *
        FROM tblRolesFunctions
        JOIN v_Users ON SecurityID = role_id AND intUserCn = @current_user_id
        JOIN tblFunctions ON tblFunctions.id = tblRolesFunctions.function_id and shortcut = 'FcnIsAuthorizedForAllTGs' AND tblRolesFunctions.mandator_id = @current_mandator_id
        )
        )
        BEGIN
        SET @isAuthorizedForAllTgs = 1
        END
        -- if the user selected "no restriction" for targetGroups


        -- get the targetGroups for the OUs
        -- getting all the targetGroups for the given OUs
        CREATE TABLE #ouTargetGroups
        (
        targetGroup_id INT,
        title NVARCHAR(255),
        titleForLearners NVARCHAR(255)
        )

        DECLARE @tgm_user_id INT = NULL
        IF(NOT EXISTS(SELECT * FROM @orgUnit_id) AND @isAuthorizedForAllTgs = 0) -- if OUs ignored get ONLY the authorized TGs for the user
        BEGIN
        SET @tgm_user_id = @current_user_id
        END

        -- select @tgm_user_id as userId

        INSERT INTO #ouTargetGroups
        EXEC sp_GetTargetGroupsForOrgUnits @mandator_id=@current_mandator_id,@current_user_id=@current_user_id,@tgm_user_id=@tgm_user_id,@orgUnitIds=@orgUnit_id,@childManagersOnly=0

        INSERT INTO @authrorizedTgs
        SELECT targetGroup_id FROM #ouTargetGroups

        DROP TABLE #ouTargetGroups


        CREATE TABLE #relevantTargetGroups
        (
        targetGroup_id INT
        )

        IF(EXISTS(SELECT * FROM @tg_id WHERE value = -1)) --if all TGs selected =&gt; consider the relevant TGs 
    BEGIN
        INSERT INTO #relevantTargetGroups
        SELECT value FROM @authrorizedTgs
    END
    ELSE -- otherwise consider only the selected TGs
    BEGIN
        INSERT INTO #relevantTargetGroups
        SELECT value FROM @tg_id
    END
  --   select * from #relevantTargetGroups
  -- SELECT * FROM @orgUnit_id

    SELECT DISTINCT
    Nachname,
    Vorname,
    descUserCn as Kennung,
    tblObjects.title as Kategorie,
    tblItems.title as 'Externer Baustein',
    CASE WHEN tblUserItemCertificate.certificateFileId IS NULL
    THEN 'Nein'
    ELSE 'Ja'
    END AS Zertifikat
    FROM tblStatusUserItemHistory
    INNER JOIN tblExternalItems ON tblExternalItems.id = item_id
    INNER JOIN tblItems ON tblItems.id = tblExternalItems.id AND deleted IS NULL
    INNER JOIN v_Users ON v_users.intUserCn = user_id
    LEFT JOIN tblObjects ON tblObjects.id = tblExternalItems.externalItemCategory_id
    LEFT JOIN tblUserItemCertificate ON tblUserItemCertificate.user_id = tblStatusUserItemHistory.user_id AND tblUserItemCertificate.item_id = tblStatusUserItemHistory.item_id
    WHERE
    (
        NOT EXISTS(SELECT * FROM @orgUnit_id) -- all org. units. This is empty when "Ignore OUs" selected
        OR
        EXISTS(SELECT 1 FROM tblUsersOrganisationUnits
            JOIN @orgUnit_id as OrgUnits ON OrgUnits.value = organisationUnit_id
            WHERE user_id = intUserCn
        )
    )
    AND
    (
        --(EXISTS (SELECT * FROM @tg_id WHERE value = -1) AND (@isAuthorizedForAllTgs = 1)) -- all TGs
        --OR
        EXISTS(SELECT 1 FROM tblUsersTargetGroups
            JOIN #relevantTargetGroups AS targetGroups ON targetGroups.targetGroup_id = tblUsersTargetGroups.targetGroup_id
            LEFT JOIN @authrorizedTgs AS authTargetGroups ON authTargetGroups.value = targetGroups.targetGroup_id
            WHERE tblUsersTargetGroups.UserCn = intUserCn AND (@isAuthorizedForAllTgs = 1 OR authTargetGroups.value IS NOT NULL)
        )
        OR
        (
            @noTGselected = 1
            AND
            NOT EXISTS(SELECT * FROM tblUsersTargetGroups WHERE tblUsersTargetGroups.UserCn = intUserCn )
        )
    )    
    AND
    (
        (@dateRange_start IS NULL OR tblExternalItems.startDate &gt;= @dateRange_start)
        AND
        (@dateRange_end IS NULL OR tblExternalItems.endDate &lt;= @dateRange_end)
    )
    AND tblExternalItems.externalItemCategory_id = @externalItemCategory_id -- mandatory
    AND
    (
        @categoryExternalItem_id IS NULL OR tblExternalItems. id = @categoryExternalItem_id
    )
    AND
    (
        @selection_yesno IS NULL
        OR (@selection_yesno = 0 AND tblUserItemCertificate.certificateFileId IS NULL)
        OR (@selection_yesno = 1 AND tblUserItemCertificate.certificateFileId IS NOT NULL)
    )
    ORDER BY Nachname, Vorname, Kennung

DROP TABLE #relevantTargetGroups
</command>
    </Report>
  </Reports>
  <Parameters>
    <Parameter id="0b3d06c9-3c46-4eb2-9c54-8a75c1926ce5" isSystem="True" name="OrgUnitsTgs" reportParameterType_id="bc8f7550-7663-419f-bde5-cf1b54b8da7a" queryParameterName="@orgUnit_id,@tg_id" />
    <Parameter id="d8e4595f-8bdd-4a54-9298-8f378450e6a0" isSystem="True" name="Zeitraum" reportParameterType_id="abff13be-91c3-4ee1-93a3-7292f8e013ba" queryParameterName="@dateRange" />
    <Parameter id="837367dc-ea66-4b2c-8d36-f0299f7c2bf2" isSystem="False" name="ExternalItemCategory" reportParameterType_id="c09a004f-0cfb-4b7a-880a-ff9f6faa606b" queryParameterName="@externalItemCategory_id" />
    <Parameter id="322cd416-2112-4e6f-a91d-44cb617ded0b" isSystem="False" name="External Item depending on category" reportParameterType_id="a99b212b-21aa-4132-b38d-709db44809de" queryParameterName="@categoryExternalItem_id" />
    <Parameter id="7a721121-2d2e-4a3d-b9e6-c6aa238e7ab2" isSystem="True" name="Auswahl (ja/nein)" reportParameterType_id="411ec93b-ab23-41ba-91d6-e7dc0235b5af" queryParameterName="@selection_yesno" />
  </Parameters>
  <ParameterTypes>
    <ParameterType id="bc8f7550-7663-419f-bde5-cf1b54b8da7a" isSystem="True" name="OrgUnitTg" datatype="OrgUnitTg" dataValueField="" dataTextField="" />
    <ParameterType id="abff13be-91c3-4ee1-93a3-7292f8e013ba" isSystem="True" name="DateRange" datatype="DateRange" dataValueField="" dataTextField="" />
    <ParameterType id="c09a004f-0cfb-4b7a-880a-ff9f6faa606b" isSystem="False" name="ExternalItemCategories" datatype="GuidDDL" dataValueField="id" dataTextField="title">
      <query>SELECT id, title FROM tblObjects WHERE objectType_id = 8 ORDER BY title</query>
    </ParameterType>
    <ParameterType id="a99b212b-21aa-4132-b38d-709db44809de" isSystem="False" name="External Item depending on category" datatype="GuidDDL" dataValueField="id" dataTextField="title">
      <query>
				SELECT tblExternalItems.id, title
				FROM tblItems
				JOIN tblExternalItems ON tblExternalItems.id = tblItems.id
				WHERE externalItemCategory_id = @externalItemCategory_id
				AND
				(
				(@dateRange_start IS NULL OR tblExternalItems.startDate &gt;= @dateRange_start)
				AND
				(@dateRange_end IS NULL OR tblExternalItems.endDate &lt;= @dateRange_end)
				)
			</query>
      <Parameters>
        <Parameter id="837367dc-ea66-4b2c-8d36-f0299f7c2bf2" isRequired="False" allowMultiSelect="False" name="ExternalItemCategory" contextName="ExternalItemCategory" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="d8e4595f-8bdd-4a54-9298-8f378450e6a0" isRequired="False" allowMultiSelect="False" name="Zeitraum" contextName="Zeitraum" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
      </Parameters>
    </ParameterType>
    <ParameterType id="411ec93b-ab23-41ba-91d6-e7dc0235b5af" isSystem="True" name="Boolean" datatype="StringDDL" dataValueField="Value" dataTextField="Text">
      <query>
        SELECT 0 AS Value, 'Nein' AS Text
        UNION
        SELECT 1 AS Value, 'Ja' AS Text
      </query>
    </ParameterType>
  </ParameterTypes>
</ReportsExport>