DROP PROCEDURE IF EXISTS dbo.uspGetEbedNormativaRiport
GO
CREATE PROCEDURE dbo.uspGetEbedNormativaRiport 
   @pTanevId int
  ,@pTanevElsoNapja date
  ,@pTanevUtolsoNapja date
  ,@pOraszam int
  ,@pIsAmiHianyzasIsMegjelenjen bit
AS
BEGIN
SET NOCOUNT ON;

  DROP TABLE IF EXISTS #TanuloCsoport;
  CREATE TABLE #TanuloCsoport(
    C_NAP DATETIME NOT NULL 
    ,C_TANULOID INT NOT NULL 
    ,C_OSZTALYCSOPORTID INT NOT NULL
    ,C_HIANYZOTT INT NOT NULL
    ,PRIMARY KEY CLUSTERED (C_NAP, C_TANULOID, C_OSZTALYCSOPORTID)
  );
  CREATE NONCLUSTERED INDEX [IX_Tanulocsoport_OCSID] ON #TanuloCsoport (C_OSZTALYCSOPORTID)
  INCLUDE (C_NAP, C_TANULOID, C_HIANYZOTT);

  WITH CTE AS
  (
    SELECT 
      nn.C_NAPDATUMA AS date
      ,tcs.C_TANULOID AS fid
      ,tcs.C_OSZTALYCSOPORTID AS ocsid
      ,ROW_NUMBER() OVER (
      PARTITION BY nn.ID, tcs.C_TANULOID, tcs.C_OSZTALYCSOPORTID
      ORDER BY tcs.C_TANULOID
      ) AS cnt
    FROM 
      T_NAPTARINAP_OSSZES nn 
      INNER JOIN T_TANULOCSOPORT_OSSZES AS tcs ON tcs.TOROLT = 'F' AND tcs.C_TANEVID = nn.C_TANEVID AND nn.C_NAPDATUMA BETWEEN C_BELEPESDATUM AND ISNULL(C_KILEPESDATUM, @pTanevUtolsoNapja)
      INNER JOIN T_OSZTALYCSOPORT_OSSZES AS ocs ON ocs.TOROLT = 'F' AND ocs.ID = tcs.C_OSZTALYCSOPORTID AND ocs.C_TANEVID = nn.C_TANEVID
      INNER JOIN T_OSZTALY_OSSZES AS o ON o.TOROLT = 'F' AND o.ID = ocs.ID AND o.C_ALTANEVID = ocs.C_TANEVID
    WHERE
      nn.TOROLT = 'F' 
      AND nn.C_TANEVID = @pTanevId 
      AND nn.C_HETNAPJA BETWEEN 1408 AND 1412
      AND C_NAPDATUMA BETWEEN @pTanevElsoNapja AND @pTanevUtolsoNapja
      AND ocs.C_FELADATKATEGORIAID != IIF(@pIsAmiHianyzasIsMegjelenjen = 0, 7555, -1)
  )
  INSERT INTO #TanuloCsoport(C_NAP, C_TANULOID, C_OSZTALYCSOPORTID, C_HIANYZOTT)
  SELECT 
    CTE.date
    ,CTE.fid
    ,CTE.ocsid
    ,0 AS C_HIANYZOTT
  FROM CTE
  WHERE CTE.cnt = 1;

  UPDATE tcs
  SET C_HIANYZOTT = 1
  FROM #TanuloCsoport AS tcs
  INNER JOIN T_TANITASIORA_OSSZES AS tao ON tao.TOROLT = 'F' AND tao.C_TANEVID = @pTanevId AND tao.C_DATUM = tcs.C_NAP AND tao.C_ORASZAM >= @pOraszam
  INNER JOIN T_OSZTALYCSOPORT_OSSZES AS ocs ON ocs.TOROLT = 'F' AND ocs.ID = tcs.C_OSZTALYCSOPORTID AND ocs.C_TANEVID = tao.C_TANEVID AND tao.C_OSZTALYCSOPORTID = tcs.C_OSZTALYCSOPORTID AND ocs.C_FELADATKATEGORIAID != IIF(@pIsAmiHianyzasIsMegjelenjen = 0, 7555, -1)
  WHERE EXISTS (
    SELECT TOP 1 1 
    FROM T_TANULOMULASZTAS_OSSZES AS tm
    WHERE 
      tm.TOROLT = 'F' 
      AND tm.C_TANITASIORAKID = tao.ID 
      AND tm.C_ORATANULOIID = tcs.C_TANULOID
      AND tm.C_INTEZMENYID = tao.C_INTEZMENYID
      AND tm.C_TANEVID = tao.C_TANEVID 
      AND tm.C_TIPUS != 1499
  );

  SELECT
      f.C_OKTATASIAZONOSITO AS OktatasiAzonosito
      ,f.C_NYOMTATASINEV AS TanuloNev
      ,FORMAT(tcs.C_NAP, 'yyyy.MM.dd.') AS NapDatuma
      ,ocs.C_NEV AS OsztalyNev
      ,tcs.C_HIANYZOTT AS Hianyzott
  FROM #TanuloCsoport tcs
  INNER JOIN T_FELHASZNALO_OSSZES AS f ON f.TOROLT = 'F' AND f.ID = tcs.C_TANULOID AND f.C_TANEVID = @pTanevId
  INNER JOIN T_OSZTALYCSOPORT_OSSZES AS ocs ON ocs.TOROLT = 'F' AND ocs.ID = tcs.C_OSZTALYCSOPORTID AND ocs.C_TANEVID = @pTanevId
  WHERE EXISTS (
    SELECT TOP 1 1 
    FROM T_TANITASIORA_OSSZES AS tao 
    WHERE 
      tao.TOROLT = 'F' 
      AND tao.C_TANEVID = @pTanevId 
      AND tao.C_DATUM = tcs.C_NAP 
      AND tao.C_ORASZAM >= @pOraszam
  )
  ORDER BY tcs.C_NAP, C_NYOMTATASINEV;
END
GO