GO
/****** Object:  StoredProcedure [dbo].[sp_GetNaploEllenorzesTetelek]    Script Date: 2016.03.29. 9:17:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

IF OBJECT_ID('[DBO].[sp_GetNaploEllenorzesTetelek]') IS NOT NULL BEGIN
  DROP PROCEDURE [DBO].[sp_GetNaploEllenorzesTetelek]
END  
GO

-- =============================================
-- Author:		Kelemen Attila
-- Create date: 2016.03.21.
-- Description:	Naplóellenőrzés tételei
-- =============================================
CREATE PROCEDURE [dbo].[sp_GetNaploEllenorzesTetelek]
	@osztalyId int,
	@hetSorszam int
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
select * from
(
--Órarendi órák, amikhez nem tartozik tanóra
select      T_ORARENDIORA.ID Id,
			naptar.C_HETSORSZAMA HetSzama,
            naptar.C_NAPDATUMA Datum,
            naptar.C_HETNAPJA Hetnapja,
            T_ORARENDIORA.C_ORASZAM Oraszam,
            osztaly.C_NEV OsztalyNev,
			T_TANTARGY.C_NEV TargyNev,
			--Ha van helyettesítő, akkor annak a nevére van szükségünk
            (select top 1 tanar.C_NYOMTATASINEV from T_FELHASZNALO tanar
				where ((T_TANITASIORA.C_HELYETTESITOTANARID IS null and T_FOGLALKOZAS.C_TANARID = tanar.ID)
				OR (T_TANITASIORA.C_HELYETTESITOTANARID IS not null and T_TANITASIORA.C_HELYETTESITOTANARID= tanar.ID))) TanarNev
        FROM
            T_ORARENDIORA
            inner join T_FOGLALKOZAS on T_FOGLALKOZAS.ID= T_ORARENDIORA.C_FOGLALKOZASID AND T_FOGLALKOZAS.TOROLT='F'
            left join T_TANTARGY on T_TANTARGY.ID= T_FOGLALKOZAS.C_TANTARGYID

			inner join T_NAPTARINAP naptar on (( CONVERT(date,naptar.C_NAPDATUMA) BETWEEN CONVERT(date,T_ORARENDIORA.C_ORAERVENYESSEGKEZDETE) AND CONVERT(date,T_ORARENDIORA.C_ORAERVENYESSEGVEGE))
												AND
												 (naptar.C_HETIREND = T_ORARENDIORA.C_HETIREND OR T_ORARENDIORA.C_HETIREND = 1554
                                                AND naptar.C_HETNAPJA = T_ORARENDIORA.C_HETNAPJA) )

			LEFT JOIN T_TANITASIORA ON (T_TANITASIORA.C_ORARENDIORAID = T_ORARENDIORA.ID AND T_TANITASIORA.TOROLT='F' AND naptar.C_NAPDATUMA = T_TANITASIORA.C_DATUM
				--AND T_TANITASIORA.C_MEGTARTOTT IS NULL
			)

            inner join T_OSZTALYCSOPORT osztaly on T_FOGLALKOZAS.C_OSZTALYCSOPORTID = osztaly.ID AND osztaly.TOROLT='F'

			--Az osztályhoz kapcsolódó csoportok óráit is listázzuk
			left join (Select OsztalyID, CsoportID from 
                                (select C_OSZTALYCSOPORTID OsztalyID, C_TANULOID TanuloID from T_TANULOCSOPORT INNER JOIN T_OSZTALY ON T_TANULOCSOPORT.C_OSZTALYCSOPORTID = T_OSZTALY.ID
                                    WHERE  T_TANULOCSOPORT.TOROLT='F'
									and T_TANULOCSOPORT.C_BELEPESDATUM < GETDATE()
									and (T_TANULOCSOPORT.C_KILEPESDATUM is null or T_TANULOCSOPORT.C_KILEPESDATUM >= GETDATE())) OsztalyTanuloi
								INNER JOIN 
                             (SELECT T_CSOPORT.ID CsoportID, C_TANULOID TanuloID FROM T_TANULOCSOPORT
                                        INNER JOIN T_CSOPORT ON T_TANULOCSOPORT.ID=T_CSOPORT.ID 
                                        WHERE T_CSOPORT.TOROLT='F'
                                        AND T_TANULOCSOPORT.TOROLT='F'
										and T_TANULOCSOPORT.C_BELEPESDATUM < GETDATE()
										and (T_TANULOCSOPORT.C_KILEPESDATUM is null or T_TANULOCSOPORT.C_KILEPESDATUM >= GETDATE())
										) Csoportok ON OsztalyTanuloi.TanuloID = Csoportok.TanuloID) KapcsolodoCsoportok ON
										KapcsolodoCsoportok.OsztalyID = @osztalyId
			
            where T_ORARENDIORA.TOROLT='F'
			    AND naptar.TOROLT = 'F'  
				AND GETDATE() >= naptar.C_NAPDATUMA
			    AND T_TANITASIORA.ID IS NULL
			AND (osztaly.ID = @osztalyId OR osztaly.ID = KapcsolodoCsoportok.CsoportID)
			and naptar.C_HETSORSZAMA = @hetSorszam
				UNION ALL
			
			
			--Tanítási órák, amikhez nem tartozik órarendi óra	
				select  T_TANITASIORA.ID Id,
					naptar.C_HETSORSZAMA HetSzama,
					naptar.C_NAPDATUMA Datum,
					naptar.C_HETNAPJA Hetnapja,
					 T_TANITASIORA.C_ORASZAM Oraszam,
					osztaly.C_NEV OsztalyNev,
					T_TANTARGY.C_NEV TargyNev,
					tanar.C_NYOMTATASINEV TanarNev
			
			 from T_TANITASIORA
				inner join T_NAPTARINAP naptar on (T_TANITASIORA.C_DATUM = naptar.C_NAPDATUMA)
			inner join T_FOGLALKOZAS on T_FOGLALKOZAS.ID= T_TANITASIORA.C_FOGLALKOZASID			
			left join T_OSZTALYCSOPORT osztaly on T_FOGLALKOZAS.C_OSZTALYCSOPORTID = osztaly.ID
            left join T_TANTARGY on T_TANTARGY.ID= T_FOGLALKOZAS.C_TANTARGYID

            left join T_FELHASZNALO tanar on
			--Ha van helyettesítő, akkor aszerint joinolunk
			(case when T_TANITASIORA.C_HELYETTESITOTANARID IS not null then T_TANITASIORA.C_HELYETTESITOTANARID
			else T_FOGLALKOZAS.C_TANARID end) = tanar.ID
			

			left join (Select OsztalyID, CsoportID from 
                                (select C_OSZTALYCSOPORTID OsztalyID, C_TANULOID TanuloID from T_TANULOCSOPORT INNER JOIN T_OSZTALY ON T_TANULOCSOPORT.C_OSZTALYCSOPORTID = T_OSZTALY.ID
                                    WHERE  T_TANULOCSOPORT.TOROLT='F'
									and T_TANULOCSOPORT.C_BELEPESDATUM < GETDATE()
									and (T_TANULOCSOPORT.C_KILEPESDATUM is null or T_TANULOCSOPORT.C_KILEPESDATUM >= GETDATE())) OsztalyTanuloi
								INNER JOIN 
                             (SELECT T_CSOPORT.ID CsoportID, C_TANULOID TanuloID FROM T_TANULOCSOPORT
                                        INNER JOIN T_CSOPORT ON T_TANULOCSOPORT.ID=T_CSOPORT.ID 
                                        WHERE T_CSOPORT.TOROLT='F'
                                        AND T_TANULOCSOPORT.TOROLT='F'
										and T_TANULOCSOPORT.C_BELEPESDATUM < GETDATE()
										and (T_TANULOCSOPORT.C_KILEPESDATUM is null or T_TANULOCSOPORT.C_KILEPESDATUM >= GETDATE())
										) Csoportok ON OsztalyTanuloi.TanuloID = Csoportok.TanuloID) KapcsolodoCsoportok ON
										KapcsolodoCsoportok.OsztalyID = @osztalyId		
				
				where T_TANITASIORA.C_ORARENDIORAID is null
				AND T_TANITASIORA.C_MEGTARTOTT is null
				AND (osztaly.ID = @osztalyId OR osztaly.ID = KapcsolodoCsoportok.CsoportID)
				and naptar.C_HETSORSZAMA = @hetSorszam
				) Orak
       	  	 
          ORDER BY Datum DESC
END
