-- =============================================
-- Author:    Zsiga Attila
-- Create date: 2016.04.22.
-- Description:  Tanévrendi események szerinti csengetési rendek
-- =============================================
DROP PROCEDURE IF EXISTS [dbo].[sp_GetTanevRendjeCsengetesiRend]
GO

CREATE PROCEDURE [dbo].[sp_GetTanevRendjeCsengetesiRend]
  @pKezdoDatum DATETIME,
  @pVegDatum DATETIME,
  @pOsztalyCsoportID INT
AS
BEGIN
  SET NOCOUNT ON;

SELECT
  Datum,
  CsengetesiRendID,
  LastChangedMax
INTO
  #tmpMindenOsztalyraVonatkozo
FROM
  (
    SELECT
      TANEVRENDJE.C_DATUM Datum,
      MAX(LASTCHANGED) LastChangedMax
    FROM
      (SELECT * FROM T_TANEVRENDJE WHERE T_TANEVRENDJE.TOROLT = 'F' AND T_TANEVRENDJE.C_DATUM BETWEEN @pKezdoDatum AND @pVegDatum AND T_TANEVRENDJE.C_OSSZESCSOPORTRAVONATKOZIK = 'T') TANEVRENDJE
    GROUP BY
      TANEVRENDJE.C_DATUM
  ) MindenOsztalyra
  LEFT JOIN (SELECT C_CSENGETESIRENDID CsengetesiRendID, C_DATUM, LASTCHANGED FROM T_TANEVRENDJE WHERE T_TANEVRENDJE.TOROLT = 'F' AND T_TANEVRENDJE.C_DATUM BETWEEN @pKezdoDatum AND @pVegDatum AND T_TANEVRENDJE.C_OSSZESCSOPORTRAVONATKOZIK = 'T') TANEVRENDJE ON TANEVRENDJE.C_DATUM = MindenOsztalyra.Datum AND TANEVRENDJE.LASTCHANGED = MindenOsztalyra.LastChangedMax

CREATE TABLE #tmpAdottOsztalyraVonatkozo
(
  Datum DATETIME,
  CsengetesiRendID INT,
  LastChangedMax DATETIME
)

IF @pOsztalyCsoportID IS NULL
  BEGIN
    INSERT INTO #tmpAdottOsztalyraVonatkozo
    SELECT
      NULL Datum,
      NULL CsengetesiRendID,
      NULL LastChangedMax
    FROM
      (SELECT NULL Datum, NULL CsengetesiRendID FROM T_TANEVRENDJE WHERE 1=2) AdottOsztalyra
  END
ELSE
  BEGIN
    INSERT INTO #tmpAdottOsztalyraVonatkozo
    SELECT
      Datum,
      CsengetesiRendID,
      LastChangedMax
    FROM
      (
        SELECT
          TANEVRENDJE.C_DATUM Datum,
          MAX(LASTCHANGED) LastChangedMax
        FROM
          (SELECT * FROM T_TANEVRENDJE WHERE T_TANEVRENDJE.TOROLT = 'F' AND T_TANEVRENDJE.C_DATUM BETWEEN @pKezdoDatum AND @pVegDatum AND T_TANEVRENDJE.C_OSSZESCSOPORTRAVONATKOZIK = 'F') TANEVRENDJE
          INNER JOIN 
          (SELECT * FROM T_OSZTALYCSOPORT_TANEVRENDJE WHERE C_OSZTALYCSOPORTID = @pOsztalyCsoportID) OSZTALYCSOPORT_TANEVRENDJE ON OSZTALYCSOPORT_TANEVRENDJE.C_TANEVRENDJEID = TANEVRENDJE.ID
        GROUP BY
          TANEVRENDJE.C_DATUM
      ) AdottOsztalyra
      LEFT JOIN (SELECT C_CSENGETESIRENDID CsengetesiRendID, C_DATUM, LASTCHANGED FROM T_TANEVRENDJE WHERE T_TANEVRENDJE.TOROLT = 'F' AND T_TANEVRENDJE.C_DATUM BETWEEN @pKezdoDatum AND @pVegDatum AND T_TANEVRENDJE.C_OSSZESCSOPORTRAVONATKOZIK = 'F') TANEVRENDJE ON TANEVRENDJE.C_DATUM = AdottOsztalyra.Datum AND TANEVRENDJE.LASTCHANGED = AdottOsztalyra.LastChangedMax
  END

SELECT
  CASE
    WHEN
      AdottOsztalyraVonatkozo.CsengetesiRendID IS NOT NULL
    THEN
      AdottOsztalyraVonatkozo.Datum
    ELSE
      MindenOsztalyraVonatkozo.Datum
  END Datum,
  CASE
    WHEN
      AdottOsztalyraVonatkozo.CsengetesiRendID IS NOT NULL
    THEN
      AdottOsztalyraVonatkozo.CsengetesiRendID
    ELSE
      MindenOsztalyraVonatkozo.CsengetesiRendID
  END CsengetesiRendID
FROM
  #tmpMindenOsztalyraVonatkozo AS MindenOsztalyraVonatkozo
  FULL OUTER JOIN  
  #tmpAdottOsztalyraVonatkozo 
  AS AdottOsztalyraVonatkozo ON 
  AdottOsztalyraVonatkozo.Datum = MindenOsztalyraVonatkozo.Datum

DROP TABLE #tmpMindenOsztalyraVonatkozo
DROP TABLE #tmpAdottOsztalyraVonatkozo

END
GO