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 @tbl SET ExistItemId = 0 WHERE NOT EXISTS (SELECT 1 FROM T_FOGLALKOZAS_OSSZES f WHERE f.ID = ExistItemId) 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 ,MODIFIER ,CREATOR ,C_IMPORTALT ,SERIAL ) 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 ,NULL AS MODIFIER -- MODIFIER - int ,@userId AS CREATOR -- CREATOR - int ,'T' AS C_IMPORTALT -- C_IMPORTALT char(1) ,0 AS SERIAL 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 ,MODIFIER ,CREATOR ,C_IMPORTALT ,SERIAL ) 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 ,NULL AS MODIFIER -- MODIFIER - int ,@userId AS CREATOR -- CREATOR - int ,'T' AS C_IMPORTALT -- C_IMPORTALT char(1) ,0 AS SERIAL 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 ,MODIFIER ,CREATOR ,SERIAL ) 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 ,NULL AS MODIFIER -- MODIFIER - int ,@userId AS CREATOR -- CREATOR - int ,0 AS SERIAL 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 ,MODIFIER ,CREATOR ,C_IMPORTALT ,SERIAL ) 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 ,NULL AS MODIFIER -- MODIFIER - int ,@userId AS CREATOR -- CREATOR - int ,'T' AS C_IMPORTALT -- C_IMPORTALT char(1) ,0 AS SERIAL 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_OSZTALYBONTASID ,C_ALINTEZMENYID ,C_ALTANEVID ,MODIFIER ,CREATOR ,SERIAL ) 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 ,IIF(o.osztalyNev IS NULL, NULL, o.osztalyId) AS C_OSZTALYBONTASID -- C_OSZTALYBONTASID - int ,@intezmenyId ,@tanevId ,NULL AS MODIFIER -- MODIFIER - int ,@userId AS CREATOR -- CREATOR - int ,0 AS SERIAL 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 WHERE f.C_TANTARGYID = o.tantargyID AND f.C_OSZTALYCSOPORTID = o.csoportID AND f.C_TANARID = o.tanarID AND f.C_TANEVID = @tanevId ) AND o.existItemId = 0 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_TANARID ,C_INTEZMENYID ,C_TANEVID ,MODIFIER ,CREATOR ,C_IMPORTALT ,SERIAL ) 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 ,src.tanarID ,@intezmenyId ,@tanevId -- C_TANEVID - int ,NULL -- MODIFIER - int ,@userId -- CREATOR - int ,'T' -- C_IMPORTALT char(1) ,0 ) 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 COMMIT TRANSACTION END TRY BEGIN CATCH IF @@TRANCOUNT > 0 ROLLBACK TRAN; THROW END CATCH END