IF OBJECT_ID('dbo.fnGetTanorakNevekkel') IS NOT NULL BEGIN
  DROP FUNCTION dbo.fnGetTanorakNevekkel
END
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- A Funkció visszaadja egy pedagógus, egy osztály vagy csoport, egy tantárgy vagy egy terem minden 
-- naplózatlan, naplózott, megtartott és nem-megtartott, helyettesített, vagy akármilyen óráját 
-- egy megadott időszakra
CREATE FUNCTION dbo.fnGetTanorakNevekkel 
	( 
		@tanevId INT,					-- Kötelezően átadandó
		@kezdoDatum DATETIME = NULL, 	-- NULL esetén az adott tanév első napjától vizsgálja
		@vegDatum DATETIME = NULL,		-- NULL esetén az adott tanév utolsó napjáig vizsgálja
		@tanarId INT = NULL,			-- NULL esetén minden pedagógus órái lejönnek
		@tantargyId INT = NULL,			-- NULL esetén minden pedagógus órái lejönnek
		@teremId INT = NULL,			-- NULL esetén minden pedagógus órái lejönnek
		@osztalycsoportId INT = NULL,	-- NULL esetén minden osztály vagy csoport órái lejönnek
		@isKapcsolodoCsoportok BIT = 0	-- 1 esetén az osztály vagy csoport kapcsolódó osztályait is csoportojait is lehozza, 
										-- 		csak akkor értelmezhető, ha van @osztalycsoportId is.
	)
RETURNS @retTable TABLE (
   OraDatuma 			DATETIME,
   OraKezdete 			DATETIME,
   OraVege 				DATETIME,
   HetNapjaId 			INT,
   CsengetesiRendId 	INT,
   CsengetesiRendOraId 	INT,
   HetirendId			INT,
   Oraszam 				INT,
   OraTulajdonosId 		INT,
   TanarId 				INT,
   HelyettesitoId 		INT,
   OsztalyCsoportId 	INT,
   TantargyId 			INT,
   TeremId 				INT,
   IsHelyettesitett 	CHAR,
   IsNaplozott 			CHAR,
   IsMobilNaplozott 	CHAR,
   IsElmaradt 			CHAR,
   IsOrarendNelkul 		CHAR,
   OrarendiOraId		INT,
   TanitasiOraId		INT,
   TanarNev				nvarchar(1000),
   HelyettesitoNev		nvarchar(1000),
   OsztalyCsoportNev	nvarchar(1000),
   TantargyNev			nvarchar(1000),
   TeremNev				nvarchar(1000),
   HetirendNev			nvarchar(1000)
)
BEGIN  
	
	INSERT INTO @retTable (	
		OraDatuma, OraKezdete, OraVege, HetNapjaId, CsengetesiRendId, CsengetesiRendOraId, Oraszam, HetirendId, 
		OraTulajdonosId, TanarId, HelyettesitoId, OsztalyCsoportId, TantargyId, TeremId, 
		IsHelyettesitett, IsNaplozott, IsMobilNaplozott, IsElmaradt, IsOrarendNelkul, OrarendiOraId, TanitasiOraId,
		TanarNev, HelyettesitoNev, OsztalyCsoportNev, TantargyNev, TeremNev, HetirendNev)
	SELECT 
		-- Időszak adatok
		orarend.OraDatuma,
		orarend.OraKezdete,
		orarend.OraVege,
		orarend.HetNapjaId,
		orarend.CsengetesiRendId,
		orarend.CsengetesiRendOraId,
		orarend.Oraszam,
		orarend.HetirendId,
		-- Kapcsolati adatok
		orarend.OraTulajdonosId,
		orarend.TanarId,
		orarend.HelyettesitoId,
		orarend.OsztalyCsoportId,
		orarend.TantargyId,
		orarend.TeremId,
		-- Egyéb adatok
		orarend.IsHelyettesitett,
		orarend.IsNaplozott,
		orarend.IsMobilNaplozott,
		orarend.IsElmaradt,
		orarend.IsOrarendNelkul,
		orarend.OrarendiOraId,
		orarend.TanitasiOraId,
		-- Név adatok
		ISNULL(tanar.C_NYOMTATASINEV,''),
		ISNULL(helyettesito.C_NYOMTATASINEV,''),
		ISNULL(osztalycsoport.C_NEV,''),
		ISNULL(tantargy.C_NEV,''),
		ISNULL(terem.C_NEV,''),
		ISNULL(hetirend.C_NAME,'')
	FROM fnGetTanorak(@tanevId,@kezdoDatum,@vegDatum,@tanarId,@tantargyId,@teremId,@osztalycsoportId,@isKapcsolodoCsoportok) orarend
	LEFT JOIN T_FELHASZNALO_OSSZES tanar ON tanar.ID = orarend.TanarId AND tanar.C_TANEVID = @tanevId AND tanar.TOROLT = 'F'
	LEFT JOIN T_FELHASZNALO_OSSZES helyettesito ON helyettesito.ID = orarend.HelyettesitoId AND helyettesito.C_TANEVID = @tanevId AND helyettesito.TOROLT = 'F'
	LEFT JOIN T_OSZTALYCSOPORT_OSSZES osztalycsoport ON osztalycsoport.ID = orarend.OsztalyCsoportId AND osztalycsoport.C_TANEVID = @tanevId AND osztalycsoport.TOROLT = 'F'
	LEFT JOIN T_TANTARGY_OSSZES tantargy ON tantargy.ID = orarend.TantargyId AND tantargy.C_TANEVID = @tanevId AND tantargy.TOROLT = 'F'
	LEFT JOIN T_TEREM_OSSZES terem ON terem.ID = orarend.TeremId AND terem.C_TANEVID = @tanevId AND terem.TOROLT = 'F'
	LEFT JOIN T_DICTIONARYITEMBASE_OSSZES hetirend ON hetirend.ID = orarend.HetirendId AND hetirend.C_TANEVID = @tanevId AND hetirend.TOROLT = 'F'
	RETURN
END
GO