SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO 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, -- @ttf bit, @ervenyessegMegadva 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(100), 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(100)') 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(100)') 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' /* 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) 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 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 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 -- 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 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 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 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 ,TOROLT ,SERIAL ,LASTCHANGED ,CREATED ,MODIFIER ,CREATOR ) VALUES ( 181 -- osztályterem ,src.nev ,@mukodsesiHely ,@intezmenyId ,@tanevId ,'F' ,0 ,NULL ,GETDATE() ,@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 ,TOROLT ,SERIAL ,LASTCHANGED ,CREATED ,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 ,'F' -- TOROLT - char(1) ,0 -- SERIAL - int ,GETDATE() -- LASTCHANGED - datetime ,GETDATE() -- CREATED - datetime ,@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 ,TOROLT ,SERIAL ,LASTCHANGED ,CREATED ,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 ,'F' AS TOROLT -- TOROLT - char(1) ,0 AS SERIAL -- SERIAL - int ,GETDATE() AS LASTCHANGED -- LASTCHANGED - datetime ,GETDATE() AS CREATED -- CREATED - datetime ,@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 ,TOROLT ,SERIAL ,LASTCHANGED ,CREATED ,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 ,'F' AS TOROLT -- TOROLT - char(1) ,0 AS SERIAL -- SERIAL - int ,GETDATE() AS LASTCHANGED -- LASTCHANGED - datetime ,GETDATE() AS CREATED -- CREATED - datetime ,@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 ,TOROLT ,SERIAL ,LASTCHANGED ,CREATED ,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 ,'F' -- TOROLT - char(1) ,0 -- SERIAL - int ,GETDATE() -- LASTCHANGED - datetime ,GETDATE() -- CREATED - datetime ,@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 WHERE EXISTS (SELECT 1 FROM T_ALKALMAZOTT_OSSZES a WHERE a.ID = fh.ID AND a.C_ALTANEVID = fh.C_TANEVID) /* 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 ,TOROLT ,SERIAL ,LASTCHANGED ,CREATED ,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 ,'F' -- TOROLT - char(1) ,0 -- SERIAL - int ,GETDATE() -- LASTCHANGED - datetime ,GETDATE() -- CREATED - datetime ,@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 ,TOROLT ,SERIAL ,LASTCHANGED ,CREATED ,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 ,'F' -- TOROLT - char(1) ,0 -- SERIAL - int ,GETDATE() -- LASTCHANGED - datetime ,GETDATE() -- CREATED - datetime ,@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 MERGE T_DICTIONARYITEMBASE_OSSZES trg USING @hetirend src ON src.ID = trg.ID AND trg.C_INTEZMENYID = @intezmenyid AND trg.C_TANEVID = @tanevId WHEN NOT MATCHED THEN INSERT ( C_VALUE ,C_NAME ,C_VISIBLE ,C_TYPE ,C_INTEZMENYID ,C_TANEVID ,TOROLT ,SERIAL ,LASTCHANGED ,CREATED ,MODIFIER ,CREATOR ) VALUES ( 0 ,src.nev + ' (importálva: ' + CONVERT(varchar(20), GETDATE(), 120) + ')' ,'T' ,'HetirendTipus' ,@intezmenyID ,@tanevID ,'F' ,0 ,NULL ,GETDATE() ,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 ,TOROLT ,SERIAL ,LASTCHANGED ,CREATED ,MODIFIER ,CREATOR ) SELECT x.ID AS ID -- ID - int ,@intezmenyId AS C_ALINTEZMENYID -- C_ALINTEZMENYID - int ,@tanevId AS C_ALTANEVID -- C_ALTANEVID - int ,'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 @hetirend x WHERE NOT EXISTS (SELECT 1 FROM T_HETIRENDTIPUS_OSSZES ht WHERE ht.ID = x.ID AND C_ALTANEVID = @tanevId) DECLARE @ids TABLE ( id int ) DECLARE @ervenyessegKezdete datetime /* T_ORARENDIORA INSERT */ IF @regiTorlese = 1 BEGIN SELECT TOP(1) @ervenyessegKezdete = ervenyessegKezdete FROM @orarendiOra IF @ervenyessegMegadva = 1 BEGIN 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 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 ,TOROLT ,SERIAL ,LASTCHANGED ,CREATED ,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 -- ? ,'F' AS TOROLT ,0 AS SERIAL ,NULL AS LASTCHANGED ,GETDATE() AS CREATED ,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; 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 ,TOROLT ,SERIAL ,LASTCHANGED ,CREATED ,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 -- ? ,'F' AS TOROLT ,0 AS SERIAL ,NULL AS LASTCHANGED ,GETDATE() AS CREATED ,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; COMMIT TRANSACTION -- ROLLBACK TRANSACTION END TRY BEGIN CATCH IF @@TRANCOUNT > 0 AND XACT_STATE() <> 0 ROLLBACK TRANSACTION; THROW END CATCH END GO