SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO DROP PROCEDURE IF EXISTS dbo.uspUpdateTanoraEvesSorszam GO CREATE PROCEDURE dbo.uspUpdateTanoraEvesSorszam @pIntezmenyId int ,@pTanevId int ,@pTantargyId int = null ,@pOsztalyCsoportId int = null ,@pTanarId int = null AS SET NOCOUNT ON; DECLARE @tanarSzamit bit ,@osztalybontasEgybe bit ,@osztalybontasCsoport bit CREATE TABLE #OraLista (Id INT NOT NULL, EvesSorszam INT NOT NULL); SET @tanarSzamit = dbo.fnGetRendszerbeallitasEnumBool(3075, @pIntezmenyId, @pTanevId); SET @osztalybontasEgybe = dbo.fnGetRendszerbeallitasEnumBool(3078, @pIntezmenyId, @pTanevId); SET @osztalybontasCsoport = 0; -- sorszámozás halmaz alá tartozó órák INSERT INTO #OraLista(ID, EvesSorszam) SELECT t.ID AS Id ,ROW_NUMBER() OVER ( PARTITION BY ossz.C_ORASORSZAMOZASHALMAZID, CASE WHEN ossz.C_KOZOSORASORSZAMOZASELTEROTAN = 'T' THEN t.C_TANARID ELSE 0 END ORDER BY t.C_ORAKEZDETE, t.C_OSZTALYCSOPORTID, t.ID ) + ossz.KEZDOERTEK AS EvesSorszam FROM ( SELECT h.C_INTEZMENYID, h.C_TANEVID, h.ID AS C_ORASORSZAMOZASHALMAZID, h.C_KOZOSORASORSZAMOZASELTEROTAN, ISNULL(h.C_KEZDOERTEK - 1, 0) AS KEZDOERTEK, oh.C_TANTARGYID, oh.C_OSZTALYCSOPORTID FROM T_ORASORSZAMOZASHALMAZ_OSSZES h INNER JOIN T_ORASORSZAMOZASHALMAZOSSZEREN_OSSZES oh ON h.ID = oh.C_ORASORSZAMOZASHALMAZID WHERE h.C_INTEZMENYID = @pIntezmenyId AND h.C_TANEVID = @pTanevId AND h.TOROLT = 'F' AND oh.TOROLT = 'F' ) ossz INNER JOIN T_TANITASIORA_OSSZES t ON t.C_TANTARGYID = ossz.C_TANTARGYID AND t.C_OSZTALYCSOPORTID = ossz.C_OSZTALYCSOPORTID AND t.C_INTEZMENYID = ossz.C_INTEZMENYID AND t.C_TANEVID = ossz.C_TANEVID WHERE 0 = 0 AND t.C_MEGTARTOTT = 'T' AND t.C_SORSZAMOZANDO = 'T' AND t.TOROLT = 'F'; -- nem sorszámozási halmaz alá tartozó órák IF EXISTS ( SELECT * FROM T_CSOPORT_OSSZES WHERE TOROLT = 'F' AND ((ID = @pOsztalyCsoportId AND C_OSZTALYBONTASID IS NOT NULL) OR C_OSZTALYBONTASID = @pOsztalyCsoportId) ) SET @osztalybontasCsoport = 1; --select @osztalybontasEgybe as osztalybontasEgybe, @osztalybontasCsoport as osztalybontasCsoport, @tanarSzamit as tanarSzamit -- nem sorszámozási halmaz alá tartozó órák IF (@osztalybontasEgybe = 0) --OR @osztalybontasCsoport = 0) BEGIN -- osztályok és csoportok külön sorszámozottak INSERT INTO #OraLista(Id, EvesSorszam) SELECT t.ID AS Id ,ROW_NUMBER() OVER ( PARTITION BY t.C_TANTARGYID, t.C_OSZTALYCSOPORTID, CASE WHEN @tanarSzamit = 1 THEN t.C_TANARID ELSE 0 END ORDER BY t.C_ORAKEZDETE, t.ID ) AS EvesSorszam FROM T_TANITASIORA_OSSZES t WHERE t.C_INTEZMENYID = @pIntezmenyId AND t.C_TANEVID = @pTanevId AND t.C_MEGTARTOTT = 'T' AND t.C_SORSZAMOZANDO = 'T' AND t.TOROLT = 'F' AND NOT EXISTS(SELECT * FROM T_ORASORSZAMOZASHALMAZOSSZEREN_OSSZES ossz WHERE ossz.C_TANTARGYID = t.C_TANTARGYID AND ossz.C_OSZTALYCSOPORTID = t.C_OSZTALYCSOPORTID AND ossz.TOROLT = 'F'); END ELSE BEGIN -- osztályok és kapcsolódó csoportok együtt sorszámozottak INSERT INTO #OraLista(Id, EvesSorszam) SELECT t.ID AS Id ,ROW_NUMBER() OVER ( PARTITION BY t.C_TANTARGYID, ISNULL(ocs.C_OSZTALYBONTASID, t.C_OSZTALYCSOPORTID), CASE WHEN @tanarSzamit = 1 THEN t.C_TANARID ELSE 0 END ORDER BY t.C_ORAKEZDETE, t.ID ) AS EvesSorszam FROM T_TANITASIORA_OSSZES t LEFT JOIN ( SELECT cs.ID, cs.C_OSZTALYBONTASID FROM T_CSOPORT_OSSZES cs WHERE cs.C_ALINTEZMENYID = @pIntezmenyId AND cs.C_ALTANEVID = @pTanevId AND cs.TOROLT = 'F' AND cs.C_OSZTALYBONTASID IS NOT NULL ) ocs ON ocs.ID = t.C_OSZTALYCSOPORTID WHERE t.C_INTEZMENYID = @pIntezmenyId AND t.C_TANEVID = @pTanevId AND t.C_SORSZAMOZANDO = 'T' AND t.C_MEGTARTOTT = 'T' AND t.TOROLT = 'F' AND NOT EXISTS(SELECT * FROM T_ORASORSZAMOZASHALMAZOSSZEREN ossz WHERE ossz.C_TANTARGYID = t.C_TANTARGYID AND ossz.C_OSZTALYCSOPORTID = t.C_OSZTALYCSOPORTID AND ossz.TOROLT = 'F'); END; --select * from #OraLista order by Id; --return; -- sorszámok frissítése WITH trg AS ( SELECT C_INTEZMENYID, C_TANEVID, ID, C_ORAEVESSORSZAMA FROM T_TANITASIORA_OSSZES AS t WHERE C_INTEZMENYID = @pIntezmenyId AND C_TANEVID = @pTanevID AND TOROLT = 'F' ) MERGE INTO trg USING #OraLista src ON trg.ID = src.Id AND trg.C_INTEZMENYID = @pIntezmenyId AND trg.C_TANEVID = @pTanevId WHEN MATCHED AND ISNULL(trg.C_ORAEVESSORSZAMA, 0) <> src.EvesSorszam THEN UPDATE SET C_ORAEVESSORSZAMA = src.EvesSorszam WHEN NOT MATCHED BY SOURCE AND C_ORAEVESSORSZAMA IS NOT NULL THEN UPDATE SET C_ORAEVESSORSZAMA = NULL; GO