This commit is contained in:
skidoodle 2024-03-13 00:33:46 +01:00
commit e124a47765
19374 changed files with 9806149 additions and 0 deletions

View file

@ -0,0 +1,171 @@
DROP FUNCTION IF EXISTS dbo.fnGetKopcsolodoOsztalyCsoportokByDateRange;
GO
CREATE FUNCTION dbo.fnGetKopcsolodoOsztalyCsoportokByDateRange (
@pOsztalyCsoportId int
,@pStartDate datetime
,@pEndDate datetime
,@pIntezmenyId int
,@pTanevId int
)
RETURNS @Result TABLE (
Id int primary key NOT NULL
,Oka nvarchar(50) NOT NULL
,Kezdete datetime NOT NULL
,Vege datetime NOT NULL
) AS
BEGIN
DECLARE
@tanevStart datetime
,@tanevEnd datetime
,@osztalyId int
IF EXISTS (SELECT 1 FROM T_OSZTALY_OSSZES WHERE ID = @pOsztalyCsoportId) BEGIN
INSERT INTO @Result (Id, Oka, Kezdete, Vege)
SELECT
o.Id
,'OsztalycsoportOraja' AS Oka
,@pStartDate
,@pEndDate
FROM T_OSZTALY_OSSZES o
WHERE o.ID = @pOsztalyCsoportId
AND o.C_ALTANEVID = @pTanevID
AND o.C_ALINTEZMENYID = @pIntezmenyId
AND o.TOROLT = 'F'
UNION ALL
SELECT
cs.ID
,'OsztalybontottOra' AS Oka
,@pStartDate
,@pEndDate
FROM T_CSOPORT_OSSZES cs
WHERE C_OSZTALYBONTASID = @pOsztalyCsoportId
AND cs.TOROLT = 'F'
AND cs.C_ALTANEVID = @pTanevID
AND cs.C_ALINTEZMENYID = @pIntezmenyId
INSERT INTO @Result (Id, Oka, Kezdete, Vege)
SELECT
tcs.C_OSZTALYCSOPORTID AS Id
,'TanuloMasOra' AS Oka
,CASE
WHEN MIN(tcs.C_BELEPESDATUM) > MIN(oszt.C_BELEPESDATUM) AND MIN(tcs.C_BELEPESDATUM) > @pStartDate THEN MIN(tcs.C_BELEPESDATUM)
WHEN MIN(oszt.C_BELEPESDATUM) > MIN(tcs.C_BELEPESDATUM) AND MIN(oszt.C_BELEPESDATUM) > @pStartDate THEN MIN(oszt.C_BELEPESDATUM)
ELSE @pStartDate
END AS Kezdete -- A h<>rom k<>z<EFBFBD>l a legnagyobb
,CASE
WHEN MAX(ISNULL(tcs.C_KILEPESDATUM, @pEndDate)) < MAX(ISNULL(oszt.C_KILEPESDATUM, @pEndDate)) AND MAX(ISNULL(tcs.C_KILEPESDATUM, @pEndDate)) < @pEndDate THEN MIN(ISNULL(tcs.C_KILEPESDATUM, @pEndDate))
WHEN MAX(ISNULL(oszt.C_KILEPESDATUM, @pEndDate)) < MAX(ISNULL(tcs.C_KILEPESDATUM, @pEndDate)) AND MAX(ISNULL(oszt.C_KILEPESDATUM, @pEndDate)) < @pEndDate THEN MIN(ISNULL(oszt.C_KILEPESDATUM, @pEndDate))
ELSE @pEndDate -- A h<>rom k<>z<EFBFBD>l a legkisebb
END AS Vege
FROM T_TANULOCSOPORT_OSSZES tcs
INNER JOIN T_TANULOCSOPORT_OSSZES oszt
ON oszt.C_TANULOID = tcs.C_TANULOID
AND oszt.C_OSZTALYCSOPORTID = @pOsztalyCsoportId
AND oszt.C_BELEPESDATUM <= @pEndDate
AND (oszt.C_KILEPESDATUM > @pStartDate OR oszt.C_KILEPESDATUM IS NULL)
INNER JOIN T_CSOPORT_OSSZES cs ON cs.ID = tcs.C_OSZTALYCSOPORTID AND cs.C_OSZTALYBONTASID IS NULL
WHERE tcs.TOROLT = 'F'
AND oszt.TOROLT = 'F'
AND tcs.C_TANEVID = @pTanevId
AND tcs.C_INTEZMENYID = @pIntezmenyId
AND tcs.C_BELEPESDATUM <= @pEndDate
AND (tcs.C_KILEPESDATUM > @pStartDate OR tcs.C_KILEPESDATUM IS NULL)
AND NOT EXISTS (SELECT 1 FROM @Result r WHERE r.ID = tcs.C_OSZTALYCSOPORTID)
GROUP BY tcs.C_OSZTALYCSOPORTID
END
IF EXISTS (SELECT 1 FROM T_CSOPORT_OSSZES WHERE ID = @pOsztalyCsoportId AND C_OSZTALYBONTASID IS NOT NULL) BEGIN
-- nem bontott csoport
SELECT @osztalyId = C_OSZTALYBONTASID FROM T_CSOPORT_OSSZES WHERE ID = @pOsztalyCsoportId
INSERT INTO @Result (Id, Oka, Kezdete, Vege)
SELECT
@osztalyId
,'OsztalyOra' AS Oka
,@pStartDate
,@pEndDate
UNION ALL
SELECT
@pOsztalyCsoportId
,'OsztalycsoportOraja' AS Oka
,@pStartDate
,@pEndDate
INSERT INTO @Result (Id, Oka, Kezdete, Vege)
SELECT
tcs.C_OSZTALYCSOPORTID AS Id
,'TanuloMasOra' AS Oka
,CASE
WHEN MIN(tcs.C_BELEPESDATUM) > MIN(csop.C_BELEPESDATUM) AND MIN(tcs.C_BELEPESDATUM) > @pStartDate THEN MIN(tcs.C_BELEPESDATUM)
WHEN MIN(csop.C_BELEPESDATUM) > MIN(tcs.C_BELEPESDATUM) AND MIN(csop.C_BELEPESDATUM) > @pStartDate THEN MIN(csop.C_BELEPESDATUM)
ELSE @pStartDate
END AS Kezdete -- A h<>rom k<>z<EFBFBD>l a legnagyobb
,CASE
WHEN MAX(ISNULL(tcs.C_KILEPESDATUM, @pEndDate)) < MAX(ISNULL(csop.C_KILEPESDATUM, @pEndDate)) AND MAX(ISNULL(tcs.C_KILEPESDATUM, @pEndDate)) < @pEndDate THEN MIN(ISNULL(tcs.C_KILEPESDATUM, @pEndDate))
WHEN MAX(ISNULL(csop.C_KILEPESDATUM, @pEndDate)) < MAX(ISNULL(tcs.C_KILEPESDATUM, @pEndDate)) AND MAX(ISNULL(csop.C_KILEPESDATUM, @pEndDate)) < @pEndDate THEN MIN(ISNULL(csop.C_KILEPESDATUM, @pEndDate))
ELSE @pEndDate
END AS Vege -- A három közül a legkisebb
FROM T_TANULOCSOPORT_OSSZES tcs
INNER JOIN T_TANULOCSOPORT_OSSZES csop
ON tcs.C_TANULOID = csop.C_TANULOID
AND csop.C_OSZTALYCSOPORTID = @pOsztalyCsoportId
AND csop.C_BELEPESDATUM <= @pEndDate
AND (csop.C_KILEPESDATUM > @pStartDate OR csop.C_KILEPESDATUM IS NULL)
AND csop.TOROLT = 'F'
INNER JOIN T_CSOPORT_OSSZES cs
ON cs.ID = tcs.C_OSZTALYCSOPORTID
AND (cs.C_OSZTALYBONTASID IS NULL OR cs.C_OSZTALYBONTASID = @osztalyId)
WHERE tcs.C_OSZTALYCSOPORTID <> @pOsztalyCsoportId
AND tcs.C_TANEVID = @pTanevId
AND tcs.C_INTEZMENYID = @pIntezmenyId
AND tcs.C_BELEPESDATUM <= @pEndDate
AND (tcs.C_KILEPESDATUM > @pStartDate OR tcs.C_KILEPESDATUM IS NULL)
AND tcs.TOROLT = 'F' AND csop.TOROLT = 'F'
GROUP BY tcs.C_OSZTALYCSOPORTID
END
IF EXISTS (SELECT 1 FROM T_CSOPORT_OSSZES WHERE ID = @pOsztalyCsoportId AND C_OSZTALYBONTASID IS NULL) BEGIN
-- bontott csoport
INSERT INTO @Result (Id, Oka, Kezdete, Vege)
SELECT
tcs.C_OSZTALYCSOPORTID AS Id
,IIF(tcs.C_OSZTALYCSOPORTID = @pOsztalyCsoportId, 'OsztalycsoportOraja', 'TanuloMasOra') AS Oka
,CASE
WHEN MIN(tcs.C_BELEPESDATUM) > MIN(csop.C_BELEPESDATUM) AND MIN(tcs.C_BELEPESDATUM) > @pStartDate THEN MIN(tcs.C_BELEPESDATUM)
WHEN MIN(csop.C_BELEPESDATUM) > MIN(tcs.C_BELEPESDATUM) AND MIN(csop.C_BELEPESDATUM) > @pStartDate THEN MIN(csop.C_BELEPESDATUM)
ELSE @pStartDate
END AS Kezdete -- A h<>rom k<>z<EFBFBD>l a legnagyobb
,CASE
WHEN MAX(ISNULL(tcs.C_KILEPESDATUM, @pEndDate)) < MAX(ISNULL(csop.C_KILEPESDATUM, @pEndDate)) AND MAX(ISNULL(tcs.C_KILEPESDATUM, @pEndDate)) < @pEndDate THEN MIN(ISNULL(tcs.C_KILEPESDATUM, @pEndDate))
WHEN MAX(ISNULL(csop.C_KILEPESDATUM, @pEndDate)) < MAX(ISNULL(tcs.C_KILEPESDATUM, @pEndDate)) AND MAX(ISNULL(csop.C_KILEPESDATUM, @pEndDate)) < @pEndDate THEN MIN(ISNULL(csop.C_KILEPESDATUM, @pEndDate))
ELSE @pEndDate
END AS Vege -- A három közül a legkisebb
FROM T_TANULOCSOPORT_OSSZES tcs
INNER JOIN T_TANULOCSOPORT_OSSZES csop
ON tcs.C_TANULOID = csop.C_TANULOID
AND csop.C_OSZTALYCSOPORTID = @pOsztalyCsoportId
AND csop.C_BELEPESDATUM <= @pEndDate
AND (csop.C_KILEPESDATUM > @pStartDate OR csop.C_KILEPESDATUM IS NULL)
AND csop.TOROLT = 'F'
AND csop.C_BELEPESDATUM <= ISNULL(tcs.C_KILEPESDATUM, @pEndDate) AND ISNULL(csop.C_KILEPESDATUM, @pEndDate) > tcs.C_BELEPESDATUM
WHERE tcs.C_TANEVID = @pTanevId
AND tcs.C_INTEZMENYID = @pIntezmenyId
AND tcs.C_BELEPESDATUM <= @pEndDate
AND (tcs.C_KILEPESDATUM > @pStartDate OR tcs.C_KILEPESDATUM IS NULL)
AND tcs.TOROLT = 'F' AND csop.TOROLT = 'F'
GROUP BY tcs.C_OSZTALYCSOPORTID
END
RETURN
END
GO