﻿/* ==================================================================================== */
/* Description: Intézmény szintű lekérdezés adott pTanevId szerint a tanulók névsoráról */
/* ==================================================================================== */
DROP PROCEDURE IF EXISTS uspGetTanulokNevsoraOsszesitoStatisztika
GO

CREATE PROCEDURE [dbo].[uspGetTanulokNevsoraOsszesitoStatisztika]
  @pTanevId int

AS BEGIN
SET NOCOUNT ON;

-- Tanév
SELECT
  tv.C_NEV
FROM T_TANEV_OSSZES tv
WHERE tv.TOROLT = 'F' AND tv.ID = @pTanevId

-- Osztaly/Csoport -ok félévvége dátumai
DROP TABLE IF EXISTS #ocstr
CREATE TABLE #ocstr (
   ocsId int
  ,FelevVegeDatum datetime
)

INSERT INTO #ocstr (
   ocsId
  ,FelevVegeDatum
) SELECT
   o.ID
  --,ocs.C_NEV
  ,CASE WHEN otr.C_OSZTALYCSOPORTID IS NOT NULL AND ktr.ID IS NOT NULL THEN ktr.C_DATUM
        WHEN otr.C_OSZTALYCSOPORTID IS NULL AND ktr0.ID IS NOT NULL THEN ktr0.C_DATUM
        ELSE tr.C_DATUM
        END AS FelevVegeDatum
FROM T_OSZTALY_OSSZES o
  INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = o.ID AND ocs.TOROLT = 'F'
  INNER JOIN T_TANEVRENDJE_OSSZES tr ON tr.C_TANEVID = o.C_ALTANEVID AND tr.C_NAPTIPUSA = 1400 AND tr.TOROLT = 'F'
  LEFT JOIN T_TANEVRENDJE_OSSZES ktr0 ON ktr0.C_TANEVID = o.C_ALTANEVID AND ktr0.C_NAPTIPUSA = 7605 AND ocs.C_KERESZTFELEVES = 'T' AND ktr0.C_OSSZESCSOPORTRAVONATKOZIK = 'T' AND ktr0.TOROLT = 'F'
  LEFT JOIN T_TANEVRENDJE_OSSZES ktr ON ktr.C_TANEVID = o.C_ALTANEVID AND ktr.C_NAPTIPUSA = 7605 AND ocs.C_KERESZTFELEVES = 'T' AND ktr.C_OSSZESCSOPORTRAVONATKOZIK = 'F' AND ktr.TOROLT = 'F'
  LEFT JOIN T_OSZTALYCSOPORT_TANEVRENDJE otr ON otr.C_OSZTALYCSOPORTID = o.ID AND otr.C_TANEVRENDJEID = ktr.ID
WHERE o.TOROLT = 'F' AND o.C_ALTANEVID = @pTanevId

-- I. félév
SELECT
   i.C_AZONOSITO AS Intezmeny
  ,fh.C_OKTATASIAZONOSITO AS OktatasiAzonosito
  ,C_NYOMTATASINEV AS Nev
  ,ocs.C_NEV AS Osztaly
  ,tcs.C_BELEPESDATUM AS BelepesDatuma
  ,tcs.C_KILEPESDATUM AS KilepesDatuma
  ,ocs.C_KERESZTFELEVES AS KeresztFeleves
FROM T_FELHASZNALO_OSSZES fh
  INNER JOIN T_TANULO_OSSZES t ON t.ID = fh.ID AND t.TOROLT = 'F'
  INNER JOIN T_TANEV_OSSZES tv ON tv.ID = fh.C_TANEVID AND tv.TOROLT = 'F'
  INNER jOIN T_INTEZMENY_OSSZES i ON i.ID = fh.C_INTEZMENYID AND i.TOROLT = 'F'
  -- osztályok, illetve itt a LEFT miatt megjelennek azok, akiknek soha nem volt még osztálya
  LEFT JOIN T_TANULOCSOPORT_OSSZES tcs
    INNER JOIN T_OSZTALY_OSSZES o ON o.ID = tcs.C_OSZTALYCSOPORTID AND o.TOROLT = 'F'
    INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = o.ID AND ocs.TOROLT = 'F'
    INNER JOIN #ocstr tr ON tr.ocsId = ocs.ID -- félév
    ON tcs.C_TANULOID = fh.ID AND tcs.TOROLT = 'F'
WHERE fh.TOROLT = 'F'
  AND fh.C_TANEVID = @pTanevId
  AND (tcs.ID IS NULL OR tcs.C_BELEPESDATUM <= tr.FelevVegeDatum)
ORDER BY Nev, Osztaly, BelepesDatuma

-- II. félév
SELECT
   i.C_AZONOSITO AS Intezmeny
  ,fh.C_OKTATASIAZONOSITO AS OktatasiAzonosito
  ,C_NYOMTATASINEV AS Nev
  ,ocs.C_NEV AS Osztaly
  ,tcs.C_BELEPESDATUM AS BelepesDatuma
  ,tcs.C_KILEPESDATUM AS KilepesDatuma
  ,ocs.C_KERESZTFELEVES AS KeresztFeleves
FROM T_FELHASZNALO_OSSZES fh
  INNER JOIN T_TANULO_OSSZES t ON t.ID = fh.ID AND t.TOROLT = 'F'
  INNER JOIN T_TANEV_OSSZES tv ON tv.ID = fh.C_TANEVID AND tv.TOROLT = 'F'
  INNER jOIN T_INTEZMENY_OSSZES i ON i.ID = fh.C_INTEZMENYID AND i.TOROLT = 'F'
  -- osztályok
  INNER JOIN T_TANULOCSOPORT_OSSZES tcs
    INNER JOIN T_OSZTALY_OSSZES o ON o.ID = tcs.C_OSZTALYCSOPORTID AND o.TOROLT = 'F'
    INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = o.ID AND ocs.TOROLT = 'F'
    INNER JOIN #ocstr tr ON tr.ocsId = ocs.ID -- félév
    ON tcs.C_TANULOID = fh.ID AND tcs.TOROLT = 'F'
WHERE fh.TOROLT = 'F' --AND GETDATE() >= tr.FelevVegeDatum
  AND fh.C_TANEVID = @pTanevId
  AND ((tcs.C_KILEPESDATUM > tr.FelevVegeDatum AND tcs.C_KILEPESDATUM <= tv.C_UTOLSONAP) OR tcs.C_KILEPESDATUM IS NULL)
ORDER BY Nev, Osztaly, BelepesDatuma

END
GO
