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 ,@aktualisHetirend int SELECT @aktualisHetirend = C_HETIREND FROM T_NAPTARINAP WHERE C_NAPDATUMA = CAST(@pHelyettesitesDatuma AS DATE) AND C_TANEVID = @tanevId 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_HETIREND = @aktualisHetirend) ) 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