﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
  <Reports>
    <Report id="4427f856-5d13-4c9c-b8b4-516074adcb96" codekey="hem_waschstrassencheck_archivierung" categoryCodekey="SpecialPurpose" name="WBT Waschstraßencheck Archivierung" description="Dieser Report archiviert die Daten für die Statusspeicherung für das übergebenen WBT. Dabei werden nach erfolgreicher archivierung die Statusinformationen gelöscht.">
      <MetaData created="2021-02-10T17:19:44" createdBy="HEM-Portal, Administrator (Administrator)" createdBy_user_id="13774" modified="2021-02-11T11:46:27" modifiedBy="HEM-Portal, Administrator (Administrator)" modifiedBy_user_id="13774" />
      <ExecutionDetails format="TableResult" commandType="SqlCommandOrQuery" exportHandler="" adminControl="" exportMultipleTablesToSheets="False" datesWithTime="False" extraParams="" />
      <Mandators mandatorMode="IncludeMandators" mandator_id="a385483a-e451-4ace-abd2-37b0a7a22980" mandatorName="HEM-Portal" isStandard="False" isUsedByMenu="False" />
      <Parameters>
        <Parameter id="a3916c66-34e4-4a8c-a399-12e038af0e93" isRequired="False" allowMultiSelect="False" name="Lernprogramm" contextName="Lernprogramm" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
      </Parameters>
      <Roles>
        <Role id="90" />
      </Roles>
      <command>--SELECT * FROM tblStatusUserItemHistory

--DECLARE @theme_id UNIQUEIDENTIFIER
--SET @theme_id = '252f6ae9-0745-4d9c-90da-10451e7faf3e'

-- checking for archive table
IF OBJECT_ID('dbo.HEM_ARCHIVE_tblSCORMData') IS NULL
BEGIN
	-- create table for archive information
	CREATE TABLE [dbo].[HEM_ARCHIVE_tblSCORMData](
		[id] [UNIQUEIDENTIFIER] NOT NULL,
		[name] [NVARCHAR](50) NOT NULL,
		[variable_id] [UNIQUEIDENTIFIER] NOT NULL,
		[data] [VARCHAR](4096) NOT NULL,
		[timeStamp] [DATETIME] NULL,
		[session_id] [UNIQUEIDENTIFIER] NULL,
		[theme_id] [UNIQUEIDENTIFIER] NULL,
		[scorm_id] [NVARCHAR](256) NULL,
		[user_id] [INT] NOT NULL,
		executionDate DATETIME,
		group_id UNIQUEIDENTIFIER NULL)
END
--DROP TABLE dbo.HEM_ARCHIVE_tblStatusUserItemHistory
IF OBJECT_ID('dbo.HEM_ARCHIVE_tblStatusUserItemHistory') IS NULL
BEGIN
	-- create table for archive information
	CREATE TABLE [dbo].[HEM_ARCHIVE_tblStatusUserItemHistory](
	[id] [uniqueidentifier] NOT NULL,
	[user_id] [int] NOT NULL,
	[item_id] [uniqueidentifier] NOT NULL,
	[status] [int] NOT NULL,
	[startDate] [datetime] NOT NULL,
	[endDate] [datetime] NULL,
	[session_id] [uniqueidentifier] NULL,
	[item_version] [int] NULL,
	[percentage] [float] NULL,
	[overrideDate] [datetime] NULL,
	[voluntaryOverrideDate] [datetime] NULL,
	[created] [datetime2](7) NOT NULL,
	[createdBy_user_id] [int] NOT NULL,
	[createdReason_id] [int] NOT NULL,
	executionDate DATETIME)
END

-- we will copy the current data into the archive table
-- including the DAY when copy process was executed, keeping the session information and using another grouping column
DECLARE @query NVARCHAR(MAX)
DECLARE @date DATETIME;
SET @date = DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()));

--getting data from status due of version information and percentage value
SET @query = 'INSERT INTO dbo.HEM_ARCHIVE_tblStatusUserItemHistory 
			(
				[id]
				,[user_id]
				,[item_id]
				,[status]
				,[startDate]
				,[endDate]
				,[session_id]
				,[item_version]
				,[percentage]
				,[overrideDate]
				,[voluntaryOverrideDate]
				,[created]
				,[createdBy_user_id]
				,[createdReason_id]
				,[executionDate]
			)
			SELECT 
				[id]
			   ,[user_id]
			   ,[item_id]
			   ,[status]
			   ,[startDate]
			   ,[endDate]
			   ,[session_id]
			   ,[item_version]
			   ,[percentage]
			   ,[overrideDate]
			   ,[voluntaryOverrideDate]
			   ,[created]
			   ,[createdBy_user_id]
			   ,[createdReason_id], 
			   @date FROM tblStatusUserItemHistory WHERE item_id = @theme_id'
EXEC sp_executesql @query, N'@theme_id UNIQUEIDENTIFIER, @date DATETIME', @theme_id, @date

SET @query = 'INSERT INTO dbo.HEM_ARCHIVE_tblSCORMData SELECT *, @date, NULL FROM tblSCORMData WHERE theme_id = @theme_id'
EXEC sp_executesql @query, N'@theme_id UNIQUEIDENTIFIER, @date DATETIME', @theme_id, @date


-- setting the grouping information for the user and theme
SET @query = '
CREATE TABLE #hlp
(
	id UNIQUEIDENTIFIER,
	theme_id UNIQUEIDENTIFIER,
	user_id INT
)
;WITH CTE(id, theme_id, user_id)
AS
(
	SELECT NEWID() AS id, theme_id, userId AS user_id  FROM tblSCORMData
	WHERE theme_id = @theme_id
	GROUP BY theme_id, userId
)
INSERT INTO #hlp SELECT * FROM CTE

UPDATE dbo.HEM_ARCHIVE_tblScormData
SET group_id = #hlp.id
FROM #hlp INNER JOIN dbo.HEM_ARCHIVE_tblScormData ON dbo.HEM_ARCHIVE_tblScormData.user_id = #hlp.user_id AND dbo.HEM_ARCHIVE_tblScormData.theme_id = #hlp.theme_id

DROP TABLE #hlp
'
EXEC sp_executesql @query, N'@theme_id UNIQUEIDENTIFIER', @theme_id

DECLARE @cur CURSOR
DECLARE @status_id UNIQUEIDENTIFIER
DECLARE @item_id UNIQUEIDENTIFIER
DECLARE @user_id INT
SET @cur = CURSOR STATIC READ_ONLY FORWARD_ONLY
FOR SELECT DISTINCT tblStatusUserItemHistory.id, tblStatusUserItemHistory.user_id, item_id FROM tblStatusUserItemHistory
INNER JOIN dbo.HEM_ARCHIVE_tblSCORMData ON dbo.HEM_ARCHIVE_tblSCORMData.user_id = tblStatusUserItemHistory.user_id
AND dbo.HEM_ARCHIVE_tblSCORMData.theme_id = tblStatusUserItemHistory.item_id
WHERE endDate IS NULL AND item_id = @theme_id AND executionDate = @date
OPEN @cur
FETCH NEXT FROM @cur INTO @status_id, @user_id, @item_id
WHILE (@@FETCH_status &lt;&gt; -1)
BEGIN
	PRINT 'Removing Status ' + CAST(@status_id AS NVARCHAR(40)) + ' for User = ' + CAST(@user_id AS NVARCHAR(100)) + ' AND Item ' + CAST(@item_id AS NVARCHAR(40)) 
	BEGIN TRY
		EXEC sp_RemoveUserItemStatus @status_id = @status_id
		PRINT 'SUCCESS: Removing Status ' + CAST(@status_id AS NVARCHAR(40)) + ' for User = ' + CAST(@user_id AS NVARCHAR(100)) + ' AND Item ' + CAST(@item_id AS NVARCHAR(40)) 
	END TRY
	BEGIN CATCH
		PRINT 'FAILED:  Removing Status ' + CAST(@status_id AS NVARCHAR(40)) + ' for User = ' + CAST(@user_id AS NVARCHAR(100)) + ' AND Item ' + CAST(@item_id AS NVARCHAR(40)) 
	END CATCH
    FETCH NEXT FROM @cur INTO @status_id, @user_id, @item_id
END
CLOSE @cur
DEALLOCATE @cur

--printing stored data from today
IF OBJECT_ID('dbo.HEM_ARCHIVE_tblSCORMData') IS NOT NULL
BEGIN
	SET @query = 'SELECT * FROM dbo.HEM_ARCHIVE_tblSCORMData WHERE executionDate=@date ORDER BY theme_id, user_id'
	EXEC sp_executesql @query, N'@date DATETIME', @date
END</command>
    </Report>
  </Reports>
  <Parameters>
    <Parameter id="a3916c66-34e4-4a8c-a399-12e038af0e93" isSystem="True" name="Lernprogramm" reportParameterType_id="9b1ab1b2-f839-433b-8da7-02781b96def7" queryParameterName="@theme_id" />
  </Parameters>
  <ParameterTypes>
    <ParameterType id="9b1ab1b2-f839-433b-8da7-02781b96def7" isSystem="True" name="Theme" datatype="Theme" dataValueField="" dataTextField="" />
  </ParameterTypes>
</ReportsExport>