kreta/Kreta.DataAccess.Migrations/Scripts/Archive/20171123132745_KRETA_3746/sp_ImportTantargyFelosztas.sql
2024-03-13 00:33:46 +01:00

384 lines
14 KiB
Transact-SQL

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