136 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
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, HelyettesitesTipusaId 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, HelyettesitesTipusaId, 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, HelyettesitesTipusaId, 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, HelyettesitesTipusaId, 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, HelyettesitesTipusaId, 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, HelyettesitesTipusaId, 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, HelyettesitesTipusaId, 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, HelyettesitesTipusaId, 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
 | 
						|
    h.Sorrend AS Sorrend
 | 
						|
   ,h.TanarId AS TanarId
 | 
						|
   ,h.HelyettesitesTipusaId AS HelyettesitesTipusaId
 | 
						|
   ,h.TantargyId AS TantargyId
 | 
						|
   ,h.OsztalyCsoportId AS OsztalyCsoportId
 | 
						|
   ,h.OsszevontOrarendiOraId AS OsszevontOrarendiOraId
 | 
						|
   ,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
 | 
						|
  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
 |