SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

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

-- =====================================================================
-- Description: értesítõ nyomtatvány (félévi, év végi, I. negyedévi...)
-- =====================================================================
CREATE PROCEDURE [dbo].[sp_GetErtesitoNyomtatvany]
	@osztalyId				INT,
	@tanevId				INT,
	@ertekelesTipus			INT,
	@elmeletGyakorlat		BIT = 0,
	@kesesTipus				INT = 1499,
	@elmeletiOraPercben		INT = 45,
	@gyakorlatiOraPercben	INT = 60,
	@iskolaErdekuSzamit		BIT,
	@isKozossegiSzolgalat	BIT, 
	@pTanuloIdXML			XML = null

AS
BEGIN
	SET NOCOUNT ON;
	
    -- Fejléc
 	SELECT T_INTEZMENYADATOK_OSSZES.C_NEV					IntezmenyNeve,
		   T_INTEZMENYADATOK_OSSZES.C_VAROS					IntezmenyVaros,
		   dbo.fnGetDokumentumIntezmenyCime(@tanevId)		IntezmenyCime,
		   T_INTEZMENYADATOK_OSSZES.C_OMKOD					OMKod,
		   T_INTEZMENYADATOK_OSSZES.C_TELEFONSZAM			TELEFON,
		   T_INTEZMENYADATOK_OSSZES.C_EMAILCIM				EMAILCIM,
		   T_TANEV_OSSZES.C_NEV						        TANEV,
		   T_INTEZMENYADATOK_OSSZES.C_VAROS					VAROS,
		   (SELECT OFO.C_NYOMTATASINEV FROM T_OSZTALY_OSSZES 
					INNER JOIN T_FELHASZNALO_OSSZES OFO 
					ON OFO.ID = T_OSZTALY_OSSZES.C_OSZTALYFONOKID
		    WHERE T_OSZTALY_OSSZES.ID=@osztalyId 
				  AND T_OSZTALY_OSSZES.TOROLT = 'F')													OSZTALYFONOK,
		   (SELECT to2.C_NEV FROM T_OSZTALYCSOPORT_OSSZES to2 WHERE ID = @osztalyId AND TOROLT = 'F')	OSZTALYNEV,
		   GETDATE()																					Datum
	FROM T_INTEZMENYADATOK_OSSZES
			INNER JOIN T_TANEV_OSSZES 
			ON T_TANEV_OSSZES.ID = T_INTEZMENYADATOK_OSSZES.C_TANEVID AND T_TANEV_OSSZES.C_INTEZMENYID = T_INTEZMENYADATOK_OSSZES.C_INTEZMENYID AND T_TANEV_OSSZES.TOROLT = 'F'
	WHERE T_INTEZMENYADATOK_OSSZES.TOROLT = 'F'
		  AND T_TANEV_OSSZES.ID = @TanevId
	
	-- TANULÓK
  DECLARE @Tanulok TABLE (TANULOID INT, TANULONEV NVARCHAR(MAX), OKTATASIAZONOSITO NVARCHAR(MAX), TORZSLAPSZAM NVARCHAR(MAX), SZULHELY NVARCHAR(MAX), SZULIDO NVARCHAR(MAX), ANYJANEVE NVARCHAR(MAX))

  
  DECLARE @ValasztottTanulok TABLE(Id int PRIMARY KEY)
	IF @pTanuloIdXML IS NOT NULL BEGIN 
    INSERT INTO @ValasztottTanulok(Id)
    SELECT Data FROM fnConvertXmlIntListToTable(@pTanuloIdXML, 'a', 'b')
 
    INSERT INTO @Tanulok
  	SELECT 
  		tanulok.TanuloId 
  		,felhasznalo.C_NYOMTATASINEV
  		,felhasznalo.C_OKTATASIAZONOSITO
  		,felhasznalo.C_NYILVANTARTASISZAM
		,felhasznalo.C_SZULETESIHELY          
		,dbo.fnGetDokumentumDatumFormatum(felhasznalo.C_SZULETESIDATUM)         
		,felhasznalo.C_ANYJANEVE             
  	FROM fnGetDokumentumOsztalyokCsoportokTanuloi(@tanevId, @osztalyId, 'T') tanulok
  		INNER JOIN T_FELHASZNALO_OSSZES	felhasznalo on felhasznalo.Id=tanulok.TanuloId
		INNER JOIN @ValasztottTanulok vt ON vt.Id = tanulok.TanuloId

  	SELECT * FROM @Tanulok ORDER BY TANULONEV
  
  END
  ELSE BEGIN 
  
    INSERT INTO @Tanulok
  	SELECT 
  		tanulok.TanuloId 
  		,felhasznalo.C_NYOMTATASINEV
  		,felhasznalo.C_OKTATASIAZONOSITO
  		,felhasznalo.C_NYILVANTARTASISZAM
		,felhasznalo.C_SZULETESIHELY          
		,dbo.fnGetDokumentumDatumFormatum(felhasznalo.C_SZULETESIDATUM)         
		,felhasznalo.C_ANYJANEVE             
  	FROM fnGetDokumentumOsztalyokCsoportokTanuloi(@tanevId, @osztalyId, 'T') tanulok
  		INNER JOIN T_FELHASZNALO_OSSZES	felhasznalo on felhasznalo.Id=tanulok.TanuloId

  	SELECT * FROM @Tanulok ORDER BY TANULONEV
  
  END
	
	-- ÉRTÉKELÉSEK
	DECLARE @Ertekelesek TABLE (
		TanuloId			INT
		,Targy				NVARCHAR(MAX)
		,Jegyzet			 NVARCHAR(MAX)
		,Ertekeles			 NVARCHAR(MAX)	
		,ErtekelesJegyzettel NVARCHAR(MAX)	
		,Oraszam			INT
		,RENDEZ				INT
	)
	
	INSERT INTO @Ertekelesek
	EXEC sp_GetDokumentumErtekelesek
		@osztalyId = @osztalyId,
		@tanevId = @tanevId,
		@ertekelesTipus = @ertekelesTipus

	SELECT 
		 TanuloTable.TanuloId			
		,Targy			
		,Jegyzet
		,Ertekeles	
		,ErtekelesJegyzettel				
		,Oraszam		
		,RENDEZ
		,'' TanarNev
	FROM 
	@Ertekelesek ertekeles
		INNER JOIN @Tanulok TanuloTable ON TanuloTable.TanuloId = ertekeles.TanuloId

	-- MULASZTÁSOK
	DECLARE @Mulasztasok TABLE (
		TanuloId INT
		,Igazolt INT
		,Igazolatlan INT
		,ElmeletIgazolt INT
		,ElmeletIgazolatlan INT
		,GyakorlatIgazolt INT
		,GyakorlatIgazolatlan INT
		,Osszes INT		
		)

	INSERT INTO @Mulasztasok
	EXEC sp_GetDokumentumMulasztasok
		@osztalyId = @osztalyId,
		@tanevId = @tanevId,
		@elmeletGyakorlat = @elmeletGyakorlat,
		@kesesTipus = @kesesTipus,
		@elmeletiOraPercben = @elmeletiOraPercben,
		@gyakorlatiOraPercben = @gyakorlatiOraPercben,
		@ertekelesTipus = @ertekelesTipus,
		@iskolaErdekuSzamit = @iskolaErdekuSzamit
	
	SELECT 
		 TanuloTable.TanuloId 
		,Igazolt 
		,Igazolatlan 
		,ElmeletIgazolt 
		,ElmeletIgazolatlan 
		,GyakorlatIgazolt 
		,GyakorlatIgazolatlan 
		,Osszes	
	FROM @Mulasztasok mulasztasok
		INNER JOIN @Tanulok TanuloTable ON mulasztasok.TanuloId = TanuloTable.TanuloId
	
	-- TANTÁRGYI MENTESSÉGEK
	SELECT 
			TanuloTable.TanuloId		TANULOID
			,mentesseg.tantargyNev		TARGYNEV
			,'(' + ISNULL(IIF(mentesseg = '', '', LEFT(mentesseg, LEN(mentesseg)- 1)),' ') + ') ' + mentesseg.mentessegOka	MENTESSEGOKA
	FROM @Tanulok TanuloTable
	INNER JOIN  (SELECT DISTINCT 
								mentesseg.C_TANULOID tanuloId
								, IIF(t.C_NEV <> C_NEVNYOMTATVANYBAN AND C_NEVNYOMTATVANYBAN IS NOT NULL, C_NEVNYOMTATVANYBAN + ' (' + t.C_NEV + ')', t.C_NEV) tantargyNev
								, mentesseg.C_MENTESSEGOKA  + ' ' + ISNULL('(' + FORMAT(C_KEZDETE, 'yyyy.MM.dd.') + ' - ', '') + ISNULL(FORMAT(C_VEGE, 'yyyy.MM.dd.') + ')', IIF(C_KEZDETE IS NULL, '', ')' )) mentessegOka
								, IIF(mentesseg.C_ERTEKELESMENTESITES = 'T', 'Értékelésmentesség, ', '') + IIF(mentesseg.C_ORAMENTESITES = 'T', 'Óramentesség, ', '') as mentesseg 
				FROM T_TANULOMENTESSEG_OSSZES mentesseg
					INNER JOIN T_TANTARGY_OSSZES t on t.ID=mentesseg.C_TANTARGYID
					INNER JOIN @Tanulok Tanulok ON Tanulok.TanuloId = mentesseg.C_TANULOID
					INNER JOIN @Tanulok vt ON Tanulok.TanuloId = vt.TanuloId
				WHERE 
					mentesseg.TOROLT='F' 
					AND mentesseg.C_TANEVID=@tanevId
				) mentesseg ON TanuloTable.TanuloId	= mentesseg.TANULOID

	DECLARE @EsemenyTipus INT
	SET @EsemenyTipus = (SELECT 
						CASE 
							WHEN @ertekelesTipus = 1519 THEN 1547 --félévi
							WHEN @ertekelesTipus = 1520 THEN 1548 --év végi
							WHEN @ertekelesTipus = 1522 THEN 1549 --I. negyedévi
							WHEN @ertekelesTipus = 1523 then 1551 --III. negyedévi
						END
						) 

	--Bejegyzések
	DECLARE @FelevVege DATE = (SELECT TOP 1 ISNULL(C_DATUM, GETDATE()) FROM T_TANEVRENDJE_OSSZES tr WHERE C_NAPTIPUSA = 1400 AND C_TANEVID=@tanevId AND TOROLT = 'F')

	SELECT 
		TanuloTable.TanuloId
		,'A félév során ' + CAST(SUM(Oraszam) AS NVARCHAR(MAX)) + ' óra közösségi szolgálatot teljesített.'	Bejegyzes
	FROM fnGetDokumentumKozossegiSzolgalatOsztalyonkent (@tanevId, @osztalyId) bejegyzes
		INNER JOIN @Tanulok TanuloTable ON bejegyzes.TanuloId = TanuloTable.TanuloId
	WHERE
		@isKozossegiSzolgalat = 1
		AND Datum <= @FelevVege
	GROUP BY TanuloTable.TanuloId

	UNION

	SELECT 
		bejegyzes.TanuloId		TanuloId
		,Tartalom				Bejegyzes 
	FROM fnGetDokumentumTanulokFeljegyzesei(@tanevId, @osztalyId) bejegyzes
		INNER JOIN @Tanulok TanuloTable ON bejegyzes.TanuloId = TanuloTable.TanuloId
	WHERE
		Tipusa IN (1546, @EsemenyTipus)

	UNION

	-- Határozatok
	SELECT DISTINCT
		C_TANULOID			TanuloId
		,tcs.C_ZARADEK		Bejegyzes
	FROM T_TANULOCSOPORT_OSSZES tcs
	WHERE 
		tcs.C_TANULOID IN (SELECT TanuloId from @Tanulok)
		AND TOROLT = 'F'
		AND C_ZARADEK IS NOT NULL 
		AND LEN(C_ZARADEK) > 0
		AND C_TANEVID = @tanevId
		AND C_OSZTALYCSOPORTID IN (SELECT ID FROM T_OSZTALY_OSSZES WHERE TOROLT = 'F')
		AND @ertekelesTipus = 1520

	UNION

	SELECT DISTINCT
		C_TANULOID				TanuloId
		,tcs.C_VEGZARADEK		Bejegyzes
	FROM T_TANULOCSOPORT_OSSZES tcs
	WHERE 
		tcs.C_TANULOID IN (SELECT TanuloId from @Tanulok)
		AND TOROLT = 'F'
		AND C_VEGZARADEK IS NOT NULL 
		AND LEN(C_VEGZARADEK) > 0
		AND C_TANEVID = @tanevId
		AND C_OSZTALYCSOPORTID IN (SELECT ID FROM T_OSZTALY_OSSZES WHERE TOROLT = 'F')
		AND @ertekelesTipus = 1520


  --TANULÓ elérhetőségei 
	SELECT DISTINCT
      tanulo.TanuloId																					tanuloID
      ,Gondviselo.C_NEV	+ IIF(Gondviselo.C_ISTORVENYESKEPVISELO = 'T', ' (törvényes)', '')				GondviseloNeve
     ,C_IRANYITOSZAM + ' ' + C_VAROS + ', ' + C_KOZTERULET + ' ' + kozterulet.C_NAME + ' ' + C_HAZSZAM   CimText
	FROM T_GONDVISELO_OSSZES Gondviselo
		INNER JOIN @Tanulok TanuloTable ON Gondviselo.C_TANULOID = TanuloTable.TanuloId
		INNER JOIN fnGetDokumentumOsztalyokCsoportokTanuloi(@tanevId, @osztalyId, 'F') tanulo ON tanulo.TanuloId = Gondviselo.C_TANULOID
		INNER JOIN T_CIM_OSSZES cim ON cim.C_FELHASZNALOID = TanuloTable.TanuloId
		INNER JOIN T_DICTIONARYITEMBASE_OSSZES kozterulet ON kozterulet.Id = C_KOZTERULETJELLEGE AND kozterulet.C_TANEVID = @tanevId
	WHERE
		cim.TOROLT = 'F'
		AND cim.C_TANEVID = @tanevId
		AND Gondviselo.TOROLT = 'F'
    --AND Gondviselo.C_ISTORVENYESKEPVISELO = 'T' 

END

GO