IF OBJECT_ID('[dbo].[sp_GetTanulokMulasztasaiKesesei]') IS NOT NULL BEGIN
  DROP PROCEDURE [dbo].[sp_GetTanulokMulasztasaiKesesei]
END  
GO


CREATE PROCEDURE [dbo].[sp_GetTanulokMulasztasaiKesesei]
  @intezmenyId int,
  @tanevId int,
  @osztalyCsoportId int,
  @kesesTipus int,
  @elmeletiOraPercben int = 45,
  @gyakorlatiOraPercben int = 60
AS BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.
	SET NOCOUNT ON;
	DECLARE  @osztalyCsoportNev nvarchar(200)
	(SELECT @osztalyCsoportNev = C_NEV FROM T_OSZTALYCSOPORT WHERE ID = @osztalyCsoportId)
  SELECT 
     m.tanuloId												AS  TanuloId
    ,fh.C_NYOMTATASINEV										AS TanuloNev
    ,fh.C_SZULETESIDATUM									AS SzuletesiIdo
    ,fh.C_ANYJANEVE											AS AnyjaNeve
	,@osztalyCsoportNev                                     AS OsztCsopNev
    ,ISNULL(m.[hianyzasIgazolandoTanorai], 0)				AS TanoraiHianyzasIgazolando
    ,ISNULL(m.[hianyzasIgazolandoTanoranKivuli], 0)			AS TanoranKivuliHianyzasIgazolando
    ,ISNULL(m.[hianyzasIgazoltTanorai], 0)					AS TanoraiHianyzasIgazolt
    ,ISNULL(m.[hianyzasIgazoltTanoranKivuli], 0)			AS TanoranKivuliHianyzasIgazolt
    ,ISNULL(m.[hianyzasIgazolatlanTanorai], 0)				AS TanoraiHianyzasIgazolatlan
    ,ISNULL(m.[hianyzasIgazolatlanTanoranKivuli], 0)		AS TanoranKivuliHianyzasIgazolatlan
    ,ISNULL(m.[kesesIgazolandoTanorai], 0)					AS TanoraiKesesDarabszamIgazolando
    ,ISNULL(m.[kesesIgazoltTanorai], 0)						AS TanoraiKesesDarabszamIgazolt
    ,ISNULL(m.[kesesIgazolatlanTanorai], 0)					AS TanoraiKesesDarabszamIgazolatlan
    ,ISNULL(k.[kesesIgazolandoTanoraiPerc], 0)				AS TanoraiKesesIgazolandoPerc
    ,ISNULL(k.[kesesIgazoltTanoraiPerc], 0)					AS TanoraiKesesIgazoltPerc
    ,ISNULL(k.[kesesIgazolatlanTanoraiPerc], 0)				AS TanoraiKesesIgazolatlanPerc
    ,ISNULL(kp.[kesesIgazolandoTanoraiPluszOra], 0)			AS SzamitottKesesIgazolando
    ,ISNULL(kp.[kesesIgazoltTanoraiPluszOra], 0)			AS SzamitottKesesIgazolt
    ,ISNULL(kp.[kesesIgazolatlanTanoraiPluszOra], 0)		AS SzamitottKesesIgazolatlan
  FROM (
    SELECT 
       tanuloId 
      ,[hianyzasIgazolandoTanorai] 
      ,[hianyzasIgazolandoTanoranKivuli] 
      ,[hianyzasIgazoltTanorai]
      ,[hianyzasIgazoltTanoranKivuli]
      ,[hianyzasIgazolatlanTanorai]
      ,[hianyzasIgazolatlanTanoranKivuli]
      ,[kesesIgazolandoTanorai]
      ,[kesesIgazoltTanorai]
      ,[kesesIgazolatlanTanorai]
    FROM (
      SELECT 
         x.tanuloId
        ,CASE mulasztasTipus WHEN 1500 THEN 'Hianyzas' WHEN 1499 THEN 'Keses' END +
         CASE WHEN isIgazolt IS NULL THEN 'Igazolando' WHEN isIgazolt = 'T' THEN 'Igazolt' WHEN isIgazolt = 'F' THEN 'Igazolatlan' END +
         CASE isTanorai WHEN 'T' THEN 'Tanorai' WHEN 'F' THEN 'TanoranKivuli' END AS piv
        ,cnt
      FROM (
        SELECT 
          m.C_ORATANULOIID AS tanuloId, 
          m.C_TIPUS mulasztasTipus, 
          m.C_IGAZOLT isIgazolt,
          IIF(cs.ID IS NULL OR cs.C_TIPUSA = 1034, 'T', 'F') AS isTanorai, 
          COUNT(1) AS cnt 
        FROM T_TANULOMULASZTAS_OSSZES m  
          INNER JOIN T_TANITASIORA_OSSZES tn ON tn.ID = m.C_TANITASIORAKID
          LEFT  JOIN T_CSOPORT_OSSZES cs ON tn.C_OSZTALYCSOPORTID = cs.ID
        WHERE m.C_INTEZMENYID = @intezmenyId AND m.C_TANEVID = @tanevId 
		  AND m.Torolt ='F'
          AND EXISTS (SELECT 1 FROM T_TANULOCSOPORT_OSSZES tcs WHERE tcs.C_OSZTALYCSOPORTID = @osztalyCsoportId AND tcs.C_TANULOID = m.C_ORATANULOIID AND tcs.C_BELEPESDATUM <= GETDATE() AND (tcs.C_KILEPESDATUM > GETDATE() OR tcs.C_KILEPESDATUM IS NULL))
        GROUP BY m.C_ORATANULOIID, m.C_TIPUS, m.C_IGAZOLT, IIF(cs.ID IS NULL OR cs.C_TIPUSA = 1034, 'T', 'F')
      ) x
    ) p
    PIVOT (
      MAX(cnt)
      FOR piv IN 
      ([hianyzasIgazolandoTanorai], [hianyzasIgazolandoTanoranKivuli], [hianyzasIgazoltTanorai], [hianyzasIgazoltTanoranKivuli], [hianyzasIgazolatlanTanorai], [hianyzasIgazolatlanTanoranKivuli], [kesesIgazolandoTanorai], [kesesIgazoltTanorai], [kesesIgazolatlanTanorai])
    ) AS pvt
  ) m
  LEFT JOIN (
    SELECT 
       tanuloId
      ,[kesesIgazolandoTanoraiPerc]
      ,[kesesIgazoltTanoraiPerc]
      ,[kesesIgazolatlanTanoraiPerc] 
    FROM (
      SELECT 
         x.tanuloId
        ,'Keses' +
         CASE WHEN isIgazolt IS NULL THEN 'Igazolando' WHEN isIgazolt = 'T' THEN 'Igazolt' WHEN isIgazolt = 'F' THEN 'Igazolatlan' END +
         'TanoraiPerc' AS piv
        ,kesesPercben
      FROM (
        SELECT 
           m.C_ORATANULOIID AS tanuloId 
          ,m.C_IGAZOLT isIgazolt
          ,SUM(m.C_KESESPERCBEN) AS kesesPercben 
        FROM T_TANULOMULASZTAS_OSSZES m  
          INNER JOIN T_TANITASIORA_OSSZES tn ON tn.ID = m.C_TANITASIORAKID
          LEFT  JOIN T_CSOPORT_OSSZES cs ON tn.C_OSZTALYCSOPORTID = cs.ID
        WHERE m.C_INTEZMENYID = @intezmenyId 
		  AND m.C_TANEVID = @tanevId 
		  AND m.Torolt ='F'
          AND EXISTS (SELECT 1 FROM T_TANULOCSOPORT_OSSZES tcs WHERE tcs.C_OSZTALYCSOPORTID = @osztalyCsoportId AND tcs.C_TANULOID = m.C_ORATANULOIID AND tcs.C_BELEPESDATUM <= GETDATE() AND (tcs.C_KILEPESDATUM > GETDATE() OR tcs.C_KILEPESDATUM IS NULL))
          AND (cs.ID IS NULL OR cs.C_TIPUSA = 1034)
          AND m.C_TIPUS = 1499
        GROUP BY m.C_ORATANULOIID, m.C_IGAZOLT
      ) x
    ) p
    PIVOT (
      MAX(kesesPercben)
      FOR piv IN 
      ([kesesIgazolandoTanoraiPerc], [kesesIgazoltTanoraiPerc], [kesesIgazolatlanTanoraiPerc])
    ) AS pvt 
  ) k ON k.tanuloId = m.tanuloId
  LEFT JOIN (
    SELECT 
       tanuloId
      ,[kesesIgazolandoTanoraiPluszOra]
      ,[kesesIgazoltTanoraiPluszOra]
      ,[kesesIgazolatlanTanoraiPluszOra]
    FROM (
      SELECT 
         x.tanuloId
        ,'Keses' +
         CASE WHEN isIgazolt IS NULL THEN 'Igazolando' WHEN isIgazolt = 'T' THEN 'Igazolt' WHEN isIgazolt = 'F' THEN 'Igazolatlan' END +
         'TanoraiPluszOra' AS piv
        ,kesesOraban
      FROM (
        SELECT
           xx.tanuloId 
          ,xx.isIgazolt
          ,SUM(xx.keses / (CASE WHEN isGyakorlati = 'F' THEN @elmeletiOraPercben ELSE @gyakorlatiOraPercben END)) AS kesesOraban
        FROM (
          SELECT 
             m.C_ORATANULOIID AS tanuloId 
            ,m.C_IGAZOLT isIgazolt
            --,tn.C_FOGLALKOZASID AS foglalkozasId
            ,t.C_GYAKORLATI AS isGyakorlati
            ,SUM(m.C_KESESPERCBEN) AS keses
          FROM T_TANULOMULASZTAS_OSSZES m  
            INNER JOIN T_TANITASIORA_OSSZES tn ON tn.ID = m.C_TANITASIORAKID
            INNER JOIN T_TANTARGY_OSSZES t ON t.ID = tn.C_TANTARGYID
            LEFT  JOIN T_CSOPORT_OSSZES cs ON tn.C_OSZTALYCSOPORTID = cs.ID
          WHERE m.C_INTEZMENYID = @intezmenyId AND m.C_TANEVID = @tanevId
            AND EXISTS (SELECT 1 FROM T_TANULOCSOPORT_OSSZES tcs WHERE tcs.C_OSZTALYCSOPORTID = @osztalyCsoportId AND tcs.C_TANULOID = m.C_ORATANULOIID AND tcs.C_BELEPESDATUM <= GETDATE() AND (tcs.C_KILEPESDATUM > GETDATE() OR tcs.C_KILEPESDATUM IS NULL))
            AND (cs.ID IS NULL OR cs.C_TIPUSA = 1034)
            AND m.C_TIPUS = 1499
			AND m.TOROLT = 'F'
          GROUP BY m.C_ORATANULOIID, m.C_IGAZOLT/*, tn.C_FOGLALKOZASID*/, t.C_GYAKORLATI
        ) xx
        GROUP BY tanuloId, xx.isIgazolt
      ) x
    ) p
    PIVOT (
      MAX(kesesOraban)
      FOR piv IN 
      ([kesesIgazolandoTanoraiPluszOra], [kesesIgazoltTanoraiPluszOra], [kesesIgazolatlanTanoraiPluszOra])
    ) AS pvt
  ) kp ON m.tanuloId = kp.tanuloId
  INNER JOIN T_FELHASZNALO fh ON fh.ID = m.tanuloId
END



   SELECT 
       tanuloId
      ,[kesesIgazolandoTanoraiPluszOra]
      ,[kesesIgazoltTanoraiPluszOra]
      ,[kesesIgazolatlanTanoraiPluszOra]
    FROM (
      SELECT 
         x.tanuloId
        ,'Keses' +
         CASE WHEN isIgazolt IS NULL THEN 'Igazolando' WHEN isIgazolt = 'T' THEN 'Igazolt' WHEN isIgazolt = 'F' THEN 'Igazolatlan' END +
         'TanoraiPluszOra' AS piv
        ,kesesOraban
      FROM (
        SELECT
           xx.tanuloId 
          ,xx.isIgazolt
          ,SUM(xx.keses / (CASE WHEN isGyakorlati = 'F' THEN 45 ELSE 60 END)) AS kesesOraban
        FROM (
          SELECT 
             m.C_ORATANULOIID AS tanuloId 
            ,m.C_IGAZOLT isIgazolt
            --,tn.C_FOGLALKOZASID AS foglalkozasId
            ,t.C_GYAKORLATI AS isGyakorlati
            ,SUM(m.C_KESESPERCBEN) AS keses
          FROM T_TANULOMULASZTAS_OSSZES m  
            INNER JOIN T_TANITASIORA_OSSZES tn ON tn.ID = m.C_TANITASIORAKID
            INNER JOIN T_TANTARGY_OSSZES t ON t.ID = tn.C_TANTARGYID
            LEFT  JOIN T_CSOPORT_OSSZES cs ON tn.C_OSZTALYCSOPORTID = cs.ID
          WHERE m.C_INTEZMENYID = @intezmenyId AND m.C_TANEVID = @tanevId
            AND EXISTS (SELECT 1 FROM T_TANULOCSOPORT_OSSZES tcs WHERE tcs.C_OSZTALYCSOPORTID = 282 AND tcs.C_TANULOID = m.C_ORATANULOIID AND tcs.C_BELEPESDATUM <= GETDATE() AND (tcs.C_KILEPESDATUM > GETDATE() OR tcs.C_KILEPESDATUM IS NULL))
            AND (cs.ID IS NULL OR cs.C_TIPUSA = 1034)
            AND m.C_TIPUS = 1499
			AND m.TOROLT = 'F'
          GROUP BY m.C_ORATANULOIID, m.C_IGAZOLT, t.C_GYAKORLATI
        ) xx
        GROUP BY tanuloId, xx.isIgazolt
      ) x
    ) p
    PIVOT (
      MAX(kesesOraban)
      FOR piv IN 
      ([kesesIgazolandoTanoraiPluszOra], [kesesIgazoltTanoraiPluszOra], [kesesIgazolatlanTanoraiPluszOra])
    ) AS pvt
GO

