SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

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

-- =============================================
-- Author:		<Kelemen Attila>
-- Create date: <2016. 01. 06.>
-- Description:	<Tanulók jegyei havi bontásban>
-- =============================================
CREATE PROCEDURE [sp_GetUzenofuzetErtekelolap]
	@osztalyId int,
	@TanevId   int
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

	--Intézmény, tanév
	SELECT T_INTEZMENYADATOK_OSSZES.C_NEV IntezmenyNeve,
		   T_INTEZMENYADATOK_OSSZES.C_IRANYITOSZAM IntezmenyIranyitoszam,
		   T_INTEZMENYADATOK_OSSZES.C_VAROS IntezmenyVaros,
		   T_INTEZMENYADATOK_OSSZES.C_CIME IntezmenyCime,
		   T_INTEZMENYADATOK_OSSZES.C_TELEFONSZAM TELEFON,
		   T_INTEZMENYADATOK_OSSZES.C_EMAILCIM EMAILCIM,
		   T_INTEZMENYADATOK_OSSZES.C_OMKOD IntezmenyOMKod,
		   T_INTEZMENYADATOK_OSSZES.C_IGAZGATONEVE Intezmenyvezeto, 
		   (SELECT C_OSZTALYFONOKID FROM T_OSZTALY_OSSZES WHERE T_OSZTALY_OSSZES.ID = @osztalyId and T_OSZTALY_OSSZES.C_ALTANEVID = @TanevId and T_OSZTALY_OSSZES.TOROLT = 'F') PartnerID,
		   T_TANEV_OSSZES.C_NEV TANEV
	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

	--Osztály, évfolyam
	select T_OSZTALYCSOPORT_OSSZES.C_NEV,
		   T_OSZTALYCSOPORT_OSSZES.C_EVFOLYAMTIPUSA,
		   T_FELHASZNALO_OSSZES.C_NYOMTATASINEV Osztalyfonok
	from T_OSZTALYCSOPORT_OSSZES
	inner join T_OSZTALY_OSSZES on t_osztalycsoport_OSSZES.id = T_OSZTALY_OSSZES.ID
	inner join T_FELHASZNALO_OSSZES on t_felhasznalo_OSSZES.id = t_osztaly_OSSZES.c_osztalyfonokid
	where T_OSZTALYCSOPORT_OSSZES.TOROLT='F' 
	AND T_OSZTALYCSOPORT_OSSZES.ID=@osztalyId
	and T_OSZTALYCSOPORT_OSSZES.C_TANEVID = @TanevId

	
	--Tanuló adatai
	SELECT DISTINCT T_FELHASZNALO_OSSZES.ID TANULOID,
					T_FELHASZNALO_OSSZES.C_NYOMTATASINEV TANULONEV,
					T_FELHASZNALO_OSSZES.C_OKTATASIAZONOSITO OKTATASIAZONOSITO
	FROM T_FELHASZNALO_OSSZES
			JOIN (SELECT C_TANULOID, C_OSZTALYCSOPORTID FROM T_TANULOCSOPORT_OSSZES WHERE T_TANULOCSOPORT_OSSZES.TOROLT='F'
			AND T_TANULOCSOPORT_OSSZES.C_BELEPESDATUM < GETDATE()
			AND (T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM is null or T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM >= GETDATE())) TANCSOPORT ON TANCSOPORT.C_TANULOID = T_FELHASZNALO_OSSZES.ID 
	WHERE T_FELHASZNALO_OSSZES.TOROLT='F'
	AND TANCSOPORT.C_OSZTALYCSOPORTID = @osztalyId
	and T_FELHASZNALO_OSSZES.C_TANEVID = @TanevId
	ORDER BY T_FELHASZNALO_OSSZES.C_NYOMTATASINEV
	--Jegyek

	
	select * INTO #Jegyek from (

-------------------------
--ÉVKÖZI JEGYEK
-------------------------

select distinct

--T_TANULOERTEKELES_OSSZES.ID,
T_TANULOCSOPORT_OSSZES.C_TANULOID TanuloID,
T_TANTARGY_OSSZES.ID Tantargy,
T_DICTIONARYITEMBASE_OSSZES.C_VALUE Osztalyzat,
cast(MONTH(T_TANULOERTEKELES_OSSZES.C_ERTEKELESDATUM) as nvarchar) Honap
 from
 
  T_TANULOERTEKELES_OSSZES

		inner join T_TANULOCSOPORT_OSSZES on t_tanuloertekeles_OSSZES.c_tanuloid = t_tanulocsoport_OSSZES.c_tanuloid
--		inner join T_OSZTALYZATERTEKELES_OSSZES on T_TANULOERTEKELES_OSSZES.ID = T_OSZTALYZATERTEKELES_OSSZES.ID
		inner join T_TANTARGY_OSSZES on T_TANULOERTEKELES_OSSZES.C_TANTARGYID = T_TANTARGY_OSSZES.id
		inner join T_DICTIONARYITEMBASE_OSSZES on T_TANULOERTEKELES_OSSZES.c_osztalyzat = T_DICTIONARYITEMBASE_OSSZES.ID

	  WHERE --T_TANULOERTEKELES.C_ERTEKELESTIPUSA = 1518 AND
	  T_TANULOERTEKELES_OSSZES.TOROLT='F'
	  AND T_TANULOCSOPORT_OSSZES.TOROLT='F'
	  AND T_TANULOCSOPORT_OSSZES.C_BELEPESDATUM < GETDATE()
	  AND (T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM is null or T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM >= GETDATE())
--	  AND T_OSZTALYZATERTEKELES_OSSZES.TOROLT='F'
	  AND T_TANTARGY_OSSZES.TOROLT='F'
	  AND MONTH(T_TANULOERTEKELES_OSSZES.C_ERTEKELESDATUM) != 1
	  AND T_TANULOCSOPORT_OSSZES.C_OSZTALYCSOPORTID = @osztalyId
	  and T_TANULOERTEKELES_OSSZES.C_TANEVID = @TanevId

	  union all
-------------------------
--JANUÁRI JEGYEK
-------------------------
	  select distinct
--		T_TANULOERTEKELES_OSSZES.ID,
		T_TANULOCSOPORT_OSSZES.C_TANULOID TanuloID,
		T_TANTARGY_OSSZES.ID Tantargy,
		T_DICTIONARYITEMBASE_OSSZES.C_VALUE Osztalyzat,
		
		case when (day(t_tanuloertekeles_OSSZES.c_ertekelesdatum) < 15) then
			'1/I'
		else '1/II'
		end Honap
		 from
		  T_TANULOERTEKELES_OSSZES

			inner join T_TANULOCSOPORT_OSSZES on t_tanuloertekeles_OSSZES.c_tanuloid = t_tanulocsoport_OSSZES.c_tanuloid
--			inner join T_OSZTALYZATERTEKELES_OSSZES on T_TANULOERTEKELES_OSSZES.ID = T_OSZTALYZATERTEKELES_OSSZES.ID
			inner join T_TANTARGY_OSSZES on T_TANULOERTEKELES_OSSZES.C_TANTARGYID = T_TANTARGY_OSSZES.id
			inner join T_DICTIONARYITEMBASE_OSSZES on T_TANULOERTEKELES_OSSZES.c_osztalyzat = T_DICTIONARYITEMBASE_OSSZES.ID
		  WHERE 
		  --T_TANULOERTEKELES.C_ERTEKELESTIPUSA = 1518 AND
		  
	  T_TANULOCSOPORT_OSSZES.TOROLT='F'
	  AND T_TANULOCSOPORT_OSSZES.C_BELEPESDATUM < GETDATE()
	  AND (T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM is null or T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM >= GETDATE())
--	  AND T_OSZTALYZATERTEKELES_OSSZES.TOROLT='F'
	  AND T_TANTARGY_OSSZES.TOROLT='F'
	  AND MONTH(T_TANULOERTEKELES_OSSZES.C_ERTEKELESDATUM) = 1
	AND T_TANULOCSOPORT_OSSZES.C_OSZTALYCSOPORTID = @osztalyId
	and T_TANULOERTEKELES_OSSZES.C_TANEVID = @TanevId

	union all
-------------------------
--FÉLÉVI JEGYEK
-------------------------

select distinct

--T_TANULOERTEKELES_OSSZES.ID,
	T_TANULOCSOPORT_OSSZES.C_TANULOID TanuloID,
	T_TANTARGY_OSSZES.ID Tantargy,
	T_DICTIONARYITEMBASE_OSSZES.C_VALUE Osztalyzat,
	'I' Honap
 from
 
  T_TANULOERTEKELES_OSSZES

		inner join T_TANULOCSOPORT_OSSZES on t_tanuloertekeles_OSSZES.c_tanuloid = t_tanulocsoport_OSSZES.c_tanuloid
--		inner join T_OSZTALYZATERTEKELES_OSSZES on T_TANULOERTEKELES_OSSZES.ID = T_OSZTALYZATERTEKELES_OSSZES.ID
		inner join T_TANTARGY_OSSZES on T_TANULOERTEKELES_OSSZES.C_TANTARGYID = T_TANTARGY_OSSZES.id
		inner join T_DICTIONARYITEMBASE_OSSZES on T_TANULOERTEKELES_OSSZES.c_osztalyzat = T_DICTIONARYITEMBASE_OSSZES.ID

	  WHERE T_TANULOERTEKELES_OSSZES.C_ERTEKELESTIPUSA = 1519
	  AND T_TANULOCSOPORT_OSSZES.C_OSZTALYCSOPORTID = @osztalyId
	  AND T_TANULOCSOPORT_OSSZES.TOROLT='F'
	  AND T_TANULOCSOPORT_OSSZES.C_BELEPESDATUM < GETDATE()
	  AND (T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM is null or T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM >= GETDATE())
--	  AND T_OSZTALYZATERTEKELES_OSSZES.TOROLT='F'
	  AND T_TANTARGY_OSSZES.TOROLT='F'
	  and T_TANULOERTEKELES_OSSZES.C_TANEVID = @TanevId

	  union all
-------------------------
--ÉVVÉGI JEGYEK
-------------------------

select distinct

--T_TANULOERTEKELES_OSSZES.ID,
T_TANULOCSOPORT_OSSZES.C_TANULOID TanuloID,
T_TANTARGY_OSSZES.ID Tantargy,
T_TANULOERTEKELES_OSSZES.C_OSZTALYZAT,
'II' Honap
 from
 
  T_TANULOERTEKELES_OSSZES

		inner join T_TANULOCSOPORT_OSSZES on t_tanuloertekeles_OSSZES.c_tanuloid = t_tanulocsoport_OSSZES.c_tanuloid
--		inner join T_OSZTALYZATERTEKELES_OSSZES on T_TANULOERTEKELES_OSSZES.ID = T_OSZTALYZATERTEKELES_OSSZES.ID
		inner join T_TANTARGY_OSSZES on T_TANULOERTEKELES_OSSZES.C_TANTARGYID = T_TANTARGY_OSSZES.id
		inner join T_DICTIONARYITEMBASE_OSSZES on T_TANULOERTEKELES_OSSZES.c_osztalyzat = T_DICTIONARYITEMBASE_OSSZES.ID

	  WHERE T_TANULOERTEKELES_OSSZES.C_ERTEKELESTIPUSA = 1520
	  AND MONTH(T_TANULOERTEKELES_OSSZES.C_ERTEKELESDATUM) != 1
	  AND T_TANULOCSOPORT_OSSZES.C_OSZTALYCSOPORTID = @osztalyId
	  AND T_TANULOCSOPORT_OSSZES.TOROLT='F'
	  AND T_TANULOCSOPORT_OSSZES.C_BELEPESDATUM < GETDATE()
	  AND (T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM is null or T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM >= GETDATE())
--	  AND T_OSZTALYZATERTEKELES_OSSZES.TOROLT='F'
	  AND T_TANTARGY_OSSZES.TOROLT='F'
	  and T_TANULOERTEKELES_OSSZES.C_TANEVID = @TanevId
	  ) tabla

		ALTER TABLE #Jegyek
		ADD ID INT IDENTITY(1,1)

		DECLARE @ID INT = 0
		DECLARE @TanuloID INT
		DECLARE @Tantargy INT
		DECLARE @Osztalyzat INT
		DECLARE @Honap VARCHAR(5)
		CREATE TABLE #Temp (TanuloID int, Tantargy INT, Osztalyzat VARCHAR(30), Honap Varchar(5))

	WHILE (1 = 1) 
	BEGIN  
		SELECT TOP 1 @ID = Jegyek.ID, @TanuloID = Jegyek.TanuloID, @Tantargy = Jegyek.Tantargy, @Osztalyzat = Jegyek.Osztalyzat, @Honap=Jegyek.Honap FROM #Jegyek Jegyek WHERE ID > @ID ORDER BY ID
		
		IF @@ROWCOUNT = 0 
		BEGIN
			BREAK;
		END
		--PRINT @ID
		IF ((SELECT COUNT(*) FROM #Temp Temp WHERE Temp.TanuloID=@TanuloID AND Temp.Tantargy = @Tantargy AND Temp.Honap = @Honap)=0)
		BEGIN
		--PRINT 'INSERT'
			INSERT INTO #Temp (TanuloID, Tantargy, Osztalyzat, Honap) VALUES (@TanuloID, @Tantargy, CAST(@Osztalyzat as varchar), @Honap)
		END
		ELSE
		BEGIN
		--PRINT 'UPDATE'
			UPDATE #Temp SET #Temp.Osztalyzat = CAST(#Temp.Osztalyzat as varchar) + ', '+CAST(@Osztalyzat as varchar)
			WHERE #Temp.TanuloID=@TanuloID AND #Temp.Tantargy = @Tantargy AND #Temp.Honap = @Honap
			END
	END

	SELECT
	* FROM
	
	(
	select TanuloID, C_NEV, Honap,Osztalyzat from 
		#Temp Temp
	inner join T_TANTARGY_OSSZES ON Temp.Tantargy = T_TANTARGY_OSSZES.ID
	) TempWithNAMES

	pivot (MAX(Osztalyzat) FOR Honap IN ([1/I], [1/II],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12], [I], [II])) PivotTable
	DROP TABLE #Jegyek
	DROP TABLE #Temp
END

GO