﻿IF OBJECT_ID('[dbo].[sp_DeleteOrarendIdoszak]') IS NOT NULL BEGIN
  DROP PROCEDURE [dbo].[sp_DeleteOrarendIdoszak]
END  
GO

CREATE PROCEDURE [dbo].[sp_DeleteOrarendIdoszak]
	@start				datetime,
	@end				datetime,
	@intezmenyId		int,
	@tanevId			int,
	@tanarId			int = null,
	@osztalyCsoportId	int = null,
	@hetirendId			int = null,
	@hetNapjaId			int = null,
	@oraszam			int = null
AS
BEGIN
	BEGIN TRY
    SET NOCOUNT ON
    SET XACT_ABORT ON

	DECLARE @startDate nvarchar(200);
		SET @startDate = CONVERT(nvarchar(200), @start, 112)

	DECLARE @endDate nvarchar(200);
		SET @endDate = CONVERT(nvarchar(200), @end, 112)

	DECLARE @startDatePlus nvarchar(200);
		SET @startDatePlus = CONVERT(nvarchar(200), DATEADD(day,1,@start), 112)

	DECLARE @endDatePlus nvarchar(200);
		SET @endDatePlus = CONVERT(nvarchar(200), DATEADD(day,1,@end), 112)

	DECLARE @sql nvarchar(MAX);
	DECLARE @where nvarchar(MAX);


	-- A Where feltételek extra elemei
	SET @where =	N'
						AND TOROLT = ''F''
						AND C_INTEZMENYID = @intezmenyId
						AND C_TANEVID = @tanevId';

	IF (@tanarId IS NOT NULL)
		BEGIN
			SET @where += N' AND C_TANARID = @tanarId';
		END
	
	IF (@osztalyCsoportId IS NOT NULL)
		BEGIN
			SET @where += N' AND C_OSZTALYCSOPORTID = @osztalyCsoportId';
		END
	
	IF (@hetirendId IS NOT NULL)
		BEGIN
			SET @where += N' AND C_HETIREND = @hetirendId';
		END
	
	IF (@hetNapjaId IS NOT NULL)
		BEGIN
			SET @where += N' AND C_HETNAPJA = @hetNapjaId';
		END
	
	IF (@oraszam IS NOT NULL)
		BEGIN
			SET @where += N' AND C_ORASZAM = @oraszam';
		END


	-- Azon elemek törlése, amik teljesen az időszakban vannak (C_ORAERVENYESSEGKEZDETE >; C_ORAERVENYESSEGVEGE <)
	SET @sql =	N'
					UPDATE T_ORARENDIORA 
						SET TOROLT = ''T''
					WHERE 
							C_ORAERVENYESSEGKEZDETE >= ''' + @startDate + N'''
						AND C_ORAERVENYESSEGVEGE <= ''' + @endDatePlus + N''' ';
	SET @sql += @where;

	-- Azon elemek zárásának beállítása, amik az időszakban véget érnek (C_ORAERVENYESSEGKEZDETE <; C_ORAERVENYESSEGVEGE <)
	SET @sql +=	N'
					UPDATE T_ORARENDIORA 
						SET C_ORAERVENYESSEGVEGE = ''' + @startDatePlus + N'''
					WHERE 
							C_ORAERVENYESSEGKEZDETE <= ''' + @startDate + N'''
						AND C_ORAERVENYESSEGVEGE >= ''' + @startDate + N'''
						AND C_ORAERVENYESSEGVEGE <= ''' + @endDatePlus + N''' ';
	SET @sql += @where;

	-- Azon elemek zárásának beállítása, amik az időszakban kezdődnek (C_ORAERVENYESSEGKEZDETE >; C_ORAERVENYESSEGVEGE >)
	SET @sql +=	N'
					UPDATE T_ORARENDIORA 
						SET C_ORAERVENYESSEGKEZDETE = ''' + @endDate + N'''
					WHERE 
							C_ORAERVENYESSEGKEZDETE >= ''' + @startDate + N'''
						AND C_ORAERVENYESSEGKEZDETE <= ''' + @endDate + N'''
						AND C_ORAERVENYESSEGVEGE > ''' + @endDatePlus + N'''';
	SET @sql += @where;

	-- Azon elemek szétszedése, amik átnyúlnak az időszakon (C_ORAERVENYESSEGKEZDETE <; C_ORAERVENYESSEGVEGE >)
	SET @sql +=	N'
					INSERT INTO T_ORARENDIORA (
						C_DIFFERENCIALT, C_DRAMA, C_HETIREND, C_HETNAPJA, C_IKTTANORA, C_IPRTANORA, C_KOOPERATIV, C_MERES, C_MINDENNAPOSTESTNEVELES, C_NEMSZAKRENDSZERUORA, C_NEMZETISEGIORA, C_ORASZAM,
						C_SORSZAMOZANDO, C_TAMOPORA, C_TULORA, C_BONTOTT, C_ORAERVENYESSEGKEZDETE, C_ORAERVENYESSEGVEGE, C_PARHUZAMOSORA, C_TIOP12, C_ORAKEZDETE, C_ORAVEGE, C_TANORANKIVULIFOGLALKOZAS,
						C_IMPORTALT, C_CSENGETESIRENDID, C_CSENGETESIRENDORAID, C_TEREMID, C_FOGLALKOZASID, C_TANTARGYID, C_OSZTALYCSOPORTID, C_TANARID, C_ORATULAJDONOSID, C_INTEZMENYID, C_TANEVID, 
						TOROLT, SERIAL, C_ORARENDIORAGROUPID
						)
					SELECT 
						C_DIFFERENCIALT, C_DRAMA, C_HETIREND, C_HETNAPJA, C_IKTTANORA, C_IPRTANORA, C_KOOPERATIV, C_MERES, C_MINDENNAPOSTESTNEVELES, C_NEMSZAKRENDSZERUORA, C_NEMZETISEGIORA, C_ORASZAM,
						C_SORSZAMOZANDO, C_TAMOPORA, C_TULORA, C_BONTOTT, ''' + @endDate + N''', C_ORAERVENYESSEGVEGE, C_PARHUZAMOSORA, C_TIOP12, C_ORAKEZDETE, C_ORAVEGE, C_TANORANKIVULIFOGLALKOZAS,
						C_IMPORTALT, C_CSENGETESIRENDID, C_CSENGETESIRENDORAID, C_TEREMID, C_FOGLALKOZASID, C_TANTARGYID, C_OSZTALYCSOPORTID, C_TANARID, C_ORATULAJDONOSID, C_INTEZMENYID, C_TANEVID, 
						TOROLT, SERIAL, C_ORARENDIORAGROUPID
					FROM T_ORARENDIORA 
					WHERE 
							C_ORAERVENYESSEGKEZDETE < ''' + @startDate + N'''
						AND C_ORAERVENYESSEGVEGE > ''' + @endDate + N'''';
	SET @sql += @where;

	SET @sql +=	N'
					UPDATE T_ORARENDIORA 
						SET C_ORAERVENYESSEGVEGE = ''' + @startDatePlus + N'''
					WHERE 
							C_ORAERVENYESSEGKEZDETE < ''' + @startDate + N'''
						AND C_ORAERVENYESSEGVEGE > ''' + @endDate + N'''';
	SET @sql += @where;

    BEGIN TRANSACTION
        exec sp_executesql @sql
			  ,N'
					@intezmenyId		int,
					@tanevId			int,
					@tanarId			int,
					@osztalyCsoportId	int,
					@hetirendId			int,
					@hetNapjaId			int,
					@oraszam			int
					'
			  ,@intezmenyId = @intezmenyId
			  ,@tanevId = @tanevId
			  ,@tanarId = @tanarId
			  ,@osztalyCsoportId = @osztalyCsoportId
			  ,@hetirendId = @hetirendId
			  ,@hetNapjaId = @hetNapjaId
			  ,@oraszam = @oraszam
    COMMIT TRANSACTION
	END TRY
	BEGIN CATCH
	IF @@TRANCOUNT > 0 AND XACT_STATE() <> 0 
		ROLLBACK TRAN;
		THROW
	END CATCH


END
GO