﻿DROP PROCEDURE IF EXISTS uspGetNemNaplozottOrarendiOrak
GO

CREATE PROCEDURE uspGetNemNaplozottOrarendiOrak
   @IntezmenyId int
  ,@TanevId int
  ,@IdoszakKezdete datetime
  ,@IdoszakVege datetime
  ,@TanarId int = NULL
  ,@OsztalyCsoportId int = NULL
  ,@TantargyId int = NULL
  ,@CsakAHelyettesiteseim bit = 0
  ,@HelyettesitettOraimIs bit = 0
  ,@pFeladatKategoriaId int = NULL
  ,@pDatumTol datetime = NULL
  ,@pOraszamTol int = NULL
  ,@pIdopontTol datetime = NULL
  ,@pDatumIg datetime = NULL
  ,@pOraszamIg int = NULL
  ,@pIdopontIg datetime = NULL
  ,@pFeladatEllatasiHelyId int = NULL
AS BEGIN
SET NOCOUNT ON;
SET DATEFIRST 1;

  SELECT
      ot.C_ORARENDIORAID AS Id,
      ot.C_ORARENDIORAID AS ORARENDIID,
      ot.C_BONTOTT AS Bontott,
      ot.C_HETIREND AS Hetirend,
      ot.C_HETNAPJA AS HetNapja,
      ot.C_HETSORSZAMA AS HetSorszam,
      CAST(ot.C_ORAERVENYESSEGKEZDETE AS DATETIME) AS ErvenyessegKezdete,
      CAST(ot.C_ORAERVENYESSEGVEGE AS DATETIME) AS ErvenyessegVege,
      CAST(ot.C_DATUM AS DATETIME) + CAST(ot.C_ORAKEZDETE AS DATETIME) AS OraKezdete,
      ot.C_DATUM AS OraKezdeteDate,
      CONVERT(varchar(5), CAST(ot.C_ORAKEZDETE AS DATETIME), 108) AS OraKezdeteTimeText,
      CAST(ot.C_DATUM AS DATETIME) + CAST(ot.C_ORAVEGE AS DATETIME) AS OraVege,
      IIF(ot.C_CSENGETESIRENDID IS NOT NULL, ot.C_ORASZAM, NULL) AS Oraszam,
      tt.C_NEV AS TargyNev,
      COALESCE(tt.C_ROVIDNEV, tt.C_NEV) AS TargyNevForMobile,
      ISNULL(tt.C_NEVNYOMTATVANYBAN, tt.C_NEV) AS TargyNevForNyomtatvany,
      tt.C_TARGYKATEGORIA AS TargykategoriaID,
      'F' AS Megtartott,
      csr.ID AS CsengetesiRendOraID,
      ot.C_CSENGETESIRENDID AS CsengetesiRendID,
      ot.C_MAXORASZAM AS MaxNapiOraszam,
      ocs.C_NEV AS OsztalyNev,
      '' AS MegjelenesOka,
      tanar.C_NYOMTATASINEV AS TanarNev,
      tanar.C_OKTATASIAZONOSITO AS TanarOktAzon,
      terem.C_NEV AS TeremNev,
      'OrarendiOra' AS OraTipus,
      'F' AS Hianyzas,
      'F' AS Keses,
      'F' AS Ures,
      ot.C_HELYETTESTANAROKID AS HelyettesitoTanarID,
      helyettes.C_NYOMTATASINEV AS HelyettesitoTanarNev,
      ot.C_HELYETTESITESID AS HelyettesitesId,
      ot.C_TANARID AS TanarID,
      NULL AS AdminAltalKiirt,
      ot.C_ORARENDIORAGROUPID AS GroupId,
      NULL AS Tema,
      ot.C_TANTARGYID AS TantargyId,
      ot.C_OSZTALYCSOPORTID AS OsztCsopId,
      IIF(ot.C_HELYETTESTANAROKID IS NOT NULL, tanar.C_NYOMTATASINEV, NULL) AS HelyettesitettPedagogusNev,
      CONVERT(nvarchar(25), CAST(ot.C_DATUM AS DATETIME), 102) AS OraKezdeteDateST,
      DATEPART(w, ot.C_DATUM) + 1407 AS HetNapjaValos,
      CAST(ot.C_DATUM AS DATETIME) AS Datum,
      helyettes.C_OKTATASIAZONOSITO AS HelyettesitoTanarOktAzon
  FROM T_ORARENDTELJES_OSSZES ot
  LEFT JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = ot.C_OSZTALYCSOPORTID --AND ocs.C_INTEZMENYID = ot.C_INTEZMENYID and ocs.C_TANEVID = ot.C_TANEVID --AND ocs.TOROLT = 'F'
  LEFT JOIN T_CSENGETESIRENDORA_OSSZES csr ON csr.C_CSENGETESIRENDID = ot.C_CSENGETESIRENDID AND csr.C_ORASZAM = ot.C_ORASZAM --AND csr.C_INTEZMENYID = ot.C_INTEZMENYID AND csr.C_TANEVID = ot.C_TANEVID AND csr.TOROLT = 'F'
  LEFT JOIN T_TANTARGY_OSSZES tt ON tt.ID = ot.C_TANTARGYID AND tt.C_INTEZMENYID = ot.C_INTEZMENYID AND tt.C_TANEVID = ot.C_TANEVID AND tt.TOROLT = 'F' 
  LEFT JOIN T_FELHASZNALO_OSSZES tanar ON tanar.ID = ot.C_TANARID
  LEFT JOIN T_FELHASZNALO_OSSZES helyettes ON helyettes.ID = ot.C_HELYETTESTANAROKID --AND helyettes.TOROLT = 'F'
  LEFT JOIN T_TEREM_OSSZES terem ON terem.ID = ot.C_TEREMID
  WHERE ot.C_INTEZMENYID = @IntezmenyId
  AND ot.C_TANEVID = @TanevId
  AND ot.C_DATUM >= @IdoszakKezdete
  AND ot.C_DATUM <= @IdoszakVege
  AND (CAST(ot.C_DATUM AS DATETIME) + CAST(ot.C_ORAVEGE AS DATETIME)) >= CAST(@IdoszakKezdete AS DATE)
  AND (CAST(ot.C_DATUM AS DATETIME) + CAST(ot.C_ORAKEZDETE AS DATETIME)) <= CAST(@IdoszakVege AS DATE)
  AND ot.C_FELADATKATEGORIAID = CASE WHEN @pFeladatKategoriaId IS NOT NULL THEN @pFeladatKategoriaId ELSE ot.C_FELADATKATEGORIAID END
  AND ot.C_OSZTALYCSOPORTID = CASE WHEN @OsztalyCsoportId IS NOT NULL THEN @OsztalyCsoportId ELSE ot.C_OSZTALYCSOPORTID END
  AND ocs.C_FELADATELLATASIHELYID = CASE WHEN @pFeladatEllatasiHelyId IS NOT NULL THEN @pFeladatEllatasiHelyId ELSE ocs.C_FELADATELLATASIHELYID END
  AND ot.C_TANTARGYID = CASE WHEN @TantargyId IS NOT NULL THEN @TantargyId ELSE ot.C_TANTARGYID END
  AND (@TanarId IS NULL OR (ot.C_TANARID = @TanarId OR ot.C_HELYETTESTANAROKID = @TanarId))

  -- ha 0 mindkét paraméter, adja vissza a tanar osszes sajat nem naplozott orajat + azokat ahol ő volt a helyettesito
  AND (@TanarId IS NULL OR ((@CsakAHelyettesiteseim = 1 OR @HelyettesitettOraimIs = 1) OR (ot.C_HELYETTESTANAROKID = @TanarId OR (ot.C_TANARID = @TanarId AND ot.C_HELYETTESTANAROKID IS NULL))))
  -- ha csak a "csak a helyettesiteseim" parameter igaz, adja vissza a tanar azon nem naplozott orait, ahol ő volt a helyettesito
  AND (@TanarId IS NULL OR ((@CsakAHelyettesiteseim = 0 OR @HelyettesitettOraimIs = 1) OR (ot.C_HELYETTESTANAROKID = @TanarId)))
  -- ha csak a "helyettesitett oram is" parameter igaz, adja vissza a tanar sajat nem naplozott orait + azokat ahol ő volt a helyettesito + ahol őt helyettesítették
  AND (@TanarId IS NULL OR ((@CsakAHelyettesiteseim = 1 OR @HelyettesitettOraimIs = 0) OR (ot.C_HELYETTESTANAROKID IS NOT NULL OR ot.C_TANARID = @TanarId)))
  -- ha a "csak a helyettesiteseim" es a "helyettesitett oraim is" parameter is igaz, adja vissza azokat a nem naplozott orakat ahol a tanar volt a helyettesito, vagy őt helyettesítették
  AND (@TanarId IS NULL OR ((@CsakAHelyettesiteseim = 0 OR @HelyettesitettOraimIs = 0) OR (ot.C_HELYETTESTANAROKID IS NOT NULL)))
  -- inkább így kellene
  --AND (@TanarId IS NULL OR ((@CsakAHelyettesiteseim = 0 OR @HelyettesitettOraimIs = 0) OR (ot.C_HELYETTESTANAROKID = @TanarId OR (ot.C_TANARID = @TanarId AND ot.C_HELYETTESTANAROKID IS NOT NULL))))

  AND (@pDatumTol IS NULL OR ot.C_DATUM >= CAST(@pDatumTol AS DATE))
  AND (@pDatumIg IS NULL OR ot.C_DATUM <= CAST(@pDatumIg AS DATE))
  AND (@pOraszamTol IS NULL OR ot.C_ORASZAM >= @pOraszamTol)
  AND (@pOraszamIg IS NULL OR ot.C_ORASZAM <= @pOraszamIg)
  AND (@pIdopontTol IS NULL OR ot.C_ORAKEZDETE >= CAST(@pIdopontTol AS TIME))
  AND (@pIdopontIg IS NULL OR ot.C_ORAKEZDETE <= CAST(@pIdopontIg AS TIME))
  AND NOT EXISTS(
      SELECT *
      FROM dbo.T_TANITASIORA_OSSZES tt 
      WHERE 1 = 1
      AND tt.TOROLT = 'F'
      AND tt.C_INTEZMENYID = ot.C_INTEZMENYID
      AND tt.C_TANEVID = ot.C_TANEVID
      AND tt.C_DATUM = CAST(ot.C_DATUM AS DATETIME)
      AND tt.C_OSZTALYCSOPORTID = ot.C_OSZTALYCSOPORTID
      AND tt.C_TANTARGYID = ot.C_TANTARGYID
      AND tt.C_TANARID = ot.C_TANARID 
      AND (
          tt.C_ORASZAM = ot.C_ORASZAM
          OR
          (
              tt.C_ORAKEZDETE = CAST(ot.C_DATUM AS DATETIME) + CAST(ot.C_ORAKEZDETE AS DATETIME)
              AND
              tt.C_ORAVEGE = CAST(ot.C_DATUM AS DATETIME) + CAST(ot.C_ORAVEGE AS DATETIME)
          )
      )
  )

  -- Iktatás adatok
  SELECT
     @OsztalyCsoportId AS OsztalyId
    ,ocs.C_EVFOLYAMTIPUSA AS Evfolyam
    ,ocs.C_FELADATELLATASIHELYID AS FeladatEllatasiHelyId
    ,ocs.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
    ,o.C_AGAZATUJSZKTTIPUSID AS UjSzktAgazat
    ,o.C_SZAKMATIPUSID AS UjSzktSzakma
    ,o.C_SZAKMAIRANYTIPUSID AS UjSzktSzakmairany
    ,o.C_TANULMANYITERULETNKTTIPUSID AS NktTanulmanyiTerulet
    ,o.C_SZAKKEPESITESNKTTIPUSID AS NktSzakkepesites
    ,o.C_SZAKIRANYNKTTIPUSID AS NktSzakirany
    ,ocs.C_KERESZTFELEVES AS OJCSJKeresztfeleves
    ,ocs.C_ISTECHNIKAI AS OJTechnikaiOsztaly
    ,o.C_NEMZETISEGI AS OJNemzetisegi
    ,o.C_KETTANNYELVU AS OJKettannyelvu
    ,o.C_NYELVIELOKESZITO AS OJNyelviElokeszito
    ,ocs.C_ISGYOGYPEDAGOGIAILOGOPEDIAI AS OJIsGyogypedagogiaiLogopediai
    ,o.C_SPORT AS OJSportOsztaly
    ,o.C_AJPROGRAM AS OJAranyJanosProgram
  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 = @OsztalyCsoportId
    AND ocs.TOROLT = 'F'
    AND ocs.C_TANEVID = @TanevId
    AND ocs.C_INTEZMENYID = @IntezmenyId

  -- Tanár iktatás adatok
  SELECT
     f.ID AS TanarId
    ,f.C_OKTATASIAZONOSITO AS TanarOktAzon
  FROM T_ALKALMAZOTT_OSSZES a
    INNER JOIN T_FELHASZNALO_OSSZES f ON f.ID = a.ID AND f.TOROLT = 'F'
      AND a.C_ALTANEVID = f.C_TANEVID
      AND a.C_ALINTEZMENYID = f.C_INTEZMENYID
  WHERE a.TOROLT = 'F'
    AND a.C_ALINTEZMENYID = @IntezmenyId
    AND a.C_ALTANEVID = @TanevId
    AND f.ID = CASE WHEN @TanarId IS NOT NULL THEN @TanarId ELSE f.ID END

END
GO