DROP PROCEDURE IF EXISTS uspUpdateTanuloSzakkepzesiJuttatasok
GO

CREATE PROCEDURE uspUpdateTanuloSzakkepzesiJuttatasok
   @pTanevId int
  ,@pMaxIgazolatlanokSzama int
  ,@pMinOsztondijAtlag float
  ,@pOsztondijAlap int
  ,@pLekerdezesDatuma datetime
  ,@pTanuloId int = NULL
  ,@pTanuloIdList nvarchar(max) = NULL
  ,@pFelhasznaloId int
  ,@pGeneraltHonap int = NULL
  ,@pVisszaallitasDatuma datetime = NULL
AS
BEGIN
  SET NOCOUNT ON;

DECLARE 
     @sql nvarchar(max) = N''
    ,@vizsgaltHonap datetime
    ,@hatarnap int
    ,@szorzo int
    
    ,@defaultJuttatasHatarnap int = 15

  IF @pMaxIgazolatlanokSzama IS NULL BEGIN
      SET @pMaxIgazolatlanokSzama = 6
  END

  IF @pLekerdezesDatuma IS NULL OR @pLekerdezesDatuma > GETDATE() BEGIN
    SET @pLekerdezesDatuma = GETDATE()
  END

  SELECT TOP (1) @hatarnap = ISNULL(DATEPART(DAY, C_JUTTATASHATARNAP), @defaultJuttatasHatarnap) + 1 
  FROM T_INTEZMENYADATOK 
  WHERE C_TANEVID = @pTanevId

  CREATE TABLE #hatarnapok (
    C_NAPDATUMA datetime primary key
  )
  
  INSERT INTO #hatarnapok
  SELECT C_NAPDATUMA
  FROM T_NAPTARINAP
  WHERE DATEPART(day, C_NAPDATUMA) = @hatarnap
    AND DATEPART(month, C_NAPDATUMA) <> 9
    AND C_TANEVID = @pTanevId

  SET @vizsgaltHonap = (SELECT MIN(C_NAPDATUMA) FROM #hatarnapok
    WHERE C_NAPDATUMA > @pLekerdezesDatuma)

  IF @vizsgaltHonap IS NULL BEGIN
    SET @vizsgaltHonap = (SELECT MAX(C_NAPDATUMA) FROM #hatarnapok)
  END

  
  

  SET @vizsgaltHonap = DATEADD(month, DATEDIFF(month, 0, @vizsgaltHonap), 0)

  IF @pTanuloIdList IS NOT NULL BEGIN
      SET @sql += N'
        CREATE TABLE #tanuloIdk(tanuloid int)
        INSERT INTO #tanuloIdk (tanuloId)
        SELECT value FROM STRING_SPLIT(@ptanuloIdList,'','')'
  END

  IF @pVisszaallitasDatuma IS NOT NULL BEGIN
  SET @sql += N'
  CREATE TABLE #T_TANULO (
     ID int PRIMARY KEY
    ,C_EVISMETLO char(1)
    ,C_ISBESZAMITASOS char(1)
    ,C_ISMASODIKTOBBSZAKMA char(1)
    ,C_ISOSZTONDIJBOLKIZARVA char(1)
    ,C_ISSZAKKEPZESIMUNKASZERZODESS char(1)
    ,C_JOGVISZONYATSZUNETELTETO char(1)
    ,C_JOGVISZONYTIPUSID int
    ,C_KEZIATLAG float
    ,C_SZAMITOTTATLAG float
    ,C_TANULOSZERZODESES char(1)
    ,C_VENDEG char(1)
    ,C_ISBESZAMITASOSFIXSZAZALEK char(1)
    ,C_ISMULASZTASMIATTKIZART char(1)
    ,C_ISSIKERESAGAZATIVIZSGA char(1)
    ,C_ISATLAGSZAKKEPZESI char(1)
    ,TOROLT char(1)
  )

  INSERT INTO #T_TANULO (
     ID
    ,C_EVISMETLO
    ,C_ISBESZAMITASOS
    ,C_ISMASODIKTOBBSZAKMA
    ,C_ISOSZTONDIJBOLKIZARVA
    ,C_ISSZAKKEPZESIMUNKASZERZODESS
    ,C_JOGVISZONYATSZUNETELTETO 
    ,C_JOGVISZONYTIPUSID
    ,C_KEZIATLAG
    ,C_SZAMITOTTATLAG
    ,C_TANULOSZERZODESES
    ,C_VENDEG
    ,C_ISBESZAMITASOSFIXSZAZALEK
    ,C_ISMULASZTASMIATTKIZART
    ,C_ISSIKERESAGAZATIVIZSGA
    ,C_ISATLAGSZAKKEPZESI
    ,TOROLT
  ) SELECT 
     ID
    ,C_EVISMETLO
    ,C_ISBESZAMITASOS
    ,C_ISMASODIKTOBBSZAKMA
    ,C_ISOSZTONDIJBOLKIZARVA
    ,C_ISSZAKKEPZESIMUNKASZERZODESS
    ,C_JOGVISZONYATSZUNETELTETO 
    ,C_JOGVISZONYTIPUSID
    ,C_KEZIATLAG
    ,C_SZAMITOTTATLAG
    ,C_TANULOSZERZODESES
    ,C_VENDEG
    ,C_ISBESZAMITASOSFIXSZAZALEK
    ,C_ISMULASZTASMIATTKIZART
    ,C_ISSIKERESAGAZATIVIZSGA
    ,C_ISATLAGSZAKKEPZESI
    ,TOROLT  
  FROM T_TANULO
  WHERE C_ALTANEVID = @pTanevId

  CREATE TABLE #T_OSZTALYCSOPORT (
     ID int PRIMARY KEY
    ,C_EVFOLYAMTIPUSA int
    ,C_ISTECHNIKAI char(1)
    ,C_KERESZTFELEVES char(1)
    ,C_FELADATKATEGORIAID int
    ,C_VEGZOSEVFOLYAM char(1)
    ,TOROLT char(1)
  )

  INSERT INTO #T_OSZTALYCSOPORT (
     ID
    ,C_EVFOLYAMTIPUSA
    ,C_ISTECHNIKAI
    ,C_KERESZTFELEVES
    ,C_FELADATKATEGORIAID
    ,C_VEGZOSEVFOLYAM
    ,TOROLT 
  ) SELECT 
     ID
    ,C_EVFOLYAMTIPUSA
    ,C_ISTECHNIKAI
    ,C_KERESZTFELEVES
    ,C_FELADATKATEGORIAID
    ,C_VEGZOSEVFOLYAM
    ,TOROLT 
  FROM T_OSZTALYCSOPORT
  WHERE C_TANEVID = @pTanevId

  CREATE TABLE #T_TANULOCSOPORT (
     ID int PRIMARY KEY
    ,C_BELEPESDATUM datetime
    ,C_KILEPESDATUM datetime
    ,C_JOGVISZONYTIPUSID int
    ,C_OSZTALYCSOPORTID int
    ,C_TANULOID int
    ,TOROLT char(1)
  )

  INSERT INTO #T_TANULOCSOPORT (
     ID 
    ,C_BELEPESDATUM 
    ,C_KILEPESDATUM 
    ,C_JOGVISZONYTIPUSID
    ,C_OSZTALYCSOPORTID
    ,C_TANULOID
    ,TOROLT
  ) SELECT 
     ID 
    ,C_BELEPESDATUM 
    ,C_KILEPESDATUM 
    ,C_JOGVISZONYTIPUSID
    ,C_OSZTALYCSOPORTID
    ,C_TANULOID
    ,TOROLT 
  FROM T_TANULOCSOPORT
  WHERE C_TANEVID = @pTanevId

  CREATE TABLE #T_TANULOMULASZTAS (
     ID int PRIMARY KEY
    ,C_IGAZOLT char(1)
    ,C_TIPUS int
    ,C_TANITASIORAKID int
    ,C_ORATANULOIID int
    ,TOROLT char(1)
  )

  INSERT INTO #T_TANULOMULASZTAS (
     ID
    ,C_IGAZOLT
    ,C_TIPUS
    ,C_TANITASIORAKID
    ,C_ORATANULOIID
    ,TOROLT
  ) SELECT 
     ID
    ,C_IGAZOLT
    ,C_TIPUS
    ,C_TANITASIORAKID
    ,C_ORATANULOIID
    ,TOROLT
  FROM T_TANULOMULASZTAS
  WHERE C_TANEVID = @pTanevId

  CREATE TABLE #T_TANULOTANUGYIADATOK (
     ID int PRIMARY KEY
    ,C_EVISMETLO char(1)
    ,C_ISBESZAMITASOS char(1)
    ,C_ISMASODIKTOBBSZAKMA char(1)
    ,C_ISSZAKKEPZESIMUNKASZERZODESS char(1) 
    ,C_JOGVISZONYATSZUNETELTETO char(1)
    ,C_TANULOEVFOLYAMTIPUSID int
    ,C_TANULOSZERZODESES char(1)
    ,C_VENDEG char(1)
    ,C_TANULOCSOPORTID int
    ,C_ISBESZAMITASOSFIXSZAZALEK char(1)
    ,C_AGAZATUJSZKTTIPUSID int
    ,C_SZAKMATIPUSID int
    ,TOROLT char(1)
  )
  INSERT INTO #T_TANULOTANUGYIADATOK (
     ID
    ,C_EVISMETLO
    ,C_ISBESZAMITASOS 
    ,C_ISMASODIKTOBBSZAKMA 
    ,C_ISSZAKKEPZESIMUNKASZERZODESS  
    ,C_JOGVISZONYATSZUNETELTETO 
    ,C_TANULOEVFOLYAMTIPUSID
    ,C_TANULOSZERZODESES
    ,C_VENDEG
    ,C_TANULOCSOPORTID
    ,C_ISBESZAMITASOSFIXSZAZALEK
    ,C_AGAZATUJSZKTTIPUSID
    ,C_SZAKMATIPUSID
    ,TOROLT
  ) SELECT 
     ID
    ,C_EVISMETLO
    ,C_ISBESZAMITASOS 
    ,C_ISMASODIKTOBBSZAKMA 
    ,C_ISSZAKKEPZESIMUNKASZERZODESS  
    ,C_JOGVISZONYATSZUNETELTETO 
    ,C_TANULOEVFOLYAMTIPUSID
    ,C_TANULOSZERZODESES
    ,C_VENDEG
    ,C_TANULOCSOPORTID
    ,C_ISBESZAMITASOSFIXSZAZALEK
    ,C_AGAZATUJSZKTTIPUSID
    ,C_SZAKMATIPUSID
    ,TOROLT
  FROM T_TANULOTANUGYIADATOK
  WHERE C_TANEVID = @pTanevId

  DECLARE @property TABLE (Tabla nvarchar(100), Oszlop nvarchar(100)) 
  INSERT INTO @property  (Tabla, Oszlop) VALUES 
     (''T_OSZTALYCSOPORT'', ''C_EVFOLYAMTIPUSA'')
    ,(''T_OSZTALYCSOPORT'', ''C_ISTECHNIKAI'')
    ,(''T_OSZTALYCSOPORT'', ''C_KERESZTFELEVES'')
    ,(''T_OSZTALYCSOPORT'', ''C_FELADATKATEGORIAID'')
    ,(''T_OSZTALYCSOPORT'', ''C_VEGZOSEVFOLYAM'')
    ,(''T_OSZTALYCSOPORT'', ''TOROLT'')
    ,(''T_TANULO'', ''C_EVISMETLO'')
    ,(''T_TANULO'', ''C_ISBESZAMITASOS'')
    ,(''T_TANULO'', ''C_ISMASODIKTOBBSZAKMA'')
    ,(''T_TANULO'', ''C_ISOSZTONDIJBOLKIZARVA'')
    ,(''T_TANULO'', ''C_ISSZAKKEPZESIMUNKASZERZODESS'')
    ,(''T_TANULO'', ''C_JOGVISZONYATSZUNETELTETO'')
    ,(''T_TANULO'', ''C_JOGVISZONYTIPUSID'')
    ,(''T_TANULO'', ''C_KEZIATLAG'')
    ,(''T_TANULO'', ''C_SZAMITOTTATLAG'')
    ,(''T_TANULO'', ''C_TANULOSZERZODESES'')
    ,(''T_TANULO'', ''C_VENDEG'')
    ,(''T_TANULO'', ''C_ISBESZAMITASOSFIXSZAZALEK'')
    ,(''T_TANULO'', ''C_ISMULASZTASMIATTKIZART'')
    ,(''T_TANULO'', ''C_ISSIKERESAGAZATIVIZSGA'')
    ,(''T_TANULO'', ''C_ISATLAGSZAKKEPZESI'')
    ,(''T_TANULO'', ''TOROLT'')
    ,(''T_TANULOCSOPORT'', ''C_BELEPESDATUM'') 
    ,(''T_TANULOCSOPORT'', ''C_KILEPESDATUM'')
    ,(''T_TANULOCSOPORT'', ''C_JOGVISZONYTIPUSID'')
    ,(''T_TANULOCSOPORT'', ''TOROLT'')
    ,(''T_TANULOMULASZTAS'', ''C_IGAZOLT'')
    ,(''T_TANULOMULASZTAS'', ''C_TIPUS'')
    ,(''T_TANULOMULASZTAS'', ''C_TANITASIORAKID'')
    ,(''T_TANULOMULASZTAS'', ''C_ORATANULOIID'')
    ,(''T_TANULOMULASZTAS'', ''TOROLT'')
    ,(''T_TANULOTANUGYIADATOK'', ''C_EVISMETLO'') 
    ,(''T_TANULOTANUGYIADATOK'', ''C_ISBESZAMITASOS'') 
    ,(''T_TANULOTANUGYIADATOK'', ''C_ISMASODIKTOBBSZAKMA'') 
    ,(''T_TANULOTANUGYIADATOK'', ''C_ISSZAKKEPZESIMUNKASZERZODESS'') 
    ,(''T_TANULOTANUGYIADATOK'', ''C_JOGVISZONYATSZUNETELTETO'') 
    ,(''T_TANULOTANUGYIADATOK'', ''C_TANULOEVFOLYAMTIPUSID'')
    ,(''T_TANULOTANUGYIADATOK'', ''C_TANULOSZERZODESES'') 
    ,(''T_TANULOTANUGYIADATOK'', ''C_VENDEG'') 
    ,(''T_TANULOTANUGYIADATOK'', ''TOROLT'') 
    ,(''T_TANULOTANUGYIADATOK'', ''C_ISBESZAMITASOSFIXSZAZALEK'')
    ,(''T_TANULOTANUGYIADATOK'', ''C_AGAZATUJSZKTTIPUSID'')
    ,(''T_TANULOTANUGYIADATOK'', ''C_SZAKMATIPUSID'')

  DECLARE @sql nvarchar(max)
  DECLARE @SqlTable TABLE (Command nvarchar(max), AlterationDate datetime)
  INSERT INTO @SqlTable (Command, AlterationDate)
  SELECT DISTINCT sqlCmd, x.C_ALTERATIONDATE FROM (
    SELECT 
       ''UPDATE #'' + eh.C_ENTITYNAME + '' '' + CASE
	        WHEN eh.C_REASON = ''New'' THEN ''SET TOROLT = ''''T''''''
	        WHEN eh.C_REASON = ''Modified'' THEN ''SET '' + eah.C_PROPERTYNAME + '' = '' + ISNULL('''''''' + eah.C_ORIGINALVALUE + '''''''',''NULL '')
	        WHEN eh.C_REASON = ''Logical Removed'' THEN '' SET TOROLT = ''''F'''''' END
          + '' WHERE ID = '' + CAST(eh.C_ENTITYID AS varchar) sqlCmd
      ,eh.C_ALTERATIONDATE
    FROM T_ENTITYHISTORY eh WITH(NOLOCK)
      INNER JOIN T_ENTITYATTRIBUTEHISTORY eah WITH(NOLOCK) ON eah.C_ENTITYHISTORYID = eh.ID
      INNER JOIN @property p ON p.Tabla = eh.C_ENTITYNAME AND p.Oszlop = eah.C_PROPERTYNAME
    WHERE eh.C_TANEVID = ' + CAST(@pTanevId AS nvarchar(10)) + ' AND eh.C_ALTERATIONDATE >= ''' + FORMAT(@pVisszaallitasDatuma, 'yyyyMMdd') + '''
        AND C_ENTITYNAME IN (''T_OSZTALYCSOPORT'', ''T_TANULO'', ''T_TANULOCSOPORT'', ''T_TANULOMULASZTAS'', ''T_TANULOTANUGYIADATOK'')
  ) x 
  WHERE x.sqlCmd IS NOT NULL
  ORDER BY x.C_ALTERATIONDATE DESC

  DECLARE cur CURSOR FOR
  SELECT Command FROM @SqlTable ORDER BY AlterationDate desc

  OPEN cur
  FETCH NEXT FROM cur INTO @sql
  WHILE @@FETCH_STATUS = 0 BEGIN
    EXEC sp_executesql @sql
    FETCH NEXT FROM cur INTO @sql
  END 

  CLOSE cur
  DEALLOCATE cur
  '
  END

  SET @sql += N'
    DECLARE 
       @intezmenyId int
      ,@sorszam int

    DECLARE 
       @jogviszonyVizsgalatEleje datetime
      ,@jogviszonyVizsgalatVege datetime

    SET @jogviszonyVizsgalatEleje = @vizsgaltHonap
    SET @jogviszonyVizsgalatVege = DATEADD(day, @pHatarnap - 1, DATEADD(month, DATEDIFF(month, 0, @vizsgaltHonap), 0))

    SELECT 
       @intezmenyId = C_INTEZMENYID
      ,@sorszam = C_SORSZAM
    FROM T_TANEV WHERE ID = @pTanevId
  '

  SET @sql +=N'
    CREATE TABLE #TanuloIgazolatlanMulasztasok (
       TanuloId int PRIMARY KEY
      ,MulasztasokSzama int
    )

    CREATE TABLE #TanuloAtlag (
       TanuloId int PRIMARY KEY
      ,Atlag float
    )

    CREATE TABLE #JuttatasOkok (
       TanuloId int PRIMARY KEY
      ,TanulocsoportBelepesDatum datetime
      ,JogviszonyTipus int
      ,VanValidBesorolasa char(1)
      ,EvfolyamTipusa int
      ,MasodikSzakma char(1)
      ,Evismetlo char(1)
      ,IgazolatlanMulasztasokSzama int
      ,Dualis char(1)
      ,TechnikaiOsztaly char(1)
      ,Vendeg char(1)
      ,IsJogviszonyatSzunetelteto char(1)
      ,KeresztfelevesOsztaly char(1)
      ,FelevnelValtos char(1)
      ,BeszamitasosTanulo char(1)
      ,OsztondijbolKizarva char(1)
      ,MulasztasMiattKizart char(1)
      ,IsSikeresAgazatiVizsga char(1)
      ,IsAtlagSzakkepzesi char(1)
      ,IsBeszamitasosFixSzazalek char(1)
      ,IsSzktJogosult char(1)
      ,Code nvarchar(3)
      ,Szazalek int
      ,ElutasitasOka int
      ,Szorzo int
      ,Atlag float
      ,VegzosEvfolyam char(1)
    )

    INSERT INTO #TanuloIgazolatlanMulasztasok (
       TanuloId
      ,MulasztasokSzama
    ) SELECT 
       tm.C_ORATANULOIID
      ,COUNT(1) AS CNT
    FROM (
      SELECT tcs.ID, tcs.C_TANULOID, tcs.C_BELEPESDATUM, tcs.C_KILEPESDATUM, tcs.C_TANEVID
	      ,ROW_NUMBER() OVER (PARTITION BY tcs.C_TANULOID ORDER BY C_BELEPESDATUM DESC) AS rn
      FROM ' + IIF(@pVisszaallitasDatuma IS NULL, 'T_TANULOCSOPORT_OSSZES', '#T_TANULOCSOPORT') + ' tcs
        INNER JOIN T_OSZTALY_OSSZES o ON o.ID = tcs.C_OSZTALYCSOPORTID AND o.TOROLT = ''F''
        INNER JOIN ' + IIF(@pVisszaallitasDatuma IS NULL, 'T_OSZTALYCSOPORT_OSSZES', '#T_OSZTALYCSOPORT') + ' ocs ON ocs.ID = o.ID 
          AND ocs.C_FELADATKATEGORIAID = 7553 AND ocs.TOROLT = ''F''
      WHERE tcs.TOROLT = ''F''
    ) AS x
      INNER JOIN ' + IIF(@pVisszaallitasDatuma IS NULL, 'T_TANULOMULASZTAS_OSSZES', '#T_TANULOMULASZTAS') + ' tm ON tm.C_ORATANULOIID = x.C_TANULOID 
        AND tm.TOROLT = ''F''
      INNER JOIN T_TANITASIORA_OSSZES tao ON tao.ID = tm.C_TANITASIORAKID AND tao.TOROLT = ''F''
      INNER JOIN ' + IIF(@pVisszaallitasDatuma IS NULL, 'T_OSZTALYCSOPORT_OSSZES', '#T_OSZTALYCSOPORT') + ' ocs ON ocs.ID = tao.C_OSZTALYCSOPORTID 
        AND ocs.C_FELADATKATEGORIAID = 7553 AND ocs.TOROLT = ''F''
    ' + IIF(@pTanuloIdList IS NOT NULL,'INNER JOIN #tanuloIdk tanulok ON tanulok.tanuloid = tm.C_ORATANULOIID','') + '
    WHERE x.rn = 1
      AND tao.C_DATUM >= x.C_BELEPESDATUM
      AND (tao.C_DATUM < x.C_KILEPESDATUM OR x.C_KILEPESDATUM IS NULL)
      AND tm.C_IGAZOLT = ''F''
      AND tm.C_TIPUS = 1500
      AND tao.C_DATUM < @vizsgaltHonap
    ' + IIF(@pTanuloId IS NOT NULL,'  AND tm.C_ORATANULOIID = @pTanuloid','') + '
    ' + IIF(@pVisszaallitasDatuma IS NULL, '  AND tm.C_TANEVID = @pTanevId', '') + ' 
    GROUP BY tm.C_ORATANULOIID'

  SET @sql +=N'
    INSERT INTO #JuttatasOkok(
       TanuloId
      ,TanulocsoportBelepesDatum
      ,JogviszonyTipus 
      ,VanValidBesorolasa 
      ,EvfolyamTipusa 
      ,MasodikSzakma 
      ,Evismetlo 
      ,IgazolatlanMulasztasokSzama 
      ,Dualis 
      ,TechnikaiOsztaly
      ,Vendeg
      ,IsJogviszonyatSzunetelteto
      ,KeresztfelevesOsztaly
      ,FelevnelValtos
      ,BeszamitasosTanulo
      ,OsztondijbolKizarva
      ,MulasztasMiattKizart
      ,IsSikeresAgazatiVizsga
      ,IsAtlagSzakkepzesi
      ,IsBeszamitasosFixSzazalek
      ,IsSzktJogosult
      ,Code
      ,ElutasitasOka 
      ,Szorzo
      ,Atlag 
      ,VegzosEvfolyam
    ) SELECT
       t.ID TanuloId
      ,o.C_BELEPESDATUM TanulocsoportBelepesDatum
      ,ISNULL(o.C_JOGVISZONYTIPUSID, t.C_JOGVISZONYTIPUSID) JogviszonyTipus
      ,IIF(o.C_TANULOID IS NULL,''F'',''T'') VanValidBesorolasa
      ,o.C_EVFOLYAMTIPUSA EvfolyamTipusa
      ,ISNULL(o.C_ISMASODIKTOBBSZAKMA,t.C_ISMASODIKTOBBSZAKMA) MasodikSzakma
      ,ISNULL(o.C_EVISMETLO,t.C_EVISMETLO) Evismetlo
      ,ISNULL(mul.MulasztasokSzama, 0) IgazolatlanMulasztasokSzama
      ,CASE 
        WHEN ISNULL(o.C_TANULOSZERZODESES,t.C_TANULOSZERZODESES) = ''T'' OR ISNULL(o.C_ISSZAKKEPZESIMUNKASZERZODESS,t.C_ISSZAKKEPZESIMUNKASZERZODESS) = ''T''
          THEN ''T'' 
          ELSE ''F''
        END Dualis
      ,o.C_ISTECHNIKAI TechnikaiOsztaly
      ,ISNULL(o.C_VENDEG,t.C_VENDEG) Vendeg
      ,ISNULL(o.C_JOGVISZONYATSZUNETELTETO,t.C_JOGVISZONYATSZUNETELTETO) IsJogviszonyatSzunetelteto
      ,o.C_KERESZTFELEVES
      ,IIF(o.C_EVFOLYAMTIPUSA IN  (7866,7883),''T'',''F'') FelevnelValtos
      ,ISNULL(o.C_ISBESZAMITASOS, t.C_ISBESZAMITASOS) BeszamitasosTanulo
      ,t.C_ISOSZTONDIJBOLKIZARVA OsztondijbolKizarva
      ,t.C_ISMULASZTASMIATTKIZART MulasztasMiattKizart
      ,t.C_ISSIKERESAGAZATIVIZSGA IsSikeresAgazatiVizsga
      ,t.C_ISATLAGSZAKKEPZESI IsAtlagSzakkepzesi
      ,ISNULL(o.C_ISBESZAMITASOSFIXSZAZALEK,t.C_ISBESZAMITASOSFIXSZAZALEK) IsBeszamitasosFixSzazalek
      ,IIF (o.C_AGAZATUJSZKTTIPUSID <> 7920 OR o.C_SZAKMATIPUSID <> 7946, ''T'', ''F'') IsSzktJogosult  -- AgazatUjSzktTipus.Na, SzakmaTipus.Na
      ,o.Code
      ,dbo.fnGetTanuloElutasitasOka(
         COALESCE(o.C_JOGVISZONYTIPUSID,t.C_JOGVISZONYTIPUSID,0)
        ,IIF(o.C_TANULOID IS NULL,''F'',''T'')
        ,o.C_EVFOLYAMTIPUSA
        ,ISNULL(o.C_ISMASODIKTOBBSZAKMA,t.C_ISMASODIKTOBBSZAKMA)
        ,ISNULL(o.C_EVISMETLO,t.C_EVISMETLO)
        ,mul.MulasztasokSzama
        ,@pMaxIgazolatlanokSzama
        ,CASE 
          WHEN ISNULL(o.C_TANULOSZERZODESES,t.C_TANULOSZERZODESES) = ''T'' OR ISNULL(o.C_ISSZAKKEPZESIMUNKASZERZODESS,t.C_ISSZAKKEPZESIMUNKASZERZODESS) = ''T''
            THEN ''T'' 
            ELSE ''F''
          END
        ,o.C_ISTECHNIKAI
        ,ISNULL(o.C_VENDEG,t.C_VENDEG)
        ,ISNULL(o.C_JOGVISZONYATSZUNETELTETO,t.C_JOGVISZONYATSZUNETELTETO)
        ,o.C_KERESZTFELEVES
        ,ISNULL(o.C_ISBESZAMITASOS, t.C_ISBESZAMITASOS)
        ,t.C_ISOSZTONDIJBOLKIZARVA
        ,t.C_ISMULASZTASMIATTKIZART
        ,IIF (o.C_AGAZATUJSZKTTIPUSID <> 7920 OR o.C_SZAKMATIPUSID <> 7946, ''T'', ''F'')
        ,ISNULL(t.C_KEZIATLAG,t.C_SZAMITOTTATLAG)
        ,@pMinOsztondijAtlag
        ,IIF (o.Code = ''003'' 
          OR (ISNULL(o.C_ISBESZAMITASOS, t.C_ISBESZAMITASOS) = ''T'' AND ISNULL(o.C_ISBESZAMITASOSFIXSZAZALEK,t.C_ISBESZAMITASOSFIXSZAZALEK) = ''F'')
          OR (t.C_ISSIKERESAGAZATIVIZSGA = ''T'' AND t.C_ISATLAGSZAKKEPZESI = ''T''), 1, 0)
        ,@pLekerdezesDatuma
        ,@sorszam
       ) ElutasitasOka
      ,o.Szorzo Szorzo
      ,0 Atlag
      ,o.C_VEGZOSEVFOLYAM AS VegzosEvfolyam
'
  SET @sql+=N'
  FROM ' + IIF(@pVisszaallitasDatuma IS NULL, 'T_TANULO_OSSZES', '#T_TANULO') + ' t
  '+IIF(@pTanuloIdList IS NOT NULL,'INNER JOIN #tanuloIdk tanulok ON tanulok.tanuloid = t.ID','')+'
  LEFT JOIN #TanuloIgazolatlanMulasztasok mul ON mul.tanuloId = t.ID
  OUTER APPLY (
    SELECT TOP 1
       tcso.C_TANULOID
      ,tcso.C_BELEPESDATUM
      ,tcso.C_JOGVISZONYTIPUSID
      ,CASE WHEN ocso.C_EVFOLYAMTIPUSA IN (6908,6910,6911,6912,6913,7366,6909,6911,6913) 
          THEN ISNULL(tta.C_TANULOEVFOLYAMTIPUSID,ocso.C_EVFOLYAMTIPUSA)
          ELSE ocso.C_EVFOLYAMTIPUSA
        END AS C_EVFOLYAMTIPUSA
      ,tta.C_ISMASODIKTOBBSZAKMA
      ,tta.C_EVISMETLO
      ,tta.C_TANULOSZERZODESES
      ,ocso.C_ISTECHNIKAI
      ,tta.C_VENDEG
      ,tta.C_JOGVISZONYATSZUNETELTETO
      ,tta.C_ISSZAKKEPZESIMUNKASZERZODESS
      ,ocso.C_KERESZTFELEVES
      ,CASE WHEN ocso.C_EVFOLYAMTIPUSA IN (6908,6910,6911,6912,6913,7366,6909,6911,6913) 
        THEN dibCodetta.C_CODE
        ELSE dibCodeocs.C_CODE
        END Code
      ,1 AS Szorzo
      ,tta.C_ISBESZAMITASOS
      ,tta.C_ISBESZAMITASOSFIXSZAZALEK
      ,ocso.C_VEGZOSEVFOLYAM
      ,tta.C_AGAZATUJSZKTTIPUSID
      ,tta.C_SZAKMATIPUSID
    FROM ' + IIF(@pVisszaallitasDatuma IS NULL, 'T_TANULOCSOPORT_OSSZES', '#T_TANULOCSOPORT') + ' tcso 
      INNER JOIN T_OSZTALY_OSSZES o ON o.ID = tcso.C_OSZTALYCSOPORTID AND t.TOROLT = ''F''
      INNER JOIN ' + IIF(@pVisszaallitasDatuma IS NULL, 'T_OSZTALYCSOPORT_OSSZES', '#T_OSZTALYCSOPORT') + ' ocso ON ocso.ID = o.ID AND ocso.C_FELADATKATEGORIAID = 7553 AND ocso.TOROLT = ''F''
      INNER JOIN ' + IIF(@pVisszaallitasDatuma IS NULL, 'T_TANULOTANUGYIADATOK_OSSZES', '#T_TANULOTANUGYIADATOK') + ' tta ON tta.C_TANULOCSOPORTID = tcso.ID  AND tta.TOROLT = ''F''
      INNER JOIN T_DICTIONARYITEMBASE_OSSZES dibCodeocs ON dibCodeocs.ID = ocso.C_EVFOLYAMTIPUSA AND dibCodeocs.C_TANEVID = @pTanevId AND dibCodeocs.TOROLT = ''F''
      LEFT JOIN T_DICTIONARYITEMBASE_OSSZES dibCodetta ON dibCodetta.ID = tta.C_TANULOEVFOLYAMTIPUSID AND dibCodetta.C_TANEVID = @pTanevId AND dibCodetta.TOROLT = ''F''
    WHERE tcso.C_BELEPESDATUM < @jogviszonyVizsgalatVege 
      AND (tcso.C_KILEPESDATUM >= @jogviszonyVizsgalatEleje OR tcso.C_KILEPESDATUM IS NULL)
      AND tcso.C_TANULOID = t.ID
      AND tcso.TOROLT = ''F''
      ' + IIF(@pVisszaallitasDatuma IS NULL, 'AND  tcso.C_TANEVID = @pTanevId', '') + '
    ORDER BY ISNULL(tcso.C_KILEPESDATUM,''22000101'') DESC
  ) o 
  WHERE 1 = 1
  ' + IIF(@pTanuloId IS NOT NULL,'AND t.ID = @pTanuloId','') + '
  ' + IIF(@pVisszaallitasDatuma IS NULL, 'AND  t.C_ALTANEVID = @pTanevId', '')

  IF @pVisszaallitasDatuma IS NULL BEGIN
  SET @sql +=N'
  
  UPDATE j SET
    Atlag = ISNULL(t.C_KEZIATLAG,C_SZAMITOTTATLAG)
  FROM #JuttatasOkok j
    INNER JOIN T_TANULO_OSSZES t ON t.ID = j.tanuloId
  WHERE t.C_ALTANEVID = @pTanevId
    AND t.TOROLT = ''F'''
    
  END

  SET @sql+=N'
  UPDATE #JuttatasOkok SET 
    Szazalek = 
    CASE
      WHEN BeszamitasosTanulo = ''T'' AND IsBeszamitasosFixSzazalek = ''T'' THEN 10
      WHEN BeszamitasosTanulo = ''T'' THEN dbo.fnGetOsztondijSzazalekFromAtlag(Atlag)
      WHEN Code = ''003'' THEN dbo.fnGetOsztondijSzazalekFromAtlag(Atlag)
      WHEN FelevnelValtos = ''T'' THEN 
        CASE
          WHEN IsSikeresAgazatiVizsga = ''F'' AND Code = ''001'' THEN 5
          WHEN IsSikeresAgazatiVizsga = ''F'' AND Code = ''002'' THEN 10
          WHEN IsSikeresAgazatiVizsga = ''T'' AND IsAtlagSzakkepzesi = ''F'' THEN 10
          WHEN IsSikeresAgazatiVizsga = ''T'' AND IsAtlagSzakkepzesi = ''T'' THEN dbo.fnGetOsztondijSzazalekFromAtlag(Atlag)
          ELSE -1
        END
      WHEN Code IN (''001'',''004'',''005'') THEN 5
      WHEN Code = ''002'' THEN 10
      ELSE 0
    END
  '

  SET @sql += N'
  IF DATEPART(month, @vizsgaltHonap) >= 6
  BEGIN
    UPDATE #JuttatasOkok SET
      Szorzo = 3
    WHERE VegzosEvfolyam = ''F''
  END
  IF DATEPART(month, @vizsgaltHonap) = 10
  BEGIN
    UPDATE #JuttatasOkok SET
      Szorzo = CASE
        WHEN (ElutasitasOka & 32) = 0 THEN 2
        ELSE 0
      END
  END
  '
 
  SET @sql +=N'
    IF @pGeneraltHonap IS NOT NULL BEGIN
      UPDATE T_JUTTATAS_OSSZES
      SET C_GENERALTHONAP = NULL
      WHERE C_GENERALTHONAP = @pGeneraltHonap 
	    AND C_TANEVID = @pTanevId
	    AND C_JUTTATASTIPUSID = 7888
    END
  '

  SET @sql += N'
  UPDATE j SET 
     C_ISAKTIV = ''F''
    ,LASTCHANGED = GETDATE()
    ,MODIFIER = @pFelhasznaloId
  FROM T_JUTTATAS_OSSZES j
    INNER JOIN #JuttatasOkok jo ON jo.tanuloId = j.C_TANULOID
  WHERE j.C_ISAKTIV = ''T'' 
    AND C_TANEVID = @pTanevId
    AND C_JUTTATASTIPUSID = 7888
  
  INSERT INTO T_JUTTATAS (
     C_ELUTASITASOKA
    ,C_ISAKTIV
    ,C_ISJOGOSULT
    ,C_JUTTATASTIPUSID
    ,C_OSSZEG
    ,C_TANULOID
    ,C_INTEZMENYID
    ,C_TANEVID
    ,TOROLT
    ,SERIAL
    ,LASTCHANGED
    ,CREATED
    ,MODIFIER
    ,CREATOR
    ,C_GENERALTHONAP
  ) SELECT 
     ElutasitasOka
    ,' + IIF(@pVisszaallitasDatuma IS NULL, '''T''', '''F''') + '
    ,IIF(ElutasitasOka = 0,''T'',''F'')
    ,7888
    ,IIF(ElutasitasOka = 0,@pOsztondijAlap*1.0/100*szazalek*szorzo,NULL)
    ,tanuloId
    ,@intezmenyId
    ,@pTanevId
    ,''F''
    ,0
    ,GETDATE()
    ,GETDATE()
    ,@pFelhasznaloId
    ,@pFelhasznaloId
    ,@pGeneraltHonap
  FROM #JuttatasOkok
 
  --SELECT * FROM #JuttatasOkok
  '
  SET @sql += N'
  IF @pGeneraltHonap IS NOT NULL BEGIN
    UPDATE t SET 
      t.C_ISMULASZTASMIATTKIZART = ''T''
    FROM T_TANULO_OSSZES t
      INNER JOIN #JuttatasOkok j on j.tanuloId = t.ID
        AND j.IgazolatlanMulasztasokSzama > @pMaxIgazolatlanokSzama
    WHERE t.C_ISMULASZTASMIATTKIZART = ''F'' 
      AND t.C_ALTANEVID = @pTanevId
      AND t.TOROLT = ''F''
  END
  '
  --select @sql
  EXEC sp_executesql @sql,N'
       @ptanuloIdList nvarchar(max)
      ,@pMaxIgazolatlanokSzama int
      ,@pMinOsztondijAtlag float
      ,@pOsztondijAlap int
      ,@pLekerdezesDatuma datetime
      ,@pTanuloId int
      ,@vizsgaltHonap datetime
      ,@pFelhasznaloId int
      ,@pHatarnap int
      ,@pGeneraltHonap int
      ,@pTanevId int
      ,@pVisszaallitasDatuma datetime'
      ,@pMaxIgazolatlanokSzama = @pMaxIgazolatlanokSzama
      ,@pMinOsztondijAtlag = @pMinOsztondijAtlag
      ,@pOsztondijAlap = @pOsztondijAlap
      ,@pLekerdezesDatuma = @vizsgaltHonap
      ,@pTanuloId = @pTanuloId
      ,@pTanuloIdList = @pTanuloIdList
      ,@vizsgaltHonap = @vizsgaltHonap
      ,@pFelhasznaloId = @pFelhasznaloId
      ,@pHatarnap = @hatarnap
      ,@pGeneraltHonap = @pGeneraltHonap
      ,@pTanevId = @pTanevId
      ,@pVisszaallitasDatuma = @pVisszaallitasDatuma
END
GO
