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

CREATE PROCEDURE [dbo].[sp_ImportASC]
  @importXml xml,
  @regiTorlese bit,
  @ervenyessegFilebanSzerepel bit,
  @feladatellatasiHelyId int,
  @tanevId int,
  @intezmenyId int,
  @userId int
AS
BEGIN
  SET NOCOUNT ON
  SET XACT_ABORT ON
  DECLARE @mukodsesiHely int
 
  DECLARE @osztalyCsoport table (
    osztalyCsoportID nvarchar(32),
    nev nvarchar(255),
    osztalyCsoport varchar(2),
    id int
  )
  
  INSERT INTO @osztalyCsoport (osztalyCsoportID, nev, osztalyCsoport)
  SELECT 
    sor.value('(OsztalyId)[1]', 'nvarchar(32)') AS osztalcsoportId,
    sor.value('(Nev)[1]', 'varchar(255)') AS nev,
    'O'
  FROM @importXml.nodes('/AscImport/OsztalyLista/Osztaly') as sorok(sor)
  INSERT INTO @osztalyCsoport (osztalyCsoportID, nev, osztalyCsoport)
  SELECT 
    sor.value('(Id)[1]', 'nvarchar(32)') AS osztalcsoportId,
    sor.value('(Nev)[1]', 'varchar(255)') AS nev,
    'CS'
  FROM @importXml.nodes('/AscImport/CsoportLista/Csoport') as sorok(sor)
  
  UPDATE x 
  SET x.id = ocs.ID
  FROM @osztalyCsoport x
    INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON x.nev = ocs.C_NEV AND ocs.C_TANEVID = @tanevId      
  WHERE ocs.TOROLT = 'F'
  
  DECLARE @tantargy table (
    tantargyId nvarchar(32),
    nev nvarchar(100),
    osztalyCsoport varchar(2),
    id int
  )
  
  INSERT INTO @tantargy (tantargyId, nev)
  SELECT 
    sor.value('(TantargyId)[1]', 'nvarchar(32)') AS tantargyId,
    sor.value('(Nev)[1]', 'varchar(100)') AS nev
  FROM @importXml.nodes('/AscImport/TantargyLista/Tantargy') as sorok(sor)
  
  UPDATE x 
  SET x.id = t.ID
  FROM @tantargy x
    INNER JOIN T_TANTARGY_OSSZES t ON x.nev = t.C_NEV AND t.C_TANEVID = @tanevId      
  WHERE t.TOROLT = 'F'
  
  /* TEREM temp TÁBLÁBA */
  DECLARE @terem TABLE (
    teremId nvarchar(32),
    nev nvarchar(255),
    kapacitas int,
    id int
  ) 
  INSERT INTO @terem (teremId, nev, kapacitas)
  SELECT 
    sor.value('(TeremId)[1]', 'nvarchar(32)') AS teremId,  
    sor.value('(Nev)[1]', 'nvarchar(255)') AS nev,
    sor.value('(Kapacitas)[1]', 'int') AS kapacitas
  FROM @importXml.nodes('/AscImport/TeremLista/Terem') as sorok(sor)
  UPDATE x 
  SET x.id = t.ID
  FROM @terem x
    INNER JOIN T_TEREM_OSSZES t ON x.nev = t.C_NEV AND t.C_TANEVID = @tanevId
	WHERE t.TOROLT = 'F'
  
  /* HETIREND temp TÁBLÁBA */
  DECLARE @hetirend TABLE (
    hetirendId nvarchar(32),
    nev nvarchar(255),
    id int
  ) 
  INSERT INTO @hetirend (hetirendId, nev)
  SELECT 
    sor.value('(HetirendId)[1]', 'nvarchar(32)') AS hetirendId,
    sor.value('(Nev)[1]', 'nvarchar(255)') AS nev
  FROM @importXml.nodes('/AscImport/HetirendLista/Hetirend') as sorok(sor)
  UPDATE x 
  SET x.id = d.ID
  FROM @hetirend x
    INNER JOIN T_DICTIONARYITEMBASE_OSSZES d ON x.nev = d.C_NAME AND d.C_TANEVID = @tanevId AND C_TYPE = 'HetiRendTipus' AND d.TOROLT = 'F'
	
  /* CSENGETÉSIREND temp TÁBLÁBA */
  DECLARE @csengetesiRendOra TABLE (
    csengetesiRendOraId nvarchar(32),
    starttime time,
    endtime time,
    sorszam int,
    id int
  ) 
  
  INSERT INTO @csengetesiRendOra (csengetesiRendOraId, starttime, endtime, sorszam)
  SELECT 
    sor.value('(CsengetesiRendOraId)[1]', 'nvarchar(32)') AS csengetesiRendOraId,
    sor.value('(Starttime)[1]', 'time') AS starttime,
    sor.value('(Endtime)[1]', 'time') AS endtime,
    sor.value('(Sorszam)[1]', 'int') AS sorszam
  FROM @importXml.nodes('/AscImport/CsengetesiRendOraLista/CsengetesiRendOra') as sorok(sor)
  UPDATE x 
  SET x.id = cs.ID
  FROM @csengetesiRendOra x
    INNER JOIN T_CSENGETESIRENDORA_OSSZES cs ON x.sorszam = cs.C_ORASZAM AND cs.C_TANEVID = @tanevId
  WHERE cs.C_CSENGETESIRENDID = (SELECT MIN(ID) FROM T_CSENGETESIREND_OSSZES csr WHERE /*csr.C_IMPORTALT = 'T' AND*/ csr.C_TANEVID = @tanevId AND csr.TOROLT = 'F')
  
  DECLARE @tanar TABLE (
    tanarId nvarchar(32),
    nev nvarchar(100),
    id int
  )

  INSERT INTO @tanar (tanarId, nev)
  SELECT 
    sor.value('(Id)[1]', 'nvarchar(32)') AS tanarId,
    sor.value('(Nev)[1]', 'varchar(100)') AS tanarNev
  FROM @importXml.nodes('/AscImport/TanarLista/Tanar') as sorok(sor)
  UPDATE x 
  SET x.id = f.ID
  FROM @tanar x
    INNER JOIN T_FELHASZNALO_OSSZES f ON f.C_NYOMTATASINEV = x.nev AND f.TOROLT = 'F'
  WHERE EXISTS (SELECT 1 FROM T_ALKALMAZOTT_OSSZES a WHERE a.ID = f.ID AND a.C_ALINTEZMENYID = f.C_INTEZMENYID AND a.C_ALTANEVID = f.C_TANEVID AND a.TOROLT = 'F')
    AND C_TANEVID = @tanevId
    AND C_INTEZMENYID = @intezmenyId
	
  /* ÓRARENDIÓRA temp TÁBLÁBA */
  DECLARE @orarendiOra TABLE (
    teremID nvarchar(32),
    tanarID nvarchar(32),
    hetNapja nvarchar(10),
    hetirendID nvarchar(32),
    osztalyID nvarchar(32),
    csoportID nvarchar(32),
    tantargyID nvarchar(32),
    hetiOraszam float,
    sorszam int,
    ervenyessegKezdete datetime,
    ervenyessegVege datetime
  ) 
  
  INSERT INTO @orarendiOra (
    teremID, 
    tanarID,
    hetNapja, 
    hetirendID, 
    osztalyID, 
    csoportID, 
    tantargyID, 
    hetiOraszam, 
    sorszam,
    ervenyessegKezdete,
    ervenyessegVege
  )
  SELECT 
    sor.value('(TeremId)[1]', 'nvarchar(32)') AS teremID,
    sor.value('(TanarId)[1]', 'nvarchar(32)') AS tanarID,   
    sor.value('(HetNapja)[1]', 'nvarchar(10)') AS hetNapja,
    sor.value('(HetirendId)[1]', 'nvarchar(32)') AS hetirendID,
    NULLIF(sor.value('(OsztalyId)[1]', 'nvarchar(32)'), '') AS osztalyID,
    NULLIF(sor.value('(CsoportId)[1]', 'nvarchar(32)'), '') AS csoportID,
    sor.value('(TantargyId)[1]', 'nvarchar(32)') AS tantargyID,
    sor.value('(HetiOraszam)[1]', 'float') AS hetiOraszam,
    sor.value('(Sorszam)[1]', 'int') AS sorszam,
    sor.value('(ErvenyessegKezdete)[1]', 'datetime') AS ervenyessegKezdete,
    IIF(sor.value('(ErvenyessegVege)[1]', 'datetime') = '19000101', NULL, sor.value('(ErvenyessegVege)[1]', 'datetime')) AS ervenyessegVege    
  FROM @importXml.nodes('/AscImport/OrarendiOraLista/OrarendiOra') as sorok(sor)
  
  
  DECLARE 
     @utolsoTannap datetime
    ,@utolsoTannapVegzos datetime
  
  -- Utolsó tanitási nap
  SELECT @utolsoTannap = C_DATUM + 1 
  FROM T_TANEVRENDJE_OSSZES
  WHERE C_NAPTIPUSA = 1395 
    AND C_INTEZMENYID = @intezmenyId 
    AND C_TANEVID = @tanevId
	AND TOROLT = 'F'
  
  -- Utolsó tanitási nap végzősöknek
  SELECT @utolsoTannapVegzos = C_DATUM + 1  
  FROM T_TANEVRENDJE_OSSZES
  WHERE C_NAPTIPUSA = 1402 
    AND C_TANEVID = @tanevId 
    AND C_INTEZMENYID = @intezmenyId 
	AND TOROLT = 'F'
	
  UPDATE o
  SET ervenyessegVege = CASE WHEN ocsk.C_VEGZOSEVFOLYAM = 'F' THEN @utolsoTannap ELSE @utolsoTannapVegzos END
  FROM @orarendiOra o
    INNER JOIN @osztalyCsoport ocs ON  o.osztalyID = ocs.osztalyCsoportID
    INNER JOIN T_OSZTALYCSOPORT_OSSZES ocsk ON ocs.id = ocsk.ID AND ocsk.TOROLT = 'F'
  WHERE ocs.osztalyCsoport = 'O'
    AND ervenyessegVege IS NULL
	AND ocsk.C_TANEVID = @tanevId
    
  UPDATE @orarendiOra 
  SET ervenyessegVege = @utolsoTannap 
  WHERE ervenyessegVege IS NULL
  
  DECLARE @linkTable TABLE (
    insertedID int, tempId nvarchar(32), act nvarchar(20)
  )
  
  BEGIN TRY
    BEGIN TRANSACTION
      SELECT @mukodsesiHely = MIN(ID) FROM T_MUKODESIHELY_OSSZES WHERE C_TANEVID = @tanevId
      
      MERGE T_TEREM_OSSZES trg
        USING (
		  SELECT * FROM @terem WHERE nev <> '-') src ON src.ID = trg.ID AND trg.C_TANEVID = @tanevId AND trg.TOROLT = 'F'
        --WHEN MATCHED THEN
        --  UPDATE SET
        --     trg.C_KAPACITAS = src.kapacitas
        --     trg.SERIAL = trg.SERIAL + 1
        --    ,trg.LASTCHANGED = GETDATE()
        --    ,trg.MODIFIER = @userId
        WHEN NOT MATCHED THEN
          INSERT (
             C_JELLEG
            ,C_NEV
            ,C_MUKODESIHELYID
            ,C_INTEZMENYID
            ,C_TANEVID
            ,MODIFIER
            ,CREATOR
          ) VALUES (
             181 -- osztályterem
            ,src.nev
            ,@mukodsesiHely
            ,@intezmenyId
            ,@tanevId
            ,@userId
            ,@userId
          )
      OUTPUT INSERTED.ID, src.teremId, $action
      INTO @linkTable(insertedID, tempId, act);
      
      UPDATE x 
      SET x.id = y.insertedID
      FROM @terem x
        INNER JOIN @linkTable y ON x.teremId = y.tempId
      WHERE x.ID IS NULL
      DELETE FROM @linktable
      
      SET @feladatellatasiHelyId = ISNULL(@feladatellatasiHelyId, 
        (SELECT MIN(ID) 
         FROM T_FELADATELLATASIHELY_OSSZES 
         WHERE C_INTEZMENYID = @intezmenyID 
           AND C_TANEVID = @tanevID)
      )    
      
      MERGE T_OSZTALYCSOPORT_OSSZES trg
        USING (SELECT * FROM @osztalyCsoport WHERE ID IS NULL) src ON 1 = 2
        WHEN NOT MATCHED THEN
          INSERT (
             C_MEGJEGYZES
            ,C_NEV
            ,C_VEGZOSEVFOLYAM
            ,C_EVFOLYAMTIPUSA
            ,C_IMPORTALT
            ,C_TERVEZETTLETSZAM
            ,C_TEREMID
            ,C_FELADATELLATASIHELYID
            ,C_INTEZMENYID
            ,C_TANEVID
            ,MODIFIER
            ,CREATOR
          ) VALUES (
             NULL           -- C_MEGJEGYZES - nvarchar(255)
            ,src.nev                   -- C_NEV - nvarchar(255)
            ,'F'       -- C_VEGZOSEVFOLYAM - char(1)
            ,1296        -- C_EVFOLYAMTIPUSA - int
            ,'T'             -- C_IMPORTALT - char(1)
            ,NULL      -- C_TERVEZETTLETSZAM - int
            ,NULL             -- C_TEREMID - int
            ,@feladatellatasiHelyId  -- C_FELADATELLATASIHELYID - int
            ,@intezmenyId           -- C_INTEZMENYID - int
            ,@tanevId               -- C_TANEVID - int
            ,@userId                -- MODIFIER - int
            ,@userId                 -- CREATOR - int
          )
      OUTPUT INSERTED.ID, src.osztalycsoportId, $action
      INTO @linkTable(insertedID, tempId, act);
        
      UPDATE x 
      SET x.id = y.insertedID
      FROM @osztalyCsoport x
        INNER JOIN @linkTable y ON x.osztalycsoportId = y.tempId
      WHERE x.ID IS NULL
	  
      INSERT INTO T_OSZTALY_OSSZES (
         ID
        ,C_KEPZESIFORMA
        ,C_OSZTALYNAPLOLEIRASA
        ,C_OSZTALYNAPLOMEGNYITASA
        ,C_OSZTALYNAPLOZARASA
        ,C_OSZTALYFONOKID
        ,C_OFOHELYETTESID
        ,C_TANTERVID
        ,C_ALINTEZMENYID
        ,C_ALTANEVID
        ,MODIFIER
        ,CREATOR
      ) SELECT 
         x.id   AS ID                      -- ID - int
        ,1096   AS C_KEPZESIFORMA          -- C_KEPZESIFORMA - int
        ,NULL AS C_OSZTALYNAPLOLEIRASA  -- C_OSZTALYNAPLOLEIRASA - nvarchar(MAX)
        ,NULL AS C_OSZTALYNAPLOMEGNYITASA -- C_OSZTALYNAPLOMEGNYITASA - datetime
        ,NULL AS C_OSZTALYNAPLOZARASA   -- C_OSZTALYNAPLOZARASA - datetime
        ,NULL AS C_OSZTALYFONOKID       -- C_OSZTALYFONOKID - int
        ,NULL AS C_OFOHELYETTESID       -- C_OFOHELYETTESID - int
        ,NULL AS C_TANTERVID            -- C_TANTERVID - int
        ,@intezmenyId   AS C_ALINTEZMENYID         -- C_ALINTEZMENYID - int
        ,@tanevId   AS C_ALTANEVID             -- C_ALTANEVID - int
        ,@userId AS MODIFIER               -- MODIFIER - int
        ,@userId AS CREATOR                -- CREATOR - int
      FROM @osztalyCsoport x
        INNER JOIN @linktable y ON x.id = y.insertedID
      WHERE osztalyCsoport = 'O'
	  
      INSERT INTO T_CSOPORT_OSSZES (
         ID
        ,C_TIPUSA
        ,C_CSOPORTNAPLOLEIRAS
        ,C_CSOPORTNAPLOMEGNYITASA
        ,C_CSOPORTNAPLOZARASA
        ,C_CSOPORTVEZETOID
        ,C_OSZTALYBONTASID
        ,C_ALINTEZMENYID
        ,C_ALTANEVID
        ,MODIFIER
        ,CREATOR
      ) SELECT 
         x.id   AS ID                      -- ID - int
        ,1031 AS C_TIPUSA               -- C_TIPUSA - int
        ,NULL AS C_CSOPORTNAPLOLEIRAS   -- C_CSOPORTNAPLOLEIRAS - nvarchar(MAX)
        ,NULL AS C_CSOPORTNAPLOMEGNYITASA -- C_CSOPORTNAPLOMEGNYITASA - datetime
        ,NULL AS C_CSOPORTNAPLOZARASA   -- C_CSOPORTNAPLOZARASA - datetime
        ,NULL AS C_CSOPORTVEZETOID      -- C_CSOPORTVEZETOID - int
        ,NULL AS C_OSZTALYBONTASID      -- C_OSZTALYBONTASID - int
        ,@intezmenyId   AS C_ALINTEZMENYID         -- C_ALINTEZMENYID - int
        ,@tanevId   AS C_ALTANEVID             -- C_ALTANEVID - int
        ,@userId AS MODIFIER               -- MODIFIER - int
        ,@userId AS CREATOR                -- CREATOR - int
      FROM @osztalyCsoport x
        INNER JOIN @linktable y ON x.id = y.insertedID
      WHERE osztalyCsoport = 'CS'
            
      DELETE FROM @linktable
      
      MERGE T_TANTARGY_OSSZES trg
        USING (SELECT * FROM @tantargy WHERE ID IS NULL) src ON 1 = 2
        WHEN NOT MATCHED THEN
          INSERT (
             C_GYAKORLATI
            ,C_NEV
            ,C_ROVIDNEV
            ,C_TARGYKATEGORIA
            ,C_ALTANTARGYKENTNYOMTATVANYBAN
            ,C_NEVNYOMTATVANYBAN
            ,C_TANORANKIVULI
            ,C_IMPORTALT
            ,C_FOTARGYE
            ,C_FOTARGYID
            ,C_INTEZMENYID
            ,C_TANEVID
            ,MODIFIER
            ,CREATOR
          ) VALUES (
             'F'  -- C_GYAKORLATI - char(1)
            ,nev   -- C_NEV - nvarchar(255)
            ,LEFT(nev, 20)   -- C_ROVIDNEV - nvarchar(20)
            ,1197  -- C_TARGYKATEGORIA - int
            ,NULL  -- C_ALTANTARGYKENTNYOMTATVANYBAN - char(1)
            ,NULL  -- C_NEVNYOMTATVANYBAN - nvarchar(255)
            ,'F'   -- C_TANORANKIVULI - char(1)
            ,'T'   -- C_IMPORTALT - char(1)
            ,'F'   -- C_FOTARGYE - char(1)
            ,NULL  -- C_FOTARGYID - int
            ,@intezmenyId     -- C_INTEZMENYID - int
            ,@tanevId     -- C_TANEVID - int
            ,@userId  -- MODIFIER - int
            ,@userId  -- CREATOR - int
          )
      OUTPUT INSERTED.ID, src.tantargyId, $action
      INTO @linkTable(insertedID, tempId, act);
        
      UPDATE x 
      SET x.id = y.insertedID
      FROM @tantargy x
        INNER JOIN @linkTable y ON x.tantargyId = y.tempId
      WHERE x.ID IS NULL
      
      
      DELETE FROM @linktable
      DECLARE @foglalkozas TABLE (
         foglalozasId int IDENTITY(1, 1)
        ,tantargyId int
        ,tanarId int
        ,osztalyCsoportId int
        ,hetiOraszam float
        ,nev nvarchar(255)
        ,id int
      )
      
      INSERT INTO @foglalkozas (
         tantargyId
        ,tanarId
        ,osztalyCsoportId
        ,hetiOraszam
        ,nev
        ,id
      ) SELECT
         tt.ID
        ,fh.ID
        ,ISNULL(cs.ID, o.ID)
        ,oraszam
        ,tt.nev + ' - ' + ISNULL(cs.nev, o.nev) + ' - ' + x.tanar AS nev
        ,x.existItemId AS id
      FROM (
        SELECT 
           NULLIF(sor.value('(osztaly)[1]', 'nvarchar(32)'), '') AS osztaly
          ,NULLIF(sor.value('(csoport)[1]', 'nvarchar(32)'), '') AS csoport
          ,sor.value('(tantargy)[1]', 'nvarchar(32)') AS tantargy
          ,sor.value('(oraszam)[1]', 'float') AS oraszam
          ,sor.value('(tanar)[1]', 'nvarchar(32)') AS tanar
          ,NULLIF(sor.value('(existItemId)[1]', 'nvarchar(32)'), 0) AS existItemId
        FROM @importXml.nodes('/AscImport/TantargyfelosztasLista/Tantargyfelosztas') as sorok(sor)      
      ) x
        LEFT  JOIN @osztalyCsoport cs ON cs.nev = x.csoport
        LEFT  JOIN @osztalyCsoport o ON o.nev = x.osztaly
        INNER JOIN @tantargy tt ON tt.nev = x.tantargy
        INNER JOIN T_FELHASZNALO_OSSZES fh ON fh.C_NYOMTATASINEV = x.tanar AND fh.C_TANEVID = @tanevId AND fh.TOROLT = 'F'
      WHERE EXISTS (SELECT 1 FROM T_ALKALMAZOTT_OSSZES a WHERE a.ID = fh.ID AND a.C_ALTANEVID = fh.C_TANEVID AND a.TOROLT = 'F')  
      
      
      /* Az importtal bekerült foglalkozások beszúrása */
      MERGE T_FOGLALKOZAS_OSSZES trg
        USING (select * FROM @foglalkozas WHERE ID IS NULL) src ON 1 = 2
        WHEN NOT MATCHED THEN
          INSERT (
             C_FOGLALKOZASTIPUSA
            ,C_ORASZAM
            ,C_NEV
            ,C_ERTEKELESKELL
            ,C_MULASZTASKELL
            ,C_TANARFELVEHETI
            ,C_IMPORTALT
            ,C_TANTARGYID
            ,C_OSZTALYCSOPORTID
            ,C_INTEZMENYID
            ,C_TANEVID
            ,MODIFIER
            ,CREATOR
          ) VALUES (
             1338       -- C_FOGLALKOZASTIPUSA - int
            ,hetiOraszam       -- C_ORASZAM - numeric(10, 2)
            ,nev    -- C_NEV - nvarchar(255)
            ,'T'    -- C_ERTEKELESKELL - char(1)
            ,'T'    -- C_MULASZTASKELL - char(1)
            ,'T'    -- C_TANARFELVEHETI - char(1)
            ,'T'    -- C_IMPORTALT - char(1)
            ,tantargyId    -- C_TANTARGYID - int
            ,osztalyCsoportId    -- C_OSZTALYCSOPORTID - int
            ,@intezmenyId     -- C_INTEZMENYID - int
            ,@tanevId     -- C_TANEVID - int
            ,@userId  -- MODIFIER - int
            ,@userId  -- CREATOR - int
          )
      OUTPUT INSERTED.ID, src.foglalozasId, $action
      INTO @linkTable(insertedID, tempId, act);
      
      UPDATE x 
      SET x.id = y.insertedID
      FROM @foglalkozas x
        INNER JOIN @linkTable y ON x.foglalozasId = y.tempId
      WHERE x.ID IS NULL
      
      DELETE FROM @linktable
      
      INSERT INTO T_FOGLALKOZASOK_TANAROK (
         C_FOGLALKOZASOKID
        ,C_TANAROKID
      ) SELECT 
         id   AS C_FOGLALKOZASOKID       -- C_FOGLALKOZASOKID - int
        ,tanarId   AS C_TANAROKID        -- C_TANAROKID - int
      FROM @foglalkozas f
      WHERE id IS NOT NULL
        AND NOT EXISTS (SELECT 1 FROM T_FOGLALKOZASOK_TANAROK ft WHERE f.ID = ft.C_FOGLALKOZASOKID)
      
      /* Az importtal bekerült foglalkozások beszúrása */      
      INSERT INTO @foglalkozas (
         tantargyId
        ,tanarId
        ,osztalyCsoportId
        ,hetiOraszam
        ,nev
        ,id      
      ) SELECT
         tt.id AS tantargyId
        ,a.id AS tanarId
        ,ocs.id AS osztalyCsoportId
        ,COUNT(1) AS hetiOraszam
        ,MIN(tt.nev) + ' - ' + MIN(ocs.nev) + ' - ' + MIN(a.nev) AS nev
        ,MIN(ff.ID) AS id
      FROM @orarendiOra o
        INNER JOIN @tanar a ON a.tanarID = o.tanarID
        INNER JOIN @tantargy tt ON tt.tantargyID = o.tantargyID
        INNER JOIN @osztalyCsoport ocs ON (ocs.osztalyCsoportID = o.CsoportId AND ocs.osztalyCsoport = 'CS') --OR (ocs.osztalyCsoportID = o.OsztalyId AND ocs.osztalyCsoport = 'O')
        LEFT JOIN (
          SELECT f.ID, f.C_TANTARGYID, f.C_OSZTALYCSOPORTID, ft.C_TANAROKID 
          FROM T_FOGLALKOZAS_OSSZES f 
            INNER JOIN T_FOGLALKOZASOK_TANAROK ft ON ft.C_FOGLALKOZASOKID = f.ID
          WHERE f.TOROLT = 'F'
            AND f.C_TANEVID = @tanevId
        ) ff 
          ON ff.C_TANTARGYID = tt.ID  
            AND ff.C_TANAROKID = a.ID 
            AND ff.C_OSZTALYCSOPORTID = ocs.ID 
      GROUP BY tt.id, a.id, ocs.id
	  
      INSERT INTO @foglalkozas (
         tantargyId
        ,tanarId
        ,osztalyCsoportId
        ,hetiOraszam
        ,nev
        ,id      
      ) SELECT
         tt.id AS tantargyId
        ,a.id AS tanarId
        ,ocs.id AS osztalyCsoportId
        ,COUNT(1) AS hetiOraszam
        ,MIN(tt.nev) + ' - ' + MIN(ocs.nev) + ' - ' + MIN(a.nev) AS nev
        ,MIN(ff.ID) AS id
      FROM @orarendiOra o
        INNER JOIN @tanar a ON a.tanarID = o.tanarID
        INNER JOIN @tantargy tt ON tt.tantargyID = o.tantargyID
        INNER JOIN @osztalyCsoport ocs ON (ocs.osztalyCsoportID = o.OsztalyId AND ocs.osztalyCsoport = 'O') AND o.csoportId IS NULL --OR (ocs.osztalyCsoportID = o.OsztalyId AND ocs.osztalyCsoport = 'O')
        LEFT JOIN (
          SELECT f.ID, f.C_TANTARGYID, f.C_OSZTALYCSOPORTID, ft.C_TANAROKID 
          FROM T_FOGLALKOZAS_OSSZES f 
            INNER JOIN T_FOGLALKOZASOK_TANAROK ft ON ft.C_FOGLALKOZASOKID = f.ID
          WHERE f.TOROLT = 'F' AND f.C_TANEVID = @tanevId
        ) ff ON ff.C_TANTARGYID = tt.ID  
          AND ff.C_TANAROKID = a.ID 
          AND ff.C_OSZTALYCSOPORTID = ocs.ID 
      GROUP BY tt.id, a.id, ocs.id
      
      /* Az órarendi órából keletkező foglalkozások beszúrása */
      MERGE T_FOGLALKOZAS_OSSZES trg
        USING (SELECT * FROM @foglalkozas WHERE ID IS NULL) src ON 1 = 2
        WHEN NOT MATCHED THEN
          INSERT (
             C_FOGLALKOZASTIPUSA
            ,C_ORASZAM
            ,C_NEV
            ,C_ERTEKELESKELL
            ,C_MULASZTASKELL
            ,C_TANARFELVEHETI
            ,C_IMPORTALT
            ,C_TANTARGYID
            ,C_OSZTALYCSOPORTID
            ,C_INTEZMENYID
            ,C_TANEVID
            ,MODIFIER
            ,CREATOR
          ) VALUES (
             1338       -- C_FOGLALKOZASTIPUSA - int
            ,hetiOraszam       -- C_ORASZAM - numeric(10, 2)
            ,nev    -- C_NEV - nvarchar(255)
            ,'T'    -- C_ERTEKELESKELL - char(1)
            ,'T'    -- C_MULASZTASKELL - char(1)
            ,'T'    -- C_TANARFELVEHETI - char(1)
            ,'T'    -- C_IMPORTALT - char(1)
            ,tantargyId    -- C_TANTARGYID - int
            ,osztalyCsoportId    -- C_OSZTALYCSOPORTID - int
            ,@intezmenyId     -- C_INTEZMENYID - int
            ,@tanevId     -- C_TANEVID - int
            ,@userId  -- MODIFIER - int
            ,@userId  -- CREATOR - int
          )
      OUTPUT INSERTED.ID, src.foglalozasId, $action
      INTO @linkTable(insertedID, tempId, act);
      
      UPDATE x 
      SET x.id = y.insertedID
      FROM @foglalkozas x
        INNER JOIN @linkTable y ON x.foglalozasId = y.tempId
      WHERE x.ID IS NULL
      
      
      DELETE FROM @linktable
      
      INSERT INTO T_FOGLALKOZASOK_TANAROK (
         C_FOGLALKOZASOKID
        ,C_TANAROKID
      ) SELECT 
         id   AS C_FOGLALKOZASOKID       -- C_FOGLALKOZASOKID - int
        ,tanarId   AS C_TANAROKID        -- C_TANAROKID - int
      FROM @foglalkozas f
      WHERE id IS NOT NULL
        AND NOT EXISTS (SELECT 1 FROM T_FOGLALKOZASOK_TANAROK ft WHERE f.ID = ft.C_FOGLALKOZASOKID)
      
      /* T_HETIRENDTIPUS INSERT */
      SELECT @mukodsesiHely = MIN(ID) FROM T_MUKODESIHELY_OSSZES WHERE C_TANEVID = @tanevId AND TOROLT = 'F'
	  
      MERGE T_DICTIONARYITEMBASE_OSSZES trg
        USING @hetirend src ON src.ID = trg.ID AND trg.C_INTEZMENYID = @intezmenyid AND trg.C_TANEVID = @tanevId AND trg.TOROLT = 'F'
        WHEN NOT MATCHED THEN
          INSERT (
             C_VALUE
            ,C_NAME
            ,C_VISIBLE
            ,C_TYPE
            ,C_INTEZMENYID
            ,C_TANEVID
            ,MODIFIER
            ,CREATOR
          ) VALUES (
             0
            ,src.nev + ' (importálva: ' + CONVERT(varchar(20), GETDATE(), 120) + ')'
            ,'T'
            ,'HetirendTipus'
            ,@intezmenyID
            ,@tanevID
            ,NULL
            ,@userId
          )
      OUTPUT INSERTED.ID, src.hetirendID, $action
      INTO @linkTable(insertedID, tempId, act);
      UPDATE x 
      SET x.id = y.insertedID
      FROM @hetirend x
        INNER JOIN @linkTable y ON x.hetirendId = y.tempId
      WHERE x.ID IS NULL;
	  
      INSERT INTO T_HETIRENDTIPUS_OSSZES (
         ID
        ,C_ALINTEZMENYID
        ,C_ALTANEVID
        ,MODIFIER
        ,CREATOR
      ) SELECT 
         x.ID  AS ID                      -- ID - int
        ,@intezmenyId   AS C_ALINTEZMENYID         -- C_ALINTEZMENYID - int
        ,@tanevId   AS C_ALTANEVID             -- C_ALTANEVID - int
        ,NULL AS MODIFIER               -- MODIFIER - int
        ,@userId AS CREATOR                -- CREATOR - int
      FROM @hetirend x
      WHERE NOT EXISTS (SELECT 1 FROM T_HETIRENDTIPUS_OSSZES ht WHERE ht.ID = x.ID AND C_ALTANEVID = @tanevId AND TOROLT = 'F')
      DECLARE @ids TABLE (
        id int
      )
      DECLARE @ervenyessegKezdete datetime
      
      /* T_ORARENDIORA INSERT */
      IF @regiTorlese = 1 BEGIN
        IF @ervenyessegFilebanSzerepel = 0 BEGIN
        
		      SELECT TOP(1) @ervenyessegKezdete =  ervenyessegKezdete 
          FROM @orarendiOra
		
		      UPDATE T_ORARENDIORA_OSSZES 
            SET  
             C_ORAERVENYESSEGVEGE = @ervenyessegKezdete
    		    ,SERIAL += 1
            ,LASTCHANGED = GETDATE()
            ,MODIFIER = @userId
          WHERE C_ORAERVENYESSEGVEGE > @ervenyessegKezdete
            AND C_TANEVID = @tanevId
            AND C_ORAERVENYESSEGVEGE <> C_ORAERVENYESSEGKEZDETE
            AND TOROLT = 'F'
            AND C_ORAERVENYESSEGKEZDETE < @ervenyessegKezdete
        END
        ELSE BEGIN
          UPDATE T_ORARENDIORA_OSSZES
          SET TOROLT = 'T'
            ,SERIAL += 1
            ,LASTCHANGED = GETDATE()
            ,MODIFIER = @userId
          WHERE TOROLT = 'F'
            AND C_TANEVID = @tanevId
            AND C_ORAERVENYESSEGVEGE <> C_ORAERVENYESSEGKEZDETE
        END
      END
    
      DECLARE @csengetesiRendId int
      SELECT @csengetesiRendId = ID FROM T_CSENGETESIREND_OSSZES WHERE C_AKTIV = 'T' AND C_TANEVID = @tanevId AND TOROLT = 'F'
      
  	  INSERT INTO T_ORARENDIORA_OSSZES (
         C_HETIREND
        ,C_HETNAPJA
        ,C_ORASZAM
        ,C_ORAERVENYESSEGKEZDETE
        ,C_INTEZMENYID
        ,C_TANEVID
        ,C_BONTOTT
        ,C_ORAERVENYESSEGVEGE
        ,C_ORAKEZDETE
        ,C_ORAVEGE
        ,C_TEREMID
        ,C_FOGLALKOZASID
        ,C_CSENGETESIRENDORAID
        ,C_TANTARGYID
        ,C_OSZTALYCSOPORTID
        ,C_TANARID
        ,C_ORATULAJDONOSID
        ,MODIFIER
        ,CREATOR
        ,C_IMPORTALT
		,C_CSENGETESIRENDID
      ) SELECT --'T_ORARENDIORA', 
         h.id AS C_HETIREND
        ,CASE o.hetNapja
          WHEN 'Hétfő'     THEN 1408
          WHEN 'Kedd'      THEN 1409
          WHEN 'Szerda'    THEN 1410
          WHEN 'Csütörtök' THEN 1411
          WHEN 'Péntek'    THEN 1412
          WHEN 'Szombat'   THEN 1413
          WHEN 'Vasárnap'  THEN 1414
          ELSE 1407
         END AS C_HETNAPJA -- ?
        ,csro.C_ORASZAM AS C_ORASZAM
        ,o.ervenyessegKezdete AS C_ORAERVENYESSEGKEZDETE
        ,@intezmenyID AS C_INTEZMENYID
        ,@tanevId AS C_TANEVID
        ,'F' AS C_BONTOTT
        ,o.ervenyessegVege AS C_ORAERVENYESSEGVEGE
        ,csro.C_KEZDETE AS C_ORAKEZDETE
        ,csro.C_VEGE AS C_ORAVEGE
        ,t.id AS C_TEREMID
        ,ff.ID AS C_FOGLALKOZASID -- ?
        ,csro.ID AS C_CSENGETESIRENDORAID
        ,tt.ID AS C_TANTARGYID -- ?
        ,oszt.ID AS C_OSZTALYCSOPORTID -- ?
        ,a.ID AS C_TANARID -- ?
        ,@userId AS C_ORATULAJDONOSID -- ?
        ,NULL AS MODIFIER
        ,@userId AS CREATOR
        ,'T' AS C_IMPORTALT
		,csro.C_CSENGETESIRENDID AS C_CSENGETESIRENDID
      FROM @orarendiOra o
        INNER JOIN @terem t ON t.teremID = o.teremID 
        INNER JOIN @tanar a ON a.tanarID = o.tanarID
        INNER JOIN @tantargy tt ON tt.tantargyID = o.tantargyID
        INNER  JOIN @osztalyCsoport oszt ON oszt.osztalyCsoportID = o.OsztalyId AND oszt.osztalyCsoport = 'O' AND o.csoportId IS NULL
        INNER JOIN (
          SELECT f.ID, f.C_TANTARGYID, f.C_OSZTALYCSOPORTID, ft.C_TANAROKID 
          FROM T_FOGLALKOZAS_OSSZES f 
            INNER JOIN T_FOGLALKOZASOK_TANAROK ft ON ft.C_FOGLALKOZASOKID = f.ID
          WHERE f.TOROLT = 'F' AND f.C_TANEVID = @tanevId
        ) ff ON ff.C_TANTARGYID = tt.ID  AND ff.C_TANAROKID = a.ID AND ff.C_OSZTALYCSOPORTID = oszt.ID--ISNULL(cs.ID, oszt.ID)
        INNER JOIN @hetirend h ON o.hetirendID = h.hetirendId
        INNER JOIN T_CSENGETESIRENDORA_OSSZES csro ON csro.C_ORASZAM = o.sorszam AND csro.C_CSENGETESIRENDID = @csengetesiRendId AND csro.TOROLT = 'F';
 
	INSERT INTO T_ORARENDIORA_OSSZES (
         C_HETIREND
        ,C_HETNAPJA
        ,C_ORASZAM
        ,C_ORAERVENYESSEGKEZDETE
        ,C_INTEZMENYID
        ,C_TANEVID
        ,C_BONTOTT
        ,C_ORAERVENYESSEGVEGE
        ,C_ORAKEZDETE
        ,C_ORAVEGE
        ,C_TEREMID
        ,C_FOGLALKOZASID
        ,C_CSENGETESIRENDORAID
        ,C_TANTARGYID
        ,C_OSZTALYCSOPORTID
        ,C_TANARID
        ,C_ORATULAJDONOSID
        ,MODIFIER
        ,CREATOR
        ,C_IMPORTALT
		,C_CSENGETESIRENDID
      ) SELECT --'T_ORARENDIORA', 
         h.id AS C_HETIREND
        ,CASE o.hetNapja
          WHEN 'Hétfő'     THEN 1408
          WHEN 'Kedd'      THEN 1409
          WHEN 'Szerda'    THEN 1410
          WHEN 'Csütörtök' THEN 1411
          WHEN 'Péntek'    THEN 1412
          WHEN 'Szombat'   THEN 1413
          WHEN 'Vasárnap'  THEN 1414
          ELSE 1407
         END AS C_HETNAPJA -- ?
        ,csro.C_ORASZAM AS C_ORASZAM
        ,o.ervenyessegKezdete AS C_ORAERVENYESSEGKEZDETE
        ,@intezmenyID AS C_INTEZMENYID
        ,@tanevId AS C_TANEVID
        ,'F' AS C_BONTOTT
        ,o.ervenyessegVege AS C_ORAERVENYESSEGVEGE
        ,csro.C_KEZDETE AS C_ORAKEZDETE
        ,csro.C_VEGE AS C_ORAVEGE
        ,t.id AS C_TEREMID
        ,ff.ID AS C_FOGLALKOZASID -- ?
        ,csro.ID AS C_CSENGETESIRENDORAID
        ,tt.ID AS C_TANTARGYID -- ?
        ,cs.ID AS C_OSZTALYCSOPORTID -- ?
        ,a.ID AS C_TANARID -- ?
        ,@userId AS C_ORATULAJDONOSID -- ?
        ,NULL AS MODIFIER
        ,@userId AS CREATOR
        ,'T' AS C_IMPORTALT
		,csro.C_CSENGETESIRENDID AS C_CSENGETESIRENDID
      FROM @orarendiOra o
        INNER JOIN @terem t ON t.teremID = o.teremID 
        INNER JOIN @tanar a ON a.tanarID = o.tanarID
        INNER JOIN @tantargy tt ON tt.tantargyID = o.tantargyID
        INNER JOIN @osztalyCsoport cs   ON cs.osztalyCsoportID   = o.CsoportId AND cs.osztalyCsoport = 'CS'
        INNER JOIN (
          SELECT f.ID, f.C_TANTARGYID, f.C_OSZTALYCSOPORTID, ft.C_TANAROKID 
          FROM T_FOGLALKOZAS_OSSZES f 
            INNER JOIN T_FOGLALKOZASOK_TANAROK ft ON ft.C_FOGLALKOZASOKID = f.ID
          WHERE f.TOROLT = 'F' AND f.C_TANEVID = @tanevId
        ) ff ON ff.C_TANTARGYID = tt.ID  AND ff.C_TANAROKID = a.ID AND ff.C_OSZTALYCSOPORTID = cs.ID
        INNER JOIN @hetirend h ON o.hetirendID = h.hetirendId
        INNER JOIN T_CSENGETESIRENDORA_OSSZES csro ON csro.C_ORASZAM = o.sorszam AND csro.C_CSENGETESIRENDID = @csengetesiRendId AND csro.TOROLT = 'F';
        
    COMMIT TRANSACTION
--    ROLLBACK TRANSACTION
  END TRY      
  BEGIN CATCH
    IF @@TRANCOUNT > 0 AND XACT_STATE() <> 0 
      ROLLBACK TRANSACTION;
    THROW 
  END CATCH
END

GO