This commit is contained in:
skidoodle 2024-03-13 00:33:46 +01:00
commit e124a47765
19374 changed files with 9806149 additions and 0 deletions

View file

@ -0,0 +1,2 @@
--Migration
EXEC uspUpdateIDPEgyediAzonosito

View file

@ -0,0 +1,114 @@
DROP PROCEDURE IF EXISTS uspUpdateAllEgyediAzonosito
GO
CREATE PROCEDURE uspUpdateAllEgyediAzonosito
AS BEGIN
SET NOCOUNT ON;
DECLARE @DefaultAzonosito NVARCHAR(36) = '00000000-0000-0000-0000-000000000000'
-- Az aktuális tanévben lévő felhasználók egyedi azonosítóinak átvétele az előző tanévből
-- a 4T alapján, ha az előző és az aktuális tanév sem törölt
UPDATE akt SET
akt.C_EGYEDIAZONOSITO = prev.C_EGYEDIAZONOSITO
FROM T_FELHASZNALO_OSSZES akt
INNER JOIN T_FELHASZNALO_OSSZES prev ON akt.C_INTEZMENYID = prev.C_INTEZMENYID
AND prev.C_ANYJANEVE = akt.C_ANYJANEVE
AND prev.C_SZULETESIHELY = akt.C_SZULETESIHELY
AND prev.C_SZULETESIDATUM = akt.C_SZULETESIDATUM
AND prev.C_SZULETESINEV = akt.C_SZULETESINEV
INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = akt.C_TANEVID AND akttv.C_AKTIV = 'T' AND akttv.TOROLT = 'F'
INNER JOIN T_TANEV_OSSZES prevtv ON prevtv.ID = prev.C_TANEVID AND akttv.C_SORSZAM - 2 = prevtv.C_SORSZAM AND prevtv.TOROLT = 'F'
WHERE akt.C_EGYEDIAZONOSITO = @DefaultAzonosito
-- Az aktuális tanévben, ha az nem törölt, akkor a felhasználóknak új egyedi azonosítóinak létrehozása, ha még nincs
UPDATE aktFelhasznalo SET
aktFelhasznalo.C_EGYEDIAZONOSITO = NEWID()
FROM T_FELHASZNALO_OSSZES aktFelhasznalo
INNER JOIN T_TANEV aktTanev ON aktTanev.ID = aktFelhasznalo.C_TANEVID AND aktTanev.C_AKTIV = 'T' AND aktTanev.TOROLT = 'F'
WHERE aktFelhasznalo.C_EGYEDIAZONOSITO = @DefaultAzonosito
-- A következő tanév felhasználóinak egyedi azonosítóinak beállítása az aktuális tanév alapján, ha még nem lenne beállítva
UPDATE kov SET
kov.C_EGYEDIAZONOSITO = akt.C_EGYEDIAZONOSITO
FROM T_FELHASZNALO_OSSZES akt
INNER JOIN T_FELHASZNALO_OSSZES kov ON akt.C_INTEZMENYID = kov.C_INTEZMENYID
AND kov.C_ANYJANEVE = akt.C_ANYJANEVE
AND kov.C_SZULETESIHELY = akt.C_SZULETESIHELY
AND kov.C_SZULETESIDATUM = akt.C_SZULETESIDATUM
AND kov.C_SZULETESINEV = akt.C_SZULETESINEV
INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = akt.C_TANEVID AND akttv.C_AKTIV = 'T' AND akttv.TOROLT = 'F'
INNER JOIN T_TANEV_OSSZES kovtv ON kovtv.ID = kov.C_TANEVID AND kovtv.C_KOVETKEZO = 'T' AND kovtv.TOROLT = 'F'
WHERE kov.C_EGYEDIAZONOSITO = @DefaultAzonosito
-- Ha eddig még lenne felhasználó, aki nem kapott azonosítót, akkor itt kap
UPDATE T_FELHASZNALO_OSSZES SET
C_EGYEDIAZONOSITO = NEWID()
WHERE C_EGYEDIAZONOSITO = @DefaultAzonosito
-- Gondviselők azonosítóinak átvétele az előző évből ha az tanuló egyedi azonosítója azonos az előző évivel
-- és a gondviselő neve megegyezik az előző tanévivel
UPDATE aktg SET
aktg.C_EGYEDIAZONOSITO = prevg.C_EGYEDIAZONOSITO
FROM T_FELHASZNALO_OSSZES akt
INNER JOIN T_FELHASZNALO_OSSZES prev ON akt.C_INTEZMENYID = prev.C_INTEZMENYID
AND akt.C_EGYEDIAZONOSITO = prev.C_EGYEDIAZONOSITO
INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = akt.C_TANEVID AND akttv.C_AKTIV = 'T' AND akttv.TOROLT = 'F'
INNER JOIN T_TANEV_OSSZES prevtv ON prevtv.ID = prev.C_TANEVID AND akttv.C_SORSZAM - 2 = prevtv.C_SORSZAM AND prevtv.TOROLT = 'F'
INNER JOIN T_GONDVISELO_OSSZES aktg ON aktg.C_TANULOID = akt.ID
INNER JOIN T_GONDVISELO_OSSZES prevg ON prevg.C_TANULOID = prev.ID
WHERE aktg.C_EGYEDIAZONOSITO = @DefaultAzonosito
AND aktg.C_NEV = prevg.C_NEV
-- Ha még van gondviselő az aktuális tanévben, aki nem kapott azonosítót, akkor itt kap
UPDATE aktg SET
aktg.C_EGYEDIAZONOSITO = NEWID()
FROM T_GONDVISELO_OSSZES aktg
INNER JOIN T_TANEV aktTanev ON aktTanev.ID = aktg.C_TANEVID AND aktTanev.C_AKTIV = 'T' AND aktTanev.TOROLT = 'F'
WHERE aktg.C_EGYEDIAZONOSITO = @DefaultAzonosito
-- Ha a tanulok 4T alapján azonosak a következő tanévivel és a gondviselő neve is azonos, akkor a gondviselő
-- megkapja az következő évre is ugyanazt az egyedi azonosítót, amely az aktív tanévben van.
UPDATE kovg SET
kovg.C_EGYEDIAZONOSITO = aktg.C_EGYEDIAZONOSITO
FROM T_FELHASZNALO_OSSZES akt
INNER JOIN T_FELHASZNALO_OSSZES kov ON akt.C_INTEZMENYID = kov.C_INTEZMENYID
AND kov.C_ANYJANEVE = akt.C_ANYJANEVE
AND kov.C_SZULETESIHELY = akt.C_SZULETESIHELY
AND kov.C_SZULETESIDATUM = akt.C_SZULETESIDATUM
AND kov.C_SZULETESINEV = akt.C_SZULETESINEV
INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = akt.C_TANEVID AND akttv.C_AKTIV = 'T' AND akttv.TOROLT = 'F'
INNER JOIN T_TANEV_OSSZES kovtv ON kovtv.ID = kov.C_TANEVID AND kovtv.C_KOVETKEZO = 'T' AND kovtv.TOROLT = 'F'
INNER JOIN T_GONDVISELO_OSSZES aktg ON aktg.C_TANULOID = akt.ID
INNER JOIN T_GONDVISELO_OSSZES kovg ON kovg.C_TANULOID = kov.ID
WHERE kovg.C_EGYEDIAZONOSITO = @DefaultAzonosito
AND aktg.C_NEV = kovg.C_NEV
-- A megmaradt gondviselők azonosítójának generálása
UPDATE T_GONDVISELO_OSSZES SET
C_EGYEDIAZONOSITO = NEWID()
WHERE C_EGYEDIAZONOSITO = @DefaultAzonosito
-- IDP azonosító létrehozása
EXEC uspUpdateIDPEgyediAzonosito
END
GO

View file

@ -0,0 +1,229 @@
DROP PROCEDURE IF EXISTS uspUpdateIDPEgyediAzonosito
GO
CREATE PROCEDURE uspUpdateIDPEgyediAzonosito
AS
-- Ez az eljárás az IDP egyedi azonosítók frissítétéhez használható
SET NOCOUNT ON;
-- 1. lépés: összes hiányzó IDP kitöltése egy uj guid-al az aktuális tanévben
UPDATE akt SET
akt.C_IDPEGYEDIAZONOSITO = NEWID()
FROM T_FELHASZNALO_OSSZES akt
INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = akt.C_TANEVID
AND akttv.C_INTEZMENYID = akt.C_INTEZMENYID
AND akttv.C_AKTIV = 'T'
AND akttv.TOROLT = 'F'
WHERE 1 = 1
AND akt.TOROLT = 'F'
AND akt.C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000'
AND akt.C_EGYEDIAZONOSITO <> '00000000-0000-0000-0000-000000000000';
-- 2. lépés: Az IDP átvétele előző-következő tanévre
-- 10 azonosítóval
UPDATE pre SET
pre.C_IDPEGYEDIAZONOSITO = akt.C_IDPEGYEDIAZONOSITO
FROM T_FELHASZNALO_OSSZES pre
INNER JOIN T_FELHASZNALO_OSSZES akt ON akt.C_INTEZMENYID = pre.C_INTEZMENYID
AND akt.C_ANYJANEVE = pre.C_ANYJANEVE
AND ISNULL(LEFT(pre.C_SZULETESIHELY + ' ', CHARINDEX(' ', pre.C_SZULETESIHELY + ' ') - 1), '') = ISNULL(LEFT(akt.C_SZULETESIHELY + ' ', CHARINDEX(' ', akt.C_SZULETESIHELY + ' ') - 1), '')
AND akt.C_SZULETESIDATUM = pre.C_SZULETESIDATUM
AND akt.C_SZULETESINEV = pre.C_SZULETESINEV
AND akt.C_NYOMTATASINEV = pre.C_NYOMTATASINEV
AND akt.C_NEME = pre.C_NEME
AND ISNULL(akt.C_OKTATASIAZONOSITO, '') = ISNULL(pre.C_OKTATASIAZONOSITO, '')
AND ISNULL(akt.C_TAJSZAM, '') = ISNULL(pre.C_TAJSZAM, '')
AND ISNULL(akt.C_ADOSZAM, '') = ISNULL(pre.C_ADOSZAM, '')
AND akt.ELOZOTANEVIREKORDID = pre.ID
INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = akt.C_TANEVID
AND akttv.C_AKTIV = 'T'
AND akttv.TOROLT = 'F'
AND pre.C_TANEVID <> akt.C_TANEVID
WHERE akt.TOROLT = 'F'
AND pre.C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000';
-- 9 azonosítóval
UPDATE pre SET
pre.C_IDPEGYEDIAZONOSITO = akt.C_IDPEGYEDIAZONOSITO
FROM T_FELHASZNALO_OSSZES pre
INNER JOIN T_FELHASZNALO_OSSZES akt ON akt.C_INTEZMENYID = pre.C_INTEZMENYID
AND akt.C_ANYJANEVE = pre.C_ANYJANEVE
AND ISNULL(LEFT(pre.C_SZULETESIHELY + ' ', CHARINDEX(' ', pre.C_SZULETESIHELY + ' ') - 1), '') = ISNULL(LEFT(akt.C_SZULETESIHELY + ' ', CHARINDEX(' ', akt.C_SZULETESIHELY + ' ') - 1), '')
AND akt.C_SZULETESIDATUM = pre.C_SZULETESIDATUM
AND akt.C_SZULETESINEV = pre.C_SZULETESINEV
AND akt.C_NYOMTATASINEV = pre.C_NYOMTATASINEV
AND akt.C_NEME = pre.C_NEME
AND ISNULL(akt.C_OKTATASIAZONOSITO, '') = ISNULL(pre.C_OKTATASIAZONOSITO, '')
AND ISNULL(akt.C_TAJSZAM, '') = ISNULL(pre.C_TAJSZAM, '')
AND ISNULL(akt.C_ADOSZAM, '') = ISNULL(pre.C_ADOSZAM, '')
INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = akt.C_TANEVID
AND akttv.C_AKTIV = 'T'
AND akttv.TOROLT = 'F'
AND pre.C_TANEVID <> akt.C_TANEVID
WHERE akt.TOROLT = 'F'
AND pre.C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000';
-- 8 azonosítóval
UPDATE pre SET
pre.C_IDPEGYEDIAZONOSITO = akt.C_IDPEGYEDIAZONOSITO
FROM T_FELHASZNALO_OSSZES pre
INNER JOIN T_FELHASZNALO_OSSZES akt ON akt.C_INTEZMENYID = pre.C_INTEZMENYID
AND akt.C_ANYJANEVE = pre.C_ANYJANEVE
AND ISNULL(LEFT(pre.C_SZULETESIHELY + ' ', CHARINDEX(' ', pre.C_SZULETESIHELY + ' ') - 1), '') = ISNULL(LEFT(akt.C_SZULETESIHELY + ' ', CHARINDEX(' ', akt.C_SZULETESIHELY + ' ') - 1), '')
AND akt.C_SZULETESIDATUM = pre.C_SZULETESIDATUM
AND akt.C_SZULETESINEV = pre.C_SZULETESINEV
AND akt.C_NYOMTATASINEV = pre.C_NYOMTATASINEV
AND akt.C_NEME = pre.C_NEME
AND ISNULL(akt.C_OKTATASIAZONOSITO, '') = ISNULL(pre.C_OKTATASIAZONOSITO, '')
AND ISNULL(akt.C_TAJSZAM, '') = ISNULL(pre.C_TAJSZAM, '')
INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = akt.C_TANEVID
AND akttv.C_AKTIV = 'T'
AND akttv.TOROLT = 'F'
WHERE akt.TOROLT = 'F'
AND pre.C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000';
-- 7 azonosítóval
UPDATE pre SET
pre.C_IDPEGYEDIAZONOSITO = akt.C_IDPEGYEDIAZONOSITO
FROM T_FELHASZNALO_OSSZES pre
INNER JOIN T_FELHASZNALO_OSSZES akt ON akt.C_INTEZMENYID = pre.C_INTEZMENYID
AND akt.C_ANYJANEVE = pre.C_ANYJANEVE
AND ISNULL(LEFT(pre.C_SZULETESIHELY + ' ', CHARINDEX(' ', pre.C_SZULETESIHELY + ' ') - 1), '') = ISNULL(LEFT(akt.C_SZULETESIHELY + ' ', CHARINDEX(' ', akt.C_SZULETESIHELY + ' ') - 1), '')
AND akt.C_SZULETESIDATUM = pre.C_SZULETESIDATUM
AND akt.C_SZULETESINEV = pre.C_SZULETESINEV
AND akt.C_NYOMTATASINEV = pre.C_NYOMTATASINEV
AND akt.C_NEME = pre.C_NEME
AND ISNULL(akt.C_OKTATASIAZONOSITO, '') = ISNULL(pre.C_OKTATASIAZONOSITO, '')
INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = akt.C_TANEVID
AND akttv.C_AKTIV = 'T'
AND akttv.TOROLT = 'F'
AND pre.C_TANEVID <> akt.C_TANEVID
WHERE akt.TOROLT = 'F'
AND pre.C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000';
-- 6 azonosítóval
UPDATE pre SET
pre.C_IDPEGYEDIAZONOSITO = akt.C_IDPEGYEDIAZONOSITO
FROM T_FELHASZNALO_OSSZES pre
INNER JOIN T_FELHASZNALO_OSSZES akt ON akt.C_INTEZMENYID = pre.C_INTEZMENYID
AND akt.C_ANYJANEVE = pre.C_ANYJANEVE
AND ISNULL(LEFT(pre.C_SZULETESIHELY + ' ', CHARINDEX(' ', pre.C_SZULETESIHELY + ' ') - 1), '') = ISNULL(LEFT(akt.C_SZULETESIHELY + ' ', CHARINDEX(' ', akt.C_SZULETESIHELY + ' ') - 1), '')
AND akt.C_SZULETESIDATUM = pre.C_SZULETESIDATUM
AND akt.C_SZULETESINEV = pre.C_SZULETESINEV
AND akt.C_NYOMTATASINEV = pre.C_NYOMTATASINEV
AND akt.C_NEME = pre.C_NEME
INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = akt.C_TANEVID
AND akttv.C_AKTIV = 'T'
AND akttv.TOROLT = 'F'
AND pre.C_TANEVID <> akt.C_TANEVID
WHERE akt.TOROLT = 'F'
AND pre.C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000';
-- 5 azonosítóval
UPDATE pre SET
pre.C_IDPEGYEDIAZONOSITO = akt.C_IDPEGYEDIAZONOSITO
FROM T_FELHASZNALO_OSSZES pre
INNER JOIN T_FELHASZNALO_OSSZES akt ON akt.C_INTEZMENYID = pre.C_INTEZMENYID
AND akt.C_ANYJANEVE = pre.C_ANYJANEVE
AND ISNULL(LEFT(pre.C_SZULETESIHELY + ' ', CHARINDEX(' ', pre.C_SZULETESIHELY + ' ') - 1), '') = ISNULL(LEFT(akt.C_SZULETESIHELY + ' ', CHARINDEX(' ', akt.C_SZULETESIHELY + ' ') - 1), '')
AND akt.C_SZULETESIDATUM = pre.C_SZULETESIDATUM
AND akt.C_SZULETESINEV = pre.C_SZULETESINEV
AND akt.C_NEME = pre.C_NEME
INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = akt.C_TANEVID
AND akttv.C_AKTIV = 'T'
AND akttv.TOROLT = 'F'
AND pre.C_TANEVID <> akt.C_TANEVID
WHERE akt.TOROLT = 'F'
AND pre.C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000';
-- 4 azonosítóval
UPDATE pre SET
pre.C_IDPEGYEDIAZONOSITO = akt.C_IDPEGYEDIAZONOSITO
FROM T_FELHASZNALO_OSSZES pre
INNER JOIN T_FELHASZNALO_OSSZES akt ON akt.C_INTEZMENYID = pre.C_INTEZMENYID
AND akt.C_ANYJANEVE = pre.C_ANYJANEVE
AND akt.C_SZULETESIHELY = pre.C_SZULETESIHELY
AND akt.C_SZULETESIDATUM = pre.C_SZULETESIDATUM
AND akt.C_SZULETESINEV = pre.C_SZULETESINEV
INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = akt.C_TANEVID
AND akttv.C_AKTIV = 'T'
AND akttv.TOROLT = 'F'
AND pre.C_TANEVID <> akt.C_TANEVID
WHERE akt.TOROLT = 'F'
AND pre.C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000';
-- 3 azonosítóval
UPDATE pre SET
pre.C_IDPEGYEDIAZONOSITO = akt.C_IDPEGYEDIAZONOSITO
FROM T_FELHASZNALO_OSSZES pre
INNER JOIN T_FELHASZNALO_OSSZES akt ON akt.C_INTEZMENYID = pre.C_INTEZMENYID
AND akt.C_ANYJANEVE = pre.C_ANYJANEVE
AND ISNULL(LEFT(pre.C_SZULETESIHELY + ' ', CHARINDEX(' ', pre.C_SZULETESIHELY + ' ') - 1), '') = ISNULL(LEFT(akt.C_SZULETESIHELY + ' ', CHARINDEX(' ', akt.C_SZULETESIHELY + ' ') - 1), '')
AND akt.C_SZULETESIDATUM = pre.C_SZULETESIDATUM
AND akt.C_SZULETESINEV = pre.C_SZULETESINEV
INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = akt.C_TANEVID
AND akttv.C_AKTIV = 'T'
AND akttv.TOROLT = 'F'
AND pre.C_TANEVID <> akt.C_TANEVID
WHERE akt.TOROLT = 'F'
AND pre.C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000';
-- 3 azonosítóval
UPDATE pre SET
pre.C_IDPEGYEDIAZONOSITO = akt.C_IDPEGYEDIAZONOSITO
FROM T_FELHASZNALO_OSSZES pre
INNER JOIN T_FELHASZNALO_OSSZES akt ON akt.C_INTEZMENYID = pre.C_INTEZMENYID
AND akt.C_ANYJANEVE = pre.C_ANYJANEVE
AND ISNULL(LEFT(pre.C_SZULETESIHELY + ' ', CHARINDEX(' ', pre.C_SZULETESIHELY + ' ') - 1), '') = ISNULL(LEFT(akt.C_SZULETESIHELY + ' ', CHARINDEX(' ', akt.C_SZULETESIHELY + ' ') - 1), '')
AND akt.C_SZULETESIDATUM = pre.C_SZULETESIDATUM
AND akt.C_NYOMTATASINEV = pre.C_NYOMTATASINEV
INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = akt.C_TANEVID
AND akttv.C_AKTIV = 'T'
AND akttv.TOROLT = 'F'
AND pre.C_TANEVID <> akt.C_TANEVID
WHERE akt.TOROLT = 'F'
AND pre.C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000';
-- 3. lépés: összes hiányzó IDP kitöltése más tanévekben
UPDATE pre SET
pre.C_IDPEGYEDIAZONOSITO = pre.C_EGYEDIAZONOSITO
FROM T_FELHASZNALO_OSSZES pre
INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = pre.C_TANEVID
AND akttv.C_INTEZMENYID = pre.C_INTEZMENYID
AND akttv.C_AKTIV = 'F'
AND akttv.TOROLT = 'F'
WHERE pre.C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000';
-- 4. lépés: ha az IDP azonosító valamelyik tanévben kétszer is szerepel,
-- akkor csak egyet tartunk meg a többinek adunk egy új ID-t
UPDATE akt SET
akt.C_IDPEGYEDIAZONOSITO = NEWID()
FROM T_FELHASZNALO_OSSZES akt
INNER JOIN T_TANEV_OSSZES akttv ON akttv.ID = akt.C_TANEVID AND akttv.TOROLT = 'F'
INNER JOIN (
SELECT C_INTEZMENYID, C_TANEVID, C_IDPEGYEDIAZONOSITO, COUNT(*) C, MAX(ID) MAX_ID
FROM T_FELHASZNALO_OSSZES
GROUP BY C_INTEZMENYID, C_TANEVID, C_IDPEGYEDIAZONOSITO
HAVING COUNT(*) > 1
) dupl ON akt.C_INTEZMENYID = dupl.C_INTEZMENYID
AND akt.C_TANEVID = dupl.C_TANEVID
AND akt.C_IDPEGYEDIAZONOSITO = dupl.C_IDPEGYEDIAZONOSITO
AND akt.ID <> dupl.MAX_ID
WHERE akt.C_IDPEGYEDIAZONOSITO <> '00000000-0000-0000-0000-000000000000';
-- 5. lépés: ha még mindíg maradt volna valaki akinek nincs ID-ja
UPDATE T_FELHASZNALO_OSSZES
SET C_IDPEGYEDIAZONOSITO = NEWID()
WHERE C_IDPEGYEDIAZONOSITO = '00000000-0000-0000-0000-000000000000'