﻿IF OBJECT_ID('sp_ImportTantargyFelosztas', 'P') IS NOT NULL BEGIN
  DROP PROCEDURE sp_ImportTantargyFelosztas
END
GO

CREATE PROCEDURE sp_ImportTantargyFelosztas
   @importXml xml,
   @tanevId int,
   @feladatellatasiHelyId int,
   @intezmenyId int,
   @userId int
AS
BEGIN
  
  SET NOCOUNT ON;
	SET XACT_ABORT ON;
  
  DECLARE
    @root int
  
  DECLARE @tbl TABLE (
    osztalyID int,
    osztalyNev nvarchar(255),
    csoportID int,
    csoportNev nvarchar(255),
    tantargyID int,
    tantargyNev nvarchar(255),
    oraszam float,
    tanarID int,
    tanarNev nvarchar(255),
    szulDatum datetime,
    foglalkozasID int,
	  existItemId int
  ) 
  
  SET @root = @importXml.exist('/TantargyfelosztasImport')
  
  --SELECT @importXml;
  
  IF @root = 1 BEGIN
    INSERT INTO @tbl
    SELECT 
      NULL AS osztalyID,
      sor.value('(osztaly)[1]', 'nvarchar(255)') AS osztalyNev,
      NULL AS csoportID,
      sor.value('(csoport)[1]', 'nvarchar(255)') AS csoportNev,
      NULL AS tantargyID,
      sor.value('(tantargy)[1]', 'nvarchar(255)') AS tantargyNev,
      sor.value('(oraszam)[1]', 'float') AS oraszam,
      NULL AS tanarID,
      sor.value('(tanar)[1]', 'nvarchar(255)') AS tanarNev,
      sor.value('(szuldatum)[1]', 'varchar(10)')AS szulDatum,
      NULL AS foglalkozasID,
	  sor.value('(existItemId)[1]', 'int') AS existItemId
  	FROM @importXml.nodes('/TantargyfelosztasImport/TantargyfelosztasLista/Tantargyfelosztas') as sorok(sor)
  END
  ELSE BEGIN
    INSERT INTO @tbl
    SELECT 
      NULL AS osztalyID,
      sor.value('(osztaly)[1]', 'nvarchar(255)') AS osztalyNev,
      NULL AS csoportID,
      sor.value('(csoport)[1]', 'nvarchar(255)') AS csoportNev,
      NULL AS tantargyID,
      sor.value('(tantargy)[1]', 'nvarchar(255)') AS tantargyNev,
      sor.value('(oraszam)[1]', 'float') AS oraszam,
      NULL AS tanarID,
      sor.value('(tanar)[1]', 'nvarchar(255)') AS tanarNev,
      sor.value('(szuldatum)[1]', 'varchar(10)')AS szulDatum,
      NULL AS foglalkozasID,
	  sor.value('(existItemId)[1]', 'int') AS existItemId
  	FROM @importXml.nodes('/TantargyfelosztasLista/Tantargyfelosztas') as sorok(sor)    
  END
  
  BEGIN TRY 
    BEGIN TRAN
	

    UPDATE t
    SET t.C_IMPORTALT = 'T' 
    FROM T_TANTARGY_OSSZES AS t
      INNER JOIN T_FOGLALKOZAS_OSSZES  fo ON t.ID = fo.C_TANTARGYID AND fo.C_TANEVID = t.C_TANEVID
    WHERE fo.ID IN (SELECT existItemId FROM @tbl WHERE existItemId <> 0)
      AND t.C_TANEVID = @tanevId


    UPDATE  ocs
    SET ocs.C_IMPORTALT = 'T' 
    FROM T_OSZTALYCSOPORT_OSSZES AS ocs
      INNER JOIN T_FOGLALKOZAS_OSSZES  fo ON ocs.ID = fo.C_OSZTALYCSOPORTID AND ocs.C_TANEVID = fo.C_TANEVID
      INNER JOIN T_TANTARGY_OSSZES t ON  t.ID = fo.C_TANTARGYID AND t.C_TANEVID = fo.C_TANEVID
    WHERE fo.ID IN (SELECT existItemId FROM @tbl WHERE existItemId <> 0)
      AND ocs.C_TANEVID = @tanevId

    UPDATE fo
    SET fo.C_IMPORTALT = 'T' 
    FROM T_FOGLALKOZAS_OSSZES AS fo
    where fo.ID IN (SELECT existItemId FROM @tbl WHERE existItemId <> 0)
      AND fo.C_TANEVID = @tanevId


    /*TÖRÖLJÜK AZ IMPORTÁLTakat*/
    EXEC sp_DeleteAllTTF @feladatellatasiHelyId = @feladatellatasiHelyId, @tanevId = @tanevId
      
    UPDATE f 
    SET  
       f.C_ORASZAM = temp.oraszam
		  ,f.C_IMPORTALT = 'T'
		  ,f.SERIAL += 1
		  ,f.LASTCHANGED = GETDATE()
		  ,f.MODIFIER = @userId
    FROM T_FOGLALKOZAS_OSSZES f
		  INNER JOIN @tbl temp ON f.C_NEV = temp.tantargyNev + ' - ' + ISNULL(temp.csoportNev, temp.osztalyNev) + ' - ' + temp.tanarNev
    WHERE f.C_INTEZMENYID = @intezmenyId
		  AND f.C_TANEVID = @tanevId
		  AND f.TOROLT = 'F'


    UPDATE o
    SET o.tanarID = fh.ID
    FROM @tbl o
      INNER JOIN T_FELHASZNALO_OSSZES fh ON fh.C_NYOMTATASINEV = o.tanarNev AND fh.C_SZULETESIDATUM = ISNULL(o.szulDatum, fh.C_SZULETESIDATUM)
      INNER JOIN T_ALKALMAZOTT_OSSZES a ON fh.ID = a.ID
    WHERE fh.C_TANEVID = @tanevId
      AND fh.TOROLT = 'F'


      
      /*töltjük a tantárgyakat*/
      INSERT INTO T_TANTARGY_OSSZES (
         C_GYAKORLATI
        ,C_NEV
        ,C_ROVIDNEV
        ,C_TARGYKATEGORIA
        ,C_ALTANTARGYKENTNYOMTATVANYBAN
        ,C_NEVNYOMTATVANYBAN
        ,C_TANORANKIVULI
        ,C_FOTARGYID
  	    ,C_INTEZMENYID
        ,C_TANEVID
        ,TOROLT
        ,SERIAL
        ,LASTCHANGED
        ,CREATED
        ,MODIFIER
        ,CREATOR
        ,C_IMPORTALT
      ) SELECT DISTINCT 
         'F' AS C_GYAKORLATI           -- C_GYAKORLATI - char(1)
        ,o.tantargyNev AS C_NEV                   -- C_NEV - nvarchar(255)
        ,LEFT(o.tantargyNev, 20) AS C_ROVIDNEV              -- C_ROVIDNEV - nvarchar(20)
        ,1197   AS C_TARGYKATEGORIA /*Na*/       -- C_TARGYKATEGORIA - int 
        ,NULL AS C_ALTANTARGYKENTNYOMTATVANYBAN -- C_ALTANTARGYKENTNYOMTATVANYBAN - char(1)
        ,NULL AS C_NEVNYOMTATVANYBAN    -- C_NEVNYOMTATVANYBAN - nvarchar(255)
        ,'F' AS C_TANORANKIVULI        -- C_TANORANKIVULI - char(1)
        ,NULL AS C_FOTARGYID            -- C_FOTARGYID - int
  	    ,@intezmenyId AS C_INTEZMENYID
  	    ,@tanevId AS C_TANEVID
        ,'F' AS TOROLT                 -- TOROLT - char(1)
        ,0 AS SERIAL                 -- SERIAL - int
        ,NULL AS LASTCHANGED            -- LASTCHANGED - datetime
        ,GETDATE() AS CREATED                -- CREATED - datetime
        ,NULL AS MODIFIER               -- MODIFIER - int
        ,@userId AS CREATOR                -- CREATOR - int
        ,'T' AS C_IMPORTALT    -- C_IMPORTALT char(1)
      FROM @tbl o
        WHERE NOT EXISTS (SELECT 1 FROM T_TANTARGY_OSSZES WHERE C_NEV = o.tantargyNev AND C_TANEVID = @tanevId AND TOROLT = 'F')
        
      UPDATE o
      SET o.tantargyID = t.ID
      FROM @tbl o
        INNER JOIN T_TANTARGY_OSSZES t ON t.C_NEV = o.tantargyNev AND t.C_TANEVID = @tanevId AND t.TOROLT = 'F'

       
      
      /* OSZTÁLY */
      INSERT INTO T_OSZTALYCSOPORT_OSSZES (
         C_MEGJEGYZES
        ,C_NEV
        ,C_VEGZOSEVFOLYAM
        ,C_EVFOLYAMTIPUSA
        ,C_TANEVID
        ,C_TEREMID
        ,C_FELADATELLATASIHELYID
  	    ,C_INTEZMENYID
        ,TOROLT
        ,SERIAL
        ,LASTCHANGED
        ,CREATED
        ,MODIFIER
        ,CREATOR
        ,C_IMPORTALT
      ) SELECT DISTINCT
         NULL AS C_MEGJEGYZES           -- C_MEGJEGYZES - nvarchar(255)
        ,o.osztalyNev AS C_NEV                   -- C_NEV - nvarchar(255)
        ,'F' AS C_VEGZOSEVFOLYAM       -- C_VEGZOSEVFOLYAM - char(1)
        ,1296 AS C_EVFOLYAMTIPUSA       -- C_EVFOLYAMTIPUSA - int
        ,@tanevId   AS C_TANEVID               -- C_TANEVID - int
        ,NULL AS C_TEREMID              -- C_TEREMID - int
        ,@feladatellatasiHelyId   AS C_FELADATELLATASIHELYID -- C_FELADATELLATASIHELYID - int
        ,@intezmenyId AS C_INTEZMENYID
        ,'F' AS TOROLT                 -- TOROLT - char(1)
        ,0 AS SERIAL                 -- SERIAL - int
        ,NULL AS LASTCHANGED            -- LASTCHANGED - datetime
        ,GETDATE() AS CREATED                -- CREATED - datetime
        ,NULL AS MODIFIER               -- MODIFIER - int
        ,@userId AS CREATOR                -- CREATOR - int
        ,'T' AS C_IMPORTALT    -- C_IMPORTALT char(1)
      FROM @tbl o
      WHERE NOT EXISTS (SELECT 1 FROM T_OSZTALYCSOPORT_OSSZES WHERE C_NEV = o.osztalyNev AND C_TANEVID = @tanevId AND TOROLT = 'F')
        AND o.OsztalyNev IS NOT NULL AND o.OsztalyNev <> ''
      
      UPDATE o
      SET o.osztalyID = t.ID
      FROM @tbl o
        INNER JOIN T_OSZTALYCSOPORT_OSSZES t ON t.C_NEV = o.osztalyNev AND C_TANEVID = @tanevId AND TOROLT = 'F'
      
      INSERT INTO T_OSZTALY_OSSZES (
         ID
        ,C_KEPZESIFORMA
        ,C_OSZTALYFONOKID
        ,C_OFOHELYETTESID
        ,C_TANTERVID
  	    ,C_ALINTEZMENYID
  	    ,C_ALTANEVID
        ,TOROLT
        ,SERIAL
        ,LASTCHANGED
        ,CREATED
        ,MODIFIER
        ,CREATOR
      ) SELECT DISTINCT
         o.osztalyID   AS ID                      -- ID - int
        ,1096   AS C_KEPZESIFORMA  /*Nappali rendszerű iskolai oktatás*/         -- C_KEPZESIFORMA - int
        ,NULL AS C_OSZTALYFONOKID       -- C_OSZTALYFONOKID - int
        ,NULL AS C_OFOHELYETTESID       -- C_OFOHELYETTESID - int
        ,NULL AS C_TANTERVID            -- C_TANTERVID - int
  	    ,@intezmenyId 
  	    ,@tanevId
        ,'F' AS TOROLT                 -- TOROLT - char(1)
        ,0 AS SERIAL                 -- SERIAL - int
        ,NULL AS LASTCHANGED            -- LASTCHANGED - datetime
        ,GETDATE() AS CREATED                -- CREATED - datetime
        ,NULL AS MODIFIER               -- MODIFIER - int
        ,@userId AS CREATOR                -- CREATOR - int
      FROM @tbl o
      WHERE NOT EXISTS (SELECT 1 FROM T_OSZTALY_OSSZES WHERE ID = o.osztalyID AND C_ALTANEVID = @tanevId AND TOROLT = 'F')
        AND o.osztalyID IS NOT NULL
      
      INSERT INTO T_OSZTALYCSOPORT_OSSZES (
         C_MEGJEGYZES
        ,C_NEV
        ,C_VEGZOSEVFOLYAM
        ,C_EVFOLYAMTIPUSA
        ,C_TANEVID
        ,C_TEREMID
        ,C_FELADATELLATASIHELYID
  	    ,C_INTEZMENYID
        ,TOROLT
        ,SERIAL
        ,LASTCHANGED
        ,CREATED
        ,MODIFIER
        ,CREATOR
        ,C_IMPORTALT
      ) SELECT DISTINCT
         NULL AS C_MEGJEGYZES           -- C_MEGJEGYZES - nvarchar(255)
        ,IIF(o.csoportNev IS NULL, o.osztalyNev, o.csoportNev) AS C_NEV                   -- C_NEV - nvarchar(255)
        ,'F' AS C_VEGZOSEVFOLYAM       -- C_VEGZOSEVFOLYAM - char(1)
        ,1296 AS C_EVFOLYAMTIPUSA       -- C_EVFOLYAMTIPUSA - int Default(NA)
        ,@tanevId   AS C_TANEVID               -- C_TANEVID - int
        ,NULL AS C_TEREMID              -- C_TEREMID - int
        ,@feladatellatasiHelyId   AS C_FELADATELLATASIHELYID -- C_FELADATELLATASIHELYID - int
  	    ,@intezmenyId AS C_INTEZMENYID
        ,'F' AS TOROLT                 -- TOROLT - char(1)
        ,0 AS SERIAL                 -- SERIAL - int
        ,NULL AS LASTCHANGED            -- LASTCHANGED - datetime
        ,GETDATE() AS CREATED                -- CREATED - datetime
        ,NULL AS MODIFIER               -- MODIFIER - int
        ,@userId AS CREATOR                -- CREATOR - int
        ,'T' AS C_IMPORTALT    -- C_IMPORTALT char(1)
      FROM @tbl o
        WHERE NOT EXISTS (SELECT 1 FROM T_OSZTALYCSOPORT_OSSZES WHERE C_NEV = o.csoportNev AND C_TANEVID = @tanevId AND TOROLT = 'F')
        AND o.csoportNev IS NOT NULL AND o.csoportNev <> ''
              
      UPDATE o
      SET o.csoportID = t.ID
      FROM @tbl o
        INNER JOIN T_OSZTALYCSOPORT_OSSZES t ON t.C_NEV = o.csoportNev AND C_TANEVID = @tanevId AND TOROLT = 'F' 
      
      INSERT INTO T_CSOPORT_OSSZES (
         ID
        ,C_TIPUSA
        ,C_CSOPORTNAPLOLEIRAS
        ,C_CSOPORTNAPLOMEGNYITASA
        ,C_CSOPORTNAPLOZARASA
        ,C_CSOPORTVEZETOID
        ,C_KIZAROCSOPORTID
        ,C_OSZTALYBONTASID
  	    ,C_ALINTEZMENYID
  	    ,C_ALTANEVID
        ,TOROLT
        ,SERIAL
        ,LASTCHANGED
        ,CREATED
        ,MODIFIER
        ,CREATOR
      ) SELECT DISTINCT
         o.csoportID   AS ID                      -- ID - int
        ,1031 AS C_TIPUSA  /*Na*/             -- 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_KIZAROCSOPORTID                -- C_KIZAROCSOPORTID - int
        ,IIF(o.osztalyNev IS NULL, NULL, o.osztalyId)  AS C_OSZTALYBONTASID         -- C_OSZTALYBONTASID - int
  	    ,@intezmenyId 
  	    ,@tanevId
        ,'F' AS TOROLT                 -- TOROLT - char(1)
        ,0 AS SERIAL                 -- SERIAL - int
        ,NULL AS LASTCHANGED            -- LASTCHANGED - datetime
        ,GETDATE() AS CREATED                -- CREATED - datetime
        ,NULL AS MODIFIER               -- MODIFIER - int
        ,@userId AS CREATOR                -- CREATOR - int
      FROM @tbl o
      WHERE NOT EXISTS (SELECT 1 FROM T_CSOPORT_OSSZES WHERE ID = o.csoportID AND C_ALTANEVID = @tanevId AND TOROLT = 'F')
        AND o.csoportID IS NOT NULL

      DECLARE @linkTable TABLE (
        id int, 
        osztalyCsoportId int, 
        tantargyID int, 
        tanarID int
      );
      
      MERGE T_FOGLALKOZAS_OSSZES trg
        USING (SELECT ISNULL(o.csoportID, o.osztalyID) osztalyCsoportId, o.tantargyID, o.tanarID, SUM(o.oraszam) oraszam,
          MAX(o.tantargyNev) + ' - ' + MAX(ISNULL(o.csoportNev, o.osztalyNev)) + ' - ' + MAX(o.tanarNev) as foglalkozasNev
          FROM @tbl o
          WHERE NOT EXISTS (
            SELECT 1 FROM T_FOGLALKOZAS_OSSZES f 
              INNER JOIN T_FOGLALKOZASOK_TANAROK ft ON f.ID = ft.C_FOGLALKOZASOKID
            WHERE f.C_TANTARGYID = o.tantargyID 
              AND f.C_OSZTALYCSOPORTID = o.csoportID
              AND ft.C_TANAROKID = o.tanarID 
              AND f.C_TANEVID = @tanevId
          )
          GROUP BY ISNULL(o.csoportID, o.osztalyID), o.tantargyID, o.tanarID
        ) src ON 1 = 0
        WHEN NOT MATCHED THEN
          INSERT (
             C_FOGLALKOZASTIPUSA
            ,C_ORASZAM
            ,C_NEV
            ,C_ERTEKELESKELL
            ,C_MULASZTASKELL
            ,C_TANARFELVEHETI
            ,C_TANTARGYID
            ,C_OSZTALYCSOPORTID
      	    ,C_INTEZMENYID
            ,C_TANEVID
            ,TOROLT
            ,SERIAL
            ,LASTCHANGED
            ,CREATED
            ,MODIFIER
            ,CREATOR
            ,C_IMPORTALT
          ) VALUES(
             --IIF (src.osztalyCsoportId IS NOT NULL, 1368 /*Tanóra (osztálybontásos)*/, 1339/*Tanóra*/)  /*Na*/    -- C_FOGLALKOZASTIPUSA - int
			       IIF  (EXISTS(select 1 from T_CSOPORT cs where cs.ID = src.osztalyCsoportId), 1368 /*Tanóra (osztálybontásos)*/, 1339/*Tanóra*/)  /*Na*/    -- C_FOGLALKOZASTIPUSA - int
            ,src.oraszam                  -- C_ORASZAM - int
            ,src.foglalkozasNev                    -- C_NEV - nvarchar(255)
            ,'T'         -- C_ERTEKELESKELL - char(1)
            ,'T'         -- C_MULASZTASKELL - char(1)
            ,'T'        -- C_TANARFELVEHETI - char(1)
            ,src.tantargyID            -- C_TANTARGYID - int
            ,src.osztalyCsoportId      -- C_OSZTALYCSOPORTID - int
      	    ,@intezmenyId   
            ,@tanevId                  -- C_TANEVID - int
            ,'F'                  -- TOROLT - char(1)
            ,0                   -- SERIAL - int
            ,NULL              -- LASTCHANGED - datetime
            ,GETDATE()                  -- CREATED - datetime
            ,NULL                 -- MODIFIER - int
            ,@userId                 -- CREATOR - int
            ,'T'     -- C_IMPORTALT char(1)
          )
        OUTPUT INSERTED.ID, src.osztalyCsoportId, src.tantargyID, src.tanarID
          INTO @linkTable(id, osztalyCsoportId, tantargyID, tanarID);
      
      /*csoport - osztaly*/
      UPDATE o
        SET o.foglalkozasID = f.id
      FROM @tbl o
      INNER JOIN @linkTable f ON f.osztalyCsoportId = ISNULL(o.csoportID, o.osztalyID) AND f.tantargyID = o.tantargyID AND f.tanarID = o.tanarID
      WHERE o.foglalkozasID IS NULL
      
      /*osztaly*/
      UPDATE o
        SET o.foglalkozasID = f.id
      FROM @tbl o
        INNER JOIN @linkTable f ON f.osztalyCsoportId = o.osztalyID AND f.tantargyID = o.tantargyID AND f.tanarID = o.tanarID
      WHERE o.foglalkozasID IS NULL
        
      /*csoport - osztaly*/
      UPDATE o
        SET o.foglalkozasID = f.id
      FROM @tbl o
        INNER JOIN T_FOGLALKOZAS_OSSZES f ON f.C_TANTARGYID = o.tantargyID AND f.C_OSZTALYCSOPORTID = ISNULL(o.csoportID, o.osztalyID)
      WHERE o.foglalkozasID IS NULL
        AND NOT EXISTS (SELECT 1 FROM T_FOGLALKOZASOK_TANAROK ft WHERE ft.C_FOGLALKOZASOKID = o.foglalkozasID) 
        AND f.C_TANEVID = @tanevId
      
      /*osztaly*/
      UPDATE o
        SET o.foglalkozasID = f.id
      FROM @tbl o
        INNER JOIN T_FOGLALKOZAS_OSSZES f ON f.C_TANTARGYID = o.tantargyID AND f.C_OSZTALYCSOPORTID = o.osztalyID
      WHERE o.foglalkozasID IS NULL
        AND NOT EXISTS (SELECT 1 FROM T_FOGLALKOZASOK_TANAROK ft WHERE ft.C_FOGLALKOZASOKID = o.foglalkozasID) 
        AND f.C_TANEVID = @tanevId
                
      INSERT INTO T_FOGLALKOZASOK_TANAROK (
         C_FOGLALKOZASOKID
        ,C_TANAROKID
      ) SELECT DISTINCT 
         o.foglalkozasID AS C_FOGLALKOZASOKID       -- C_FOGLALKOZASOKID - int
        ,o.tanarID   AS C_TANAROKID             -- C_TANAROKID - int
      FROM @tbl o
      WHERE NOT EXISTS (SELECT 1 FROM T_FOGLALKOZASOK_TANAROK WHERE C_FOGLALKOZASOKID = o.foglalkozasID AND C_TANAROKID = o.tanarID)
        

    COMMIT TRANSACTION
  END TRY
  BEGIN CATCH
    IF @@TRANCOUNT > 0 
      ROLLBACK TRAN;
    THROW
  END CATCH

END

