diff --git a/KMMO/kmmo.sql b/KMMO/kmmo.sql index cb2496083..68a63720e 100644 --- a/KMMO/kmmo.sql +++ b/KMMO/kmmo.sql @@ -197,14 +197,14 @@ CREATE OR REPLACE PACKAGE BODY KMMO AS fac_result_waarde) VALUES (psessionid, 'kenmerkpath', - 'MLD\M' || to_char( TRUNC(newkey/1000), 'FM0000') || '___\M' || newkey || '\' || kkey_att || '\'); + 'MLD\M' || to_char( TRUNC(newkey/1000), 'FM0000') || '___\M' || newkey || CHR(92) || kkey_att || CHR(92)); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'kenmerkorgmailpath', - 'MLD\M' || TO_CHAR (TRUNC (newkey / 1000), 'FM0000') || '___\M' || newkey || '\' || kkey_mail || '\'); + 'MLD\M' || TO_CHAR (TRUNC (newkey / 1000), 'FM0000') || '___\M' || newkey || CHR(92) || kkey_mail || CHR(92)); mld.setmeldingstatus (newkey, status_key, sender); @@ -460,11 +460,11 @@ AS oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); header_is_valid NUMBER; - v_count NUMBER; v_ongeldig NUMBER (1); v_mode NUMBER (1); v_aanduiding VARCHAR2 (200); v_all_null BOOLEAN; + v_count NUMBER (10); v_count_error NUMBER (10); v_count_tot NUMBER (10); v_count_import NUMBER (10); @@ -824,19 +824,19 @@ BEGIN v_count_tot := v_count_tot + 1; - v_errormsg := 'Fout bij toevoegen te impoteren v_ins_discipline_omschrijving: ' || v_ins_srtdeel_code_txt; + v_errormsg := 'Fout bij toevoegen te importeren v_ins_discipline_omschrijving: ' || v_ins_srtdeel_code_txt; SELECT d.ins_discipline_omschrijving INTO v_ins_discipline_omschrijving FROM ins_discipline d WHERE SUBSTR (d.ins_discipline_omschrijving, 1, 1) = SUBSTR (v_ins_srtdeel_code_txt, 1, 1); - v_errormsg := 'Fout bij toevoegen te impoteren v_ins_srtgroep_omschrijving: ' || v_ins_srtdeel_code_txt; + v_errormsg := 'Fout bij toevoegen te importeren v_ins_srtgroep_omschrijving: ' || v_ins_srtdeel_code_txt; SELECT sg.ins_srtgroep_omschrijving INTO v_ins_srtgroep_omschrijving FROM ins_srtgroep sg WHERE SUBSTR (sg.ins_srtgroep_omschrijving, 1, 2) = SUBSTR (v_ins_srtdeel_code_txt, 1, 2); - v_errormsg := 'Fout bij toevoegen te impoteren ins_srtdeel_code: ' || v_ins_srtdeel_code_txt; + v_errormsg := 'Fout bij toevoegen te importeren ins_srtdeel_code: ' || v_ins_srtdeel_code_txt; IF LENGTH(v_ins_srtdeel_code_txt) > 10 THEN v_ins_srtdeel_code := REPLACE(v_ins_srtdeel_code_txt, '.'); @@ -844,22 +844,22 @@ BEGIN v_ins_srtdeel_code := v_ins_srtdeel_code_txt; END IF; - v_errormsg := 'Fout bij toevoegen te impoteren v_alg_ruimte_nr: ' || v_alg_ruimte_nr; + v_errormsg := 'Fout bij toevoegen te importeren v_alg_ruimte_nr: ' || v_alg_ruimte_nr; SELECT alg_locatie_code, alg_gebouw_upper, alg_verdieping_volgnr INTO v_alg_locatie_code, v_alg_gebouw_code, v_alg_verdieping_volgnr FROM alg_v_ruimte_gegevens rg WHERE UPPER(rg.alg_ruimte_nr) = UPPER(v_alg_ruimte_nr); - v_errormsg := 'Fout bij toevoegen te impoteren v_ins_deel_aanmaak_txt: ' || v_ins_deel_aanmaak_txt; + v_errormsg := 'Fout bij toevoegen te importeren v_ins_deel_aanmaak_txt: ' || v_ins_deel_aanmaak_txt; v_ins_deel_aanmaak := NULL; - IF v_ins_deel_aanmaak_txt IS NOT NULL + IF FAC.safe_to_number(v_ins_deel_aanmaak_txt) IS NOT NULL THEN v_ins_deel_aanmaak := to_date('0101' || v_ins_deel_aanmaak_txt, 'ddmmyyyy'); ELSE v_ins_deel_aanmaak := SYSDATE; END IF; - v_errormsg := 'Fout bij toevoegen te impoteren v_kenmerk9: ' || v_kenmerk9; + v_errormsg := 'Fout bij toevoegen te importeren v_kenmerk9: ' || v_kenmerk9; IF v_kenmerk9 IS NOT NULL THEN v_ins_deel_startjaar := to_date('0101' || v_kenmerk9, 'ddmmyyyy'); @@ -867,7 +867,7 @@ BEGIN v_ins_deel_startjaar := NULL; END IF; - v_errormsg := 'Fout bij toevoegen te impoteren v_ins_deel_aantal_txt: ' || v_ins_deel_aantal_txt; + v_errormsg := 'Fout bij toevoegen te importeren v_ins_deel_aantal_txt: ' || v_ins_deel_aantal_txt; IF v_ins_deel_aantal_txt IS NOT NULL THEN v_ins_deel_aantal := to_number(v_ins_deel_aantal_txt); @@ -875,7 +875,7 @@ BEGIN v_ins_deel_aantal := 1; END IF; - v_errormsg := 'Fout bij toevoegen te impoteren v_ins_srtcontrole_periode_txt: ' || v_ins_srtcontrole_periode_txt; + v_errormsg := 'Fout bij toevoegen te importeren v_ins_srtcontrole_periode_txt: ' || v_ins_srtcontrole_periode_txt; IF v_ins_srtcontrole_periode_txt IS NOT NULL THEN v_ins_srtcontrole_periode := to_number(v_ins_srtcontrole_periode_txt); @@ -883,7 +883,7 @@ BEGIN v_ins_srtcontrole_periode := NULL; END IF; - v_errormsg := 'Fout bij toevoegen te impoteren v_ins_srtcontrole_prijs_txt: ' || v_ins_srtcontrole_prijs_txt; + v_errormsg := 'Fout bij toevoegen te importeren v_ins_srtcontrole_prijs_txt: ' || v_ins_srtcontrole_prijs_txt; IF v_ins_srtcontrole_prijs_txt IS NOT NULL THEN v_ins_srtcontrole_prijs := to_number(REPLACE(REPLACE(v_ins_srtcontrole_prijs_txt, '.'), ',', '.')); @@ -891,7 +891,7 @@ BEGIN v_ins_srtcontrole_prijs := NULL; END IF; - v_errormsg := 'Fout bij toevoegen te impoteren v_kenmerk7: ' || v_kenmerk7; + v_errormsg := 'Fout bij toevoegen te importeren v_kenmerk7: ' || v_kenmerk7; IF v_kenmerk7 IS NOT NULL THEN IF INSTR(v_kenmerk7, '%') = 0 @@ -904,6 +904,18 @@ BEGIN v_ins_deel_percentage := 100; END IF; + SELECT count(*) + INTO v_count + FROM ins_deel + WHERE ins_deel_verwijder IS NULL + AND ins_deel_omschrijving = v_ins_deel_omschrijving; + IF v_count > 0 THEN + fac.imp_writelog (p_import_key, + 'W', + 'Object bestaat al: ', + v_ins_deel_omschrijving); + END IF; + INSERT INTO fac_imp_ins (ins_discipline_omschrijving, ins_srtgroep_omschrijving, ins_srtdeel_code, @@ -986,23 +998,44 @@ CREATE OR REPLACE PROCEDURE kmmo_update_assets (p_import_key IN NUMBER) AS CURSOR c IS SELECT * FROM fac_imp_ins; + CURSOR c_upd_deel IS + SELECT DISTINCT ins_deel_omschrijving, alg_ruimte_key, alg_locatie_key, ins_deel_aanmaak, ins_deel_aantal + FROM alg_v_ruimte_gegevens rg, fac_imp_ins i + WHERE rg.alg_locatie_code = i.alg_locatie_code + AND rg.alg_gebouw_upper = i.alg_gebouw_code + AND rg.alg_verdieping_volgnr = i.alg_verdieping_volgnr + AND rg.alg_ruimte_nr = i.alg_ruimte_nr; + oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_errormsg VARCHAR2 (200); v_errorhint VARCHAR2 (200); v_aanduiding VARCHAR2 (100); - v_deel_key NUMBER; - v_srtdeel_key NUMBER; - v_srtcontrole_key NUMBER; - v_srtcontroledl_xcp_key NUMBER; - v_taakcat_key NUMBER; - v_srtcontrole_periode INS_SRTCONTROLE.INS_SRTCONTROLE_PERIODE%TYPE; - v_srtcontrole_materiaal INS_SRTCONTROLE.INS_SRTCONTROLE_MATERIAAL%TYPE; - v_srtcontrole_percentage INS_SRTCONTROLE.INS_SRTCONTROLE_PERCENTAGE%TYPE; - v_srtcontrole_level INS_SRTCONTROLE.INS_SRTCONTROLE_LEVEL%TYPE; - v_percentage NUMBER; - v_materiaal INS_SRTCONTROLEDL_XCP.INS_SRTCONTROLEDL_XCP_MATERIA%TYPE; + v_deel_key NUMBER; + v_srtdeel_key NUMBER; + v_srtcontrole_key NUMBER; + v_srtcontroledl_xcp_key NUMBER; + v_taakcat_key NUMBER; + v_srtcontrole_periode INS_SRTCONTROLE.INS_SRTCONTROLE_PERIODE%TYPE; + v_srtcontrole_materiaal INS_SRTCONTROLE.INS_SRTCONTROLE_MATERIAAL%TYPE; + v_srtcontrole_percentage INS_SRTCONTROLE.INS_SRTCONTROLE_PERCENTAGE%TYPE; + v_srtcontrole_level INS_SRTCONTROLE.INS_SRTCONTROLE_LEVEL%TYPE; + v_percentage NUMBER; + v_materiaal INS_SRTCONTROLEDL_XCP.INS_SRTCONTROLEDL_XCP_MATERIA%TYPE; + v_srtcontroledl_xcp_materia INS_SRTCONTROLEDL_XCP.INS_SRTCONTROLEDL_XCP_MATERIA%TYPE; + v_srtcontroledl_xcp_perc INS_SRTCONTROLEDL_XCP.INS_SRTCONTROLEDL_XCP_PERC%TYPE; + v_srtcontroledl_xcp_startdat INS_SRTCONTROLEDL_XCP.INS_SRTCONTROLEDL_XCP_STARTDAT%TYPE; + v_startdat_nieuw INS_SRTCONTROLEDL_XCP.INS_SRTCONTROLEDL_XCP_STARTDAT%TYPE; + + v_ruimte_aanduiding_nieuw VARCHAR2 (100); + v_ruimte_aanduiding_oud VARCHAR2 (100); + + v_alg_ruimte_key NUMBER (10); + v_alg_locatie_key NUMBER (10); + v_deel_aanmaak DATE; + v_deel_aantal NUMBER; + BEGIN fac_update_ins(p_import_key); @@ -1058,6 +1091,7 @@ BEGIN FROM ins_srtcontrole WHERE ins_srtinstallatie_key = v_srtdeel_key AND ins_srtcontrole_niveau = 'S' + AND ins_srtcontrole_omschrijving = rec.ins_kenmerkwaarde3 || ' - ' || rec.ins_srtdeel_code AND ctr_discipline_key = v_taakcat_key; IF v_srtcontrole_periode <> @@ -1068,14 +1102,24 @@ BEGIN AND rec.ins_kenmerkwaarde9 <> COALESCE (rec.ins_kenmerkwaarde10, '01010000')) THEN - -- dan moeten we een dl_xcp record aanmaken - v_errorhint := 'Aanmaken xcp'; + -- bestaat er al een xcp record? + BEGIN + SELECT ins_srtcontroledl_xcp_key, ins_srtcontroledl_xcp_materia, ins_srtcontroledl_xcp_perc, ins_srtcontroledl_xcp_startdat + INTO v_srtcontroledl_xcp_key, v_srtcontroledl_xcp_materia, v_srtcontroledl_xcp_perc, v_srtcontroledl_xcp_startdat + FROM ins_srtcontroledl_xcp + WHERE ins_srtcontrole_key = v_srtcontrole_key + AND ins_deel_key = v_deel_key; + EXCEPTION WHEN NO_DATA_FOUND + THEN + -- dan moeten we een dl_xcp record aanmaken + v_errorhint := 'Aanmaken xcp'; - INSERT INTO ins_srtcontroledl_xcp (ins_srtcontrole_key, - ins_deel_key) - VALUES (v_srtcontrole_key, v_deel_key) - RETURNING ins_srtcontroledl_xcp_key - INTO v_srtcontroledl_xcp_key; + INSERT INTO ins_srtcontroledl_xcp (ins_srtcontrole_key, + ins_deel_key) + VALUES (v_srtcontrole_key, v_deel_key) + RETURNING ins_srtcontroledl_xcp_key + INTO v_srtcontroledl_xcp_key; + END; v_errorhint := 'Aanpassen periode'; @@ -1089,6 +1133,12 @@ BEGIN 0) WHERE ins_srtcontroledl_xcp_key = v_srtcontroledl_xcp_key; + fac.trackaction('#INSUPD', + v_deel_key, + NULL, + NULL, + rec.ins_kenmerkwaarde3 || ' ' || rec.ins_kenmerkwaarde3 || ' - ' || rec.ins_srtdeel_code || ' is gewijzigd' || CHR(10) + || 'Periode: ' || COALESCE(v_srtcontrole_periode, '(leeg)') || ' --> ' || COALESCE(rec.ins_kenmerkwaarde8, '(leeg)')); END IF; v_errorhint := @@ -1103,6 +1153,13 @@ BEGIN SET ins_srtcontroledl_xcp_materia = v_materiaal WHERE ins_srtcontroledl_xcp_key = v_srtcontroledl_xcp_key; + fac.trackaction('#INSUPD', + v_deel_key, + NULL, + NULL, + rec.ins_kenmerkwaarde3 || ' ' || rec.ins_kenmerkwaarde3 || ' - ' || rec.ins_srtdeel_code || ' is gewijzigd' || CHR(10) + || 'Materiaal (EUR): ' || COALESCE(v_srtcontroledl_xcp_materia, v_srtcontrole_materiaal, '(leeg)') || ' --> ' || COALESCE(v_materiaal, '(leeg)')); + END IF; v_errorhint := 'Aanpassen percentage'; @@ -1113,22 +1170,35 @@ BEGIN SET ins_srtcontroledl_xcp_perc = v_percentage WHERE ins_srtcontroledl_xcp_key = v_srtcontroledl_xcp_key; + fac.trackaction('#INSUPD', + v_deel_key, + NULL, + NULL, + rec.ins_kenmerkwaarde3 || ' ' || rec.ins_kenmerkwaarde3 || ' - ' || rec.ins_srtdeel_code || ' is gewijzigd' || CHR(10) + || 'Percentage: ' || COALESCE(v_srtcontroledl_xcp_perc, v_srtcontrole_percentage, '(leeg)') || ' --> ' || COALESCE(v_percentage, '(leeg)')); + END IF; v_errorhint := 'Aanpassen startdatum: ' || rec.ins_kenmerkwaarde9; IF rec.ins_kenmerkwaarde9 IS NOT NULL - AND rec.ins_kenmerkwaarde9 <> - COALESCE (rec.ins_kenmerkwaarde10, '01010000') THEN - UPDATE ins_srtcontroledl_xcp - SET ins_srtcontroledl_xcp_startdat = - TRUNC ( - TO_DATE (rec.ins_kenmerkwaarde9, - 'DDMMYYYY'), - 'YYYY') - WHERE ins_srtcontroledl_xcp_key = - v_srtcontroledl_xcp_key; + v_startdat_nieuw := TRUNC (FAC.SAFE_TO_DATE (rec.ins_kenmerkwaarde9, 'DDMMYYYY'), 'YYYY'); + IF v_startdat_nieuw IS NOT NULL + AND v_startdat_nieuw <> v_srtcontroledl_xcp_startdat + AND rec.ins_kenmerkwaarde9 <> COALESCE (rec.ins_kenmerkwaarde10, '01010000') + THEN + UPDATE ins_srtcontroledl_xcp + SET ins_srtcontroledl_xcp_startdat = v_startdat_nieuw + WHERE ins_srtcontroledl_xcp_key = + v_srtcontroledl_xcp_key; + fac.trackaction('#INSUPD', + v_deel_key, + NULL, + NULL, + rec.ins_kenmerkwaarde3 || ' ' || rec.ins_kenmerkwaarde3 || ' - ' || rec.ins_srtdeel_code || ' is gewijzigd' || CHR(10) + || 'Startdatum: '|| COALESCE(TO_CHAR(v_srtcontroledl_xcp_startdat, 'dd-mm-yyyy'), '(leeg)') || ' --> ' || COALESCE(TO_CHAR(v_startdat_nieuw, 'dd-mm-yyyy'), '(leeg)')); + END IF; END IF; END IF; EXCEPTION @@ -1194,6 +1264,120 @@ BEGIN END; END LOOP; + + -- Nu gaan we de wijzigingen in de delen doorvoeren + FOR rec IN c_upd_deel + LOOP + BEGIN + SELECT ins_deel_key + INTO v_deel_key + FROM ins_deel + WHERE ins_deel_verwijder IS NULL AND ins_deel_omschrijving = rec.ins_deel_omschrijving; + + SELECT ins_alg_ruimte_key, ins_alg_locatie_key + INTO v_alg_ruimte_key, v_alg_locatie_key + FROM ins_deel + WHERE ins_deel_key = v_deel_key; + + IF v_alg_ruimte_key <> rec.alg_ruimte_key + THEN + UPDATE ins_deel d + SET ins_alg_ruimte_key = rec.alg_ruimte_key, ins_alg_locatie_key = rec.alg_locatie_key + WHERE d.ins_deel_key = v_deel_key; + + SELECT alg_ruimte_aanduiding || ' (' || alg_ruimte_omschrijving || ')' + INTO v_ruimte_aanduiding_oud + FROM alg_v_ruimte_gegevens + WHERE alg_ruimte_key = v_alg_ruimte_key; + + SELECT alg_ruimte_aanduiding || ' (' || alg_ruimte_omschrijving || ')' + INTO v_ruimte_aanduiding_nieuw + FROM alg_v_ruimte_gegevens + WHERE alg_ruimte_key = rec.alg_ruimte_key; + + + fac.trackaction ( + 'INSUPD', + v_deel_key, + NULL, + NULL, + 'Object gewijzigd' + || CHR (10) + || 'Plaats of eigenaar: ' + || v_ruimte_aanduiding_oud + || ' --> ' + || v_ruimte_aanduiding_nieuw); + END IF; + EXCEPTION + WHEN OTHERS + THEN + DBMS_OUTPUT.put_line (rec.ins_deel_omschrijving); + END; + + BEGIN + SELECT ins_deel_aanmaak + INTO v_deel_aanmaak + FROM ins_deel + WHERE ins_deel_key = v_deel_key; + + IF v_deel_aanmaak <> rec.ins_deel_aanmaak + THEN + UPDATE ins_deel d + SET ins_deel_aanmaak = rec.ins_deel_aanmaak + WHERE d.ins_deel_key = v_deel_key; + + fac.trackaction ( + 'INSUPD', + v_deel_key, + NULL, + NULL, + 'Object gewijzigd' + || CHR (10) + || 'Registratiedatum: ' + || TO_CHAR(v_deel_aanmaak, 'dd-mm-yyyy') + || ' --> ' + || TO_CHAR(rec.ins_deel_aanmaak, 'dd-mm-yyyy')); + END IF; + + EXCEPTION + WHEN OTHERS + THEN + DBMS_OUTPUT.put_line (rec.ins_deel_omschrijving); + END; + + BEGIN + SELECT ins_deel_aantal + INTO v_deel_aantal + FROM ins_deel + WHERE ins_deel_key = v_deel_key; + + IF v_deel_aantal <> rec.ins_deel_aantal + THEN + UPDATE ins_deel d + SET ins_deel_aantal = rec.ins_deel_aantal + WHERE d.ins_deel_key = v_deel_key; + + fac.trackaction ( + 'INSUPD', + v_deel_key, + NULL, + NULL, + 'Object gewijzigd' + || CHR (10) + || 'Hoeveelheid: ' + || v_deel_aantal + || ' --> ' + || rec.ins_deel_aantal); + END IF; + + EXCEPTION + WHEN OTHERS + THEN + DBMS_OUTPUT.put_line (rec.ins_deel_omschrijving); + END; + + END LOOP; + EXCEPTION WHEN OTHERS THEN