BAMG#67179 -- Royal BAM Group N.V. Personen/Organisatie koppeling

svn path=/Customer/trunk/; revision=53164
This commit is contained in:
Arthur Egberink
2021-09-27 17:48:49 +00:00
parent fb47f072fe
commit 5539d9e166

View File

@@ -74,7 +74,7 @@ BEGIN
VALUES (SUBSTR(v_afdelingscode, 1, 15),
SUBSTR(v_afdelingsparent, 1, 15),
SUBSTR(v_afdelingsomschrijving, 1, 60),
TO_CHAR(SYSDATE, 'YYYY-MM-DD HH:MI:SS'));
TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'));
END;
END LOOP;
@@ -93,11 +93,208 @@ EXCEPTION
END bamg_import_organisatie;
/
CREATE OR REPLACE PROCEDURE bamg_update_organisatie (p_import_key IN NUMBER)
CREATE OR REPLACE PROCEDURE bamg_update_organisatie(p_import_key IN NUMBER)
AS
BEGIN
-- De daadwerkelijke verwerking vindt plaats in de proceduere bamg_update_organisatie_sched
NULL;
END;
/
-- Deze is gescheduled via de bamg_daily
CREATE OR REPLACE PROCEDURE bamg_update_organisatie_sched
AS
CURSOR c(p_like VARCHAR2) IS
SELECT prs_afdeling_naam,
DECODE (prs_afdeling_naam_parent, 'BU6000', 'OC6000', prs_afdeling_naam_parent) prs_afdeling_naam_parent,
prs_afdeling_omschrijving,
prs_afdeling_externid
FROM fac_imp_organisatie
WHERE prs_afdeling_naam LIKE p_like;
CURSOR c_div IS
SELECT prs_afdeling_naam,
prs_afdeling_naam_parent,
prs_afdeling_omschrijving,
prs_afdeling_externid
FROM fac_imp_organisatie
WHERE prs_afdeling_naam NOT LIKE 'OC%'
AND prs_afdeling_naam NOT LIKE 'BU%'
AND prs_afdeling_naam NOT LIKE '%/%';
CURSOR c_org_del IS
SELECT prs_afdeling_key, a.prs_afdeling_naam
FROM prs_afdeling a, prs_v_afdeling_boom b
WHERE a.prs_afdeling_verwijder IS NULL
AND a.prs_afdeling_key = b.prs_afdeling_key
AND prs_afdeling_externsyncdate < SYSDATE-7
ORDER BY niveau DESC;
CURSOR c_prs_del IS
SELECT prs_perslid_key
FROM prs_perslid p
WHERE p.prs_perslid_verwijder IS NULL
AND p.prs_perslid_externsyncdate < SYSDATE-7
ORDER BY niveau DESC;
v_parent_key NUMBER;
v_bedrijf_key NUMBER;
v_afdeling_key NUMBER;
v_max_datum VARCHAR2(100);
v_aanduiding VARCHAR2 (100);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
PROCEDURE del_afdeling (p_naam IN VARCHAR2, p_key IN NUMBER)
AS
BEGIN
v_aanduiding := p_naam;
v_errorhint := 'Verwijder de afdeling: ' || p_naam;
UPDATE prs_afdeling SET prs_afdeling_verwijder = SYSDATE WHERE prs_afdeling_key = p_key;
EXCEPTION WHEN OTHERS
THEN
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_errormsg
|| ' - '
|| v_aanduiding,
v_errorhint);
END;
PROCEDURE add_afdeling (p_naam IN VARCHAR2, p_parent IN VARCHAR2, p_omschrijving IN VARCHAR2, p_syncdate IN VARCHAR2)
AS
BEGIN
BEGIN
v_aanduiding := p_naam;
v_parent_key := NULL;
v_bedrijf_key := NULL;
IF p_parent IS NOT NULL
THEN
-- We gaan eerst op zoek naar de parent
v_errorhint := 'Zoek de parent: ' || p_parent;
SELECT prs_afdeling_key
INTO v_parent_key
FROM prs_afdeling a
WHERE a.prs_afdeling_naam = p_parent
AND prs_afdeling_verwijder IS NULL;
ELSE
v_bedrijf_key := 1; -- BAM
END IF;
BEGIN
-- Nu gaan we kijken of we de afdeling_kunnen vinden
v_errorhint := 'Zoek de afdeling: ' || p_naam;
SELECT prs_afdeling_key
INTO v_afdeling_key
FROM prs_afdeling a
WHERE a.prs_afdeling_naam = p_naam
AND prs_afdeling_verwijder IS NULL;
v_errorhint := 'Pas de afdeling aan: ' || p_naam;
UPDATE prs_afdeling
SET prs_afdeling_omschrijving = p_omschrijving,
prs_afdeling_parentkey = v_parent_key,
prs_bedrijf_key = v_bedrijf_key,
prs_afdeling_externsyncdate = TO_DATE(p_syncdate, 'yyyy-mm-dd hh24:mi:ss')
WHERE prs_afdeling_key = v_afdeling_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_errorhint := 'Voeg afdeling toe: ' || p_naam;
INSERT INTO prs_afdeling (prs_afdeling_naam,
prs_afdeling_omschrijving,
prs_afdeling_parentkey,
prs_bedrijf_key,
prs_afdeling_externsyncdate)
VALUES (p_naam,
p_omschrijving,
v_parent_key,
v_bedrijf_key,
TO_DATE(p_syncdate, 'yyyy-mm-dd hh24:mi:ss'));
END;
EXCEPTION WHEN OTHERS
THEN
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_errormsg
|| ' - '
|| v_aanduiding,
v_errorhint);
END;
END;
BEGIN
BEGIN
SELECT MAX(SUBSTR(prs_afdeling_externid, 1, 10))
INTO v_max_datum
FROM fac_imp_organisatie;
DELETE fac_imp_organisatie
WHERE prs_afdeling_externid NOT LIKE v_max_datum || '%';
FOR rec IN c('OC%')
LOOP
v_aanduiding := rec.prs_afdeling_naam;
add_afdeling (rec.prs_afdeling_naam, rec.prs_afdeling_naam_parent, rec.prs_afdeling_omschrijving, rec.prs_afdeling_externid);
END LOOP;
FOR rec IN c('BU%')
LOOP
v_aanduiding := rec.prs_afdeling_naam;
add_afdeling (rec.prs_afdeling_naam, rec.prs_afdeling_naam_parent, rec.prs_afdeling_omschrijving, rec.prs_afdeling_externid);
END LOOP;
FOR rec IN c_div
LOOP
v_aanduiding := rec.prs_afdeling_naam;
add_afdeling (rec.prs_afdeling_naam, rec.prs_afdeling_naam_parent, rec.prs_afdeling_omschrijving, rec.prs_afdeling_externid);
END LOOP;
FOR rec IN c('%/%')
LOOP
v_aanduiding := rec.prs_afdeling_naam;
add_afdeling (rec.prs_afdeling_naam, rec.prs_afdeling_naam_parent, rec.prs_afdeling_omschrijving, rec.prs_afdeling_externid);
END LOOP;
-- We verwijderen personen die de laatste 7 dagen niet meer in de interface zaten.
FOR rec IN c_prs_del
LOOP
PRS.delete_perslid (rec.prs_perslid_key);
END LOOP;
v_errorhint := 'Verwijderen afdelingen';
-- We verwijderen afdelingen die de laatste 7 dagen niet meer in de interface zaten.
FOR rec IN c_org_del
LOOP
del_afdeling (rec.prs_afdeling_naam, rec.prs_afdeling_key);
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
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, v_errorhint);
END;
END;
/
@@ -194,19 +391,6 @@ BEGIN
FOR rec IN C
LOOP
SELECT count(*)
INTO v_count
FROM prs_afdeling
WHERE prs_bedrijf_key = 1
AND prs_afdeling_naam = rec.prs_afdeling_naam;
IF v_count = 0
THEN
INSERT INTO prs_afdeling (prs_afdeling_naam, prs_afdeling_omschrijving, prs_bedrijf_key)
VALUES (rec.prs_afdeling_naam, 'Afdeling ' || rec.prs_afdeling_naam, 1);
END IF;
prs.update_perslid (p_import_key, 'NR', 'A');
BEGIN
@@ -342,6 +526,18 @@ EXCEPTION
END;
/
-- Dagelijkse taak
CREATE OR REPLACE PROCEDURE bamg_daily
AS
BEGIN
-- Verwerk de organisatieonderdelen die we een voor een via de API ontvangen hebben
-- en kijk welke organistatie-onderdelen en personen verwijderd kunnen worden.
bamg_update_organisatie_sched;
END;
/
------ payload end ------
SET DEFINE OFF