160 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
			
		
		
	
	
			160 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
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,
 | 
						|
	@felhelyId			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
 | 
						|
 | 
						|
	IF (@felhelyId IS NOT NULL)
 | 
						|
		BEGIN
 | 
						|
			SET @where += N' AND C_OSZTALYCSOPORTID IN (SELECT ID FROM T_OSZTALYCSOPORT WHERE C_FELADATELLATASIHELYID = @felhelyId)';
 | 
						|
		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 = ''' + @startDate + 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, ''' + @endDatePlus + 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 = ''' + @startDate + 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 |