diff --git a/VOLK/volk.sql b/VOLK/volk.sql index 433c08f5a..ec3fcd4ba 100644 --- a/VOLK/volk.sql +++ b/VOLK/volk.sql @@ -1851,6 +1851,12 @@ BEGIN || ']'); END IF; + -- als de afdeling minder dan 6 karakters bevat, moeten we deze aanvullen met voorloopnullen + IF LENGTH (v_afdeling_naam) < 6 + THEN + v_afdeling_naam := LPAD (v_afdeling_naam, 6, '0'); + END IF; + -- v_afdeling_naam_parent := TRIM (v_afdeling_naam_parent); @@ -1867,6 +1873,13 @@ BEGIN || ']'); END IF; + -- als de afdelingparent minder dan 6 karakters bevat, moeten we deze aanvullen met voorloopnullen + IF LENGTH (v_afdeling_naam_parent) < 6 + THEN + v_afdeling_naam_parent := + LPAD (v_afdeling_naam_parent, 6, '0'); + END IF; + -- v_afdeling_omschrijving := TRIM (v_afdeling_omschrijving); @@ -1901,11 +1914,13 @@ BEGIN prs_bedrijf_naam, prs_afdeling_naam, prs_afdeling_naam_parent, - prs_afdeling_omschrijving) + prs_afdeling_omschrijving, + prs_kostenplaats_nr) VALUES (v_bedrijf_naam, v_afdeling_naam, - v_afdeling_naam_parent, - v_afdeling_omschrijving); + '000036', -- we nemen geen niveaus op in Facilitor, alles valt direct onder Volksbank + v_afdeling_omschrijving, + '999999'); -- dummy kostenplaats v_count_import := v_count_import + 1; END IF; @@ -1949,20 +1964,25 @@ END volk_import_organisatie; CREATE OR REPLACE PROCEDURE volk_delete_organisatie (p_import_key IN NUMBER) AS - --- afdelingen die niet in de import voorkomen en waar ook geen medewerkers meer onder vallen --- deze mogen een verwijderdatum krijgen CURSOR c_del IS - SELECT a.prs_afdeling_key, - a.prs_afdeling_naam || ' ' || a.prs_afdeling_omschrijving afdeling - FROM prs_afdeling a - WHERE a.prs_afdeling_naam NOT IN (SELECT o.prs_afdeling_naam - FROM fac_imp_organisatie o) - AND a.prs_afdeling_key NOT IN - (SELECT p.prs_afdeling_key - FROM prs_perslid p - WHERE p.prs_perslid_verwijder IS NULL - AND p.prs_perslid_inactief IS NULL); + SELECT a.prs_afdeling_key, + a.prs_afdeling_naam || ' ' || a.prs_afdeling_omschrijving afdeling + FROM prs_afdeling a + WHERE NOT EXISTS + (SELECT i.prs_afdeling_naam + FROM fac_imp_organisatie i + WHERE i.prs_afdeling_naam = a.prs_afdeling_naam) + AND NOT EXISTS + (SELECT p.prs_afdeling_key + FROM prs_perslid p + WHERE p.prs_afdeling_key = a.prs_afdeling_key) + AND NOT EXISTS + (SELECT * + FROM prs_afdeling p + WHERE p.prs_afdeling_parentkey = a.prs_afdeling_key); + BEGIN FOR rec IN c_del LOOP @@ -1970,22 +1990,24 @@ BEGIN UPDATE prs_afdeling a SET a.prs_afdeling_verwijder = SYSDATE WHERE a.prs_afdeling_key = rec.prs_afdeling_key; - - fac.trackaction ('ADMTRK', + + fac.trackaction ( + 'ADMTRK', rec.prs_afdeling_key, NULL, NULL, - 'Afdeling '|| rec.afdeling || ' is verwijderd vanuit de organisatie import'); + 'Afdeling ' + || rec.afdeling + || ' is verwijderd vanuit de organisatie import'); EXCEPTION WHEN OTHERS - THEN - - fac.imp_writelog ( + THEN + fac.imp_writelog ( p_import_key, 'W', 'volk_delete_afdeling', - 'Verwijderen van afdeling: ' + 'Verwijderen van afdeling: ' || rec.afdeling || ' is NIET gelukt'); END; @@ -1997,22 +2019,77 @@ END volk_delete_organisatie; CREATE OR REPLACE PROCEDURE volk_update_organisatie (p_import_key IN NUMBER) AS + -- wanneer de afdeling gelijk is maar de omschrijving, kostenplaats of de parent anders dan werken we de afdeling in Facilitor bij + CURSOR c_omschr IS + SELECT i.prs_afdeling_naam, + i.prs_afdeling_omschrijving prs_afdeling_omschrijving_new, + a.prs_afdeling_omschrijving, + a.prs_afdeling_key + FROM fac_imp_organisatie i, prs_afdeling a + WHERE i.prs_afdeling_naam = a.prs_afdeling_naam + AND a.prs_afdeling_omschrijving <> i.prs_afdeling_omschrijving; + + CURSOR c_kpl IS + SELECT kn.prs_kostenplaats_key prs_kostenplaats_key_new, + a.prs_afdeling_key + FROM fac_imp_organisatie i, + prs_kostenplaats kn, + prs_afdeling a, + prs_kostenplaats k + WHERE kn.prs_kostenplaats_nr = i.prs_kostenplaats_nr + AND i.prs_afdeling_naam = a.prs_afdeling_naam + AND a.prs_kostenplaats_key = k.prs_kostenplaats_key + AND i.prs_kostenplaats_nr <> k.prs_kostenplaats_nr; + + CURSOR c_parent IS + SELECT a.prs_afdeling_key, + ap_new.prs_afdeling_key prs_afdeling_parentkey_new + FROM prs_afdeling a, fac_imp_organisatie i, prs_afdeling ap_new + WHERE i.prs_afdeling_naam = a.prs_afdeling_naam + AND i.prs_afdeling_naam_parent = ap_new.prs_afdeling_naam + AND a.prs_afdeling_parentkey <> ap_new.prs_afdeling_key; BEGIN - -- er wordt met een dummy kostenplaats gewerkt, dus deze zetten we bij alle afdelingen in de import tabel - UPDATE FAC_IMP_ORGANISATIE o - SET o.prs_kostenplaats_nr = '999999' - WHERE o.prs_kostenplaats_nr IS NULL; - - -- de afdelingsnaam wordt tot 6 posities aangevuld met voorloopnullen - UPDATE fac_imp_organisatie o - SET o.prs_afdeling_naam = LPAD (o.prs_afdeling_naam, 6, '0'), - o.prs_afdeling_naam_parent = - LPAD (o.prs_afdeling_naam_parent, 6, '0'); - + -- we verwijderen afdelingen die niet meer in de import meekomen volk_delete_organisatie (p_import_key); + -- de afdelingen die wel in de import zittenvoegen we toe fac_update_organisatie (p_import_key); - + + --- we werken afdelingen bij waarin omschrijving, parent en/of kostenplaats gewijzigd is + --- vanuit de update is alles wat nieuw is al aangemaakt, dus aangenomen mag worden dat de parent en de kpl bekend is in Facilitor + FOR rec IN c_omschr + LOOP + BEGIN + UPDATE prs_afdeling a + SET a.prs_afdeling_omschrijving = + rec.prs_afdeling_omschrijving_new + WHERE a.prs_afdeling_key = rec.prs_afdeling_key; + + COMMIT; + END; + END LOOP; + + FOR rec IN c_kpl + LOOP + BEGIN + UPDATE prs_afdeling a + SET a.prs_kostenplaats_key = rec.prs_kostenplaats_key_new + WHERE a.prs_afdeling_key = rec.prs_afdeling_key; + + COMMIT; + END; + END LOOP; + + FOR rec IN c_parent + LOOP + BEGIN + UPDATE prs_afdeling a + SET a.prs_afdeling_parentkey = rec.prs_afdeling_parentkey_new + WHERE a.prs_afdeling_key = rec.prs_afdeling_key; + + COMMIT; + END; + END LOOP; END volk_update_organisatie; /