IF OBJECT_ID('sp_GetBizonyitvany12161') IS NOT NULL
	DROP PROCEDURE sp_GetBizonyitvany12161
GO

CREATE PROCEDURE sp_GetBizonyitvany12161
  @osztalyCsoportId int,
  @felev int,
  @TanevId int
AS	
BEGIN

  IF OBJECT_ID('tempdb..#TANTARGY') IS NOT NULL BEGIN
    DROP TABLE #TANTARGY
  END

  CREATE TABLE #TANTARGY (
    ID int primary key,
    NEV nvarchar(255),
    ORAK int,
    OSZTALYFONOKI bit
  )

  INSERT INTO #TANTARGY (ID, NEV, ORAK, OSZTALYFONOKI)
  SELECT
  	T_TANTARGY_OSSZES.ID AS ID,
  	T_TANTARGY_OSSZES.C_NEV AS NEV,
  	COUNT(T_TANITASIORA_OSSZES.ID) AS ORAK,
    IIF(D.C_NAME = 'Osztályfőnöki,  élet- és pályatervezés', 1, 0) AS OSZTALYFONOKI
  FROM T_TANTARGY_OSSZES
  	INNER JOIN T_TANITASIORA_OSSZES on T_TANTARGY_OSSZES.ID = T_TANITASIORA_OSSZES.C_TANTARGYID AND T_TANITASIORA_OSSZES.TOROLT='F'
  	INNER JOIN T_FOGLALKOZAS_OSSZES ON T_TANTARGY_OSSZES.ID = T_FOGLALKOZAS_OSSZES.C_TANTARGYID AND T_FOGLALKOZAS_OSSZES.TOROLT='F'
  	INNER JOIN T_TANEV_OSSZES ON T_FOGLALKOZAS_OSSZES.C_TANEVID = T_TANEV_OSSZES.ID AND T_TANEV_OSSZES.TOROLT = 'F'
    INNER JOIN T_DICTIONARYITEMBASE_OSSZES D ON T_TANTARGY_OSSZES.C_TARGYKATEGORIA = D.ID
  WHERE T_TANTARGY_OSSZES.TOROLT = 'F'
    AND T_FOGLALKOZAS_OSSZES.C_OSZTALYCSOPORTID = @osztalyCsoportId
  	AND T_TANITASIORA_OSSZES.C_DATUM BETWEEN T_TANEV_OSSZES.C_ELSOTANITASINAP AND T_TANEV_OSSZES.C_UTOLSOTANITASINAP
  	AND T_TANITASIORA_OSSZES.C_MEGTARTOTT = 'T'
	AND T_TANEV_OSSZES.ID = @TanevId
  GROUP BY T_TANTARGY_OSSZES.ID,T_TANTARGY_OSSZES.C_NEV, IIF(D.C_NAME = 'Osztályfőnöki,  élet- és pályatervezés', 1, 0)

  DECLARE @jegySelect nvarchar(MAX) = N'',
    @jegyFrom nvarchar(MAX) = N'FROM T_TANULOCSOPORT_OSSZES TCS',
    @jegyWhere nvarchar(MAX),
    @sql nvarchar(MAX),
    @bizSelect nvarchar(MAX),
    @bizJoin nvarchar(MAX),
    @mulSql nvarchar(MAX),
    @felevJegy int
    
  SELECT @felevJegy = ID 
  FROM T_DICTIONARYITEMBASE_OSSZES 
  WHERE C_TYPE = 'ErtekelesTipus' 
	AND C_TANEVID = @TanevId
    AND C_NAME = IIF(@felev = 1, 'Félévi jegy/értékelés', 'Évvégi jegy/értékelés')

  SET @bizSelect =
  'SELECT * FROM (
    SELECT
      T_FELHASZNALO_OSSZES.ID AS [BIZTANULOID],
      T_FELHASZNALO_OSSZES.C_NYOMTATASINEV AS [név],
      T_FELHASZNALO_OSSZES.C_VEZETEKNEV + '' '' + T_FELHASZNALO_OSSZES.C_UTONEV AS [családi és utónév],
      T_FELHASZNALO_OSSZES.C_SZULETESIHELY AS [szül_hely_település],
      Orszag.C_NAME AS [szül_hely_ország],
      CONVERT(DATE,T_FELHASZNALO_OSSZES.C_SZULETESIDATUM) AS [szül_idő],
      Allampolg.C_NAME AS [állampolgárság],
      Anyanyelv.C_NAME AS [anyanyelv],
      T_FELHASZNALO_OSSZES.C_ANYJANEVE AS [anyja_neve],
      T_GONDVISELO_OSSZES.C_NEV AS [apa_neve],
      T_INTEZMENYADATOK_OSSZES.C_VAROS AS [kelt_település],
      YEAR(GETDATE()) AS [kelt_év],
      MONTH(GETDATE()) AS [kelt_hó],
      DAY(GETDATE()) AS [kelt_nap],
      T_FELHASZNALO_OSSZES.C_OKTATASIAZONOSITO AS [om_azonosító],
      '''' AS [törzslapszám_szám],
      ROW_NUMBER() OVER (ORDER BY T_FELHASZNALO_OSSZES.C_NYOMTATASINEV) AS [törzslapszám_év],
      T_FELHASZNALO_OSSZES.C_NYOMTATASINEV AS [név2],
      YEAR(T_TANEV_OSSZES.C_KEZDONAP) AS [tanév_tól],
      YEAR(T_TANEV_OSSZES.C_UTOLSONAP) AS [tanév_ig],
    	IIF(@felev = 1, ''Első'', ''Második'') AS [félév],
      T_INTEZMENYADATOK_OSSZES.C_NEV + '' '' + T_MUKODESIHELY_OSSZES.C_NEV + '', ''+ T_MUKODESIHELY_OSSZES.C_IRANYITOSZAM + '' '' + T_MUKODESIHELY_OSSZES.C_VAROS + T_MUKODESIHELY_OSSZES.C_CIME AS [iskola_neve_címe],
      IskolaTipus.C_NAME AS [iskola_tipus],
      Evfolyam.C_NAME AS [évfolyam_száma],
      T_OSZTALYCSOPORT_OSSZES.C_NEV AS [osztály],
      DM.C_NAME AS [magatartás], 
      DSZ.C_NAME AS [szorgalom]      
    FROM T_FELHASZNALO_OSSZES
      LEFT JOIN T_DICTIONARYITEMBASE_OSSZES Orszag ON T_FELHASZNALO_OSSZES.C_SZULETESIORSZAG = Orszag.ID
      LEFT JOIN T_DICTIONARYITEMBASE_OSSZES Allampolg ON T_FELHASZNALO_OSSZES.C_ALLAMPOLGARSAGA = Allampolg.ID
      LEFT JOIN T_DICTIONARYITEMBASE_OSSZES Anyanyelv ON T_FELHASZNALO_OSSZES.C_ANYANYELVE = Anyanyelv.ID
      LEFT JOIN T_FELHASZNALOBELEPES_OSSZES ON T_FELHASZNALO_OSSZES.ID = T_FELHASZNALOBELEPES_OSSZES.C_FELHASZNALOID AND T_FELHASZNALOBELEPES_OSSZES.C_GONDVISELOID IS NOT NULL AND T_FELHASZNALOBELEPES_OSSZES.TOROLT=''F''
      LEFT JOIN T_GONDVISELO_OSSZES ON T_FELHASZNALOBELEPES_OSSZES.C_GONDVISELOID = T_GONDVISELO_OSSZES.ID AND T_GONDVISELO_OSSZES.C_ROKONSAGFOKA = 2 --Apa
    	  AND T_GONDVISELO_OSSZES.TOROLT=''F''
      INNER JOIN T_TANEV_OSSZES ON T_TANEV_OSSZES.TOROLT = ''F''
	        INNER JOIN T_INTEZMENYADATOK_OSSZES ON T_INTEZMENYADATOK_OSSZES.C_TANEVID = T_TANEV_OSSZES.ID AND T_INTEZMENYADATOK_OSSZES.TOROLT = ''F''
      LEFT JOIN T_TANEVRENDJE_OSSZES ON T_TANEVRENDJE_OSSZES.C_NAPTIPUSA = 1400 AND T_TANEVRENDJE_OSSZES.C_TANEVID = T_TANEV_OSSZES.ID AND T_TANEVRENDJE_OSSZES.TOROLT = ''F''
      INNER JOIN T_TANULOCSOPORT_OSSZES ON T_FELHASZNALO_OSSZES.ID = T_TANULOCSOPORT_OSSZES.C_TANULOID AND T_TANULOCSOPORT_OSSZES.C_BELEPESDATUM < GETDATE() AND (T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM IS NULL OR T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM > GETDATE()) AND T_TANULOCSOPORT_OSSZES.TOROLT = ''F''
      INNER JOIN T_OSZTALYCSOPORT_OSSZES ON T_TANULOCSOPORT_OSSZES.C_OSZTALYCSOPORTID = T_OSZTALYCSOPORT_OSSZES.ID AND T_OSZTALYCSOPORT_OSSZES.TOROLT = ''F''
      INNER JOIN T_OSZTALY_OSSZES ON T_OSZTALYCSOPORT_OSSZES.ID = T_OSZTALY_OSSZES.ID AND T_OSZTALY_OSSZES.TOROLT = ''F''
      INNER JOIN T_FELADATELLATASIHELY_OSSZES ON T_OSZTALYCSOPORT_OSSZES.C_FELADATELLATASIHELYID = T_FELADATELLATASIHELY_OSSZES.ID AND T_FELADATELLATASIHELY_OSSZES.TOROLT = ''F''
      INNER JOIN T_MUKODESIHELY_OSSZES ON T_FELADATELLATASIHELY_OSSZES.C_MUKODESIHELYID = T_MUKODESIHELY_OSSZES.ID AND T_MUKODESIHELY_OSSZES.TOROLT = ''F''
      LEFT JOIN T_DICTIONARYITEMBASE_OSSZES IskolaTipus ON T_FELADATELLATASIHELY_OSSZES.C_OKTATASINEVELESIFELADATTIPUS = IskolaTipus.ID
      LEFT JOIN T_DICTIONARYITEMBASE_OSSZES Evfolyam ON T_OSZTALYCSOPORT_OSSZES.C_EVFOLYAMTIPUSA = Evfolyam.ID
      LEFT JOIN (
        SELECT te.C_TANULOID, ofe.C_MAGATARTAS, ofe.C_SZORGALOM FROM T_TANULOERTEKELES_OSSZES te 
        INNER JOIN T_OSZTALYFONOKIERTEKELES_OSSZES ofe ON ofe.ID = te.ID AND ofe.TOROLT = ''F''
        WHERE te.TOROLT = ''F'' AND te.C_ERTEKELESTIPUSA = @felevJegy
      ) MSZ ON MSZ.C_TANULOID = T_FELHASZNALO_OSSZES.ID 
      LEFT JOIN T_DICTIONARYITEMBASE_OSSZES DM ON DM.ID = MSZ.C_MAGATARTAS
      LEFT JOIN T_DICTIONARYITEMBASE_OSSZES DSZ ON DSZ.ID = MSZ.C_SZORGALOM
    WHERE T_OSZTALYCSOPORT_OSSZES.ID = @osztalyCsoportId
		AND T_TANEV_OSSZES.ID = @TanevId) BIZ 
  
  '
  
  SET @mulSql = '
  INNER JOIN (
    SELECT tms.C_TANULOID AS MULTANULOID,
      SUM(CASE 
        WHEN tms.C_STATISZTIKATIPUS <> 1655 THEN 0
        WHEN @felev = 1 THEN tms.C_OSSZESELSOFELEVMULASZTAS
        ELSE tms.C_OSSZESELSOFELEVMULASZTAS + tms.C_OSSZESMASODIKFELEVMULASZTAS END
      ) AS mulasztott_orak_szama,
      SUM(CASE 
        WHEN tms.C_STATISZTIKATIPUS <> 1655 THEN 0
        WHEN @felev = 1 THEN tms.C_OSSZESELSOFELEVMULASZTAS
        ELSE tms.C_OSSZESELSOFELEVMULASZTAS + tms.C_OSSZESMASODIKFELEVMULASZTAS END
      ) AS mulasztott_orak_osszesen,
      SUM(CASE
        WHEN tms.C_STATISZTIKATIPUS <> 1655 THEN 0
        WHEN @felev = 1 THEN tms.C_OSSZESELSOFELEVELMELETI
        ELSE tms.C_OSSZESELSOFELEVELMELETI + tms.C_OSSZESMASODIKFELEVELMELETI END
      ) AS mulasztott_elmelet_osszesen,
      SUM(CASE
        WHEN tms.C_STATISZTIKATIPUS <> 1662 THEN 0
        WHEN @felev = 1 THEN tms.C_OSSZESELSOFELEVELMELETI
        ELSE tms.C_OSSZESELSOFELEVELMELETI + tms.C_OSSZESMASODIKFELEVELMELETI END
      ) AS mulasztott_elmelet_igazolatlan,      
      SUM(CASE
        WHEN tms.C_STATISZTIKATIPUS <> 1655 THEN 0
        WHEN @felev = 1 THEN tms.C_OSSZESELSOFELEVGYAKORLATI
        ELSE tms.C_OSSZESELSOFELEVGYAKORLATI + tms.C_OSSZESMASODIKFELEVGYAKORLATI END
      ) AS mulasztott_gyakorlat_osszesen,
      SUM(CASE
        WHEN tms.C_STATISZTIKATIPUS <> 1662 THEN 0
        WHEN @felev = 1 THEN tms.C_OSSZESELSOFELEVGYAKORLATI
        ELSE tms.C_OSSZESELSOFELEVGYAKORLATI + tms.C_OSSZESMASODIKFELEVGYAKORLATI END
      ) AS mulasztott_gyakorlat_igazolatlan
    FROM T_TANULOMULASZTASSTATISZTIKA_OSSZES tms
    WHERE tms.C_STATISZTIKATIPUS IN (1655, 1662)
		and tms.C_TANEVID = @TanevId
    GROUP BY tms.C_TANULOID  
 ) mul ON mul.MULTANULOID = BIZ.BIZTANULOID
 '   
    
  SELECT @jegySelect += IIF(#TANTARGY.OSZTALYFONOKI = 1, '', ', D' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.C_NAME AS [' + CAST(#TANTARGY.NEV AS nvarchar(255)) + ' JEGY] ') + ', T' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.ORAK AS [' + CAST(#TANTARGY.NEV AS nvarchar(255)) + ' ORAK]',
    @jegyFrom += IIF(#TANTARGY.OSZTALYFONOKI = 1, '
    LEFT JOIN #TANTARGY T' + CAST(#TANTARGY.ID AS nvarchar(10)) + ' ON T' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.ID = ' + CAST(#TANTARGY.ID AS nvarchar(10)) /*Ha osztályfőnöki*/
    ,'
    LEFT JOIN T_TANULOERTEKELES_OSSZES E' + CAST(#TANTARGY.ID AS nvarchar(10)) + ' ON E' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.C_TANTARGYID = ' + CAST(#TANTARGY.ID AS nvarchar(10)) + ' AND TCS.C_TANULOID = E' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.C_TANULOID AND E' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.C_ERTEKELESTIPUSA = @felevJegy AND E' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.C_OSZTALYCSOPORTID = @osztalyCsoportId AND E' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.TOROLT = ''F''
    LEFT JOIN T_OSZTALYZATERTEKELES_OSSZES O' + CAST(#TANTARGY.ID AS nvarchar(10)) + ' ON O' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.ID = E' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.ID AND O' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.TOROLT = ''F''
    LEFT JOIN #TANTARGY T' + CAST(#TANTARGY.ID AS nvarchar(10)) + ' ON E' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.C_TANTARGYID = T' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.ID
    LEFT JOIN T_DICTIONARYITEMBASE_OSSZES D' + CAST(#TANTARGY.ID AS nvarchar(10)) + ' ON D' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.ID = O' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.C_OSZTALYZAT' /*Ha nem osztályfőnöki*/) --IIF záró zárójele
  FROM #TANTARGY 
  ORDER BY #TANTARGY.OSZTALYFONOKI DESC

  SET @jegyWhere = N'
    WHERE TCS.C_OSZTALYCSOPORTID = @osztalyCsoportId'

  SET @bizJoin = '
  ) JEGY ON JEGY.JEGYTANULOID = BIZ.BIZTANULOID'
  
  /* 
    Ha a @jegySelect üres string, akkor nem volt az osztálynak tantárgya
    Így majd kimarad a végső nagy selectből (@sql) is. 
  */
  IF @jegySelect <> '' BEGIN
    SET @jegySelect = 'INNER JOIN (
      SELECT TCS.C_TANULOID AS JEGYTANULOID' + @jegySelect
  END
  
  SET @sql = @bizSelect + CASE WHEN @jegySelect <> '' THEN @jegySelect + @jegyFrom + @jegyWhere + @bizJoin ELSE '' END + @mulSql
  
  EXEC sp_executesql @sql, 
    N'@osztalyCsoportId int, @felevJegy int, @felev int, @TanevId int', 
    @osztalyCsoportId, @felevJegy, @felev, @TanevId
  
  
  IF OBJECT_ID('tempdb..#TANTARGY') IS NOT NULL BEGIN
    DROP TABLE #TANTARGY
  END
END
GO

