158 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
DROP PROCEDURE IF EXISTS sp_GetHelyettesitesekAjanlasa
 | 
						|
GO
 | 
						|
 | 
						|
CREATE PROCEDURE [dbo].[sp_GetHelyettesitesekAjanlasa]
 | 
						|
	@intezmenyId int,
 | 
						|
	@tanevId int,
 | 
						|
	@pHelyettesitettOrarendiOraId int,
 | 
						|
  @pHelyettesitesDatuma DATE,
 | 
						|
	@pSzakszeruId int = 1494,
 | 
						|
	@pNemSzakszeruId int = 1495,
 | 
						|
	@pOsszevonas int = 1496,
 | 
						|
	@pFokozatNa int = 3040
 | 
						|
AS
 | 
						|
BEGIN
 | 
						|
SET NOCOUNT ON;
 | 
						|
	
 | 
						|
	DECLARE @OraKezdet DATETIME; DECLARE @Oraveg DATETIME;
 | 
						|
  DECLARE @helyettesitettTanarId INT;
 | 
						|
	SELECT @OraKezdet = C_ORAKEZDETE, @Oraveg = C_ORAVEGE , @helyettesitettTanarId =  C_TANARID FROM T_ORARENDIORA WHERE ID = @pHelyettesitettOrarendiOraId
 | 
						|
	
 | 
						|
	DECLARE @Datum DATETIME = (SELECT CAST(@pHelyettesitesDatuma AS date))
 | 
						|
	DECLARE @DatumVeg DATETIME = (SELECT DATEADD(DAY, 1, (SELECT CAST(@pHelyettesitesDatuma AS date))))
 | 
						|
 | 
						|
  DECLARE @KezdoDateTime DATETIME = (SELECT (@OraKezdet + CAST(@pHelyettesitesDatuma AS datetime)))
 | 
						|
  DECLARE @VegeDateTime DATETIME = (SELECT (@Oraveg + CAST(@pHelyettesitesDatuma AS datetime)))
 | 
						|
 | 
						|
	CREATE TABLE #OrarendTable (
 | 
						|
		Id int
 | 
						|
		,ORARENDIID int
 | 
						|
		,Datum datetime
 | 
						|
		,Bontott char(1)
 | 
						|
		,Hetirend int
 | 
						|
		,HetNapja int
 | 
						|
		,HetSorszam int
 | 
						|
		,ErvenyessegKezdete datetime
 | 
						|
		,ErvenyessegVege datetime
 | 
						|
		,OraKezdete datetime
 | 
						|
		,OraVege datetime
 | 
						|
		,Oraszam int
 | 
						|
		,TargyNev nvarchar(300)
 | 
						|
		,TargyNevForMobile nvarchar(300)
 | 
						|
		,TargykategoriaID int
 | 
						|
		,Megtartott char(1)
 | 
						|
		,CsengetesiRendOraID int
 | 
						|
		,CsengetesiRendID int
 | 
						|
		,MaxNapiOraszam int
 | 
						|
		,OsztalyNev nvarchar(255)
 | 
						|
		,TanevRendOsztalyCsoportId int
 | 
						|
		,MegjelenesOka nvarchar(300)
 | 
						|
		,TanarNev nvarchar(255)
 | 
						|
		,TeremNev nvarchar(255)
 | 
						|
		,TeremId int
 | 
						|
		,OraTipus nvarchar(200)
 | 
						|
		,Hianyzas char(1)
 | 
						|
		,Keses char(1)
 | 
						|
		,Ures char(1)
 | 
						|
		,HelyettesitoTanarID int
 | 
						|
		,HelyettesitoTanarNev nvarchar(255)
 | 
						|
		,HelyettesitesId int
 | 
						|
		,TanarID int
 | 
						|
		,AdminAltalKiirt  char(1)
 | 
						|
		,GroupId int
 | 
						|
		,Tema nvarchar(max)
 | 
						|
		,TantargyId int
 | 
						|
		,OsztCsopId int
 | 
						|
		,IsEgyediNap char(1)
 | 
						|
		,TeremTobbOratLehetTartani char(1)
 | 
						|
		,INDEX IX01 CLUSTERED (OraTipus, OraKezdete, OraVege)
 | 
						|
	)
 | 
						|
	
 | 
						|
	INSERT INTO #OrarendTable (
 | 
						|
		Id,ORARENDIID,Datum,Bontott,Hetirend,HetNapja,HetSorszam,ErvenyessegKezdete,ErvenyessegVege,OraKezdete,OraVege,Oraszam,
 | 
						|
		TargyNev,TargyNevForMobile,TargykategoriaID,Megtartott,CsengetesiRendOraID,CsengetesiRendID,MaxNapiOraszam,OsztalyNev,TanevRendOsztalyCsoportId,
 | 
						|
		MegjelenesOka,TanarNev,TeremNev,TeremId,OraTipus,Hianyzas,Keses,Ures,HelyettesitoTanarID,HelyettesitoTanarNev,HelyettesitesId,TanarID,AdminAltalKiirt,GroupId,Tema,TantargyId,OsztCsopId,IsEgyediNap,TeremTobbOratLehetTartani)
 | 
						|
	EXEC sp_GetOrarend 
 | 
						|
		@pIntezmenyId = @IntezmenyId
 | 
						|
		,@pTanevId = @TanevId
 | 
						|
		,@pIdoszakKezdete = @Datum
 | 
						|
		,@pIdoszakVege = @DatumVeg
 | 
						|
		,@pTanarId = NULL
 | 
						|
		,@pIsHelyettesitesNelkul  = 0
 | 
						|
		,@pOsztalyCsoportId  =  NULL
 | 
						|
		,@pTanuloId = NULL
 | 
						|
		,@pTantargyId  = NULL
 | 
						|
		,@pTeremId = NULL
 | 
						|
		,@pCsakOrarendiOrak  = 0
 | 
						|
		,@pIsNapirend = NULL
 | 
						|
 | 
						|
	SELECT
 | 
						|
		 NULL as ID
 | 
						|
    ,f.ID as TanarId
 | 
						|
		,CASE
 | 
						|
			MAX(CASE
 | 
						|
				WHEN ot.OraKezdete < @VegeDateTime AND  ot.OraVege > @KezdoDateTime THEN '3'
 | 
						|
        WHEN ot.ID IS NULL AND ma.C_BESOROLASIFOKOZAT = @pFokozatNa THEN '2'
 | 
						|
				WHEN ot.ID IS NULL AND ma.C_BESOROLASIFOKOZAT != @pFokozatNa THEN '1'
 | 
						|
				WHEN ot.ID IS NOT NULL AND ot.ID = ot.ORARENDIID AND ot.HelyettesitesId IS NULL THEN '3'
 | 
						|
				WHEN ot.ID IS NOT NULL AND ot.ID != ot.ORARENDIID AND ot.Megtartott = 'T' THEN '3'
 | 
						|
				WHEN ot.ID IS NOT NULL AND ot.ID != ot.ORARENDIID AND ot.Megtartott = 'F' AND ma.C_BESOROLASIFOKOZAT = @pFokozatNa THEN '2'
 | 
						|
				WHEN ot.ID IS NOT NULL AND ot.ID != ot.ORARENDIID AND ot.Megtartott = 'F' AND ma.C_BESOROLASIFOKOZAT != @pFokozatNa THEN '1'
 | 
						|
				WHEN ot.ID IS NOT NULL AND ot.ID = ot.ORARENDIID AND ot.HelyettesitesId IS NOT NULL AND a.ID = ot.TanarID AND ma.C_BESOROLASIFOKOZAT = @pFokozatNa THEN '2'
 | 
						|
				WHEN ot.ID IS NOT NULL AND ot.ID = ot.ORARENDIID AND ot.HelyettesitesId IS NOT NULL AND a.ID = ot.TanarID AND ma.C_BESOROLASIFOKOZAT != @pFokozatNa THEN '1'
 | 
						|
				WHEN ot.ID IS NOT NULL AND ot.ID = ot.ORARENDIID AND ot.HelyettesitesId IS NOT NULL AND a.ID = ot.HelyettesitoTanarID THEN '3'      
 | 
						|
			END)
 | 
						|
			WHEN 1 THEN @pSzakszeruId
 | 
						|
			WHEN 2 THEN @pNemSzakszeruId
 | 
						|
			WHEN 3 THEN @pOsszevonas
 | 
						|
		END as HelyettesitesTipusId
 | 
						|
		,ot.TantargyId as TantargyId
 | 
						|
		,ot.OsztCsopId as OsztalyCsoportId
 | 
						|
		,f.C_NYOMTATASINEV as TanarNev
 | 
						|
		,t.C_NEV as TantargyNev
 | 
						|
		,ot.OsztalyNev  AS OsztalycsoportNev
 | 
						|
	  ,@pHelyettesitettOrarendiOraId  AS HelyettesitettOrarendiOraId
 | 
						|
	  ,@pHelyettesitesDatuma AS HelyettesitesDatuma
 | 
						|
  INTO #HelyettesitoTanarok
 | 
						|
	FROM T_ALKALMAZOTT a
 | 
						|
		INNER JOIN T_FELHASZNALO f on f.ID = a.ID AND f.TOROLT = 'F'
 | 
						|
		INNER JOIN T_MUNKAUGYIADATOK ma ON ma.C_ALKALMAZOTTID = a.ID AND ma.C_BETOLTETLENALLASHELY = 'F' AND ma.C_TARTOSHELYETTESITES = 'F' AND (C_ALKALMAZASKEZDETE <= @Datum AND (C_ALKALMAZASMEGSZUNESE >= @Datum OR C_ALKALMAZASMEGSZUNESE IS NULL))
 | 
						|
		LEFT JOIN #OrarendTable ot on (ot.TanarID = a.ID or ot.HelyettesitoTanarID = a.ID)
 | 
						|
		LEFT JOIN T_TANTARGY t on t.ID = ot.TantargyId AND t.TOROLT = 'F'
 | 
						|
	WHERE a.TOROLT = 'F' AND a.C_ALTANEVID = @tanevId
 | 
						|
      AND (TanarID <> @helyettesitettTanarId OR TanarID IS NULL)
 | 
						|
      AND (ot.TantargyId IS NULL  OR (ot.OraKezdete <= @VegeDateTime AND ot.OraVege >= @KezdoDateTime))
 | 
						|
	GROUP BY f.ID, ot.TantargyId, ot.OsztCsopId,f.C_NYOMTATASINEV,t.C_NEV,ot.OsztalyNev, ot.Id
 | 
						|
 | 
						|
  CREATE TABLE #nincsOraja(AlkalmazottId int,TanarNev nvarchar(128),HelyettesitesTipusa int)
 | 
						|
  INSERT INTO #HelyettesitoTanarok
 | 
						|
 | 
						|
  SELECT 
 | 
						|
     NULL
 | 
						|
    ,a.ID
 | 
						|
    ,CASE 
 | 
						|
      WHEN ma.C_BESOROLASIFOKOZAT = @pFokozatNa THEN @pNemSzakszeruId
 | 
						|
			WHEN ma.C_BESOROLASIFOKOZAT != @pFokozatNa THEN @pSzakszeruId
 | 
						|
     END HelyettesitesTipusId
 | 
						|
    ,NULL
 | 
						|
    ,NULL
 | 
						|
    ,fh.C_NYOMTATASINEV 
 | 
						|
    ,NULL
 | 
						|
    ,NULL
 | 
						|
    ,@pHelyettesitettOrarendiOraId
 | 
						|
    ,@pHelyettesitesDatuma
 | 
						|
  FROM T_ALKALMAZOTT a
 | 
						|
    INNER JOIN T_FELHASZNALO fh ON fh.ID = a.ID
 | 
						|
    INNER JOIN T_MUNKAUGYIADATOK ma ON ma.C_ALKALMAZOTTID = a.ID AND ma.C_BETOLTETLENALLASHELY = 'F' AND ma.C_TARTOSHELYETTESITES = 'F' AND (C_ALKALMAZASKEZDETE <= @Datum AND (C_ALKALMAZASMEGSZUNESE >= @Datum OR C_ALKALMAZASMEGSZUNESE IS NULL))
 | 
						|
  WHERE a.ID NOT IN(
 | 
						|
    SELECT TanarId FROM #HelyettesitoTanarok 
 | 
						|
    UNION 
 | 
						|
    SELECT @helyettesitettTanarId
 | 
						|
  )
 | 
						|
 | 
						|
  SELECT * FROM #HelyettesitoTanarok
 | 
						|
  ORDER BY HelyettesitesTipusId,TanarNev
 | 
						|
 | 
						|
END
 | 
						|
GO
 |