﻿DROP PROCEDURE IF EXISTS uspGetOsztalyData
GO

CREATE PROCEDURE uspGetOsztalyData
   @pSearchDate datetime
  ,@pTanevId int
AS
BEGIN
  SET NOCOUNT ON;
  
  SELECT
     o.ID
    ,o.C_ALINTEZMENYID
    ,ocs.C_NEV AS OsztalyNev
    ,ocs.C_VEGZOSEVFOLYAM AS VegzosEvFolyam
    ,ofo.C_NYOMTATASINEV AS OsztalyFonok
    ,IIF(ofo.C_NEVSORREND = 'T',
      ofo.C_UTONEV + ' ' + ofo.C_VEZETEKNEV,
      ofo.C_VEZETEKNEV + ' ' + ofo.C_UTONEV) AS OsztalyFonokElotagNelkul
    ,t.C_NEV AS TanevNev
    ,ocs.C_EVFOLYAMTIPUSA AS Evfolyam
    ,CONCAT(ISNULL(TanulokSzama,0), ' (', ISNULL(tcsArchiv.ArchivTanulokSzama, 0), ')') AS TanulokSzama
    ,ISNULL(TanulokSzama, 0) * 1000 + ISNULL(tcsArchiv.ArchivTanulokSzama, 0) AS TanulokSzamaOrder
    ,tt.C_NEV AS TanTerv
    ,te.C_NEV AS TeremNev
    ,de.C_VALUE AS EvfolyamSorszama
    ,ISNULL(cs.CsoportokSzama, 0) AS CsoportokSzama
    ,ocs.C_MUVESZETIAGID AS MuveszetiAgId
    ,ocs.C_FELADATKATEGORIAID AS FeladatKategoriaId
    ,ofo.ID AS OsztalyfonokId
    ,ofoh.ID AS OsztalyfonokHelyettesId
    ,te.ID AS TeremId
    ,ocs.C_KEPZESIFORMA AS KepzesId
    ,tt.ID AS TantervId
    ,o.C_OSZTALYNAPLOMEGNYITASA AS OsztalynaploNyitasa
    ,o.C_OSZTALYNAPLOZARASA AS OsztalynaploZarasa
    ,ocs.C_FELADATELLATASIHELYID AS FeladatEllatasiHelyId
  FROM T_OSZTALY_OSSZES o WITH(NOLOCK)
    INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs WITH(NOLOCK) ON ocs.ID = o.ID AND ocs.TOROLT = 'F'
    LEFT JOIN T_TEREM_OSSZES te ON te.ID = ocs.C_TEREMID AND te.TOROLT = 'F'
    LEFT JOIN T_FELHASZNALO_OSSZES ofo ON ofo.ID = o.C_OSZTALYFONOKID AND ofo.TOROLT = 'F'
    LEFT JOIN T_FELHASZNALO_OSSZES ofoh ON ofoh.ID = o.C_OSZTALYFONOKID AND ofoh.TOROLT = 'F'
    INNER JOIN T_TANEV_OSSZES t ON t.ID = ocs.C_TANEVID
      AND t.ID = @pTanevId
      AND t.TOROLT = 'F'
    LEFT JOIN T_TANTERV_OSSZES tt on tt.ID = o.C_TANTERVID and tt.TOROLT = 'F'
    LEFT JOIN T_DICTIONARYITEMBASE_OSSZES de on de.ID = ocs.C_EVFOLYAMTIPUSA
      AND de.C_TANEVID = ocs.C_TANEVID
      AND de.TOROLT = 'F'
    LEFT JOIN
    (
      SELECT 
        COUNT(DISTINCT C_TANULOID) AS TanulokSzama
        ,C_OSZTALYCSOPORTID
      FROM T_TANULOCSOPORT_OSSZES tcs
        JOIN T_TANEV_OSSZES tanev on tanev.ID = tcs.C_TANEVID AND tanev.TOROLT = 'F'
      WHERE tcs.TOROLT='F'
        AND 
        (
          (
            tcs.C_BELEPESDATUM <= @pSearchDate 
            AND 
            (
              tcs.C_KILEPESDATUM IS NULL or tcs.C_KILEPESDATUM >= CONVERT(DATE, @pSearchDate)
            )
            AND tanev.C_AKTIV = 'T'
          )
          OR tanev.C_AKTIV = 'F'
        )
      GROUP BY tcs.C_OSZTALYCSOPORTID
    ) AS TC ON TC.C_OSZTALYCSOPORTID = ocs.ID
    LEFT JOIN 
    (
      SELECT 
         COUNT(1) AS ArchivTanulokSzama
        ,C_OSZTALYCSOPORTID
      FROM T_TANULOCSOPORT_OSSZES tcs 
      WHERE tcs.TOROLT = 'F'
      GROUP BY C_OSZTALYCSOPORTID
    ) tcsArchiv ON tcsArchiv.C_OSZTALYCSOPORTID = ocs.ID
    LEFT JOIN 
    (
      SELECT 
         COUNT(cs.ID) AS CsoportokSzama
        ,cs.C_OSZTALYBONTASID
        ,cs.C_ALINTEZMENYID
        ,cs.C_ALTANEVID
      FROM T_CSOPORT_OSSZES cs 
      WHERE cs.TOROLT = 'F'
      GROUP BY cs.C_OSZTALYBONTASID, cs.C_ALTANEVID, cs.C_ALINTEZMENYID
    ) cs ON cs.C_OSZTALYBONTASID = o.ID
    AND cs.C_ALTANEVID = o.C_ALTANEVID
    AND cs.C_ALINTEZMENYID = o.C_ALINTEZMENYID
  WHERE o.TOROLT = 'F'
    AND o.C_ALTANEVID = @pTanevId

END