﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
  <Reports>
    <Report id="b546f9f9-6e48-4061-a4fc-7107bfb276cc" codekey="Seminarbedarf" categoryCodekey="Trainings" name="Seminarbedarf" description="">
      <MetaData created="2014-12-22T12:18:54" createdBy="Administrator, Albrecht (Administrator)" createdBy_user_id="1" modified="2021-03-19T09:59:15" modifiedBy="Betz, Holger (holger.betz1)" modifiedBy_user_id="37276" />
      <ExecutionDetails format="TableResult" commandType="SqlCommandOrQuery" exportHandler="" adminControl="" exportMultipleTablesToSheets="False" datesWithTime="False" extraParams="" />
      <Mandators mandatorMode="ExcludeMandators" mandator_id="d5a90a49-e697-4aeb-8a5b-298782815490" isStandard="False" isUsedByMenu="False">
        <Mandator mandatorName="adidas01" />
      </Mandators>
      <Parameters>
        <Parameter id="a785aecc-668a-4609-9613-394bd4d708c2" isRequired="True" allowMultiSelect="False" name="Mandant" contextName="Mandant" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="35ceb0d3-29e6-4108-910a-89e858dda847" isRequired="True" allowMultiSelect="True" name="Auswahl Target Group" contextName="Zielgruppe" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="c34dbe08-0158-4ad3-9e5d-9b603447c72a" isRequired="False" allowMultiSelect="False" name="Text" contextName="Kennung" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
      </Parameters>
      <Roles>
        <Role id="15" />
        <Role id="16" />
        <Role id="17" />
        <Role id="22" />
        <Role id="36" />
        <Role id="37" />
        <Role id="38" />
        <Role id="39" />
        <Role id="46" />
      </Roles>
      <command>
        --DECLARE @mandator_id UNIQUEIDENTIFIER
        --DECLARE @targetGroupId typeIntList
        -- '8BE19033-6B64-44D8-B298-950FB718448A'; NRH ZG 241: Aachen Counter MA Vollgeneralist
        --SET @mandator_id = '8BE19033-6B64-44D8-B298-950FB718448A' --'7DA81670-5067-49C3-A371-379BB5DC4F11' --'31035F89-9FFD-4876-BF3D-9B406A1FD02A' --'D06EB4C7-72D6-43F3-A824-34E625C9BFD3' --'1541A7BB-3397-4C3F-B98F-C6A4784EA41C' -- --  --  -- --

        --INSERT INTO @targetGroupId VALUES (241) --, (104),(952)

        --DECLARE @targetGroup INT = NULL -- = 241
        --DECLARE @targetGroupId typeIntList


        DECLARE @TrainingTitles TABLE(eduOffer_id UNIQUEIDENTIFIER,
        eduOfferTitle NVARCHAR(256),
        trainingTitle_id UNIQUEIDENTIFIER,
        trainingTitle NVARCHAR(256),
        workflow INT)

        DECLARE @EduOffersTrainingTitles TABLE(eduOffer_id UNIQUEIDENTIFIER,
        eduOfferTitle NVARCHAR(256),
        triningTitles NVARCHAR(MAX))

        DECLARE @Result TABLE(Kennung NVARCHAR(256),
        Name NVARCHAR(256),
        Vorname NVARCHAR(256),
        ZG VARCHAR(256),
        eduOfferTitle NVARCHAR(256),
        trainingTitles NVARCHAR(MAX),
        Seminartermin NVARCHAR(512),
        Seminarart NVARCHAR(128),
        userStatus NVARCHAR(256),
        statusCode NVARCHAR(256),
        trainingStart DATETIME)


        --Eduoffers with training titles
        INSERT INTO @TrainingTitles
        SELECT DISTINCT tblEduOffersModules.eduOffer_id,
        eduOffers.title AS eduOfferTitle,
        trainingTitles.id, --AS trainingTitleID,
        trainingTitles.title AS trainingTitle
        , tblTrainingTitles.workflow
        FROM tblEduOffersModules
        JOIN tblItems AS eduOffers ON eduOffers.id = tblEduOffersModules.eduOffer_id --AND (@mandator_id IS NULL OR eduOffers.mandator_id = @mandator_id)
        JOIN tblModuleItems ON tblModuleItems.module_id = tblEduOffersModules.module_id
        JOIN tblTrainingTitles ON tblTrainingTitles.id = tblModuleItems.item_id
        JOIN tblItems AS trainingTitles ON trainingTitles.id = tblTrainingTitles.id AND trainingTitles.deleted IS NULL
        JOIN tblEduOffersTargetGroups ON tblEduOffersTargetGroups.eduOffer_id = tblEduOffersModules.eduOffer_id --AND tblEduOffersTargetGroups.targetGroup_id = @targetGroup
        WHERE (tblTrainingTitles.mandator_id = @mandator_id
        OR EXISTS (SELECT *
        FROM tblTrainingTitlesMandatorsNeededSeats
        WHERE mandator_id = @mandator_id AND tblTrainingTitles.id = trainingTitle_id))
        AND (tblEduOffersTargetGroups.targetGroup_id IN (SELECT * FROM  @targetGroupId))

        INSERT INTO @EduOffersTrainingTitles
        SELECT eduOffer_id,
        eduOfferTitle,
        (
        SELECT trainingTitle + ','
        FROM @TrainingTitles AS t2 --#TrainingTitles as t2
        WHERE t2.eduOffer_id = t1.eduOffer_id
        ORDER BY trainingTitle
        FOR XML PATH('')) AS triningTitles
        FROM @TrainingTitles AS t1 --#TrainingTitles as t1
        GROUP BY eduOffer_id,
        eduOfferTitle

        --select * from @EduOffersTrainingTitles

        --INSERT INTO @Result
        SELECT DISTINCT tblTrainings.id as training_id, -- for joining later with eduoffers
        v_Users.intUserCn,
        v_Users.descUserCn,
        v_Users.Nachname,
        v_Users.Vorname,
        --tblTargetGroups.title as ZG,
        tblItems.title + ' ' + ISNULL(CONVERT(CHAR(10), tblTrainings.startDate, 104), '') +
        (CASE WHEN tblTrainings.endDate IS NULL OR CONVERT(CHAR(10), tblTrainings.startDate, 104) = CONVERT(CHAR(10), tblTrainings.endDate, 104) THEN ''
        ELSE  ' ' + ISNULL(CONVERT(CHAR(10), tblTrainings.endDate, 104), '')  END)  AS Seminartermin,
        CAST('' AS NVARCHAR(512)) as userStatus, --dbo.fn_GetTrainingStatusCodeForUserDateRange(tblTargetGroups.mandator_id, tblTrainings.id, v_Users.intUserCn, GETDATE(), NULL, NULL, 0)  as userStatus,
        CAST('' AS NVARCHAR(512))  as statusCode, --dbo.fn_GetTrainingStatusCode(tblTargetGroups.mandator_id, tblTrainings.id, GETDATE()) as statusCode,
        tblTrainings.startDate as training_startDate
        INTO #usersTrainings
        FROM tblUserTrainingStatus
        INNER JOIN tblUsersTargetGroups ON tblUsersTargetGroups.UserCn = tblUserTrainingStatus.user_id AND tblUsersTargetGroups.targetGroup_id IN (SELECT * FROM @targetGroupId)
        INNER JOIN v_Users ON v_Users.intUserCn = tblUsersTargetGroups.UserCn-- tblUserTrainingStatus.user_id
        INNER JOIN tblTrainings ON tblTrainings.id = tblUserTrainingStatus.training_id
        INNER JOIN tblItems ON tblItems.id = tblTrainings.id AND tblItems.deleted IS NULL
        --INNER JOIN tblTrainingTitles ON tblTrainingTitles.id = tblTrainings.trainingTitle_id
        --INNER JOIN tblModuleItems ON tblModuleItems.item_id = tblTrainings.trainingTitle_id --tblTrainingTitles.id
        --INNER JOIN tblEduOffersModules ON tblEduOffersModules.module_id = tblModuleItems.module_id
        --INNER JOIN tblEduOffersTargetGroups ON tblEduOffersTargetGroups.eduOffer_id = tblEduOffersModules.eduOffer_id AND tblEduOffersTargetGroups.targetGroup_id IN (SELECT * FROM @targetGroupId)

        --INNER JOIN tblTargetGroups ON tblTargetGroups.id = tblUsersTargetGroups.targetGroup_id AND tblUsersTargetGroups.targetGroup_id IN (SELECT * FROM @targetGroupId)
        WHERE tblUserTrainingStatus.actionclass_id &lt;&gt; 40 AND v_Users.blocked = 0  --  remove all cancelled trainings and blocked users
        AND (@string IS NULL OR v_Users.descUserCn LIKE '%' + @string + '%')
        AND tblTrainings.trainingTitle_id IN (SELECT item_id FROM  tblModuleItems
        JOIN tblEduOffersModules on tblEduOffersModules.module_id = tblModuleItems.module_id
        JOIN  tblEduOffersTargetGroups ON tblEduOffersTargetGroups.eduOffer_id = tblEduOffersModules.eduOffer_id
        AND tblEduOffersTargetGroups.targetGroup_id IN (SELECT * FROM @targetGroupId)
        JOIN tblUsersTargetGroups ON tblUsersTargetGroups.targetGroup_id = tblEduOffersTargetGroups.targetGroup_id
        AND tblUsersTargetGroups.UserCn = tblUserTrainingStatus.user_id)
        -- AND (tblTargetGroups.mandator_id = @mandator_id)

        -- now add microtrinings for users
        SELECT DISTINCT tblTrainings.id as training_id, -- for joining later with eduoffers
        v_Users.intUserCn,
        v_Users.descUserCn,
        v_Users.Nachname,
        v_Users.Vorname,
        tblTargetGroups.title as ZG,
        tblItems.title + ' ' + ISNULL(CONVERT(CHAR(10), tblTrainings.startDate, 104), '') +
        (CASE WHEN tblTrainings.endDate IS NULL OR CONVERT(CHAR(10), tblTrainings.startDate, 104) = CONVERT(CHAR(10), tblTrainings.endDate, 104) THEN ''
        ELSE  ' ' + ISNULL(CONVERT(CHAR(10), tblTrainings.endDate, 104), '')  END)  AS Seminartermin,
        CAST('' AS NVARCHAR(512)) as userStatus, --dbo.fn_GetTrainingStatusCodeForUserDateRange(tblTargetGroups.mandator_id, tblTrainings.id, v_Users.intUserCn, GETDATE(), NULL, NULL, 0)  as userStatus,
        CAST('' AS NVARCHAR(512))  as statusCode, --dbo.fn_GetTrainingStatusCode(tblTargetGroups.mandator_id, tblTrainings.id, GETDATE()) as statusCode,
        tblTrainings.startDate as training_startDate
        INTO #usersMicrotrainings
        FROM tblUserTrainingStatus
        INNER JOIN tblUsersTargetGroups ON tblUsersTargetGroups.UserCn = tblUserTrainingStatus.user_id AND tblUsersTargetGroups.targetGroup_id IN (SELECT * FROM @targetGroupId)
        INNER JOIN v_Users ON v_Users.intUserCn = tblUsersTargetGroups.UserCn-- tblUserTrainingStatus.user_id
        INNER JOIN tblTrainings ON tblTrainings.id = tblUserTrainingStatus.training_id AND tblTrainings.isMicroTraining = 1
        INNER JOIN tblItems ON tblItems.id = tblTrainings.id AND tblItems.deleted IS NULL
        --INNER JOIN tblTrainingTitles ON tblTrainingTitles.id = tblTrainings.trainingTitle_id
        --INNER JOIN tblModuleItems ON tblModuleItems.item_id = tblTrainings.trainingTitle_id --tblTrainingTitles.id
        --INNER JOIN tblEduOffersModules ON tblEduOffersModules.module_id = tblModuleItems.module_id
        --INNER JOIN tblEduOffersTargetGroups ON tblEduOffersTargetGroups.eduOffer_id = tblEduOffersModules.eduOffer_id AND tblEduOffersTargetGroups.targetGroup_id IN (SELECT * FROM @targetGroupId)

        INNER JOIN tblTargetGroups ON tblTargetGroups.id = tblUsersTargetGroups.targetGroup_id --AND tblUsersTargetGroups.targetGroup_id IN (SELECT * FROM @targetGroupId)
        WHERE tblUserTrainingStatus.actionclass_id &lt;&gt; 40 AND v_Users.blocked = 0  --  remove all cancelled trainings and blocked users
        AND (@string IS NULL OR v_Users.descUserCn LIKE '%' + @string + '%')


        --select count(*)  as 'users-trainings before updating', getdate() from #usersTrainings
        --select * from #usersTrainings
        --now update status
        UPDATE #usersTrainings
        SET userStatus = dbo.fn_GetTrainingStatusCodeForUserDateRange(@mandator_id, training_id, intUserCn, GETDATE(), NULL, NULL)
        ,statusCode = dbo.fn_GetTrainingStatusCode(@mandator_id, training_id, GETDATE())
        FROM #usersTrainings


        UPDATE #usersMicrotrainings
        SET userStatus = dbo.fn_GetTrainingStatusCodeForUserDateRange(@mandator_id, training_id, intUserCn, GETDATE(), NULL, NULL)
        ,statusCode = dbo.fn_GetTrainingStatusCode(@mandator_id, training_id, GETDATE())
        FROM #usersMicrotrainings


        --now add the EduOffer and Training Title info (joining eduoffer) without calculating several times status for the same user
        INSERT INTO @Result
        SELECT DISTINCT  descUserCn,
        Nachname,
        Vorname,
        tblTargetGroups.title AS ZG,
        tt.eduOfferTitle,
        tt.triningTitles,
        Seminartermin,
        CASE
        WHEN #TrainingTitles.workflow IS NULL THEN '-'
        ELSE(CASE
        WHEN #TrainingTitles.workflow = 0 THEN 'Pull'
        ELSE(CASE
        WHEN tblTrainings.isMicroTraining = 1 THEN 'Microtraining'
        ELSE 'Push'
        END)
        END)
        END ,
        userStatus,
        statusCode,
        training_startDate
        FROM #usersTrainings
        INNER JOIN tblTrainings ON tblTrainings.id = training_id
        INNER JOIN @TrainingTitles AS #TrainingTitles ON #TrainingTitles.trainingTitle_id = tblTrainings.trainingTitle_id
        INNER JOIN @EduOffersTrainingTitles AS tt ON tt.eduOffer_id = #TrainingTitles.eduOffer_id
        INNER JOIN tblEduOffersTargetGroups ON tblEduOffersTargetGroups.eduOffer_id = tt.eduOffer_id AND tblEduOffersTargetGroups.targetGroup_id IN (SELECT * FROM @targetGroupId)
        INNER JOIN tblUsersTargetGroups ON tblUsersTargetGroups.targetGroup_id = tblEduOffersTargetGroups.targetGroup_id AND tblUsersTargetGroups.UserCn = #usersTrainings.intUserCn
        INNER JOIN tblTargetGroups ON tblTargetGroups.id = tblEduOffersTargetGroups.targetGroup_id AND tblTargetGroups.id IN (SELECT * FROM @targetGroupId) --(@targetGroup IS NULL OR tblEduOffersTargetGroups.targetGroup_id = @targetGroup)

        DROP TABLE #usersTrainings

        INSERT INTO @Result
        SELECT DISTINCT  descUserCn,
        Nachname,
        Vorname,
        ZG,
        NULL, --tt.eduOfferTitle,
        NULL, --tt.triningTitles,
        Seminartermin,
        'Microtraining' AS Seminarart,
        userStatus,
        statusCode,
        training_startDate
        FROM #usersMicrotrainings

        DROP TABLE #usersMicrotrainings

        -- now insert external items
        INSERT INTO @Result
        SELECT DISTINCT v_Users.descUserCn as Kennung ,
        v_Users.Nachname as Name,
        v_Users.Vorname,
        tblTargetGroups.title as ZG,
        NULL AS eduOfferTitle ,
        NULL AS trainingTitles,
        tblItems.title  + ' ' + ISNULL(CONVERT(CHAR(10), tblExternalItems.startDate, 104), '') +
        (CASE WHEN tblExternalItems.endDate IS NULL OR CONVERT(CHAR(10), tblExternalItems.startDate, 104) = CONVERT(CHAR(10), tblExternalItems.endDate, 104) THEN ''
        ELSE  ' ' + ISNULL(CONVERT(CHAR(10), tblExternalItems.endDate, 104), '')  END)
        AS Seminartermin,
        'Externer Baustein' AS Seminarart,
        'nachgetragen' AS userStatus,
        NULL AS statusCode,
        tblExternalItems.startDate
        FROM v_Users
        JOIN tblUsersTargetGroups ON tblUsersTargetGroups.UserCn = v_Users.intUserCn AND tblUsersTargetGroups.targetGroup_id IN (SELECT * FROM @targetGroupId)
        JOIN tblStatusUserItemHistory ON tblStatusUserItemHistory.user_id = tblUsersTargetGroups.UserCn -- v_Users.intUserCn
        JOIN tblExternalItems ON tblExternalItems.id = tblStatusUserItemHistory.item_id
        JOIN tblItems ON tblItems.id = tblExternalItems.id
        AND tblItems.itemType_id = 8
        AND tblItems.mandator_id = @mandator_id
        AND tblItems.deleted IS NULL
        JOIN tblTargetGroups ON tblTargetGroups.id = tblUsersTargetGroups.targetGroup_id
        WHERE (@string IS NULL OR v_Users.descUserCn LIKE '%' + @string + '%')
        ORDER BY Name, Vorname, Seminarart, tblExternalItems.startdate DESC

        DECLARE @ResultBasedOnTTandTE TABLE(Kennung NVARCHAR(256),
        Name NVARCHAR(256),
        Vorname NVARCHAR(256),
        ZG VARCHAR(256),
        eduOfferTitle NVARCHAR(256),
        Zugeordnete_Seminartitel NVARCHAR(MAX),
        Seminartermin NVARCHAR(512),
        Seminarart NVARCHAR(128),
        Teilnehmerstatus NVARCHAR(256),
        Seminarstatus NVARCHAR(256),
        row_num INT)

        INSERT INTO @ResultBasedOnTTandTE
        SELECT Kennung,
        Name,
        Vorname,
        ZG,
        eduOfferTitle,
        CASE  WHEN trainingTitles IS NULL THEN '' ELSE LEFT(trainingTitles, LEN(trainingTitles)-1) END AS Zugeordnete_Seminartitel,
        Seminartermin,
        Seminarart,
        CASE
        WHEN userStatus = 'S30_BOOKED' THEN 'Gebucht'
        WHEN userStatus = 'S50_INVITED' THEN 'Eingeladen'
        WHEN userStatus = 'S55_INVITATION_ACKNOWLEDGED' THEN 'Einladung bestätigt'
        WHEN userStatus = 'S60_CANCELLED' THEN 'Storniert'
        WHEN userStatus = 'S65_TRAINING_CANCELLED' THEN 'Abgesagt'
        WHEN userStatus = 'S82_WAS_PRESENT' THEN 'Anwesenheit bestätigt'
        WHEN userStatus = 'S83_CLOSED' THEN 'Abgeschlossen'
        WHEN userStatus = 'S85_PARTICIPATED_NO_POLLS' THEN 'Teilnahme bestätigt (nicht alle Feedbackbögen ausgeführt)'
        WHEN userStatus = 'S90_PARTICIPATED' THEN 'Teilnahme bestätigt'
        ELSE userStatus
        END AS Teilnehmerstatus,
        CASE
        WHEN SUBSTRING(statusCode, 1, 16) = 'S40_HAS_BOOKINGS' THEN 'Buchungen vorhanden'
        WHEN SUBSTRING(statusCode, 1, 12) = 'S80_FINISHED' THEN 'Durchgeführt'
        WHEN SUBSTRING(statusCode, 1, 10) = 'S83_CLOSED' THEN 'Abgeschlossen'
        WHEN statusCode = 'S65_TRAINING_CANCELLED' THEN 'Abgesagt'
        WHEN SUBSTRING(statusCode, 1, 13) = 'S60_CANCELLED' THEN 'Storniert'
        WHEN SUBSTRING(statusCode, 1, 16) = 'S68_HAS_WAITLIST'  THEN 'Warteliste möglich'
        WHEN SUBSTRING(statusCode, 1, 8) = 'S70_FULL' THEN 'Voll belegt'
        WHEN SUBSTRING(statusCode, 1, 11) = 'S50_INVITED' THEN 'Eingeladen'
        ELSE statusCode
        END AS Seminarstatus,
        ROW_NUMBER() OVER (PARTITION BY Kennung, trainingTitles, Seminartermin ORDER BY Kennung) AS row_num
        FROM @Result
        WHERE userStatus NOT IN ('S70_FULL', 'S20_BOOKABLE', 'S25_EXPIRED', 'S15_NO_EVENT_ASSIGNED', 'S27_IS_WAITING')
        ORDER BY ZG, Name, Vorname, Seminarart DESC, eduOfferTitle, trainingStart DESC

        SELECT Kennung, Name, Vorname, ZG, eduOfferTitle AS 'zugeordnete Bildungsangebote' , Zugeordnete_Seminartitel AS 'zugeordnete Seminartitel', Seminartermin, Seminarart, Teilnehmerstatus, Seminarstatus  FROM
        @ResultBasedOnTTandTE WHERE row_num = 1

      </command>
    </Report>
  </Reports>
  <Parameters>
    <Parameter id="a785aecc-668a-4609-9613-394bd4d708c2" isSystem="True" name="Mandant" reportParameterType_id="6b8fa242-5449-45b3-a81a-65a7e5e3b51d" queryParameterName="@mandator_id" />
    <Parameter id="35ceb0d3-29e6-4108-910a-89e858dda847" isSystem="False" name="Auswahl Target Group" reportParameterType_id="dbbd7bc6-a373-4ddc-b6a5-f8cbe242217d" queryParameterName="@targetGroupId" />
    <Parameter id="c34dbe08-0158-4ad3-9e5d-9b603447c72a" isSystem="True" name="Text" reportParameterType_id="6e221a70-58e9-46eb-b028-181b9983b2f6" queryParameterName="@string" />
  </Parameters>
  <ParameterTypes>
    <ParameterType id="6b8fa242-5449-45b3-a81a-65a7e5e3b51d" isSystem="True" name="Mandator" datatype="Mandator" dataValueField="" dataTextField="" />
    <ParameterType id="dbbd7bc6-a373-4ddc-b6a5-f8cbe242217d" isSystem="False" name="Auswahlliste Target Groups" datatype="IntegerDDL" dataValueField="id" dataTextField="title">
      <query>
        SELECT id,
        title
        FROM tblTargetGroups
        WHERE(mandator_id = @mandator_id)
        AND (EXISTS(
        SELECT *
        FROM v_Users
        WHERE intUserCn = @current_user_id AND securityId = 100)
        OR EXISTS(
        SELECT *
        FROM tblTargetGroupManagers
        WHERE tblTargetGroupManagers.user_id = @current_user_id
        AND tblTargetGroupManagers.targetGroup_id = tblTargetGroups.id)
        OR EXISTS(SELECT *
        FROM tblRolesFunctions
        JOIN tblRoles ON tblRoles.id = tblRolesFunctions.role_id
        JOIN tblFunctions ON tblFunctions.id = tblRolesFunctions.function_id
        JOIN v_Users ON v_Users.intUserCn = @current_user_id
        WHERE tblFunctions.shortcut = 'FcnIsAuthorizedForAllTGs' AND tblRoles.id = v_Users.SecurityID))
        AND defaultforlibrary = 0
        ORDER BY title

      </query>
      <Parameters>
        <Parameter id="a785aecc-668a-4609-9613-394bd4d708c2" isRequired="False" allowMultiSelect="False" name="Mandant" contextName="Mandant" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
      </Parameters>
    </ParameterType>
    <ParameterType id="6e221a70-58e9-46eb-b028-181b9983b2f6" isSystem="True" name="String" datatype="String" dataValueField="" dataTextField="" />
  </ParameterTypes>
</ReportsExport>