DROP PROCEDURE IF EXISTS [uspGetDolgozatErtekelesAtlag]
GO

CREATE PROCEDURE [uspGetDolgozatErtekelesAtlag]
   @pIntezmenyId int
  ,@pTanevId int
  ,@pOsztalyCsoportId int
  ,@pTantargyId int
  ,@pTanarId int
  ,@pErtekelesTema nvarchar(255)
  ,@pAtlagTol float
  ,@pAtlagIg float
  ,@pErdemjegy5Tol int
  ,@pErdemjegy5Ig int
  ,@pErdemjegy4Tol int
  ,@pErdemjegy4Ig int
  ,@pErdemjegy3Tol int
  ,@pErdemjegy3Ig int
  ,@pErdemjegy2Tol int
  ,@pErdemjegy2Ig int
  ,@pErdemjegy1Tol int
  ,@pErdemjegy1Ig int
  ,@pNemIrtDolgozatotTol int
  ,@pNemIrtDolgozatotIg int
  ,@pSzuperOsztalyfonok int
  ,@pDatum	datetime

AS BEGIN
  SET NOCOUNT ON;
  DECLARE @preSql NVARCHAR(MAX), @mainSql NVARCHAR(MAX), @sql NVARCHAR(MAX)
  SET @pErtekelesTema = REPLACE(@pErtekelesTema, ' ', '')

  SET @preSql = IIF(@pSzuperOsztalyfonok = 1, N'', N'
  CREATE TABLE #OsztalyCsoportokTantargyak (
      OsztalyCsoportId INT
     ,OsztalyCsoportNev nvarchar(255)
     ,TantargyId INT
     ,PRIMARY KEY(OsztalyCsoportId,TantargyId)
  )

  INSERT INTO #OsztalyCsoportokTantargyak (
     OsztalyCsoportId
    ,OsztalyCsoportNev
    ,TantargyId
  )
  EXEC uspGetTanarAltalErtekelhetoCsoportokTantargyak 
     @pTanarId
    ,@pTanevId
    ,@pDatum
  ')

  SET @mainSql = N'
  SELECT
     sub.Datum
    ,sub.OsztalyCsoport
    ,sub.OsztalyCsoportId
    ,sub.ErtekelesTema
    ,tgy.C_NEV AS TantargyNev
    ,sub.TantargyId
    ,sub.ErtekelesModId
    ,sub.Erdemjegy1
    ,sub.Erdemjegy2
    ,sub.Erdemjegy3
    ,sub.Erdemjegy4
    ,sub.Erdemjegy5
    ,sub.Cnt IrtakDolgozatot
    ,(letszam.Letszam - sub.Cnt) NemIrtakDolgozatot
    ,CONVERT(nvarchar(255), sub.Cnt) + ''/'' + CONVERT(nvarchar(255), letszam.Letszam) AS IrtakDolgozatotArany
    ,ROUND(Total / CAST(Cnt AS Float), 2) AS Atlag
    ,letszam.Letszam
  FROM (
    SELECT 
       s.C_DATUM AS Datum
      ,s.OsztalyCsoportNev AS OsztalyCsoport
	    ,s.C_OSZTALYCSOPORTID AS OsztalyCsoportId
	    ,s.C_ERTEKELESTEMA AS ErtekelesTema
	    ,s.C_TANTARGYID AS TantargyId
      ,s.C_ERTEKELESMODID AS ErtekelesModId
      ,s.[1501] AS Erdemjegy1
      ,s.[1502] AS Erdemjegy2
      ,s.[1503] AS Erdemjegy3
      ,s.[1504] AS Erdemjegy4
      ,s.[1505] AS Erdemjegy5
      ,s.[1501] + s.[1502] + s.[1503] + s.[1504] + s.[1505] AS Cnt
      ,s.[1501] + s.[1502] * 2 + s.[1503] * 3 + s.[1504] * 4 + s.[1505] * 5 AS Total
    FROM (
      SELECT
         er.C_DATUM
		    ,er.C_OSZTALYCSOPORTID
		    ,er.C_ERTEKELESTEMA
		    ,er.C_TANTARGYID
		    ,er.C_ERTEKELESOSZTALYZATID 
        ,er.C_ERTEKELESMODID
        ,ocs.C_NEV AS OsztalyCsoportNev
      FROM T_TANULOERTEKELES_OSSZES er
        INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = er.C_OSZTALYCSOPORTID AND ocs.TOROLT=''F''
      WHERE er.C_ERTEKELESMODID IN (1507, 1508)
        AND er.C_TANEVID = @pTanevId 
		    AND er.C_ISMAGATARTASSZORGALOM = ''F''
		    AND er.TOROLT = ''F''
		    AND er.C_ERTEKELESTEMA IS NOT NULL
		    AND er.C_ERTEKELESOSZTALYZATID IS NOT NULL
		    ' + IIF(@pSzuperOsztalyfonok = 1, N'', N'AND (EXISTS(SELECT 1 FROM #OsztalyCsoportokTantargyak ocst WHERE ocst.OsztalyCsoportId = er.C_OSZTALYCSOPORTID AND ocst.TantargyId = er.C_TANTARGYID))')  + N'
		    ' + IIF(@pTantargyId IS NULL, N'', N'AND er.C_TANTARGYID = @pTantargyId')  + N'
		    ' + IIF(@pErtekelesTema IS NULL, N'', N'AND REPLACE(er.C_ERTEKELESTEMA,'' '','''') LIKE ''%' + @pErtekelesTema + '%''') + N'
        ' + IIF(@pOsztalyCsoportId IS NULL, N'', N'AND er.C_OSZTALYCSOPORTID = @pOsztalyCsoportId') + N'
      ) x
      PIVOT (COUNT(C_ERTEKELESOSZTALYZATID) FOR C_ERTEKELESOSZTALYZATID IN ([1501], [1502], [1503], [1504], [1505])
      ) s
      WHERE 1 = 1' + '
      ' + IIF(@pErdemjegy5Tol IS NULL, N'', 'AND s.[1505] >= @pErdemjegy5Tol') + '
      ' + IIF(@pErdemjegy5Ig IS NULL, N'', 'AND s.[1505] <= @pErdemjegy5Ig') + '
      ' + IIF(@pErdemjegy4Tol IS NULL, N'', 'AND s.[1504] >= @pErdemjegy4Tol') + '
      ' + IIF(@pErdemjegy4Ig IS NULL, N'', 'AND s.[1504] <= @pErdemjegy4Ig') + '
      ' + IIF(@pErdemjegy3Tol IS NULL, N'', 'AND s.[1503] >= @pErdemjegy3Tol') + '
      ' + IIF(@pErdemjegy3Ig IS NULL, N'', 'AND s.[1503] <= @pErdemjegy3Ig') + '
      ' + IIF(@pErdemjegy2Tol IS NULL, N'', 'AND s.[1502] >= @pErdemjegy2Tol') + '
      ' + IIF(@pErdemjegy2Ig IS NULL, N'', 'AND s.[1502] <= @pErdemjegy2Ig') + '
      ' + IIF(@pErdemjegy1Tol IS NULL, N'', 'AND s.[1501] >= @pErdemjegy1Tol') + '
      ' + IIF(@pErdemjegy1Ig IS NULL, N'', 'AND s.[1501] <= @pErdemjegy1Ig') + '
    ) sub
    INNER JOIN T_TANTARGY_OSSZES tgy ON sub.TantargyId = tgy.ID AND tgy.TOROLT=''F''
    INNER JOIN T_DICTIONARYITEMBASE_OSSZES dTantargy ON tgy.C_TARGYKATEGORIA = dTantargy.ID AND dTantargy.C_TANEVID = @pTanevId AND dTantargy.TOROLT=''F''
    INNER JOIN (
      SELECT nn.C_NAPDATUMA, tcs.C_OSZTALYCSOPORTID, COUNT(1) AS Letszam
      FROM T_TANULOCSOPORT_OSSZES tcs
        INNER JOIN T_NAPTARINAP_OSSZES nn ON nn.C_NAPDATUMA >= tcs.C_BELEPESDATUM 
          AND (nn.C_NAPDATUMA <= tcs.C_KILEPESDATUM OR tcs.C_KILEPESDATUM IS NULL)
          AND nn.TOROLT=''F''
      WHERE nn.C_TANEVID = @pTanevId 
        ' + IIF(@pOsztalyCsoportId IS NULL, N'', N'AND tcs.C_OSZTALYCSOPORTID = @pOsztalyCsoportId') + N'
        AND tcs.C_TANEVID = @pTanevId
        AND tcs.TOROLT=''F''
      GROUP BY nn.C_NAPDATUMA, tcs.C_OSZTALYCSOPORTID
    ) letszam ON letszam.C_NAPDATUMA = sub.Datum 
        AND letszam.C_OSZTALYCSOPORTID = OsztalyCsoportId' + '
    ' + IIF(@pNemIrtDolgozatotTol IS NULL, N'', N'AND (letszam.Letszam - sub.Cnt) >= @pNemIrtDolgozatotTol') + '
    ' + IIF(@pNemIrtDolgozatotIg IS NULL, N'', N'AND (letszam.Letszam - sub.Cnt) <= @pNemIrtDolgozatotIg') + '
    ' + IIF(@pAtlagTol IS NULL, N'', N'AND ROUND(Total / CAST(Cnt AS Float), 2) >= @pAtlagTol') + '
    ' + IIF(@pAtlagIg IS NULL, N'', N'AND ROUND(Total / CAST(Cnt AS Float), 2) <= @pAtlagIg') + '
    '

  SET @sql = CONCAT(@preSql, @mainSql)

  EXEC sp_executesql @sql, N'
     @pIntezmenyId int
    ,@pTanevId int
    ,@pOsztalyCsoportId int
    ,@pTantargyId int
    ,@pTanarId int
    ,@pErtekelesTema nvarchar(255)
    ,@pAtlagTol float
    ,@pAtlagIg float
    ,@pErdemjegy5Tol int
    ,@pErdemjegy5Ig int
    ,@pErdemjegy4Tol int
    ,@pErdemjegy4Ig int
    ,@pErdemjegy3Tol int
    ,@pErdemjegy3Ig int
    ,@pErdemjegy2Tol int
    ,@pErdemjegy2Ig int
    ,@pErdemjegy1Tol int
    ,@pErdemjegy1Ig int
    ,@pNemIrtDolgozatotTol int
    ,@pNemIrtDolgozatotIg int
    ,@pSzuperOsztalyfonok int
    ,@pDatum datetime'
    ,@pIntezmenyId = @pIntezmenyId
    ,@pTanevId = @pTanevId
    ,@pOsztalyCsoportId = @pOsztalyCsoportId
    ,@pTantargyId = @pTantargyId
    ,@pTanarId = @pTanarId
    ,@pErtekelesTema = @pErtekelesTema
    ,@pAtlagTol = @pAtlagTol
    ,@pAtlagIg = @pAtlagIg
    ,@pErdemjegy5Tol = @pErdemjegy5Tol
    ,@pErdemjegy5Ig = @pErdemjegy5Ig
    ,@pErdemjegy4Tol = @pErdemjegy4Tol
    ,@pErdemjegy4Ig = @pErdemjegy4Ig
    ,@pErdemjegy3Tol = @pErdemjegy3Tol
    ,@pErdemjegy3Ig = @pErdemjegy3Ig
    ,@pErdemjegy2Tol = @pErdemjegy2Tol
    ,@pErdemjegy2Ig = @pErdemjegy2Ig
    ,@pErdemjegy1Tol = @pErdemjegy1Tol
    ,@pErdemjegy1Ig = @pErdemjegy1Ig
    ,@pNemIrtDolgozatotTol = @pNemIrtDolgozatotTol
    ,@pNemIrtDolgozatotIg = @pNemIrtDolgozatotIg
    ,@pSzuperOsztalyfonok = @pSzuperOsztalyfonok
    ,@pDatum = @pDatum
END
GO
