﻿DROP PROCEDURE IF EXISTS uspUpdateTanuloEpJuttatas
GO

CREATE PROCEDURE uspUpdateTanuloEpJuttatas
   @pTanevId int
  ,@pMinErdemjegy float
  ,@pJuttatasAlap int
  ,@pTanuloId int = NULL
  ,@pFelhasznaloId int
  ,@pKifizetesDatuma datetime = NULL
AS
BEGIN
  SET NOCOUNT ON;

  DECLARE @intezmenyId int
    ,@sorszam int

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

  CREATE TABLE #JuttatasOkok (
     tanuloId int PRIMARY KEY
    ,JogviszonyTipus int
    ,MasodikSzakma char(1)
    ,Kifizetve datetime
    ,Szazalek int
    ,ElutasitasOka int
    ,Erdemjegy float
    ,EpjId int
  )

  INSERT INTO #JuttatasOkok (
     tanuloId
    ,JogviszonyTipus
    ,MasodikSzakma
    ,Kifizetve
    ,ElutasitasOka
    ,Erdemjegy
    ,Szazalek
    ,EpjId
  )
  SELECT
     t.ID
    ,ISNULL(o.C_JOGVISZONYTIPUSID, t.C_JOGVISZONYTIPUSID)
    ,ISNULL(o.C_ISMASODIKTOBBSZAKMA,t.C_ISMASODIKTOBBSZAKMA)
    ,epj.C_KIFIZETESDATUMA
    ,dbo.fnGetTanuloEpjElutasitasOka(
    COALESCE(o.C_JOGVISZONYTIPUSID,t.C_JOGVISZONYTIPUSID,0)
        ,ISNULL(o.C_ISMASODIKTOBBSZAKMA,t.C_ISMASODIKTOBBSZAKMA)
        ,epj.C_ERDEMJEGY
        ,@pMinErdemjegy
        ,epj.C_KIFIZETESDATUMA
        ,epj.ID) ElutasitasOka
    ,epj.C_ERDEMJEGY
    ,CASE
      WHEN epj.C_ERDEMJEGY >= @pMinErdemjegy AND epj.C_ERDEMJEGY < 3.00 THEN 133
      WHEN epj.C_ERDEMJEGY >= 3.00 AND epj.C_ERDEMJEGY < 4.00 THEN 184
      WHEN epj.C_ERDEMJEGY >= 4.00 AND epj.C_ERDEMJEGY < 4.50 THEN 243
      WHEN epj.C_ERDEMJEGY >= 4.50 THEN 302
      ELSE 0
    END Szazalek
    ,epj.ID
  FROM T_TANULO_OSSZES t
    LEFT JOIN T_EPJTANULOIADAT_OSSZES epj ON epj.C_TANULOID = t.ID AND epj.C_ISAKTIV = 'T' AND epj.TOROLT = 'F'
    OUTER APPLY (
      SELECT TOP 1
         tcs.C_TANULOID
        ,tta.C_ISMASODIKTOBBSZAKMA
        ,tcs.C_JOGVISZONYTIPUSID
      FROM T_TANULOCSOPORT_OSSZES tcs
        INNER JOIN T_OSZTALY_OSSZES osz ON osz.ID = tcs.C_OSZTALYCSOPORTID AND osz.TOROLT = 'F'
        INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = osz.ID AND ocs.TOROLT = 'F' AND ocs.C_FELADATKATEGORIAID = 7553
        INNER JOIN T_TANULOTANUGYIADATOK_OSSZES tta ON tta.C_TANULOCSOPORTID = tcs.ID AND tta.TOROLT = 'F'
      WHERE tcs.C_TANULOID = t.ID
        AND tcs.TOROLT = 'F'
      ORDER BY ISNULL(tcs.C_KILEPESDATUM,'22000101') DESC
    ) o
  WHERE t.TOROLT = 'F'
    AND t.C_ALTANEVID = @pTanevId
    AND (@pTanuloId IS NULL OR t.ID = @pTanuloId)

  IF @pKifizetesDatuma IS NOT NULL
  BEGIN
    UPDATE epj
      SET C_KIFIZETESDATUMA = @pKifizetesDatuma
        ,LASTCHANGED = GETDATE()
        ,MODIFIER = @pFelhasznaloId
    FROM T_EPJTANULOIADAT_OSSZES epj
    WHERE epj.TOROLT = 'F'
      AND epj.C_ISAKTIV = 'T'
      AND (@pTanuloId IS NULL OR epj.C_TANULOID = @pTanuloId)
      AND epj.C_TANEVID = @pTanevId
      AND epj.C_KIFIZETESDATUMA IS NULL
  END

  UPDATE j
    SET C_ISAKTIV = 'F'
      ,LASTCHANGED = GETDATE()
      ,MODIFIER = @pFelhasznaloId
  FROM T_JUTTATAS_OSSZES j
  WHERE (@pTanuloId IS NULL OR j.C_TANULOID = @pTanuloId)
    AND j.C_JUTTATASTIPUSID = 8617
    AND j.C_ISAKTIV = 'T'
    AND j.C_TANEVID = @pTanevId

  --SELECT * FROM #JuttatasOkok

  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
  ) 
  SELECT
     j.ElutasitasOka AS C_ELUTASITASOKA
    ,'T' AS C_ISAKTIV
    ,IIF(j.ElutasitasOka = 0, 'T', 'F') AS C_ISJOGOSULT
    ,8617 AS C_JUTTATASTIPUSID    -- egyszeri pályakezdési juttatás
    ,IIF(j.ElutasitasOka = 0, @pJuttatasAlap*1.0/100*j.Szazalek, NULL) AS C_OSSZEG
    ,j.tanuloId AS C_TANULOID
    ,@intezmenyId AS C_INTEZMENYID
    ,@pTanevId AS C_TANEVID
    ,'F' AS TOROLT
    ,0 AS SERIAL
    ,GETDATE() AS LASTCHANGED
    ,GETDATE() AS CREATED
    ,@pFelhasznaloId AS MODIFIER
    ,@pFelhasznaloId AS CREATOR
  FROM #JuttatasOkok j

END