From 0feea0f3cd39c83427f8e2d275a7d63443b7e2a8 Mon Sep 17 00:00:00 2001 From: Sander Schepers Date: Tue, 2 Dec 2025 12:50:36 +0000 Subject: [PATCH] CSUN#68556 Ondersteuning bij vervanging koppeling AS400 Aanpassingen gedaan voor betere logging en aansturing van RM/DM obv emailadres svn path=/Customer/trunk/; revision=71116 --- CSUN/CSUN.sql | 912 ++++++++++++++++++++++++++------------------------ 1 file changed, 467 insertions(+), 445 deletions(-) diff --git a/CSUN/CSUN.sql b/CSUN/CSUN.sql index d466e4a59..04e152f51 100644 --- a/CSUN/CSUN.sql +++ b/CSUN/CSUN.sql @@ -8698,12 +8698,6 @@ IS v_error_hint VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (1000); - v_aanduiding VARCHAR2 (200); - v_count NUMBER (10); - v_ongeldig NUMBER (1); - v_count_update NUMBER (10); - v_count_tot NUMBER (10); - v_count_mld NUMBER (10); v_locatie_key NUMBER (10); v_bud_key VARCHAR2 (255); @@ -8713,88 +8707,162 @@ IS v_afdeling_key NUMBER (10); v_tussenv VARCHAR2 (15); v_achternaam VARCHAR2 (60); + v_email VARCHAR2 (255); - CURSOR c_account + CURSOR c_rec + IS + WITH k AS ( + SELECT l.alg_locatie_key loc_key, + MAX (CASE WHEN aog.alg_kenmerk_key = 1940 THEN aog.alg_onrgoedkenmerk_waarde END) accountcode, + MAX (CASE WHEN aog.alg_kenmerk_key = 1941 THEN aog.alg_onrgoedkenmerk_waarde END) accountnaam, + MAX (CASE WHEN aog.alg_kenmerk_key = 1942 THEN aog.alg_onrgoedkenmerk_waarde END) project, + MAX (CASE WHEN aog.alg_kenmerk_key = 1943 THEN aog.alg_onrgoedkenmerk_waarde END) vervallen, + MAX (CASE WHEN aog.alg_kenmerk_key = 1951 THEN aog.alg_onrgoedkenmerk_waarde END) omschrijving, + MAX (CASE WHEN aog.alg_kenmerk_key = 1952 THEN aog.alg_onrgoedkenmerk_waarde END) adres, + MAX (CASE WHEN aog.alg_kenmerk_key = 1953 THEN aog.alg_onrgoedkenmerk_waarde END) postcode, + MAX (CASE WHEN aog.alg_kenmerk_key = 1954 THEN aog.alg_onrgoedkenmerk_waarde END) woonplaats, + MAX (CASE WHEN aog.alg_kenmerk_key = 2120 THEN aog.alg_onrgoedkenmerk_waarde END) vervaldatum, + MAX (CASE WHEN aog.alg_kenmerk_key = 2141 THEN aog.alg_onrgoedkenmerk_waarde END) dm_mail + FROM alg_locatie l + JOIN alg_onrgoedkenmerk aog + ON aog.alg_onrgoed_key = l.alg_locatie_key + AND aog.alg_onrgoed_niveau = 'L' + AND aog.alg_onrgoedkenmerk_verwijder IS NULL + WHERE l.alg_locatie_verwijder IS NULL -- alleen niet-verwijderde locaties + GROUP BY l.alg_locatie_key + HAVING MAX ( + CASE + WHEN aog.alg_kenmerk_key = 1942 + THEN aog.alg_onrgoedkenmerk_waarde + END) IS NOT NULL -- project (1942) móet gevuld zijn + ) + SELECT k.loc_key, + k.accountcode, + k.accountnaam, + k.project, + k.vervallen, + k.omschrijving, + k.adres, + k.postcode, + k.woonplaats, + k.vervaldatum, + LOWER (k.dm_mail) dm_mail, + -- district op basis van dm_mail + (SELECT MAX (d.alg_district_key) + FROM prs_perslid p, + alg_onrgoedkenmerk aogdm, + alg_district d + WHERE LOWER (p.prs_perslid_email) = LOWER (k.dm_mail) + AND aogdm.alg_kenmerk_key = 1021 + AND p.prs_perslid_key = + fac.safe_to_number ( + aogdm.alg_onrgoedkenmerk_waarde) + AND aogdm.alg_onrgoed_key = d.alg_district_key + AND d.alg_district_verwijder IS NULL + AND aogdm.alg_onrgoedkenmerk_verwijder IS NULL) + AS district_key, + -- BUD op district + (SELECT aogb.alg_onrgoedkenmerk_waarde + FROM alg_onrgoedkenmerk aogb + WHERE aogb.alg_onrgoed_key = + (SELECT MAX (d2.alg_district_key) + FROM prs_perslid p2, + alg_onrgoedkenmerk aogdm2, + alg_district d2 + WHERE LOWER (p2.prs_perslid_email) = + LOWER (k.dm_mail) + AND aogdm2.alg_kenmerk_key = 1021 + AND p2.prs_perslid_key = + fac.safe_to_number ( + aogdm2.alg_onrgoedkenmerk_waarde) + AND aogdm2.alg_onrgoed_key = + d2.alg_district_key + AND d2.alg_district_verwijder IS NULL + AND aogdm2.alg_onrgoedkenmerk_verwijder + IS NULL) + AND aogb.alg_kenmerk_key = 1060 + AND aogb.alg_onrgoed_niveau = 'L' + AND aogb.alg_onrgoedkenmerk_verwijder IS NULL) + AS bud_key, + -- account_key uit fac_usrdata (kan NULL zijn; dan maken we hem aan) + (SELECT ud.fac_usrdata_key + FROM fac_usrdata ud + WHERE ud.fac_usrtab_key = 1 + AND ud.fac_usrdata_code = k.accountcode + AND ud.fac_usrdata_verwijder IS NULL) + AS account_key + FROM k + WHERE k.accountcode IS NOT NULL + AND k.project IS NOT NULL + AND COALESCE (UPPER (k.vervallen), 'N') <> 'J' + AND k.dm_mail IS NOT NULL; + -- eventueel tijdelijk filteren op één project: +-- AND k.project = '2019104'; + + CURSOR c_verv IS WITH k AS ( SELECT aog.alg_onrgoed_key loc_key, - MAX(CASE WHEN aog.alg_kenmerk_key = 1940 THEN aog.alg_onrgoedkenmerk_waarde END) accountcode, - MAX(CASE WHEN aog.alg_kenmerk_key = 1941 THEN aog.alg_onrgoedkenmerk_waarde END) accountnaam, - MAX(CASE WHEN aog.alg_kenmerk_key = 1942 THEN aog.alg_onrgoedkenmerk_waarde END) project, - MAX(CASE WHEN aog.alg_kenmerk_key = 1943 THEN aog.alg_onrgoedkenmerk_waarde END) vervallen + MAX( + CASE + WHEN aog.alg_kenmerk_key = 1942 + THEN aog.alg_onrgoedkenmerk_waarde + END) AS project, + MAX( + CASE + WHEN aog.alg_kenmerk_key = 1943 + THEN aog.alg_onrgoedkenmerk_waarde + END) AS vervallen_flag FROM alg_onrgoedkenmerk aog WHERE aog.alg_onrgoed_niveau = 'L' AND aog.alg_onrgoedkenmerk_verwijder IS NULL GROUP BY aog.alg_onrgoed_key ) - SELECT DISTINCT accountcode, accountnaam - FROM k - WHERE accountcode IS NOT NULL - AND project IS NOT NULL - AND COALESCE (UPPER (vervallen), 'N') <> 'J'; + SELECT l.alg_locatie_key, + l.alg_locatie_code + FROM alg_locatie l + JOIN k + ON k.loc_key = l.alg_locatie_key + WHERE k.project IS NOT NULL -- 1942 moet bestaan + AND UPPER (k.vervallen_flag) = 'J' -- 1943 = 'J' + AND l.alg_locatie_vervaldatum IS NULL -- nog niet vervallen + AND l.alg_locatie_verwijder IS NULL; -- niet verwijderd - CURSOR c_district ( - c_accountcode IN VARCHAR2) + CURSOR c_unverv IS WITH k AS ( SELECT aog.alg_onrgoed_key loc_key, - MAX(CASE WHEN aog.alg_kenmerk_key = 1940 THEN aog.alg_onrgoedkenmerk_waarde END) accountcode, - MAX(CASE WHEN aog.alg_kenmerk_key = 1942 THEN aog.alg_onrgoedkenmerk_waarde END) project, - MAX(CASE WHEN aog.alg_kenmerk_key = 1943 THEN aog.alg_onrgoedkenmerk_waarde END) vervallen, - MAX(CASE WHEN aog.alg_kenmerk_key = 1946 THEN aog.alg_onrgoedkenmerk_waarde END) voornaam, - MAX(CASE WHEN aog.alg_kenmerk_key = 1947 THEN aog.alg_onrgoedkenmerk_waarde END) voorletters, - MAX(CASE WHEN aog.alg_kenmerk_key = 1948 THEN aog.alg_onrgoedkenmerk_waarde END) tussenvoegsels, - MAX(CASE WHEN aog.alg_kenmerk_key = 1949 THEN aog.alg_onrgoedkenmerk_waarde END) achternaam, - MAX(CASE WHEN aog.alg_kenmerk_key = 2141 THEN aog.alg_onrgoedkenmerk_waarde END) dm_mail + MAX( + CASE + WHEN aog.alg_kenmerk_key = 1942 + THEN aog.alg_onrgoedkenmerk_waarde + END) AS project, + MAX( + CASE + WHEN aog.alg_kenmerk_key = 1943 + THEN aog.alg_onrgoedkenmerk_waarde + END) AS vervallen_flag FROM alg_onrgoedkenmerk aog WHERE aog.alg_onrgoed_niveau = 'L' AND aog.alg_onrgoedkenmerk_verwijder IS NULL GROUP BY aog.alg_onrgoed_key ) - SELECT DISTINCT - LOWER (dm_mail) dm, - voornaam, - voorletters, - tussenvoegsels, - achternaam - FROM k - WHERE accountcode = c_accountcode - AND project IS NOT NULL - AND COALESCE (UPPER (vervallen), 'N') <> 'J' - AND dm_mail IS NOT NULL; - - CURSOR c ( - c_accountcode IN VARCHAR2, - c_dm IN VARCHAR2) - IS - WITH k AS ( - SELECT aog.alg_onrgoed_key loc_key, - MAX(CASE WHEN aog.alg_kenmerk_key = 1940 THEN aog.alg_onrgoedkenmerk_waarde END) accountcode, - MAX(CASE WHEN aog.alg_kenmerk_key = 1942 THEN aog.alg_onrgoedkenmerk_waarde END) project, - MAX(CASE WHEN aog.alg_kenmerk_key = 1943 THEN aog.alg_onrgoedkenmerk_waarde END) vervallen, - MAX(CASE WHEN aog.alg_kenmerk_key = 1951 THEN aog.alg_onrgoedkenmerk_waarde END) omschrijving, - MAX(CASE WHEN aog.alg_kenmerk_key = 1952 THEN aog.alg_onrgoedkenmerk_waarde END) adres, - MAX(CASE WHEN aog.alg_kenmerk_key = 1953 THEN aog.alg_onrgoedkenmerk_waarde END) postcode, - MAX(CASE WHEN aog.alg_kenmerk_key = 1954 THEN aog.alg_onrgoedkenmerk_waarde END) woonplaats, - MAX(CASE WHEN aog.alg_kenmerk_key = 2120 THEN aog.alg_onrgoedkenmerk_waarde END) vervaldatum, - MAX(CASE WHEN aog.alg_kenmerk_key = 2141 THEN aog.alg_onrgoedkenmerk_waarde END) dm_mail - FROM alg_onrgoedkenmerk aog - WHERE aog.alg_onrgoed_niveau = 'L' - AND aog.alg_onrgoedkenmerk_verwijder IS NULL - GROUP BY aog.alg_onrgoed_key - ) - SELECT loc_key alg_locatie_key, - project, - omschrijving, - adres, - postcode, - woonplaats, - vervaldatum - FROM k - WHERE accountcode = c_accountcode - AND project IS NOT NULL - AND LOWER (dm_mail) = LOWER (c_dm) - AND COALESCE (UPPER (vervallen), 'N') <> 'J'; + SELECT l.alg_locatie_key, + l.alg_locatie_code + FROM alg_locatie l + JOIN k + ON k.loc_key = l.alg_locatie_key + WHERE k.project IS NOT NULL -- 1942 moet gevuld zijn + AND ( k.vervallen_flag IS NULL -- 1943 niet meer 'J' + OR UPPER (k.vervallen_flag) <> 'J') + AND ( l.alg_locatie_vervaldatum IS NOT NULL -- alleen als hij nu wél vervallen staat + OR EXISTS ( + SELECT 1 + FROM alg_onrgoedkenmerk a1160 + WHERE a1160.alg_onrgoed_key = l.alg_locatie_key + AND a1160.alg_kenmerk_key = 1160 + AND a1160.alg_onrgoed_niveau = 'L' + AND a1160.alg_onrgoedkenmerk_verwijder IS NULL)); CURSOR c_del IS @@ -8839,7 +8907,7 @@ IS SELECT aog.alg_onrgoed_key loc_key, MAX(CASE WHEN aog.alg_kenmerk_key = 1942 THEN aog.alg_onrgoedkenmerk_waarde END) project, MAX(CASE WHEN aog.alg_kenmerk_key = 1944 THEN aog.alg_onrgoedkenmerk_waarde END) bu, - MAX(CASE WHEN aog.alg_kenmerk_key = 1955 THEN aog.alg_onrgoedkenmerk_waarde END) rayonl_persnr, + MAX(CASE WHEN aog.alg_kenmerk_key = 2140 THEN aog.alg_onrgoedkenmerk_waarde END) rayonl_mail, MAX(CASE WHEN aog.alg_kenmerk_key = 1956 THEN aog.alg_onrgoedkenmerk_waarde END) rayonl_naam FROM alg_onrgoedkenmerk aog WHERE aog.alg_onrgoed_niveau = 'L' @@ -8847,26 +8915,21 @@ IS GROUP BY aog.alg_onrgoed_key ) SELECT DISTINCT - bu, - rayonl_persnr, - TRIM (SUBSTR (rayonl_naam, 1, INSTR (rayonl_naam, ' '))) - voornaam, - TRIM ( - SUBSTR (rayonl_naam, - INSTR (rayonl_naam, ' '), - 60)) - achternaam, - rayonl_naam + k.bu, + TRIM(SUBSTR(k.rayonl_naam, 1, INSTR(k.rayonl_naam, ' '))) AS voornaam, + TRIM(SUBSTR(k.rayonl_naam, INSTR(k.rayonl_naam, ' '), 60)) AS achternaam, + LOWER(k.rayonl_mail) AS rayonl_mail FROM k - WHERE rayonl_naam IS NOT NULL - AND project IS NOT NULL; + WHERE k.project IS NOT NULL + AND k.rayonl_naam IS NOT NULL + AND k.rayonl_mail IS NOT NULL; CURSOR c_rayon_wp IS WITH k AS ( SELECT aog.alg_onrgoed_key loc_key, MAX(CASE WHEN aog.alg_kenmerk_key = 1942 THEN aog.alg_onrgoedkenmerk_waarde END) project, - MAX(CASE WHEN aog.alg_kenmerk_key = 1955 THEN aog.alg_onrgoedkenmerk_waarde END) rayonl_persnr + MAX(CASE WHEN aog.alg_kenmerk_key = 2140 THEN aog.alg_onrgoedkenmerk_waarde END) rayonl_mail FROM alg_onrgoedkenmerk aog WHERE aog.alg_onrgoed_niveau = 'L' AND aog.alg_onrgoedkenmerk_verwijder IS NULL @@ -8880,351 +8943,312 @@ IS k WHERE k.loc_key = l.alg_locatie_key AND k.project IS NOT NULL - AND k.rayonl_persnr IS NOT NULL - AND (SELECT pk.prs_kenmerklink_waarde - FROM prs_kenmerklink pk - WHERE pk.prs_kenmerklink_verwijder IS NULL - AND pk.prs_kenmerk_key = 1120 - AND p.prs_perslid_key = pk.prs_link_key - AND pk.prs_kenmerklink_niveau = 'P') LIKE - '%' || k.rayonl_persnr || '%' - AND l.alg_locatie_key = rg.alg_locatie_key - AND rg.alg_ruimte_nr = '-' + AND k.rayonl_mail IS NOT NULL + AND LOWER(p.prs_perslid_email) = LOWER(k.rayonl_mail) AND p.prs_srtperslid_key = 50 AND p.prs_perslid_verwijder IS NULL + AND l.alg_locatie_key = rg.alg_locatie_key + AND rg.alg_ruimte_nr = '-' AND NOT EXISTS - (SELECT * + (SELECT 1 FROM prs_v_perslidwerkplek_gegevens pwpg WHERE pwpg.prs_perslid_key = p.prs_perslid_key AND pwpg.alg_locatie_key = l.alg_locatie_key); + BEGIN - v_error_hint := 'Start met doorlopen accounts'; + v_error_hint := 'Start met bijwerken locaties'; - FOR rec_a IN c_account + FOR r IN c_rec LOOP BEGIN - v_error_hint := - 'Ophalen data voor accountcode: ' || rec_a.accountcode; + v_locatie_key := r.loc_key; + v_district_key := r.district_key; + v_bud_key := r.bud_key; + v_account_key := r.account_key; - BEGIN - SELECT fac_usrdata_key - INTO v_account_key - FROM fac_usrdata - WHERE fac_usrtab_key = 1 - AND fac_usrdata_code = rec_a.accountcode - AND fac_usrdata_verwijder IS NULL; - EXCEPTION - WHEN NO_DATA_FOUND - THEN - INSERT INTO fac_usrdata (fac_usrtab_key, - fac_usrdata_code, - fac_usrdata_omschr) - VALUES (1, rec_a.accountcode, rec_a.accountnaam) - RETURNING fac_usrdata_key - INTO v_account_key; - END; - - FOR rec_d IN c_district (rec_a.accountcode) - LOOP - BEGIN - v_error_hint := - 'Ophalen data voor dm: ' - || rec_d.dm; - - v_district_key := NULL; - - BEGIN - SELECT alg_onrgoed_key - INTO v_district_key - FROM prs_perslid p, - alg_onrgoedkenmerk aog, - alg_district d - WHERE LOWER (p.prs_perslid_email) = rec_d.dm - AND aog.alg_kenmerk_key = 1021 - AND p.prs_perslid_key = - fac.safe_to_number ( - aog.alg_onrgoedkenmerk_waarde) - AND aog.alg_onrgoed_key = d.alg_district_key - AND d.alg_district_verwijder IS NULL - AND aog.alg_onrgoedkenmerk_verwijder IS NULL; - EXCEPTION - WHEN NO_DATA_FOUND - THEN - fac.imp_writelog ( - NULL, - 'E', - 'Import locaties afgebroken, distrinctmanager niet gevonden ( dm_mail:' - || rec_d.dm - || '- account:' - || rec_a.accountcode - || '-' - || rec_a.accountnaam - || ')', - v_error_hint); - END; - - IF v_district_key IS NOT NULL - THEN - FOR rec IN c (rec_a.accountcode, rec_d.dm) - LOOP - BEGIN - v_locatie_key := rec.alg_locatie_key; - - v_error_hint := - 'Bepalen bb referentie: ' || rec_d.dm; - - BEGIN - SELECT alg_onrgoedkenmerk_waarde - INTO v_bud_key - FROM alg_onrgoedkenmerk aogb - WHERE aogb.alg_onrgoed_key = - v_district_key - AND aogb.alg_kenmerk_key = 1060 - AND aogb.alg_onrgoed_niveau = 'L' - AND aogb.alg_onrgoedkenmerk_verwijder - IS NULL; - EXCEPTION - WHEN NO_DATA_FOUND - THEN - v_bud_key := NULL; - END; - - IF v_locatie_key IS NOT NULL - THEN - UPDATE alg_locatie - SET alg_locatie_omschrijving = - SUBSTR (rec.omschrijving, 1, 50), - alg_district_key = v_district_key, - alg_locatie_adres = rec.adres, - alg_locatie_postcode = rec.postcode, - alg_locatie_plaats = rec.woonplaats, - alg_locatie_vervaldatum = NULL - WHERE alg_locatie_key = v_locatie_key; - - -- gebouwen op deze locatie ook weer activeren - UPDATE alg_gebouw - SET alg_gebouw_vervaldatum = NULL - WHERE alg_locatie_key = v_locatie_key; - - csun_set_kenmerk ('ALG', - 1006, - v_locatie_key, - v_bud_key, - 0); - csun_set_kenmerk ('ALG', - 1000, - v_locatie_key, - v_account_key, - 0); - csun_set_kenmerk ('ALG', - 1040, - v_locatie_key, - rec.project, - 0); - csun_set_kenmerk ('ALG', - 1160, - v_locatie_key, - rec.vervaldatum, - 0); - - COMMIT; - END IF; - EXCEPTION - WHEN OTHERS - THEN - oracle_err_mes := SUBSTR (SQLERRM, 1, 150); - v_errormsg := - '(ORACLE error ' || oracle_err_mes || ')'; - fac.imp_writelog ( - NULL, - 'E', - 'Import locaties afgebroken ( dm_mail:' - || rec_d.dm - || '- account:' - || rec_a.accountcode - || '-' - || rec_a.accountnaam - || ' Projectnr: ' - || rec.project - || '):' - || v_errormsg, - v_error_hint); - END; - END LOOP; - END IF; - EXCEPTION - WHEN OTHERS - THEN - oracle_err_mes := SUBSTR (SQLERRM, 1, 150); - v_errormsg := '(ORACLE error ' || oracle_err_mes || ')'; - fac.imp_writelog ( - NULL, - 'E', - 'Import locaties afgebroken ( dm_mail:' - || rec_d.dm - || '- account:' - || rec_a.accountcode - || '-' - || rec_a.accountnaam - || '):' - || v_errormsg, - v_error_hint); - END; - END LOOP; - EXCEPTION - WHEN OTHERS + -- accountkey aanmaken als hij nog niet bestaat + IF v_account_key IS NULL THEN - oracle_err_mes := SUBSTR (SQLERRM, 1, 150); - v_errormsg := '(ORACLE error ' || oracle_err_mes || ')'; - fac.imp_writelog ( - NULL, - 'E', - 'Fout tijdens verwerking account (' - || rec_a.accountcode - || '):' - || v_errormsg, - v_error_hint); - END; - END LOOP; + INSERT INTO fac_usrdata (fac_usrtab_key, + fac_usrdata_code, + fac_usrdata_omschr) + VALUES (1, r.accountcode, r.accountnaam) + RETURNING fac_usrdata_key + INTO v_account_key; + END IF; - FOR rec_del IN c_del - LOOP - BEGIN - v_count_mld := rec_del.count_mld; - - IF v_count_mld = 0 - THEN - v_error_hint := - 'Verwijderen gebouwen - Locatie_code: ' - || rec_del.alg_locatie_code; - - UPDATE alg_gebouw - SET alg_gebouw_verwijder = SYSDATE - WHERE alg_gebouw_verwijder IS NULL - AND alg_locatie_key = rec_del.alg_locatie_key; - - v_error_hint := - 'Verwijderen locatie - Locatie_code: ' - || rec_del.alg_locatie_code; - - UPDATE alg_locatie - SET alg_locatie_verwijder = SYSDATE - WHERE alg_locatie_key = rec_del.alg_locatie_key; + IF v_district_key IS NULL + THEN + fac.writelog ('CSUN_UPDATE_AFASPROJECT', + 'W', + r.project + || 'DM niet gevonden voor ' + || r.dm_mail + || ' account ' + || r.accountcode + || ' / project ' + || r.project, + v_error_hint); + ELSE - v_error_hint := - 'Vervallen gebouwen - Locatie_code: ' - || rec_del.alg_locatie_code; - - UPDATE alg_gebouw - SET alg_gebouw_vervaldatum = SYSDATE - WHERE alg_gebouw_vervaldatum IS NULL - AND alg_locatie_key = rec_del.alg_locatie_key; - - v_error_hint := - 'Vervallen locatie - Locatie_code: ' - || rec_del.alg_locatie_code; - UPDATE alg_locatie - SET alg_locatie_vervaldatum = SYSDATE - WHERE alg_locatie_key = rec_del.alg_locatie_key; + SET alg_locatie_omschrijving = + SUBSTR (r.omschrijving, 1, 50), + alg_district_key = v_district_key, + alg_locatie_adres = r.adres, + alg_locatie_postcode = r.postcode, + alg_locatie_plaats = r.woonplaats + WHERE alg_locatie_key = v_locatie_key; + + csun_set_kenmerk ('ALG', + 1006, + v_locatie_key, + v_bud_key, + 0); + csun_set_kenmerk ('ALG', + 1000, + v_locatie_key, + v_account_key, + 0); + csun_set_kenmerk ('ALG', + 1040, + v_locatie_key, + r.project, + 0); + csun_set_kenmerk ('ALG', + 1160, + v_locatie_key, + r.vervaldatum, + 0); END IF; EXCEPTION WHEN OTHERS THEN oracle_err_mes := SUBSTR (SQLERRM, 1, 150); - v_errormsg := '(ORACLE error ' || oracle_err_mes || ')'; - fac.imp_writelog (NULL, - 'E', - 'Verwijderen locaties:' || v_errormsg, - v_error_hint); + v_errormsg := '(ORACLE error ' || oracle_err_mes || ')'; + + fac.writelog ('CSUN_UPDATE_AFASPROJECT', + 'E', + r.project + || 'Fout bij bijwerken locatie ' + || v_locatie_key + || ' ' + || v_errormsg, + v_error_hint); + END; + END LOOP; + + v_error_hint := 'Start met vervallen locaties'; + + FOR r_verv IN c_verv + LOOP + BEGIN + v_error_hint := + 'Vervallen locatie obv 1943=J, locatie: ' + || r_verv.alg_locatie_code; + + UPDATE alg_locatie + SET alg_locatie_vervaldatum = SYSDATE + WHERE alg_locatie_key = r_verv.alg_locatie_key; + + csun_set_kenmerk ('ALG', + 1160, + r_verv.alg_locatie_key, + TO_CHAR (SYSDATE, 'dd-mm-yyyy'), + 0); + EXCEPTION + WHEN OTHERS + THEN + oracle_err_mes := SUBSTR (SQLERRM, 1, 150); + v_errormsg := '(ORACLE error ' || oracle_err_mes || ')'; + + fac.writelog ('CSUN_UPDATE_AFASPROJECT', + 'E', + r_verv.alg_locatie_code + || 'Fout bij vervallen zetten locatie ' + || v_locatie_key + || ' ' + || v_errormsg, + v_error_hint); + + END; + END LOOP; + + -- Vervallen terugdraaien als 1943 niet meer 'J' is + FOR r_unverv IN c_unverv + LOOP + BEGIN + v_error_hint := + 'Vervallen ongedaan maken obv 1943<>J, locatie: ' + || r_unverv.alg_locatie_code; + + -- vervaldatum op locatie leegmaken + UPDATE alg_locatie + SET alg_locatie_vervaldatum = NULL + WHERE alg_locatie_key = r_unverv.alg_locatie_key; + + -- kenmerk 1160 (vervaldatum) leegmaken + csun_set_kenmerk ('ALG', + 1160, + r_unverv.alg_locatie_key, + NULL, + 0); + EXCEPTION + WHEN OTHERS + THEN + oracle_err_mes := SUBSTR (SQLERRM, 1, 150); + v_errormsg := '(ORACLE error ' || oracle_err_mes || ')'; + + fac.writelog ('CSUN_UPDATE_AFASPROJECT', + 'E', + r_unverv.alg_locatie_code + || 'Fout bij vervallen ongedaan maken locatie ' + || v_locatie_key + || ' ' + || v_errormsg, + v_error_hint); + + END; + END LOOP; + + v_error_hint := 'Start met verwijderen locaties'; + + FOR r_del IN c_del + LOOP + BEGIN + IF r_del.count_mld = 0 + THEN + v_error_hint := + 'Verwijderen gebouwen - Locatie_code: ' + || r_del.alg_locatie_code; + + UPDATE alg_gebouw + SET alg_gebouw_verwijder = SYSDATE + WHERE alg_gebouw_verwijder IS NULL + AND alg_locatie_key = r_del.alg_locatie_key; + + v_error_hint := + 'Verwijderen locatie - Locatie_code: ' + || r_del.alg_locatie_code; + + UPDATE alg_locatie + SET alg_locatie_verwijder = SYSDATE + WHERE alg_locatie_key = r_del.alg_locatie_key; + ELSE + v_error_hint := + 'Vervallen gebouwen - Locatie_code: ' + || r_del.alg_locatie_code; + + UPDATE alg_gebouw + SET alg_gebouw_vervaldatum = SYSDATE + WHERE alg_gebouw_vervaldatum IS NULL + AND alg_locatie_key = r_del.alg_locatie_key; + + v_error_hint := + 'Vervallen locatie - Locatie_code: ' + || r_del.alg_locatie_code; + + UPDATE alg_locatie + SET alg_locatie_vervaldatum = SYSDATE + WHERE alg_locatie_key = r_del.alg_locatie_key; + END IF; + EXCEPTION + WHEN OTHERS + THEN + oracle_err_mes := SUBSTR (SQLERRM, 1, 150); + v_errormsg := '(ORACLE error ' || oracle_err_mes || ')'; + + fac.writelog ('CSUN_UPDATE_AFASPROJECT', + 'E', + r_del.alg_locatie_code + || 'Fout bij verwijderen locatie ' + || v_locatie_key + || ' ' + || v_errormsg, + v_error_hint); + END; END LOOP; FOR rec_ray IN c_rayonl LOOP BEGIN + -- 1) Bepaal eerst of de persoon al bestaat op basis van e-mail v_perslid_key := NULL; + v_email := rec_ray.rayonl_mail; -- al lowercase in cursor - SELECT MAX (p.prs_perslid_key) - INTO v_perslid_key - FROM prs_perslid p - WHERE p.prs_perslid_verwijder IS NULL - AND (SELECT pk.prs_kenmerklink_waarde - FROM prs_kenmerklink pk - WHERE pk.prs_kenmerklink_verwijder IS NULL - AND pk.prs_kenmerk_key = 1120 - AND p.prs_perslid_key = pk.prs_link_key - AND pk.prs_kenmerklink_niveau = 'P') LIKE - '%' || rec_ray.rayonl_persnr || '%'; + BEGIN + SELECT MAX(p.prs_perslid_key) + INTO v_perslid_key + FROM prs_perslid p + WHERE p.prs_perslid_verwijder IS NULL + AND LOWER(p.prs_perslid_email) = v_email; + EXCEPTION + WHEN NO_DATA_FOUND + THEN + v_perslid_key := NULL; + END; + -- 2) Zo niet: nieuwe rayonleider aanmaken IF v_perslid_key IS NULL THEN INSERT INTO prs_perslid (prs_srtperslid_key, prs_afdeling_key, prs_perslid_naam, - prs_perslid_voornaam) - VALUES (50, 1, rec_ray.achternaam, rec_ray.voornaam) + prs_perslid_voornaam, + prs_perslid_email) + VALUES (50, + 1, + rec_ray.achternaam, + rec_ray.voornaam, + v_email) RETURNING prs_perslid_key INTO v_perslid_key; - - IF v_perslid_key IS NOT NULL - THEN - csun_set_kenmerk ('PRS', - 1120, - v_perslid_key, - rec_ray.rayonl_persnr, - 0); - - fac.trackaction ('PRSUPD', - v_perslid_key, - 4, - NULL, - 'Kostenplaats CSU -> ' - || rec_ray.rayonl_persnr); - END IF; - - v_achternaam := rec_ray.achternaam; - v_tussenv := ''; - - IF INSTR (v_achternaam, 'van der ') = 1 - THEN - v_achternaam := SUBSTR (v_achternaam, 9); - v_tussenv := 'van der'; - END IF; - - IF INSTR (v_achternaam, 'van den ') = 1 - THEN - v_achternaam := SUBSTR (v_achternaam, 9); - v_tussenv := 'van den'; - END IF; - - IF INSTR (v_achternaam, 'van de ') = 1 - THEN - v_achternaam := SUBSTR (v_achternaam, 8); - v_tussenv := 'van de'; - END IF; - - IF INSTR (v_achternaam, 'van ') = 1 - THEN - v_achternaam := SUBSTR (v_achternaam, 5); - v_tussenv := 'van'; - END IF; - - IF INSTR (v_achternaam, 'de ') = 1 - THEN - v_achternaam := SUBSTR (v_achternaam, 4); - v_tussenv := 'de'; - END IF; - - UPDATE prs_perslid - SET prs_perslid_naam = v_achternaam, - prs_perslid_tussenvoegsel = v_tussenv - WHERE prs_perslid_key = v_perslid_key; END IF; + + -- 3) Naam en tussenvoegsels opschonen (zoals je al had) + v_achternaam := rec_ray.achternaam; + v_tussenv := ''; + + IF INSTR (v_achternaam, 'van der ') = 1 + THEN + v_achternaam := SUBSTR (v_achternaam, 9); + v_tussenv := 'van der'; + END IF; + + IF INSTR (v_achternaam, 'van den ') = 1 + THEN + v_achternaam := SUBSTR (v_achternaam, 9); + v_tussenv := 'van den'; + END IF; + + IF INSTR (v_achternaam, 'van de ') = 1 + THEN + v_achternaam := SUBSTR (v_achternaam, 8); + v_tussenv := 'van de'; + END IF; + + IF INSTR (v_achternaam, 'van ') = 1 + THEN + v_achternaam := SUBSTR (v_achternaam, 5); + v_tussenv := 'van'; + END IF; + + IF INSTR (v_achternaam, 'de ') = 1 + THEN + v_achternaam := SUBSTR (v_achternaam, 4); + v_tussenv := 'de'; + END IF; + + UPDATE prs_perslid + SET prs_perslid_naam = v_achternaam, + prs_perslid_tussenvoegsel = v_tussenv + WHERE prs_perslid_key = v_perslid_key; END; BEGIN + -- 4) Afdeling op basis van BU (oude logica, maar nu met rec_ray.bu) SELECT prs_afdeling_key INTO v_afdeling_key FROM prs_afdeling a, @@ -9240,15 +9264,20 @@ BEGIN EXCEPTION WHEN NO_DATA_FOUND THEN - fac.imp_writelog ( - NULL, - 'E', - 'Afdeling van Rayonleider kan niet gevonden worden ( Rayonleider:' - || rec_ray.voornaam - || ' - ' - || rec_ray.achternaam - || ')', - ''); + + fac.writelog ('CSUN_UPDATE_AFASPROJECT', + 'E', + rec_ray.rayonl_mail + || 'Afdeling van Rayonleider kan niet gevonden worden (Rayonleider: ' + || rec_ray.voornaam + || ' ' + || rec_ray.achternaam + || ', mail: ' + || v_email + || ')' + || v_errormsg, + v_error_hint); + END; END LOOP; @@ -9260,59 +9289,52 @@ BEGIN 1); END LOOP; - DELETE prs_perslidwerkplek - WHERE prs_perslidwerkplek_key IN - (SELECT pwpg.prs_perslidwerkplek_key - FROM prs_v_perslidwerkplek_gegevens pwpg, - prs_perslid p, - alg_locatie l - WHERE pwpg.prs_perslid_key = p.prs_perslid_key - AND p.prs_srtperslid_key = 50 - AND l.alg_locatie_key = pwpg.alg_locatie_key - AND l.alg_locatie_code LIKE 'P%' - AND pwpg.alg_ruimte_nr = '-' - AND NOT EXISTS - (SELECT 1 - FROM alg_onrgoedkenmerk a_proj, - alg_onrgoedkenmerk a_ray - WHERE a_proj.alg_onrgoed_key = - l.alg_locatie_key - AND a_proj.alg_onrgoed_niveau = 'L' - AND a_proj.alg_onrgoedkenmerk_verwijder - IS NULL - AND a_proj.alg_kenmerk_key = 1942 - AND a_proj.alg_onrgoedkenmerk_waarde - IS NOT NULL - AND a_ray.alg_onrgoed_key = - a_proj.alg_onrgoed_key - AND a_ray.alg_onrgoed_niveau = 'L' - AND a_ray.alg_onrgoedkenmerk_verwijder - IS NULL - AND a_ray.alg_kenmerk_key = 1955 - AND (SELECT pk.prs_kenmerklink_waarde - FROM prs_kenmerklink pk - WHERE pk.prs_kenmerklink_verwijder - IS NULL - AND pk.prs_kenmerk_key = 1120 - AND p.prs_perslid_key = - pk.prs_link_key - AND pk.prs_kenmerklink_niveau = - 'P') LIKE - '%' - || a_ray.alg_onrgoedkenmerk_waarde - || '%')); +DELETE prs_perslidwerkplek + WHERE prs_perslidwerkplek_key IN + (SELECT pwpg.prs_perslidwerkplek_key + FROM prs_v_perslidwerkplek_gegevens pwpg, + prs_perslid p, + alg_locatie l + WHERE pwpg.prs_perslid_key = p.prs_perslid_key + AND p.prs_srtperslid_key = 50 + AND l.alg_locatie_key = pwpg.alg_locatie_key + AND l.alg_locatie_code LIKE 'P%' + AND pwpg.alg_ruimte_nr = '-' + AND NOT EXISTS + (SELECT 1 + FROM alg_onrgoedkenmerk a_proj, + alg_onrgoedkenmerk a_mail + WHERE a_proj.alg_onrgoed_key = + l.alg_locatie_key + AND a_proj.alg_onrgoed_niveau = 'L' + AND a_proj.alg_onrgoedkenmerk_verwijder + IS NULL + AND a_proj.alg_kenmerk_key = 1942 + AND a_proj.alg_onrgoedkenmerk_waarde + IS NOT NULL + AND a_mail.alg_onrgoed_key = + a_proj.alg_onrgoed_key + AND a_mail.alg_onrgoed_niveau = 'L' + AND a_mail.alg_onrgoedkenmerk_verwijder + IS NULL + AND a_mail.alg_kenmerk_key = 2140 + AND a_mail.alg_onrgoedkenmerk_waarde + IS NOT NULL + AND LOWER(a_mail.alg_onrgoedkenmerk_waarde) = + LOWER(p.prs_perslid_email))); COMMIT; EXCEPTION WHEN OTHERS - THEN + THEN oracle_err_mes := SUBSTR (SQLERRM, 1, 150); - v_errormsg := '(ORACLE error ' || oracle_err_mes || ')'; - fac.imp_writelog ( - NULL, - 'E', - 'Fout tijdens importeren van onroerend goed (locatie en gebouw) ', - v_errormsg); + v_errormsg := '(ORACLE error ' || oracle_err_mes || ')'; + + fac.writelog ('CSUN_UPDATE_AFASPROJECT', + 'E', + 'Fout tijdens csun_update_afasproject: ', + oracle_err_mes); + END csun_update_afasproject; /