﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
  <Reports>
    <Report id="db7b8fb1-c091-4700-a3c7-6b516cd13206" codekey="ERGO_PortfolieAnalyse" name="Gesamtübersicht Angebots-Portfolio" description="Eine Auflistung aller Bausteine und der dazugehörenden Metadaten.">
      <MetaData created="2023-07-04T17:00:05" createdBy="ERGO Direkt, Administrator (Administrator)" createdBy_user_id="888" modified="2024-02-07T10:46:41" modifiedBy="ERGO Direkt, Administrator (Administrator)" modifiedBy_user_id="888" />
      <ExecutionDetails format="TableResult" commandType="SqlCommandOrQuery" exportHandler="" adminControl="" exportMultipleTablesToSheets="True" datesWithTime="False" extraParams="" />
      <Mandators mandatorMode="OnlyOwner" mandator_id="c5fd8bcc-2b1a-4f1d-b30d-9063c3f768cc" isStandard="False" isUsedByMenu="False" />
      <Parameters>
        <Parameter id="19308b6b-d4fd-43a8-b8fc-68ac4606cd34" isRequired="False" allowMultiSelect="False" name="Einzelne Zielgruppe" contextName="Zielgruppe" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
      </Parameters>
      <Roles>
        <Role id="90" />
      </Roles>
      <command>-- ------------------------------------------------------------
-- START: Test variables
-- ------------------------------------------------------------
-- DECLARE @current_mandator_id uniqueidentifier;
-- SELECT
--    @current_mandator_id = id
-- FROM
--    tblMandators
-- WHERE
--    name = 'ERGO_e-Campus';

-- DECLARE @distinctTargetGroup_id int = 2833;
-- DECLARE @dateRange_start datetime = NULL;
-- DECLARE @dateRange_end datetime = NULL;
-- ------------------------------------------------------------
-- END: Test variables
-- ------------------------------------------------------------

-- For the specified target group all chained items
IF OBJECT_ID('tempdb..#TGItemChain') IS NOT NULL
    DROP TABLE #TGItemChain;

CREATE TABLE #TGItemChain
(
    itemId UNIQUEIDENTIFIER NOT NULL,
    itemTypeId INT NOT NULL,
    moduleId UNIQUEIDENTIFIER NULL,
    eduOfferId UNIQUEIDENTIFIER NULL
)
IF @distinctTargetGroup_id IS NOT NULL
BEGIN
    INSERT INTO
        #TGItemChain
    SELECT DISTINCT
        i_i.item_id,
        i_i.itemType_id,
        eom.module_id,
        eom.eduOffer_id
    FROM
        v_Items i_i
        JOIN tblModuleItems mi
            ON  mi.item_id = i_i.item_id
        JOIN v_Items m_i
            ON  m_i.item_id = mi.module_id
        JOIN tblEduOffersModules eom
            ON  eom.module_id = mi.module_id
        JOIN v_Items e_i
            ON  e_i.item_id = eom.eduOffer_id
        JOIN tblEduOffersTargetGroups eot
            ON  eot.eduOffer_id = eom.eduOffer_id        
    WHERE
        i_i.mandator_id = @current_mandator_id
        AND eot.targetGroup_id = @distinctTargetGroup_id
END
ELSE
BEGIN
    -- No specific target group specified, we don't filter on it
    INSERT INTO
        #TGItemChain
    SELECT DISTINCT
        i_i.item_id,
        i_i.itemType_id,
        eom.module_id,
        eom.eduOffer_id
    FROM
        v_Items i_i
        JOIN tblModuleItems mi
            ON  mi.item_id = i_i.item_id
        JOIN v_Items m_i
            ON  m_i.item_id = mi.module_id
        JOIN tblEduOffersModules eom
            ON  eom.module_id = mi.module_id
        JOIN v_Items e_i
            ON  e_i.item_id = eom.eduOffer_id
    WHERE
        i_i.mandator_id = @current_mandator_id
END

IF OBJECT_ID('tempdb..#DistinctItems') IS NOT NULL
    DROP TABLE #DistinctItems;

CREATE TABLE #DistinctItems
(
    itemId UNIQUEIDENTIFIER PRIMARY KEY,
    itemTypeId INT
);

INSERT INTO
    #DistinctItems(itemId, itemTypeId)
SELECT DISTINCT
    itemId,
    itemTypeId
FROM
    #TGItemChain


IF OBJECT_ID('tempdb..#Users') IS NOT NULL
    DROP TABLE #Users;

CREATE TABLE #Users
(
    user_id INT PRIMARY KEY
);

-- Users
IF @distinctTargetGroup_id IS NULL
BEGIN
    INSERT INTO
        #Users
    SELECT
        intUserCn
    FROM
        v_Users
    WHERE
        mandator_id = @current_mandator_id
END
ELSE
BEGIN
    INSERT INTO
        #Users
    SELECT
        u.intUserCn
    FROM
        tblUsersTargetGroups utg
        -- Filter for standard, non-deleted users
        JOIN v_Users u
            ON u.intUserCn = utg.UserCn
    WHERE
        utg.targetGroup_id = @distinctTargetGroup_id;
END

-- Aggregate user information for WBTs and Tests
IF OBJECT_ID('tempdb..#WbtTestAggregates') IS NOT NULL
    DROP TABLE #WbtTestAggregates;

CREATE TABLE #WbtTestAggregates
(
    item_id uniqueidentifier, 
    itemType_id int, 
    totalUsers int, 
    usersExecutedItem int, 
    avgLearningDurationItem int, 
    totalLearningDurationItem int, 
    totalExecutionsItem int, 
    greenStatuses int, 
    yellowStatuses int, 
    redStatuses int
);

-- getting items for the users of the targetgroup currently assigned
;WITH PotentialItems
(
    item_id,
    itemType_id
)
AS
(
    SELECT
        itemId AS item_id, 
        itemTypeId AS itemType_id
    FROM
        #DistinctItems
    WHERE
        itemTypeId IN(0, 1)
)
INSERT INTO
    #WbtTestAggregates
SELECT
    item_id, 
    itemType_id, 
    (
        SELECT
            COUNT(*)
        FROM
            #users
    ),
    0,
    0,
    0,
    0,
    0,
    0,
    0
FROM
    PotentialItems;

-- getting the green statuses for those items and users
-- getting the yellow statuses for those items and users
-- getting the red statuses for those items and users
UPDATE
    #WbtTestAggregates
SET
    usersExecutedItem = calc.usersCount,
    greenStatuses = calc.greenStatus, 
    yellowStatuses = calc.yellowStatus, 
    redStatuses = calc.redStatus
FROM
    #WbtTestAggregates
    JOIN
    (
        -- for each user of the targetgroups we have to detect the items MAX status for calculation
        SELECT
            item_id,
            COUNT(*) usersCount,
            SUM
            (
                CASE
                    WHEN itemStatus = 4 THEN 1
                    ELSE 0
                END
            ) AS greenStatus, 
            --needed because the MAX logic wouldn't work else
            SUM
            (
                CASE
                    WHEN itemStatus = 1 THEN 1
                    ELSE 0
                END
            ) AS yellowStatus, 
            SUM
            (
                CASE
                    WHEN itemStatus = 3 THEN 1
                    ELSE 0
                END
            ) AS redStatus
        FROM
        (
            -- we have to calculate the max status for the user
            SELECT
                MAX
                (
                    CASE
                        WHEN status = 2 THEN 4
                        ELSE status
                    END
                ) AS itemStatus,
                suih.item_id
            FROM
                tblStatusUserItemHistory AS suih
                JOIN #Users AS users
                    ON users.user_id = suih.user_id
                JOIN #WbtTestAggregates AS items
                    ON items.item_id = suih.item_id
            --WHERE
            --    suih.startDate BETWEEN @dateRange_start AND @dateRange_end
            GROUP BY
                suih.user_id,
                suih.item_id
        ) AS innerQuery
        GROUP BY
            item_id
    ) AS calc
        ON calc.item_id = #WbtTestAggregates.item_id;


UPDATE
    #WbtTestAggregates
SET
    -- getting total calls of the WBTs
    totalExecutionsItem = ISNULL(wbtAggregates.totalExecutionsItem, 0),
    -- getting total learning duration for the WBTs
    totalLearningDurationItem = ISNULL(wbtAggregates.totalLearningDurationItem, 0),
    -- getting avg learning duration for the WBT and user
    avgLearningDurationItem = ISNULL(wbtAggregates.avgLearningDurationItem, 0)
FROM
    (
        SELECT
            theme_id,
            COUNT(*) as totalExecutionsItem,
            SUM(tblStatsThemeSessions.durationSeconds) AS totalLearningDurationItem,
            AVG(tblStatsThemeSessions.durationSeconds) AS avgLearningDurationItem
        FROM
            tblStatsThemeSessions
            JOIN #Users
                ON #Users.user_id = tblStatsThemeSessions.user_id
                --AND tblStatsThemeSessions.startTime BETWEEN @dateRange_start AND @dateRange_end
        GROUP BY
            theme_id
    ) AS wbtAggregates
WHERE
    #WbtTestAggregates.itemType_id = 1
    AND wbtAggregates.theme_id = #WbtTestAggregates.item_id


-- getting total calls of the Tests
UPDATE
    #WbtTestAggregates
SET
    totalExecutionsItem = ISNULL(testAggregates.totalCount, 0),
    totalLearningDurationItem = ISNULL(testAggregates.totalLearnTime, 0),
    avgLearningDurationItem = ISNULL(testAggregates.avgLearnDuration, 0)
FROM
    (
        SELECT
            test_id,
            COUNT(*) as totalCount,
            SUM(DATEDIFF(MINUTE, startdate, enddate)) as totalLearnTime,
            AVG(DATEDIFF(MINUTE, startdate, endDate)) as avgLearnDuration

        FROM
            tblTasTestSessions
            JOIN #Users
                ON #users.user_id = tblTasTestSessions.user_id
                -- AND tblTasTestSessions.endDate BETWEEN @dateRange_start AND @dateRange_end
        GROUP BY
            test_id
    ) AS testAggregates
WHERE
    #WbtTestAggregates.itemType_id = 0
    AND testAggregates.test_id = #WbtTestAggregates.item_id
    

IF OBJECT_ID('tempdb..#ItemMapping') IS NOT NULL
    DROP TABLE #ItemMapping;

CREATE TABLE #ItemMapping
(
    id int, 
    title varchar(20)
);

INSERT INTO
    #ItemMapping
VALUES
    (0, 'Test'),
    (1, 'Lernprogramm'),
    (2, 'Seminar'),
    (3,	'Umfrage'),
    (4, 'Forum'),
    (5, 'Datenaustausch'),
    (6, 'Dokument'),
    (7, 'Link'),
    (8, 'Seminartitel'),
    (9, 'Video'),
    (15, 'Feedback'),
    (50, 'Extern'),
    (1000, 'Bildungsangebot'),
    (1001, 'Modul');

IF OBJECT_ID('tempdb..#RightMapping') IS NOT NULL
    DROP TABLE #RightMapping;

CREATE TABLE #RightMapping
(
    id int, 
    title varchar(10)
);

INSERT INTO
    #RightMapping
VALUES
    (0, 'Keine'),
    (1, 'Lesen'),
    (2, 'Schreiben');

IF OBJECT_ID('tempdb..#AvailabilityMapping') IS NOT NULL
    DROP TABLE #AvailabilityMapping;

CREATE TABLE #AvailabilityMapping
(
    isAvailable BIT,
    isRestricted BIT,
    title varchar(31)
);

INSERT INTO
    #AvailabilityMapping
VALUES
    (0, 0, ''),
    (0, 1, ''),
    (1, 0, 'Für alle verfügbar'),
    (1, 1, 'Einschränkung auf Nutzergruppen');

IF OBJECT_ID('tempdb..#LearningTypeMapping') IS NOT NULL
    DROP TABLE #LearningTypeMapping;

CREATE TABLE #LearningTypeMapping
(
    id int, 
    title nvarchar(100)
);

INSERT INTO
    #LearningTypeMapping
VALUES
    (1, 	'Präsenzveranstaltung'),
    (2, 	'Einzeltraining'),
    (3, 	'Blended Learning'),
    (4, 	'gesteuertes E-Learning'),
    (5, 	'selbstgesteuertes E-Learning'),
    (6, 	'Lernen am Arbeitsplatz');

IF OBJECT_ID('tempdb..#TestModeMapping') IS NOT NULL
    DROP TABLE #TestModeMapping;

CREATE TABLE #TestModeMapping
(
    id int, 
    title nvarchar(100)
);

INSERT INTO
    #TestModeMapping
VALUES
    (0, 'Übung'),
    (1, 'Prüfung'),
    (2, 'Umfrage'),
    (3, 'Feedback');

IF OBJECT_ID('tempdb..#TargetDeviceMapping') IS NOT NULL
    DROP TABLE #TargetDeviceMapping;

CREATE TABLE #TargetDeviceMapping
(
    id int, 
    title nvarchar(100)
);

INSERT INTO
    #TargetDeviceMapping
VALUES
    (0, 'Desktop'),
    (1, 'Tablet'),
    (2, 'Smartphone');


IF OBJECT_ID('tempdb..#LanguageMapping') IS NOT NULL
    DROP TABLE #LanguageMapping;

CREATE TABLE #LanguageMapping
(
    id int, 
    title nvarchar(100)
);

INSERT INTO
    #LanguageMapping
VALUES
    (1031, 'Deutsch'),
    (1033, 'Englisch');

IF OBJECT_ID('tempdb..#LearningContentMapping') IS NOT NULL
    DROP TABLE #LearningContentMapping;

CREATE TABLE #LearningContentMapping
(
    code nvarchar(50) PRIMARY KEY,
    learningContent nvarchar(100)
);

INSERT INTO
    #LearningContentMapping
VALUES
    ('Insurance1', 'Privat-Vorsorge-Lebens-/Rentenversicherung'),
    ('Insurance2', 'Privat-Vorsorge-Kranken-/Pflegeversicherung'),
    ('Insurance3', 'Privat-Sach-/Schadenversicherung'),
    ('Insurance4', 'Firmenkunden-Sach-/Schadenversicherung'),
    ('Insurance5General', 'Spartenübergreifend'),
    ('Insurance6Business', 'Firmenkunden-Vorsorge (bAV/Personenversicherung)'),
    ('Consulting', 'Beratungskompetenz')


IF OBJECT_ID('tempdb..#UserFullName') IS NOT NULL
    DROP TABLE #UserFullName;

CREATE TABLE #UserFullName
(
    user_id int PRIMARY KEY,
    fullName nvarchar(325)
);

INSERT INTO
    #UserFullName(user_id, fullName)
SELECT
    intUserCn, FullName
FROM
    tableUsers -- Note: here we are consciously choosing tableUsers over v_Users as we want to include system users
WHERE
    mandator_id = @current_mandator_id
    and deleted is null -- not deleted
    and intUserCn &gt; 0 -- not pre-deleted (as here fullName is null anyway)

-- This differs from #TGItemChain in that it covers all chain connections to the items in our list even
-- if there is no relation to the selected target group.  By extension this covers all modules and edu
-- offers in our list as well (going back from item) but _NOT_ going forward from edu offer or module.
-- e.g. can't be used to list all items belonging to any module in this list.
IF OBJECT_ID('tempdb..#UnfilteredItemChain') IS NOT NULL
    DROP TABLE #UnfilteredItemChain;

CREATE TABLE #UnfilteredItemChain
(
    item_id UNIQUEIDENTIFIER,
    module_id UNIQUEIDENTIFIER,
    moduleTitle NVARCHAR(255),
    eduOffer_id UNIQUEIDENTIFIER,
    eduOfferTitle NVARCHAR(255),
    targetGroup_id INT,
    targetGroupTitle VARCHAR(2048)
);

INSERT INTO
    #UnfilteredItemChain
    (
        item_id,
        module_id,
        moduleTitle,
        eduOffer_id,
        eduOfferTitle,
        targetGroup_id,
        targetGroupTitle
    )
SELECT
    itemId,
    mi.module_id,
    LTRIM(RTRIM(m_i.title)),
    eom.eduOffer_id,
    LTRIM(RTRIM(eo_i.title)),
    eot.targetGroup_id,
    LTRIM(RTRIM(tg.title))
FROM
    #DistinctItems i
    JOIN tblModuleItems mi
        ON  mi.item_id = i.itemId
    JOIN tblItems m_i
        ON  m_i.id = mi.module_id
        AND m_i.deleted IS NULL
    LEFT JOIN tblEduOffersModules eom
        ON  eom.module_id = mi.module_id
    LEFT JOIN tblItems eo_i
        ON  eo_i.id = eom.eduOffer_id
        AND eo_i.deleted IS NULL
    LEFT JOIN tblEduOffersTargetGroups eot
        ON  eot.eduOffer_id = eom.eduOffer_id
    LEFT JOIN tblTargetGroups tg
        ON  tg.id = eot.targetGroup_id
    
/* Shortcut to not setup all temp tables when running in SSMS
DECLARE @current_mandator_id uniqueidentifier;
SELECT
    @current_mandator_id = id
FROM
    tblMandators
WHERE
    name = 'ERGO_e-Campus';
End Shortcut */

DECLARE @LinkUrlRoot VARCHAR(200) = 'https://e-campus.ergo.com/e-campus/default.aspx?mandator_id=' + dbo.fn_UrlEncode(CAST(@current_mandator_id AS VARCHAR(36)))
DECLARE @InfoLinkUrlRoot VARCHAR(200) = @LinkUrlRoot + '&amp;infoMode=1&amp;linkTag='
DECLARE @DirektLinkUrlRoot VARCHAR(200) = @LinkUrlRoot + '&amp;infoMode=0&amp;linkTag='
-- Output
SELECT
    -- Edu Offer
    -- eo_i.id as 'Bildungsangebot ID',
    eo_i.Title as 'Bildungsangebot Titel',
    eo_i.TitleForLearners as 'Bildungsangebot Titel für Lerner',
    dbo.fn_StripHTML(eo_i.[description]) as 'Bildungsangebot Beschreibung',
    eo_i.trainerinfo as 'Bildungsangebot Trainerinfo',
    eo_i.tag as 'Bildungsangebot Kennzeichen',
    CASE eo_i.isInfoLinkGenerated
        WHEN 1 THEN @InfoLinkUrlRoot + dbo.fn_UrlEncode(eo_i.tag COLLATE DATABASE_DEFAULT)
        ELSE ''
    END as 'Bildungsangebot Link zur Info-Seite',
    IIF(eo.isMandatory = 1, 'Ja', 'Nein') as 'Bildungsangebot Verpflichtend',
    eo_grm.Title as 'Bildungsangebot Berechtigung Global',
    ISNULL
    (
        SUBSTRING
        (
            STUFF
            (
                (
                    SELECT
                        ', ' + RTRIM(LTRIM(ou.title)) + ' ' + CAST(rm.title AS VARCHAR)
                    FROM
                        tblOrganisationUnits ou
                        JOIN tblItemsOUPermissions eo_oup
                            ON  eo_oup.organisationUnit_id = ou.id
                        JOIN #RightMapping rm
                            ON  rm.id = eo_oup.permission
                    WHERE
                        eo_oup.item_id = eo.id
                    ORDER BY
                        ou.title
                    FOR XML PATH(''), TYPE
                ).value('.','NVARCHAR(MAX)'),
                1,
                2,
                ''
            ),
            0,
            32760
        ),
        ''
    ) as 'Bildungsangebot Berechtigung OE',
    (SELECT fullName FROM #UserFullname ufn WHERE ufn.user_id = eo_i.owner_id) as 'Bildungsangebot Besitzer',
    (SELECT MAX(mainVersionCreated) FROM tblVersionMap where id = eo_i.id) as 'Bildungsangebot Zuletzt geändert am',
    (SELECT fullName FROM #UserFullname ufn WHERE ufn.user_id = eo_i.modifiedBy_user_id) as 'Bildungsangebot Zuletzt geändert von',
    eo_i.created as 'Bildungsangebot Erstellt am',
    (SELECT fullName FROM #UserFullname ufn WHERE ufn.user_id = eo_i.createdBy_user_id) as 'Bildungsangebot Ersteller',
    IIF(eo_i.isAvailableForEduCatalog = 1, 'Ja', 'Nein') as 'Bildungsangebot für den Bildungskatalog verfügbar',
    eo_am.title as 'Bildungsangebot verfügbar für',
    ISNULL
    (
        SUBSTRING
        (
            STUFF
            (
                (
                    SELECT
                        ', ' + RTRIM(LTRIM(ou.title))
                    FROM
                        tblOrganisationUnits ou
                        JOIN [dbo].[tblItemAvailableForOrgUnitsEduCatalog] eo_ouec
                            ON  eo_ouec.orgUnit_id = ou.id
                    WHERE
                        eo_ouec.item_id = eo.id
                    ORDER BY
                        ou.title
                    FOR XML PATH(''), TYPE
                ).value('.','NVARCHAR(MAX)'),
                1,
                2,
                ''
            ),
            0,
            32760
        ),
        ''
    ) as 'Bildungsangebot Verfügbar für OE',
    ISNULL
    (
        SUBSTRING
        (
            STUFF
            (
                (
                    SELECT
                        ', ' + RTRIM(LTRIM(tg.title))
                    FROM
                        tblTargetGroups tg
                        JOIN [dbo].[tblItemAvailableForEduCatalog] eo_tgec
                            ON  eo_tgec.targetGroup_id = tg.id
                    WHERE
                        eo_tgec.item_id = eo.id
                    ORDER BY
                        tg.title
                    FOR XML PATH(''), TYPE
                ).value('.','NVARCHAR(MAX)'),
                1,
                2,
                ''
            ),
            0,
            32760
        ),
        ''
    ) as 'Bildungsangebot Verfügbar für ZG',
    eo_c.name as 'Bildungsangebot Ansprechpartner Name',
    IIF(eo_i.isPermissionRequired = 1, 'Ja', 'Nein') as 'Bildungsangebot Genehmigung erforderlich',
    ISNULL
    (
        SUBSTRING
        (
            STUFF
            (
                (
                    SELECT
                        ', ' + RTRIM(LTRIM(tg.title))
                    FROM
                        tblTargetGroups tg
                        JOIN [dbo].[tblEduOffersTargetGroups] eotg
                            ON  eotg.targetGroup_id = tg.id
                    WHERE
                        eotg.eduOffer_id = eo.id
                    ORDER BY
                        tg.title
                    FOR XML PATH(''), TYPE
                ).value('.','NVARCHAR(MAX)'),
                1,
                2,
                ''
            ),
            0,
            32760
        ),
        ''
    ) as 'Bildungsangebot zugeordnete ZG',
    ISNULL
    (
        STUFF
        (
            (
                SELECT
                    ', ' + RTRIM(LTRIM(m_i_i.title))
                FROM
                    tblItems m_i_i
                    JOIN [dbo].[tblEduOffersModules] eom
                        ON  eom.module_id = m_i_i.id
                WHERE
                    eom.eduOffer_id = eo.id
                ORDER BY
                    m_i_i.title
                FOR XML PATH(''), TYPE
            ).value('.','NVARCHAR(MAX)'),
            1,
            2,
            ''
        ),
        ''
    ) as 'Bildungsangebot zugeordnete Module',
    ISNULL
    (
        STUFF
        (
            (
                SELECT
                    ', ' + ta_mk_r.[Text]
                FROM
                    tblTopicAreas ta_mk
                    JOIN tblTopicAreasCurriculumEduOffers taceo
                        ON  taceo.topicArea_id = ta_mk.id
                    JOIN tblResources ta_mk_r
                        ON  ta_mk_r.id = ta_mk.localizedTitle_id
                        AND ta_mk_r.Language_ID = 1031
                WHERE
                    taceo.eduOffer_id = eo.id
                ORDER BY
                    ta_mk_r.[Text]
                FOR XML PATH(''), TYPE
            ).value('.','NVARCHAR(MAX)'),
            1,
            2,
            ''
        ),
        ''
    ) as 'Bildungsangebot zugeordnete Themenbereiche (Meine Kurse)',
    ISNULL
    (
        STUFF
        (
            (
                SELECT
                    ', ' + eo_ta_bk_r.[Text]
                FROM
                    [tblTopicAreasItems] eo_tai
                    JOIN tblTopicAreas eo_ta_bk
                        ON  eo_ta_bk.id = eo_tai.topicArea_id
                    JOIN tblResources eo_ta_bk_r
                        ON  eo_ta_bk_r.id = eo_ta_bk.localizedTitle_id
                        AND eo_ta_bk_r.Language_ID = 1031
                WHERE
                    eo_tai.item_id = eo.id
                ORDER BY
                    eo_ta_bk_r.[Text]
                FOR XML PATH(''), TYPE
            ).value('.','NVARCHAR(MAX)'),
            1,
            2,
            ''
        ),
        ''
    ) as 'Bildungsangebot zugeordnete Themenbereiche (Bildungskatalog)',

    -- Module
    --m_i.id as 'Modul ID',
    m_i.Title as 'Modul Titel',
    m_i.TitleForLearners as 'Modul Titel für Lerner',
    dbo.fn_StripHTML(m_i.[description]) as 'Modul Beschreibung',
    m_i.trainerinfo as 'Modul Trainerinfo',
    m_i.tag as 'Modul Kennzeichen',
    CASE m_i.isInfoLinkGenerated
        WHEN 1 THEN @InfoLinkUrlRoot + dbo.fn_UrlEncode(m_i.tag)
        ELSE ''
    END as 'Modul Link zur Info-Seite',
    IIF(m_i.isVisibleInEducationCard = 1, 'Ja', 'Nein') AS 'Modul Im Bildungspass anzeigen',
    CASE m.viewMode
        WHEN 2 THEN 'Lernpfad'
        WHEN 1 THEN 'Gruppierung'
        WHEN 0 THEN 'Standard'
    END as 'Modulansicht',
    m.[target] as 'Modul Lernziele',
    m.participants as 'Modul Teilnehmer',
    m.courseUnits as 'Modul Unterrichtseinheiten',
    m.trainers as 'Modul Referenten',
    IIF(m.isCurriculum = 1, 'Ja', 'Nein') as 'Modul Curriculum',
    m_grm.Title as 'Modul Berechtigung Global',
    ISNULL
    (
        SUBSTRING
        (
            STUFF
            (
                (
                    SELECT
                        ', ' + RTRIM(LTRIM(ou.title)) + ' ' + CAST(rm.title AS VARCHAR)
                    FROM
                        tblOrganisationUnits ou
                        JOIN tblItemsOUPermissions oup
                            ON  oup.organisationUnit_id = ou.id
                        JOIN #RightMapping rm
                            ON  rm.id = oup.permission
                    WHERE
                        oup.item_id = m.id
                    ORDER BY
                        ou.title
                    FOR XML PATH(''), TYPE
                ).value('.','NVARCHAR(MAX)'),
                1,
                2,
                ''
            ),
                    0,
            32760
        ),
        ''
    ) as 'Modul Berechtigung OE',
    (SELECT fullName FROM #UserFullname ufn WHERE ufn.user_id = m_i.owner_id) as 'Modul Besitzer',
    (SELECT MAX(mainVersionCreated) FROM tblVersionMap where id = m_i.id) as 'Modul zuletzt geändert am',
    (SELECT fullName FROM #UserFullname ufn WHERE ufn.user_id = m_i.modifiedBy_user_id) as 'Modul zuletzt geändert von',
    m_i.created as 'Modul erstellt am',
    (SELECT fullName FROM #UserFullname ufn WHERE ufn.user_id = m_i.createdBy_user_id) as 'Modul Ersteller',
    CASE m.timeRestrictionType
        WHEN 2 THEN 'relative Termine'
        WHEN 1 THEN 'feste Termine'
        WHEN 0 THEN 'unbegrenzt'
    END as 'Modul zeitliche Verfügbarkeit',
    CASE m.timeRestrictionType
        WHEN 2 THEN CAST(m.availableFromWeeks AS VARCHAR(2))
        WHEN 1 THEN CONVERT(VARCHAR(50), m.availableFrom, 121)
        ELSE ''
    END AS 'Modul verfügbar von',
    CASE m.timeRestrictionType
        WHEN 2 THEN CAST(m.availableToWeeks AS VARCHAR(2))
        WHEN 1 THEN CONVERT(VARCHAR(50), m.availableTo, 121)
        ELSE ''
    END AS 'Modul verfügbar bis',
    IIF(m.notificationEnabled = 1, 'Ja', 'Nein') as 'Modul Benachrichtigung zum Lernstand an den Lerner versenden',
    m.notificationStartWeeks as 'Modul Benachrichtigung Start',
    m.repeatNotificationInWeeks as 'Modul Benachrichtigung Versandhäufigkeit',
    m.notificationEndWeeks as 'Modul Benachrichtigung Ende',
    CASE m.scoringMode
        WHEN 2 THEN 'Summe der Bausteine'
        WHEN 1 THEN 'Individuelle Vergabe'
        WHEN 0 THEN 'Keine Bildungszeit für Modul'
    END AS 'Vergabe Bildungszeit auf Modulebene',
    dbo.fn_GetEducationTimeString(m_i.educationTime) AS 'Modul Erwerbbare Bildungszeit',
    IIF(m.addItemScoreToModuleScore = 1, 'Ja', 'Nein') AS 'Bildungszeiten für Bausteine zählen zusätzlich zu den Bildungszeiten für Module',
    m_ltm.title as 'Modul Lernart',
    m_lcm.learningContent as 'Modul Lerninhalt',
    CASE
        WHEN m_i.requalificationPeriodType = 2
            THEN 'festes Intervall ' + CAST(m_i.newCreditPointsSpanMonths AS VARCHAR(3)) + ' Monaten'
        WHEN m_i.requalificationPeriodType = 1
            THEN 'jährlich'
        ELSE 'keine'
    END AS 'Modul Zeitraum Re-Qualifizierung',
    ISNULL(m_cert.name, 'Kein Zertifikat zugeordnet') as 'Modul Zertifikat',
    ISNULL(CAST(m_i.overridespanmonths AS VARCHAR(5)), 'keine') as 'Modul Zeitraum Re-Zertifizierung',
    ISNULL(CAST(m_i.overrideInitialMonths AS VARCHAR(5)), 'keine') as 'Modul Erst-Bearbeitung Re-Zertifizierung',
    ISNULL(CAST(m_i.overrideAlertSpanMonths AS VARCHAR(5)), 'keine') as 'Modul Erste Erinnerung Re-Zertifizierung',
    ISNULL(CAST(m_i.override2ndAlertSpanWeeks AS VARCHAR(5)), 'keine') as 'Modul Zweite Erinnerung Re-Zertifizierung',
    IIF(m_i.isRateable = 1, 'Ja', 'Nein') AS 'Modul bewertbar',
    IIF(m_i.showRatingFromOthers = 1, 'Ja', 'Nein') AS 'Modul Bewertung von anderen Usern einsehbar',
    IIF(m_i.ratingReminderWeeks &gt; 0, 'Ja', 'Nein') as 'Modul Erinnerung Bewertung',
    ISNULL(CAST(m_i.ratingReminderWeeks AS VARCHAR(5)), 'keine') as 'Modul Zeitraum Erinnerung',
    IIF(m_i.isAvailableForEduCatalog &gt; 0, 'Ja', 'Nein') as 'Modul Für den Bildungskatalog verfügbar?',
    m_am.title as 'Modul verfügbar für',
    ISNULL
    (
        SUBSTRING
        (
            STUFF
            (
                (
                    SELECT
                        ', ' + RTRIM(LTRIM(ou.title))
                    FROM
                        tblOrganisationUnits ou
                        JOIN [dbo].[tblItemAvailableForOrgUnitsEduCatalog] m_ouec
                            ON  m_ouec.orgUnit_id = ou.id
                    WHERE
                        m_ouec.item_id = m.id
                    ORDER BY
                        ou.title
                    FOR XML PATH(''), TYPE
                ).value('.','NVARCHAR(MAX)'),
                1,
                2,
                ''
            ),
            0,
            32760
        ),
        ''
    ) as 'Modul Verfügbar für OE',
    ISNULL
    (
        SUBSTRING
        (
            STUFF
            (
                (
                    SELECT
                        ', ' + RTRIM(LTRIM(tg.title))
                    FROM
                        tblTargetGroups tg
                        JOIN [dbo].[tblItemAvailableForEduCatalog] m_tgec
                            ON  m_tgec.targetGroup_id = tg.id
                    WHERE
                        m_tgec.item_id = m.id
                    ORDER BY
                        tg.title
                    FOR XML PATH(''), TYPE
                ).value('.','NVARCHAR(MAX)'),
                1,
                2,
                ''
            ),
            0,
            32760
        ),
        ''
    ) as 'Modul Verfügbar für ZG',
    m_c.name as 'Modul Ansprechpartner Name',
    IIF(m_i.isPermissionRequired = 1, 'Ja', 'Nein') as 'Modul Genehmigung erforderlich',
    ISNULL
    (
        SUBSTRING
        (
            STUFF
            (
                (
                    SELECT
                        ', ' + RTRIM(LTRIM(mi_i.title))
                    FROM
                        tblItems mi_i
                        JOIN [dbo].[tblModuleItems] mi
                            ON  mi.item_id = mi_i.id
                    WHERE
                        mi.module_id = m.id
                    ORDER BY
                        mi_i.title
                    FOR XML PATH(''), TYPE
                ).value('.','NVARCHAR(MAX)'),
                1,
                2,
                ''
            ),
            0,
            32760
        ),
        ''
    ) as 'Modul Zugewiesene Bausteine',
    ISNULL
    (
        SUBSTRING
        (
            STUFF
            (
                (
                    SELECT DISTINCT
                        ', ' + RTRIM(LTRIM(tg.title))
                    FROM
                        tblTargetGroups tg
                        JOIN tblEduOffersTargetGroups eotg
                            ON  eotg.targetGroup_id = tg.id
                        JOIN tblEduOffersModules eom
                            ON  eom.eduOffer_id = eotg.eduOffer_id
                    WHERE
                        eom.module_id = m.id
                    ORDER BY
                        ', ' + RTRIM(LTRIM(tg.title))
                    FOR XML PATH(''), TYPE
                ).value('.','NVARCHAR(MAX)'),
                1,
                2,
                ''
            ),
            0,
            32760
        ),
        ''
    ) as 'Modul zugeordnete ZG',
    ISNULL
    (
        STUFF
        (
            (
                SELECT DISTINCT
                    ', ' + meo_i.title
                FROM
                    tblEduOffersModules eom
                    JOIN tblItems meo_i
                        ON  meo_i.id = eom.eduOffer_id
                WHERE
                    eom.module_id = m.id
                ORDER BY
                    ', ' + meo_i.title
                FOR XML PATH(''), TYPE
            ).value('.','NVARCHAR(MAX)'),
            1,
            2,
            ''
        ),
        ''
    ) as 'Modul Zugewiesene Bildungsangebote',
    ISNULL
    (
        STUFF
        (
            (
                SELECT
                    ', ' + RTRIM(LTRIM(o.title))
                FROM
                    tblObjects o
                    JOIN tblQualificationsItems qi
                        ON  qi.qualification_id = o.id
                WHERE
                    o.deleted IS NULL
                    AND qi.item_id = m.id
                ORDER BY
                    o.title
                FOR XML PATH(''), TYPE
            ).value('.','NVARCHAR(MAX)'),
            1,
            2,
            ''
        ),
        ''
    ) as 'Modul zugeordnete Qualifizierungen',
    ISNULL
    (
        STUFF
        (
            (
                SELECT
                    ', ' + ta_r.[Text]
                FROM
                    [tblTopicAreasItems] tai
                    JOIN tblTopicAreas ta
                        ON  ta.id = tai.topicArea_id
                    JOIN tblResources ta_r
                        ON  ta_r.id = ta.localizedTitle_id
                        AND ta_r.Language_ID = 1031
                WHERE
                    tai.item_id = m.id
                ORDER BY
                    ta_r.[Text]
                FOR XML PATH(''), TYPE
            ).value('.','NVARCHAR(MAX)'),
            1,
            2,
            ''
        ),
        ''
    ) as 'Modul zugeordnete Themenbereiche (Bildungskatalog)',

    -- Item
    --i.id AS 'Baustein ID',
    i.title AS 'Baustein Titel', 
    i.TitleForLearners as 'Baustein Titel für Lerner',
    im.title AS 'Bausteintyp', 
    tt_tm.title AS 'Testart',
    dbo.fn_StripHTML(i.[description]) AS 'Baustein Beschreibung',
    i.trainerinfo as 'Baustein Trainerinfo',
    i.tag as 'Baustein Kennzeichen',
    CASE i.isLinkGenerated
        WHEN 1 THEN @DirektLinkUrlRoot + dbo.fn_UrlEncode(i.tag)
        ELSE ''
    END as 'Baustein Direkt Link',
    CASE i.isInfoLinkGenerated
        WHEN 1 THEN @InfoLinkUrlRoot + dbo.fn_UrlEncode(i.tag)
        ELSE ''
    END as 'Baustein Link zur Info-Seite',
    IIF(i.isVisibleInEducationCard = 1, 'Ja', 'Nein') AS 'Baustein Im Bildungspass anzeigen',
    IIF(i.deleteAfterYears IS NOT NULL, IIF(i.deleteAfterYears = 1, CAST(i.deleteAfterYears as NVARCHAR(3)) + ' Jahr', CAST(i.deleteAfterYears as NVARCHAR(3)) + ' Jahre'), '')  AS 'Baustein Bearbeitungsstand löschen nach',
    CASE i.itemType_id
        WHEN 1 THEN theme.importPath
        WHEN 6 THEN doc.folderName
        ELSE ''
    END AS 'Baustein Import Ordner',
    theme.learningObjective as 'WBT Lernziele',
    -- This is actually just a label in the UI!  The standard label is "Author" but as ERGO has different role names this is what Author looks
    -- like for them.
    '' AS 'WBT Verantwortlicher für eine BM',
    theme.learningDuration as 'WBT Lerndauer',
    theme_td.title as 'WBT Zielgerät',
    theme.manifest_id as 'WBT Manifest ID',
    theme.themeVersion as 'WBT-Version',
    CASE tt.resultCalculationMode
        WHEN 0 THEN 'Gesamtergebnis'
        WHEN 1 THEN 'Sachgebietsergebnis'
        ELSE ''
    END AS 'Test Berechnung der Ergebnisse',
    tt.summaryPassingThreshold AS 'Test bestanden bei',
    tt.mainSubjectGroupThreshold AS 'Test Sachgebietsergebnis in einem mind.',
    tt.otherSubjectGroupsThreshold AS 'Test Sachgebietsergebnis in den anderen mind.',
    tt.useGrading AS 'Test Benotung',
    tt_lm.title AS 'Test Sprache für Navigation',
    i_grm.Title as 'Baustein Berechtigung Global',
    ISNULL
    (
        SUBSTRING
        (
            STUFF
            (
                (
                    SELECT
                        ', ' + RTRIM(LTRIM(ou.title)) + ' ' + CAST(rm.title AS VARCHAR)
                    FROM
                        tblOrganisationUnits ou
                        JOIN tblItemsOUPermissions oup
                            ON  oup.organisationUnit_id = ou.id
                        JOIN #RightMapping rm
                            ON  rm.id = oup.permission
                    WHERE
                        oup.item_id = i.id
                    ORDER BY
                        ou.title
                    FOR XML PATH(''), TYPE
                ).value('.','NVARCHAR(MAX)'),
                1,
                2,
                ''
            ),
            0,
            32760
        ),''
    ) as 'Baustein Berechtigung OE',
    (SELECT fullName FROM #UserFullname ufn WHERE ufn.user_id = i.owner_id) as 'Baustein Besitzer',
    (SELECT MAX(mainVersionCreated) FROM tblVersionMap where id = i.id) as 'Baustein zuletzt geändert am',
    (SELECT fullName FROM #UserFullname ufn WHERE ufn.user_id = i.modifiedBy_user_id) as 'Baustein zuletzt geändert von',
    i.created as 'Baustein erstellt am',
    (SELECT fullName FROM #UserFullname ufn WHERE ufn.user_id = i.createdBy_user_id) as 'Baustein Ersteller',
    dbo.fn_GetEducationTimeString(i.educationTime) AS 'Baustein Erwerbbare Bildungszeit',
    i_ltm.title as 'Baustein Lernart',
    i_lcm.learningContent as 'Baustein Lerninhalt',
    CASE
        WHEN i.requalificationPeriodType = 2
            THEN 'festes Intervall ' + CAST(i.newCreditPointsSpanMonths AS VARCHAR(3)) + ' Monaten'
        WHEN i.requalificationPeriodType = 1
            THEN 'jährlich'
        ELSE 'keine'
    END AS 'Baustein Zeitraum Re-Qualifizierung',
    ISNULL(i_cert.name, 'Kein Zertifikat zugeordnet') as 'Baustein Zertifikat',
    IIF(theme.calcStatusIncludeCompleted = 1, 'Ja', 'Nein') as 'WBT Lernprogramm muss vollständig bearbeitet sein',
    IIF(theme.calcStatusIncludeExams = 1, 'Ja', 'Nein') as 'WBT Test(s) muss bestanden sein',
    IIF(theme.calcStatusIncludeExercises = 1, 'Ja', 'Nein') as 'WBT alle Übungen müssen richtig beantwortet sein',
    theme.keepScormDataDays AS 'WBT Anzahl Tage',
    IIF(theme.keepScormDataDays &gt; 0, 'Nein', 'Ja')'WBT Lernstandsdaten nicht löschen',
    ISNULL(CAST(i.overridespanmonths AS VARCHAR(5)), 'keine') as 'Baustein Zeitraum Re-Zertifizierung',
    ISNULL(CAST(i.overrideInitialMonths AS VARCHAR(5)), 'keine') as 'Baustein Erst-Bearbeitung Re-Zertifizierung',
    ISNULL(CAST(i.overrideAlertSpanMonths AS VARCHAR(5)), 'keine') as 'Baustein Erste Erinnerung Re-Zertifizierung',
    ISNULL(CAST(i.override2ndAlertSpanWeeks AS VARCHAR(5)), 'keine') as 'Baustein Zweite Erinnerung Re-Zertifizierung',
    theme.StatusThreshold as 'WBT Lernprogramm-Status Im Lernprozess ab (%)',
    IIF(i.isRateable = 1, 'Ja', 'Nein') AS 'Baustein bewertbar',
    IIF(i.showRatingFromOthers = 1, 'Ja', 'Nein') AS 'Baustein Bewertung von anderen Usern einsehbar',
    IIF(i.ratingReminderWeeks &gt; 0, 'Ja', 'Nein') as 'Baustein Erinnerung Bewertung',
    ISNULL(CAST(i.ratingReminderWeeks AS VARCHAR(5)), 'keine') as 'Baustein Zeitraum Erinnerung',
    IIF(i.isAvailableForEduCatalog &gt; 0, 'Ja', 'Nein') as 'Baustein Für den Bildungskatalog verfügbar?',
    i_am.title as 'Baustein verfügbar für',
    ISNULL
    (
        SUBSTRING
        (
            STUFF
            (
                (
                    SELECT
                        ', ' + RTRIM(LTRIM(ou.title))
                    FROM
                        tblOrganisationUnits ou
                        JOIN [dbo].[tblItemAvailableForOrgUnitsEduCatalog] ouec
                            ON  ouec.orgUnit_id = ou.id
                    WHERE
                        ouec.item_id = i.id
                    ORDER BY
                        ou.title
                    FOR XML PATH(''), TYPE
                ).value('.','NVARCHAR(MAX)'),
                1,
                2,
                ''
            ),
            0,
            32760
        ),''
    ) as 'Baustein Verfügbar für OE',
    ISNULL
    (
        SUBSTRING
        (
            STUFF
            (
                (
                    SELECT
                        ', ' + RTRIM(LTRIM(tg.title))
                    FROM
                        tblTargetGroups tg
                        JOIN [dbo].[tblItemAvailableForEduCatalog] tgec
                            ON  tgec.targetGroup_id = tg.id
                    WHERE
                        tgec.item_id = i.id
                    ORDER BY
                        tg.title
                    FOR XML PATH(''), TYPE
                ).value('.','NVARCHAR(MAX)'),
                1,
                2,
                ''
            ),
            0,
            32760
        ),''
    ) as 'Baustein Verfügbar für ZG',
    i_c.name as 'Baustein Ansprechpartner Name',
    IIF(i.isPermissionRequired = 1, 'Ja', 'Nein') as 'Baustein Genehmigung erforderlich',
    ISNULL
    (
        SUBSTRING
        (
            STUFF
            (
                (
                    SELECT DISTINCT
                        ', ' + uic.targetGroupTitle
                    FROM
                        #UnfilteredItemChain uic
                    WHERE
                        uic.item_id = i.id
                        AND uic.targetGroupTitle IS NOT NULL
                    ORDER BY
                        ', ' + targetGroupTitle
                    FOR XML PATH(''), TYPE
                ).value('.','NVARCHAR(MAX)'),
                1,
                2,
                ''
            ),
            0,
            32760
        ),
        ''
    ) as 'Baustein zugeordnete ZG',
    ISNULL
    (
        STUFF
        (
            (
                SELECT DISTINCT
                    ', ' + uic.eduOfferTitle
                FROM
                    #UnfilteredItemChain uic
                WHERE
                    uic.item_id = i.id
                    AND uic.eduOfferTitle IS NOT NULL
                ORDER BY
                    ', ' + eduOfferTitle
                FOR XML PATH(''), TYPE
            ).value('.','NVARCHAR(MAX)'),
            1,
            2,
            ''
        ),
        ''
    ) as 'Baustein Zugewiesene Bildungsangebote',
    ISNULL
    (
        STUFF
        (
            (
                SELECT DISTINCT
                    ', ' + uic.moduleTitle
                FROM
                    #UnfilteredItemChain uic
                WHERE
                    uic.item_id = i.id
                    AND uic.moduleTitle IS NOT NULL
                ORDER BY
                    ', ' + moduleTitle
                FOR XML PATH(''), TYPE
            ).value('.','NVARCHAR(MAX)'),
            1,
            2,
            ''
        ),
        ''
    ) as 'Baustein Zugewiesene Module',
    ISNULL
    (
        STUFF
        (
            (
                SELECT
                    ', ' + RTRIM(LTRIM(o.title))
                FROM
                    tblObjects o
                    JOIN tblQualificationsItems qi
                        ON  qi.qualification_id = o.id
                WHERE
                    o.deleted IS NULL
                    AND qi.item_id = i.id
                ORDER BY
                    o.title
                FOR XML PATH(''), TYPE
            ).value('.','NVARCHAR(MAX)'),
            1,
            2,
            ''
        ),
        ''
    ) as 'Baustein zugeordnete Qualifizierungen',
    ISNULL
    (
        STUFF
        (
            (
                SELECT
                    ', ' + ta_r.[Text]
                FROM
                    [tblTopicAreasItems] tai
                    JOIN tblTopicAreas ta
                        ON  ta.id = tai.topicArea_id
                    JOIN tblResources ta_r
                        ON  ta_r.id = ta.localizedTitle_id
                        AND ta_r.Language_ID = 1031
                WHERE
                    tai.item_id = i.id
                ORDER BY
                    ta_r.[Text]
                FOR XML PATH(''), TYPE
            ).value('.','NVARCHAR(MAX)'),
            1,
            2,
            ''
        ),
        ''
    ) as 'Baustein zugeordnete Themenbereiche (Bildungskatalog)',
    
    CASE i.itemType_id
        WHEN 1 THEN (SELECT fullName FROM #UserFullname ufn WHERE ufn.user_id = theme.importedBy_user_id)
        WHEN 6 THEN (SELECT fullName FROM #UserFullname ufn WHERE ufn.user_id = doc.importedBy_user_id)
        ELSE ''
    END AS 'Wer hat es zuletzt importiert',
    CASE i.itemType_id
        WHEN 1 THEN theme.importedDate
        WHEN 6 THEN doc.importedDate
        ELSE ''
    END AS 'Wann zuletzt importiert',
    wta.totalUsers AS 'Anzahl User in Zielgruppe', 
    wta.usersExecutedItem AS 'Anzahl der tatsächlichen Nutzer', 
    CASE
        WHEN wta.itemType_id IN(0, 1)
            THEN wta.avgLearningDurationItem / 60
        ELSE 0
    END AS 'Durchschnittliche Gesamtbearbeitungszeit pro Benutzer (min)', 
    CASE
        WHEN wta.itemType_id IN(0, 1)
            THEN wta.totalLearningDurationItem / 60
        ELSE 0
    END AS 'Gesamtbearbeitungszeit des Bausteins (min)', 
    wta.totalExecutionsItem AS 'Gesamtzahl Aufrufe', 
    ISNULL(wta.greenStatuses, 0.0) AS 'Bearbeitungsstatus (grün) tatsächliche Nutzer', 
    ISNULL(wta.yellowStatuses, 0.0) AS 'Bearbeitungsstatus (gelb) tatsächliche Nutzer', 
    ISNULL(wta.redStatuses, 0.0) AS 'Bearbeitungsstatus (rot) tatsächliche Nutzer',

    tt.timeLimit as 'Test Maximale Zeit (in Minuten)',
    tt.maximumExecutions as 'Test Maximale Zahl der Bearbeitungen',
    IIF(tt.checkLRbeforeExecution = 1, 'Ja', 'Nein') as 'Test Abarbeitung der Lernwegempfehlungen vor neuem Testaufruf',
    IIF(tt.resetScormData = 1, 'Ja', 'Nein') as 'Test Lernstand zurücksetzen nach Testsperrung',
    IIF(tt.considerLearningTargets = 1, 'Ja', 'Nein') as 'Test Lernzielgewichtung',
    IIF(tt.considerExcludingQuestions = 1, 'Ja', 'Nein') as 'Test Ausschlussfragen',
    IIF(tt.frozen = 1, 'Ja', 'Nein') as 'Test eingefroren',
    IIF(tt.generateLearnwayRecommendations = 1, 'Ja', 'Nein') as 'Test Lernwegsempfehlungen',
    IIF(tt.saveStatisticalInformations = 1, 'Ja', 'Nein') as 'Test Speichere Bearbeitungsdetails',
    IIF(tt.printerOnly = 1, 'Ja', 'Nein') as 'Test nur Testausdruck',
    IIF(tt.isTemplate = 1, 'Ja', 'Nein') as 'Test Vorlage',
    CASE tt.mixAnswerPartOrder
        WHEN 0 THEN 'Test Reihenfolge der Fragen und der Antwortmöglichkeiten variieren'
        WHEN 1 THEN 'Test Fragenreihenfolge manuell festlegen'
        ELSE ''
    END as 'Test Fragenreihenfolge',
    IIF(tt.showResults = 1, 'Ja', 'Nein') as 'Testergebnis nach Ende des Tests dem Benutzer zeigen',
    IIF(tt.showRevision = 1, 'Ja', 'Nein') as 'Test Korrekturansicht erlauben',
    IIF(tt.enableResultPrinting = 1, 'Ja', 'Nein') as 'Test Ausdruck des Testergebnisses',
    CASE tt.printResultDetails
        WHEN 0 THEN 'keine'
        WHEN 1 THEN 'Bildungscontrolling und Lernersicht'
        WHEN 2 THEN 'nur Bildungscontrolling'
        ELSE ''
    END AS 'Test Detaillierte Ergebnisse ausdrucken',
    IIF(tt.showWrongQuestions = 1, 'Ja', 'Nein') as 'Test falsche Antworten anzeigen',
    tt.columnsPerPrintPage as 'Test Anzahl der Spalten pro Seite im Ausdruck',
    tt_pl_r.Text as 'Test Fußzeile links',
    tt_pr_r.Text as 'Test Fußzeile rechts',
    IIF(tt.certificatePageNumbers = 1, 'Ja', 'Nein') as 'Test Seitennummerierung',
    IIF(tt.useStandardStartPage = 1, 'Ja', 'Nein') as 'Test Standard-Startseite',
    IIF(tt.useStandardResultPage = 1, 'Ja', 'Nein') as 'Test Standard-Ergebnisseite',
    CASE theme.player_id
        WHEN 'defaultPlayer' THEN 'Standard Player v4.0'
        WHEN 'asycnPlayer' THEN 'WBT Player v3.0 (async)'
        WHEN 'deprecatedPlayer' THEN 'WBT Player v2.0 (bis 12.2020)'
        ELSE ''
    END AS 'WBT Kursviewer',
    theme.themeWidth as 'WBT Bildschirm Breite beim Start',
    theme.themeHeight as 'WBT Bildschirm Höhe beim Start',
    IIF(theme.themeViewerOptions &amp; 64 = 64, 'Ja', 'Nein') as 'WBT Wiederholungsliste',
    IIF(theme.themeViewerOptions &amp; 8 = 8, 'Ja', 'Nein') as 'WBT Schaltfläche "Zurück"',
    IIF(theme.themeViewerOptions &amp; 1 = 1, 'Ja', 'Nein') as 'WBT Schaltfläche "Baum Anzeigen/Verbergen"',
    IIF(theme.themeViewerOptions &amp; 16 = 16, 'Ja', 'Nein') as 'WBT Schaltfläche "Vorwärts"',
    IIF(theme.themeViewerOptions &amp; 2 = 2, 'Ja', 'Nein') as 'WBT Schaltfläche "Werkzeuge"',
    IIF(theme.themeViewerOptions &amp; 1024 = 1024, 'Ja', 'Nein') as 'WBT Schaltfläche "Vorhergehender Schritt"',
    IIF(theme.themeViewerOptions &amp; 4 = 4, 'Ja', 'Nein') as 'WBT Schaltfläche "Lesezeichen"',
    IIF(theme.themeViewerOptions &amp; 32 = 32, 'Ja', 'Nein') as 'WBT Schaltfläche "Nächster Schritt"',
    IIF(theme.themeViewerOptions &amp; 256 = 256, 'Ja', 'Nein') as 'WBT Schaltfläche "Minimieren/Maximieren"',
    IIF(theme.themeViewerOptions &amp; 512 = 512, 'Ja', 'Nein') as 'WBT Schaltfläche "Schließen"',
    IIF(theme.themeViewerOptions &amp; 4096 = 4096, 'Ja', 'Nein') as 'WBT Baum zu Beginn offen',
    IIF(theme.themeViewerOptions &amp; 16384 = 16384, 'Ja', 'Nein') as 'WBT Schaltfläche "Erneut Laden"',
    IIF(theme.themeViewerOptions &amp; 2048 = 2048, 'Ja', 'Nein') as 'WBT Schaltfläche "Lautsprecher ein/aus"',
    IIF(theme.themeViewerOptions &amp; 8192 = 8192, 'Ja', 'Nein') as 'WBT Schaltfläche "Sprechertexte ein/aus',
    IIF(theme.themeViewerOptions &amp; 32768 = 32768, 'Ja', 'Nein') as 'WBT Automatische Lesezeichen',
    IIF(theme.themeViewerOptions &amp; 65536 = 65536, 'Ja', 'Nein') as 'WBT Lernwegsempfehlungen aus SCORM-Daten',
    IIF(theme.themeViewerOptions &amp; 128 = 128, 'Ja', 'Nein') as 'WBT Schaltfläche "Pause"',
    IIF(theme.themeViewerOptions &amp; 131072 = 131072, 'Ja', 'Nein') as 'WBT Schaltfläche "Hilfe"',
    IIF(theme.themeViewerOptions &amp; 524288 = 524288, 'Ja', 'Nein') as 'WBT Player unterdrückt API-Fehler'
FROM
    #TGItemChain ic

    -- Edu Offer related tables
    LEFT JOIN tblItems eo_i
        ON  eo_i.id = ic.eduOfferId
    LEFT JOIN tblEduOffers eo
        ON  eo.id = ic.eduOfferId
    LEFT JOIN #RightMapping eo_grm
        ON  eo_grm.id = eo_i.right_global
    LEFT JOIN #AvailabilityMapping eo_am
        ON  eo_am.isAvailable = eo_i.isAvailableForEduCatalog
        AND eo_am.isRestricted = eo_i.isRestrictedByTargetGroup
    LEFT JOIN tblContacts eo_c
        ON  eo_i.contact_id = eo_c.id
    
    -- Module related tables
    LEFT JOIN tblItems m_i
        ON  m_i.id = ic.moduleId
    LEFT JOIN tblModules m
        ON  m.id = ic.moduleId
    LEFT JOIN #RightMapping m_grm
        ON  m_grm.id = m_i.right_global
    LEFT JOIN #LearningTypeMapping m_ltm
        ON  m_ltm.id = m_i.learningType_id
    LEFT JOIN tblCertificates as m_cert
        ON  m_cert.id = m_i.certificate_id
    LEFT JOIN #AvailabilityMapping m_am
        ON  m_am.isAvailable = m_i.isAvailableForEduCatalog
        AND m_am.isRestricted = m_i.isRestrictedByTargetGroup
    LEFT JOIN tblContacts m_c
        ON  m_c.id = m_i.contact_id
    LEFT JOIN #LearningContentMapping m_lcm
        ON  m_lcm.code COLLATE DATABASE_DEFAULT = m_i.learningContent COLLATE DATABASE_DEFAULT

    -- Item related tables
    JOIN tblItems i
        ON  i.id = ic.itemId
    JOIN #ItemMapping AS im
        ON  im.id = ic.itemTypeId
    JOIN #RightMapping i_grm
        ON  i_grm.id = i.right_global
    LEFT JOIN #LearningTypeMapping i_ltm
        ON  i_ltm.id = i.learningType_id
    LEFT JOIN tblCertificates as i_cert
        ON  i_cert.id = i.certificate_id
    JOIN #AvailabilityMapping i_am
        ON  i_am.isAvailable = i.isAvailableForEduCatalog
        AND i_am.isRestricted = i.isRestrictedByTargetGroup
    LEFT JOIN tblContacts i_c
        ON  i_c.id = i.contact_id
    LEFT JOIN #LearningContentMapping i_lcm
        ON  i_lcm.code COLLATE DATABASE_DEFAULT = i.learningContent COLLATE DATABASE_DEFAULT

    LEFT JOIN tblTasTests tt
        ON  tt.id = i.id
    LEFT JOIN #TestModeMapping tt_tm
        ON  tt_tm.id = tt.mode
    LEFT JOIN tblDocuments doc
        ON  doc.id = i.id
    LEFT JOIN tblThemes theme
        ON  theme.id = i.id
    LEFT JOIN #TargetDeviceMapping theme_td
        ON  theme_td.id = theme.targetDevice
    LEFT JOIN #LanguageMapping tt_lm
        ON  tt_lm.id = tt.navigationLanguageId
    LEFT JOIN tblResources tt_pl_r
        ON  tt_pl_r.id = tt.certificateFooterLeft_resource_id
        AND tt_pl_r.Language_ID = 1031
    LEFT JOIN tblResources tt_pr_r
        ON  tt_pr_r.id = tt.certificateFooterRight_resource_id
        AND tt_pr_r.Language_ID = 1031

    LEFT JOIN #WbtTestAggregates wta
        ON  wta.item_id = ic.itemId
ORDER BY
    eo_i.title, m_i.title, i.title

-- ---------------------------------------------------------------
-- Now the result set for the unassigned items
-- ---------------------------------------------------------------
IF OBJECT_ID('tempdb..#Unassigned') IS NOT NULL
    DROP TABLE #Unassigned;

CREATE TABLE #Unassigned
(
    itemId UNIQUEIDENTIFIER NULL,
    itemTypeId INT NULL,
    moduleId UNIQUEIDENTIFIER NULL,
    eduOfferId UNIQUEIDENTIFIER NULL
)

-- Add items where there is no chain (and not assigned?)
INSERT INTO
    #Unassigned
SELECT DISTINCT
    i_i.item_id,
    i_i.itemType_id,
    mi.module_id,
    NULL
FROM
    v_Items i_i
    LEFT JOIN tblModuleItems mi
        ON mi.item_id = i_i.item_id
WHERE
    i_i.mandator_id = @current_mandator_id
    AND i_i.itemType_id &lt; 1000
    -- No full chain
    AND NOT EXISTS
    (
        SELECT
            *
        FROM
            tblEduOffersModules eom
            JOIN v_items eo_i
                ON  eo_i.item_id = eom.eduOffer_id
            JOIN tblModuleItems mi
                ON  mi.module_id = eom.module_id
            JOIN v_items m_i
                ON  m_i.item_id = mi.module_id
        WHERE
            mi.item_id = i_i.item_id
    )

-- Add modules where there is no Edu Offer or item relationship.
INSERT INTO
    #Unassigned
SELECT DISTINCT
    NULL,
    NULL,
    m.id,
    eom.eduOffer_id
FROM
    tblModules m
    -- Filter out deleted modules
    JOIN v_Items m_i
        ON  m_i.item_id = m.id
    LEFT JOIN tblEduOffersModules eom
        ON  eom.module_id = m.id
WHERE
    m.mandator_id = @current_mandator_id
    AND
    (
         -- No Edu offer assignment
        eom.eduOffer_id IS NULL
        -- No items
        OR NOT EXISTS
        (
            SELECT
                *
            FROM
                tblModuleItems mi
            WHERE
                mi.module_id = m.id
        )
    )

-- Add Edu Offers where there is no full chain
INSERT INTO
    #Unassigned
SELECT DISTINCT
    NULL,
    NULL,
    NULL,
    eo.id
FROM
    tblEduOffers eo
    -- Filter out deleted modules
    JOIN v_Items eo_i
        ON  eo_i.item_id = eo.id
WHERE
    eo.mandator_id = @current_mandator_id
     -- No full chain
    AND NOT EXISTS
    (
        SELECT
            *
        FROM
            tblEduOffersModules eom
            JOIN tblModuleItems mi
                ON  mi.module_id = eom.module_id
            JOIN v_items m_i
                ON  m_i.item_id = eom.module_id
            JOIN v_items i_i
                ON  i_i.item_id = mi.item_id
        WHERE
            eom.eduOffer_id = eo.id
    )

TRUNCATE TABLE #DistinctItems;

INSERT INTO
    #DistinctItems(itemId, itemTypeId)
SELECT DISTINCT
    itemId,
    itemTypeId
FROM
    #Unassigned
WHERE
    itemId IS NOT NULL

-- Aggregate user information for WBTs and Tests
TRUNCATE TABLE #WbtTestAggregates;

;WITH PotentialItems
(
    item_id,
    itemType_id
)
AS
(
    SELECT
        itemId AS item_id, 
        itemTypeId AS itemType_id
    FROM
        #DistinctItems
    WHERE
        itemTypeId IN(0, 1)
)
INSERT INTO
    #WbtTestAggregates
SELECT
    item_id, 
    itemType_id, 
    (
        SELECT
            COUNT(*)
        FROM
            #users
    ),
    0,
    0,
    0,
    0,
    0,
    0,
    0
FROM
    PotentialItems;

-- getting the green statuses for those items and users
-- getting the yellow statuses for those items and users
-- getting the red statuses for those items and users
UPDATE
    #WbtTestAggregates
SET
    usersExecutedItem = calc.usersCount,
    greenStatuses = calc.greenStatus, 
    yellowStatuses = calc.yellowStatus, 
    redStatuses = calc.redStatus
FROM
    #WbtTestAggregates
    JOIN
    (
        -- for each user of the targetgroups we have to detect the items MAX status for calculation
        SELECT
            item_id,
            COUNT(*) usersCount,
            SUM
            (
                CASE
                    WHEN itemStatus = 4 THEN 1
                    ELSE 0
                END
            ) AS greenStatus, 
            --needed because the MAX logic wouldn't work else
            SUM
            (
                CASE
                    WHEN itemStatus = 1 THEN 1
                    ELSE 0
                END
            ) AS yellowStatus, 
            SUM
            (
                CASE
                    WHEN itemStatus = 3 THEN 1
                    ELSE 0
                END
            ) AS redStatus
        FROM
        (
            -- we have to calculate the max status for the user
            SELECT
                MAX
                (
                    CASE
                        WHEN status = 2 THEN 4
                        ELSE status
                    END
                ) AS itemStatus,
                suih.item_id
            FROM
                tblStatusUserItemHistory AS suih
                JOIN #Users AS users
                    ON users.user_id = suih.user_id
                JOIN #WbtTestAggregates AS items
                    ON items.item_id = suih.item_id
            --WHERE
            --    suih.startDate BETWEEN @dateRange_start AND @dateRange_end
            GROUP BY
                suih.user_id,
                suih.item_id
        ) AS innerQuery
        GROUP BY
            item_id
    ) AS calc
        ON calc.item_id = #WbtTestAggregates.item_id;

UPDATE
    #WbtTestAggregates
SET
    -- getting total calls of the WBTs
    totalExecutionsItem = ISNULL(wbtAggregates.totalExecutionsItem, 0),
    -- getting total learning duration for the WBTs
    totalLearningDurationItem = ISNULL(wbtAggregates.totalLearningDurationItem, 0),
    -- getting avg learning duration for the WBT and user
    avgLearningDurationItem = ISNULL(wbtAggregates.avgLearningDurationItem, 0)
FROM
    (
        SELECT
            theme_id,
            COUNT(*) as totalExecutionsItem,
            SUM(tblStatsThemeSessions.durationSeconds) AS totalLearningDurationItem,
            AVG(tblStatsThemeSessions.durationSeconds) AS avgLearningDurationItem
        FROM
            tblStatsThemeSessions
            JOIN #Users
                ON #Users.user_id = tblStatsThemeSessions.user_id
                --AND tblStatsThemeSessions.startTime BETWEEN @dateRange_start AND @dateRange_end
        GROUP BY
            theme_id
    ) AS wbtAggregates
WHERE
    #WbtTestAggregates.itemType_id = 1
    AND wbtAggregates.theme_id = #WbtTestAggregates.item_id

-- getting total calls of the Tests
UPDATE
    #WbtTestAggregates
SET
    totalExecutionsItem = ISNULL(testAggregates.totalCount, 0),
    totalLearningDurationItem = ISNULL(testAggregates.totalLearnTime, 0),
    avgLearningDurationItem = ISNULL(testAggregates.avgLearnDuration, 0)
FROM
    (
        SELECT
            test_id,
            COUNT(*) as totalCount,
            SUM(DATEDIFF(MINUTE, startdate, enddate)) as totalLearnTime,
            AVG(DATEDIFF(MINUTE, startdate, endDate)) as avgLearnDuration

        FROM
            tblTasTestSessions
            JOIN #Users
                ON #users.user_id = tblTasTestSessions.user_id
                -- AND tblTasTestSessions.endDate BETWEEN @dateRange_start AND @dateRange_end
        GROUP BY
            test_id
    ) AS testAggregates
WHERE
    #WbtTestAggregates.itemType_id = 0
    AND testAggregates.test_id = #WbtTestAggregates.item_id
    

TRUNCATE TABLE #UnfilteredItemChain;
INSERT INTO
    #UnfilteredItemChain
    (
        item_id,
        module_id,
        moduleTitle,
        eduOffer_id,
        eduOfferTitle,
        targetGroup_id,
        targetGroupTitle
    )
SELECT
    itemId,
    mi.module_id,
    LTRIM(RTRIM(m_i.title)),
    eom.eduOffer_id,
    LTRIM(RTRIM(eo_i.title)),
    eot.targetGroup_id,
    LTRIM(RTRIM(tg.title))
FROM
    #DistinctItems i
    JOIN tblModuleItems mi
        ON  mi.item_id = i.itemId
    JOIN tblItems m_i
        ON  m_i.id = mi.module_id
        AND m_i.deleted IS NULL
    LEFT JOIN tblEduOffersModules eom
        ON  eom.module_id = mi.module_id
    LEFT JOIN tblItems eo_i
        ON  eo_i.id = eom.eduOffer_id
        AND eo_i.deleted IS NULL
    LEFT JOIN tblEduOffersTargetGroups eot
        ON  eot.eduOffer_id = eom.eduOffer_id
    LEFT JOIN tblTargetGroups tg
        ON  tg.id = eot.targetGroup_id


-- Output
SELECT
    -- Edu Offer
    -- eo_i.id as 'Bildungsangebot ID',
    eo_i.Title as 'Bildungsangebot Titel',
    eo_i.TitleForLearners as 'Bildungsangebot Titel für Lerner',
    dbo.fn_StripHTML(eo_i.[description] COLLATE DATABASE_DEFAULT) as 'Bildungsangebot Beschreibung',
    eo_i.trainerinfo as 'Bildungsangebot Trainerinfo',
    eo_i.tag as 'Bildungsangebot Kennzeichen',
    CASE eo_i.isInfoLinkGenerated
        WHEN 1 THEN @InfoLinkUrlRoot + dbo.fn_UrlEncode(eo_i.tag COLLATE DATABASE_DEFAULT)
        ELSE ''
    END as 'Bildungsangebot Link zur Info-Seite',
    IIF(eo.isMandatory = 1, 'Ja', 'Nein') as 'Bildungsangebot Verpflichtend',
    eo_grm.Title as 'Bildungsangebot Berechtigung Global',
    ISNULL
    (
        SUBSTRING
        (
            STUFF
            (
                (
                    SELECT
                        ', ' + RTRIM(LTRIM(ou.title)) + ' ' + CAST(rm.title AS VARCHAR)
                    FROM
                        tblOrganisationUnits ou
                        JOIN tblItemsOUPermissions eo_oup
                            ON  eo_oup.organisationUnit_id = ou.id
                        JOIN #RightMapping rm
                            ON  rm.id = eo_oup.permission
                    WHERE
                        eo_oup.item_id = eo.id
                    ORDER BY
                        ou.title
                    FOR XML PATH(''), TYPE
                ).value('.','NVARCHAR(MAX)'),
                1,
                2,
                ''
            ),
            0,
            32760
        ),
        ''
    ) as 'Bildungsangebot Berechtigung OE',
    (SELECT fullName FROM #UserFullname ufn WHERE ufn.user_id = eo_i.owner_id) as 'Bildungsangebot Besitzer',
    (SELECT MAX(mainVersionCreated) FROM tblVersionMap where id = eo_i.id) as 'Bildungsangebot Zuletzt geändert am',
    (SELECT fullName FROM #UserFullname ufn WHERE ufn.user_id = eo_i.modifiedBy_user_id) as 'Bildungsangebot Zuletzt geändert von',
    eo_i.created as 'Bildungsangebot Erstellt am',
    (SELECT fullName FROM #UserFullname ufn WHERE ufn.user_id = eo_i.createdBy_user_id) as 'Bildungsangebot Ersteller',
    IIF(eo_i.isAvailableForEduCatalog = 1, 'Ja', 'Nein') as 'Bildungsangebot für den Bildungskatalog verfügbar',
    eo_am.title as 'Bildungsangebot verfügbar für',
    ISNULL
    (
        SUBSTRING
        (
            STUFF
            (
                (
                    SELECT
                        ', ' + RTRIM(LTRIM(ou.title))
                    FROM
                        tblOrganisationUnits ou
                        JOIN [dbo].[tblItemAvailableForOrgUnitsEduCatalog] eo_ouec
                            ON  eo_ouec.orgUnit_id = ou.id
                    WHERE
                        eo_ouec.item_id = eo.id
                    ORDER BY
                        ou.title
                    FOR XML PATH(''), TYPE
                ).value('.','NVARCHAR(MAX)'),
                1,
                2,
                ''
            ),
            0,
            32760
        ),
        ''
    ) as 'Bildungsangebot Verfügbar für OE',
    ISNULL
    (
        SUBSTRING
        (
            STUFF
            (
                (
                    SELECT
                        ', ' + RTRIM(LTRIM(tg.title))
                    FROM
                        tblTargetGroups tg
                        JOIN [dbo].[tblItemAvailableForEduCatalog] eo_tgec
                            ON  eo_tgec.targetGroup_id = tg.id
                    WHERE
                        eo_tgec.item_id = eo.id
                    ORDER BY
                        tg.title
                    FOR XML PATH(''), TYPE
                ).value('.','NVARCHAR(MAX)'),
                1,
                2,
                ''
            ),
            0,
            32760
        ),
        ''
    ) as 'Bildungsangebot Verfügbar für ZG',
    eo_c.name as 'Bildungsangebot Ansprechpartner Name',
    IIF(eo_i.isPermissionRequired = 1, 'Ja', 'Nein') as 'Bildungsangebot Genehmigung erforderlich',
    ISNULL
    (
        SUBSTRING
        (
            STUFF
            (
                (
                    SELECT
                        ', ' + RTRIM(LTRIM(tg.title))
                    FROM
                        tblTargetGroups tg
                        JOIN [dbo].[tblEduOffersTargetGroups] eotg
                            ON  eotg.targetGroup_id = tg.id
                    WHERE
                        eotg.eduOffer_id = eo.id
                    ORDER BY
                        tg.title
                    FOR XML PATH(''), TYPE
                ).value('.','NVARCHAR(MAX)'),
                1,
                2,
                ''
            ),
            0,
            32760
        ),
        ''
    ) as 'Bildungsangebot zugeordnete ZG',
    ISNULL
    (
        STUFF
        (
            (
                SELECT
                    ', ' + RTRIM(LTRIM(m_i_i.title))
                FROM
                    tblItems m_i_i
                    JOIN [dbo].[tblEduOffersModules] eom
                        ON  eom.module_id = m_i_i.id
                WHERE
                    eom.eduOffer_id = eo.id
                ORDER BY
                    m_i_i.title
                FOR XML PATH(''), TYPE
            ).value('.','NVARCHAR(MAX)'),
            1,
            2,
            ''
        ),
        ''
    ) as 'Bildungsangebot zugeordnete Module',
    ISNULL
    (
        STUFF
        (
            (
                SELECT
                    ', ' + ta_mk_r.[Text]
                FROM
                    tblTopicAreas ta_mk
                    JOIN tblTopicAreasCurriculumEduOffers taceo
                        ON  taceo.topicArea_id = ta_mk.id
                    JOIN tblResources ta_mk_r
                        ON  ta_mk_r.id = ta_mk.localizedTitle_id
                        AND ta_mk_r.Language_ID = 1031
                WHERE
                    taceo.eduOffer_id = eo.id
                ORDER BY
                    ta_mk_r.[Text]
                FOR XML PATH(''), TYPE
            ).value('.','NVARCHAR(MAX)'),
            1,
            2,
            ''
        ),
        ''
    ) as 'Bildungsangebot zugeordnete Themenbereiche (Meine Kurse)',
    ISNULL
    (
        STUFF
        (
            (
                SELECT
                    ', ' + eo_ta_bk_r.[Text]
                FROM
                    [tblTopicAreasItems] eo_tai
                    JOIN tblTopicAreas eo_ta_bk
                        ON  eo_ta_bk.id = eo_tai.topicArea_id
                    JOIN tblResources eo_ta_bk_r
                        ON  eo_ta_bk_r.id = eo_ta_bk.localizedTitle_id
                        AND eo_ta_bk_r.Language_ID = 1031
                WHERE
                    eo_tai.item_id = eo.id
                ORDER BY
                    eo_ta_bk_r.[Text]
                FOR XML PATH(''), TYPE
            ).value('.','NVARCHAR(MAX)'),
            1,
            2,
            ''
        ),
        ''
    ) as 'Bildungsangebot zugeordnete Themenbereiche (Bildungskatalog)',

    -- Module
    --m_i.id as 'Modul ID',
    m_i.Title as 'Modul Titel',
    m_i.TitleForLearners as 'Modul Titel für Lerner',
    dbo.fn_StripHTML(m_i.[description]) as 'Modul Beschreibung',
    m_i.trainerinfo as 'Modul Trainerinfo',
    m_i.tag as 'Modul Kennzeichen',
    CASE m_i.isInfoLinkGenerated
        WHEN 1 THEN @InfoLinkUrlRoot + dbo.fn_UrlEncode(eo_i.tag)
        ELSE ''
    END as 'Modul Link zur Info-Seite',
    IIF(m_i.isVisibleInEducationCard = 1, 'Ja', 'Nein') AS 'Modul Im Bildungspass anzeigen',
    CASE m.viewMode
        WHEN 2 THEN 'Lernpfad'
        WHEN 1 THEN 'Gruppierung'
        WHEN 0 THEN 'Standard'
    END as 'Modulansicht',
    m.[target] as 'Modul Lernziele',
    m.participants as 'Modul Teilnehmer',
    m.courseUnits as 'Modul Unterrichtseinheiten',
    m.trainers as 'Modul Referenten',
    IIF(m.isCurriculum = 1, 'Ja', 'Nein') as 'Modul Curriculum',
    m_grm.Title as 'Modul Berechtigung Global',
    ISNULL
    (
        SUBSTRING
        (
            STUFF
            (
                (
                    SELECT
                        ', ' + RTRIM(LTRIM(ou.title)) + ' ' + CAST(rm.title AS VARCHAR)
                    FROM
                        tblOrganisationUnits ou
                        JOIN tblItemsOUPermissions oup
                            ON  oup.organisationUnit_id = ou.id
                        JOIN #RightMapping rm
                            ON  rm.id = oup.permission
                    WHERE
                        oup.item_id = m.id
                    ORDER BY
                        ou.title
                    FOR XML PATH(''), TYPE
                ).value('.','NVARCHAR(MAX)'),
                1,
                2,
                ''
            ),
                    0,
            32760
        ),
        ''
    ) as 'Modul Berechtigung OE',
    (SELECT fullName FROM #UserFullname ufn WHERE ufn.user_id = m_i.owner_id) as 'Modul Besitzer',
    (SELECT MAX(mainVersionCreated) FROM tblVersionMap where id = m_i.id) as 'Modul zuletzt geändert am',
    (SELECT fullName FROM #UserFullname ufn WHERE ufn.user_id = m_i.modifiedBy_user_id) as 'Modul zuletzt geändert von',
    m_i.created as 'Modul erstellt am',
    (SELECT fullName FROM #UserFullname ufn WHERE ufn.user_id = m_i.createdBy_user_id) as 'Modul Ersteller',
    CASE m.timeRestrictionType
        WHEN 2 THEN 'relative Termine'
        WHEN 1 THEN 'feste Termine'
        WHEN 0 THEN 'unbegrenzt'
    END as 'Modul zeitliche Verfügbarkeit',
    CASE m.timeRestrictionType
        WHEN 2 THEN CAST(m.availableFromWeeks AS VARCHAR(2))
        WHEN 1 THEN CONVERT(VARCHAR(50), m.availableFrom, 121)
        ELSE ''
    END AS 'Modul verfügbar von',
    CASE m.timeRestrictionType
        WHEN 2 THEN CAST(m.availableToWeeks AS VARCHAR(2))
        WHEN 1 THEN CONVERT(VARCHAR(50), m.availableTo, 121)
        ELSE ''
    END AS 'Modul verfügbar bis',
    IIF(m.notificationEnabled = 1, 'Ja', 'Nein') as 'Modul Benachrichtigung zum Lernstand an den Lerner versenden',
    m.notificationStartWeeks as 'Modul Benachrichtigung Start',
    m.repeatNotificationInWeeks as 'Modul Benachrichtigung Versandhäufigkeit',
    m.notificationEndWeeks as 'Modul Benachrichtigung Ende',
    CASE m.scoringMode
        WHEN 2 THEN 'Summe der Bausteine'
        WHEN 1 THEN 'Individuelle Vergabe'
        WHEN 0 THEN 'Keine Bildungszeit für Modul'
    END AS 'Vergabe Bildungszeit auf Modulebene',
    dbo.fn_GetEducationTimeString(m_i.educationTime) AS 'Modul Erwerbbare Bildungszeit',
    IIF(m.addItemScoreToModuleScore = 1, 'Ja', 'Nein') AS 'Bildungszeiten für Bausteine zählen zusätzlich zu den Bildungszeiten für Module',
    m_ltm.title as 'Modul Lernart',
    m_lcm.learningContent as 'Modul Lerninhalt',
    CASE
        WHEN m_i.requalificationPeriodType = 2
            THEN 'festes Intervall ' + CAST(m_i.newCreditPointsSpanMonths AS VARCHAR(3)) + ' Monaten'
        WHEN m_i.requalificationPeriodType = 1
            THEN 'jährlich'
        ELSE 'keine'
    END AS 'Modul Zeitraum Re-Qualifizierung',
    ISNULL(m_cert.name, 'Kein Zertifikat zugeordnet') as 'Modul Zertifikat',
    ISNULL(CAST(m_i.overridespanmonths AS VARCHAR(5)), 'keine') as 'Modul Zeitraum Re-Zertifizierung',
    ISNULL(CAST(m_i.overrideInitialMonths AS VARCHAR(5)), 'keine') as 'Modul Erst-Bearbeitung Re-Zertifizierung',
    ISNULL(CAST(m_i.overrideAlertSpanMonths AS VARCHAR(5)), 'keine') as 'Modul Erste Erinnerung Re-Zertifizierung',
    ISNULL(CAST(m_i.override2ndAlertSpanWeeks AS VARCHAR(5)), 'keine') as 'Modul Zweite Erinnerung Re-Zertifizierung',
    IIF(m_i.isRateable = 1, 'Ja', 'Nein') AS 'Modul bewertbar',
    IIF(m_i.showRatingFromOthers = 1, 'Ja', 'Nein') AS 'Modul Bewertung von anderen Usern einsehbar',
    IIF(m_i.ratingReminderWeeks &gt; 0, 'Ja', 'Nein') as 'Modul Erinnerung Bewertung',
    ISNULL(CAST(m_i.ratingReminderWeeks AS VARCHAR(5)), 'keine') as 'Modul Zeitraum Erinnerung',
    IIF(m_i.isAvailableForEduCatalog &gt; 0, 'Ja', 'Nein') as 'Modul Für den Bildungskatalog verfügbar?',
    m_am.title as 'Modul verfügbar für',
    ISNULL
    (
        SUBSTRING
        (
            STUFF
            (
                (
                    SELECT
                        ', ' + RTRIM(LTRIM(ou.title))
                    FROM
                        tblOrganisationUnits ou
                        JOIN [dbo].[tblItemAvailableForOrgUnitsEduCatalog] m_ouec
                            ON  m_ouec.orgUnit_id = ou.id
                    WHERE
                        m_ouec.item_id = m.id
                    ORDER BY
                        ou.title
                    FOR XML PATH(''), TYPE
                ).value('.','NVARCHAR(MAX)'),
                1,
                2,
                ''
            ),
            0,
            32760
        ),
        ''
    ) as 'Modul Verfügbar für OE',
    ISNULL
    (
        SUBSTRING
        (
            STUFF
            (
                (
                    SELECT
                        ', ' + RTRIM(LTRIM(tg.title))
                    FROM
                        tblTargetGroups tg
                        JOIN [dbo].[tblItemAvailableForEduCatalog] m_tgec
                            ON  m_tgec.targetGroup_id = tg.id
                    WHERE
                        m_tgec.item_id = m.id
                    ORDER BY
                        tg.title
                    FOR XML PATH(''), TYPE
                ).value('.','NVARCHAR(MAX)'),
                1,
                2,
                ''
            ),
            0,
            32760
        ),
        ''
    ) as 'Modul Verfügbar für ZG',
    m_c.name as 'Modul Ansprechpartner Name',
    IIF(m_i.isPermissionRequired = 1, 'Ja', 'Nein') as 'Modul Genehmigung erforderlich',
    ISNULL
    (
        SUBSTRING
        (
            STUFF
            (
                (
                    SELECT
                        ', ' + RTRIM(LTRIM(mi_i.title))
                    FROM
                        tblItems mi_i
                        JOIN [dbo].[tblModuleItems] mi
                            ON  mi.item_id = mi_i.id
                    WHERE
                        mi.module_id = m.id
                    ORDER BY
                        mi_i.title
                    FOR XML PATH(''), TYPE
                ).value('.','NVARCHAR(MAX)'),
                1,
                2,
                ''
            ),
            0,
            32760
        ),
        ''
    ) as 'Modul Zugewiesene Bausteine',
    ISNULL
    (
        SUBSTRING
        (
            STUFF
            (
                (
                    SELECT DISTINCT
                        ', ' + RTRIM(LTRIM(tg.title))
                    FROM
                        tblTargetGroups tg
                        JOIN tblEduOffersTargetGroups eotg
                            ON  eotg.targetGroup_id = tg.id
                        JOIN tblEduOffersModules eom
                            ON  eom.eduOffer_id = eotg.eduOffer_id
                    WHERE
                        eom.module_id = m.id
                    ORDER BY
                        ', ' + RTRIM(LTRIM(tg.title))
                    FOR XML PATH(''), TYPE
                ).value('.','NVARCHAR(MAX)'),
                1,
                2,
                ''
            ),
            0,
            32760
        ),
        ''
    ) as 'Modul zugeordnete ZG',
    ISNULL
    (
        STUFF
        (
            (
                SELECT DISTINCT
                    ', ' + meo_i.title
                FROM
                    tblEduOffersModules eom
                    JOIN tblItems meo_i
                        ON  meo_i.id = eom.eduOffer_id
                WHERE
                    eom.module_id = m.id
                ORDER BY
                    ', ' + meo_i.title
                FOR XML PATH(''), TYPE
            ).value('.','NVARCHAR(MAX)'),
            1,
            2,
            ''
        ),
        ''
    ) as 'Modul Zugewiesene Bildungsangebote',
    ISNULL
    (
        STUFF
        (
            (
                SELECT
                    ', ' + RTRIM(LTRIM(o.title))
                FROM
                    tblObjects o
                    JOIN tblQualificationsItems qi
                        ON  qi.qualification_id = o.id
                WHERE
                    o.deleted IS NULL
                    AND qi.item_id = m.id
                ORDER BY
                    o.title
                FOR XML PATH(''), TYPE
            ).value('.','NVARCHAR(MAX)'),
            1,
            2,
            ''
        ),
        ''
    ) as 'Modul zugeordnete Qualifizierungen',
    ISNULL
    (
        STUFF
        (
            (
                SELECT
                    ', ' + ta_r.[Text]
                FROM
                    [tblTopicAreasItems] tai
                    JOIN tblTopicAreas ta
                        ON  ta.id = tai.topicArea_id
                    JOIN tblResources ta_r
                        ON  ta_r.id = ta.localizedTitle_id
                        AND ta_r.Language_ID = 1031
                WHERE
                    tai.item_id = m.id
                ORDER BY
                    ta_r.[Text]
                FOR XML PATH(''), TYPE
            ).value('.','NVARCHAR(MAX)'),
            1,
            2,
            ''
        ),
        ''
    ) as 'Modul zugeordnete Themenbereiche (Bildungskatalog)',

    -- Item
    --i.id AS 'Baustein ID',
    i.title AS 'Baustein Titel', 
    i.TitleForLearners as 'Baustein Titel für Lerner',
    im.title AS 'Bausteintyp', 
    tt_tm.title AS 'Testart',
    dbo.fn_StripHTML(i.[description]) AS 'Baustein Beschreibung',
    i.trainerinfo as 'Baustein Trainerinfo',
    i.tag as 'Baustein Kennzeichen',
    CASE i.isLinkGenerated
        WHEN 1 THEN @DirektLinkUrlRoot + dbo.fn_UrlEncode(i.tag)
        ELSE ''
    END as 'Baustein Direkt Link',
    CASE i.isInfoLinkGenerated
        WHEN 1 THEN @InfoLinkUrlRoot + dbo.fn_UrlEncode(i.tag)
        ELSE ''
    END as 'Baustein Link zur Info-Seite',
    IIF(i.isVisibleInEducationCard = 1, 'Ja', 'Nein') AS 'Baustein Im Bildungspass anzeigen',
    IIF(i.deleteAfterYears IS NOT NULL, IIF(i.deleteAfterYears = 1, CAST(i.deleteAfterYears as NVARCHAR(3)) + ' Jahr', CAST(i.deleteAfterYears as NVARCHAR(3)) + ' Jahre'), '')  AS 'Baustein Bearbeitungsstand löschen nach',
    CASE i.itemType_id
        WHEN 1 THEN theme.importPath
        WHEN 6 THEN doc.folderName
        ELSE ''
    END AS 'Baustein Import Ordner',
    theme.learningObjective as 'WBT Lernziele',
    -- This is actually just a label in the UI!  The standard label is "Author" but as ERGO has different role names this is what Author looks
    -- like for them.
    '' AS 'WBT Verantwortlicher für eine BM',
    theme.learningDuration as 'WBT Lerndauer',
    theme_td.title as 'WBT Zielgerät',
    theme.manifest_id as 'WBT Manifest ID',
    theme.themeVersion as 'WBT-Version',
    CASE tt.resultCalculationMode
        WHEN 0 THEN 'Gesamtergebnis'
        WHEN 1 THEN 'Sachgebietsergebnis'
        ELSE ''
    END AS 'Test Berechnung der Ergebnisse',
    tt.summaryPassingThreshold AS 'Test bestanden bei',
    tt.mainSubjectGroupThreshold AS 'Test Sachgebietsergebnis in einem mind.',
    tt.otherSubjectGroupsThreshold AS 'Test Sachgebietsergebnis in den anderen mind.',
    tt.useGrading AS 'Test Benotung',
    tt_lm.title AS 'Test Sprache für Navigation',
    i_grm.Title as 'Baustein Berechtigung Global',
    ISNULL
    (
        SUBSTRING
        (
            STUFF
            (
                (
                    SELECT
                        ', ' + RTRIM(LTRIM(ou.title)) + ' ' + CAST(rm.title AS VARCHAR)
                    FROM
                        tblOrganisationUnits ou
                        JOIN tblItemsOUPermissions oup
                            ON  oup.organisationUnit_id = ou.id
                        JOIN #RightMapping rm
                            ON  rm.id = oup.permission
                    WHERE
                        oup.item_id = i.id
                    ORDER BY
                        ou.title
                    FOR XML PATH(''), TYPE
                ).value('.','NVARCHAR(MAX)'),
                1,
                2,
                ''
            ),
            0,
            32760
        ),''
    ) as 'Baustein Berechtigung OE',
    (SELECT fullName FROM #UserFullname ufn WHERE ufn.user_id = i.owner_id) as 'Baustein Besitzer',
    (SELECT MAX(mainVersionCreated) FROM tblVersionMap where id = i.id) as 'Baustein zuletzt geändert am',
    (SELECT fullName FROM #UserFullname ufn WHERE ufn.user_id = i.modifiedBy_user_id) as 'Baustein zuletzt geändert von',
    i.created as 'Baustein erstellt am',
    (SELECT fullName FROM #UserFullname ufn WHERE ufn.user_id = i.createdBy_user_id) as 'Baustein Ersteller',
    dbo.fn_GetEducationTimeString(i.educationTime) AS 'Baustein Erwerbbare Bildungszeit',
    i_ltm.title as 'Baustein Lernart',
    i_lcm.learningContent as 'Baustein Lerninhalt',
    CASE
        WHEN i.requalificationPeriodType = 2
            THEN 'festes Intervall ' + CAST(i.newCreditPointsSpanMonths AS VARCHAR(3)) + ' Monaten'
        WHEN i.requalificationPeriodType = 1
            THEN 'jährlich'
        ELSE 'keine'
    END AS 'Baustein Zeitraum Re-Qualifizierung',
    ISNULL(i_cert.name, 'Kein Zertifikat zugeordnet') as 'Baustein Zertifikat',
    IIF(theme.calcStatusIncludeCompleted = 1, 'Ja', 'Nein') as 'WBT Lernprogramm muss vollständig bearbeitet sein',
    IIF(theme.calcStatusIncludeExams = 1, 'Ja', 'Nein') as 'WBT Test(s) muss bestanden sein',
    IIF(theme.calcStatusIncludeExercises = 1, 'Ja', 'Nein') as 'WBT alle Übungen müssen richtig beantwortet sein',
    theme.keepScormDataDays AS 'WBT Anzahl Tage',
    IIF(theme.keepScormDataDays &gt; 0, 'Nein', 'Ja')'WBT Lernstandsdaten nicht löschen',
    ISNULL(CAST(i.overridespanmonths AS VARCHAR(5)), 'keine') as 'Baustein Zeitraum Re-Zertifizierung',
    ISNULL(CAST(i.overrideInitialMonths AS VARCHAR(5)), 'keine') as 'Baustein Erst-Bearbeitung Re-Zertifizierung',
    ISNULL(CAST(i.overrideAlertSpanMonths AS VARCHAR(5)), 'keine') as 'Baustein Erste Erinnerung Re-Zertifizierung',
    ISNULL(CAST(i.override2ndAlertSpanWeeks AS VARCHAR(5)), 'keine') as 'Baustein Zweite Erinnerung Re-Zertifizierung',
    theme.StatusThreshold as 'WBT Lernprogramm-Status Im Lernprozess ab (%)',
    IIF(i.isRateable = 1, 'Ja', 'Nein') AS 'Baustein bewertbar',
    IIF(i.showRatingFromOthers = 1, 'Ja', 'Nein') AS 'Baustein Bewertung von anderen Usern einsehbar',
    IIF(i.ratingReminderWeeks &gt; 0, 'Ja', 'Nein') as 'Baustein Erinnerung Bewertung',
    ISNULL(CAST(i.ratingReminderWeeks AS VARCHAR(5)), 'keine') as 'Baustein Zeitraum Erinnerung',
    IIF(i.isAvailableForEduCatalog &gt; 0, 'Ja', 'Nein') as 'Baustein Für den Bildungskatalog verfügbar?',
    i_am.title as 'Baustein verfügbar für',
    ISNULL
    (
        SUBSTRING
        (
            STUFF
            (
                (
                    SELECT
                        ', ' + RTRIM(LTRIM(ou.title))
                    FROM
                        tblOrganisationUnits ou
                        JOIN [dbo].[tblItemAvailableForOrgUnitsEduCatalog] ouec
                            ON  ouec.orgUnit_id = ou.id
                    WHERE
                        ouec.item_id = i.id
                    ORDER BY
                        ou.title
                    FOR XML PATH(''), TYPE
                ).value('.','NVARCHAR(MAX)'),
                1,
                2,
                ''
            ),
            0,
            32760
        ),''
    ) as 'Baustein Verfügbar für OE',
    ISNULL
    (
        SUBSTRING
        (
            STUFF
            (
                (
                    SELECT
                        ', ' + RTRIM(LTRIM(tg.title))
                    FROM
                        tblTargetGroups tg
                        JOIN [dbo].[tblItemAvailableForEduCatalog] tgec
                            ON  tgec.targetGroup_id = tg.id
                    WHERE
                        tgec.item_id = i.id
                    ORDER BY
                        tg.title
                    FOR XML PATH(''), TYPE
                ).value('.','NVARCHAR(MAX)'),
                1,
                2,
                ''
            ),
            0,
            32760
        ),''
    ) as 'Baustein Verfügbar für ZG',
    i_c.name as 'Baustein Ansprechpartner Name',
    IIF(i.isPermissionRequired = 1, 'Ja', 'Nein') as 'Baustein Genehmigung erforderlich',
    ISNULL
    (
        SUBSTRING
        (
            STUFF
            (
                (
                    SELECT DISTINCT
                        ', ' + targetGroupTitle
                    FROM
                        #UnfilteredItemChain uic
                    WHERE
                        uic.item_id = i.id
                    ORDER BY
                        ', ' + targetGroupTitle
                    FOR XML PATH(''), TYPE
                ).value('.','NVARCHAR(MAX)'),
                1,
                2,
                ''
            ),
            0,
            32760
        ),
        ''
    ) as 'Baustein zugeordnete ZG',
    ISNULL
    (
        STUFF
        (
            (
                SELECT DISTINCT
                    ', ' + eduOfferTitle
                FROM
                    #UnfilteredItemChain uic
                WHERE
                    uic.item_id = i.id
                ORDER BY
                    ', ' + eduOfferTitle
                FOR XML PATH(''), TYPE
            ).value('.','NVARCHAR(MAX)'),
            1,
            2,
            ''
        ),
        ''
    ) as 'Baustein Zugewiesene Bildungsangebote',
    ISNULL
    (
        STUFF
        (
            (
                SELECT DISTINCT
                    ', ' + moduleTitle
                FROM
                    #UnfilteredItemChain uic
                WHERE
                    uic.item_id = i.id
                ORDER BY
                    ', ' + moduleTitle
                FOR XML PATH(''), TYPE
            ).value('.','NVARCHAR(MAX)'),
            1,
            2,
            ''
        ),
        ''
    ) as 'Baustein Zugewiesene Module',
    ISNULL
    (
        STUFF
        (
            (
                SELECT
                    ', ' + RTRIM(LTRIM(o.title))
                FROM
                    tblObjects o
                    JOIN tblQualificationsItems qi
                        ON  qi.qualification_id = o.id
                WHERE
                    o.deleted IS NULL
                    AND qi.item_id = i.id
                ORDER BY
                    o.title
                FOR XML PATH(''), TYPE
            ).value('.','NVARCHAR(MAX)'),
            1,
            2,
            ''
        ),
        ''
    ) as 'Baustein zugeordnete Qualifizierungen',
    ISNULL
    (
        STUFF
        (
            (
                SELECT
                    ', ' + ta_r.[Text]
                FROM
                    [tblTopicAreasItems] tai
                    JOIN tblTopicAreas ta
                        ON  ta.id = tai.topicArea_id
                    JOIN tblResources ta_r
                        ON  ta_r.id = ta.localizedTitle_id
                        AND ta_r.Language_ID = 1031
                WHERE
                    tai.item_id = i.id
                ORDER BY
                    ta_r.[Text]
                FOR XML PATH(''), TYPE
            ).value('.','NVARCHAR(MAX)'),
            1,
            2,
            ''
        ),
        ''
    ) as 'Baustein zugeordnete Themenbereiche (Bildungskatalog)',
    
    CASE i.itemType_id
        WHEN 1 THEN (SELECT fullName FROM #UserFullname ufn WHERE ufn.user_id = theme.importedBy_user_id)
        WHEN 6 THEN (SELECT fullName FROM #UserFullname ufn WHERE ufn.user_id = doc.importedBy_user_id)
        ELSE ''
    END AS 'Wer hat es zuletzt importiert',
    CASE i.itemType_id
        WHEN 1 THEN theme.importedDate
        WHEN 6 THEN doc.importedDate
        ELSE ''
    END AS 'Wann zuletzt importiert',
    wta.totalUsers AS 'Anzahl User in Zielgruppe', 
    wta.usersExecutedItem AS 'Anzahl der tatsächlichen Nutzer', 
    CASE
        WHEN wta.itemType_id IN(0, 1)
            THEN wta.avgLearningDurationItem / 60
        ELSE 0
    END AS 'Durchschnittliche Gesamtbearbeitungszeit pro Benutzer (min)', 
    CASE
        WHEN wta.itemType_id IN(0, 1)
            THEN wta.totalLearningDurationItem / 60
        ELSE 0
    END AS 'Gesamtbearbeitungszeit des Bausteins (min)', 
    wta.totalExecutionsItem AS 'Gesamtzahl Aufrufe', 
    ISNULL(wta.greenStatuses, 0.0) AS 'Bearbeitungsstatus (grün) tatsächliche Nutzer', 
    ISNULL(wta.yellowStatuses, 0.0) AS 'Bearbeitungsstatus (gelb) tatsächliche Nutzer', 
    ISNULL(wta.redStatuses, 0.0) AS 'Bearbeitungsstatus (rot) tatsächliche Nutzer',

    tt.timeLimit as 'Test Maximale Zeit (in Minuten)',
    tt.maximumExecutions as 'Test Maximale Zahl der Bearbeitungen',
    IIF(tt.checkLRbeforeExecution = 1, 'Ja', 'Nein') as 'Test Abarbeitung der Lernwegempfehlungen vor neuem Testaufruf',
    IIF(tt.resetScormData = 1, 'Ja', 'Nein') as 'Test Lernstand zurücksetzen nach Testsperrung',
    IIF(tt.considerLearningTargets = 1, 'Ja', 'Nein') as 'Test Lernzielgewichtung',
    IIF(tt.considerExcludingQuestions = 1, 'Ja', 'Nein') as 'Test Ausschlussfragen',
    IIF(tt.frozen = 1, 'Ja', 'Nein') as 'Test eingefroren',
    IIF(tt.generateLearnwayRecommendations = 1, 'Ja', 'Nein') as 'Test Lernwegsempfehlungen',
    IIF(tt.saveStatisticalInformations = 1, 'Ja', 'Nein') as 'Test Speichere Bearbeitungsdetails',
    IIF(tt.printerOnly = 1, 'Ja', 'Nein') as 'Test nur Testausdruck',
    IIF(tt.isTemplate = 1, 'Ja', 'Nein') as 'Test Vorlage',
    CASE tt.mixAnswerPartOrder
        WHEN 0 THEN 'Test Reihenfolge der Fragen und der Antwortmöglichkeiten variieren'
        WHEN 1 THEN 'Test Fragenreihenfolge manuell festlegen'
        ELSE ''
    END as 'Test Fragenreihenfolge',
    IIF(tt.showResults = 1, 'Ja', 'Nein') as 'Testergebnis nach Ende des Tests dem Benutzer zeigen',
    IIF(tt.showRevision = 1, 'Ja', 'Nein') as 'Test Korrekturansicht erlauben',
    IIF(tt.enableResultPrinting = 1, 'Ja', 'Nein') as 'Test Ausdruck des Testergebnisses',
    CASE tt.printResultDetails
        WHEN 0 THEN 'keine'
        WHEN 1 THEN 'Bildungscontrolling und Lernersicht'
        WHEN 2 THEN 'nur Bildungscontrolling'
        ELSE ''
    END AS 'Test Detaillierte Ergebnisse ausdrucken',
    IIF(tt.showWrongQuestions = 1, 'Ja', 'Nein') as 'Test falsche Antworten anzeigen',
    tt.columnsPerPrintPage as 'Test Anzahl der Spalten pro Seite im Ausdruck',
    tt_pl_r.Text as 'Test Fußzeile links',
    tt_pr_r.Text as 'Test Fußzeile rechts',
    IIF(tt.certificatePageNumbers = 1, 'Ja', 'Nein') as 'Test Seitennummerierung',
    IIF(tt.useStandardStartPage = 1, 'Ja', 'Nein') as 'Test Standard-Startseite',
    IIF(tt.useStandardResultPage = 1, 'Ja', 'Nein') as 'Test Standard-Ergebnisseite',
    CASE theme.player_id
        WHEN 'defaultPlayer' THEN 'Standard Player v4.0'
        WHEN 'asycnPlayer' THEN 'WBT Player v3.0 (async)'
        WHEN 'deprecatedPlayer' THEN 'WBT Player v2.0 (bis 12.2020)'
        ELSE ''
    END AS 'WBT Kursviewer',
    theme.themeWidth as 'WBT Bildschirm Breite beim Start',
    theme.themeHeight as 'WBT Bildschirm Höhe beim Start',
    IIF(theme.themeViewerOptions &amp; 64 = 64, 'Ja', 'Nein') as 'WBT Wiederholungsliste',
    IIF(theme.themeViewerOptions &amp; 8 = 8, 'Ja', 'Nein') as 'WBT Schaltfläche "Zurück"',
    IIF(theme.themeViewerOptions &amp; 1 = 1, 'Ja', 'Nein') as 'WBT Schaltfläche "Baum Anzeigen/Verbergen"',
    IIF(theme.themeViewerOptions &amp; 16 = 16, 'Ja', 'Nein') as 'WBT Schaltfläche "Vorwärts"',
    IIF(theme.themeViewerOptions &amp; 2 = 2, 'Ja', 'Nein') as 'WBT Schaltfläche "Werkzeuge"',
    IIF(theme.themeViewerOptions &amp; 1024 = 1024, 'Ja', 'Nein') as 'WBT Schaltfläche "Vorhergehender Schritt"',
    IIF(theme.themeViewerOptions &amp; 4 = 4, 'Ja', 'Nein') as 'WBT Schaltfläche "Lesezeichen"',
    IIF(theme.themeViewerOptions &amp; 32 = 32, 'Ja', 'Nein') as 'WBT Schaltfläche "Nächster Schritt"',
    IIF(theme.themeViewerOptions &amp; 256 = 256, 'Ja', 'Nein') as 'WBT Schaltfläche "Minimieren/Maximieren"',
    IIF(theme.themeViewerOptions &amp; 512 = 512, 'Ja', 'Nein') as 'WBT Schaltfläche "Schließen"',
    IIF(theme.themeViewerOptions &amp; 4096 = 4096, 'Ja', 'Nein') as 'WBT Baum zu Beginn offen',
    IIF(theme.themeViewerOptions &amp; 16384 = 16384, 'Ja', 'Nein') as 'WBT Schaltfläche "Erneut Laden"',
    IIF(theme.themeViewerOptions &amp; 2048 = 2048, 'Ja', 'Nein') as 'WBT Schaltfläche "Lautsprecher ein/aus"',
    IIF(theme.themeViewerOptions &amp; 8192 = 8192, 'Ja', 'Nein') as 'WBT Schaltfläche "Sprechertexte ein/aus',
    IIF(theme.themeViewerOptions &amp; 32768 = 32768, 'Ja', 'Nein') as 'WBT Automatische Lesezeichen',
    IIF(theme.themeViewerOptions &amp; 65536 = 65536, 'Ja', 'Nein') as 'WBT Lernwegsempfehlungen aus SCORM-Daten',
    IIF(theme.themeViewerOptions &amp; 128 = 128, 'Ja', 'Nein') as 'WBT Schaltfläche "Pause"',
    IIF(theme.themeViewerOptions &amp; 131072 = 131072, 'Ja', 'Nein') as 'WBT Schaltfläche "Hilfe"',
    IIF(theme.themeViewerOptions &amp; 524288 = 524288, 'Ja', 'Nein') as 'WBT Player unterdrückt API-Fehler'
FROM
    #Unassigned ic

    -- Edu Offer related tables
    LEFT JOIN tblItems eo_i
        ON  eo_i.id = ic.eduOfferId
    LEFT JOIN tblEduOffers eo
        ON  eo.id = ic.eduOfferId
    LEFT JOIN #RightMapping eo_grm
        ON  eo_grm.id = eo_i.right_global
    LEFT JOIN #AvailabilityMapping eo_am
        ON  eo_am.isAvailable = eo_i.isAvailableForEduCatalog
        AND eo_am.isRestricted = eo_i.isRestrictedByTargetGroup
    LEFT JOIN tblContacts eo_c
        ON  eo_i.contact_id = eo_c.id
    
    -- Module related tables
    LEFT JOIN tblItems m_i
        ON  m_i.id = ic.moduleId
    LEFT JOIN tblModules m
        ON  m.id = ic.moduleId
    LEFT JOIN #RightMapping m_grm
        ON  m_grm.id = m_i.right_global
    LEFT JOIN #LearningTypeMapping m_ltm
        ON  m_ltm.id = m_i.learningType_id
    LEFT JOIN tblCertificates as m_cert
        ON  m_cert.id = m_i.certificate_id
    LEFT JOIN #AvailabilityMapping m_am
        ON  m_am.isAvailable = m_i.isAvailableForEduCatalog
        AND m_am.isRestricted = m_i.isRestrictedByTargetGroup
    LEFT JOIN tblContacts m_c
        ON  m_c.id = m_i.contact_id
    LEFT JOIN #LearningContentMapping m_lcm
        ON  m_lcm.code COLLATE DATABASE_DEFAULT = m_i.learningContent COLLATE DATABASE_DEFAULT

    -- Item related tables
    LEFT JOIN tblItems i
        ON  i.id = ic.itemId
    LEFT JOIN #ItemMapping AS im
        ON  im.id = ic.itemTypeId
    LEFT JOIN #RightMapping i_grm
        ON  i_grm.id = i.right_global
    LEFT JOIN #LearningTypeMapping i_ltm
        ON  i_ltm.id = i.learningType_id
    LEFT JOIN tblCertificates as i_cert
        ON  i_cert.id = i.certificate_id
    LEFT JOIN #AvailabilityMapping i_am
        ON  i_am.isAvailable = i.isAvailableForEduCatalog
        AND i_am.isRestricted = i.isRestrictedByTargetGroup
    LEFT JOIN tblContacts i_c
        ON  i_c.id = i.contact_id
    LEFT JOIN #LearningContentMapping i_lcm
        ON  i_lcm.code COLLATE DATABASE_DEFAULT = i.learningContent COLLATE DATABASE_DEFAULT

    LEFT JOIN tblTasTests tt
        ON  tt.id = i.id
    LEFT JOIN #TestModeMapping tt_tm
        ON  tt_tm.id = tt.mode
    LEFT JOIN tblDocuments doc
        ON  doc.id = i.id
    LEFT JOIN tblThemes theme
        ON  theme.id = i.id
    LEFT JOIN #TargetDeviceMapping theme_td
        ON  theme_td.id = theme.targetDevice
    LEFT JOIN #LanguageMapping tt_lm
        ON  tt_lm.id = tt.navigationLanguageId
    LEFT JOIN tblResources tt_pl_r
        ON  tt_pl_r.id = tt.certificateFooterLeft_resource_id
        AND tt_pl_r.Language_ID = 1031
    LEFT JOIN tblResources tt_pr_r
        ON  tt_pr_r.id = tt.certificateFooterRight_resource_id
        AND tt_pr_r.Language_ID = 1031

    LEFT JOIN #WbtTestAggregates wta
        ON  wta.item_id = ic.itemId
ORDER BY
    eo_i.title, m_i.title, i.title</command>
    </Report>
  </Reports>
  <Parameters>
    <Parameter id="19308b6b-d4fd-43a8-b8fc-68ac4606cd34" isSystem="True" name="Einzelne Zielgruppe" reportParameterType_id="19b9487c-a81b-4fd3-b12e-7e9ffec4de4a" queryParameterName="@distinctTargetGroup_id" />
  </Parameters>
  <ParameterTypes>
    <ParameterType id="19b9487c-a81b-4fd3-b12e-7e9ffec4de4a" isSystem="True" name="Einzelne Zielgruppe" datatype="StringDDL" dataValueField="id" dataTextField="title">
      <query>SELECT id, title FROM tblTargetGroups where mandator_id = @current_mandator_id order by title</query>
    </ParameterType>
  </ParameterTypes>
</ReportsExport>