﻿DROP PROCEDURE IF EXISTS sp_GetHelyettesitesekAjanlasa
GO

CREATE PROCEDURE [dbo].[sp_GetHelyettesitesekAjanlasa]
	@intezmenyId int,
	@tanevId int,
	@pHelyettesitettOrarendiOraId int,
  @pHelyettesitesDatuma DATE,
	@pSzakszeruId int = 1494,
	@pNemSzakszeruId int = 1495,
	@pOsszevonas int = 1496,
	@pFokozatNa int = 3040
AS
BEGIN
SET NOCOUNT ON;
	
	DECLARE @OraKezdet DATETIME; DECLARE @Oraveg DATETIME;
	SELECT @OraKezdet = C_ORAKEZDETE, @Oraveg = C_ORAVEGE FROM T_ORARENDIORA WHERE ID = @pHelyettesitettOrarendiOraId
	
	DECLARE @Datum DATETIME = (SELECT CAST(@pHelyettesitesDatuma AS date))
	DECLARE @DatumVeg DATETIME = (SELECT DATEADD(DAY, 1, (SELECT CAST(@pHelyettesitesDatuma AS date))))

  DECLARE @KezdoDateTime DATETIME = (SELECT (@OraKezdet + CAST(@pHelyettesitesDatuma AS datetime)))
  DECLARE @VegeDateTime DATETIME = (SELECT (@Oraveg + CAST(@pHelyettesitesDatuma AS datetime)))

	CREATE TABLE #OrarendTable (
		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 IX01 CLUSTERED (OraTipus, OraKezdete, OraVege)
	)
	
	INSERT INTO #OrarendTable (
		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 = @Datum
		,@pIdoszakVege = @DatumVeg
		,@pTanarId = NULL
		,@pIsHelyettesitesNelkul  = 0
		,@pOsztalyCsoportId  =  NULL
		,@pTanuloId = NULL
		,@pTantargyId  = NULL
		,@pTeremId = NULL
		,@pCsakOrarendiOrak  = 0
		,@pIsNapirend = NULL

	SELECT
		NULL as ID
		,f.ID as TanarId
		,CASE
			MAX(CASE
				WHEN ot.OraKezdete < @VegeDateTime AND  ot.OraVege > @KezdoDateTime THEN '3'
        WHEN ot.ID IS NULL AND ma.C_BESOROLASIFOKOZAT = @pFokozatNa THEN '2'
				WHEN ot.ID IS NULL AND ma.C_BESOROLASIFOKOZAT != @pFokozatNa THEN '1'
				WHEN ot.ID IS NOT NULL AND ot.ID = ot.ORARENDIID AND ot.HelyettesitesId IS NULL THEN '3'
				WHEN ot.ID IS NOT NULL AND ot.ID != ot.ORARENDIID AND ot.Megtartott = 'T' THEN '3'
				WHEN ot.ID IS NOT NULL AND ot.ID != ot.ORARENDIID AND ot.Megtartott = 'F' AND ma.C_BESOROLASIFOKOZAT = @pFokozatNa THEN '2'
				WHEN ot.ID IS NOT NULL AND ot.ID != ot.ORARENDIID AND ot.Megtartott = 'F' AND ma.C_BESOROLASIFOKOZAT != @pFokozatNa THEN '1'
				WHEN ot.ID IS NOT NULL AND ot.ID = ot.ORARENDIID AND ot.HelyettesitesId IS NOT NULL AND a.ID = ot.TanarID AND ma.C_BESOROLASIFOKOZAT = @pFokozatNa THEN '2'
				WHEN ot.ID IS NOT NULL AND ot.ID = ot.ORARENDIID AND ot.HelyettesitesId IS NOT NULL AND a.ID = ot.TanarID AND ma.C_BESOROLASIFOKOZAT != @pFokozatNa THEN '1'
				WHEN ot.ID IS NOT NULL AND ot.ID = ot.ORARENDIID AND ot.HelyettesitesId IS NOT NULL AND a.ID = ot.HelyettesitoTanarID THEN '3'      
			END)
			WHEN 1 THEN @pSzakszeruId
			WHEN 2 THEN @pNemSzakszeruId
			WHEN 3 THEN @pOsszevonas
      
		END as HelyettesitesTipusId
		,ot.TantargyId as TantargyId
		,ot.OsztCsopId as OsztalyCsoportId
		,f.C_NYOMTATASINEV as TanarNev
		,t.C_NEV as TantargyNev
		,ot.OsztalyNev  AS OsztalycsoportNev
	   ,@pHelyettesitettOrarendiOraId  AS HelyettesitettOrarendiOraId
	   ,@pHelyettesitesDatuma AS HelyettesitesDatuma
	FROM T_ALKALMAZOTT a
		INNER JOIN T_FELHASZNALO f on f.ID = a.ID AND f.TOROLT = 'F'
		INNER JOIN T_MUNKAUGYIADATOK ma ON ma.C_ALKALMAZOTTID = a.ID AND ma.C_BETOLTETLENALLASHELY = 'F' AND ma.C_TARTOSHELYETTESITES = 'F' AND (C_ALKALMAZASKEZDETE <= @Datum AND (C_ALKALMAZASMEGSZUNESE >= @Datum OR C_ALKALMAZASMEGSZUNESE IS NULL))
		LEFT JOIN #OrarendTable ot on (ot.TanarID = a.ID or ot.HelyettesitoTanarID = a.ID)
		LEFT JOIN T_TANTARGY t on t.ID = ot.TantargyId AND t.TOROLT = 'F'
	WHERE
		a.TOROLT = 'F' and a.C_ALINTEZMENYID = @intezmenyId and a.C_ALTANEVID = @tanevId
	GROUP BY
		f.ID, ot.TantargyId, ot.OsztCsopId,f.C_NYOMTATASINEV,t.C_NEV,ot.OsztalyNev
	ORDER BY
		HelyettesitesTipusId, TanarNev

	DROP TABLE #OrarendTable
END
GO