DROP PROCEDURE IF EXISTS uspValidateCsoportbaSorolasModositasa GO CREATE PROCEDURE dbo.uspValidateCsoportbaSorolasModositasa @pTanevId int ,@pCsoportId int ,@pTanuloId int ,@pDatumTol datetime ,@pDatumIg datetime ,@pIsTorolhetosegVizsgalat bit ,@pFeladatKategoriaId int = NULL AS BEGIN SET NOCOUNT ON; DECLARE @osztalybontasId int = (SELECT C_OSZTALYBONTASID FROM T_CSOPORT WHERE ID = @pCsoportId) CREATE TABLE #hibak (Oka int, Datum datetime, Darab int) IF @pIsTorolhetosegVizsgalat = 0 BEGIN INSERT INTO #hibak SELECT 1 AS Oka -- 'a tanuló már tagja az adott csoportnak' ,IIF(tcs.C_BELEPESDATUM <= @pDatumTol, @pDatumTol, tcs.C_BELEPESDATUM) AS Datum ,NULL AS Darab FROM T_TANULOCSOPORT_OSSZES tcs INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tcs.C_OSZTALYCSOPORTID AND ocs.TOROLT = 'F' AND (@pFeladatKategoriaId IS NULL OR ocs.C_FELADATKATEGORIAID = @pFeladatKategoriaId) WHERE tcs.TOROLT = 'F' AND tcs.C_TANEVID = @pTanevId AND tcs.C_TANULOID = @pTanuloId AND tcs.C_OSZTALYCSOPORTID = @pCsoportId AND (tcs.C_BELEPESDATUM <= @pDatumIg AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= @pDatumTol)) INSERT INTO #hibak SELECT 2 AS Oka -- 'a tanuló nem tagja egy osztálynak sem' ,MIN(C_NAPDATUMA) AS Datum ,NULL AS Darab FROM T_NAPTARINAP_OSSZES nn WHERE nn.TOROLT = 'F' AND nn.C_TANEVID = @pTanevId AND nn.C_NAPDATUMA BETWEEN @pDatumTol AND @pDatumIg AND NOT EXISTS ( SELECT 1 FROM T_TANULOCSOPORT_OSSZES tcs INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON tcs.C_OSZTALYCSOPORTID = ocs.ID AND ocs.TOROLT = 'F' AND (@pFeladatKategoriaId IS NULL OR ocs.C_FELADATKATEGORIAID = @pFeladatKategoriaId) INNER JOIN T_OSZTALY_OSSZES o ON ocs.ID = o.ID AND o.TOROLT = 'F' WHERE tcs.TOROLT = 'F' AND tcs.C_TANEVID = @pTanevId AND tcs.C_TANULOID = @pTanuloId AND nn.C_NAPDATUMA >= tcs.C_BELEPESDATUM AND (nn.C_NAPDATUMA <= tcs.C_KILEPESDATUM OR tcs.C_KILEPESDATUM IS NULL) ) HAVING COUNT(1) > 0 IF @osztalybontasId IS NOT NULL BEGIN INSERT INTO #hibak SELECT 3 AS Oka -- 'a tanuló nem tagja az osztálybontott csoport osztályának' ,MIN(C_NAPDATUMA) AS Datum ,NULL AS Darab FROM T_NAPTARINAP_OSSZES nn WHERE nn.TOROLT = 'F' AND nn.C_TANEVID = @pTanevId AND nn.C_NAPDATUMA BETWEEN @pDatumTol AND @pDatumIg AND NOT EXISTS ( SELECT 1 FROM T_TANULOCSOPORT_OSSZES tcs INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON tcs.C_OSZTALYCSOPORTID = ocs.ID AND ocs.TOROLT = 'F' AND (@pFeladatKategoriaId IS NULL OR ocs.C_FELADATKATEGORIAID = @pFeladatKategoriaId) INNER JOIN T_OSZTALY_OSSZES o ON ocs.ID = o.ID AND o.TOROLT = 'F' AND o.ID = @osztalybontasId WHERE tcs.TOROLT = 'F' AND tcs.C_TANEVID = @pTanevId AND tcs.C_TANULOID = @pTanuloId AND nn.C_NAPDATUMA >= tcs.C_BELEPESDATUM AND (nn.C_NAPDATUMA <= tcs.C_KILEPESDATUM OR tcs.C_KILEPESDATUM IS NULL) ) HAVING COUNT(1) > 0 END END ELSE BEGIN INSERT INTO #hibak SELECT 4 AS Oka -- 'van a csoporthoz mulasztása' ,NULL AS Datum ,COUNT(mul.ID) AS Darab FROM T_TANULOCSOPORT_OSSZES tcs INNER JOIN T_TANULOMULASZTAS_OSSZES mul ON mul.C_ORATANULOIID = tcs.C_TANULOID AND mul.TOROLT = 'F' INNER JOIN T_TANITASIORA_OSSZES tano ON tano.ID = mul.C_TANITASIORAKID AND tano.TOROLT = 'F' AND tano.C_OSZTALYCSOPORTID = tcs.C_OSZTALYCSOPORTID AND tano.C_DATUM >= @pDatumTol AND tano.C_DATUM <= @pDatumIg INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tcs.C_OSZTALYCSOPORTID AND ocs.TOROLT = 'F' AND (@pFeladatKategoriaId IS NULL OR ocs.C_FELADATKATEGORIAID = @pFeladatKategoriaId) WHERE tcs.TOROLT = 'F' AND tcs.C_TANEVID = @pTanevId AND tcs.C_TANULOID = @pTanuloId AND tcs.C_OSZTALYCSOPORTID = @pCsoportId AND (tcs.C_BELEPESDATUM <= @pDatumIg AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= @pDatumTol)) GROUP BY ocs.ID INSERT INTO #hibak SELECT 5 AS Oka -- 'van a csoporthoz értékelés' ,NULL AS Datum ,COUNT(ert.ID) AS Darab FROM T_TANULOCSOPORT_OSSZES tcs INNER JOIN T_TANULOERTEKELES_OSSZES ert ON ert.C_TANULOID = tcs.C_TANULOID AND ert.C_OSZTALYCSOPORTID = tcs.C_OSZTALYCSOPORTID AND ert.TOROLT = 'F' AND ert.C_DATUM >= @pDatumTol AND ert.C_DATUM <= @pDatumIg INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tcs.C_OSZTALYCSOPORTID AND ocs.TOROLT = 'F' AND (@pFeladatKategoriaId IS NULL OR ocs.C_FELADATKATEGORIAID = @pFeladatKategoriaId) WHERE tcs.TOROLT = 'F' AND tcs.C_TANEVID = @pTanevId AND tcs.C_TANULOID = @pTanuloId AND tcs.C_OSZTALYCSOPORTID = @pCsoportId AND (tcs.C_BELEPESDATUM <= @pDatumIg AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= @pDatumTol)) GROUP BY ocs.ID END SELECT * FROM #hibak END GO