DROP FUNCTION IF EXISTS fnGetDokumentumKozossegiSzolgalatOsztalyonkent
GO

CREATE FUNCTION fnGetDokumentumKozossegiSzolgalatOsztalyonkent (@tanevId int, @osztalyId int, @idegenNyelvId int)
  RETURNS TABLE
RETURN (
    SELECT 
       tk.ID AS KozossegiSzolgalatId
      ,tk.C_TANEVID AS KozossegiSzolgalatTanevId
      ,currentTanulo.TanuloNev AS TanuloNev
      ,currentTanulo.TanuloId AS TanuloId
      ,currentTanulo.TanuloCsoportId AS TanuloCsoportId
      ,currentTanulo.OktatasiAzonosito AS TanuloOktAzon 
      ,FORMAT(C_INTERVALLUMKEZDETE, 'yyyy. MM. dd') + ' -' + char(13) + char(10) + FORMAT(C_INTERVALLUMVEGE, 'yyyy. MM. dd') AS Datum
      ,tk.C_MEGJEGYZES AS Megjegyzes
      ,tkny.C_MEGJEGYZES AS MegjegyzesIdegenNyelven
      ,tk.C_ORASZAM AS Oraszam
      ,tk.C_TELJESITESIHELYE AS TeljesitesHelye
      ,feljegyzo.C_NYOMTATASINEV AS FeljegyzoNeve
      ,tipus.C_NAME AS Tipus
      ,tk.C_INTERVALLUMKEZDETE AS IntervallumKezdete
      ,tk.C_INTERVALLUMVEGE AS IntervallumVege
      ,tipusNy.C_NAME AS TipusIdegenNyelven
      ,tkny.C_TELJESITESIHELYE AS TeljesitesHelyeIdegenNyelven
      ,feljegyzo.C_ELOTAG AS FeljegyzoNevElotag
      ,feljegyzo.C_VEZETEKNEV AS FeljegyzoNevVezeteknev
      ,feljegyzo.C_UTONEV AS FeljegyzoNevUtonev
    FROM T_FELHASZNALO_OSSZES tanulo
      INNER JOIN (
        SELECT 
           f.C_OKTATASIAZONOSITO as OktatasiAzonosito
          ,f.ID as TanuloId
          ,f.C_NYOMTATASINEV as TanuloNev
          ,tanulocsoport.ID as TanuloCsoportId
          ,CASE WHEN (SELECT C_AKTIV FROM T_TANEV_OSSZES WHERE ID = tanulocsoport.C_TANEVID AND TOROLT = 'F') = 'T'
            THEN 1
          ELSE (SELECT C_SORSZAM FROM T_TANEV_OSSZES WHERE ID = tanulocsoport.C_TANEVID AND TOROLT = 'F')
          END as IsAktivTanevOrTanevSorszama 
        FROM T_FELHASZNALO_OSSZES f
          CROSS APPLY (
            SELECT TOP 1 
               ID
              ,C_TANEVID 
            FROM T_TANULOCSOPORT_OSSZES subTanuloCsoport 
            WHERE subTanuloCsoport.TOROLT = 'F' AND subTanuloCsoport.C_OSZTALYCSOPORTID = @osztalyId AND subTanuloCsoport.C_TANULOID = f.ID 
            ORDER BY ISNULL(subTanuloCsoport.C_KILEPESDATUM, '22000101') DESC
          ) tanulocsoport
       WHERE f.TOROLT = 'F'
       ) currentTanulo ON tanulo.C_OKTATASIAZONOSITO = currentTanulo.OktatasiAzonosito
      INNER JOIN  T_TANULOKOZOSSEGISZOLGALAT_OSSZES tk ON tk.C_TANULOID = Tanulo.ID AND tk.TOROLT = 'F'
        AND (currentTanulo.IsAktivTanevOrTanevSorszama = 1 OR tk.C_TANEVID IN (SELECT ID FROM T_TANEV_OSSZES WHERE C_SORSZAM <= IsAktivTanevOrTanevSorszama AND C_INTEZMENYID = tk.C_INTEZMENYID AND TOROLT = 'F'))
      LEFT JOIN T_TANULOKOZOSSEGISZOLGALATNYEL_OSSZES tkny ON tkny.C_TANULOKOZOSSEGISZOLGALATID = tk.ID AND tkny.C_NYELVID = @idegenNyelvId AND tkny.TOROLT = 'F' AND tkny.C_TANEVID = @tanevId
      LEFT JOIN T_FELHASZNALO_OSSZES feljegyzo ON feljegyzo.ID = tk.C_FELJEGYZOID AND feljegyzo.TOROLT = 'F'
      LEFT JOIN T_DICTIONARYITEMBASE_OSSZES tipus ON tipus.Id = tk.C_KOZOSSEGISZOLGALATTIPUSA AND tipus.C_TANEVID = tk.C_TANEVID
      LEFT JOIN T_DICTIONARYITEMBASENYELV_OSSZES tipusNy ON tipusNy.ID = tk.C_KOZOSSEGISZOLGALATTIPUSA AND tipusNy.C_NYELVID = @idegenNyelvId AND tipusNy.C_TANEVID = @tanevId AND tipusNy.TOROLT = 'F'
    WHERE tanulo.TOROLT = 'F'
)