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

CREATE PROCEDURE [dbo].[sp_GetHelyettesitesekAjanlasa]
	@intezmenyId int,
	@tanevId int,
	@pHelyettesitettOrarendiOraId int,
    @pHelyettesitesDatuma date
AS
BEGIN
SET NOCOUNT ON;

  DECLARE @tantargyId int
         ,@osztalyCsoportId int
         ,@helyettesitettTanarId int

  SELECT 
	@tantargyId = C_TANTARGYID, 
	@osztalyCsoportId = C_OSZTALYCSOPORTID, 
	@helyettesitettTanarId = C_TANARID
  FROM T_ORARENDIORA
  WHERE ID = @pHelyettesitettOrarendiOraId

  DECLARE @Helyettesitesek TABLE (Sorrend int, TanarId int, HelyettesitesTipusId int, TantargyId int, OsztalyCsoportId int, OsszevontOrarendiOraId int)

  DECLARE @KapcsolodoOsztalyCsoportok TABLE (Id int, Oka nvarchar(100))
  INSERT INTO @KapcsolodoOsztalyCsoportok
  SELECT * FROM fnGetKapcsolodoOsztalycsoportok(@osztalyCsoportId)

  DECLARE @UtkozoOrak TABLE (TanarId int, OrarendiOraId int, TantargyId int, HelyettesitettTanarId int)
  INSERT INTO @UtkozoOrak
  SELECT 
	ISNULL(hisz.C_HELYETTESTANAROKID, oo.c_TANARID), 
	oo.ID, oo.C_TANTARGYID,
	IIF(hisz.C_HELYETTESTANAROKID IS NOT NULL, oo.C_TANARID, NULL)
  FROM T_ORARENDIORA oo
  LEFT JOIN T_HELYETTESITESIIDOSZAK hisz ON 
	oo.ID = hisz.C_HELYETTESITETTORARENDID AND
	hisz.C_HELYETTESITESNAPJA = @pHelyettesitesDatuma
  INNER JOIN (SELECT * FROM T_ORARENDIORA WHERE ID = @pHelyettesitettOrarendiOraId) helyettesitettOra ON 
    (
		oo.C_HETIREND = helyettesitettOra.C_HETIREND OR 
		oo.C_HETIREND = 1554 OR helyettesitettOra.C_HETIREND = 1554
	)
    AND oo.C_HETNAPJA = helyettesitettOra.C_HETNAPJA
    AND CAST(helyettesitettOra.C_ORAVEGE AS time) > CAST(oo.C_ORAKEZDETE AS time)
    AND CAST(helyettesitettOra.C_ORAKEZDETE AS time) < CAST(oo.C_ORAVEGE AS time)
  WHERE 
	(
		(oo.C_ORAERVENYESSEGKEZDETE <= @pHelyettesitesDatuma AND oo.C_ORAERVENYESSEGVEGE > @pHelyettesitesDatuma) OR 
		(oo.C_ORAERVENYESSEGKEZDETE = oo.C_ORAERVENYESSEGVEGE AND oo.C_ORAERVENYESSEGKEZDETE = @pHelyettesitesDatuma)
	) AND 
	oo.TOROLT = 'F' AND 
	oo.C_INTEZMENYID = @intezmenyId AND 
	oo.C_TANEVID = @tanevId
	
  --nincs órája, tanítja a tárgyat, tanítja az ocs-t
  INSERT INTO @Helyettesitesek (Sorrend, TanarId, HelyettesitesTipusId, TantargyId, OsztalyCsoportId, OsszevontOrarendiOraId)
  SELECT DISTINCT 
	1, 
	f.C_TANARID, 
	1494, 
	null, 
	null, 
	null --szakszerű
  FROM T_FOGLALKOZAS f
  WHERE NOT EXISTS (SELECT 1 FROM @UtkozoOrak u WHERE u.TanarId = f.C_TANARID)
    AND f.C_TANTARGYID = @tantargyId
    AND EXISTS (SELECT 1 FROM @KapcsolodoOsztalyCsoportok kocs WHERE kocs.ID = f.C_OSZTALYCSOPORTID)
    AND f.TOROLT = 'F' AND f.C_INTEZMENYID = @intezmenyId AND f.C_TANEVID = @tanevId

  --nincs órája, tanítja a tárgyat
  INSERT INTO @Helyettesitesek (Sorrend, TanarId, HelyettesitesTipusId, TantargyId, OsztalyCsoportId, OsszevontOrarendiOraId)
  SELECT DISTINCT 2, f.C_TANARID, 1494, null, null, null --szakszerű
  FROM T_FOGLALKOZAS f
  WHERE NOT EXISTS (SELECT 1 FROM @UtkozoOrak u WHERE u.TanarId = f.C_TANARID)
    AND f.C_TANTARGYID = @tantargyId
    AND NOT EXISTS (SELECT 1 FROM @KapcsolodoOsztalyCsoportok kocs WHERE kocs.ID = f.C_OSZTALYCSOPORTID)
	AND NOT EXISTS (SELECT 1 FROM @Helyettesitesek h WHERE h.TanarId = f.C_TANARID)
    AND f.TOROLT = 'F' AND f.C_INTEZMENYID = @intezmenyId AND f.C_TANEVID = @tanevId

  --nincs órája, ofő
  INSERT INTO @Helyettesitesek (Sorrend, TanarId, HelyettesitesTipusId, TantargyId, OsztalyCsoportId, OsszevontOrarendiOraId)
  SELECT 3, o.C_OSZTALYFONOKID, 1495, null, null, null --nem szakszerű
  FROM T_OSZTALY o
  INNER JOIN @KapcsolodoOsztalyCsoportok kocs ON o.ID = kocs.Id
  WHERE NOT EXISTS (SELECT 1 FROM @Helyettesitesek h WHERE h.TanarId = o.C_OSZTALYFONOKID)
	AND NOT EXISTS (SELECT 1 FROM @UtkozoOrak u WHERE u.TanarId = o.C_OSZTALYFONOKID)
    AND o.TOROLT = 'F' AND o.C_ALINTEZMENYID = @intezmenyId AND o.C_ALTANEVID = @tanevId
  
  --nincs órája, tanítja az ocs-t
  INSERT INTO @Helyettesitesek (Sorrend, TanarId, HelyettesitesTipusId, TantargyId, OsztalyCsoportId, OsszevontOrarendiOraId)
  SELECT DISTINCT 4, f.C_TANARID, 1495, null, null, null --nem szakszerű
  FROM T_FOGLALKOZAS f
  WHERE EXISTS (SELECT 1 FROM @KapcsolodoOsztalyCsoportok kocs WHERE kocs.Id = f.C_OSZTALYCSOPORTID)
    AND NOT EXISTS (SELECT 1 FROM @Helyettesitesek h WHERE h.TanarId = f.C_TANARID)
	AND NOT EXISTS (SELECT 1 FROM @UtkozoOrak u WHERE u.TanarId = f.C_TANARID)
    AND f.TOROLT = 'F' AND f.C_INTEZMENYID = @intezmenyId AND f.C_TANEVID = @tanevId

  --nincs órája
  INSERT INTO @Helyettesitesek (Sorrend, TanarId, HelyettesitesTipusId, TantargyId, OsztalyCsoportId, OsszevontOrarendiOraId)
  SELECT DISTINCT 5, a.ID, 1495, null, null, null --nem szakszerű
  FROM T_ALKALMAZOTT a
  WHERE NOT EXISTS (SELECT 1 FROM @Helyettesitesek h WHERE h.TanarId = a.ID)
    AND NOT EXISTS (SELECT 1 FROM @UtkozoOrak u WHERE u.TanarId = a.ID)
    AND a.TOROLT = 'F' AND a.C_ALINTEZMENYID = @intezmenyId AND a.C_ALTANEVID = @tanevId

  --6: van órája, tanít kapcsolódó ocs-t, óráján ugyan az a tantárgy, óráján ugyaz az az évfolyam
  --7: van órája, tanít kapcsolódó ocs-t, óráján ugyan az a tantárgy
  --8: van órája, tanít kapcsolódó ocs-t
  INSERT INTO @Helyettesitesek (Sorrend, TanarId, HelyettesitesTipusId, TantargyId, OsztalyCsoportId, OsszevontOrarendiOraId)
  SELECT DISTINCT 
    CASE 
      WHEN u.TANTARGYID = @tantargyId 
      THEN CASE WHEN ocs.C_EVFOLYAMTIPUSA = (SELECT C_EVFOLYAMTIPUSA FROM T_OSZTALYCSOPORT WHERE ID = @osztalyCsoportId) THEN 6 ELSE 7 END
      ELSE 8
    END, a.ID, 1496, oo.C_TANTARGYID, oo.C_OSZTALYCSOPORTID, u.OrarendiOraId --óraösszevonás
  FROM T_ALKALMAZOTT a
  INNER JOIN @UtkozoOrak u ON u.TanarId = a.ID
  INNER JOIN T_ORARENDIORA oo ON oo.ID = u.OrarendiOraId
  INNER JOIN T_OSZTALYCSOPORT ocs ON ocs.ID = oo.C_OSZTALYCSOPORTID
  WHERE NOT EXISTS (SELECT 1 FROM @Helyettesitesek h WHERE h.TanarId = a.ID)
    AND EXISTS (SELECT 1 FROM T_FOGLALKOZAS f WHERE f.C_TANARID = a.ID AND EXISTS (SELECT 1 FROM @KapcsolodoOsztalyCsoportok kocs WHERE kocs.Id = f.C_OSZTALYCSOPORTID))
    AND a.TOROLT = 'F' AND a.C_ALINTEZMENYID = @intezmenyId AND a.C_ALTANEVID = @tanevId
  
  --van órája
  INSERT INTO @Helyettesitesek (Sorrend, TanarId, HelyettesitesTipusId, TantargyId, OsztalyCsoportId, OsszevontOrarendiOraId)
  SELECT DISTINCT 9, a.ID, 1496, oo.C_TANTARGYID, oo.C_OSZTALYCSOPORTID, u.OrarendiOraId  --óraösszevonás
  FROM T_ALKALMAZOTT a
  INNER JOIN @UtkozoOrak u ON u.TanarId = a.ID
  INNER JOIN T_ORARENDIORA oo ON oo.ID = u.OrarendiOraId
  WHERE 
	NOT EXISTS (SELECT 1 FROM @Helyettesitesek h WHERE h.TanarId = a.ID) AND 
	a.TOROLT = 'F' AND 
	a.C_ALINTEZMENYID = @intezmenyId AND 
	a.C_ALTANEVID = @tanevId

  SELECT DISTINCT
    NULL AS ID
   ,h.Sorrend AS Sorrend
   ,h.TanarId AS TanarId
   ,h.HelyettesitesTipusId AS HelyettesitesTipusId
   ,h.TantargyId AS TantargyId
   ,h.OsztalyCsoportId AS OsztalyCsoportId
   ,f.C_NYOMTATASINEV AS TanarNev
   ,t.C_NEV AS TantargyNev
   ,ocs.C_NEV  AS OsztalycsoportNev
   ,@pHelyettesitettOrarendiOraId  AS HelyettesitettOrarendiOraId
   ,@pHelyettesitesDatuma  AS HelyettesitesDatuma
  FROM @Helyettesitesek h
  INNER JOIN T_FELHASZNALO f ON 
	f.ID = h.TanarId
  INNER JOIN T_MUNKAUGYIADATOK ma ON 
	ma.C_ALKALMAZOTTID = h.TanarId AND
	ma.C_BETOLTETLENALLASHELY = 'F' AND
	ma.C_TARTOSHELYETTESITES = 'F'
  LEFT JOIN T_TANTARGY t ON 
	t.ID = h.TantargyId
  LEFT JOIN T_OSZTALYCSOPORT ocs ON 
	ocs.ID = h.OsztalyCsoportId
  WHERE 
	NOT EXISTS (SELECT 1 FROM @UtkozoOrak u WHERE u.HelyettesitettTanarId = h.TanarId) AND 
	h.TanarId <> @helyettesitettTanarId
  ORDER BY Sorrend, TanarNev ASC
  
END
GO
