﻿DROP PROCEDURE IF EXISTS uspTantargyfelosztasImport
GO

CREATE PROCEDURE uspTantargyfelosztasImport
   @pIntezmenyId int
  ,@pTanevId int
  ,@pUserId int
  ,@pImportJson nvarchar(max)
  ,@pIsTorles bit

AS
BEGIN
  SET NOCOUNT ON;

  DECLARE
     @tableNameList nvarchar(2000) = 'T_TANTARGY_OSSZES,T_OSZTALYCSOPORT_OSSZES'
    ,@actualJson nvarchar(max) = ''
    ,@lastChangedDateTime datetime = GETDATE()

  --Ha törlés van, akkor a kapcsolódások törlésével kell kezdenünk!
  IF (@pIsTorles = 1) BEGIN
    --Foglalkozás kapcsolatainak törlése
    UPDATE oo SET 
       oo.C_FOGLALKOZASID = NULL
      ,oo.SERIAL = oo.SERIAL + 1
      ,oo.LASTCHANGED = @lastChangedDateTime
      ,oo.MODIFIER = @pUserId
    FROM T_ORARENDIORA_OSSZES oo
    WHERE oo.C_INTEZMENYID = @pIntezmenyId
      AND oo.C_TANEVID = @pTanevId
      AND oo.TOROLT = 'F'
      AND EXISTS (
        SELECT TOP 1 ID 
        FROM T_FOGLALKOZAS_OSSZES fg 
        WHERE fg.ID = oo.C_FOGLALKOZASID
          AND fg.C_INTEZMENYID = @pIntezmenyId
          AND fg.C_TANEVID = @pTanevId
          AND fg.TOROLT = 'F'
          AND fg.C_IMPORTALT = 'T'
    )

    UPDATE tao SET 
       tao.C_FOGLALKOZASID = NULL
      ,tao.SERIAL = tao.SERIAL + 1
      ,tao.LASTCHANGED = @lastChangedDateTime
      ,tao.MODIFIER = @pUserId
    FROM T_TANITASIORA_OSSZES tao
    WHERE tao.C_INTEZMENYID = @pIntezmenyId
      AND tao.C_TANEVID = @pTanevId
      AND tao.TOROLT = 'F'
      AND EXISTS (
        SELECT TOP 1 ID 
        FROM T_FOGLALKOZAS_OSSZES fg 
        WHERE fg.ID = tao.C_FOGLALKOZASID
          AND fg.C_INTEZMENYID = @pIntezmenyId
          AND fg.C_TANEVID = @pTanevId
          AND fg.TOROLT = 'F'
          AND fg.C_IMPORTALT = 'T'
    )

  END

  --NOTE: A törlés azért false, mert a T_TANTARGY_OSSZES és a T_OSZTALYCSOPORT_OSSZES view-ból nem törlünk importnál!
  EXECUTE uspDynamicImportJsonSplit @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @pImportJson, @pIsTorles = 0, @pIsSubTable = 0, @pTableNameList = @tableNameList

  --NOTE: Osztály temp tábla incializálása
  CREATE TABLE #OsztalyTempTable (
     ID int
    ,C_KETTANNYELVU char(1)
    ,C_NEMZETISEGI char(1)
    ,C_NYELVIELOKESZITO char(1)
    ,C_SPORT char(1)

    ,C_ALINTEZMENYID int
    ,C_ALTANEVID int
    ,TOROLT char(1)
    ,SERIAL int
    ,LASTCHANGED datetime
    ,CREATED datetime
    ,MODIFIER int
    ,CREATOR int
    ,ELOZOTANEVIREKORDID int
    ,Operation int
  )

  INSERT INTO #OsztalyTempTable 
  SELECT
     ocs.ID
    ,o.C_KETTANNYELVU
    ,o.C_NEMZETISEGI
    ,o.C_NYELVIELOKESZITO
    ,o.C_SPORT

    ,o.C_ALINTEZMENYID
    ,o.C_ALTANEVID
    ,o.TOROLT
    ,o.SERIAL
    ,o.LASTCHANGED
    ,o.CREATED
    ,o.MODIFIER
    ,o.CREATOR
    ,o.ELOZOTANEVIREKORDID
    ,o.Operation
  FROM OPENJSON(@pImportJson, N'lax $.ImportJson.T_OSZTALY_OSSZES')
  WITH (
     ID int '$.ID'
    ,C_KETTANNYELVU char(1) '$.C_KETTANNYELVU'
    ,C_NEMZETISEGI char(1) '$.C_NEMZETISEGI'
    ,C_NYELVIELOKESZITO char(1) '$.C_NYELVIELOKESZITO'
    ,C_SPORT char(1) '$.C_SPORT'

    ,C_ALINTEZMENYID int '$.C_INTEZMENYID'
    ,C_ALTANEVID int '$.C_TANEVID'
    ,TOROLT char(1) '$.TOROLT'
    ,SERIAL int '$.SERIAL'
    ,LASTCHANGED datetime '$.LASTCHANGED'
    ,CREATED datetime '$.CREATED'
    ,MODIFIER int '$.MODIFIER'
    ,CREATOR int '$.CREATOR'
    ,ELOZOTANEVIREKORDID int '$.ELOZOTANEVIREKORDID'
    ,Operation int '$.Operation'

    ,OsztalyCsoportNev nvarchar(255) '$.OsztalyCsoportNev'
  ) o
    LEFT JOIN T_OSZTALYCSOPORT_OSSZES ocs ON
      --NOTE: A leküldött adat már teljesen jól formázott, de a db-ben lehetnek rossz adatok. Az összehasonlításhoz ezt csináljuk:
      --      Kisbetűsítjük -> Lecseréljük a NO BREAK SPACE-eket, SPACE-ekre -> Lecseréljük az összes többszörös szóközt egyre -> Trimmelünk
      REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(ocs.C_NEV),CHAR(160),CHAR(32)),CHAR(9),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)) = LOWER(o.OsztalyCsoportNev)
      AND ocs.C_INTEZMENYID = @pIntezmenyId
      AND ocs.C_TANEVID = @pTanevId
      AND ocs.TOROLT = 'F'
      AND o.ID IS NULL

  --NOTE: Csoport temp tábla incializálása
  CREATE TABLE #CsoportTempTable (
     ID int
    ,C_TIPUSA int
    ,C_OSZTALYBONTASID int

    ,C_ALINTEZMENYID int
    ,C_ALTANEVID int
    ,TOROLT char(1)
    ,SERIAL int
    ,LASTCHANGED datetime
    ,CREATED datetime
    ,MODIFIER int
    ,CREATOR int
    ,ELOZOTANEVIREKORDID int
    ,Operation int
  )

  INSERT INTO #CsoportTempTable 
  SELECT
     ocs.ID
    ,cs.C_TIPUSA
    ,ob.ID

    ,cs.C_ALINTEZMENYID
    ,cs.C_ALTANEVID
    ,cs.TOROLT
    ,cs.SERIAL
    ,cs.LASTCHANGED
    ,cs.CREATED
    ,cs.MODIFIER
    ,cs.CREATOR
    ,cs.ELOZOTANEVIREKORDID
    ,cs.Operation
  FROM OPENJSON(@pImportJson, N'lax $.ImportJson.T_CSOPORT_OSSZES')
  WITH (
     ID int '$.ID'
    ,C_TIPUSA int '$.C_TIPUSA'
    ,C_OSZTALYBONTASID int '$.C_OSZTALYBONTASID'

    ,C_ALINTEZMENYID int '$.C_INTEZMENYID'
    ,C_ALTANEVID int '$.C_TANEVID'
    ,TOROLT char(1) '$.TOROLT'
    ,SERIAL int '$.SERIAL'
    ,LASTCHANGED datetime '$.LASTCHANGED'
    ,CREATED datetime '$.CREATED'
    ,MODIFIER int '$.MODIFIER'
    ,CREATOR int '$.CREATOR'
    ,ELOZOTANEVIREKORDID int '$.ELOZOTANEVIREKORDID'
    ,Operation int '$.Operation'

    ,OsztalyCsoportNev nvarchar(255) '$.OsztalyCsoportNev'
    ,OsztalybontasNev nvarchar(255) '$.OsztalybontasNev'
  ) cs
    LEFT JOIN T_OSZTALYCSOPORT_OSSZES ocs ON
      --NOTE: A leküldött adat már teljesen jól formázott, de a db-ben lehetnek rossz adatok. Az összehasonlításhoz ezt csináljuk:
      --      Kisbetűsítjük -> Lecseréljük a NO BREAK SPACE-eket, SPACE-ekre -> Lecseréljük az összes többszörös szóközt egyre -> Trimmelünk
      REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(ocs.C_NEV),CHAR(160),CHAR(32)),CHAR(9),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)) = LOWER(cs.OsztalyCsoportNev)
      AND ocs.C_INTEZMENYID = @pIntezmenyId
      AND ocs.C_TANEVID = @pTanevId
      AND ocs.TOROLT = 'F'
      AND cs.ID IS NULL
    LEFT JOIN T_OSZTALYCSOPORT_OSSZES ob ON
      --NOTE: A leküldött adat már teljesen jól formázott, de a db-ben lehetnek rossz adatok. Az összehasonlításhoz ezt csináljuk:
      --      Kisbetűsítjük -> Lecseréljük a NO BREAK SPACE-eket, SPACE-ekre -> Lecseréljük az összes többszörös szóközt egyre -> Trimmelünk
      REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(ob.C_NEV),CHAR(160),CHAR(32)),CHAR(9),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)) = LOWER(cs.OsztalybontasNev)
      AND ob.C_INTEZMENYID = @pIntezmenyId
      AND ob.C_TANEVID = @pTanevId
      AND ob.TOROLT = 'F'
      AND cs.ID IS NULL

  --NOTE: Foglalkozas temp tábla incializálása
  CREATE TABLE #FoglalkozasTempTable (
     ID int
    ,C_TANARID int
    ,C_TANTARGYID int
    ,C_OSZTALYCSOPORTID int
    ,C_FOGLALKOZASTIPUSA int
    ,C_ORASZAM numeric(10,2)
    ,C_NEV nvarchar(255)
    ,C_ERTEKELESKELL char(1)
    ,C_MULASZTASKELL char(1)
    ,C_TANARFELVEHETI char(1)
    ,C_TULORASZAM numeric(10,2)
    ,C_ISOSSZEVONTORA char(1)
    ,C_ISNEMZETISEGI char(1)
    ,C_MEGBIZASIORASZAM numeric(10,2)

    ,C_IMPORTALT char(1)
    ,C_INTEZMENYID int
    ,C_TANEVID int
    ,TOROLT char(1)
    ,SERIAL int
    ,LASTCHANGED datetime
    ,CREATED datetime
    ,MODIFIER int
    ,CREATOR int
    ,ELOZOTANEVIREKORDID int
    ,Operation int
  )

  INSERT INTO #FoglalkozasTempTable 
  SELECT
     fg.ID
    ,fg.C_TANARID
    ,tt.ID
    ,ocs.ID
    ,fg.C_FOGLALKOZASTIPUSA
    ,fg.C_ORASZAM
    ,fg.C_NEV
    ,fg.C_ERTEKELESKELL
    ,fg.C_MULASZTASKELL
    ,fg.C_TANARFELVEHETI
    ,fg.C_TULORASZAM
    ,fg.C_ISOSSZEVONTORA
    ,fg.C_ISNEMZETISEGI
    ,fg.C_MEGBIZASIORASZAM

    ,fg.C_IMPORTALT
    ,fg.C_INTEZMENYID
    ,fg.C_TANEVID
    ,fg.TOROLT
    ,fg.SERIAL
    ,fg.LASTCHANGED
    ,fg.CREATED
    ,fg.MODIFIER
    ,fg.CREATOR
    ,fg.ELOZOTANEVIREKORDID
    ,fg.Operation
  FROM OPENJSON(@pImportJson, N'lax $.ImportJson.T_FOGLALKOZAS_OSSZES')
  WITH (
     ID int '$.ID'
    ,C_TANARID int '$.C_TANARID'
    ,C_FOGLALKOZASTIPUSA int '$.C_FOGLALKOZASTIPUSA'
    ,C_ORASZAM numeric(10,2) '$.C_ORASZAM'
    ,C_NEV nvarchar(255) '$.C_NEV'
    ,C_ERTEKELESKELL char(1) '$.C_ERTEKELESKELL'
    ,C_MULASZTASKELL char(1) '$.C_MULASZTASKELL'
    ,C_TANARFELVEHETI char(1) '$.C_TANARFELVEHETI'
    ,C_TULORASZAM numeric(10,2) '$.C_TULORASZAM'
    ,C_ISOSSZEVONTORA char(1) '$.C_ISOSSZEVONTORA'
    ,C_ISNEMZETISEGI char(1) '$.C_ISNEMZETISEGI'
    ,C_MEGBIZASIORASZAM numeric(10,2) '$.C_MEGBIZASIORASZAM'

    ,C_IMPORTALT char(1) '$.C_IMPORTALT'
    ,C_INTEZMENYID int '$.C_INTEZMENYID'
    ,C_TANEVID int '$.C_TANEVID'
    ,TOROLT char(1) '$.TOROLT'
    ,SERIAL int '$.SERIAL'
    ,LASTCHANGED datetime '$.LASTCHANGED'
    ,CREATED datetime '$.CREATED'
    ,MODIFIER int '$.MODIFIER'
    ,CREATOR int '$.CREATOR'
    ,ELOZOTANEVIREKORDID int '$.ELOZOTANEVIREKORDID'
    ,Operation int '$.Operation'

    ,TantargyNev nvarchar(255) '$.TantargyNev'
    ,OsztalyCsoportNev nvarchar(255) '$.OsztalyCsoportNev'
  ) fg
    LEFT JOIN T_TANTARGY_OSSZES tt ON
      --NOTE: A leküldött adat már teljesen jól formázott, de a db-ben lehetnek rossz adatok. Az összehasonlításhoz ezt csináljuk:
      --      Kisbetűsítjük -> Lecseréljük a NO BREAK SPACE-eket, SPACE-ekre -> Lecseréljük az összes többszörös szóközt egyre -> Trimmelünk
      REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(tt.C_NEV),CHAR(160),CHAR(32)),CHAR(9),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)) = LOWER(fg.TantargyNev)
      AND tt.C_INTEZMENYID = @pIntezmenyId
      AND tt.C_TANEVID = @pTanevId
      AND tt.TOROLT = 'F'
    LEFT JOIN T_OSZTALYCSOPORT_OSSZES ocs ON
      --NOTE: A leküldött adat már teljesen jól formázott, de a db-ben lehetnek rossz adatok. Az összehasonlításhoz ezt csináljuk:
      --      Kisbetűsítjük -> Lecseréljük a NO BREAK SPACE-eket, SPACE-ekre -> Lecseréljük az összes többszörös szóközt egyre -> Trimmelünk
      REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(ocs.C_NEV),CHAR(160),CHAR(32)),CHAR(9),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)) = LOWER(fg.OsztalyCsoportNev)
      AND ocs.C_INTEZMENYID = @pIntezmenyId
      AND ocs.C_TANEVID = @pTanevId
      AND ocs.TOROLT = 'F'

  --Osztályok beszúrása
  SET @actualJson = ' { "ImportJson":{ "T_OSZTALY_OSSZES":' + (
    SELECT
       o.ID
      ,o.C_KETTANNYELVU
      ,o.C_NEMZETISEGI
      ,o.C_NYELVIELOKESZITO
      ,o.C_SPORT

      ,o.C_ALINTEZMENYID
      ,o.C_ALTANEVID
      ,o.TOROLT
      ,o.SERIAL
      ,o.LASTCHANGED
      ,o.CREATED
      ,o.MODIFIER
      ,o.CREATOR
      ,o.ELOZOTANEVIREKORDID
      ,o.Operation

      -- Default NA értékek beállítása
      ,5484 AS C_AGAZAT
      ,6108 AS C_RESZSZAKKEPESITES
      ,5527 AS C_SZAKKEPESITES
      ,6084 AS C_SZAKMACSOPORT
      ,7920 AS C_AGAZATUJSZKTTIPUSID
      ,8122 AS C_SZAKMAIRANYTIPUSID
      ,7946 AS C_SZAKMATIPUSID
      ,8493 AS C_SZAKIRANYNKTTIPUSID
      ,8464 AS C_SZAKKEPESITESNKTTIPUSID
      ,8459 AS C_TANULMANYITERULETNKTTIPUSID
    FROM #OsztalyTempTable AS o
    FOR JSON PATH,INCLUDE_NULL_VALUES
  )

  SET @actualJson = @actualJson + ' } }'

  --NOTE: A törlés azért false, mert a T_OSZTALY_OSSZES view-ból nem törlünk importnál!
  EXECUTE uspDynamicImport @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @actualJson, @pIsTorles = 0, @pIsSubTable = 1

  --Csoportok beszúrása
  SET @actualJson = ' { "ImportJson":{ "T_CSOPORT_OSSZES":' + (
    SELECT
       cs.ID
      ,cs.C_TIPUSA
      ,cs.C_OSZTALYBONTASID

      ,cs.C_ALINTEZMENYID
      ,cs.C_ALTANEVID
      ,cs.TOROLT
      ,cs.SERIAL
      ,cs.LASTCHANGED
      ,cs.CREATED
      ,cs.MODIFIER
      ,cs.CREATOR
      ,cs.ELOZOTANEVIREKORDID
      ,cs.Operation
    FROM #CsoportTempTable AS cs
    FOR JSON PATH,INCLUDE_NULL_VALUES
  )

  SET @actualJson = @actualJson + ' } }'

  --NOTE: A törlés azért false, mert a T_CSOPORT_OSSZES view-ból nem törlünk importnál!
  EXECUTE uspDynamicImport @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @actualJson, @pIsTorles = 0, @pIsSubTable = 1

  --Frissítjük az osztálybontott csoportok adatait az osztály adataival
  UPDATE ocs
  SET
     ocs.C_EVFOLYAMTIPUSA = ocsParent.C_EVFOLYAMTIPUSA
    ,ocs.C_FELADATELLATASIHELYID = ocsParent.C_FELADATELLATASIHELYID
    ,ocs.SERIAL = ocs.SERIAL + 1
    ,ocs.LASTCHANGED = GETDATE()
    ,ocs.MODIFIER = @pUserId
  FROM T_OSZTALYCSOPORT_OSSZES ocs
    INNER JOIN #CsoportTempTable cs ON ocs.ID = cs.ID AND cs.C_OSZTALYBONTASID IS NOT NULL
    INNER JOIN T_OSZTALYCSOPORT_OSSZES ocsParent ON cs.C_OSZTALYBONTASID = ocsParent.ID
  WHERE ocs.C_INTEZMENYID = @pIntezmenyId
    AND ocs.C_TANEVID = @pTanevId
    AND ocs.TOROLT = 'F'

  --Foglalkozások beszúrása
  SET @actualJson = ' { "ImportJson":{ "T_FOGLALKOZAS_OSSZES":' + (
    SELECT
       fg.ID
      ,fg.C_TANARID
      ,fg.C_TANTARGYID
      ,fg.C_OSZTALYCSOPORTID
      ,fg.C_FOGLALKOZASTIPUSA
      ,fg.C_ORASZAM
      ,fg.C_NEV
      ,fg.C_ERTEKELESKELL
      ,fg.C_MULASZTASKELL
      ,fg.C_TANARFELVEHETI
      ,fg.C_TULORASZAM
      ,fg.C_ISOSSZEVONTORA
      ,fg.C_ISNEMZETISEGI
      ,fg.C_MEGBIZASIORASZAM

      ,fg.C_IMPORTALT
      ,fg.C_INTEZMENYID
      ,fg.C_TANEVID
      ,fg.TOROLT
      ,fg.SERIAL
      ,fg.LASTCHANGED
      ,fg.CREATED
      ,fg.MODIFIER
      ,fg.CREATOR
      ,fg.ELOZOTANEVIREKORDID
      ,fg.Operation
    FROM #FoglalkozasTempTable AS fg
    FOR JSON PATH,INCLUDE_NULL_VALUES
  )

  SET @actualJson = @actualJson + ' } }'

  EXECUTE uspDynamicImport @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @actualJson, @pIsTorles = @pIsTorles, @pIsSubTable = 0
END

GO

