GO
/****** Object:  StoredProcedure [dbo].[sp_SetRendszerErtesitesek]    Script Date: 2016.06.09. 14:34:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

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

-- =============================================
-- Author:		DT
-- Create date: 2016-03-21
-- Description:	Rendszer értesítések tábla frissítése
-- =============================================
CREATE PROCEDURE [dbo].[sp_SetRendszerErtesitesek]
AS
BEGIN
	SET NOCOUNT ON;
		

	/*Globál UPDATE*/
	UPDATE T_RENDSZERERTESITESEK
    SET C_FRISSITESIDEJE = GETDATE()
				,LASTCHANGED = GETDATE()
				,C_KELLFRISSITES = 'F'
	WHERE TOROLT = 'F'		
		
	/*Az elektronikus naplóban nincs beállítva a visszamenőleges beírás korlátozása!*/

			
	/*
    A rendszerben ... 
    tanuló nincs osztályba sorolva!
  */
	UPDATE T_RENDSZERERTESITESEK
	SET C_TANULOKOSZTALYBASOROLASA = 
		( SELECT COUNT(1) 
		FROM T_TANULO t
				LEFT JOIN T_TANULOCSOPORT TCS ON ( TCS.C_TANULOID = t.ID 
													AND TCS.TOROLT = 'F'
													AND TCS.C_BELEPESDATUM < GETDATE()
													AND (TCS.C_KILEPESDATUM is null OR TCS.C_KILEPESDATUM >= GETDATE()) 
													AND T_RENDSZERERTESITESEK.C_INTEZMENYID = TCS.C_INTEZMENYID
													AND T_RENDSZERERTESITESEK.C_TANEVID = TCS.C_TANEVID
												)
			WHERE T.TOROLT = 'F' AND TCS.ID IS NULL
				AND T_RENDSZERERTESITESEK.C_INTEZMENYID = T.C_ALINTEZMENYID
				AND T_RENDSZERERTESITESEK.C_TANEVID = T.C_ALTANEVID
		)
		WHERE TOROLT = 'F'
	/*
    Az órarendben ... órában tanulóütközés van, 
    azonos órában a tanulónak több tanóra IS rögzítve van!
  */
	UPDATE T_RENDSZERERTESITESEK
	SET C_ORARENDTANULOUTKOZESEK = 
	  ( SELECT count(1) 
	  FROM (
		SELECT sub.C_HETIREND, sub.C_HETNAPJA, sub.C_CSENGETESIRENDORAID, sub.C_TANULOID, COUNT(1) AS cnt
		FROM (
		  SELECT o.C_HETIREND, o.C_HETNAPJA, o.C_CSENGETESIRENDORAID, tcs.C_TANULOID--, COUNT(1)
		  FROM T_ORARENDIORA o
			INNER JOIN T_FOGLALKOZAS F ON F.ID = o.C_FOGLALKOZASID AND F.TOROLT = 'F'
			INNER JOIN T_OSZTALYCSOPORT OCS ON OCS.ID = F.C_OSZTALYCSOPORTID AND OCS.TOROLT = 'F'
			INNER JOIN T_TANULOCSOPORT TCS ON TCS.C_OSZTALYCSOPORTID = OCS.ID AND TCS.TOROLT = 'F'
		  WHERE o.TOROLT = 'F'
			AND F.C_FOGLALKOZASTIPUSA IN (1339, 1368)
			AND o.C_ORAERVENYESSEGKEZDETE < GETDATE() 
			AND (o.C_ORAERVENYESSEGVEGE > GETDATE() OR o.C_ORAERVENYESSEGVEGE IS NULL)
			AND tcs.C_BELEPESDATUM < GETDATE() 
			AND (tcs.C_KILEPESDATUM > GETDATE() OR tcs.C_KILEPESDATUM IS NULL)
			AND O.C_INTEZMENYID = T_RENDSZERERTESITESEK.C_INTEZMENYID
			AND O.C_TANEVID = T_RENDSZERERTESITESEK.C_TANEVID
		  UNION ALL
			
		  SELECT n.C_HETIREND, o.C_HETNAPJA, o.C_CSENGETESIRENDORAID, tcs.C_TANULOID
		  FROM T_TANITASIORA o
			INNER JOIN T_FOGLALKOZAS F ON F.ID = o.C_FOGLALKOZASID AND F.TOROLT = 'F'
			INNER JOIN T_OSZTALYCSOPORT OCS ON OCS.ID = F.C_OSZTALYCSOPORTID AND OCS.TOROLT = 'F'
			INNER JOIN T_TANULOCSOPORT TCS ON TCS.C_OSZTALYCSOPORTID = OCS.ID AND TCS.TOROLT = 'F'
			INNER JOIN T_NAPTARINAP n ON n.ID = o.C_NAPTARINAPID AND n.TOROLT = 'F'
		  WHERE o.TOROLT = 'F'
			AND F.C_FOGLALKOZASTIPUSA IN (1339, 1368)
			AND tcs.C_BELEPESDATUM < GETDATE() 
			AND (tcs.C_KILEPESDATUM > GETDATE() OR tcs.C_KILEPESDATUM IS NULL)
			AND o.C_ORARENDIORAGROUPID IS NULL
			AND o.C_DATUM > getdate() - 1 
			AND O.C_INTEZMENYID = T_RENDSZERERTESITESEK.C_INTEZMENYID
			AND O.C_TANEVID = T_RENDSZERERTESITESEK.C_TANEVID
		) sub
		GROUP BY sub.C_HETIREND, sub.C_HETNAPJA, sub.C_CSENGETESIRENDORAID, sub.C_TANULOID
		HAVING COUNT(1) > 1
	  ) A )
	  WHERE TOROLT = 'F'

			
	/*
    Az intézménynek hiányosan vannak kitöltve az adatai! 
    Ennek következményeként a dokumentumokban az intézmény adatai nem jelennek meg!
  */
	UPDATE T_RENDSZERERTESITESEK
	SET C_INTEZMENYHIANYOSADATOK = IIF(
		(SELECT count(1) 
		FROM T_INTEZMENYADATOK i
			WHERE i.TOROLT = 'F' 
		  AND (C_NEV IS NULL 
			OR C_OMKOD IS NULL 
			OR C_IRANYITOSZAM IS NULL 
			OR C_VAROS IS NULL 
			OR C_KOZTERULETNEV IS NULL 
			OR C_KOZTERULETJELLEG IS NULL 
			OR C_HAZSZAM IS NULL 
			OR C_IGAZGATONEVE IS NULL)
		AND I.C_INTEZMENYID = T_RENDSZERERTESITESEK.C_INTEZMENYID
		AND I.C_TANEVID = T_RENDSZERERTESITESEK.C_TANEVID
	  )	> 0, 'T', 'F' )
	WHERE TOROLT = 'F'
   

	/*
    A rendszerben ... 
    tanulónak nem megfelelő formátumú az oktatási azonosítója.
  */
	UPDATE T_RENDSZERERTESITESEK
	SET C_TANULOHIANYOSOKTATASIAZONOSI = (
		SELECT count(1) 
		FROM T_TANULO t
			  INNER JOIN T_FELHASZNALO f ON f.ID = t.ID AND f.TOROLT = 'F'
			WHERE t.TOROLT = 'F' 
		  AND (f.C_OKTATASIAZONOSITO NOT LIKE '7%' 
			OR f.C_OKTATASIAZONOSITO LIKE '%[^0-9]%' 
			OR LEN(f.C_OKTATASIAZONOSITO) <> 11)
		  AND T.C_ALINTEZMENYID = T_RENDSZERERTESITESEK.C_INTEZMENYID
		AND T.C_ALTANEVID = T_RENDSZERERTESITESEK.C_TANEVID
	  )	
	WHERE TOROLT = 'F'
		  	

	/*
    A rendszerben ... 
    tanárnak nem megfelelő formátumú az oktatási azonosítója.
  */
	UPDATE T_RENDSZERERTESITESEK
	SET C_TANAROKHIANYOSOKTATASIAZONOS = (
    SELECT count(1) 
    FROM T_ALKALMAZOTT a
			INNER JOIN T_FELHASZNALO f ON f.ID = a.ID AND f.TOROLT = 'F'
		WHERE a.TOROLT = 'F' 
      AND (f.C_OKTATASIAZONOSITO not like '7%' 
        or f.C_OKTATASIAZONOSITO LIKE '%[^0-9]%' 
        or LEN(f.C_OKTATASIAZONOSITO) <> 11)
	 AND A.C_ALINTEZMENYID  = T_RENDSZERERTESITESEK.C_INTEZMENYID
	AND A.C_ALTANEVID = T_RENDSZERERTESITESEK.C_TANEVID
  )
	WHERE TOROLT = 'F'

	/*
    A tantárgyfelosztásban ... 
    tanár nem szerepel!
  */
	UPDATE T_RENDSZERERTESITESEK
	SET C_TANTARGYFELOSZTASTANARNINCSE = (
		SELECT COUNT(1) 
		FROM T_ALKALMAZOTT a
				LEFT JOIN T_FOGLALKOZAS F ON ( A.ID = F.C_TANARID AND F.TOROLT = 'F'
													AND F.C_INTEZMENYID  = A.C_ALINTEZMENYID
													AND F.C_TANEVID = A.C_ALTANEVID
												)
			WHERE a.TOROLT = 'F' AND f.ID IS NULL
			 AND A.C_ALINTEZMENYID  = T_RENDSZERERTESITESEK.C_INTEZMENYID
			 AND A.C_ALTANEVID = T_RENDSZERERTESITESEK.C_TANEVID
	  )
  WHERE TOROLT = 'F'
			

	/*
    A tantárgyak közül ... 
    tantárgy nem szerepel a tantárgyfelosztásban!
  */
	UPDATE T_RENDSZERERTESITESEK
	SET C_TANTARGYFELOSZTASTANTARGYNIN = (
		SELECT count(1) 
		FROM T_TANTARGY tt
			  LEFT JOIN T_FOGLALKOZAS f ON ( f.C_TANTARGYID = tt.ID AND f.TOROLT = 'F'
												AND F.C_INTEZMENYID  = T_RENDSZERERTESITESEK.C_INTEZMENYID
												AND F.C_TANEVID = T_RENDSZERERTESITESEK.C_TANEVID
											)
			WHERE f.ID IS NULL AND TT.TOROLT = 'F'
				AND TT.C_INTEZMENYID  = T_RENDSZERERTESITESEK.C_INTEZMENYID
				AND TT.C_TANEVID = T_RENDSZERERTESITESEK.C_TANEVID
	  )
  WHERE TOROLT = 'F'

			
  /*
    Az osztályok ill. tanórai célú csoportok közül ... 
    nem szerepel a tantárgyfelosztásban!
  */
	UPDATE T_RENDSZERERTESITESEK
	SET C_TANTARGYFELOSZTASOSZTALYOKNI = (
		SELECT count(1) 
		FROM T_OSZTALYCSOPORT ocs
			  LEFT JOIN T_FOGLALKOZAS f ON ( f.C_OSZTALYCSOPORTID = ocs.ID AND f.TOROLT = 'F'
												AND F.C_INTEZMENYID  = T_RENDSZERERTESITESEK.C_INTEZMENYID
												AND F.C_TANEVID = T_RENDSZERERTESITESEK.C_TANEVID
												)
			WHERE ocs.TOROLT = 'F' AND f.ID IS NULL
				AND ( EXISTS ( SELECT 1 FROM T_OSZTALY WHERE T_OSZTALY.ID = OCS.ID )	-- OSZTÁLY
						OR 
					 EXISTS ( SELECT 1 FROM T_CSOPORT WHERE T_CSOPORT.C_TIPUSA = 1034 AND T_CSOPORT.ID = OCS.ID)	 -- CSOPORT
					 )
				AND ocs.C_INTEZMENYID  = T_RENDSZERERTESITESEK.C_INTEZMENYID
				AND ocs.C_TANEVID = T_RENDSZERERTESITESEK.C_TANEVID
	  )
  WHERE TOROLT = 'F' 


	/*
    Az órarendben ... órában teremütközés van, 
    azonos teremben több óra IS szerepel!
  */
			
	UPDATE T_RENDSZERERTESITESEK
	SET C_ORARENDTEREMUTKOZES = ( SELECT COUNT(1) 
		  FROM (
			SELECT sub.C_HETIREND, sub.C_HETNAPJA, sub.C_TEREMID, sub.C_CSENGETESIRENDORAID, COUNT(1) cnt
			FROM (
			  SELECT DISTINCT o.C_HETIREND, o.C_HETNAPJA, o.C_TEREMID, o.C_CSENGETESIRENDORAID, o.C_FOGLALKOZASID 
			  FROM T_ORARENDIORA o
				INNER JOIN T_TEREM t ON t.ID = o.C_TEREMID AND t.TOROLT = 'F'
				INNER JOIN T_FOGLALKOZAS f ON f.ID = o.C_FOGLALKOZASID AND f.TOROLT = 'F'
			  WHERE o.C_ORAERVENYESSEGKEZDETE < GETDATE() AND (o.C_ORAERVENYESSEGVEGE > GETDATE() OR o.C_ORAERVENYESSEGVEGE IS NULL) 
				AND t.C_TOBBORATLEHETTARTANI = 'F'
				AND o.TOROLT = 'F'
				AND O.C_INTEZMENYID  = T_RENDSZERERTESITESEK.C_INTEZMENYID
				AND O.C_TANEVID = T_RENDSZERERTESITESEK.C_TANEVID
			  UNION  

			  SELECT DISTINCT n.C_HETIREND , n.C_HETNAPJA, o.C_TEREMID, o.C_CSENGETESIRENDORAID, o.C_FOGLALKOZASID 
			  FROM T_TANITASIORA o
				INNER JOIN T_NAPTARINAP n ON n.ID = o.C_NAPTARINAPID AND n.TOROLT = 'F'
				INNER JOIN T_FOGLALKOZAS f ON f.ID = o.C_FOGLALKOZASID AND f.TOROLT = 'F'
  				INNER JOIN T_TEREM t ON t.ID = o.C_TEREMID AND t.TOROLT = 'F'
			  WHERE o.C_ORARENDIORAGROUPID IS NULL
				AND n.C_NAPDATUMA > GETDATE() - 1
  					AND t.C_TOBBORATLEHETTARTANI = 'F'
				AND o.TOROLT = 'F'
				AND O.C_INTEZMENYID  = T_RENDSZERERTESITESEK.C_INTEZMENYID
				AND O.C_TANEVID = T_RENDSZERERTESITESEK.C_TANEVID
			) sub    
			GROUP BY sub.C_HETIREND, sub.C_HETNAPJA, sub.C_TEREMID, sub.C_CSENGETESIRENDORAID
			HAVING COUNT(1) > 1
		  ) tbl  )
  WHERE TOROLT = 'F'


	/*
    Az órarendben ... órában tanárütközés szerepel, 
    azonos órában a pedagógushoz több tanóra IS tartozik.
  */
  	UPDATE T_RENDSZERERTESITESEK
	SET C_ORARENDTANARUTKOZES = ( SELECT count(1) 
  FROM (
    SELECT sub.C_TANARID, sub.C_HETIREND, sub.C_HETNAPJA, sub.C_CSENGETESIRENDORAID, COUNT(1) cnt
    FROM (
      SELECT f.C_TANARID, o.C_HETIREND, o.C_HETNAPJA, o.C_CSENGETESIRENDORAID, o.C_TEREMID
      FROM T_ORARENDIORA o
        INNER JOIN T_FOGLALKOZAS f ON f.ID = o.C_FOGLALKOZASID AND f.TOROLT = 'F'
      WHERE o.TOROLT = 'F'
        AND o.C_ORAERVENYESSEGKEZDETE < GETDATE() 
        AND (o.C_ORAERVENYESSEGVEGE > GETDATE() OR o.C_ORAERVENYESSEGVEGE IS NULL) 
		AND O.C_INTEZMENYID  = T_RENDSZERERTESITESEK.C_INTEZMENYID
		AND O.C_TANEVID = T_RENDSZERERTESITESEK.C_TANEVID		
     
	  UNION
		
      SELECT ISNULL(o.C_HELYETTESITOTANARID, f.C_TANARID) AS C_TANAROKID, n.C_HETIREND, o.C_HETNAPJA, o.C_CSENGETESIRENDORAID, o.C_TEREMID
      FROM T_TANITASIORA o
        INNER JOIN T_FOGLALKOZAS f ON f.ID = o.C_FOGLALKOZASID AND f.TOROLT = 'F'
        INNER JOIN T_NAPTARINAP n ON n.ID = o.C_NAPTARINAPID AND n.TOROLT = 'F'
      WHERE o.TOROLT = 'F'
        AND o.C_ORARENDIORAGROUPID IS NULL
        AND o.C_DATUM > getdate() - 1
		AND O.C_INTEZMENYID  = T_RENDSZERERTESITESEK.C_INTEZMENYID
		AND O.C_TANEVID = T_RENDSZERERTESITESEK.C_TANEVID
    ) sub
    GROUP BY sub.C_TANARID, sub.C_HETIREND, sub.C_HETNAPJA, sub.C_CSENGETESIRENDORAID
    HAVING COUNT(1) > 1
  ) tbl )
  WHERE TOROLT = 'F'

   /*
  Azon tanulók száma, akik osztályba vannak sorolva, de nincs tantervük
  */
 UPDATE T_RENDSZERERTESITESEK
	SET C_TANTERVNELKULITANULOK = (
  SELECT count(1)
  FROM (
  select distinct T_TANULO.ID
	from T_TANULOCSOPORT
		inner join T_TANULO on (T_TANULO.ID = T_TANULOCSOPORT.C_TANULOID and T_TANULO.TOROLT = 'F')
	where T_TANULO.C_TANTERVID is null
	and T_TANULOCSOPORT.TOROLT = 'F'
	and T_TANULOCSOPORT.C_BELEPESDATUM < GETDATE()
	and (T_TANULOCSOPORT.C_KILEPESDATUM is null or T_TANULOCSOPORT.C_KILEPESDATUM > GETDATE())
	AND T_TANULOCSOPORT.C_INTEZMENYID  = T_RENDSZERERTESITESEK.C_INTEZMENYID
	AND T_TANULOCSOPORT.C_TANEVID = T_RENDSZERERTESITESEK.C_TANEVID
  ) tbl )
  WHERE TOROLT = 'F'


  			
	/*
   Nincs beállítva aktív csengetési rend
  */
 UPDATE T_RENDSZERERTESITESEK
	SET C_AKTIVCSENGETESIREND = ( SELECT IIF(EXISTS(SELECT 1 
															FROM T_CSENGETESIREND 
															WHERE C_AKTIV = 'T'
																AND T_CSENGETESIREND.C_INTEZMENYID  = T_RENDSZERERTESITESEK.C_INTEZMENYID
																AND T_CSENGETESIREND.C_TANEVID = T_RENDSZERERTESITESEK.C_TANEVID),
										 'F', 'T') )  
  WHERE TOROLT = 'F' 

END
