﻿DROP PROCEDURE IF EXISTS uspGetDokumentumTantargyakErtekeleshez
GO

CREATE PROCEDURE uspGetDokumentumTantargyakErtekeleshez
   @intezmenyId int
  ,@tanevId int
  ,@osztalyCsoportId int
  ,@csakKivalasztottOsztalyCsoport bit
  ,@osztalyzatTipusTypeID int = 44
  ,@magatartasErtekelesTipusTypeID int = 50
  ,@szorgalomErtekelesTipusTypeID int = 51
  ,@pIsKellKapcsolodoOsztalyCsoportok bit = 0
AS
BEGIN
  SET NOCOUNT ON;

  DECLARE 
     @evfolyamTipusId int = (SELECT C_EVFOLYAMTIPUSA FROM T_OSZTALYCSOPORT_OSSZES WHERE ID = @osztalyCsoportId AND TOROLT = 'F')
    ,@elsoNap datetime
    ,@utolsoNap datetime
  
  DECLARE @feladatKategoriaId int = (SELECT C_FELADATKATEGORIAID FROM T_OSZTALYCSOPORT_OSSZES WHERE ID = @osztalyCsoportId AND TOROLT = 'F')

  SELECT @elsoNap = C_KEZDONAP, @utolsoNap = C_UTOLSONAP FROM T_TANEV_OSSZES WHERE ID = @tanevId AND TOROLT = 'F'

  CREATE TABLE #kapcsolodoOsztalycsoportok (OsztalyCsoportId INT PRIMARY KEY)
  IF @pIsKellKapcsolodoOsztalyCsoportok = 1
    BEGIN
      INSERT INTO #kapcsolodoOsztalycsoportok (OsztalyCsoportId)
      SELECT
          OsztalyCsoportok.Id
      FROM fnGetDokumentumKapcsolodoOsztalyCsoportokByDateRange (@osztalyCsoportId, @ElsoNap, @utolsoNap, @intezmenyId, @tanevId) OsztalyCsoportok
        INNER JOIN fnGetDokumentumOsztalyVagyTanoraiCsoport(@tanevId) TanoraiCeluOsztalyCsoportok on TanoraiCeluOsztalyCsoportok.ID = OsztalyCsoportok.Id
    END
  ELSE
    BEGIN
      INSERT INTO #kapcsolodoOsztalycsoportok (OsztalyCsoportId)
      VALUES (@osztalyCsoportId)
    END

  CREATE TABLE #KapcsopodoTantargy(
     ID int
    ,C_FOTARGYID int
    ,C_NEV nvarchar(255)
    ,C_NEVNYOMTATVANYBAN nvarchar(255)
    ,C_TARGYKATEGORIA int
    ,C_INTEZMENYID int
    ,C_TANEVID int
    ,C_SORSZAM int
  )

  INSERT INTO #KapcsopodoTantargy
  SELECT
     kt.ID
    ,kt.C_FOTARGYID
    ,kt.C_NEV
    ,t.C_NEVNYOMTATVANYBAN
    ,kt.C_TARGYKATEGORIA
    ,kt.C_INTEZMENYID
    ,kt.C_TANEVID
    ,t.C_SORSZAM
  FROM dbo.fnGetKapcsolodoTantargyak(@intezmenyId, @tanevId, NULL) AS kt
    INNER JOIN T_TANTARGY_OSSZES AS t ON t.ID = kt.ID AND t.TOROLT = 'F';

  -- Összeszedjük minden tanuló-tanulócsoporthoz a tárgyakat
  WITH tantargy_CTE (C_TANTARGYID, C_FOTARGYID, C_TANULOID, C_TANULOCSOPORTID, C_INTEZMENYID, C_TANEVID)
  AS (
  -- TTF-es tárgyak
    SELECT 
       Foglalkozas.C_TANTARGYID
      ,Tantargy.C_FOTARGYID
      ,f.ID AS c_tanuloid
      ,tcsOsztaly.ID AS C_TANULOCSOPORTID
      ,Tantargy.C_INTEZMENYID
      ,Tantargy.C_TANEVID
    FROM T_FOGLALKOZAS_OSSZES Foglalkozas
      INNER JOIN T_TANTARGY_OSSZES Tantargy ON Tantargy.C_INTEZMENYID = Foglalkozas.C_INTEZMENYID
        AND Tantargy.C_TANEVID = Foglalkozas.C_TANEVID
        AND Tantargy.TOROLT = 'F'
        AND Tantargy.ID = Foglalkozas.C_TANTARGYID
      INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_OSZTALYCSOPORTID = Foglalkozas.C_OSZTALYCSOPORTID
        AND tcs.TOROLT = 'F'
      INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tcs.C_OSZTALYCSOPORTID AND ocs.TOROLT = 'F' AND ocs.C_FELADATKATEGORIAID = @feladatKategoriaId
      INNER JOIN T_FELHASZNALO_OSSZES f ON f.ID = tcs.C_TANULOID AND f.TOROLT = 'F'
      INNER JOIN T_TANULOCSOPORT_OSSZES tcsOsztaly ON tcsOsztaly.C_OSZTALYCSOPORTID = @osztalyCsoportId
        AND tcsOsztaly.C_TANULOID = f.ID
        AND tcsOsztaly.TOROLT = 'F'
      INNER JOIN #kapcsolodoOsztalycsoportok kapcsolodoOsztalycsoportok ON kapcsolodoOsztalycsoportok.OsztalyCsoportId = Foglalkozas.C_OSZTALYCSOPORTID
    WHERE 
      (tcsOsztaly.C_KILEPESDATUM IS NULL OR tcsOsztaly.C_KILEPESDATUM > tcs.C_BELEPESDATUM)
      AND Foglalkozas.C_INTEZMENYID = @intezmenyId
      AND Foglalkozas.C_TANEVID = @tanevId
      AND Foglalkozas.TOROLT = 'F'

    UNION
    -- ttf-ben nem szereplő tárgyak
    SELECT 
       OrarendiOra.C_TANTARGYID
      ,Tantargy.C_FOTARGYID
      ,f.ID AS C_TANULOID
      ,tcsOsztaly.ID AS C_TANULOCSOPORTID
      ,Tantargy.C_INTEZMENYID
      ,Tantargy.C_TANEVID
    FROM T_ORARENDIORA_OSSZES OrarendiOra
      INNER JOIN T_TANTARGY_OSSZES Tantargy ON Tantargy.C_INTEZMENYID = OrarendiOra.C_INTEZMENYID
        AND Tantargy.C_TANEVID = OrarendiOra.C_TANEVID
        AND Tantargy.TOROLT = 'F'
        AND Tantargy.ID = OrarendiOra.C_TANTARGYID
      INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_OSZTALYCSOPORTID = OrarendiOra.C_OSZTALYCSOPORTID
        AND (tcs.C_BELEPESDATUM < OrarendiOra.C_ORAERVENYESSEGVEGE AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= OrarendiOra.C_ORAERVENYESSEGKEZDETE))
        AND tcs.TOROLT = 'F'
      INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tcs.C_OSZTALYCSOPORTID AND ocs.TOROLT = 'F' AND ocs.C_FELADATKATEGORIAID = @feladatKategoriaId
      INNER JOIN T_FELHASZNALO_OSSZES f ON f.ID = tcs.C_TANULOID AND f.TOROLT = 'F'
      INNER JOIN T_TANULOCSOPORT_OSSZES tcsOsztaly ON tcsOsztaly.C_OSZTALYCSOPORTID = @osztalyCsoportId
        AND (tcsOsztaly.C_BELEPESDATUM < OrarendiOra.C_ORAERVENYESSEGVEGE AND (tcsOsztaly.C_KILEPESDATUM IS NULL OR tcsOsztaly.C_KILEPESDATUM >= OrarendiOra.C_ORAERVENYESSEGKEZDETE))
        AND tcsOsztaly.C_TANULOID = f.ID
        AND tcsOsztaly.TOROLT = 'F'
    WHERE 
          (tcsOsztaly.C_KILEPESDATUM IS NULL OR tcsOsztaly.C_KILEPESDATUM > tcs.C_BELEPESDATUM)
      AND OrarendiOra.C_INTEZMENYID = @intezmenyId
      AND OrarendiOra.C_TANEVID = @tanevId
      AND OrarendiOra.TOROLT = 'F'
      AND OrarendiOra.C_OSZTALYCSOPORTID = @osztalyCsoportId

    UNION
      -- Értékelést kapott tárgyak
    SELECT DISTINCT
       TanuloErtekeles.TantargyId
      ,TanuloErtekeles.FotargyId
      ,TanuloErtekeles.TanuloId
      ,TanuloErtekeles.TanuloCsoportId AS C_TANULOCSOPORTID
      ,@intezmenyId
      ,@tanevId
    FROM fnGetDokumentumErtekelesekOsztalyonkent(@tanevId, @osztalyCsoportId, DEFAULT, DEFAULT, @csakKivalasztottOsztalyCsoport, DEFAULT, DEFAULT, @osztalyzatTipusTypeID, @magatartasErtekelesTipusTypeID, @szorgalomErtekelesTipusTypeID) AS TanuloErtekeles
  )

  SELECT
     NULL
    ,NULL
    ,'Magatartás'
    ,''
    ,0
    ,f.ID
    ,tcs.ID
    ,0
    ,0
    ,''
    ,0
    ,0
    ,''
    ,@intezmenyId
    ,@tanevId
  FROM T_TANULOCSOPORT_OSSZES tcs
    LEFT JOIN T_FELHASZNALO_OSSZES f ON f.ID = tcs.C_TANULOID AND f.TOROLT = 'F'
  WHERE 
    tcs.C_OSZTALYCSOPORTID = @osztalyCsoportId 
    AND tcs.TOROLT = 'F'

  UNION ALL

  SELECT
     NULL
    ,NULL
    ,'Szorgalom'
    ,''
    ,0
    ,f.ID
    ,tcs.ID
    ,0
    ,1
    ,''
    ,0
    ,0
    ,''
    ,@intezmenyId
    ,@tanevId
  FROM T_TANULOCSOPORT_OSSZES tcs
    LEFT JOIN T_FELHASZNALO_OSSZES f ON f.ID = tcs.C_TANULOID AND f.TOROLT = 'F'
  WHERE 
    tcs.C_OSZTALYCSOPORTID = @osztalyCsoportId 
    AND tcs.TOROLT = 'F'

  UNION ALL

  SELECT DISTINCT
     KapcsopodoTantargy.ID
    ,KapcsopodoTantargy.C_FOTARGYID
    ,KapcsopodoTantargy.C_NEV
    ,KapcsopodoTantargy.C_NEVNYOMTATVANYBAN
    ,KapcsopodoTantargy.C_TARGYKATEGORIA
    ,tantargy_CTE.c_tanuloId
    ,tantargy_CTE.c_tanulocsoportid
    ,KapcsopodoTantargy.C_SORSZAM
    ,CASE WHEN KapcsopodoTantargy.C_FOTARGYID IS NULL THEN ISNULL(TargyKategoriaDictionary.C_ORDER, 10000) ELSE ISNULL(FotargyKategoriaDictionary.C_ORDER, 10000) END RENDEZ1
    ,ISNULL(ISNULL(Fotargy.C_NEVNYOMTATVANYBAN, Fotargy.C_NEV), ISNULL(KapcsopodoTantargy.C_NEVNYOMTATVANYBAN, KapcsopodoTantargy.C_NEV)) AS RENDEZ2
    ,ISNULL(KapcsopodoTantargy.C_FOTARGYID, KapcsopodoTantargy.ID) AS RENDEZ3
    ,KapcsopodoTantargy.C_FOTARGYID AS RENDEZ4
    ,ISNULL(KapcsopodoTantargy.C_NEVNYOMTATVANYBAN, KapcsopodoTantargy.C_NEV) AS RENDEZ5
    ,KapcsopodoTantargy.C_INTEZMENYID
    ,KapcsopodoTantargy.C_TANEVID
  FROM tantargy_CTE 
    INNER JOIN #KapcsopodoTantargy KapcsopodoTantargy ON tantargy_CTE.C_TANTARGYID = KapcsopodoTantargy.ID OR tantargy_CTE.C_FOTARGYID = KapcsopodoTantargy.ID
    LEFT JOIN T_TANTARGY_OSSZES Fotargy ON Fotargy.C_INTEZMENYID = tantargy_CTE.C_INTEZMENYID
      AND Fotargy.C_TANEVID = tantargy_CTE.C_TANEVID
      AND Fotargy.TOROLT = 'F'
      AND Fotargy.ID = tantargy_CTE.C_FOTARGYID
    LEFT JOIN T_DICTIONARYITEMBASE_OSSZES TargyKategoriaDictionary ON TargyKategoriaDictionary.Id = KapcsopodoTantargy.C_TARGYKATEGORIA
      AND TargyKategoriaDictionary.TOROLT = 'F'
      AND TargyKategoriaDictionary.C_TANEVID = @tanevId
    LEFT JOIN T_DICTIONARYITEMBASE_OSSZES FotargyKategoriaDictionary ON FotargyKategoriaDictionary.ID = Fotargy.C_TARGYKATEGORIA
      AND FotargyKategoriaDictionary.TOROLT = 'F'
      AND FotargyKategoriaDictionary.C_TANEVID = Fotargy.C_TANEVID
END
GO

