﻿DROP PROCEDURE IF EXISTS dbo.sp_GetSzakmaiGyNaplo
GO

CREATE PROCEDURE [dbo].[sp_GetSzakmaiGyNaplo]
   @tanevId int
  ,@intezmenyId int
  ,@csoportId int
  ,@iskolaErdekuSzamit bit

AS
BEGIN
  SET NOCOUNT ON;
  CREATE TABLE #Tanulo (
     Tanulo int
    ,Osztaly nvarchar(max)
    ,TanuloNeve nvarchar(255)
    ,TanuloOktAzon nvarchar(20)
    ,BelepesDatum DATETIME
  )
  CREATE TABLE #OraSorszam (
     TanitasioraId int
    ,OraSorszam int
  )
  CREATE TABLE #mulasztas (
     Csoport nvarchar(1)
    ,Tanulo int
    ,Oraszam int
  )
  CREATE TABLE #hianyzas (
     Tanulo int
    ,Osztaly nvarchar(max)
    ,Honap int
    ,IgazoltE nvarchar(1)
  )
  CREATE TABLE #hianyzasOssz (
     Osztaly int
    ,Honap int
    ,IgazoltE nvarchar(1)
  )
  CREATE TABLE #igazoltH (Csoport int, [1] int, [2] int, [3] int, [4] int, [5] int, [6] int, [7] int, [8] int, [9] int, [10] int, 
                  [11] int, [12] int)
  CREATE TABLE #igazolatlanH (Csoport int, [1] int, [2] int, [3] int, [4] int, [5] int, [6] int, [7] int, [8] int, [9] int, [10] int, 
                  [11] int, [12] int)
  CREATE TABLE #Igazolt (
     Csoport int
    ,Osszes int
  )
  CREATE TABLE #IgazoltOsszesOsszes (
     Csoport int
    ,Osszes int
  )

  --Kezdőoldal
  SELECT
     ia.c_nev as IntezmenyNev
    ,dbo.fnGetDokumentumIntezmenyCime(@tanevId) as IntezmenyCim
    ,ia.c_omkod as OMKOD
    ,ia.c_igazgatoneve as IntezmenyVezeto
    ,ocs.c_nev NapkozisCsoport
    ,isnull(f.c_nyomtatasinev,'-') as CsoportVezeto
    ,isnull(cs.c_csoportnaploleiras,'-') as CsoportNaploLeiras
    ,FORMAT(cs.c_csoportnaplomegnyitasa, 'yyyy. MMMM dd.', 'hu-hu') as Megnyitas
    ,isnull(FORMAT(cs.c_csoportnaplozarasa, 'yyyy. MMMM dd.', 'hu-hu'),'-') as Lezaras
    ,t.c_nev as Tanev
    ,cs.c_csoportnaploleiras as Megjegyzes 
    ,ocs.ID NapkozisCsoportId
    ,f.ID CsoportVezetoId
    ,ISNULL(ocs.C_EVFOLYAMTIPUSA, 1296) AS EvfolyamTipusa -- 1296 = Na
    ,ocs.C_FELADATELLATASIHELYID as FeladatEllatasiHelyId
    ,ocs.C_KERESZTFELEVES as OJCSJKeresztfeleves
    ,ocs.C_VEGZOSEVFOLYAM as CSJVegzosEvfolyamu
    ,cs.C_TIPUSA as CsoportTipusa
  FROM T_INTEZMENY_OSSZES i
    INNER JOIN T_INTEZMENYADATOK_OSSZES ia on ia.C_INTEZMENYID = i.ID
    INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs on ocs.C_INTEZMENYID = i.ID
    INNER JOIN T_CSOPORT_OSSZES cs on cs.ID = ocs.ID
    LEFT JOIN T_FELHASZNALO_OSSZES f on f.ID = cs.C_CSOPORTVEZETOID
    INNER JOIN T_TANEV_OSSZES t on t.ID = ia.C_TANEVID
  WHERE i.ID = @intezmenyid 
    AND ia.C_TANEVID = @tanevid 
    AND ocs.ID = @csoportId

--Csoport tanulóinak osztályai
  SELECT
     COUNT(DISTINCT TanuloId) Tanulo
    ,dbo.fnGetDokumentumTanuloAktualisOsztaly(TanuloId) Osztaly
    ,dbo.fnGetDokumentumTanuloAktualisOsztalyId(TanuloId) OsztalyId
  FROM fnGetDokumentumOsztalyokCsoportokTanuloi(@tanevId, @csoportId, 'T')
  GROUP BY dbo.fnGetDokumentumTanuloAktualisOsztaly(TanuloId), dbo.fnGetDokumentumTanuloAktualisOsztalyId(TanuloId)

  INSERT INTO #Tanulo 
  SELECT
     ocst.TanuloId
    ,dbo.fnGetDokumentumTanuloAktualisOsztaly(ocst.TanuloId) /*TODO:Tobb Osztaly*//*OM-1600*/
    ,fh.C_NYOMTATASINEV
    ,fh.C_OKTATASIAZONOSITO
    ,ocst.BelepesDatum  AS  BelepesDatum
  FROM fnGetDokumentumOsztalyokCsoportokTanuloi(@tanevId, @csoportId, 'T') AS ocst
    INNER JOIN T_FELHASZNALO_OSSZES fh ON fh.ID=ocst.TanuloId AND fh.TOROLT='F'

  DECLARE @datum date = getdate()
 
  INSERT INTO #OraSorszam 
  EXEC [sp_GetOraSorszamByOsztaly]
     @osztalyCsoportId = @csoportId
    ,@datum = @datum
    ,@intezmenyId = @intezmenyId
    ,@tanevId = @tanevId

  INSERT INTO #mulasztas
  SELECT 
     'x' Csoport
    ,tm.c_oratanuloiid Tanulo
    ,oes.OraSorszam AS OraSzam 
  FROM T_TANULOMULASZTAS_OSSZES tm
    INNER JOIN T_TANITASIORA_OSSZES tao on tm.C_TANITASIORAKID=tao.ID and tao.C_TANEVID=@tanevid
    LEFT JOIN #OraSorszam oes on oes.TanitasioraId=tao.ID
  WHERE tao.C_OSZTALYCSOPORTID=@csoportId 
    AND tm.TOROLT='F' 
    AND tm.C_TANEVID=@tanevid 
    AND tm.C_INTEZMENYID=@intezmenyid
    AND (@iskolaErdekuSzamit = 1 OR (C_IGAZOLASTIPUSA <> 1533 OR C_IGAZOLASTIPUSA IS NULL))

  SELECT f.c_nyomtatasinev Tanulo, tanulo.Osztaly Osztaly, m.[1], m.[2], m.[3], m.[4], m.[5], m.[6], m.[7], m.[8], m.[9], m.[10], 
                    m.[11], m.[12], m.[13], m.[14], m.[15], m.[16], m.[17], m.[18],m.[19],m.[20],
                    m.[21], m.[22], m.[23], m.[24], m.[25], m.[26], m.[27], m.[28],m.[29],m.[30],
                    m.[31], m.[32], m.[33], m.[34], m.[35], m.[36], m.[37], m.[38],m.[39],m.[40],
                    m.[41], m.[42], m.[43], m.[44], m.[45], m.[46], m.[47], m.[48],m.[49],m.[50], 
                    osszesM.Osszes, tanulo.BelepesDatum 
  FROM #Tanulo tanulo
    LEFT JOIN (select * from #mulasztas mulasztas pivot (max(Csoport) for Oraszam in ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], 
                                     [11], [12], [13], [14], [15], [16], [17], [18],[19],[20],
                                     [21], [22], [23], [24], [25], [26], [27], [28],[29],[30],
                                     [31], [32], [33], [34], [35], [36], [37], [38],[39],[40],
                                     [41], [42], [43], [44], [45], [46], [47], [48],[49],[50])) pv)m on m.Tanulo=tanulo.Tanulo
  INNER JOIN T_FELHASZNALO_OSSZES f on f.id=tanulo.Tanulo
  LEFT JOIN (select Tanulo, count(Csoport) as Osszes from #mulasztas m group by Tanulo) osszesM on osszesM.Tanulo=tanulo.Tanulo
  order by f.c_nyomtatasinev

  --napló
  declare @letszam int=(select count(tcs.c_tanuloid) from T_TANULOCSOPORT_OSSZES tcs where tcs.c_osztalycsoportid=@csoportId and tcs.Torolt='F')

  SELECT 
     tao.Id TanitasioraId
    ,dbo.fnGetDokumentumDatumFormatum(tao.C_DATUM) Datum    
    ,C_ORATULAJDONOSID PedagogusId
    ,ISNULL('Helyettesítő: ' + helyettesito.C_NYOMTATASINEV, pedagogus.C_NYOMTATASINEV) PedagogusNev
    ,IIF(C_MEGTARTOTT = 'T', REPLACE(REPLACE(C_TEMA, CHAR(0x0007),''), CHAR(0x000B), ''), 'Elmaradt') Tema
    ,@letszam-isnull(hianyzo.Hianyzok,0) as Letszam
    ,IIF(tantargy.C_NEV <> C_NEVNYOMTATVANYBAN AND C_NEVNYOMTATVANYBAN IS NOT NULL, C_NEVNYOMTATVANYBAN + ' (' + tantargy.C_NEV + ')', tantargy.C_NEV) TantargyNev
    ,tao.C_TANTARGYID TantargyId
    ,tao.C_MEGTARTOTT Megtartott
    ,C_OSZTALYCSOPORTID OsztalyCsoportId
  INTO #megtartottOrak
  FROM T_TANITASIORA_OSSZES tao
    LEFT JOIN (
      SELECT 
         tm.c_tanitasiorakid as Tanitasiora
        ,count(tm.c_oratanuloiid) Hianyzok 
      FROM T_TANULOMULASZTAS_OSSZES tm 
      WHERE tm.TOROLT='F' 
      GROUP BY tm.c_tanitasiorakid) hianyzo ON hianyzo.Tanitasiora=tao.id
    INNER JOIN T_FELHASZNALO_OSSZES pedagogus ON pedagogus.ID = tao.C_TANARID
    LEFT JOIN T_FELHASZNALO_OSSZES helyettesito ON helyettesito.ID = tao.C_HELYETTESITOTANARID
    INNER JOIN T_TANTARGY_OSSZES tantargy ON tantargy.ID = tao.C_TANTARGYID AND tantargy.C_GYAKORLATI = 'T'
  WHERE C_OSZTALYCSOPORTID = @csoportId
    AND tao.TOROLT = 'F'
  ORDER BY tao.C_DATUM

  SELECT * FROM #megtartottOrak

--hiányzások
  
  INSERT INTO #hianyzas
  SELECT 
     Tanulo
    ,Osztaly
    ,datepart(month,tao.c_datum) as Honap
    ,tm.c_igazolt as IgazoltE 
  FROM #Tanulo tanulo
    LEFT JOIN T_TANULOMULASZTAS_OSSZES tm on tm.C_ORATANULOIID=tanulo.Tanulo AND tm.TOROLT='F' AND tm.C_TANEVID=@tanevid 
    LEFT JOIN T_TANITASIORA_OSSZES tao on tao.ID=tm.C_TANITASIORAKID AND tao.C_TANEVID=@tanevid 
  WHERE tao.C_OSZTALYCSOPORTID=@csoportId 
    AND tao.TOROLT='F'
    AND (@iskolaErdekuSzamit = 1 OR (C_IGAZOLASTIPUSA <> 1533 OR C_IGAZOLASTIPUSA IS NULL))

  SELECT f.c_nyomtatasinev as Tanulo, tanulo.Osztaly Osztaly, 
      --igazolt
      iif(i.[1]=0,null, i.[1]) as [1], iif(i.[2]=0,null, i.[2]) as [2], iif(i.[3]=0,null, i.[3]) as [3], iif(i.[4]=0,null, i.[4]) as [4], iif(i.[5]=0,null, i.[5]) as [5],iif(i.[6]=0,null, i.[6]) as [6],
      iif(i.[7]=0,null, i.[7]) as [7], iif(i.[8]=0,null, i.[8]) as [8], iif(i.[9]=0,null, i.[9]) as [9], iif(i.[10]=0,null, i.[10]) as [10], iif(i.[11]=0,null, i.[11]) as [11],  iif(i.[12]=0,null, i.[12]) as [12],
      --igazolatlan
      iif(ni.[1]=0,null, ni.[1]) as n1, iif(ni.[2]=0,null, ni.[2]) as n2, iif(ni.[3]=0,null, ni.[3]) as n3, iif(ni.[4]=0,null, ni.[4]) as n4, iif(ni.[5]=0,null, ni.[5]) as n5,iif(ni.[6]=0,null, ni.[6]) as n6,
      iif(ni.[7]=0,null, ni.[7]) as n7, iif(ni.[8]=0,null, ni.[8]) as n8, iif(ni.[9]=0,null, ni.[9]) as n9, iif(ni.[10]=0,null, ni.[10]) as n10, iif(ni.[11]=0,null, ni.[11]) as n11,  iif(ni.[12]=0,null, ni.[12]) as n12,
      igazolt.Igazolt, igazolatlan.Igazolatlan, tanulo.BelepesDatum
  FROM #Tanulo tanulo
    LEFT JOIN (select pv.* from #hianyzas hianyzas pivot (count(Honap) for Honap in ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12]))pv where pv.IgazoltE='T')i on tanulo.Tanulo=i.Tanulo
    LEFT JOIN (select pv.* from #hianyzas hianyzas pivot (count(Honap) for Honap in ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12]))pv where pv.IgazoltE='F')ni on tanulo.Tanulo=ni.Tanulo
    LEFT JOIN (select hianyzas.Tanulo Tanulo, count(IgazoltE) as Igazolt from #hianyzas hianyzas where hianyzas.IgazoltE='T' group by hianyzas.Tanulo) igazolt on igazolt.Tanulo=tanulo.Tanulo
    LEFT JOIN (select hianyzas.Tanulo Tanulo, count(IgazoltE) as Igazolatlan from #hianyzas hianyzas where hianyzas.IgazoltE='F' group by hianyzas.Tanulo) igazolatlan on igazolatlan.Tanulo=tanulo.Tanulo
    INNER JOIN T_FELHASZNALO_OSSZES f on f.id=tanulo.Tanulo

--Mulasztások összesen
  
  insert into #hianyzasOssz
  select @csoportId, datepart(month,tao.c_datum) as Honap, tm.c_igazolt as IgazoltE from #Tanulo tanulo
    left join T_TANULOMULASZTAS_OSSZES tm on tm.c_oratanuloiid=tanulo.Tanulo and tm.torolt='F' and tm.c_tanevid=@tanevid 
    left join T_TANITASIORA_OSSZES tao on tao.id=tm.c_tanitasiorakid and tao.c_tanevid=@tanevid 
  where 
    tao.c_osztalycsoportid=@csoportId 
    and tao.torolt='F'
    AND (@iskolaErdekuSzamit = 1 OR (C_IGAZOLASTIPUSA <> 1533 OR C_IGAZOLASTIPUSA IS NULL))

  
  insert into #igazoltH
  select @csoportId, iif(i.[1]=0,null, i.[1]) as [1], iif(i.[2]=0,null, i.[2]) as [2], iif(i.[3]=0,null, i.[3]) as [3], iif(i.[4]=0,null, i.[4]) as [4], iif(i.[5]=0,null, i.[5]) as [5],iif(i.[6]=0,null, i.[6]) as [6],
      iif(i.[7]=0,null, i.[7]) as [7], iif(i.[8]=0,null, i.[8]) as [8], iif(i.[9]=0,null, i.[9]) as [9], iif(i.[10]=0,null, i.[10]) as [10], iif(i.[11]=0,null, i.[11]) as [11],  iif(i.[12]=0,null, i.[12]) as [12]
      from #hianyzasOssz ho pivot (count(Honap) for Honap in ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12]))i where i.IgazoltE='T'
  
  --Mulasztott órák összesen
  
  insert into #igazolatlanH
  select @csoportId, iif(ni.[1]=0,null, ni.[1]) as n1, iif(ni.[2]=0,null, ni.[2]) as n2, iif(ni.[3]=0,null, ni.[3]) as n3, iif(ni.[4]=0,null, ni.[4]) as n4, iif(ni.[5]=0,null, ni.[5]) as n5,iif(ni.[6]=0,null, ni.[6]) as n6,
      iif(ni.[7]=0,null, ni.[7]) as n7, iif(ni.[8]=0,null, ni.[8]) as n8, iif(ni.[9]=0,null, ni.[9]) as n9, iif(ni.[10]=0,null, ni.[10]) as n10, iif(ni.[11]=0,null, ni.[11]) as n11,  iif(ni.[12]=0,null, ni.[12]) as n12
      from #hianyzasOssz ho pivot (count(Honap) for Honap in ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12]))ni where ni.IgazoltE='F'
  
  select  iif(i.[1]=0,null, i.[1]) as [1], iif(i.[2]=0,null, i.[2]) as [2], iif(i.[3]=0,null, i.[3]) as [3], iif(i.[4]=0,null, i.[4]) as [4], iif(i.[5]=0,null, i.[5]) as [5],iif(i.[6]=0,null, i.[6]) as [6],
      iif(i.[7]=0,null, i.[7]) as [7], iif(i.[8]=0,null, i.[8]) as [8], iif(i.[9]=0,null, i.[9]) as [9], iif(i.[10]=0,null, i.[10]) as [10], iif(i.[11]=0,null, i.[11]) as [11],  iif(i.[12]=0,null, i.[12]) as [12],
      iif(ni.[1]=0,null, ni.[1]) as n1, iif(ni.[2]=0,null, ni.[2]) as n2, iif(ni.[3]=0,null, ni.[3]) as n3, iif(ni.[4]=0,null, ni.[4]) as n4, iif(ni.[5]=0,null, ni.[5]) as n5,iif(ni.[6]=0,null, ni.[6]) as n6,
      iif(ni.[7]=0,null, ni.[7]) as n7, iif(ni.[8]=0,null, ni.[8]) as n8, iif(ni.[9]=0,null, ni.[9]) as n9, iif(ni.[10]=0,null, ni.[10]) as n10, iif(ni.[11]=0,null, ni.[11]) as n11,  iif(ni.[12]=0,null, ni.[12]) as n12
       from #igazolth i
    left join #igazolatlanH ni on i.Csoport=ni.csoport

  --Mulasztó tanulók szama
  
  INSERT INTO #Igazolt
  SELECT 
     @csoportId as Id
    ,count(Tanulo) as IgazoltOsszes 
  FROM (select distinct tanulo from #hianyzas where IgazoltE='T')m

  SELECT 
     i.Osszes IgazoltOsszes
    ,ni.Osszes IgazolatlanOsszes 
  FROM #Igazolt i
    left join (select @csoportId as Id, count(Tanulo) as Osszes from (select distinct tanulo from #hianyzas where IgazoltE='F')m) ni on ni.Id=i.Csoport

  --Mulasztott órák összesen-összesen
  
  INSERT INTO #IgazoltOsszesOsszes
  SELECT 
     @csoportId
    ,count(IgazoltE) 
  FROM #hianyzasOssz 
  WHERE IgazoltE='T'

  select 
     ioo.Osszes IgazoltOsszesOsszes
    ,nioo.Osszes as IgazolatlanOsszesOsszes 
  from #IgazoltOsszesOsszes ioo
    LEFT JOIN (select @csoportId as Id, count(IgazoltE) Osszes from #hianyzasOssz where IgazoltE='F') nioo on nioo.Id=ioo.Csoport

  --Megtartott órák száma
  SELECT 
     COUNT(TantargyId) TantargyOraszam
    ,Tantargynev TantargyNev
  INTO #MegtartottOrakSzama 
  FROM #megtartottOrak 
  WHERE Megtartott = 'T'
  GROUP BY TantargyId, TantargyNev


  SELECT DISTINCT
     SUM(tmp.TantargyOraszam) OsszesTantargySzam
    ,STUFF((
      SELECT DISTINCT ', ' + btmp.TantargyNev + '(' + CAST(btmp.TantargyOraszam AS nvarchar(MAX)) + ')'  
      FROM #MegtartottOrakSzama btmp
      FOR XML PATH(''), TYPE) .value('.','nvarchar(MAX)'),1,2,'') Tantargyak
  FROM #MegtartottOrakSzama tmp

  -- Csoport tanárai
  SELECT 
     targy.C_NEV TargyNev
    ,tanar.C_NYOMTATASINEV TanarNev
    ,targykategoria.C_ORDER
    ,tanar.ID TanarId
    ,tanar.C_OKTATASIAZONOSITO TanarOktAzon
  FROM T_FELHASZNALO_OSSZES tanar
    INNER JOIN T_FOGLALKOZAS_OSSZES f ON f.C_TANARID = tanar.ID and f.TOROLT='F' and f.C_OSZTALYCSOPORTID = @csoportId
    INNER JOIN T_TANTARGY_OSSZES targy ON targy.ID = f.C_TANTARGYID and targy.C_GYAKORLATI = 'T' and targy.TOROLT='F'
    INNER JOIN T_TARGYKATEGORIATIPUS_OSSZES ON T_TARGYKATEGORIATIPUS_OSSZES.ID = targy.C_TARGYKATEGORIA
    INNER JOIN T_DICTIONARYITEMBASE_OSSZES targykategoria ON targykategoria.ID = T_TARGYKATEGORIATIPUS_OSSZES.ID AND targykategoria.TOROLT = 'F' AND targykategoria.C_TANEVID = @tanevId
  WHERE tanar.TOROLT = 'F' AND f.TOROLT = 'F'
    AND tanar.C_INTEZMENYID = @intezmenyid
    AND tanar.C_TANEVID = @tanevId
  GROUP BY C_ORDER, targy.C_NEV, tanar.C_NYOMTATASINEV, tanar.ID, tanar.C_OKTATASIAZONOSITO
  ORDER BY C_ORDER, targy.C_NEV, tanar.C_NYOMTATASINEV

  -- Csoport tanulói
  SELECT * FROM #Tanulo

END
GO