﻿-- =============================================
-- Author:    Dőrr Tamás
-- Create date: 2017.02.24.
-- Description: Visszaadja, hogy megy diákok hiányoztak az aktuális tanítási óra előtti órájukról
-- =============================================
DROP PROCEDURE IF EXISTS sp_GetElozoOranHianyzottTanulok
GO
CREATE PROCEDURE [sp_GetElozoOranHianyzottTanulok]
   @OsztalyCsoportId int
  ,@Datum datetime
  ,@OraKezdete datetime
  ,@HianyzasTipus int
AS
BEGIN
  SET NOCOUNT ON;
  CREATE TABLE #OsztalyTanuloi (TanuloId int)

  INSERT INTO #OsztalyTanuloi (TanuloId)
  SELECT C_TANULOID
  FROM T_TANULOCSOPORT
  WHERE C_OSZTALYCSOPORTID = @OsztalyCsoportId
    AND C_BELEPESDATUM <= @Datum AND ISNULL(C_KILEPESDATUM, GETDATE()) > @Datum
    AND TOROLT = 'F'

  CREATE TABLE #Temp (
     TanuloId int
    ,Tipus int
    ,Orakezdete datetime
  )

  INSERT INTO #Temp (TanuloId, Tipus, Orakezdete)
  SELECT
     ot.TanuloId as TanuloId
    ,tm.C_TIPUS as Tipus
    ,tn.C_ORAKEZDETE AS Orakezdete
  FROM (
    SELECT
       tcs2.C_OSZTALYCSOPORTID AS ID
      ,tcs2.C_TANULOID
    FROM T_TANULOCSOPORT_OSSZES tcs
      INNER JOIN T_TANULOCSOPORT_OSSZES tcs2 ON tcs2.C_TANULOID = tcs.C_TANULOID
      INNER JOIN T_TANEV_OSSZES tanev ON tanev.ID = tcs.C_TANEVID AND tanev.TOROLT = 'F'
    WHERE tcs.C_OSZTALYCSOPORTID = @OsztalyCsoportId
      AND tcs.C_BELEPESDATUM <= GETDATE() AND (tcs.C_KILEPESDATUM > GETDATE() OR tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= tanev.C_UTOLSOTANITASINAP)
      AND tcs2.C_BELEPESDATUM <= GETDATE() AND (tcs2.C_KILEPESDATUM > GETDATE() OR tcs2.C_KILEPESDATUM IS NULL OR tcs2.C_KILEPESDATUM >= tanev.C_UTOLSOTANITASINAP)
      AND tcs.TOROLT = 'F'
      AND tcs2.TOROLT = 'F') ocs
    INNER JOIN T_TANITASIORA tn ON  tn.TOROLT = 'F' AND ocs.ID = tn.C_OSZTALYCSOPORTID AND tn.C_DATUM = @Datum AND tn.C_ORAKEZDETE < @OraKezdete
    LEFT JOIN T_TANULOMULASZTAS tm ON tm.TOROLT = 'F' AND tm.C_TANITASIORAKID = tn.ID AND tm.C_TIPUS = @HianyzasTipus AND ocs.C_TANULOID = tm.C_ORATANULOIID
    INNER JOIN #osztalytanuloi ot ON ot.TanuloId = ocs.C_TANULOID

  SELECT sub.TanuloId
  FROM #OsztalyTanuloi ot
    OUTER APPLY (SELECT TOP(1) * FROM #Temp t WHERE ot.TanuloId = t.TanuloId ORDER BY Orakezdete DESC) sub
  WHERE Tipus = @HianyzasTipus

END
GO