Files
kreta/Kreta.DataAccess.Migrations/DBScripts/Database/dbo/Stored procedures/uspValidateCsoportbaSorolasModositasa.sql
T
2024-03-13 00:33:46 +01:00

142 lines
5.2 KiB
Transact-SQL

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