257 lines
9.2 KiB
Transact-SQL
257 lines
9.2 KiB
Transact-SQL
DROP PROCEDURE IF EXISTS [dbo].[sp_GetTanulokMulasztasaiKesesei]
|
|
GO
|
|
|
|
-- ==========================================================================================
|
|
-- Description: <Az osztoly/csoport tanulóinak vagy egy adott tanulónak a mulasztásai>
|
|
-- ==========================================================================================
|
|
CREATE PROCEDURE [dbo].[sp_GetTanulokMulasztasaiKesesei]
|
|
@pIntezmenyId INT
|
|
,@pTanevId INT
|
|
,@pOsztalyCsoportId INT = NULL
|
|
,@pTanuloId INT = NULL
|
|
,@pIsCsoportVez INT = 0
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
|
|
DECLARE
|
|
@elmeletiOraPercben INT = 45
|
|
,@gyakorlatiOraPercben INT = 45
|
|
,@osztalyCsoportNev NVARCHAR(200)
|
|
|
|
SELECT
|
|
@osztalyCsoportNev = C_NEV
|
|
FROM
|
|
T_OSZTALYCSOPORT
|
|
WHERE
|
|
ID = @pOsztalyCsoportId
|
|
AND T_OSZTALYCSOPORT.TOROLT = 'F'
|
|
|
|
|
|
CREATE TABLE #Tanulok(Id INT PRIMARY KEY)
|
|
|
|
IF @pTanuloId IS NOT NULL
|
|
BEGIN
|
|
INSERT INTO #Tanulok (Id) VALUES (@pTanuloId)
|
|
END
|
|
ELSE BEGIN
|
|
INSERT INTO
|
|
#Tanulok (Id)
|
|
SELECT
|
|
C_TANULOID
|
|
FROM
|
|
T_TANULOCSOPORT_OSSZES tcs
|
|
WHERE
|
|
tcs.C_OSZTALYCSOPORTID = @pOsztalyCsoportId
|
|
AND tcs.C_BELEPESDATUM <= GETDATE()
|
|
AND (tcs.C_KILEPESDATUM > GETDATE() OR tcs.C_KILEPESDATUM IS NULL)
|
|
AND tcs.TOROLT = 'F'
|
|
|
|
END
|
|
|
|
DECLARE @sql nvarchar(max) = ''
|
|
|
|
SET @sql += N'
|
|
SELECT
|
|
fh.ID TanuloId
|
|
,fh.C_NYOMTATASINEV TanuloNev
|
|
,fh.C_SZULETESIDATUM SzuletesiIdo
|
|
,fh.C_ANYJANEVE AnyjaNeve
|
|
,@osztalyCsoportNev OsztCsopNev
|
|
,ISNULL(m.[hianyzasIgazolandoTanorai], 0) TanoraiHianyzasIgazolando
|
|
,ISNULL(m.[hianyzasIgazolandoTanoranKivuli], 0) TanoranKivuliHianyzasIgazolando
|
|
,ISNULL(m.[hianyzasIgazoltTanorai], 0) TanoraiHianyzasIgazolt
|
|
,ISNULL(m.[hianyzasIgazoltTanoranKivuli], 0) TanoranKivuliHianyzasIgazolt
|
|
,ISNULL(m.[hianyzasIgazolatlanTanorai], 0) TanoraiHianyzasIgazolatlan
|
|
,ISNULL(m.[hianyzasIgazolatlanTanoranKivuli], 0) TanoranKivuliHianyzasIgazolatlan
|
|
,ISNULL(m.[kesesIgazolandoTanorai], 0) TanoraiKesesDarabszamIgazolando
|
|
,ISNULL(m.[kesesIgazoltTanorai], 0) TanoraiKesesDarabszamIgazolt
|
|
,ISNULL(m.[kesesIgazolatlanTanorai], 0) TanoraiKesesDarabszamIgazolatlan
|
|
,ISNULL(k.[kesesIgazolandoTanoraiPerc], 0) TanoraiKesesIgazolandoPerc
|
|
,ISNULL(k.[kesesIgazoltTanoraiPerc], 0) TanoraiKesesIgazoltPerc
|
|
,ISNULL(k.[kesesIgazolatlanTanoraiPerc], 0) TanoraiKesesIgazolatlanPerc
|
|
,ISNULL(kp.[kesesIgazolandoTanoraiPluszOra], 0) SzamitottKesesIgazolando
|
|
,ISNULL(kp.[kesesIgazoltTanoraiPluszOra], 0) SzamitottKesesIgazolt
|
|
,ISNULL(kp.[kesesIgazolatlanTanoraiPluszOra], 0) SzamitottKesesIgazolatlan
|
|
FROM (
|
|
SELECT
|
|
ID
|
|
,C_NYOMTATASINEV
|
|
,C_SZULETESIDATUM
|
|
,C_ANYJANEVE
|
|
FROM
|
|
T_FELHASZNALO_OSSZES fh
|
|
WHERE
|
|
EXISTS (SELECT 1 FROM #Tanulok tk WHERE tk.Id = fh.ID)
|
|
) fh
|
|
LEFT JOIN (
|
|
SELECT
|
|
tanuloId
|
|
,[hianyzasIgazolandoTanorai]
|
|
,[hianyzasIgazolandoTanoranKivuli]
|
|
,[hianyzasIgazoltTanorai]
|
|
,[hianyzasIgazoltTanoranKivuli]
|
|
,[hianyzasIgazolatlanTanorai]
|
|
,[hianyzasIgazolatlanTanoranKivuli]
|
|
,[kesesIgazolandoTanorai]
|
|
,[kesesIgazoltTanorai]
|
|
,[kesesIgazolatlanTanorai]
|
|
FROM (
|
|
SELECT
|
|
x.tanuloId
|
|
,CASE mulasztasTipus WHEN 1500 THEN ''Hianyzas'' WHEN 1499 THEN ''Keses'' END +
|
|
CASE WHEN isIgazolt IS NULL THEN ''Igazolando'' WHEN isIgazolt = ''T'' THEN ''Igazolt'' WHEN isIgazolt = ''F'' THEN ''Igazolatlan'' END +
|
|
CASE isTanorai WHEN ''T'' THEN ''Tanorai'' WHEN ''F'' THEN ''TanoranKivuli'' END AS piv
|
|
,cnt
|
|
FROM (
|
|
SELECT
|
|
m.C_ORATANULOIID AS tanuloId
|
|
,m.C_TIPUS mulasztasTipus
|
|
,m.C_IGAZOLT isIgazolt
|
|
,IIF(cs.ID IS NULL, ''T'', ''F'') AS isTanorai
|
|
,COUNT(1) AS cnt
|
|
FROM T_TANULOMULASZTAS_OSSZES m
|
|
INNER JOIN T_TANITASIORA_OSSZES tn ON tn.ID = m.C_TANITASIORAKID ' + IIF(@pIsCsoportVez = 1, N' AND tn.C_OSZTALYCSOPORTID = @pOsztalyCsoportId ','')
|
|
|
|
SET @sql += N'
|
|
INNER JOIN T_TANULO tanulo ON tanulo.ID = m.C_ORATANULOIID
|
|
LEFT JOIN T_CSOPORT_OSSZES cs ON tn.C_OSZTALYCSOPORTID = cs.ID AND cs.C_TIPUSA NOT IN (SELECT ID FROM fnGetTanoraiCeluCsoportTipusok(@pTanevId))
|
|
INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_OSZTALYCSOPORTID = tn.C_OSZTALYCSOPORTID AND m.C_ORATANULOIID = tcs.C_TANULOID AND tcs.TOROLT = ''F''
|
|
WHERE m.C_INTEZMENYID = @pIntezmenyId
|
|
AND m.C_TANEVID = @pTanevId
|
|
AND m.Torolt =''F''
|
|
AND EXISTS (SELECT 1 FROM #Tanulok tk WHERE tk.Id = m.C_ORATANULOIID)
|
|
AND tcs.C_BELEPESDATUM <= tn.C_DATUM
|
|
AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM > tn.C_DATUM)
|
|
AND (tanulo.C_MAGANTANULO = ''F'' OR (tanulo.C_MAGANTANULO = ''T'' AND tanulo.C_MAGANTANULOSAGKEZDETE > tn.C_DATUM))
|
|
AND m.C_TIPUS != 1817
|
|
GROUP BY m.C_ORATANULOIID, m.C_TIPUS, m.C_IGAZOLT, IIF(cs.ID IS NULL, ''T'', ''F'')
|
|
) x
|
|
) p
|
|
PIVOT (
|
|
MAX(cnt)
|
|
FOR piv IN ([hianyzasIgazolandoTanorai], [hianyzasIgazolandoTanoranKivuli], [hianyzasIgazoltTanorai], [hianyzasIgazoltTanoranKivuli], [hianyzasIgazolatlanTanorai], [hianyzasIgazolatlanTanoranKivuli], [kesesIgazolandoTanorai], [kesesIgazoltTanorai], [kesesIgazolatlanTanorai])
|
|
) AS pvt
|
|
) m ON fh.ID = m.tanuloId
|
|
'
|
|
|
|
SET @sql += N'
|
|
LEFT JOIN (
|
|
SELECT
|
|
tanuloId
|
|
,[kesesIgazolandoTanoraiPerc]
|
|
,[kesesIgazoltTanoraiPerc]
|
|
,[kesesIgazolatlanTanoraiPerc]
|
|
FROM (
|
|
SELECT
|
|
x.tanuloId
|
|
,''Keses'' +
|
|
CASE WHEN isIgazolt IS NULL THEN ''Igazolando'' WHEN isIgazolt = ''T'' THEN ''Igazolt'' WHEN isIgazolt = ''F'' THEN ''Igazolatlan'' END +
|
|
''TanoraiPerc'' AS piv
|
|
,kesesPercben
|
|
FROM (
|
|
SELECT
|
|
m.C_ORATANULOIID AS tanuloId
|
|
,m.C_IGAZOLT isIgazolt
|
|
,SUM(m.C_KESESPERCBEN) AS kesesPercben
|
|
FROM T_TANULOMULASZTAS_OSSZES m
|
|
INNER JOIN T_TANITASIORA_OSSZES tn ON tn.ID = m.C_TANITASIORAKID ' + IIF(@pIsCsoportVez = 1, N' AND tn.C_OSZTALYCSOPORTID = @pOsztalyCsoportId ','')
|
|
|
|
SET @sql += N'
|
|
LEFT JOIN T_CSOPORT_OSSZES cs ON tn.C_OSZTALYCSOPORTID = cs.ID
|
|
INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_OSZTALYCSOPORTID = tn.C_OSZTALYCSOPORTID AND m.C_ORATANULOIID = tcs.C_TANULOID AND tcs.TOROLT = ''F''
|
|
WHERE m.C_INTEZMENYID = @pIntezmenyId
|
|
AND m.C_TANEVID = @pTanevId
|
|
AND m.Torolt =''F''
|
|
AND EXISTS (SELECT 1 FROM #Tanulok tk WHERE tk.Id = m.C_ORATANULOIID)
|
|
AND (cs.ID IS NULL OR cs.C_TIPUSA IN (SELECT ID FROM fnGetTanoraiCeluCsoportTipusok(@pTanevId)))
|
|
AND tcs.C_BELEPESDATUM <= tn.C_DATUM
|
|
AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM > tn.C_DATUM)
|
|
AND m.C_TIPUS = 1499
|
|
GROUP BY m.C_ORATANULOIID, m.C_IGAZOLT
|
|
) x
|
|
) p
|
|
PIVOT (
|
|
MAX(kesesPercben)
|
|
FOR piv IN ([kesesIgazolandoTanoraiPerc], [kesesIgazoltTanoraiPerc], [kesesIgazolatlanTanoraiPerc])
|
|
) AS pvt
|
|
) k ON k.tanuloId = m.tanuloId
|
|
'
|
|
|
|
SET @sql += N'
|
|
LEFT JOIN (
|
|
SELECT
|
|
tanuloId
|
|
,[kesesIgazolandoTanoraiPluszOra]
|
|
,[kesesIgazoltTanoraiPluszOra]
|
|
,[kesesIgazolatlanTanoraiPluszOra]
|
|
FROM (
|
|
SELECT
|
|
x.tanuloId
|
|
,''Keses'' +
|
|
CASE WHEN isIgazolt IS NULL THEN ''Igazolando'' WHEN isIgazolt = ''T'' THEN ''Igazolt'' WHEN isIgazolt = ''F'' THEN ''Igazolatlan'' END +
|
|
''TanoraiPluszOra'' AS piv
|
|
,kesesOraban
|
|
FROM (
|
|
SELECT
|
|
xx.tanuloId
|
|
,xx.isIgazolt
|
|
,SUM(xx.keses / (CASE WHEN isGyakorlati = ''F'' THEN @elmeletiOraPercben ELSE @gyakorlatiOraPercben END)) AS kesesOraban
|
|
FROM (
|
|
SELECT
|
|
m.C_ORATANULOIID AS tanuloId
|
|
,m.C_IGAZOLT isIgazolt
|
|
,t.C_GYAKORLATI AS isGyakorlati
|
|
,SUM(m.C_KESESPERCBEN) AS keses
|
|
FROM T_TANULOMULASZTAS_OSSZES m
|
|
INNER JOIN T_TANITASIORA_OSSZES tn ON tn.ID = m.C_TANITASIORAKID' + IIF(@pIsCsoportVez = 1, N' AND tn.C_OSZTALYCSOPORTID = @pOsztalyCsoportId ','')
|
|
|
|
SET @sql += N'
|
|
INNER JOIN T_TANTARGY_OSSZES t ON t.ID = tn.C_TANTARGYID
|
|
LEFT JOIN T_CSOPORT_OSSZES cs ON tn.C_OSZTALYCSOPORTID = cs.ID
|
|
INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_OSZTALYCSOPORTID = tn.C_OSZTALYCSOPORTID AND m.C_ORATANULOIID = tcs.C_TANULOID AND tcs.TOROLT = ''F''
|
|
WHERE m.C_INTEZMENYID = @pIntezmenyId
|
|
AND m.C_TANEVID = @pTanevId
|
|
AND EXISTS (SELECT 1 FROM #Tanulok tk WHERE tk.Id = m.C_ORATANULOIID)
|
|
AND (cs.ID IS NULL OR cs.C_TIPUSA IN (SELECT ID FROM fnGetTanoraiCeluCsoportTipusok(@pTanevId)))
|
|
AND tcs.C_BELEPESDATUM <= tn.C_DATUM
|
|
AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM > tn.C_DATUM)
|
|
AND m.C_TIPUS = 1499
|
|
AND m.TOROLT = ''F''
|
|
GROUP BY
|
|
m.C_ORATANULOIID
|
|
,m.C_IGAZOLT
|
|
,t.C_GYAKORLATI
|
|
) xx
|
|
GROUP BY tanuloId, xx.isIgazolt
|
|
) x
|
|
) p
|
|
PIVOT (
|
|
MAX(kesesOraban)
|
|
FOR piv IN ([kesesIgazolandoTanoraiPluszOra], [kesesIgazoltTanoraiPluszOra], [kesesIgazolatlanTanoraiPluszOra])
|
|
) AS pvt
|
|
) kp ON m.tanuloId = kp.tanuloId
|
|
'
|
|
|
|
EXEC sp_executesql @sql, N'
|
|
@pIntezmenyId INT
|
|
,@pTanevId INT
|
|
,@pOsztalyCsoportId INT
|
|
,@pTanuloId INT
|
|
,@pIsCsoportVez INT
|
|
,@elmeletiOraPercben INT
|
|
,@gyakorlatiOraPercben INT
|
|
,@osztalyCsoportNev NVARCHAR(200)'
|
|
,@pIntezmenyId = @pIntezmenyId
|
|
,@pTanevId = @pTanevId
|
|
,@pOsztalyCsoportId = @pOsztalyCsoportId
|
|
,@pTanuloId = @pTanuloId
|
|
,@pIsCsoportVez = @pIsCsoportVez
|
|
,@elmeletiOraPercben = @elmeletiOraPercben
|
|
,@gyakorlatiOraPercben = @gyakorlatiOraPercben
|
|
,@osztalyCsoportNev = @osztalyCsoportNev
|
|
|
|
END
|
|
GO
|
|
|
|
|