BAMG#67179 -- Royal BAM Group N.V. Personen/Organisatie koppeling
svn path=/Customer/trunk/; revision=53164
This commit is contained in:
228
BAMG/bamg.sql
228
BAMG/bamg.sql
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user