﻿<?xml version="1.0" encoding="utf-8"?>
<ReportsExport>
  <Reports>
    <Report id="4f34d66a-8c18-43a4-86a9-efd81a11053d" codekey="ModuleVersioning" categoryCodekey="Testing" name="Module Versioning Overview" description="Report for checking versioning of the module">
      <MetaData created="2013-11-12T16:44:34" createdBy="Administrator VIWIS (Administrator)" createdBy_user_id="3" modified="2014-08-04T12:39:17" modifiedBy="Administrator VIWIS" />
      <ExecutionDetails format="TableResult" commandType="SqlCommandOrQuery" exportHandler="" adminControl="" exportMultipleTablesToSheets="False" datesWithTime="False" extraParams="" />
      <Mandators mandatorMode="OnlyOwner" mandator_id="cf85efc9-150b-4eee-8c20-929a112b658c" isStandard="False" isUsedByMenu="False" />
      <Parameters>
        <Parameter id="22d867d1-0fa2-483a-92be-17d91508ea87" isRequired="True" name="Modul" contextName="Modul" defaultValue="" renderHint="Undefined" disableParameter="DontDisable" />
        <Parameter id="17e1339a-f602-4ddb-a763-50b517d774de" isRequired="True" name="Wahrheitswert" contextName="Nur aktuelle Version" defaultValue="1" renderHint="Undefined" disableParameter="DontDisable" />
      </Parameters>
      <Roles />
      <command>
         --DECLARE @module_id UNIQUEIDENTIFIER = 'C793BB67-8258-4824-9443-4D86963594C9' /*'29C6E80F-DF5C-4F5F-B8B1-12638B91966F'*/
		--DECLARE @boolean INT = 1;

        /*showing current deault information*/
        SELECT tblItems.id,
        title,
        titleForLearners,
        educationTime
        FROM tblItems INNER JOIN tblModules ON tblModules.id = tblItems.id
        WHERE tblItems.id = @module_id

        DECLARE @colName NVARCHAR(100)
        DECLARE @maxItemVersion TABLE(item_id UNIQUEIDENTIFIER,
        version INT)

        DECLARE @maxVersion INT
        SELECT @maxVersion = MAX(mainVersion)
        FROM tblVersionMap
        WHERE id = @module_id
        /*this is the current module item definition*/
        SELECT @maxVersion AS 'Current ModuleStructure Version',
        tblItemTypes.codekey,
        tblItems.id,
        tblItems.version AS 'Itemversion',
        tblItems.title,
        tblItems.titleForLearners
        FROM tblModuleItems INNER JOIN tblItems ON tblItems.id = tblModuleItems.item_id
        INNER JOIN tblItemTypes ON tblItemTypes.id = tblItems.itemType_id
        WHERE module_id = @module_id
        ORDER BY tblModuleItems.sortOrder

        IF ISNULL(@boolean,0) &lt;&gt; 1 
	BEGIN  
        SELECT * INTO #tmpHelper
        FROM tblVersionMap
        WHERE id = @module_id AND tableName = 'tblModuleItemsVersions'

        /* version of module, items themselves, item version*/
        DECLARE @moduleVersion INT
        DECLARE @nextModuleCreateDate DATETIME
        DECLARE @curModuleCreateDate DATETIME
        DECLARE modCursor CURSOR
        FOR SELECT DISTINCT mainVersion,
        created
        FROM #tmpHelper
        ORDER BY mainVersion DESC
        OPEN modCursor
        FETCH modCURSOR INTO @moduleVersion, @curModuleCreateDate
        WHILE @@FETCH_STATUS = 0
        BEGIN
        IF @maxVersion &gt; @moduleVersion
        BEGIN
        CREATE TABLE #tmpModuleVersionItems(modVersion INT NULL,
        codekey NVARCHAR(20),
        Itemversion INT,
        title NVARCHAR(200),
        titelForLearners NVARCHAR(200),
        sortOrder INT,
        item_id UNIQUEIDENTIFIER)
        SET @colName = 'ModuleStructure Version ' + CAST(@moduleVersion AS NVARCHAR(20))
        /* clear table before inserting items*/
        TRUNCATE TABLE #tmpModuleVersionItems EXEC tempdb..sp_rename '#tmpModuleVersionItems.modVersion', @colName, 'COLUMN'
        INSERT INTO #tmpModuleVersionItems
        SELECT NULL,
        tblItemTypes.codekey,
        tblItemVersions.version,
        tblItemVersions.title,
        tblItemVersions.titleForLearners,
        tblModuleItemsVersions.sortOrder,
        tblItemVersions.id
        FROM #tmpHelper AS Modules INNER JOIN tblModuleItemsVersions ON tblModuleItemsVersions.module_id = Modules.id
        AND tblModuleItemsVersions.version = Modules.subVersion
        INNER JOIN tblItemVersions ON tblItemVersions.id = tblModuleItemsVersions.item_id
        INNER JOIN tblItemTypes ON tblItemTypes.id = tblItemVersions.itemType_id
        WHERE module_id = @module_id AND Modules.mainVersion = @moduleVersion
        ORDER BY tblModuleItemsVersions.sortOrder

        /*we have to find all items only which were created or modifed in the daterange between this version*/
        SET @nextModuleCreateDate = NULL
        IF EXISTS(SELECT created
        FROM tblVersionMap
        WHERE id = @module_id
        AND mainVersion = @moduleVersion + 1
        AND tableName = 'tblModuleItemsVersions')
        SELECT @nextModuleCreateDate = created
        FROM tblVersionMap
        WHERE id = @module_id
        AND mainVersion = @moduleVersion + 1
        AND tableName = 'tblModuleItemsVersions'


        IF @nextModuleCreateDate IS NOT NULL
        BEGIN
        SELECT A.*
        FROM #tmpModuleVersionItems AS A INNER JOIN tblItemVersions ON tblItemVersions.id = A.item_id AND A.Itemversion = tblItemVersions.version
        WHERE(modified IS NULL OR modified &lt; @nextModuleCreateDate)
        ORDER BY sortOrder, Itemversion DESC
        END
        ELSE
        BEGIN
        SELECT DISTINCT A.*
        FROM #tmpModuleVersionItems AS A INNER JOIN tblItemVersions ON tblItemVersions.id = A.item_id AND A.Itemversion = tblItemVersions.version
        WHERE Itemversion &gt;= (
        SELECT MAX(version)
        FROM tblItemVersions
        WHERE id = A.item_id AND ISNULL(modified, created) &lt; @curModuleCreateDate)
        AND (modified &gt; @curModuleCreateDate
        OR (created &lt; @curModuleCreateDate AND modified IS NULL)
        OR (Itemversion = 0 AND modified &lt; @curModuleCreateDate))
        ORDER BY sortOrder, Itemversion DESC
        END
        DROP TABLE #tmpModuleVersionItems
        END
        FETCH modCURSOR INTO @moduleVersion, @curModuleCreateDate
        END
        CLOSE modCursor
        DEALLOCATE modCursor
        DROP TABLE #tmpHelper
        END
      </command>
    </Report>
  </Reports>
  <Parameters>
    <Parameter id="22d867d1-0fa2-483a-92be-17d91508ea87" isSystem="True" name="Modul" reportParameterType_id="b141d3d7-0284-490f-8497-0345ae800ede" queryParameterName="@module_id" />
    <Parameter id="17e1339a-f602-4ddb-a763-50b517d774de" mandator_id="cf85efc9-150b-4eee-8c20-929a112b658c" isSystem="False" name="Wahrheitswert" reportParameterType_id="411ec93b-ab23-41ba-91d6-e7dc0235b5af" queryParameterName="@boolean" />
  </Parameters>
  <ParameterTypes>
    <ParameterType id="b141d3d7-0284-490f-8497-0345ae800ede" isSystem="True" name="Module" datatype="Module" dataValueField="" dataTextField="" />
    <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>