DROP PROCEDURE IF EXISTS uspGetErtesitesAltEsMulAdatok
GO

CREATE PROCEDURE uspGetErtesitesAltEsMulAdatok
   @pOsztalyId int
  ,@pTanevId int
  ,@pTankoteles bit
  ,@pIskolaErdekuSzamit bit
  ,@pIsSzulonek bit = 1
  ,@pIgazolatlanOrakSzama int
  ,@negyedevreSzamoltMulasztasok bit = 1
  ,@pKiiratkozottanulokMegjelenitese bit = 0
  ,@pIsMuveszetOktatasi bit = 0
  ,@pGondviseloIsTorvenyes bit = 0
AS
BEGIN
  SET NOCOUNT ON;

  --Mulasztasok
  DECLARE @Mulasztasok TABLE (
    TanuloId        INT
    ,TanuloCsoportId    INT
    ,Igazolt        INT
    ,Igazolatlan      INT
    ,ElmeletIgazolt      INT
    ,ElmeletIgazolatlan    INT
    ,GyakorlatIgazolt    INT
    ,GyakorlatIgazolatlan  INT
    ,ElmeletOsszes      INT
    ,GyakorlatOsszes    INT
    ,Osszes          INT
  )
  DECLARE @Gondviselok TABLE (TanuloId INT, GondviseloId INT, RokonsagiFokId INT, GondviseloNev NVARCHAR(MAX))
  DECLARE @TanuloCimTable TABLE (FelhasznaloId INT, Cim NVARCHAR(MAX), Cimtipusa INT)
  DECLARE @GondViseloCimTable TABLE (GondviseloId INT, Cim NVARCHAR(MAX), Cimtipusa INT)
  DECLARE @EmailCimTableTemp TABLE (FelhasznaloId INT, EmailCim NVARCHAR(MAX), GondviseloId INT, Alapertelmezett CHAR(1))
  DECLARE @EmailCimTanuloTable TABLE (FelhasznaloId INT, EmailCim NVARCHAR(MAX))
  DECLARE @EmailCimGondviseloTable TABLE (FelhasznaloId INT, GondviseloId INT, EmailCim NVARCHAR(MAX))
  DECLARE @TelefonTableTemp TABLE (FelhasznaloId INT, Telefon NVARCHAR(MAX),  GondviseloId INT, Alapertelmezett CHAR(1))
  DECLARE @TanuloTelefonTable TABLE (FelhasznaloId INT, Telefon NVARCHAR(MAX))
  DECLARE @GondviseloTelefonTable TABLE (FelhasznaloID INT, GondviseloId INT, Telefon NVARCHAR(MAX))
  DECLARE @IktatasAdatok TABLE (
    OsztalyId INT
    ,Evfolyam INT
    ,FeladatEllatasiHelyId INT
    ,KepzesiForma INT
    ,OsztalyFonokId INT
    ,TantervId INT
    ,SzakmaCsoport INT
    ,Agazat INT
    ,Szakkepesites INT
    ,Reszszakkepesites INT
    ,UjSzktAgazat int
    ,UjSzktSzakma int
    ,UjSzktSzakmairany int
    ,NktTanulmanyiTerulet int
    ,NktSzakkepesites int
    ,NktSzakirany int
    ,OJCSJKeresztfeleves CHAR
    ,OJTechnikaiOsztaly CHAR
    ,OJNemzetisegi CHAR
    ,OJKettannyelvu CHAR
    ,OJNyelviElokeszito CHAR
    ,OJIsGyogypedagogiaiLogopediai CHAR
    ,OJSportOsztaly CHAR
    ,OJAranyJanosProgram CHAR
  )

  CREATE TABLE #tanuloiAdatok (
     TanuloId int
    ,TanuloCsoportId int
    ,TANULONEV nvarchar(510)
    ,ANYJANEVE nvarchar(128)
    ,SZULETESIHELY nvarchar(100)
    ,SZULETESIDATUM datetime
    ,TorzslapSzam nvarchar(100)
    ,INT_IGAZGATO_NEV nvarchar(510)
    ,INT_NEV nvarchar(510)
    ,INT_OMKOD nvarchar(40)
    ,INT_VAROS nvarchar(510)
    ,INT_CIM nvarchar(MAX)
    ,OSZTALYCSOPORT_NEV nvarchar(510)
    ,OSZTFO_NEV nvarchar(510)
    ,IGAZOLT int
    ,IGAZOLATLAN int
    ,OsszesMulasztas int
    ,OsszesIgazolt int
    ,OsszesIgazolatlan int
    ,TanuloAllandoCim nvarchar(MAX)
    ,TanuloTartozkodasiCim nvarchar(MAX)
    ,TanuloOktAzon nvarchar(40)
    ,HozottIgazolt int
    ,HozottIgazolatlan int
    ,HozottIgazoltKeses int
    ,HozottIgazolatlanKeses int
    ,BelepesDatum datetime
    ,TanevNeve nvarchar(10)
  )

  INSERT INTO @Mulasztasok
  EXEC sp_GetDokumentumMulasztasok
     @osztalyID = @pOsztalyId
    ,@tanevId = @pTanevId
    ,@elmeletiOraPercben = 45
    ,@gyakorlatiOraPercben = 45
    ,@ertekelesTipus = 1520 --évvégi
    ,@iskolaErdekuSzamit = @pIskolaErdekuSzamit
    ,@negyedevreSzamoltMulasztasok = @negyedevreSzamoltMulasztasok
    ,@isMuveszetOktatasi = @pIsMuveszetOktatasi

  SELECT
     TanuloId Id
    ,TanuloCsoportId
    ,BelepesDatum
    ,ISNULL(KilepesDatum, GETDATE()) KilepesDatum
  INTO #students
  FROM fnGetDokumentumOsztalyokCsoportokTanuloi(@pTanevId, @pOsztalyId, 'T')
  WHERE (@pKiiratkozottanulokMegjelenitese = 1 OR KilepesDatum IS NULL)

  INSERT INTO @Gondviselok
  SELECT
     TanuloId
    ,GondviseloId
    ,RokonsagifokId
    ,GondviseloNev
  FROM fnGetDokumentumGondviselok (@pOsztalyId, @pTanevId, 'F', 'T')

  INSERT INTO @TanuloCimTable
  SELECT DISTINCT
     TanuloId
    ,STUFF((
      SELECT DISTINCT CHAR(13) + CHAR(10) + CAST(btemp.Cim AS NVARCHAR(MAX)) 
      FROM fnGetDokumentumTanuloOrGondviseloCim (0, @pTanevId, @pOsztalyId, NULL, NULL) btemp
      WHERE temp.TanuloId = btemp.TanuloId
        AND temp.CimTipusa = btemp.CimTipusa
      FOR XML PATH(''), TYPE)
        .value('.','NVARCHAR(MAX)'),1,2,'')
    ,temp.CimTipusa
  FROM fnGetDokumentumTanuloOrGondviseloCim (0, @pTanevId, @pOsztalyId, NULL, NULL) temp

  INSERT INTO @GondViseloCimTable
  SELECT DISTINCT
     GondviseloId
    ,STUFF((
      SELECT DISTINCT CHAR(13) + CHAR(10) + CAST(btemp.Cim AS NVARCHAR(MAX)) 
      FROM fnGetDokumentumTanuloOrGondviseloCim (1, @pTanevId, @pOsztalyId, NULL, 1) btemp
      WHERE temp.GondviseloId = btemp.GondviseloId
        AND temp.CimTipusa = btemp.CimTipusa
      FOR XML PATH(''), TYPE)
        .value('.','NVARCHAR(MAX)'),1,2,'')
    ,temp.CimTipusa
  FROM fnGetDokumentumTanuloOrGondviseloCim (1, @pTanevId, @pOsztalyId, NULL, 1) temp

  INSERT INTO @EmailCimTableTemp
  SELECT
     tanulo.Id TanuloId
    ,C_EMAILCIM
    ,C_GONDVISELOID
    ,C_ALAPERTELMEZETT
  FROM #students tanulo
    INNER JOIN T_EMAIL_OSSZES email ON email.C_FELHASZNALOID = tanulo.Id
  WHERE email.TOROLT = 'F'
    AND email.C_TANEVID = @pTanevId
    AND LEN(C_EMAILCIM) > 0

  INSERT INTO @EmailCimTanuloTable
  SELECT DISTINCT
     FelhasznaloId
    ,STUFF((
      SELECT DISTINCT CHAR(13) + CHAR(10) + CAST(btemp.EmailCim AS NVARCHAR(MAX)) 
      FROM @EmailCimTableTemp btemp
      WHERE temp.FelhasznaloId = btemp.FelhasznaloId
        AND btemp.GondviseloId IS NULL
      FOR XML PATH(''), TYPE)
        .value('.','NVARCHAR(MAX)'),1,2,'') Email
  FROM @EmailCimTableTemp temp
  WHERE GondviseloId IS NULL

  INSERT INTO @EmailCimGondviseloTable
  SELECT DISTINCT
     FelhasznaloId
    ,GondviseloId
    ,STUFF((
      SELECT DISTINCT CHAR(13) + CHAR(10) + CAST(btemp.EmailCim AS NVARCHAR(MAX))
      FROM @EmailCimTableTemp btemp
      WHERE temp.GondviseloId = btemp.GondviseloId
        AND btemp.GondviseloId IS NOT NULL
        AND btemp.Alapertelmezett = 'T'
      FOR XML PATH(''), TYPE)
        .value('.','NVARCHAR(MAX)'),1,2,'') Email
  FROM @EmailCimTableTemp temp
  WHERE GondviseloId IS NOT NULL
    AND Alapertelmezett = 'T'

  INSERT INTO @TelefonTableTemp
  SELECT
     tanulo.Id TanuloId
    ,C_TELEFONSZAM
    ,C_GONDVISELOID
    ,C_ALAPERTELMEZETT
  FROM #students tanulo
    INNER JOIN T_TELEFON_OSSZES telefon ON telefon.C_FELHASZNALOID = tanulo.Id
  WHERE telefon.TOROLT = 'F'
    AND telefon.C_TANEVID = @pTanevId
    AND LEN(telefon.C_TELEFONSZAM) > 0

  INSERT INTO @TanuloTelefonTable
  SELECT DISTINCT
     FelhasznaloId
    ,STUFF((
      SELECT DISTINCT CHAR(13) + CHAR(10) + CAST(btemp.Telefon AS NVARCHAR(MAX))
      FROM @TelefonTableTemp btemp
      WHERE temp.FelhasznaloId = btemp.FelhasznaloId
        AND btemp.GondviseloId IS NULL
      FOR XML PATH(''), TYPE).value('.','NVARCHAR(MAX)'),1,2,'')
  FROM @TelefonTableTemp temp
  WHERE GondviseloId IS NULL

  INSERT INTO @GondviseloTelefonTable
  SELECT DISTINCT
     FelhasznaloId
    ,GondviseloId
    ,STUFF((
      SELECT DISTINCT CHAR(13) + CHAR(10) + CAST(btemp.Telefon AS NVARCHAR(MAX)) 
      FROM @TelefonTableTemp btemp
      WHERE temp.FelhasznaloId = btemp.FelhasznaloId
        AND temp.GondviseloId = btemp.GondviseloId
        AND btemp.GondviseloId IS NOT NULL
        AND btemp.Alapertelmezett = 'T'
      FOR XML PATH(''), TYPE).value('.','NVARCHAR(MAX)'),1,2,'')
  FROM @TelefonTableTemp temp
  WHERE GondviseloId IS NOT NULL
    AND Alapertelmezett = 'T'

  SELECT
     TanuloId
    ,Gondviselok.GondviseloId
    ,Gondviselok.GondviseloNev  GondviseloNev
    ,Cim          GondviseloAllandoCim
    ,Telefon        GondviseloTelefon
    ,RokonsagiFok.C_NAME  GondviseloRokonsagiFoka
  INTO #GondviseloAdatok
  FROM @Gondviselok Gondviselok
    INNER JOIN T_DICTIONARYITEMBASE_OSSZES RokonsagiFok ON RokonsagiFok.Id = Gondviselok.RokonsagiFokId AND RokonsagiFok.C_TANEVID = @pTanevId AND RokonsagiFok.TOROLT = 'F'
    LEFT JOIN @GondViseloCimTable GondviseloCim ON GondviseloCim.GondviseloId = Gondviselok.GondviseloId
    LEFT JOIN @GondviseloTelefonTable GondviseloTelefon  ON GondviseloTelefon.GondviseloId = Gondviselok.GondviseloId
  ORDER BY TanuloId

  --Tanulói adatok
  INSERT INTO #tanuloiAdatok
  SELECT
     TanuloAdatok.ID AS TanuloId
    ,OsztalyTanuloi.TanuloCsoportId
    ,TanuloAdatok.C_NYOMTATASINEV    TANULONEV
    ,TanuloAdatok.C_ANYJANEVE      ANYJANEVE
    ,TanuloAdatok.C_SZULETESIHELY    SZULETESIHELY
    ,TanuloAdatok.C_SZULETESIDATUM    SZULETESIDATUM
    ,TanuloAdatok.C_NYILVANTARTASISZAM  TorzslapSzam
    ,IntezmenyAdatok.C_IGAZGATONEVE   INT_IGAZGATO_NEV
    ,IntezmenyAdatok.C_NEV        INT_NEV
    ,IntezmenyAdatok.C_OMKOD      INT_OMKOD
    ,IntezmenyAdatok.C_VAROS      INT_VAROS
    ,dbo.fnGetDokumentumIntezmenyCime(@pTanevId) INT_CIM
    ,(SELECT C_NEV FROM T_OSZTALYCSOPORT_OSSZES WHERE ID = @pOsztalyId)  OSZTALYCSOPORT_NEV
    ,Osztalyfonok.C_NYOMTATASINEV    OSZTFO_NEV
    ,ISNULL(Mulasztas.Igazolt,0)    IGAZOLT
    ,ISNULL(Mulasztas.Igazolatlan,0)  IGAZOLATLAN
    ,ISNULL(Mulasztas.Igazolt,0) + ISNULL(Mulasztas.Igazolatlan,0) OsszesMulasztas
    ,ISNULL(Mulasztas.Igazolt,0) OsszesIgazolt
    ,ISNULL(Mulasztas.Igazolatlan,0) OsszesIgazolatlan
    ,TanuloAllandoCimTable.CIM          TanuloAllandoCim
    ,TanuloTartozkodasiCimTable.Cim        TanuloTartozkodasiCim
    ,TanuloAdatok.C_OKTATASIAZONOSITO AS TanuloOktAzon
    ,TanugyiAdatok.C_HOZOTTIGAZOLTHIANYZAS AS HozottIgazolt
    ,TanugyiAdatok.C_HOZOTTIGAZOLATLANHIANYZAS AS HozottIgazolatlan
    ,TanugyiAdatok.C_HOZOTTIGAZOLTKESESPERCBEN AS HozottIgazoltKeses
    ,TanugyiAdatok.C_HOZOTTIGAZOLATLANKESESPERCBE AS HozottIgazolatlanKeses
    ,OsztalyTanuloi.BelepesDatum AS BelepesDatum
    ,tv.C_NEV AS TanevNeve
  FROM #students OsztalyTanuloi
    INNER JOIN T_FELHASZNALO_OSSZES TanuloAdatok ON TanuloAdatok.ID = OsztalyTanuloi.ID AND TanuloAdatok.TOROLT = 'F'
    INNER JOIN T_TANULO_OSSZES Tanulo ON Tanulo.ID = TanuloAdatok.ID AND Tanulo.TOROLT = 'F'
    INNER JOIN T_INTEZMENYADATOK_OSSZES IntezmenyAdatok ON IntezmenyAdatok.C_TANEVID = TanuloAdatok.C_TANEVID
      AND IntezmenyAdatok.TOROLT = 'F'
    INNER JOIN T_TANULOTANUGYIADATOK_OSSZES AS TanugyiAdatok ON TanugyiAdatok.C_TANULOCSOPORTID = OsztalyTanuloi.TanuloCsoportId
    LEFT JOIN T_OSZTALY_OSSZES Osztaly ON Osztaly.ID = @pOsztalyId AND Osztaly.TOROLT = 'F'
    LEFT JOIN T_FELHASZNALO_OSSZES Osztalyfonok ON Osztalyfonok.ID = Osztaly.C_OSZTALYFONOKID AND Osztalyfonok.TOROLT = 'F'
    LEFT JOIN @Mulasztasok Mulasztas ON Mulasztas.TanuloId = TanuloAdatok.ID
      AND Mulasztas.TanuloCsoportId = OsztalyTanuloi.TanuloCsoportId
    LEFT JOIN @TanuloCimTable TanuloAllandoCimTable ON TanuloAllandoCimTable.FelhasznaloId =  OsztalyTanuloi.ID
      AND TanuloAllandoCimTable.Cimtipusa = 907
    LEFT JOIN @TanuloCimTable TanuloTartozkodasiCimTable ON TanuloTartozkodasiCimTable.FelhasznaloId = OsztalyTanuloi.ID
      AND TanuloTartozkodasiCimTable.Cimtipusa = 909
    INNER JOIN T_TANEV_OSSZES tv on tv.ID = TanuloAdatok.C_TANEVID AND tv.TOROLT = 'F'
  WHERE TanugyiAdatok.C_TANKOTELEZETT = IIF(@pTankoteles = 0, 'F', 'T')
  ORDER BY TanuloAdatok.C_NYOMTATASINEV

  IF @pIsSzulonek = 1 BEGIN
    SELECT DISTINCT
       ta.*
      ,GondviseloAdatok.GondviseloNev
      ,GondviseloAdatok.GondviseloAllandoCim
      ,GondviseloAdatok.GondviseloTelefon
      ,GondviseloRokonsagiFoka
    FROM #tanuloiAdatok AS ta
      LEFT JOIN #GondviseloAdatok GondviseloAdatok ON GondviseloAdatok.TanuloId =  ta.TanuloId
    WHERE ta.IGAZOLATLAN >= @pIgazolatlanOrakSzama
    AND (@pGondviseloIsTorvenyes = 0 OR EXISTS(SELECT * FROM #GondviseloAdatok g WHERE g.TanuloId = ta.TanuloId))
    ORDER BY TANULONEV
  END
  ELSE BEGIN
    SELECT DISTINCT
      ta.*
    FROM #tanuloiAdatok AS ta
    WHERE ta.Igazolatlan >= @pIgazolatlanOrakSzama
    ORDER BY TANULONEV
  END

  --Mulasztások részletezése
  SELECT
     Mulasztasok.TanuloId
    ,Mulasztasok.TanuloCsoportId
    ,Mulasztasok.OsztalyCsoportId
    ,Mulasztasok.OsztalyCsoportNev
    ,MulasztasTipus.C_NAME  Tipusa
    ,Mulasztasok.Igazolt
    ,Mulasztasok.IgazolasTipusa
    ,Mulasztasok.KesesPercben
    ,Mulasztasok.Datum
    ,Mulasztasok.Oraszam
    ,Mulasztasok.TantargyId
    ,Mulasztasok.TantargyNev
  FROM fnGetDokumentumMulasztasokOsztalyonkentReszletes(@pTanevId, @pOsztalyId, @pIskolaErdekuSzamit, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT) Mulasztasok
    LEFT JOIN T_DICTIONARYITEMBASE_OSSZES MulasztasTipus ON MulasztasTipus.Id = Mulasztasok.Tipusa 
      AND MulasztasTipus.C_TANEVID = @pTanevId
    INNER JOIN #tanuloiAdatok AS ta ON ta.TanuloId = Mulasztasok.TanuloId AND ta.TanuloCsoportId = Mulasztasok.TanuloCsoportId
      AND ta.IGAZOLATLAN >= @pIgazolatlanOrakSzama
  WHERE Mulasztasok.Igazolt = 'F'

  --Gondviselo adatok
  SELECT * from #GondviseloAdatok AS Gondviselok
    LEFT JOIN @Mulasztasok Mulasztasok ON Mulasztasok.TanuloId = Gondviselok.TanuloId
    INNER JOIN #tanuloiAdatok AS ta ON ta.TanuloId = Mulasztasok.TanuloId AND ta.TanuloCsoportId = Mulasztasok.TanuloCsoportId
      AND ta.IGAZOLATLAN >= @pIgazolatlanOrakSzama

  --Iktatási adatok
  INSERT INTO @IktatasAdatok
  SELECT
     @pOsztalyId
    ,ocs.C_EVFOLYAMTIPUSA
    ,ocs.C_FELADATELLATASIHELYID
    ,ocs.C_KEPZESIFORMA
    ,o.C_OSZTALYFONOKID
    ,o.C_TANTERVID
    ,o.C_SZAKMACSOPORT
    ,o.C_AGAZAT
    ,o.C_SZAKKEPESITES
    ,o.C_RESZSZAKKEPESITES
    ,o.C_AGAZATUJSZKTTIPUSID 
    ,o.C_SZAKMATIPUSID 
    ,o.C_SZAKMAIRANYTIPUSID 
    ,o.C_TANULMANYITERULETNKTTIPUSID 
    ,o.C_SZAKKEPESITESNKTTIPUSID 
    ,o.C_SZAKIRANYNKTTIPUSID 
    ,ocs.C_KERESZTFELEVES
    ,ocs.C_ISTECHNIKAI as C_TECHNIKAIOSZTALY
    ,o.C_NEMZETISEGI
    ,o.C_KETTANNYELVU
    ,o.C_NYELVIELOKESZITO
    ,ocs.C_ISGYOGYPEDAGOGIAILOGOPEDIAI
    ,o.C_SPORT
    ,o.C_AJPROGRAM
  FROM T_OSZTALYCSOPORT_OSSZES ocs
    INNER JOIN T_OSZTALY_OSSZES o ON o.ID = ocs.ID
  WHERE ocs.ID = @pOsztalyId AND ocs.TOROLT = 'F'
    AND ocs.C_TANEVID = @pTanevId;

  SELECT * from @IktatasAdatok;

  SELECT
     mh.C_NEV Nev
    ,C_IRANYITOSZAM + ' ' + C_VAROS  + ISNULL( ', ' + C_KOZTERULETNEV + ' ', '') +  ISNULL(C_KOZTERULETJELLEGENEV + ' ','') + ISNULL(C_HAZSZAM, '')  + ISNULL(', ' + C_EMELET + '. emelet', '') + ISNULL(', ' + C_AJTO + '. ajtó', '') TeljesCim
    ,mh.C_VAROS Varos
  FROM
    T_MUKODESIHELY_OSSZES mh
    INNER JOIN T_FELADATELLATASIHELY_OSSZES fel ON fel.C_MUKODESIHELYID = mh.ID
    INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.C_FELADATELLATASIHELYID = fel.ID
  WHERE mh.TOROLT = 'F' AND  ocs.ID = @pOsztalyId

  DROP TABLE #GondviseloAdatok
  DROP TABLE #tanuloiAdatok
  DROP TABLE #students

END

GO