﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
  <Reports>
    <Report id="3fc31dbb-7fc2-40df-b289-47dbb64d5a75" codekey="Automatisch_Bildungszeitkorrektur" categoryCodekey="CreditPoints" name="Automatisch-Bildungszeitkorrektur" description="Die Bildungszeit soll bei Usern automatisch auf Basis von bestimmten Usermerkmalen nachberechnet werden (Mindestkenntnisse seit oder Sachkunde seit).">
      <MetaData created="2020-07-13T12:29:32" createdBy="HUKeLearning, Administrator (Administrator)" createdBy_user_id="243" modified="2020-07-20T14:30:02" modifiedBy="HUKeLearning, Administrator (Administrator)" modifiedBy_user_id="243" />
      <ExecutionDetails format="TableResult" commandType="SqlCommandOrQuery" exportHandler="" adminControl="" exportMultipleTablesToSheets="False" datesWithTime="False" extraParams="" />
      <Mandators mandatorMode="OnlyOwner" mandator_id="f7a65c38-6ce4-41c9-aaf7-c6111449f0f0" mandatorName="HUKeLearning" isStandard="False" isUsedByMenu="False" />
      <Parameters>
        <Parameter id="7a721121-2d2e-4a3d-b9e6-c6aa238e7ab2" isRequired="True" allowMultiSelect="False" name="Auswahl (ja/nein)" contextName="Die Manipulation ausgeführt werden soll (ja/nein)" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
      </Parameters>
      <Roles>
        <Role id="90" />
      </Roles>
      <command>
        --DECLARE @current_mandator_id UNIQUEIDENTIFIER = 'F7A65C38-6CE4-41C9-AAF7-C6111449F0F0'
        --DECLARE @current_user_id INT
        --DECLARE @selection_yesno BIT

        IF OBJECT_ID('tempdb..#currentUserItemScores') is not null
        DROP TABLE #currentUserItemScores
        IF OBJECT_ID('tempdb..#tmpUserHistory') is not null
        DROP TABLE #tmpUserHistory
        IF OBJECT_ID('tempdb..#automaticScoreStatuses') is not null
        DROP TABLE #automaticScoreStatuses

        SELECT uis.user_id, uis.item_id, uis.educationTime
        INTO #currentUserItemScores
        FROM tblUserItemScores uis
        LEFT JOIN tblStatusUserItemHistory suih
        ON suih.id = uis.status_id
        WHERE suih.overrideDate IS NULL
        AND suih.voluntaryOverrideDate IS NULL

        SELECT ROW_NUMBER() OVER
        (
        PARTITION BY suih.item_id, suih.user_id
        ORDER BY suih.startDate DESC
        ) position,
        users.intUserCn AS user_id,
        users.Vorname AS first_name,
        users.Nachname AS last_name,
        users.descUserCn AS user_name,
        ISNULL(items.titleForLearners, items.title) AS title,
        items.itemType_id,
        items.educationTime,
        suih.startDate AS lastGreenStatus,
        CASE
        WHEN uca.customAttribute16 IS NOT NULL
        THEN CONVERT(DATETIME,uca.customAttribute16)
        ELSE NULL
        END AS minimumKnowledgeDate,
        CASE
        WHEN uca.customAttribute8 IS NOT NULL
        THEN CONVERT(DATETIME,uca.customAttribute8)
        ELSE NULL
        END AS expertiseDate,
        CASE
        WHEN uca.customAttribute16 IS NOT NULL OR uca.customAttribute8 IS NOT NULL
        THEN 1
        ELSE 0
        END AS isRelevant,
        qi.qualification_id,
        suih.id AS status_id,
        items.id AS item_id
        INTO #tmpUserHistory
        FROM tblStatusUserItemHistory suih
        INNER JOIN tblItems items
        ON suih.item_id = items.id
        INNER JOIN v_Users users
        ON users.intUserCn = suih.user_id
        INNER JOIN tblQualificationsItems qi
        ON qi.item_id = items.id
        INNER JOIN tblUserCustomAttributes AS uca
        ON uca.user_id = users.intUserCn
        INNER JOIN tblObjects obj
        ON obj.id = qi.qualification_id
        WHERE users.mandator_id = @current_mandator_id
        AND suih.overrideDate IS NULL
        AND suih.voluntaryOverrideDate IS NULL
        AND suih.status = 2
        AND NOT EXISTS
        (
        SELECT 1
        FROM #CurrentUserItemScores cuis
        WHERE cuis.item_id = suih.item_id
        AND cuis.user_id = suih.user_id
        )
        AND EXISTS
        (
        SELECT 1
        FROM v_UserQualifications uq
        WHERE uq.id = qi.qualification_id
        AND uq.UserCn = users.intUserCn
        )
        /* take last status for user and training */
        AND
        (
        /* Not a training */
        items.itemType_id &lt;&gt; 2
        OR
        NOT EXISTS
        (
        SELECT
        *
        FROM
        tblStatusUserItemHistory AS t2
        WHERE
        suih.id &lt;&gt; t2.id
        AND suih.item_id = t2.item_id
        AND suih.user_id = t2.user_id
        AND suih.startDate &lt; t2.startDate
        AND suih.status = 2
        )
        )
        AND obj.deleted IS NULL             -- not deleted qualifications

        SELECT user_id,
        first_name,
        last_name,
        user_name,
        title,
        itemType_id,
        educationTime,
        lastGreenStatus,
        minimumKnowledgeDate,
        expertiseDate,
        CASE
        WHEN COALESCE(minimumKnowledgeDate, GETDATE()) &lt; COALESCE(expertiseDate, GETDATE())  
				THEN minimumKnowledgeDate
			  ELSE expertiseDate 
		   END AS relevantComparaisonDate,
		   qualification_id,
		   status_id,
		   item_id
	INTO #automaticScoreStatuses
	FROM  #tmpUserHistory AS userHistory
	WHERE position = 1			--last green status
		AND isRelevant = 1      -- has value on minimumKnowledgeDate or expertiseDate

	IF(@selection_yesno = 1)
	BEGIN
		DECLARE @user_id INT;
		DECLARE @executed_user_id INT;
		DECLARE @item_id UNIQUEIDENTIFIER;
		DECLARE @status_id UNIQUEIDENTIFIER;
		DECLARE @item_status INT;
		DECLARE @user_name NVARCHAR(64);
		DECLARE @description NVARCHAR(MAX);
		DECLARE @educationTime INT;
		DECLARE	@title nvarchar(255);
		DECLARE @executionTimeMS INT;
		DECLARE @timestamp DATETIME;
		DECLARE @returnLogId BIT;

		SET @item_status = 2;
		SET @executionTimeMS = 0;
		SET @returnLogId = 0;
		SET @executed_user_id = dbo.fn_GetAutoScriptUserId(@current_mandator_id);

		DECLARE @cur CURSOR
		SET @cur = CURSOR STATIC READ_ONLY FORWARD_ONLY FOR
		SELECT user_id,
				user_name,
				item_id,
				title,
				status_id,
				educationTime
		FROM #automaticScoreStatuses
			WHERE relevantComparaisonDate &lt; lastGreenStatus
		OPEN @cur
		FETCH NEXT FROM @cur 
			INTO @user_id, @user_name, @item_id, @title, @status_id, @educationTime
		WHILE (@@FETCH_status &lt;&gt; -1)
        BEGIN

        SET @description = 'ET ''' + CAST(ISNULL(@educationTime, 0) AS nvarchar(10)) + ' min.'' for user ''' + @user_name + ''' for item ''' + @title + ''' automatically created.';
        SET @timestamp = GETDATE();

        EXEC sp_ApplyUserCreditPoints @user_id = @user_id,
        @item_id = @item_id,
        @createdBy_user_id = @current_user_id,
        @item_status = @item_status,
        @status_id = @status_id

        EXEC sp_CreateAction @mandator_id = @current_mandator_id,
        @user_id = @executed_user_id,
        @action_id = 131,  -- AutomaticCorrectionAddEducationTime = 131
        @executionTimeMS = @executionTimeMS,
        @timestamp = @timestamp,
        @effectedObject_id = @item_id,
        @effectedObjectInt_id = @user_id,
        @description = @description,
        @returnLogId = @returnLogId


        FETCH NEXT FROM @cur
        INTO @user_id, @user_name, @item_id, @title, @status_id, @educationTime

        END

        CLOSE @cur
        DEALLOCATE @cur
        END

        SELECT user_name AS 'Benutzer-Kennung',
        first_name AS 'Vorname',
        last_name AS 'Nachname',
        title AS 'Baustein Titel',
        CASE WHEN itemType_id = 0 THEN 'Test'
        WHEN itemType_id = 1 THEN 'Lernprogramm'
        WHEN itemType_id = 2 THEN 'Seminar'
        WHEN itemType_id = 3 THEN 'Umfrage'
        WHEN itemType_id = 4 THEN 'Forum'
        WHEN itemType_id = 5 THEN 'Datenaustausch'
        WHEN itemType_id = 6 THEN 'Dokument'
        WHEN itemType_id = 7 THEN 'Link'
        WHEN itemType_id = 8 THEN 'Seminartitel'
        WHEN itemType_id = 9 THEN 'Video'
        WHEN itemType_id = 15 THEN 'Feedback'
        WHEN itemType_id = 1001 THEN 'Module'
        ELSE 'Unbekannter Baustein'
        END AS 'Baustein Typ',
        educationTime AS 'Bildungszeiten',
        lastGreenStatus AS 'letzter Grün-Status',
        minimumKnowledgeDate AS 'Mindestkenntnisse',
        expertiseDate AS 'Sachkunde'
        FROM  #automaticScoreStatuses
        WHERE relevantComparaisonDate &lt; lastGreenStatus
	
	IF OBJECT_ID('tempdb..#currentUserItemScores') is not null
		DROP TABLE #currentUserItemScores
	IF OBJECT_ID('tempdb..#tmpUserHistory') is not null
		DROP TABLE #tmpUserHistory
	IF OBJECT_ID('tempdb..#automaticScoreStatuses') is not null
		DROP TABLE #automaticScoreStatuses
      </command>
    </Report>
  </Reports>
  <Parameters>
    <Parameter id="7a721121-2d2e-4a3d-b9e6-c6aa238e7ab2" isSystem="True" name="Auswahl (ja/nein)" reportParameterType_id="411ec93b-ab23-41ba-91d6-e7dc0235b5af" queryParameterName="@selection_yesno" />
  </Parameters>
  <ParameterTypes>
    <ParameterType id="411ec93b-ab23-41ba-91d6-e7dc0235b5af" isSystem="True" name="Boolean" datatype="StringDDL" dataValueField="Value" dataTextField="Text">
      <query>
        SELECT 0 AS Value, 'Nein' AS Text
        UNION
        SELECT 1 AS Value, 'Ja' AS Text
      </query>
    </ParameterType>
  </ParameterTypes>
</ReportsExport>