ALLR#77557 -- Nieuwe omgeving voor Alliander

svn path=/Customer/trunk/; revision=60454
This commit is contained in:
Arthur Egberink
2023-05-17 12:31:06 +00:00
parent 162b5403af
commit f5e6a66b1b

View File

@@ -93,7 +93,7 @@ BEGIN
-- ManagerID 20
-- Tussenvoegsel 21
v_seq_of_columns := '0;0;0;0;0;0;10;7;21;6;'
v_seq_of_columns := '0;0;0;0;0;0;4;7;21;6;'
-- v_alg_locatie_code 1
-- v_alg_gebouw_code 2
-- v_alg_verdieping_volgnr 3
@@ -118,7 +118,7 @@ BEGIN
-- v_prs_perslid_email 18
-- v_prs_perslid_dienstverband 19
-- v_prs_perslid_nr 20
|| '19;0;0;0;0;0;11;12;13;14;'
|| '4;0;0;0;0;0;11;12;13;14;'
-- v_prs_srtperslid_omschrijving 21
-- v_prs_perslid_oslogin 22
-- v_prs_perslid_wachtwoord 23
@@ -129,14 +129,22 @@ BEGIN
-- v_prs_kenmerk2 28
-- v_prs_kenmerk3 29
-- v_prs_kenmerk4 30
|| '15;17;18;20;8;1;5;16;0;0;'
|| '0;0;0;0;0;0';
|| '15;17;18;20;8;1;5;16;22;10;'
|| '19;0;0;0;0;0';
prs.import_perslid(p_import_key, v_seq_of_columns, 'Group;Peildatum;Aanstellingsdatum;WerknemersID;Medewerkerstype;Roepnaam;Achternaam;PrimaryWorkPhone;PrimaryWorkEmail;AfdelingID;Afdelingnaam;Lvl3ID;Lvl3naam;Lvl4ID;Lvl4naam;IsManager;LocatieID;LocatieNaam;BusinessTitle;ManagerID;%');
prs.import_perslid(p_import_key, v_seq_of_columns, 'Group;Peildatum;Aanstellingsdatum;WerknemersID;Medewerkerstype;Roepnaam;Achternaam;PrimaryWorkPhone;PrimaryWorkEmail;AfdelingID;Afdelingnaam;Lvl3ID;Lvl3naam;Lvl4ID;Lvl4naam;IsManager;LocatieID;LocatieNaam;BusinessTitle;ManagerID;Tussenvoegsel;WorkMobilePhone%');
UPDATE fac_imp_perslid
SET prs_perslid_oslogin = SUBSTR(UPPER(prs_perslid_email), 1,INSTR(prs_perslid_email, '@')-1),
prs_perslid_telefoonnr = SUBSTR(REPLACE(prs_kenmerk9, ' '),1,15);
SET prs_perslid_oslogin = prs_perslid_nr,
prs_perslid_telefoonnr = SUBSTR(REPLACE(prs_kenmerk9, ' '),1,15),
prs_perslid_mobiel = SUBSTR(REPLACE(prs_kenmerk13, ' '),1,15);
-- De afdelingscode slaan we tijdelijk op in kenmerk14 omdat deze bij toekomstige medewerkers leeg is.
UPDATE fac_imp_perslid
SET prs_afdeling_naam = COALESCE(prs_kenmerk14, '_FH'),
prs_kenmerk1 = COALESCE(prs_kenmerk1, 'Future Hires'),
prs_srtperslid_omschrijving = COALESCE(prs_kenmerk15, 'Future Hire');
END allr_import_perslid;
/
@@ -163,6 +171,17 @@ IS
AND p.prs_afdeling_key = ab.prs_afdeling_key
AND ab.prs_bedrijf_key = c_bedrijf_key;
-- Cursor om de afdelingsstructuur aan te maken.
CURSOR c_afd_mut
IS
SELECT DISTINCT prs_afdeling_naam,
prs_kenmerk1,
prs_kenmerk2,
prs_kenmerk3,
prs_kenmerk4,
prs_kenmerk5
FROM fac_imp_perslid;
-- Cursor om afdelingen te verwijderen
CURSOR c_afd_del (c_bedrijf_key IN NUMBER)
IS
@@ -173,7 +192,8 @@ IS
FROM prs_v_afdeling_boom ab, prs_afdeling a
WHERE ab.prs_afdeling_key = a.prs_afdeling_key
AND a.prs_afdeling_verwijder IS NULL
AND ab.prs_bedrijf_key = 322
AND ab.prs_bedrijf_key = c_bedrijf_key
AND a.prs_afdeling_naam <> '_FH'
AND NOT EXISTS
(SELECT 1
FROM fac_imp_perslid i
@@ -210,85 +230,9 @@ IS
v_prs_afdeling_key3 NUMBER;
v_prs_afdeling_verwijder DATE;
c_prs_bedrijf_key NUMBER := 321; -- Intern bedrijf Alliander
v_prs_bedrijf_key NUMBER;
v_prs_perslid_key NUMBER;
BEGIN
FOR rec IN c
LOOP
v_aanduiding := rec.prs_kenmerk2 || '-' || rec.prs_kenmerk4 || '-' || rec.prs_afdeling_naam;
BEGIN
v_errorhint := 'Controle afdeling niveau 1';
SELECT prs_afdeling_key, prs_afdeling_verwijder
INTO v_prs_afdeling_key1, v_prs_afdeling_verwijder
FROM prs_afdeling a
WHERE REPLACE(prs_afdeling_naam, '_vv') = rec.prs_kenmerk2;
IF v_prs_afdeling_verwijder IS NOT NULL
THEN
UPDATE prs_afdeling
SET prs_afdeling_verwijder = NULL
WHERE prs_afdeling_key = v_prs_afdeling_key1;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_errorhint := 'Aanmaken afdeling niveau 1';
INSERT INTO prs_afdeling (prs_bedrijf_key, prs_afdeling_naam, prs_afdeling_omschrijving)
VALUES (c_prs_bedrijf_key, SUBSTR (rec.prs_kenmerk2, 1, 15), SUBSTR (rec.prs_kenmerk3, 1, 60))
RETURNING prs_afdeling_key
INTO v_prs_afdeling_key1;
END;
-- Afdeling niveau2
BEGIN
v_errorhint := 'Controle afdeling niveau 2';
SELECT prs_afdeling_key, prs_afdeling_verwijder
INTO v_prs_afdeling_key2, v_prs_afdeling_verwijder
FROM prs_afdeling a
WHERE prs_afdeling_parentkey = v_prs_afdeling_key1 AND REPLACE(prs_afdeling_naam, '_vv') = rec.prs_kenmerk4;
IF v_prs_afdeling_verwijder IS NOT NULL
THEN
UPDATE prs_afdeling
SET prs_afdeling_verwijder = NULL
WHERE prs_afdeling_key = v_prs_afdeling_key2;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_errorhint := 'Aanmaken afdeling niveau 2';
INSERT INTO prs_afdeling (prs_afdeling_parentkey, prs_afdeling_naam, prs_afdeling_omschrijving)
VALUES (v_prs_afdeling_key1, SUBSTR (rec.prs_kenmerk4, 1, 15), SUBSTR (rec.prs_kenmerk5, 1, 60))
RETURNING prs_afdeling_key
INTO v_prs_afdeling_key2;
END;
-- Afdeling niveau3
BEGIN
v_errorhint := 'Controle afdeling niveau 3';
SELECT prs_afdeling_key, prs_afdeling_verwijder
INTO v_prs_afdeling_key3, v_prs_afdeling_verwijder
FROM prs_afdeling a
WHERE prs_afdeling_parentkey = v_prs_afdeling_key2 AND REPLACE(prs_afdeling_naam, '_vv') = rec.prs_afdeling_naam;
IF v_prs_afdeling_verwijder IS NOT NULL
THEN
UPDATE prs_afdeling
SET prs_afdeling_verwijder = NULL
WHERE prs_afdeling_key = v_prs_afdeling_key3;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_errorhint := 'Aanmaken afdeling niveau 3';
INSERT INTO prs_afdeling (prs_afdeling_parentkey, prs_afdeling_naam, prs_afdeling_omschrijving)
VALUES (v_prs_afdeling_key2,
SUBSTR (rec.prs_afdeling_naam, 1, 15),
SUBSTR (rec.prs_kenmerk1, 1, 60))
RETURNING prs_afdeling_key
INTO v_prs_afdeling_key3;
END;
END LOOP;
SELECT COUNT (*)
INTO v_count_imp
@@ -300,9 +244,107 @@ BEGIN
FROM prs_perslid p, prs_v_afdeling_boom ab
WHERE p.prs_afdeling_key = ab.prs_afdeling_key AND ab.prs_bedrijf_key = c_prs_bedrijf_key;
-- We gaan alleen mensen verwijderen als de aangeboden populatie groter is dan de helft van de huidige populatie.
-- We gaan alleen de import uitvoeren als de aangeboden populatie groter is dan de helft van de huidige populatie.
IF v_count_imp > v_count_allr / 2
THEN
FOR rec IN c_afd_mut
LOOP
v_prs_afdeling_key1 := NULL;
v_prs_afdeling_key2 := NULL;
v_prs_bedrijf_key := NULL;
IF rec.prs_kenmerk2 IS NOT NULL
THEN
v_aanduiding := rec.prs_kenmerk2 || '-' || rec.prs_kenmerk4 || '-' || rec.prs_afdeling_naam;
BEGIN
v_errorhint := 'Controle afdeling niveau 1';
SELECT prs_afdeling_key, prs_afdeling_verwijder
INTO v_prs_afdeling_key1, v_prs_afdeling_verwijder
FROM prs_afdeling a
WHERE REPLACE(prs_afdeling_naam, '_vv') = rec.prs_kenmerk2;
UPDATE prs_afdeling
SET prs_afdeling_verwijder = NULL,
prs_afdeling_naam = REPLACE(prs_afdeling_naam, '_vv')
WHERE prs_afdeling_key = v_prs_afdeling_key1;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_errorhint := 'Aanmaken afdeling niveau 1';
INSERT INTO prs_afdeling (prs_bedrijf_key, prs_afdeling_naam, prs_afdeling_omschrijving)
VALUES (c_prs_bedrijf_key, SUBSTR (rec.prs_kenmerk2, 1, 15), SUBSTR (rec.prs_kenmerk3, 1, 60))
RETURNING prs_afdeling_key
INTO v_prs_afdeling_key1;
END;
END IF;
-- Afdeling niveau2
IF rec.prs_kenmerk4 IS NOT NULL
THEN
BEGIN
v_errorhint := 'Controle afdeling niveau 2';
SELECT prs_afdeling_key, prs_afdeling_verwijder
INTO v_prs_afdeling_key2, v_prs_afdeling_verwijder
FROM prs_afdeling a
WHERE COALESCE(prs_afdeling_parentkey, -1) = COALESCE(v_prs_afdeling_key1, -1) AND REPLACE(prs_afdeling_naam, '_vv') = rec.prs_kenmerk4;
UPDATE prs_afdeling
SET prs_afdeling_verwijder = NULL,
prs_afdeling_naam = REPLACE(prs_afdeling_naam, '_vv')
WHERE prs_afdeling_key = v_prs_afdeling_key2;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_errorhint := 'Aanmaken afdeling niveau 2: ' || v_prs_afdeling_key1;
INSERT INTO prs_afdeling (prs_afdeling_parentkey, prs_afdeling_naam, prs_afdeling_omschrijving)
VALUES (v_prs_afdeling_key1, SUBSTR (rec.prs_kenmerk4, 1, 15), SUBSTR (rec.prs_kenmerk5, 1, 60))
RETURNING prs_afdeling_key
INTO v_prs_afdeling_key2;
v_errorhint := 'Einde aanmaken afdeling niveau 2';
END;
END IF;
-- Afdeling niveau3
-- Als de persoon gekoppeld is aan de afdeling Future Hires dan wordt deze op afdelingsniveau 1 gekoppeld aan de afdeling _FH
-- Als de afdeling al op niveau 2 voorkomt hoeven we deze hier niet meer aan te maken.
IF COALESCE(rec.prs_kenmerk4, 'QueQeLeQue') <> rec.prs_afdeling_naam AND COALESCE(rec.prs_kenmerk2, 'QueQeLeQue') <> rec.prs_afdeling_naam
THEN
BEGIN
v_errorhint := 'Controle afdeling niveau 3';
SELECT prs_afdeling_key, prs_afdeling_verwijder
INTO v_prs_afdeling_key3, v_prs_afdeling_verwijder
FROM prs_afdeling a
WHERE COALESCE(prs_afdeling_parentkey, -1) = COALESCE(v_prs_afdeling_key2, -1) AND REPLACE(prs_afdeling_naam, '_vv') = rec.prs_afdeling_naam;
UPDATE prs_afdeling
SET prs_afdeling_verwijder = NULL,
prs_afdeling_naam = REPLACE(prs_afdeling_naam, '_vv')
WHERE prs_afdeling_key = v_prs_afdeling_key3;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_errorhint := 'Aanmaken afdeling niveau 3 [' || v_prs_afdeling_key2 || ']';
IF v_prs_afdeling_key2 IS NULL
THEN
v_prs_bedrijf_key := c_prs_bedrijf_key;
END IF;
INSERT INTO prs_afdeling (prs_bedrijf_key, prs_afdeling_parentkey, prs_afdeling_naam, prs_afdeling_omschrijving)
VALUES (v_prs_bedrijf_key,
v_prs_afdeling_key2,
SUBSTR (rec.prs_afdeling_naam, 1, 15),
SUBSTR (rec.prs_kenmerk1, 1, 60))
RETURNING prs_afdeling_key
INTO v_prs_afdeling_key3;
END;
END IF;
END LOOP;
-- Voordat we gaan importeren gaan we op zoek of we nog mensen moeten verwijderen die niet in de import voorkomen.
FOR rec IN c_del (c_prs_bedrijf_key)
LOOP
@@ -327,6 +369,87 @@ BEGIN
v_errorhint);
END;
END LOOP;
-- Nu kunnen we de standaard facilitor-update doorvoeren
prs.update_perslid (p_import_key, 'NR', NULL);
-- En dan gaan we als laatste de kenmmerken bijwerken
FOR rec IN c
LOOP
-- We kunnen alleen maar kenmerken toevoegen/aanpassen als de persoon ook is aangemaakt zonder foutmelding.
IF rec.prs_perslid_key IS NOT NULL
THEN
v_errorhint := 'Bijwerken kenmerk leidinggevende ';
v_aanduiding := rec.prs_perslid_voornaam || ' ' || rec.prs_perslid_naam;
IF rec.prs_kenmerk8 IS NOT NULL
THEN
BEGIN
-- op zoek naar de leidinggevende
SELECT prs_perslid_key
INTO v_prs_perslid_key
FROM prs_perslid
WHERE prs_perslid_nr = rec.prs_kenmerk8;
FLX.setflex('PRS', 1021, rec.prs_perslid_key, 'P', v_prs_perslid_key);
EXCEPTION WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (p_import_key,
'W',
'Leidinggevende niet gevonden',
rec.prs_kenmerk8);
END;
END IF;
-- Status
v_errorhint := 'Bijwerken kenmerk status';
FLX.setflex('PRS', 1022, rec.prs_perslid_key, 'P', rec.prs_kenmerk10);
-- Type medewerker
v_errorhint := 'Bijwerken kenmerk type medewerker';
FLX.setflex('PRS', 1020, rec.prs_perslid_key, 'P', rec.prs_kenmerk11);
-- Is manager
v_errorhint := 'Bijwerken kenmerk is manager';
IF rec.prs_kenmerk12 = 1
THEN
FLX.setflex('PRS', 1040, rec.prs_perslid_key, 'P', 1);
ELSE
FLX.setflex('PRS', 1040, rec.prs_perslid_key, 'P', NULL);
END IF;
END IF;
END LOOP;
-- En dan de afdelingen verwijderen die niet meer voorkomen.
FOR rec IN c_afd_del(c_prs_bedrijf_key)
LOOP
BEGIN
v_errorhint := 'Verwijderen afdeling ';
v_aanduiding := rec.prs_afdeling_naam || '-' || rec.prs_afdeling_omschrijving || ' Niveau: ' || rec.niveau;
UPDATE prs_afdeling
SET prs_afdeling_verwijder = SYSDATE,
prs_afdeling_naam = REPLACE(prs_afdeling_naam, '_vv')
WHERE prs_afdeling_key = rec.prs_afdeling_key
-- we gaan geen afdelingen verwijderen als er nog onderliggende niet verwijderde afdelingen bestaan
AND NOT EXISTS (SELECT 1 FROM prs_afdeling a WHERE a.prs_afdeling_verwijder IS NULL AND a.prs_afdeling_parentkey = rec.prs_afdeling_key)
-- we gaan geen afdelingen verwijderen als er nog onderliggende niet verwijderde personen bestaan
AND NOT EXISTS (SELECT 1 FROM prs_perslid p WHERE p.prs_perslid_verwijder IS NULL AND p.prs_afdeling_key = rec.prs_afdeling_key);
EXCEPTION WHEN OTHERS
THEN
-- Markeer de afdeling. Hiervoor gaan we de afdelingcode voorzien van '_vv' van vervallen
UPDATE prs_afdeling
SET prs_afdeling_naam = prs_afdeling_naam || '_vv'
WHERE prs_afdeling_key = rec.prs_afdeling_key
AND prs_afdeling_naam NOT LIKE '%vv';
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'OTHERS (error '||oracle_err_num||'/'||oracle_err_mes||')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || ': ' || v_errormsg,
'');
END;
END LOOP;
ELSE
fac.imp_writelog (p_import_key,
'E',
@@ -334,77 +457,6 @@ BEGIN
'');
END IF;
-- Nu kunnen we de standaard facilitor-update doorvoeren
prs.update_perslid (p_import_key, 'NR', NULL);
-- En dan gaan we als laatste de kenmmerken bijwerken
FOR rec IN c
LOOP
-- We kunnen alleen maar kenmerken toevoegen/aanpassen als de persoon ook is aangemaakt zonder foutmelding.
IF rec.prs_perslid_key IS NOT NULL
THEN
v_errorhint := 'Bijwerken kenmerk leidinggevende ';
v_aanduiding := rec.prs_perslid_voornaam || ' ' || rec.prs_perslid_naam;
IF rec.prs_kenmerk8 IS NOT NULL
THEN
BEGIN
-- op zoek naar de leidinggevende
SELECT prs_perslid_key
INTO v_prs_perslid_key
FROM prs_perslid
WHERE prs_perslid_nr = rec.prs_kenmerk8;
FLX.setflex('PRS', 1021, rec.prs_perslid_key, 'P', v_prs_perslid_key);
EXCEPTION WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (p_import_key,
'W',
'Leidinggevende niet gevonden',
rec.prs_kenmerk8);
END;
END IF;
-- Status
v_errorhint := 'Bijwerken kenmerk status';
FLX.setflex('PRS', 1022, rec.prs_perslid_key, 'P', rec.prs_kenmerk10);
-- Type medewerker
v_errorhint := 'Bijwerken kenmerk type medewerker';
FLX.setflex('PRS', 1020, rec.prs_perslid_key, 'P', rec.prs_kenmerk11);
-- Is manager
v_errorhint := 'Bijwerken kenmerk is manager';
FLX.setflex('PRS', 1020, rec.prs_perslid_key, 'P', rec.prs_kenmerk12);
END IF;
END LOOP;
-- En dan de afdelingen verwijderen die niet meer voorkomen.
FOR rec IN c_afd_del(c_prs_bedrijf_key)
LOOP
BEGIN
v_errorhint := 'Verwijderen afdeling ';
v_aanduiding := rec.prs_afdeling_naam || '-' || rec.prs_afdeling_omschrijving || ' Niveau: ' || rec.niveau;
UPDATE prs_afdeling
SET prs_afdeling_verwijder = SYSDATE,
prs_afdeling_naam = REPLACE(prs_afdeling_naam, '_vv')
WHERE prs_afdeling_key = rec.prs_afdeling_key;
EXCEPTION WHEN OTHERS
THEN
-- Markeer de afdeling. Hiervoor gaan we de afdelingcode voorzien van '_vv' van vervallen
UPDATE prs_afdeling
SET prs_afdeling_naam = prs_afdeling_naam || '_vv'
WHERE prs_afdeling_key = rec.prs_afdeling_key
AND prs_afdeling_naam NOT LIKE '%vv';
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'OTHERS (error '||oracle_err_num||'/'||oracle_err_mes||')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || ': ' || v_errormsg,
'');
END;
END LOOP;
EXCEPTION WHEN OTHERS
THEN
oracle_err_num := SQLCODE;