309 lines
No EOL
13 KiB
Transact-SQL
309 lines
No EOL
13 KiB
Transact-SQL
DROP PROCEDURE IF EXISTS uspValidateOsztalybaSorolasModositasa
|
||
GO
|
||
|
||
CREATE PROCEDURE dbo.uspValidateOsztalybaSorolasModositasa
|
||
@pTanevId int
|
||
,@pFromOsztalyId int
|
||
,@pToOsztalyId int
|
||
,@pTanuloId int
|
||
,@pDatumTol datetime
|
||
,@pDatumIg datetime
|
||
,@pFeladatKategoriaId int
|
||
,@pIsTorolhetosegVizsgalat bit
|
||
,@pIsCheckMaxOsztalyReturnKilepes bit
|
||
AS
|
||
BEGIN
|
||
SET NOCOUNT ON;
|
||
|
||
DECLARE @maxDate datetime
|
||
,@darab int
|
||
,@tanevUtolsoNap datetime = (SELECT C_UTOLSONAP FROM T_TANEV_OSSZES WHERE ID = @pTanevId)
|
||
,@rendszeruzenetId int = (SELECT ID FROM T_FELHASZNALO_OSSZES WHERE C_NYOMTATASINEV = 'Rendszerüzenet' AND C_TANEVID = @pTanevId AND TOROLT = 'F')
|
||
|
||
CREATE TABLE #hibak (Oka int, OsztalyId int, OsztalybontottCsoportId int, Datum datetime, Darab int)
|
||
-- Okok:
|
||
-- 1 - ha a vizsgált időszakban van akár csak egyetlen nap is (a legkorábbi ilyen dátumot nevezzük ’X’-nek),
|
||
-- ahol a tanuló be van sorolva egy olyan csoportba, ami az érintett osztály osztálybontásának van jelölve
|
||
-- 2 - ha a vizsgált időszakban van akár csak egyetlen nap is (a legkorábbi ilyen dátumot nevezzük ’X’-nek),
|
||
-- ahol a tanuló be van sorolva legalább egy nem osztálybontott csoportba, de nincs egyetlen osztályhoz sem rendelve
|
||
-- 3 - ha a vizsgált időszakban van akár csak egyetlen mulasztás is rögzítve a megadott osztályhoz
|
||
-- 4 - ha a vizsgált időszakban van akár csak egyetlen értékelés is rögzítve a megadott osztályhoz
|
||
-- 5 - ha a vizsgált időszakban van akár csak egyetlen feljegyzés is rögzítve az érintett tanulónak olyan napra,
|
||
-- ahol nincs egyetlen további osztályba sem besorolva a tanuló bármely modulban
|
||
-- 6 - ha a vizsgált időszakban van akár csak egyetlen igazolás is rögzítve az érintett tanulónak olyan napra,
|
||
-- ahol nincs egyetlen további osztályba sem besorolva a tanuló bármely modulban
|
||
-- 7 - ha a tanuló már tagja az adott osztálynak
|
||
-- 8 - ha a tanuló már annyi osztályba van besorolva, amennyi az érintett oktatási-nevelési feladatcsoportban megengedett
|
||
--
|
||
-- NOTE: 5-ös és 6-os esetében, ha lehet majd feladat kategóriához kötni, akkor azokat módosítani kell !!!
|
||
|
||
IF @pIsTorolhetosegVizsgalat = 1
|
||
BEGIN
|
||
INSERT INTO #hibak
|
||
SELECT
|
||
1 AS oka -- 'van osztálybontott csoport besorolása'
|
||
,ocso.ID AS OsztalyId
|
||
,ocscs.ID AS OsztalybontottCsoportId
|
||
,IIF(tcs.C_BELEPESDATUM <= @pDatumTol, @pDatumTol, tcs.C_BELEPESDATUM) AS Datum
|
||
,NULL AS Darab
|
||
FROM T_TANULOCSOPORT_OSSZES tcs
|
||
INNER JOIN T_CSOPORT_OSSZES cs ON cs.ID = tcs.C_OSZTALYCSOPORTID
|
||
AND cs.TOROLT = 'F'
|
||
AND cs.C_OSZTALYBONTASID = @pFromOsztalyId
|
||
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocso ON ocso.ID = @pFromOsztalyId
|
||
AND ocso.TOROLT = 'F'
|
||
AND (ocso.C_FELADATKATEGORIAID = @pFeladatKategoriaId OR @pFeladatKategoriaId IS NULL)
|
||
LEFT JOIN T_OSZTALYCSOPORT_OSSZES ocscs ON ocscs.ID = tcs.C_OSZTALYCSOPORTID
|
||
AND ocscs.TOROLT = 'F'
|
||
WHERE tcs.TOROLT = 'F'
|
||
AND tcs.C_TANEVID = @pTanevId
|
||
AND tcs.C_TANULOID = @pTanuloId
|
||
AND (tcs.C_BELEPESDATUM <= @pDatumIg AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= @pDatumTol))
|
||
|
||
INSERT INTO #hibak
|
||
SELECT
|
||
2 AS oka -- 'van csoport besorolása osztálybesorolás nélkül'
|
||
,ocso.ID AS OsztalyId
|
||
,NULL AS OsztalybontottCsoportId
|
||
,IIF(tcs.C_BELEPESDATUM <= @pDatumTol, @pDatumTol, tcs.C_BELEPESDATUM) AS Datum
|
||
,NULL AS Darab
|
||
FROM T_TANULOCSOPORT_OSSZES tcs
|
||
INNER JOIN T_CSOPORT_OSSZES cs ON cs.ID = tcs.C_OSZTALYCSOPORTID
|
||
AND cs.TOROLT = 'F'
|
||
AND cs.C_OSZTALYBONTASID IS NULL
|
||
LEFT JOIN (
|
||
SELECT
|
||
tcs2.*
|
||
FROM T_TANULOCSOPORT_OSSZES tcs2
|
||
INNER JOIN T_OSZTALY_OSSZES o ON o.ID = tcs2.C_OSZTALYCSOPORTID
|
||
AND o.TOROLT = 'F'
|
||
INNER JOIN T_OSZTALYCSOPORT ocs ON ocs.ID = o.ID
|
||
AND ocs.TOROLT = 'F'
|
||
AND (ocs.C_FELADATKATEGORIAID = @pFeladatKategoriaId OR @pFeladatKategoriaId IS NULL)
|
||
WHERE tcs2.TOROLT = 'F'
|
||
AND tcs2.C_TANEVID = @pTanevId
|
||
AND tcs2.C_TANULOID = @pTanuloId
|
||
AND (tcs2.C_BELEPESDATUM <= @pDatumIg AND (tcs2.C_KILEPESDATUM IS NULL OR tcs2.C_KILEPESDATUM >= @pDatumTol))
|
||
AND tcs2.C_OSZTALYCSOPORTID <> @pFromOsztalyId
|
||
) tcso ON tcso.C_TANULOID = tcso.C_TANULOID
|
||
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocso ON ocso.ID = tcs.C_OSZTALYCSOPORTID
|
||
AND ocso.TOROLT = 'F'
|
||
AND (ocso.C_FELADATKATEGORIAID = @pFeladatKategoriaId OR @pFeladatKategoriaId IS NULL)
|
||
WHERE tcs.TOROLT = 'F'
|
||
AND tcs.C_TANEVID = @pTanevId
|
||
AND tcs.C_TANULOID = @pTanuloId
|
||
AND (tcs.C_BELEPESDATUM <= @pDatumIg AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= @pDatumTol))
|
||
AND tcso.ID IS NULL
|
||
|
||
INSERT INTO #hibak
|
||
SELECT
|
||
3 AS oka -- 'van az osztályhoz mulasztása'
|
||
,ocso.ID AS OsztalyId
|
||
,NULL AS OsztalybontottCsoportId
|
||
,NULL AS Datum
|
||
,COUNT(mul.ID) AS Darab
|
||
--,tcs.*
|
||
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 ocso ON ocso.ID = tcs.C_OSZTALYCSOPORTID
|
||
AND ocso.TOROLT = 'F'
|
||
AND (ocso.C_FELADATKATEGORIAID = @pFeladatKategoriaId OR @pFeladatKategoriaId IS NULL)
|
||
WHERE tcs.TOROLT = 'F'
|
||
AND tcs.C_TANEVID = @pTanevId
|
||
AND tcs.C_TANULOID = @pTanuloId
|
||
AND tcs.C_OSZTALYCSOPORTID = @pFromOsztalyId
|
||
AND (tcs.C_BELEPESDATUM <= @pDatumIg AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= @pDatumTol))
|
||
GROUP BY ocso.ID
|
||
|
||
INSERT INTO #hibak
|
||
SELECT
|
||
4 AS oka -- 'van az osztályhoz értékelés'
|
||
,ocso.ID AS OsztalyId
|
||
,NULL AS OsztalybontottCsoportId
|
||
,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 ocso ON ocso.ID = tcs.C_OSZTALYCSOPORTID
|
||
AND ocso.TOROLT = 'F'
|
||
AND (ocso.C_FELADATKATEGORIAID = @pFeladatKategoriaId OR @pFeladatKategoriaId IS NULL)
|
||
WHERE tcs.TOROLT = 'F'
|
||
AND tcs.C_TANEVID = @pTanevId
|
||
AND tcs.C_TANULOID = @pTanuloId
|
||
AND tcs.C_OSZTALYCSOPORTID = @pFromOsztalyId
|
||
AND (tcs.C_BELEPESDATUM <= @pDatumIg AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= @pDatumTol))
|
||
GROUP BY ocso.ID
|
||
|
||
SELECT
|
||
@maxDate = ISNULL(MAX(te.C_ESEMENYDATUMA), @tanevUtolsoNap)
|
||
,@darab = COUNT(te.ID)
|
||
FROM T_TANULOESEMENY_OSSZES te
|
||
INNER JOIN T_TANULO_TANULOESEMENY tte ON tte.C_TANULOESEMENYID = te.ID
|
||
WHERE te.TOROLT = 'F'
|
||
AND tte.C_TANULOID = @pTanuloId
|
||
AND te.C_ESEMENYDATUMA >= @pDatumTol
|
||
AND te.C_ESEMENYDATUMA <= @pDatumIg
|
||
AND te.C_FELJEGYZOID <> @rendszeruzenetId
|
||
|
||
IF @darab > 0
|
||
BEGIN
|
||
IF NOT EXISTS (
|
||
SELECT
|
||
1
|
||
FROM T_TANULOCSOPORT_OSSZES tcs
|
||
INNER JOIN T_OSZTALY_OSSZES o ON o.ID = tcs.C_OSZTALYCSOPORTID
|
||
AND o.TOROLT = 'F'
|
||
WHERE tcs.C_TANULOID = @pTanuloId
|
||
AND tcs.TOROLT = 'F'
|
||
AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= @maxDate)
|
||
AND tcs.C_OSZTALYCSOPORTID <> @pFromOsztalyId
|
||
)
|
||
BEGIN
|
||
INSERT INTO #hibak
|
||
SELECT
|
||
5 AS oka -- 'van feljegyzés a tanulónak, nincs aktív osztály besorolása'
|
||
,NULL AS OsztalyId
|
||
,NULL AS OsztalybontottCsoportId
|
||
,NULL AS Datum
|
||
,@darab AS Darab
|
||
END
|
||
END
|
||
|
||
SELECT
|
||
@maxDate = ISNULL(MAX(i.C_VEGE), @tanevUtolsoNap)
|
||
,@darab = COUNT(i.ID)
|
||
FROM T_IGAZOLAS i
|
||
WHERE i.TOROLT = 'F'
|
||
AND i.C_TANULOID = @pTanuloId
|
||
AND i.C_VEGE >= @pDatumTol
|
||
AND i.C_KEZDETE <= DATEADD(DAY, 1 ,@pDatumIg) --Egy nappal korábbi dátumot kapunk felületről így ez kell, különben az aznapi igazolásokat nem venné figyelembe
|
||
IF @darab > 0
|
||
BEGIN
|
||
IF NOT EXISTS (
|
||
SELECT
|
||
1
|
||
FROM T_TANULOCSOPORT_OSSZES tcs
|
||
INNER JOIN T_OSZTALY_OSSZES o ON o.ID = tcs.C_OSZTALYCSOPORTID
|
||
AND o.TOROLT = 'F'
|
||
WHERE tcs.C_TANULOID = @pTanuloId
|
||
AND tcs.TOROLT = 'F'
|
||
AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= @maxDate)
|
||
AND tcs.C_OSZTALYCSOPORTID <> @pFromOsztalyId
|
||
)
|
||
BEGIN
|
||
INSERT INTO #hibak
|
||
SELECT
|
||
6 AS oka -- 'van igazolás a tanulónak, nincs aktív osztály besorolása'
|
||
,NULL AS OsztalyId
|
||
,NULL AS OsztalybontottCsoportId
|
||
,NULL AS Datum
|
||
,@darab AS Darab
|
||
END
|
||
END
|
||
|
||
IF @pFromOsztalyId <> @pToOsztalyId
|
||
BEGIN
|
||
INSERT INTO #hibak
|
||
SELECT
|
||
7 AS oka -- 'a tanuló már tagja az adott osztálynak'
|
||
,ocso.ID AS OsztalyId
|
||
,NULL AS OsztalybontottCsoportId
|
||
,IIF(tcs.C_BELEPESDATUM <= @pDatumTol, @pDatumTol, tcs.C_BELEPESDATUM) AS Datum
|
||
,NULL AS Darab
|
||
FROM T_TANULOCSOPORT_OSSZES tcs
|
||
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocso ON ocso.ID = tcs.C_OSZTALYCSOPORTID
|
||
AND ocso.TOROLT = 'F'
|
||
AND (ocso.C_FELADATKATEGORIAID = @pFeladatKategoriaId OR @pFeladatKategoriaId IS NULL)
|
||
WHERE tcs.TOROLT = 'F'
|
||
AND tcs.C_TANEVID = @pTanevId
|
||
AND tcs.C_TANULOID = @pTanuloId
|
||
AND tcs.C_OSZTALYCSOPORTID = @pFromOsztalyId
|
||
AND (tcs.C_BELEPESDATUM <= @pDatumTol AND tcs.C_KILEPESDATUM >= @pDatumTol)
|
||
END
|
||
END
|
||
|
||
IF @pIsTorolhetosegVizsgalat = 0
|
||
BEGIN
|
||
IF @pFromOsztalyId <> @pToOsztalyId
|
||
BEGIN
|
||
INSERT INTO #hibak
|
||
SELECT
|
||
7 AS oka -- 'a tanuló már tagja az adott osztálynak'
|
||
,ocso.ID AS OsztalyId
|
||
,NULL AS OsztalybontottCsoportId
|
||
,IIF(tcs.C_BELEPESDATUM <= @pDatumTol, @pDatumTol, tcs.C_BELEPESDATUM) AS Datum
|
||
,NULL AS Darab
|
||
FROM T_TANULOCSOPORT_OSSZES tcs
|
||
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocso ON ocso.ID = tcs.C_OSZTALYCSOPORTID
|
||
AND ocso.TOROLT = 'F'
|
||
AND (ocso.C_FELADATKATEGORIAID = @pFeladatKategoriaId OR @pFeladatKategoriaId IS NULL)
|
||
WHERE tcs.TOROLT = 'F'
|
||
AND tcs.C_TANEVID = @pTanevId
|
||
AND tcs.C_TANULOID = @pTanuloId
|
||
AND tcs.C_OSZTALYCSOPORTID = @pToOsztalyId
|
||
AND (tcs.C_BELEPESDATUM <= @pDatumIg AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= @pDatumIg))
|
||
END
|
||
ELSE
|
||
BEGIN
|
||
INSERT INTO #hibak
|
||
SELECT
|
||
7 AS oka
|
||
,ocso.ID AS OsztalyId
|
||
,NULL AS OsztalybontottCsoportId
|
||
,IIF(tcs.C_BELEPESDATUM <= @pDatumTol, @pDatumTol, tcs.C_BELEPESDATUM) AS Datum
|
||
,NULL AS Darab
|
||
FROM T_TANULOCSOPORT_OSSZES tcs
|
||
INNER JOIN T_OSZTALY o ON o.ID = tcs.C_OSZTALYCSOPORTID
|
||
AND o.TOROLT = 'F'
|
||
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocso ON ocso.ID = tcs.C_OSZTALYCSOPORTID
|
||
AND ocso.TOROLT = 'F'
|
||
AND (ocso.C_FELADATKATEGORIAID = @pFeladatKategoriaId OR @pFeladatKategoriaId IS NULL)
|
||
WHERE tcs.TOROLT = 'F'
|
||
AND tcs.C_TANEVID = @pTanevId
|
||
AND tcs.C_TANULOID = @pTanuloId
|
||
AND tcs.C_OSZTALYCSOPORTID = @pToOsztalyId
|
||
AND (tcs.C_BELEPESDATUM <= @pDatumIg AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= @pDatumTol))
|
||
END
|
||
|
||
INSERT INTO #hibak
|
||
SELECT
|
||
8 AS oka -- 'a tanuló már tagja a max számú osztálynak'
|
||
,NULL AS OsztalyId
|
||
,NULL AS OsztalybontottCsoportId
|
||
,tcs.MinBesorolasDatum AS Datum
|
||
,NULL AS Darab
|
||
FROM (
|
||
SELECT
|
||
COUNT(tcs.ID) AS Darab
|
||
,ISNULL(IIF(@pIsCheckMaxOsztalyReturnKilepes = 1, MIN(tcs.C_KILEPESDATUM), MIN(tcs.C_BELEPESDATUM)), @pDatumTol) AS MinBesorolasDatum
|
||
FROM T_TANULOCSOPORT_OSSZES tcs
|
||
INNER JOIN T_OSZTALY o ON o.ID = tcs.C_OSZTALYCSOPORTID
|
||
AND o.TOROLT = 'F'
|
||
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tcs.C_OSZTALYCSOPORTID
|
||
AND ocs.TOROLT = 'F'
|
||
AND (ocs.C_FELADATKATEGORIAID = @pFeladatKategoriaId OR @pFeladatKategoriaId IS NULL)
|
||
WHERE tcs.TOROLT = 'F'
|
||
AND tcs.C_TANEVID = @pTanevId
|
||
AND tcs.C_TANULOID = @pTanuloId
|
||
AND (tcs.C_BELEPESDATUM <= @pDatumIg AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= @pDatumTol))
|
||
AND tcs.C_OSZTALYCSOPORTID <> @pFromOsztalyId
|
||
) tcs
|
||
INNER JOIN T_OKTNEVELESIKATEGORIA_OSSZES onk ON onk.ID = @pFeladatKategoriaId
|
||
AND onk.TOROLT = 'F'
|
||
AND onk.C_ALTANEVID = @pTanevId
|
||
WHERE tcs.Darab >= onk.C_FELADATCSOPORTTANULOOSZTALYK
|
||
END
|
||
|
||
SELECT * FROM #hibak
|
||
END
|
||
GO |