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 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 f.C_TANARID NOT IN (SELECT TanarId FROM @UtkozoOrak) 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 f.C_TANARID NOT IN (SELECT TanarId FROM @UtkozoOrak) AND f.C_TANTARGYID = @tantargyId AND NOT 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, 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 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 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