﻿DROP PROCEDURE IF EXISTS uspGetNyomtatvanyokOrarendOsszes
GO

CREATE PROCEDURE uspGetNyomtatvanyokOrarendOsszes
   @intezmenyId int
  ,@tanevID int
  ,@pIdoszakKezdete datetime
  ,@pIdoszakVege datetime
  ,@pTanarId int = NULL
  ,@pIsHelyettesitesNelkul bit = 0
  ,@pOsztalyCsoportId int = NULL
  ,@pTanuloId int = NULL
  ,@pTantargyId int = NULL
  ,@pTeremId int = NULL
  ,@pCsakOrarendiOrak bit = 0
  ,@pIsNapirend bit  /* 0 csak orarendi ora, 1 csak napirend, NULL mindkettő */
  ,@pKapcsolodoCsoportokMegjelenitese bit = NULL
  ,@pOsztalyBontasokMegjelenitese bit = NULL
  ,@pFeladatKategoriaId int = NULL
AS BEGIN
  SET NOCOUNT ON;

  DECLARE
    @intezmenyNev nvarchar(510)

  CREATE TABLE #OrarendiOrak (
     Id int
    ,ORARENDIID int
    ,Datum datetime
    ,Bontott char (1)
    ,Hetirend int
    ,HetNapja int
    ,HetSorszam int
    ,ErvenyessegKezdete datetime
    ,ErvenyessegVege datetime
    ,OraKezdete datetime
    ,OraVege datetime
    ,Oraszam int
    ,TargyNev nvarchar (300)
    ,TargyNevForMobile nvarchar (300)
    ,TargykategoriaID int
    ,Megtartott char (1)
    ,CsengetesiRendOraID int
    ,CsengetesiRendID int
    ,MaxNapiOraszam int
    ,OsztalyNev nvarchar (255)
    ,TanevRendOsztalyCsoportId int
    ,MegjelenesOka nvarchar (300)
    ,TanarNev nvarchar (255)
    ,TeremNev nvarchar (255)
    ,TeremId int
    ,OraTipus nvarchar (200)
    ,Hianyzas char (1)
    ,Keses char (1)
    ,Ures char (1)
    ,HelyettesitoTanarID int
    ,HelyettesitoTanarNev nvarchar (255)
    ,HelyettesitesId int
    ,TanarID int
    ,AdminAltalKiirt char (1)
    ,GroupId int
    ,Tema nvarchar (max)
    ,TantargyId int
    ,OsztCsopId int
    ,INDEX IX1 CLUSTERED(Datum, HetNapja, Oraszam, TanevRendOsztalyCsoportId, TantargyId, TanarID)
  )

  CREATE TABLE #Oraszamok (
     Oraszam int
    ,PRIMARY KEY(Oraszam)
  )

  SELECT TOP 1
    @intezmenyNev = i.C_NEV
  FROM T_INTEZMENYADATOK_OSSZES i
  WHERE i.C_INTEZMENYID = @intezmenyId
    AND i.C_TANEVID = @tanevID
    AND i.TOROLT = 'F'

  INSERT INTO #OrarendiOrak (
     Id
    ,ORARENDIID
    ,Datum
    ,Bontott
    ,Hetirend
    ,HetNapja
    ,HetSorszam
    ,ErvenyessegKezdete
    ,ErvenyessegVege
    ,OraKezdete
    ,OraVege
    ,Oraszam
    ,TargyNev
    ,TargyNevForMobile
    ,TargykategoriaID
    ,Megtartott
    ,CsengetesiRendOraID
    ,CsengetesiRendID
    ,MaxNapiOraszam
    ,OsztalyNev
    ,TanevRendOsztalyCsoportId
    ,MegjelenesOka
    ,TanarNev
    ,TeremNev
    ,TeremId
    ,OraTipus
    ,Hianyzas
    ,Keses
    ,Ures
    ,HelyettesitoTanarID
    ,HelyettesitoTanarNev
    ,HelyettesitesId
    ,TanarID
    ,AdminAltalKiirt
    ,GroupId
    ,Tema
    ,TantargyId
    ,OsztCsopId
  )
  EXEC sp_GetOrarend
     @pIntezmenyId = @intezmenyId
    ,@pTanevId = @tanevID
    ,@pIdoszakKezdete = @pIdoszakKezdete
    ,@pIdoszakVege = @pIdoszakVege
    ,@pTanarId = @pTanarId
    ,@pIsHelyettesitesNelkul = @pIsHelyettesitesNelkul
    ,@pOsztalyCsoportId = @pOsztalyCsoportId
    ,@pTanuloId = @pTanuloId
    ,@pTantargyId = @pTantargyId
    ,@pTeremId = @pTeremId
    ,@pCsakOrarendiOrak = @pCsakOrarendiOrak
    ,@pIsNapirend = @pIsNapirend
    ,@pFeladatKategoriaId = @pFeladatKategoriaId

  -- a lekért órarendben a minden héten órákat átállítjuk a hétsorszámnak megfelelő hetirendre
  UPDATE orak
  SET orak.Hetirend = ISNULL(hr.Hetirend, orak.Hetirend)
  FROM #OrarendiOrak orak
    LEFT JOIN (
      SELECT DISTINCT
         o.Hetirend
        ,o.HetSorszam
      FROM #OrarendiOrak o
      WHERE Hetirend <> 1554
    ) hr ON hr.HetSorszam = orak.HetSorszam
  WHERE orak.Hetirend = 1554

  -- kapcsolódó csoportok óráinak törlése
  IF @pKapcsolodoCsoportokMegjelenitese IS NOT NULL AND @pKapcsolodoCsoportokMegjelenitese = 0
    DELETE orak
    FROM #OrarendiOrak orak
      INNER JOIN T_CSOPORT_OSSZES cs ON cs.ID = orak.OsztCsopId
        AND cs.C_OSZTALYBONTASID IS NULL
    WHERE OsztCsopId != @pOsztalyCsoportId

  -- osztálybontott csoportok óráinak törlése
  IF @pOsztalyBontasokMegjelenitese IS NOT NULL AND @pOsztalyBontasokMegjelenitese = 0
    DELETE orak
    FROM #OrarendiOrak orak
      INNER JOIN T_CSOPORT_OSSZES cs ON cs.ID = orak.OsztCsopId
        AND cs.C_OSZTALYBONTASID IS NOT NULL
    WHERE orak.OsztCsopId != @pOsztalyCsoportId

  INSERT INTO #Oraszamok (Oraszam)
  SELECT DISTINCT
    ora.C_ORASZAM AS Oraszam
  FROM T_ORARENDIORA_OSSZES ora
  WHERE ora.C_INTEZMENYID = @intezmenyId
    AND ora.C_TANEVID = @tanevID
    AND ora.C_ORASZAM IS NOT NULL

  SELECT DISTINCT
     COALESCE(@pTanarId, @pTeremId, @pOsztalyCsoportId) AS Id
    ,STUFF(
      (
        SELECT DISTINCT
          ', ' + IIF(@pTanarId IS NOT NULL, bo.TanarNev, IIF(@pTeremId IS NOT NULL, bo.TeremNev, IIF(@pOsztalyCsoportId IS NOT NULL, bo.OsztalyNev,'')))
        FROM #OrarendiOrak bo
        WHERE bo.Hetirend = o.Hetirend
        FOR XML PATH(''), TYPE
      ).value
      ('.', 'NVARCHAR(MAX)') ,1 , 2, ''
    ) AS Nev
    ,@intezmenyNev AS IntezmenyNev
    ,STUFF(
      (
        SELECT DISTINCT
          ', ' + dic.C_NAME
        FROM #OrarendiOrak qw
          LEFT JOIN T_DICTIONARYITEMBASE_OSSZES dic ON dic.C_TANEVID = @tanevID
            AND dic.TOROLT = 'F'
            AND dic.ID = qw.Hetirend
        WHERE o.Hetirend = qw.Hetirend
        FOR XML PATH(''), TYPE
      ).value
      ('(./text())[1]', 'VARCHAR(MAX)'), 1, 2, ''
    ) AS Hetirend
  FROM #OrarendiOrak o
    INNER JOIN T_DICTIONARYITEMBASE_OSSZES dic ON o.Hetirend = dic.ID
      AND dic.C_TANEVID = @tanevID
      AND dic.TOROLT = 'F'

  SELECT
     COALESCE(@pTanarId, @pTeremId, @pOsztalyCsoportId) AS Id
    ,IIF(@pIsNapirend = 0, CAST(t.Oraszam AS nvarchar(3)), ISNULL(t.OraKezdete + ' - ' + t.OraVege, '')) AS Ora
    ,t.Hetirend AS HetirendId
    ,[1408] AS Hetfo
    ,[1409] AS Kedd
    ,[1410] AS Szerda
    ,[1411] AS Csutortok
    ,[1412] AS Pentek
    ,[1413] AS Szombat
    ,t.HetirendNev AS HetirendNev
  FROM (
    SELECT
      *
    FROM (
      SELECT
        STUFF(
          (
            SELECT
              CONVERT(nvarchar(max),
                '--------------------' + nchar(13) + nchar(10)
                + bo.TargyNev + nchar(13) + nchar(10) + bo.OsztalyNev +
                IIF(@pTeremId IS NOT NULL OR @pOsztalyCsoportId IS NOT NULL, nchar(13) + nchar(10) + bo.TanarNev, '') + nchar(13) + nchar(10) + bo.TeremNev + nchar(13) + nchar(10))
            FROM #OrarendiOrak bo
            WHERE bo.OraKezdete = o.OraKezdete
            FOR XML PATH(''), TYPE
          ).value
          ('.', 'NVARCHAR(MAX)'), 1, 22, ''
        ) AS TargyNev
       ,o.HetNapja
       ,o.Oraszam
       ,CONVERT(char(5), o.OraKezdete, 108) AS OraKezdete
       ,CONVERT(char(5), o.OraVege, 108) AS OraVege
       ,dic.C_NAME AS HetirendNev
       ,o.Hetirend AS Hetirend
      FROM #OrarendiOrak AS o
        LEFT JOIN T_DICTIONARYITEMBASE_OSSZES AS dic ON dic.C_TANEVID = @tanevID
          AND dic.TOROLT = 'F'
          AND dic.ID = o.Hetirend
    ) ot PIVOT(MAX(ot.TargyNev) FOR ot.HetNapja IN(
       [1408]
      ,[1409]
      ,[1410]
      ,[1411]
      ,[1412]
      ,[1413])
    ) AS pv
  ) AS t
  ORDER BY
     HetirendNev
    ,CASE WHEN @pIsNapirend = 0 THEN t.Oraszam ELSE CAST(t.OraKezdete AS datetime) END

  -- Iktatási adatok
  IF @pOsztalyCsoportId IS NOT NULL
    BEGIN
      --  Osztály adatok
      SELECT
         @pOsztalyCsoportId AS OsztalyId
        ,ocs.C_EVFOLYAMTIPUSA AS Evfolyam
        ,ocs.C_FELADATELLATASIHELYID AS FeladatEllatasiHelyId
        ,o.C_KEPZESIFORMA AS KepzesiForma
        ,o.C_OSZTALYFONOKID AS OsztalyFonokId
        ,o.C_TANTERVID AS TantervId
        ,o.C_SZAKMACSOPORT AS SzakmaCsoport
        ,o.C_AGAZAT AS Agazat
        ,o.C_SZAKKEPESITES AS Szakkepesites
        ,o.C_RESZSZAKKEPESITES AS Reszszakkepesites
        ,ocs.C_KERESZTFELEVES AS OJCSJKeresztfeleves
        ,ocs.C_VEGZOSEVFOLYAM AS CSJVegzosEvfolyamu
        ,o.C_TECHNIKAIOSZTALY AS OJTechnikaiOsztaly
        ,o.C_NEMZETISEGI AS OJNemzetisegi
        ,o.C_KETTANNYELVU AS OJKettannyelvu
        ,o.C_NYELVIELOKESZITO AS OJNyelviElokeszito
        ,o.C_LOGOPEDIAI AS OJLogopediai
        ,o.C_SPORT AS OJSportOsztaly
        ,o.C_AJPROGRAM AS OJAranyJanosProgram
        ,o.C_GYOGYPEDAGOGIAI AS OJGyogypedagogiai
      FROM T_OSZTALYCSOPORT_OSSZES ocs
        INNER JOIN T_OSZTALY_OSSZES o ON o.ID = ocs.ID AND o.TOROLT = 'F'
          AND o.C_ALTANEVID = ocs.C_TANEVID
          AND o.C_ALINTEZMENYID = ocs.C_INTEZMENYID
      WHERE ocs.ID = @pOsztalyCsoportId
        AND ocs.TOROLT = 'F'
        AND ocs.C_TANEVID = @tanevID
        AND ocs.C_INTEZMENYID = @intezmenyId

      --  Osztály csoportok
      SELECT DISTINCT
        ot.OsztCsopId AS CsoportId
      FROM #OrarendiOrak ot
        INNER JOIN T_CSOPORT_OSSZES cs ON cs.ID = ot.OsztCsopId
          AND cs.TOROLT = 'F'

      --  Alkalmazottak
      SELECT DISTINCT
         ot.TanarID AS TanarId
        ,f.C_OKTATASIAZONOSITO AS TanarOktAzon
      FROM #OrarendiOrak ot
        LEFT JOIN T_FELHASZNALO_OSSZES f ON f.ID = ot.TanarID
          AND f.TOROLT = 'F'

      --  Tanulók
      SELECT DISTINCT
         f.ID AS TanuloId
        ,f.C_NYOMTATASINEV AS TanuloNeve
        ,f.C_OKTATASIAZONOSITO AS TanuloOktAzon
      FROM #OrarendiOrak ot
        INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_OSZTALYCSOPORTID = ot.OsztCsopId
          AND tcs.C_TANEVID = @tanevID
          AND tcs.TOROLT = 'F'
        INNER JOIN T_FELHASZNALO_OSSZES f ON f.ID = tcs.C_TANULOID
          AND f.TOROLT = 'F'

    END
  ELSE
    IF @pTanarId IS NOT NULL
      --  Alkalmazottak
      SELECT DISTINCT
         orak.TanarID AS TanarId
        ,f.C_OKTATASIAZONOSITO AS TanarOktAzon
        ,mua.C_FELADATELLATASIHELYID AS FeladatEllatasiHelyId
      FROM #OrarendiOrak orak
        LEFT JOIN T_FELHASZNALO_OSSZES f ON f.ID = orak.TanarID
          AND f.TOROLT = 'F'
        INNER JOIN T_MUNKAUGYIADATOK_OSSZES mua ON mua.C_ALKALMAZOTTID = orak.TanarID
          AND mua.TOROLT = 'F'

    ELSE
      IF @pTeremId IS NOT NULL
        SELECT
           t.ID AS TeremId
          ,t.C_MUKODESIHELYID AS FeladatEllatasiHelyId
        FROM T_TEREM_OSSZES t
        WHERE t.ID = @pTeremId
          AND t.TOROLT = 'F'

END
GO
