﻿DROP PROCEDURE IF EXISTS uspGetNemMegtartottOrakSzamaByHet

GO
CREATE PROCEDURE uspGetNemMegtartottOrakSzamaByHet
  @pFeladatKategoriaId  INT = NULL,
  @pIntezmenyId      INT,
  @pTanevId        INT,
  @pOsztalyId        INT,
  @pHetSorszam      INT,
  @pFeladatEllatasiHelyId  INT = NULL
AS
BEGIN

  SET NOCOUNT ON;

  DECLARE @pCsakOrarendiOrak BIT = 0
  DECLARE @pIdoszakKezdete DATETIME = (SELECT MIN(C_HETKEZDONAPJA) FROM T_NAPTARIHET nh  WHERE nh.C_INTEZMENYID = @pIntezmenyId AND nh.C_TANEVID = @pTanevId AND nh.TOROLT = 'F')
  DECLARE @pIdoszakVege DATETIME = GETDATE()
  
    DECLARE 
     @sql nvarchar(max)
    ,@OrarendSql nvarchar(max)
    ,@selectSql nvarchar(max)
    ,@whereSql nvarchar(max)
    ,@orderSql nvarchar(max) = ''
  
  SET @OrarendSql = N'
  CREATE TABLE #OrarendTable 
  (
     Id int
    ,Datum datetime
    ,HetNapja int
    ,HetSorszam int
    ,OraKezdete datetime
    ,OraVege datetime
    ,Oraszam int
    ,TargyNev nvarchar(300)
    ,CsengetesiRendID int
    ,OsztalyNev nvarchar(255)
    ,TanarNev nvarchar(255)
    ,OraTipus nvarchar(200)
    ,HelyettesitoTanarID int
    ,HelyettesitoTanarNev nvarchar(255)
    ,TanarID int
    ,OsztCsopId int
    ,IsEgyediNap char(1)
  )
  
  INSERT INTO #OrarendTable 
  (
     Id
    ,Datum
    ,HetNapja
    ,HetSorszam
    ,OraKezdete
    ,OraVege
    ,Oraszam
    ,TargyNev
    ,CsengetesiRendID
    ,OsztalyNev
    ,TanarNev
    ,OraTipus
    ,HelyettesitoTanarID
    ,HelyettesitoTanarNev
    ,TanarID
    ,OsztCsopId
    ,IsEgyediNap
  )
  EXEC sp_GetOrarend
     @pIntezmenyId = @pIntezmenyId
    ,@pTanevId = @pTanevId
    ,@pIdoszakKezdete = @pIdoszakKezdete
    ,@pIdoszakVege = @pIdoszakVege
    ,@pTanarId = NULL
    ,@pIsHelyettesitesNelkul  = 0
    ,@pOsztalyCsoportId  =  @pOsztalyId
    ,@pTanuloId = NULL
    ,@pTantargyId  = NULL
    ,@pTeremId = NULL
    ,@pCsakOrarendiOrak  = @pCsakOrarendiOrak
    ,@pIsNapirend = NULL
    ,@pOszlopok=N''Id,Datum,HetNapja,HetSorszam,OraKezdete,OraVege,Oraszam,TargyNev,CsengetesiRendID,OsztalyNev,TanarNev,OraTipus,HelyettesitoTanarID,HelyettesitoTanarNev,TanarID,OsztCsopId,IsEgyediNap'''  

  SET @selectSql = N'
  SELECT DISTINCT
     tmp.Id AS Id
    ,tmp.HetSorszam AS HetSzama
    ,tmp.Datum AS Datum
    ,tmp.HetNapja AS HetNapja
    ,tmp.Oraszam AS Oraszam
    ,tmp.OsztalyNev AS OsztalyNev
    ,tmp.TargyNev AS TargyNev
    ,ISNULL(tmp.HelyettesitoTanarNev, tmp.TanarNev) AS TanarNev
    ,tmp.OraKezdete AS OraKezdete
    ,tmp.OraVege AS OraVege
    ,tmp.CsengetesiRendID AS CsengetesiRend
    ,tmp.IsEgyediNap as IsEgyediNap
    ,IIF(tmp.HelyettesitoTanarNev IS NOT NULL, ISNULL(helyetesitoTanar.C_OKTATASIAZONOSITO, ''-''), ISNULL(tanar.C_OKTATASIAZONOSITO, ''-'')) as TanarOktatasiAzonosito
  FROM #OrarendTable tmp
    INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON tmp.OsztCsopId = ocs.ID
    INNER JOIN T_FELHASZNALO_OSSZES tanar ON tanar.ID = tmp.TanarID AND tanar.TOROLT = ''F''
    INNER JOIN T_ALKALMAZOTT_OSSZES alkalmazott ON alkalmazott.ID = tanar.ID and alkalmazott.TOROLT = ''F''
    LEFT JOIN (
      T_FELHASZNALO_OSSZES helyetesitoTanar 
      INNER JOIN T_ALKALMAZOTT_OSSZES helyettesitoAlkalmazott ON helyettesitoAlkalmazott.ID = helyetesitoTanar.ID and helyettesitoAlkalmazott.TOROLT = ''F''
    ) ON helyetesitoTanar.ID = tmp.HelyettesitoTanarID AND helyetesitoTanar.TOROLT = ''F''
  '

  SET @whereSql = N'
  WHERE tmp.OraTipus = ''OrarendiOra''
    AND tmp.HetSorszam = @pHetSorszam
    AND tmp.OraVege < GETDATE()'

  IF @pFeladatKategoriaId IS NOT NULL BEGIN
    SET @whereSql += N'
        AND ocs.C_FELADATKATEGORIAID = @pFeladatKategoriaId'
  END

  IF @pFeladatEllatasiHelyId IS NOT NULL BEGIN
    SET @whereSql += N'
        AND ocs.C_FELADATELLATASIHELYID = @pFeladatEllatasiHelyId'
  END

  SET @orderSql = N'
    ORDER BY tmp.Datum ASC,tmp.Oraszam ASC'

  SET @sql = @OrarendSql + @selectSql + @whereSql + @orderSql

  EXEC sp_executesql @sql, N'
     @pIntezmenyId INT
    ,@pTanevId INT 
    ,@pIdoszakKezdete DATETIME
    ,@pIdoszakVege DATETIME 
    ,@pOsztalyId  INT 
    ,@pCsakOrarendiOrak  BIT
    ,@pHetSorszam INT
    ,@pFeladatKategoriaId INT 
    ,@pFeladatEllatasiHelyId INT'
    ,@pIntezmenyId = @pIntezmenyId
    ,@pTanevId = @pTanevId
    ,@pIdoszakKezdete = @pIdoszakKezdete
    ,@pIdoszakVege = @pIdoszakVege
    ,@pOsztalyId  =  @pOsztalyId
    ,@pCsakOrarendiOrak  = @pCsakOrarendiOrak
    ,@pHetSorszam = @pHetSorszam
    ,@pFeladatKategoriaId = @pFeladatKategoriaId
    ,@pFeladatEllatasiHelyId = @pFeladatEllatasiHelyId
END
GO