From aadcfc912985bd8d036026cf9217c29f3f250443 Mon Sep 17 00:00:00 2001 From: Arthur Egberink Date: Thu, 28 Mar 2024 16:06:08 +0000 Subject: [PATCH] RWSN#71427 -- Implementatie van MJOP voor RWS RWSN#80431 -- Generieke toegang (hook) svn path=/Customer/trunk/; revision=64086 --- RWSN/rwsn.sql | 3344 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 3344 insertions(+) diff --git a/RWSN/rwsn.sql b/RWSN/rwsn.sql index bbecefee9..ccf113d37 100644 --- a/RWSN/rwsn.sql +++ b/RWSN/rwsn.sql @@ -3883,6 +3883,7 @@ CREATE OR REPLACE PACKAGE RWSN AS PROCEDURE rap_resreg_per_dienst (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor); PROCEDURE rap_resreg_op_aanmaak (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor); PROCEDURE rap_noshow_per_dienst (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor); + PROCEDURE cnd_accept_melding; END; / @@ -8210,6 +8211,41 @@ AS ON x.prs_afdeling_key = fe.prs_afdeling_key ORDER BY 1; END rap_noshow_per_dienst; + + PROCEDURE cnd_accept_melding + AS + CURSOR c IS + SELECT mld_melding_key, prs_perslid_key + FROM mld_melding m, mld_stdmelding std, mld_discipline d + WHERE m.mld_stdmelding_key = std.mld_stdmelding_key + AND std.mld_ins_discipline_key = d.ins_discipline_key + AND d.ins_srtdiscipline_key = fac.getsetting ('cnd_gebreken_srtdisc_key') + AND mld_melding_status = 2; + + v_errormsg VARCHAR2 (1000); + oracle_err_num NUMBER; + oracle_err_mes VARCHAR2 (200); + BEGIN + FOR rec IN c + LOOP + mld.setmeldingstatus (rec.mld_melding_key, + 4, + rec.prs_perslid_key, + 0); + cnd.process_mjb_score_effects (rec.mld_melding_key); + END LOOP; + EXCEPTION + WHEN OTHERS + THEN + oracle_err_num := SQLCODE; + oracle_err_mes := SUBSTR (SQLERRM, 1, 200); + v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; + fac.writelog ('DAILY-CND_ACCEPT_MLD', + 'E', + v_errormsg, + ''); + END cnd_accept_melding; + END; / @@ -29370,6 +29406,3314 @@ AS ON x.res_rsv_ruimte_key = ads.res_rsv_ruimte_key WHERE x.res_status_bo_key IS NOT NULL OR ads.res_rsv_ruimte_key IS NOT NULL; + +-- Views en procedures voor MJOP en Condititiemetingen + +-- View om de wijzigingen in conditiescores inzichtelijk te maken. +CREATE OR REPLACE VIEW rwsn_v_rap_track_conditie +AS +SELECT dg.ins_deel_key, + dg.ins_discipline_omschrijving, + dg.ins_srtgroep_omschrijving, + dg.ins_srtdeel_omschrijving, + dg.ins_srtdeel_upper, + dg.ins_deel_omschrijving, + dg.ins_deel_opmerking, + l.alg_locatie_code, + l.alg_locatie_omschrijving, + dg.alg_gebouw_upper, + dg.alg_gebouw_omschrijving, + sg.alg_srtgebouw_omschrijving, + dg.alg_verdieping_code, + dg.alg_ruimte_nr, + t.fac_tracking_datum, + t.fac_tracking_oms + FROM ins_v_deel_gegevens dg, + fac_tracking t, + alg_srtgebouw sg, + alg_gebouw g, + alg_locatie l + WHERE dg.ins_deel_key = t.fac_tracking_refkey + AND fac_tracking_oms LIKE 'Conditie%' + AND fac_srtnotificatie_key = 174 -- INSUPD + AND dg.alg_gebouw_key = g.alg_gebouw_key + AND g.alg_srtgebouw_key = sg.alg_srtgebouw_key + AND g.alg_locatie_key = l.alg_locatie_key; + +CREATE OR REPLACE VIEW rwsn_v_rap_gebrek_gegevens +AS +SELECT m.mld_melding_key, + de.ins_deel_key, + ins_discipline_omschrijving, + mld_stdmelding_omschrijving, + mld_melding_omschrijving, + mld_melding_datum, + mld_melding_status, + MLD.getmeldingstatusdate(m.mld_melding_key, 5) afgemeld, -- MLDAFM + (SELECT fac_usrdata_omschr + FROM mld_kenmerk k, mld_srtkenmerk sk, fac_usrdata ud + WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND sk.mld_srtkenmerk_code = 'ERNST' + AND k.mld_stdmelding_key = std.mld_stdmelding_key + AND FLX.getflex ('MLD', k.mld_kenmerk_key, m.mld_melding_key) = ud.fac_usrdata_key) ernst, + (SELECT fac_usrdata_omschr + FROM mld_kenmerk k, mld_srtkenmerk sk, fac_usrdata ud + WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND sk.mld_srtkenmerk_code = 'OMVANG' + AND k.mld_stdmelding_key = std.mld_stdmelding_key + AND FLX.getflex ('MLD', k.mld_kenmerk_key, m.mld_melding_key) = ud.fac_usrdata_key) omvang, + (SELECT fac_usrdata_omschr + FROM mld_kenmerk k, mld_srtkenmerk sk, fac_usrdata ud + WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND sk.mld_srtkenmerk_code = 'INTENSITEIT' + AND k.mld_stdmelding_key = std.mld_stdmelding_key + AND FLX.getflex ('MLD', k.mld_kenmerk_key, m.mld_melding_key) = ud.fac_usrdata_key) intensiteit, + (SELECT FLX.getflex ('MLD', k.mld_kenmerk_key, m.mld_melding_key) + FROM mld_kenmerk k, mld_srtkenmerk sk + WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND sk.mld_srtkenmerk_code = 'CONDITIESCORE' + AND k.mld_stdmelding_key = d.ins_srtdiscipline_key) conditie, + (SELECT fac_usrdata_omschr + FROM mld_kenmerk k, mld_srtkenmerk sk, fac_usrdata ud + WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND sk.mld_srtkenmerk_code = 'ASPECT1' + AND k.mld_stdmelding_key = d.ins_srtdiscipline_key + AND FLX.getflex ('MLD', k.mld_kenmerk_key, m.mld_melding_key) = ud.fac_usrdata_key) aspect1, + (SELECT fac_usrdata_omschr + FROM mld_kenmerk k, mld_srtkenmerk sk, fac_usrdata ud + WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND sk.mld_srtkenmerk_code = 'ASPECT2' + AND k.mld_stdmelding_key = d.ins_srtdiscipline_key + AND FLX.getflex ('MLD', k.mld_kenmerk_key, m.mld_melding_key) = ud.fac_usrdata_key) aspect2, + (SELECT fac_usrdata_omschr + FROM mld_kenmerk k, mld_srtkenmerk sk, fac_usrdata ud + WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND sk.mld_srtkenmerk_code = 'ASPECT3' + AND k.mld_stdmelding_key = d.ins_srtdiscipline_key + AND FLX.getflex ('MLD', k.mld_kenmerk_key, m.mld_melding_key) = ud.fac_usrdata_key) aspect3, + (SELECT fac_usrdata_omschr + FROM mld_kenmerk k, mld_srtkenmerk sk, fac_usrdata ud + WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND sk.mld_srtkenmerk_code = 'ASPECT4' + AND k.mld_stdmelding_key = d.ins_srtdiscipline_key + AND FLX.getflex ('MLD', k.mld_kenmerk_key, m.mld_melding_key) = ud.fac_usrdata_key) aspect4, + (SELECT fac_usrdata_omschr + FROM mld_kenmerk k, mld_srtkenmerk sk, fac_usrdata ud + WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND sk.mld_srtkenmerk_code = 'ASPECT5' + AND k.mld_stdmelding_key = d.ins_srtdiscipline_key + AND FLX.getflex ('MLD', k.mld_kenmerk_key, m.mld_melding_key) = ud.fac_usrdata_key) aspect5, + (SELECT fac_usrdata_omschr + FROM mld_kenmerk k, mld_srtkenmerk sk, fac_usrdata ud + WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND sk.mld_srtkenmerk_code = 'ASPECT6' + AND k.mld_stdmelding_key = d.ins_srtdiscipline_key + AND FLX.getflex ('MLD', k.mld_kenmerk_key, m.mld_melding_key) = ud.fac_usrdata_key) aspect6, + (SELECT fac_usrdata_omschr + FROM mld_kenmerk k, mld_srtkenmerk sk, fac_usrdata ud + WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND sk.mld_srtkenmerk_code = 'ASPECT7' + AND k.mld_stdmelding_key = d.ins_srtdiscipline_key + AND FLX.getflex ('MLD', k.mld_kenmerk_key, m.mld_melding_key) = ud.fac_usrdata_key) aspect7, + (SELECT FLX.getflex ('MLD', k.mld_kenmerk_key, m.mld_melding_key) + FROM mld_kenmerk k, mld_srtkenmerk sk + WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND sk.mld_srtkenmerk_code = 'PRIORITEITSCORE' + AND k.mld_stdmelding_key = d.ins_srtdiscipline_key) prioriteit, + (SELECT FLX.getflex ('MLD', k.mld_kenmerk_key, m.mld_melding_key) + FROM mld_kenmerk k, mld_srtkenmerk sk + WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND sk.mld_srtkenmerk_code = 'KOSTEN' + AND k.mld_stdmelding_key = d.ins_srtdiscipline_key) kosten, + de.ins_deel_omschrijving, + de.ins_deel_opmerking, + de.ins_deel_mjb_score1, + de.ins_deel_mjb_score2 + FROM mld_melding m, + mld_stdmelding std, + ins_tab_discipline d, + mld_melding_object mo, + ins_deel de + WHERE m.mld_stdmelding_key = std.mld_stdmelding_key + AND std.mld_ins_discipline_key = d.ins_discipline_key + AND d.ins_srtdiscipline_key = fac.getsetting ('cnd_gebreken_srtdisc_key') + AND m.mld_melding_key = mo.mld_melding_key + AND mo.ins_deel_key = de.ins_deel_key + AND mo.mld_melding_object_verwijder IS NULL; + + +------------------------------------------ +-- +-- MJOB specifieke routines +-- +------------------------------------------ +CREATE OR REPLACE PROCEDURE rwsn_import_ins_elementen (p_import_key IN NUMBER) +IS + c_delim VARCHAR2 (2) := fac.import_delimiter(p_import_key); + v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line + v_errormsg VARCHAR2 (1000); + v_errorhint VARCHAR2 (1000); + oracle_err_num NUMBER; + oracle_err_mes VARCHAR2 (200); + header_is_valid NUMBER; + v_count_tot NUMBER (10); + v_count_import NUMBER (10); + v_ongeldig NUMBER (1); + v_aanduiding VARCHAR (400); + v_dummy VARCHAR (255); + v_ins_kenmerk_key1 VARCHAR2 (255); + v_ins_kenmerk_key2 VARCHAR2 (255); + v_ins_kenmerk_key3 VARCHAR2 (255); + v_ins_kenmerk_key4 VARCHAR2 (255); + v_ins_kenmerk_key5 VARCHAR2 (255); + v_ins_kenmerk_key6 VARCHAR2 (255); + v_ins_kenmerk_key7 VARCHAR2 (255); + v_ins_kenmerk_key8 VARCHAR2 (255); + v_ins_kenmerk_key9 VARCHAR2 (255); + v_ins_kenmerk_key10 VARCHAR2 (255); + v_ins_kenmerk_key11 VARCHAR2 (255); + v_ins_kenmerk_key12 VARCHAR2 (255); + v_ins_kenmerk_key13 VARCHAR2 (255); + v_ins_kenmerk_key14 VARCHAR2 (255); + v_ins_kenmerk_key15 VARCHAR2 (255); + v_ins_kenmerk_key16 VARCHAR2 (255); + v_ins_kenmerk_key17 VARCHAR2 (255); + v_ins_kenmerk_key18 VARCHAR2 (255); + v_ins_kenmerk_key19 VARCHAR2 (255); + v_ins_kenmerk_key20 VARCHAR2 (255); + -- De importvelden + v_ins_discipline_omschrijving VARCHAR2 (255); -- C60 + v_ins_discipline_kostensoort VARCHAR2 (255); --C60 + v_ins_srtgroep_omschrijving VARCHAR2 (255); -- C60 + v_ins_srtdeel_code VARCHAR2 (255); -- C10 + v_ins_srtdeel_omschrijving VARCHAR2 (255); -- C100 + v_ins_deel_omschrijving VARCHAR2 (255); -- C60 + v_ins_deel_opmerking VARCHAR2 (1000); -- C320 + v_ins_deel_externnr VARCHAR2 (255); -- C60 + v_alg_locatie_code VARCHAR2 (255); -- C10 + v_alg_gebouw_code VARCHAR2 (255); -- C12 + v_alg_verdieping_volgnr VARCHAR2 (255); -- N3 + v_alg_ruimte_nr VARCHAR2 (255); -- C20 + + v_ins_kenmerkwaarde1 VARCHAR2 (4053); + v_ins_kenmerkwaarde2 VARCHAR2 (4053); + v_ins_kenmerkwaarde3 VARCHAR2 (4053); + v_ins_kenmerkwaarde4 VARCHAR2 (4053); + v_ins_kenmerkwaarde5 VARCHAR2 (4053); + v_ins_kenmerkwaarde6 VARCHAR2 (4053); + v_ins_kenmerkwaarde7 VARCHAR2 (4053); + v_ins_kenmerkwaarde8 VARCHAR2 (4053); + v_ins_kenmerkwaarde9 VARCHAR2 (4053); + v_ins_kenmerkwaarde10 VARCHAR2 (4053); + v_ins_kenmerkwaarde11 VARCHAR2 (4053); + v_ins_kenmerkwaarde12 VARCHAR2 (4053); + v_ins_kenmerkwaarde13 VARCHAR2 (4053); + v_ins_kenmerkwaarde14 VARCHAR2 (4053); + v_ins_kenmerkwaarde15 VARCHAR2 (4053); + v_ins_kenmerkwaarde16 VARCHAR2 (4053); + v_ins_kenmerkwaarde17 VARCHAR2 (4053); + v_ins_kenmerkwaarde18 VARCHAR2 (4053); + v_ins_kenmerkwaarde19 VARCHAR2 (4053); + v_ins_kenmerkwaarde20 VARCHAR2 (4053); + v_ins_deel_aanmaak VARCHAR2 (255); -- DATE + v_ins_deel_aanmaak_d DATE; + v_ins_deel_vervaldatum VARCHAR2 (255); -- DATE + v_ins_deel_vervaldatum_d DATE; + v_ins_deel_aantal VARCHAR2 (255); -- N8,2 + v_ins_deel_aantal_n NUMBER(8, 2); + v_file_index NUMBER; + + v_alg_gebouw_key NUMBER; + v_alg_verdieping_key NUMBER; + v_alg_ruimte_key NUMBER; + v_ins_deel_key NUMBER; + v_ins_srtdeel_key NUMBER; + v_ins_srtgroep_key NUMBER; + v_ins_discipline_key NUMBER; + v_ins_deel_volgnr NUMBER; + -- Overige velden: + CURSOR c1 + IS + SELECT * + FROM fac_imp_file + WHERE fac_import_key = p_import_key + ORDER BY fac_imp_file_index; + + CURSOR c IS + SELECT * + FROM fac_imp_ins + ORDER BY alg_gebouw_code, ins_deel_omschrijving; + + -- Controleer tijdens import-fase alleen op het bestaan van een kenmerk met de meegegeven omschrijving of kenmerk key. + -- De omschrijving (header van kolom) kan de omschrijving zijn van het kenmerksoort of het kenmerk. + -- De omschrijving van het kenmerksoort kan namelijk overruled worden door de omschrijving van het kenmerk. + -- Daarnaast kan hetzelfde kenmerk vaker voorkomen voor verschillende groepen. + -- Of het kenmerksoort/kenmerk wel is gedefinieerd voor de betreffende + -- object-discipline/groep/soort, volgt pas tijdens de update-fase)! + -- + -- p_kw is bijvoorbeeld 'Parkeercode', 'Parkeercode|3', 234 of 234|3 waarbij de tweede en laatste in groep 3 zitten + -- het resultaat is NULL (als niet gevonden) of Parkeercode|3 of 234|3 voor kenmer_key 234 in groep 3 + -- Als geen groep is meegegeven dan wordt 'Parkeercode|0' opgeleverd (de default groep) + FUNCTION bepaal_kenmerk (p_kw IN VARCHAR) + RETURN VARCHAR + IS + v_kenmerk_key NUMBER; + v_kenmerk_groep NUMBER; + v_kw VARCHAR(250); + BEGIN + v_kenmerk_groep := 0; + v_kw := p_kw; + IF INSTR (v_kw, '|') > 1 + THEN + v_kenmerk_groep := SUBSTR (v_kw, INSTR (v_kw, '|') + 1); + v_kw := SUBSTR (v_kw, 1, INSTR (v_kw, '|') - 1); + END IF; + + IF fac.safe_to_number (v_kw) IS NULL + THEN -- kenmerkwaarde is alfanumeriek (dus omschrijving)! + SELECT MIN(k.ins_kenmerk_key) + INTO v_kenmerk_key + FROM ins_v_aanwezigkenmerk k, + ins_v_aanwezigsrtkenmerk sk + WHERE k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key + AND k.ins_kenmerk_groep = v_kenmerk_groep + AND COALESCE(UPPER(k.ins_kenmerk_omschrijving), sk.ins_srtkenmerk_upper) = UPPER(v_kw) + AND sk.ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B', 'V'); + ELSE -- kenmerkwaarde is numeriek (dus key)! + SELECT k.ins_kenmerk_key + INTO v_kenmerk_key + FROM ins_v_aanwezigkenmerk k, + ins_v_aanwezigsrtkenmerk sk + WHERE k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key + AND k.ins_kenmerk_groep = v_kenmerk_groep + AND k.ins_kenmerk_key = fac.safe_to_number (v_kw) + AND sk.ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B', 'V'); + END IF; + + IF v_kenmerk_key IS NULL + THEN + RETURN NULL; + ELSE + -- Er is een kenmerksoort of kenmerk aanwezig met de omschrijving/kenmerk_key (v_kw) + RETURN v_kw || '|' || TO_CHAR(v_kenmerk_groep); + END IF; + EXCEPTION + WHEN NO_DATA_FOUND + THEN + IF p_kw IS NULL OR UPPER (p_kw) LIKE 'KENMERK%' + THEN + RETURN NULL; + ELSE + fac.imp_writelog (p_import_key, + 'W', + 'Fout bij bepalen kenmerk [' || p_kw || ']', + 'Bestaat niet of type ongeldig'); + COMMIT; + RETURN NULL; + END IF; + END; + +BEGIN + -- Eerst opruiming + DELETE FROM fac_imp_ins; + + COMMIT; + + v_count_tot := 0; + v_count_import := 0; + header_is_valid := 0; + + FOR rec1 IN c1 + LOOP + BEGIN + v_newline := rec1.fac_imp_file_line; + v_file_index := rec1.fac_imp_file_index; + v_errormsg := 'Fout bij opvragen importregel'; + v_aanduiding := ''; + v_ongeldig := 0; + -- Lees alle veldwaarden + fac.imp_getfield (v_newline, c_delim, v_alg_gebouw_code); -- Objectcode + fac.imp_getfield (v_newline, c_delim, v_ins_srtdeel_code); -- Componentcode + + fac.imp_getfield (v_newline, c_delim, v_ins_deel_externnr); -- Element-ID + fac.imp_getfield (v_newline, c_delim, v_ins_deel_opmerking); -- Component omschrijving + fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde1); -- Opmerkingen + fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde2); -- Fabrikant + fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde3); -- Kenmerken + fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde4); -- Type + fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde5); -- Cap + fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde6); -- Eenheid Cap + fac.imp_getfield (v_newline, c_delim, v_ins_deel_aantal); -- Aantal + fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde7); -- Eenheid aantal + fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde8); -- Bouwjaar + fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde9); -- Theoretische Levensduur + fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde10); -- Huidige conditie + fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde11); -- Gewenste conditie + fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde12); + fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde13); + fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde14); + fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde15); + fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde16); + fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde17); + fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde18); + fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde19); + fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde20); + + v_aanduiding := + '[' + || v_alg_gebouw_code + || '|' + || v_ins_deel_externnr + || '|' + || v_ins_srtdeel_code + || '] '; + + -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen + -- de juiste kolomkop. Ik controleer daarbij alle NIET-kenmerk kolommen! + -- Ik negeer alles totdat ik een geldige header ben gepasseerd. + IF (header_is_valid = 0) + THEN + IF UPPER (v_alg_gebouw_code) = 'OBJECTCODE' + AND UPPER (v_ins_srtdeel_code) = 'ELEMENTCODE RWS' + AND UPPER (v_ins_deel_externnr) = 'ELEMENT-ID' + AND UPPER (v_ins_deel_opmerking) = 'ELEMENT OMSCHRIJVING' + AND UPPER (v_ins_kenmerkwaarde1) = 'OPMERKINGEN' + AND UPPER (v_ins_kenmerkwaarde2) = 'FABRIKANT' + AND UPPER (v_ins_kenmerkwaarde3) = 'KENMERKEN' + AND UPPER (v_ins_kenmerkwaarde4) = 'TYPE' + AND UPPER (v_ins_kenmerkwaarde5) = 'CAPACITEIT' + AND UPPER (v_ins_kenmerkwaarde6) = 'EENHEID CAPACITEIT' + AND UPPER (v_ins_deel_aantal) = 'AANTAL' + AND UPPER (v_ins_kenmerkwaarde7) = 'EENHEID AANTAL' + AND UPPER (v_ins_kenmerkwaarde8) = 'BOUWJAAR' + AND UPPER (v_ins_kenmerkwaarde9) = 'THEORETISCHE LEVENSDUUR' + AND UPPER (v_ins_kenmerkwaarde10) = 'HUIDIGE CONDITIESCORE' + AND UPPER (v_ins_kenmerkwaarde11) = 'GEWENSTE CONDITIESCORE' + THEN + v_ins_kenmerk_key1 := bepaal_kenmerk (v_ins_kenmerkwaarde1); + v_ins_kenmerk_key2 := bepaal_kenmerk (v_ins_kenmerkwaarde2); + v_ins_kenmerk_key3 := bepaal_kenmerk (v_ins_kenmerkwaarde3); + v_ins_kenmerk_key4 := bepaal_kenmerk (v_ins_kenmerkwaarde4); + v_ins_kenmerk_key5 := bepaal_kenmerk (v_ins_kenmerkwaarde5); + v_ins_kenmerk_key6 := bepaal_kenmerk (v_ins_kenmerkwaarde6); + v_ins_kenmerk_key7 := bepaal_kenmerk (v_ins_kenmerkwaarde7); + v_ins_kenmerk_key8 := bepaal_kenmerk (v_ins_kenmerkwaarde8); + v_ins_kenmerk_key9 := bepaal_kenmerk (v_ins_kenmerkwaarde9); + v_ins_kenmerk_key10 := bepaal_kenmerk (v_ins_kenmerkwaarde10); + v_ins_kenmerk_key11 := bepaal_kenmerk (v_ins_kenmerkwaarde11); + v_ins_kenmerk_key12 := bepaal_kenmerk (v_ins_kenmerkwaarde12); + v_ins_kenmerk_key13 := bepaal_kenmerk (v_ins_kenmerkwaarde13); + v_ins_kenmerk_key14 := bepaal_kenmerk (v_ins_kenmerkwaarde14); + v_ins_kenmerk_key15 := bepaal_kenmerk (v_ins_kenmerkwaarde15); + v_ins_kenmerk_key16 := bepaal_kenmerk (v_ins_kenmerkwaarde16); + v_ins_kenmerk_key17 := bepaal_kenmerk (v_ins_kenmerkwaarde17); + v_ins_kenmerk_key18 := bepaal_kenmerk (v_ins_kenmerkwaarde18); + v_ins_kenmerk_key19 := bepaal_kenmerk (v_ins_kenmerkwaarde19); + v_ins_kenmerk_key20 := bepaal_kenmerk (v_ins_kenmerkwaarde20); + + header_is_valid := 1; + ELSE + IF rec1.fac_imp_file_index = 1 + THEN + + fac.imp_writelog (p_import_key, + 'E', + 'Ongeldige header aangetroffen:', + 'OBJECTCODE: ' || UPPER (v_alg_gebouw_code) || CHR(10) || + 'ELEMENTCODE RWS: ' || UPPER (v_ins_srtdeel_code) || CHR(10) || + 'ELEMENT-ID: ' || UPPER (v_ins_deel_externnr) || CHR(10) || + 'ELEMENT OMSCHRIJVING: ' || UPPER (v_ins_deel_opmerking) || CHR(10) || + 'OPMERKINGEN: ' || UPPER (v_ins_kenmerkwaarde1) || CHR(10) || + 'FABRIKANT: ' || UPPER (v_ins_kenmerkwaarde2) || CHR(10) || + 'KENMERKEN: ' || UPPER (v_ins_kenmerkwaarde3) || CHR(10) || + 'TYPE: ' || UPPER (v_ins_kenmerkwaarde4) || CHR(10) || + 'CAPACITEIT: ' || UPPER (v_ins_kenmerkwaarde5) || CHR(10) || + 'EENHEID CAPACITEIT: ' || UPPER (v_ins_kenmerkwaarde6) || CHR(10) || + 'AANTAL: ' || UPPER (v_ins_deel_aantal) || CHR(10) || + 'EENHEID AANTAL: ' || UPPER (v_ins_kenmerkwaarde7) || CHR(10) || + 'BOUWJAAR: ' || UPPER (v_ins_kenmerkwaarde8) || CHR(10) || + 'THEORETISCHE LEVENSDUUR: ' || UPPER (v_ins_kenmerkwaarde9) || CHR(10) || + 'HUIDIGE CONDITIESCORE: ' || UPPER (v_ins_kenmerkwaarde10) || CHR(10) || + 'GEWENSTE CONDITIESCORE: ' || UPPER (v_ins_kenmerkwaarde11)); + END IF; + END IF; + ELSE + v_count_tot := v_count_tot + 1; + -- Controleer alle veldwaarden + + v_errormsg := 'Gebouwcode kan niet gevonden worden'; + v_alg_gebouw_code := TRIM (v_alg_gebouw_code); + + SELECT alg_gebouw_key, alg_locatie_code + INTO v_alg_gebouw_key, v_alg_locatie_code + FROM alg_gebouw g, alg_locatie l + WHERE g.alg_locatie_key = l.alg_locatie_key + AND alg_gebouw_verwijder IS NULL + AND UPPER(alg_gebouw_code) = v_alg_gebouw_code; + + v_alg_verdieping_volgnr := 0; + BEGIN + SELECT alg_verdieping_key + INTO v_alg_verdieping_key + FROM alg_verdieping + WHERE alg_verdieping_verwijder IS NULL + AND alg_gebouw_key = v_alg_gebouw_key + AND alg_verdieping_volgnr = 0; + EXCEPTION WHEN NO_DATA_FOUND + THEN + INSERT INTO alg_verdieping (alg_gebouw_key, alg_verdieping_volgnr, alg_verdieping_omschrijving, alg_verdieping_code) + VALUES (v_alg_gebouw_key, 0, '_Begane grond', '0') + RETURNING alg_verdieping_key INTO v_alg_verdieping_key; + fac.imp_writelog (p_import_key, 'I', v_aanduiding, 'Verdieping aangemaakt'); + END; + + v_alg_ruimte_nr := '_'; + BEGIN + SELECT alg_ruimte_key + INTO v_alg_ruimte_key + FROM alg_ruimte + WHERE alg_ruimte_verwijder IS NULL + AND alg_verdieping_key = v_alg_verdieping_key + AND alg_ruimte_nr = '_'; + EXCEPTION WHEN NO_DATA_FOUND + THEN + INSERT INTO alg_ruimte (alg_verdieping_key, alg_ruimte_nr, alg_ruimte_omschrijving) + VALUES (v_alg_verdieping_key, '_', 'MJOP ruimte') + RETURNING alg_ruimte_key INTO v_alg_ruimte_key; + fac.imp_writelog (p_import_key, 'I', v_aanduiding, 'Ruimte aangemaakt'); + END; + -- + + v_errormsg := 'Bepaal objectsoort'; + v_ins_srtdeel_code := TRIM(v_ins_srtdeel_code); + SELECT ins_srtdeel_omschrijving, ins_srtdeel_key, ins_srtgroep_key + INTO v_ins_srtdeel_omschrijving, v_ins_srtdeel_key, v_ins_srtgroep_key + FROM ins_srtdeel + WHERE ins_srtdeel_verwijder IS NULL + AND ins_srtdeel_code = v_ins_srtdeel_code; + + v_errormsg := 'Bepaal objectgroep'; + SELECT ins_srtgroep_omschrijving, ins_discipline_key + INTO v_ins_srtgroep_omschrijving, v_ins_discipline_key + FROM ins_srtgroep + WHERE ins_srtgroep_key = v_ins_srtgroep_key; + + v_errormsg := 'Bepaal discipline'; + SELECT ins_discipline_omschrijving + INTO v_ins_discipline_omschrijving + FROM ins_discipline + WHERE ins_discipline_key = v_ins_discipline_key; + + BEGIN + v_errormsg := 'Bepaal object id - Kijk of het externnr bestaat'; + SELECT d.ins_deel_omschrijving + INTO v_ins_deel_omschrijving + FROM ins_v_deel_gegevens dg, ins_deel d + WHERE dg.ins_deel_key = d.ins_deel_key + AND dg.alg_gebouw_upper = v_alg_gebouw_code + AND d.ins_deel_externnr = v_ins_deel_externnr; + + IF v_ins_deel_omschrijving NOT LIKE v_alg_gebouw_code || '%' + THEN + v_ins_deel_omschrijving := NULL; + END IF; + + EXCEPTION WHEN NO_DATA_FOUND + THEN + v_ins_deel_omschrijving := NULL; + END; + + IF v_ins_deel_omschrijving IS NULL + THEN + v_errormsg := 'Bepaal object id - maak een nieuw nummer aan'; + SELECT MAX(FAC.safe_to_number(SUBSTR(ins_deel_omschrijving, INSTR(ins_deel_omschrijving, '-', 1, 2)+1, 100))) + INTO v_ins_deel_volgnr + FROM ins_deel + WHERE ins_deel_verwijder IS NULL + AND ins_deel_omschrijving LIKE v_alg_gebouw_code || '-' || v_ins_srtdeel_code || '%'; + + IF v_ins_deel_volgnr IS NULL + THEN + v_ins_deel_volgnr := 0; + END IF; + + v_ins_deel_omschrijving := v_alg_gebouw_code || '-' || v_ins_srtdeel_code || '-' || LPAD(v_ins_deel_volgnr + 1, 2, '0'); + END IF; + + v_errormsg := 'Objectopmerking ongeldig'; + v_ins_deel_opmerking := TRIM (v_ins_deel_opmerking); + + IF LENGTH (v_ins_deel_opmerking) > 320 + THEN + v_ins_deel_opmerking := SUBSTR (v_ins_deel_opmerking, 1, 320); + fac.imp_writelog ( + p_import_key, + 'W', + v_aanduiding || v_errormsg, + 'Objectopmerking wordt afgebroken tot [' + || v_ins_deel_opmerking + || ']' + ); + END IF; + + -- + v_errormsg := 'Aantal ongeldig; maximale grootte 999999.99'; + v_ins_deel_aantal := TRIM (v_ins_deel_aantal); + v_ins_deel_aantal := REPLACE (v_ins_deel_aantal, ',', '.'); + v_ins_deel_aantal_n := NULL; + + IF (v_ins_deel_aantal IS NOT NULL) + THEN + IF (fac.safe_to_number (v_ins_deel_aantal) IS NULL) + THEN + v_ongeldig := 1; + fac.imp_writelog (p_import_key, + 'W', + v_aanduiding || v_errormsg, + 'Regel wordt overgeslagen!'); + ELSE + v_ins_deel_aantal_n := fac.safe_to_number (v_ins_deel_aantal); + END IF; + ELSE + v_ins_deel_aantal_n := 1; + END IF; + + -- + v_errorhint := 'Bepaling registratiedatum'; + v_ins_kenmerkwaarde8 := TRIM(v_ins_kenmerkwaarde8); + IF v_ins_kenmerkwaarde8 IS NOT NULL AND LENGTH(v_ins_kenmerkwaarde8) = 4 + THEN + v_ins_deel_aanmaak := '01-01-' || TRIM(v_ins_kenmerkwaarde8); + v_ins_deel_aanmaak_d := TO_DATE(v_ins_deel_aanmaak, 'dd-mm-yyyy'); + END IF; + + -- De rest alleen ff trimmen. + v_ins_kenmerkwaarde1 := TRIM (v_ins_kenmerkwaarde1); + v_ins_kenmerkwaarde2 := TRIM (v_ins_kenmerkwaarde2); + v_ins_kenmerkwaarde3 := TRIM (v_ins_kenmerkwaarde3); + v_ins_kenmerkwaarde4 := TRIM (v_ins_kenmerkwaarde4); + v_ins_kenmerkwaarde5 := TRIM (v_ins_kenmerkwaarde5); + v_ins_kenmerkwaarde6 := TRIM (v_ins_kenmerkwaarde6); + v_ins_kenmerkwaarde7 := TRIM (v_ins_kenmerkwaarde7); + v_ins_kenmerkwaarde8 := TRIM (v_ins_kenmerkwaarde8); + v_ins_kenmerkwaarde9 := TRIM (v_ins_kenmerkwaarde9); + v_ins_kenmerkwaarde10 := TRIM (v_ins_kenmerkwaarde10); + v_ins_kenmerkwaarde11 := TRIM (v_ins_kenmerkwaarde11); + v_ins_kenmerkwaarde12 := TRIM (v_ins_kenmerkwaarde12); + v_ins_kenmerkwaarde13 := TRIM (v_ins_kenmerkwaarde13); + v_ins_kenmerkwaarde14 := TRIM (v_ins_kenmerkwaarde14); + v_ins_kenmerkwaarde15 := TRIM (v_ins_kenmerkwaarde15); + v_ins_kenmerkwaarde16 := TRIM (v_ins_kenmerkwaarde16); + v_ins_kenmerkwaarde17 := TRIM (v_ins_kenmerkwaarde17); + v_ins_kenmerkwaarde18 := TRIM (v_ins_kenmerkwaarde18); + v_ins_kenmerkwaarde19 := TRIM (v_ins_kenmerkwaarde19); + v_ins_kenmerkwaarde20 := TRIM (v_ins_kenmerkwaarde20); + + -- Insert geformatteerde import record + IF v_ongeldig = 0 + THEN + BEGIN + v_errormsg := 'Fout bij wegschrijven importregel'; + + -- Als uit kenmerkheader een geldige kenmerksoort-key volgt, + -- dan is kenmerkwaarde gevuld met =; zoniet, + -- dan is kenmerkwaarde gevuld met ! + -- NB. Een NULL-waarde resulteert NIET in het wissen van een + -- kenmerkveld (bijwerken kan wel, maar wissen dus niet)! + INSERT INTO fac_imp_ins ( + ins_discipline_omschrijving, + ins_discipline_kostensoort, + ins_srtgroep_omschrijving, + ins_srtdeel_code, + ins_srtdeel_omschrijving, + ins_deel_omschrijving, + ins_deel_opmerking, + alg_locatie_code, + alg_gebouw_code, + alg_verdieping_volgnr, + alg_ruimte_nr, + ins_kenmerkwaarde1, + ins_kenmerkwaarde2, + ins_kenmerkwaarde3, + ins_kenmerkwaarde4, + ins_kenmerkwaarde5, + ins_kenmerkwaarde6, + ins_kenmerkwaarde7, + ins_kenmerkwaarde8, + ins_kenmerkwaarde9, + ins_kenmerkwaarde10, + ins_kenmerkwaarde11, + ins_kenmerkwaarde12, + ins_kenmerkwaarde13, + ins_kenmerkwaarde14, + ins_kenmerkwaarde15, + ins_kenmerkwaarde16, + ins_kenmerkwaarde17, + ins_kenmerkwaarde18, + ins_kenmerkwaarde19, + ins_kenmerkwaarde20, + ins_deel_aanmaak, + ins_deel_aantal, + ins_deel_externnr + ) + VALUES ( + v_ins_discipline_omschrijving, + v_ins_discipline_kostensoort, + v_ins_srtgroep_omschrijving, + v_ins_srtdeel_code, + v_ins_srtdeel_omschrijving, + v_ins_deel_omschrijving, + v_ins_deel_opmerking, + v_alg_locatie_code, + v_alg_gebouw_code, + v_alg_verdieping_volgnr, + v_alg_ruimte_nr, + DECODE (v_ins_kenmerk_key1, NULL, v_ins_kenmerkwaarde1, DECODE(v_ins_kenmerk_key1, NULL, NULL, TO_CHAR (v_ins_kenmerk_key1) || '=' || SUBSTR (v_ins_kenmerkwaarde1, 1, 3900))), + DECODE (v_ins_kenmerk_key2, NULL, v_ins_kenmerkwaarde2, DECODE(v_ins_kenmerk_key2, NULL, NULL, TO_CHAR (v_ins_kenmerk_key2) || '=' || SUBSTR (v_ins_kenmerkwaarde2, 1, 3900))), + DECODE (v_ins_kenmerk_key3, NULL, v_ins_kenmerkwaarde3, DECODE(v_ins_kenmerk_key3, NULL, NULL, TO_CHAR (v_ins_kenmerk_key3) || '=' || SUBSTR (v_ins_kenmerkwaarde3, 1, 3900))), + DECODE (v_ins_kenmerk_key4, NULL, v_ins_kenmerkwaarde4, DECODE(v_ins_kenmerk_key4, NULL, NULL, TO_CHAR (v_ins_kenmerk_key4) || '=' || SUBSTR (v_ins_kenmerkwaarde4, 1, 3900))), + DECODE (v_ins_kenmerk_key5, NULL, v_ins_kenmerkwaarde5, DECODE(v_ins_kenmerk_key5, NULL, NULL, TO_CHAR (v_ins_kenmerk_key5) || '=' || SUBSTR (v_ins_kenmerkwaarde5, 1, 3900))), + DECODE (v_ins_kenmerk_key6, NULL, v_ins_kenmerkwaarde6, DECODE(v_ins_kenmerk_key6, NULL, NULL, TO_CHAR (v_ins_kenmerk_key6) || '=' || SUBSTR (v_ins_kenmerkwaarde6, 1, 3900))), + DECODE (v_ins_kenmerk_key7, NULL, v_ins_kenmerkwaarde7, DECODE(v_ins_kenmerk_key7, NULL, NULL, TO_CHAR (v_ins_kenmerk_key7) || '=' || SUBSTR (v_ins_kenmerkwaarde7, 1, 3900))), + DECODE (v_ins_kenmerk_key8, NULL, v_ins_kenmerkwaarde8, DECODE(v_ins_kenmerk_key8, NULL, NULL, TO_CHAR (v_ins_kenmerk_key8) || '=' || SUBSTR (v_ins_kenmerkwaarde8, 1, 3900))), + DECODE (v_ins_kenmerk_key9, NULL, v_ins_kenmerkwaarde9, DECODE(v_ins_kenmerk_key9, NULL, NULL, TO_CHAR (v_ins_kenmerk_key9) || '=' || SUBSTR (v_ins_kenmerkwaarde9, 1, 3900))), + DECODE (v_ins_kenmerk_key10, NULL, v_ins_kenmerkwaarde10, DECODE(v_ins_kenmerk_key10, NULL, NULL, TO_CHAR (v_ins_kenmerk_key10) || '=' || SUBSTR (v_ins_kenmerkwaarde10, 1, 3900))), + DECODE (v_ins_kenmerk_key11, NULL, v_ins_kenmerkwaarde11, DECODE(v_ins_kenmerk_key11, NULL, NULL, TO_CHAR (v_ins_kenmerk_key11) || '=' || SUBSTR (v_ins_kenmerkwaarde11, 1, 3900))), + DECODE (v_ins_kenmerk_key12, NULL, v_ins_kenmerkwaarde12, DECODE(v_ins_kenmerk_key12, NULL, NULL, TO_CHAR (v_ins_kenmerk_key12) || '=' || SUBSTR (v_ins_kenmerkwaarde12, 1, 3900))), + DECODE (v_ins_kenmerk_key13, NULL, v_ins_kenmerkwaarde13, DECODE(v_ins_kenmerk_key13, NULL, NULL, TO_CHAR (v_ins_kenmerk_key13) || '=' || SUBSTR (v_ins_kenmerkwaarde13, 1, 3900))), + DECODE (v_ins_kenmerk_key14, NULL, v_ins_kenmerkwaarde14, DECODE(v_ins_kenmerk_key14, NULL, NULL, TO_CHAR (v_ins_kenmerk_key14) || '=' || SUBSTR (v_ins_kenmerkwaarde14, 1, 3900))), + DECODE (v_ins_kenmerk_key15, NULL, v_ins_kenmerkwaarde15, DECODE(v_ins_kenmerk_key15, NULL, NULL, TO_CHAR (v_ins_kenmerk_key15) || '=' || SUBSTR (v_ins_kenmerkwaarde15, 1, 3900))), + DECODE (v_ins_kenmerk_key16, NULL, v_ins_kenmerkwaarde16, DECODE(v_ins_kenmerk_key16, NULL, NULL, TO_CHAR (v_ins_kenmerk_key16) || '=' || SUBSTR (v_ins_kenmerkwaarde16, 1, 3900))), + DECODE (v_ins_kenmerk_key17, NULL, v_ins_kenmerkwaarde17, DECODE(v_ins_kenmerk_key17, NULL, NULL, TO_CHAR (v_ins_kenmerk_key17) || '=' || SUBSTR (v_ins_kenmerkwaarde17, 1, 3900))), + DECODE (v_ins_kenmerk_key18, NULL, v_ins_kenmerkwaarde18, DECODE(v_ins_kenmerk_key18, NULL, NULL, TO_CHAR (v_ins_kenmerk_key18) || '=' || SUBSTR (v_ins_kenmerkwaarde18, 1, 3900))), + DECODE (v_ins_kenmerk_key19, NULL, v_ins_kenmerkwaarde19, DECODE(v_ins_kenmerk_key19, NULL, NULL, TO_CHAR (v_ins_kenmerk_key19) || '=' || SUBSTR (v_ins_kenmerkwaarde19, 1, 3900))), + DECODE (v_ins_kenmerk_key20, NULL, v_ins_kenmerkwaarde20, DECODE(v_ins_kenmerk_key20, NULL, NULL, TO_CHAR (v_ins_kenmerk_key20) || '=' || SUBSTR (v_ins_kenmerkwaarde20, 1, 3900))), + v_ins_deel_aanmaak_d, + v_ins_deel_aantal_n, + v_ins_deel_externnr + ); + + COMMIT; + v_count_import := v_count_import + 1; + END; + + END IF; + END IF; + EXCEPTION + WHEN OTHERS + THEN + oracle_err_num := SQLCODE; + oracle_err_mes := SUBSTR (SQLERRM, 1, 200); + v_errormsg := + v_errormsg + || ' ORACLE (error ' + || oracle_err_num + || '/' + || oracle_err_mes + || ')'; + fac.imp_writelog (p_import_key, + 'W', + v_aanduiding || v_errormsg, + ''); + COMMIT; + END; + END LOOP; + + -- We gaan nu de nummering van de objecten aanpassen. Ze hebben allemaal het hoogste bestaande nummer + 1 meegekregen. + v_alg_gebouw_code := 'Leeg'; + v_ins_srtdeel_code := 'Leeg'; + + FOR rec IN c + LOOP + BEGIN + IF rec.alg_gebouw_code <> v_alg_gebouw_code + OR rec.ins_srtdeel_code <> v_ins_srtdeel_code + THEN + v_ins_deel_volgnr := + FAC.safe_to_number ( + SUBSTR (rec.ins_deel_omschrijving, INSTR (rec.ins_deel_omschrijving, '-', 1, 2) + 1, 100)); + v_alg_gebouw_code := rec.alg_gebouw_code; + v_ins_srtdeel_code := rec.ins_srtdeel_code; + ELSE + v_ins_deel_volgnr := v_ins_deel_volgnr + 1; + + UPDATE fac_imp_ins + SET ins_deel_omschrijving = + rec.alg_gebouw_code + || '-' + || rec.ins_srtdeel_code + || '-' + || LPAD (v_ins_deel_volgnr, 2, '0') + WHERE ins_deel_externnr = rec.ins_deel_externnr + AND alg_gebouw_code = v_alg_gebouw_code; + END IF; + END; + END LOOP; + + IF (header_is_valid = 1) + THEN + fac.imp_writelog ( + p_import_key, + 'S', + 'Objecten/aantal ingelezen importregels: ' || TO_CHAR (v_count_tot), + '' + ); + fac.imp_writelog ( + p_import_key, + 'S', + 'Objecten/aantal ongeldige niet ingelezen importregels: ' + || TO_CHAR (v_count_tot - v_count_import), + '' + ); + END IF; + + COMMIT; +EXCEPTION + WHEN OTHERS + THEN + oracle_err_num := SQLCODE; + oracle_err_mes := SUBSTR (SQLERRM, 1, 200); + v_errormsg := + v_errormsg + || ' ORACLE (error ' + || oracle_err_num + || '/' + || oracle_err_mes + || ')'; + fac.imp_writelog (p_import_key, + 'E', + v_aanduiding || v_errormsg, + 'Inleesproces objecten afgebroken! regel:' || v_file_index); +END rwsn_import_ins_elementen; +/ + + +CREATE OR REPLACE PROCEDURE rwsn_update_ins_elementen ( + p_import_key IN NUMBER) +IS + +CURSOR C IS SELECT d.ins_deel_key, d.ins_deel_omschrijving + FROM ins_v_deel_gegevens dg, ins_deel d + WHERE d.ins_deel_vervaldatum IS NULL + AND d.ins_deel_key = dg.ins_deel_key + AND NOT EXISTS + (SELECT 1 + FROM fac_imp_ins i + WHERE d.ins_deel_externnr = i.ins_deel_externnr + AND dg.alg_gebouw_code = i.alg_gebouw_code) + AND dg.alg_gebouw_code IN (SELECT alg_gebouw_code FROM fac_imp_ins) + AND dg.ins_discipline_omschrijving = 'MJOB'; + + +CURSOR c_mut_opm IS SELECT dg.ins_deel_key, dg.ins_deel_opmerking ins_deel_opmerking_old, i.ins_deel_opmerking + FROM ins_v_deel_gegevens dg, fac_imp_ins i + WHERE dg.ins_deel_omschrijving = i.ins_deel_omschrijving + AND COALESCE(dg.ins_deel_opmerking, 'QueQeLeQue') <> COALESCE(i.ins_deel_opmerking, 'QueQeLeQue') + AND dg.ins_discipline_omschrijving = 'MJOB'; + +-- aantallen worden niet automatisch bijgewerkt in de update van objecten. +CURSOR c_mut_aantal IS +SELECT ins_deel_key, dg.ins_deel_aantal ins_deel_aantal_old, i.ins_deel_aantal + FROM fac_imp_ins i, ins_v_deel_gegevens dg + WHERE dg.ins_deel_omschrijving = i.ins_deel_omschrijving + AND i.ins_deel_aantal <> dg.ins_deel_aantal + AND dg.ins_discipline_omschrijving = 'MJOB'; + +CURSOR c_mut IS SELECT dg.ins_deel_key, + SUBSTR(ins_srtkenmerk_omschrijving || ': ' || COALESCE(TRIM(ins_kenmerkdeel_waarde), '') || ' --> ' || COALESCE(TRIM(ikenmerkwaarde), ''),1,2000) log + FROM (SELECT d.ins_deel_key, + k.ins_kenmerk_key, + ins_srtkenmerk_omschrijving, + REPLACE ( + CASE + WHEN UPPER(ins_kenmerkwaarde1) like UPPER(ins_srtkenmerk_omschrijving) || '|%' THEN ins_kenmerkwaarde1 + WHEN UPPER(ins_kenmerkwaarde2) like UPPER(ins_srtkenmerk_omschrijving) || '|%' THEN ins_kenmerkwaarde2 + WHEN UPPER(ins_kenmerkwaarde3) like UPPER(ins_srtkenmerk_omschrijving) || '|%' THEN ins_kenmerkwaarde3 + WHEN UPPER(ins_kenmerkwaarde4) like UPPER(ins_srtkenmerk_omschrijving) || '|%' THEN ins_kenmerkwaarde4 + WHEN UPPER(ins_kenmerkwaarde5) like UPPER(ins_srtkenmerk_omschrijving) || '|%' THEN ins_kenmerkwaarde5 + WHEN UPPER(ins_kenmerkwaarde6) like UPPER(ins_srtkenmerk_omschrijving) || '|%' THEN ins_kenmerkwaarde6 + WHEN UPPER(ins_kenmerkwaarde7) like UPPER(ins_srtkenmerk_omschrijving) || '|%' THEN ins_kenmerkwaarde7 + WHEN UPPER(ins_kenmerkwaarde8) like UPPER(ins_srtkenmerk_omschrijving) || '|%' THEN ins_kenmerkwaarde8 + WHEN UPPER(ins_kenmerkwaarde9) like UPPER(ins_srtkenmerk_omschrijving) || '|%' THEN ins_kenmerkwaarde9 + WHEN UPPER(ins_kenmerkwaarde10) like UPPER(ins_srtkenmerk_omschrijving) || '|%' THEN ins_kenmerkwaarde10 + WHEN UPPER(ins_kenmerkwaarde11) like UPPER(ins_srtkenmerk_omschrijving) || '|%' THEN ins_kenmerkwaarde11 + WHEN UPPER(ins_kenmerkwaarde12) like UPPER(ins_srtkenmerk_omschrijving) || '|%' THEN ins_kenmerkwaarde12 + WHEN UPPER(ins_kenmerkwaarde13) like UPPER(ins_srtkenmerk_omschrijving) || '|%' THEN ins_kenmerkwaarde13 + WHEN UPPER(ins_kenmerkwaarde14) like UPPER(ins_srtkenmerk_omschrijving) || '|%' THEN ins_kenmerkwaarde14 + ELSE 'Onbekend' + END, + ins_srtkenmerk_omschrijving || '|0=' + ) ikenmerkwaarde + FROM fac_imp_ins i, + ins_deel d, + ins_kenmerk k, + ins_srtkenmerk sk + WHERE d.ins_discipline_key = k.ins_srtinstallatie_key + AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key + AND i.ins_deel_omschrijving = d.ins_deel_omschrijving + AND k.ins_kenmerk_niveau = 'D') dg + JOIN ins_kenmerkdeel kd + ON kd.ins_deel_key = dg.ins_deel_key + AND kd.ins_kenmerk_key = dg.ins_kenmerk_key + WHERE ikenmerkwaarde <> 'Onbekend' + AND COALESCE(ikenmerkwaarde, 'QueQeLeQue') <> COALESCE(ins_kenmerkdeel_waarde, 'QueQeLeQue'); + + v_errormsg VARCHAR2 (1000); + v_errorhint VARCHAR2 (1000); + oracle_err_num NUMBER; + oracle_err_mes VARCHAR2 (200); + v_count_tot NUMBER (10); + v_count_import NUMBER (10); + v_ongeldig NUMBER (1); + v_aanduiding VARCHAR (400); + v_fac_srtnotificatie_key FAC_SRTNOTIFICATIE.fac_srtnotificatie_key%TYPE; + +BEGIN + fac_update_ins (p_import_key); + + SELECT fac_srtnotificatie_key + INTO v_fac_srtnotificatie_key + FROM fac_srtnotificatie + WHERE fac_srtnotificatie_code = 'INSTRK'; + + -- Pas de beschrijving van de elementen aan. + FOR reco IN c_mut_opm + LOOP + UPDATE ins_deel SET ins_deel_opmerking = reco.ins_deel_opmerking WHERE ins_deel_key = reco.ins_deel_key; + INSERT INTO fac_tracking (fac_srtnotificatie_key, fac_tracking_oms, fac_tracking_refkey) + VALUES (v_fac_srtnotificatie_key, 'Object gewijzigd' || CHR(10) || 'Beschrijving: ' || reco.ins_deel_opmerking_old || ' --> ' || reco.ins_deel_opmerking, reco.ins_deel_key); + END LOOP; + + -- Pas de aantallen van de elementen aan. + FOR reca IN c_mut_aantal + LOOP + UPDATE ins_deel SET ins_deel_aantal = reca.ins_deel_aantal WHERE ins_deel_key = reca.ins_deel_key; + INSERT INTO fac_tracking (fac_srtnotificatie_key, fac_tracking_oms, fac_tracking_refkey) + VALUES (v_fac_srtnotificatie_key, 'Object gewijzigd' || CHR(10) || 'Hoeveelheid: ' || reca.ins_deel_aantal_old || ' --> ' || reca.ins_deel_aantal, reca.ins_deel_key); + END LOOP; + + + -- Als er kenmerken wijzigen dan gaan we dat tracken. + FOR rec IN c_mut + LOOP + BEGIN + INSERT INTO fac_tracking (fac_srtnotificatie_key, fac_tracking_oms, fac_tracking_refkey) + VALUES (v_fac_srtnotificatie_key, 'Object gewijzigd' || CHR(10) || rec.log, rec.ins_deel_key); + END; + END LOOP; + + -- controleer op verwijderde records + FOR rec IN c + LOOP + BEGIN + + UPDATE ins_deel + SET ins_deel_vervaldatum = SYSDATE + WHERE ins_deel_key = rec.ins_deel_key; + + fac.imp_writelog (p_import_key, + 'I', + v_aanduiding || 'Element is verwijderd: ' || rec.ins_deel_omschrijving, + ''); + COMMIT; + + EXCEPTION + WHEN OTHERS + THEN + oracle_err_num := SQLCODE; + oracle_err_mes := SUBSTR (SQLERRM, 1, 200); + v_errormsg := + v_errormsg + || ' ORACLE (error ' + || oracle_err_num + || '/' + || oracle_err_mes + || ')'; + fac.imp_writelog (p_import_key, + 'W', + v_aanduiding || v_errormsg, + ''); + COMMIT; + END; + END LOOP; + + -- Pas de logging aan zodat deze te begrijpen is. + UPDATE imp_log SET imp_log_hint = 'NL-SfB code komt niet voor in de RWS elementenlijst.' WHERE imp_log_omschrijving LIKE '%Bepaal objectsoort ORACLE (error 100/ORA'||'-01403: Geen gegevens gevonden.)%' AND fac_import_key = p_import_key; + UPDATE imp_log SET imp_log_hint = 'Gebouwcode bestaat niet in Facilitor' WHERE imp_log_omschrijving LIKE '%Gebouwcode kan niet gevonden worden ORACLE (error 100/ORA'||'-01403: Geen gegevens gevonden.)%' AND fac_import_key = p_import_key; + +END rwsn_update_ins_elementen; +/ + +-- +-- MJOB gebreken +-- +CREATE OR REPLACE PROCEDURE rwsn_import_ins_gebreken (p_import_key IN NUMBER) +IS + c_delim VARCHAR2 (2) := fac.import_delimiter(p_import_key); + v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line + v_errormsg VARCHAR2 (1000); + v_errorhint VARCHAR2 (1000); + v_file_index NUMBER; + v_count NUMBER; + oracle_err_num NUMBER; + oracle_err_mes VARCHAR2 (200); + header_is_valid NUMBER; + v_count_tot NUMBER (10); + v_count_import NUMBER (10); + v_ongeldig NUMBER (1); + v_aanduiding VARCHAR2 (400); + v_gebouw_code VARCHAR2 (255); + v_deel_externnr VARCHAR2 (255); + v_code_gebrek VARCHAR2 (255); + v_conditie_gebrek VARCHAR2 (255); + v_ernst_gebrek VARCHAR2 (255); + v_gebrekcode_ernst VARCHAR2 (1); + v_intensiteit_gebrek VARCHAR2 (255); + v_omvang_gebrek VARCHAR2 (255); + v_aspect1 VARCHAR2 (255); + v_aspect2 VARCHAR2 (255); + v_aspect3 VARCHAR2 (255); + v_aspect4 VARCHAR2 (255); + v_aspect5 VARCHAR2 (255); + v_aspect6 VARCHAR2 (255); + v_aspect7 VARCHAR2 (255); + v_kosten_gebrek VARCHAR2 (255); + v_kosten_gebrek_n NUMBER(8,2); + v_opmerking VARCHAR2 (4000); + v_perslid_email VARCHAR2 (100); + v_gebouw_key NUMBER; + v_deel_omschrijving INS_DEEL.INS_DEEL_OMSCHRIJVING%TYPE; + v_stdmelding_key NUMBER; + v_discipline_key NUMBER; + v_srtdiscipline_key NUMBER; + v_stdmelding_omschrijving MLD_STDMELDING.MLD_STDMELDING_OMSCHRIJVING%TYPE; + + -- Overige velden: + CURSOR c1 + IS + SELECT * + FROM fac_imp_file + WHERE fac_import_key = p_import_key + ORDER BY fac_imp_file_index; + + FUNCTION get_aspect_value (p_aspect IN VARCHAR2) + RETURN VARCHAR2 + IS + v_result VARCHAR2 (100); + BEGIN + v_result := p_aspect; + + IF p_aspect IS NULL OR p_aspect = 0 + THEN + v_result := 'NVT'; + END IF; + + IF p_aspect = '1' + THEN + v_result := 'Gering'; + END IF; + + IF p_aspect = '2' + THEN + v_result := 'Matig'; + END IF; + + IF p_aspect = '3' + THEN + v_result := 'Sterk'; + END IF; + + RETURN v_result; + END; + +BEGIN + -- Eerst opruiming + DELETE FROM cnd_imp_nen2767_results; + + COMMIT; + + v_count_tot := 0; + v_count_import := 0; + header_is_valid := 0; + + -- Bepalen key van het vakgroeptype + SELECT ins_srtdiscipline_key + INTO v_srtdiscipline_key + FROM ins_srtdiscipline + WHERE ins_srtdiscipline_omschrijving = 'NEN2767 - Conditiemeting'; + + -- Bepalen email invoerder + v_errormsg := 'Bepalen email invoerder'; + SELECT p.prs_perslid_email + INTO v_perslid_email + FROM prs_perslid p, fac_import i + WHERE p.prs_perslid_key = i.prs_perslid_key + AND i.fac_import_key = p_import_key; + + FOR rec1 IN c1 + LOOP + BEGIN + v_newline := rec1.fac_imp_file_line; + v_file_index := rec1.fac_imp_file_index; + v_errormsg := 'Fout bij opvragen importregel'; + v_aanduiding := ''; + v_ongeldig := 0; + -- Lees alle veldwaarden + fac.imp_getfield (v_newline, c_delim, v_gebouw_code); -- Objectcode + fac.imp_getfield (v_newline, c_delim, v_deel_externnr); -- Element-ID + fac.imp_getfield (v_newline, c_delim, v_code_gebrek); -- NEN code vh gebrek + fac.imp_getfield (v_newline, c_delim, v_ernst_gebrek); + fac.imp_getfield (v_newline, c_delim, v_intensiteit_gebrek); + fac.imp_getfield (v_newline, c_delim, v_omvang_gebrek); + fac.imp_getfield (v_newline, c_delim, v_aspect1); -- A. Veiligheid + fac.imp_getfield (v_newline, c_delim, v_aspect2); -- B. Binnenmilieu, Gezondheid + fac.imp_getfield (v_newline, c_delim, v_aspect3); -- C. Gebruikswaarde en functioneren + fac.imp_getfield (v_newline, c_delim, v_aspect4); -- D. Monumentale waarde + fac.imp_getfield (v_newline, c_delim, v_aspect5); -- E. Belevingswaarde en aanzien + fac.imp_getfield (v_newline, c_delim, v_aspect6); -- F. Storingsonderhoud + fac.imp_getfield (v_newline, c_delim, v_aspect7); -- G. Kosten vervolgschade + fac.imp_getfield (v_newline, c_delim, v_kosten_gebrek); + fac.imp_getfield (v_newline, c_delim, v_opmerking); + + v_gebouw_code := TRIM(v_gebouw_code); + v_deel_externnr := TRIM(v_deel_externnr); + v_code_gebrek := TRIM(v_code_gebrek); + v_ernst_gebrek := TRIM(v_ernst_gebrek); + v_intensiteit_gebrek := TRIM(v_intensiteit_gebrek); + v_omvang_gebrek := TRIM(v_omvang_gebrek); + v_aspect1 := TRIM(v_aspect1); + v_aspect2 := TRIM(v_aspect2); + v_aspect3 := TRIM(v_aspect3); + v_aspect4 := TRIM(v_aspect4); + v_aspect5 := TRIM(v_aspect5); + v_aspect6 := TRIM(v_aspect6); + v_aspect7 := TRIM(v_aspect7); + v_kosten_gebrek := TRIM(v_kosten_gebrek); + v_opmerking := TRIM(v_opmerking); + + v_aanduiding := + '[' + || v_gebouw_code + || '|' + || v_deel_externnr + || '|' + || v_code_gebrek + || '] '; + + -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen + -- de juiste kolomkop. Ik controleer daarbij alle NIET-kenmerk kolommen! + -- Ik negeer alles totdat ik een geldige header ben gepasseerd. + IF (header_is_valid = 0) + THEN + IF UPPER(v_gebouw_code) = 'OBJECTCODE' + AND UPPER(v_deel_externnr) = 'ELEMENT-ID' + AND UPPER(v_code_gebrek) = 'CODE GEBREK' + AND UPPER(v_ernst_gebrek) = 'ERNST GEBREK' + AND UPPER(v_intensiteit_gebrek) = 'INTENSITEIT GEBREK' + AND UPPER(v_omvang_gebrek) = 'OMVANG GEBREK' + AND UPPER(v_aspect1) = 'ASPECT 1' + AND UPPER(v_aspect2) = 'ASPECT 2' + AND UPPER(v_aspect3) = 'ASPECT 3' + AND UPPER(v_aspect4) = 'ASPECT 4' + AND UPPER(v_aspect5) = 'ASPECT 5' + AND UPPER(v_aspect6) = 'ASPECT 6' + AND UPPER(v_aspect7) = 'ASPECT 7' + AND UPPER(v_kosten_gebrek) = 'KOSTEN VAN HET GEBREK' + AND UPPER(v_opmerking) = 'OPMERKING' + THEN + header_is_valid := 1; + ELSE + IF rec1.fac_imp_file_index = 1 + THEN + + fac.imp_writelog (p_import_key, + 'E', + 'Ongeldige header aangetroffen:', + 'OBJECTCODE: ' || UPPER (v_gebouw_code) || CHR(10) || + 'ELEMENT-ID: ' || UPPER (v_deel_externnr) || CHR(10) || + 'CODE GEBREK: ' || UPPER (v_code_gebrek) || CHR(10) || + 'ERNST GEBREK: ' || UPPER (v_ernst_gebrek) || CHR(10) || + 'INTENSITEIT GEBREK: ' || UPPER (v_intensiteit_gebrek) || CHR(10) || + 'OMVANG GEBREK: ' || UPPER (v_omvang_gebrek) || CHR(10) || + 'ASPECT 1: ' || UPPER (v_aspect1) || CHR(10) || + 'ASPECT 2: ' || UPPER (v_aspect2) || CHR(10) || + 'ASPECT 3: ' || UPPER (v_aspect3) || CHR(10) || + 'ASPECT 4: ' || UPPER (v_aspect4) || CHR(10) || + 'ASPECT 5: ' || UPPER (v_aspect5) || CHR(10) || + 'ASPECT 6: ' || UPPER (v_aspect6) || CHR(10) || + 'ASPECT 7: ' || UPPER (v_aspect7) || CHR(10) || + 'KOSTEN VAN HET GEBREK: ' || UPPER (v_kosten_gebrek) || CHR(10) || + 'OPMERKING: ' || UPPER (v_opmerking)); + END IF; + END IF; + ELSE + v_count_tot := v_count_tot + 1; + -- Controleer alle veldwaarden + + v_errormsg := 'Gebouwcode kan niet gevonden worden'; + v_gebouw_code := TRIM (v_gebouw_code); + + SELECT alg_gebouw_key + INTO v_gebouw_key + FROM alg_gebouw g + WHERE alg_gebouw_verwijder IS NULL + AND UPPER(alg_gebouw_code) = v_gebouw_code; + + v_errormsg := 'Bepaal object id - Kijk of het externnr bestaat'; + SELECT d.ins_deel_omschrijving + INTO v_deel_omschrijving + FROM ins_v_deel_gegevens dg, ins_deel d + WHERE dg.ins_deel_key = d.ins_deel_key + AND dg.alg_gebouw_upper = v_gebouw_code + AND d.ins_deel_externnr = v_deel_externnr; + + v_errormsg := 'Objectopmerking ongeldig'; + v_opmerking := TRIM (v_opmerking); + + IF LENGTH (v_opmerking) > 2000 + THEN + v_opmerking := SUBSTR (v_opmerking, 1, 2000); + fac.imp_writelog ( + p_import_key, + 'W', + v_aanduiding || v_errormsg, + 'Opmerking wordt afgebroken tot [' + || v_opmerking + || ']' + ); + END IF; + + -- + v_errormsg := 'Kosten ongeldig; maximale grootte 999999.99 ' || v_kosten_gebrek; + v_kosten_gebrek := TRIM (v_kosten_gebrek); + v_kosten_gebrek := REPLACE (v_kosten_gebrek, ',', '.'); + v_kosten_gebrek_n := NULL; + + IF v_kosten_gebrek IS NOT NULL + THEN + IF (fac.safe_to_number (v_kosten_gebrek) IS NULL) + THEN + v_ongeldig := 1; + fac.imp_writelog (p_import_key, + 'W', + v_aanduiding || v_errormsg, + 'Regel wordt overgeslagen!'); + ELSE + v_kosten_gebrek_n := fac.safe_to_number (v_kosten_gebrek); + END IF; + END IF; + + -- + v_errormsg := 'Bepaling gebrekscode'; + IF v_code_gebrek IS NULL + THEN + v_ongeldig := 1; + fac.imp_writelog (p_import_key,'I',v_aanduiding,'Gebrekcode niet aanwezig.'); + ELSE + v_code_gebrek := UPPER(REPLACE(v_code_gebrek, ' ')); + BEGIN + SELECT mld_stdmelding_key, mld_stdmelding_omschrijving + INTO v_stdmelding_key, v_stdmelding_omschrijving + FROM mld_stdmelding + WHERE mld_stdmelding_code = v_code_gebrek; + EXCEPTION WHEN NO_DATA_FOUND + THEN + BEGIN + v_errorhint := 'Bepaling leverancier specifieke gebrekscode'; + -- Is dit een eigen toegevoegd gebrek. Dan begint het met een _ + SELECT mld_stdmelding_key, mld_stdmelding_omschrijving + INTO v_stdmelding_key, v_stdmelding_omschrijving + FROM mld_stdmelding + WHERE mld_stdmelding_code = '_' || v_code_gebrek; + + fac.imp_writelog (p_import_key,'W',v_aanduiding,'Gebrekcode voldoet niet aan NEN2767 maar leverancierspecifieke code wordt gebruikt.'); + EXCEPTION WHEN NO_DATA_FOUND + THEN + -- Nu gaan we een leverancier specifieke code toevoegen + v_errorhint := 'Toevoegen leverancierspecifieke gebrekscode'; + -- Nu gaan we een leverancier specifieke code toevoegen + + BEGIN + SELECT ins_discipline_key + INTO v_discipline_key + FROM ins_tab_discipline d + WHERE REGEXP_SUBSTR (v_code_gebrek || 'Leverancier specifiek gebrek', '[[:alpha:]]*[[:digit:]]*') = + SUBSTR (ins_discipline_omschrijving, 1, INSTR (ins_discipline_omschrijving, ' ') - 1) + AND d.ins_srtdiscipline_key = v_srtdiscipline_key + AND ins_discipline_code <> 'GEEN'; + EXCEPTION WHEN NO_DATA_FOUND + THEN + INSERT INTO ins_tab_discipline (ins_discipline_module, + ins_discipline_code, + ins_discipline_omschrijving, + ins_srtdiscipline_key) + VALUES ('MLD', + REGEXP_SUBSTR (v_code_gebrek, '[[:alpha:]]*[[:digit:]]*'), + REGEXP_SUBSTR (v_code_gebrek, '[[:alpha:]]*[[:digit:]]*') || ' - Leverancier specifiek gebrek', + v_srtdiscipline_key) + RETURNING ins_discipline_key INTO v_discipline_key; + fac.imp_writelog (p_import_key,'W',v_aanduiding,'Vakgroep voldoet niet aan NEN2767 maar leverancierspecifieke vakgroep wordt aangemaakt.'); + END; + + v_errorhint := 'Toevoegen leverancierspecifieke gebrekscode'; + INSERT INTO mld_stdmelding (mld_stdmelding_code, + mld_ins_discipline_key, + mld_stdmelding_omschrijving, + mld_stdmelding_hint, + mld_stdmelding_subject, + mld_stdmelding_t_accepttijd, + mld_stdmelding_t_uitvoertijd, + mld_stdmelding_t_uitvtijd_pr1, + mld_stdmelding_t_uitvtijd_pr2, + mld_stdmelding_t_uitvtijd_pr4, + alg_onrgoed_niveau, + alg_onrgoed_obj_niveau, + ins_srtinst_verplichtstatus, + mld_stdmelding_slabewaken) + VALUES ( '_' || v_code_gebrek, + v_discipline_key, + v_code_gebrek || ' Leverancier specifiek gebrek', + v_code_gebrek || ' Leverancier specifiek gebrek', + 0, + MLD_T_UITVOERTIJD (NULL, 'U'), + MLD_T_UITVOERTIJD (2, 'D'), + MLD_T_UITVOERTIJD (NULL, 'D'), + MLD_T_UITVOERTIJD (NULL, 'D'), + MLD_T_UITVOERTIJD (NULL, 'D'), + 'G', + 'G', + 2, + 0) + RETURNING mld_stdmelding_key, mld_stdmelding_omschrijving INTO v_stdmelding_key, v_stdmelding_omschrijving; + + v_errorhint := 'Toevoegen kenmerk omvang'; + INSERT INTO mld_kenmerk (mld_srtkenmerk_key, + mld_stdmelding_key, + mld_kenmerk_default, + mld_kenmerk_niveau, + mld_kenmerk_verplicht, + mld_kenmerk_toonbaar, + mld_kenmerk_volgnummer) + SELECT (SELECT mld_srtkenmerk_key + FROM mld_srtkenmerk + WHERE mld_srtkenmerk_code = 'OMVANG'), + v_stdmelding_key, + NULL, + 'S', + 1, + NULL, + 20 + FROM DUAL; + + + v_gebrekcode_ernst := SUBSTR(v_code_gebrek, LENGTH(REGEXP_SUBSTR ( v_code_gebrek, '[[:alpha:]]*[[:digit:]]*'))+1,1); + + v_errorhint := 'Toevoegen kenmerk ernst'; + INSERT INTO mld_kenmerk (mld_srtkenmerk_key, + mld_stdmelding_key, + mld_kenmerk_default, + mld_kenmerk_niveau, + mld_kenmerk_verplicht, + mld_kenmerk_toonbaar, + mld_kenmerk_volgnummer) + SELECT (SELECT mld_srtkenmerk_key + FROM mld_srtkenmerk + WHERE mld_srtkenmerk_code = 'ERNST'), + v_stdmelding_key, + (SELECT fac_usrdata_key FROM fac_usrdata WHERE fac_usrdata_omschr LIKE v_gebrekcode_ernst || ' - % gebrek'), + 'S', + 1, + NULL, + 10 + FROM DUAL; + + v_errorhint := 'Toevoegen kenmerk intensiteit'; + INSERT INTO mld_kenmerk (mld_srtkenmerk_key, + mld_stdmelding_key, + mld_kenmerk_default, + mld_kenmerk_niveau, + mld_kenmerk_verplicht, + mld_kenmerk_toonbaar, + mld_kenmerk_volgnummer) + SELECT (SELECT mld_srtkenmerk_key + FROM mld_srtkenmerk + WHERE mld_srtkenmerk_code = 'INTENSITEIT'), + v_stdmelding_key, + NULL, + 'S', + 1, + NULL, + 30 + FROM DUAL; + + fac.imp_writelog (p_import_key,'W',v_aanduiding,'Gebrekcode voldoet niet aan NEN2767 maar leverancierspecifieke code wordt aangemaakt.'); + END; + v_code_gebrek := '_' || v_code_gebrek; + END; + END IF; + + IF v_ongeldig = 0 + THEN + + -- Als de codering ingevuld wordt gaan we zelf op zoek naar de omschrijving. + IF v_ernst_gebrek IN ('E', 'G', 'S') + THEN + CASE v_ernst_gebrek + WHEN 'G' + THEN + v_ernst_gebrek := 'G - Gering gebrek'; + WHEN 'S' + THEN + v_ernst_gebrek := 'S - Serieus gebrek'; + WHEN 'E' + THEN + v_ernst_gebrek := 'E - Ernstig gebrek'; + END CASE; + END IF; + + -- Bepalen of de ingelezen ernst wel overeenkomt met de ernst die bij het gebrek hoort. + SELECT COUNT (*) + INTO v_count + FROM mld_srtkenmerk sk, + mld_kenmerk k, + mld_stdmelding std, + fac_usrdata ud + WHERE sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key + AND k.mld_kenmerk_niveau = 'S' + AND k.mld_stdmelding_key = std.mld_stdmelding_key + AND sk.mld_srtkenmerk_code = 'ERNST' + AND mld_stdmelding_code = v_code_gebrek + AND fac_usrdata_omschr = v_ernst_gebrek + AND k.mld_kenmerk_default LIKE '%' || ud.fac_usrdata_key || '%'; + + IF v_count <> 1 + THEN + fac.imp_writelog ( + p_import_key, + 'W', + v_aanduiding, + 'Ernst komt niet overeen met default bij gebrekcode.'); + END IF; + + IF (v_ernst_gebrek IS NULL) OR (LENGTH (v_ernst_gebrek) > 50) + THEN + fac.imp_writelog ( + p_import_key, + 'W', + v_aanduiding, + v_errorhint || ' - Regel wordt overgeslagen'); + v_ongeldig := 1; + END IF; + + -- + v_errorhint := + 'Ongeldig kolom OMVANG (moet 1,2,3,4 of 5 zijn) [' || v_omvang_gebrek || ']'; + + -- Als de codering ingevuld wordt gaan we zelf op zoek naar de omschrijving. + IF fac.safe_to_number(v_omvang_gebrek) IN (1, + 2, + 3, + 4, + 5) + THEN + CASE v_omvang_gebrek + WHEN 1 + THEN + v_omvang_gebrek := '< 2% Incidenteel'; + WHEN 2 + THEN + v_omvang_gebrek := '2% tot 10% Plaatselijk'; + WHEN 3 + THEN + v_omvang_gebrek := '10% tot 30% Regelmatig'; + WHEN 4 + THEN + v_omvang_gebrek := '30% tot 70% Aanzienlijk'; + WHEN 5 + THEN + v_omvang_gebrek := '> 70% Algemeen'; + END CASE; + ELSE + fac.imp_writelog ( + p_import_key, + 'W', + v_aanduiding, + v_errorhint || ' - Regel wordt overgeslagen'); + v_ongeldig := 1; + END IF; + + -- + v_errorhint := + 'Ongeldig kolom INTENSITEIT (moet 1,2 of 3 zijn): [' || v_intensiteit_gebrek || ']' + || v_intensiteit_gebrek; + + -- Als de codering ingevuld wordt gaan we zelf op zoek naar de omschrijving. + IF fac.safe_to_number(v_intensiteit_gebrek) IN (1, 2, 3) + THEN + CASE v_intensiteit_gebrek + WHEN 1 + THEN + v_intensiteit_gebrek := '1 - Beginstadium'; + WHEN 2 + THEN + v_intensiteit_gebrek := '2 - Gevorderd stadium'; + WHEN 3 + THEN + v_intensiteit_gebrek := '3 - Eindstadium'; + END CASE; + ELSE + fac.imp_writelog ( + p_import_key, + 'W', + v_aanduiding, + v_errorhint || ' - Regel wordt overgeslagen'); + v_ongeldig := 1; + END IF; + + v_aspect1 := get_aspect_value (v_aspect1); + v_aspect2 := get_aspect_value (v_aspect2); + v_aspect3 := get_aspect_value (v_aspect3); + v_aspect4 := get_aspect_value (v_aspect4); + v_aspect5 := get_aspect_value (v_aspect5); + v_aspect6 := get_aspect_value (v_aspect6); + v_aspect7 := get_aspect_value (v_aspect7); + + IF (v_ongeldig = 0) + THEN + BEGIN + v_errorhint := + 'Fout bij toevoegen regel aan importtabel cnd_imp_nen2767_results'; + + INSERT INTO cnd_imp_nen2767_results ( + fac_import_key, + alg_gebouw_code, + ins_deel_omschrijving, + mld_melding_datum, + mld_melding_omschrijving, + prs_perslid_email, + gebrekcode, + ernst, + omvang, + intensiteit, + aspect1, + aspect2, + aspect3, + aspect4, + aspect5, + aspect6, + aspect7, + kosten) + VALUES (p_import_key, + v_gebouw_code, + v_deel_omschrijving, + TO_CHAR(SYSDATE, 'dd-mm-yyyy'), + v_stdmelding_omschrijving, + v_perslid_email, + v_code_gebrek, + v_ernst_gebrek, + v_omvang_gebrek, + v_intensiteit_gebrek, + v_aspect1, + v_aspect2, + v_aspect3, + v_aspect4, + v_aspect5, + v_aspect6, + v_aspect7, + v_kosten_gebrek); + + v_count_import := v_count_import + 1; + COMMIT; + EXCEPTION + WHEN OTHERS + THEN + oracle_err_num := SQLCODE; + oracle_err_mes := SUBSTR (SQLERRM, 1, 100); + v_errormsg := + v_errorhint + || ' ORACLE (error ' + || oracle_err_num + || '/' + || oracle_err_mes + || ')'; + fac.imp_writelog ( + p_import_key, + 'E', + v_aanduiding || v_errormsg, + 'Ingelezen regel kan niet worden weggeschreven!'); + COMMIT; + END; + END IF; -- ongeldig + COMMIT; + v_count_import := v_count_import + 1; + END IF; -- ongeldig +END IF; + EXCEPTION + WHEN OTHERS + THEN + oracle_err_num := SQLCODE; + oracle_err_mes := SUBSTR (SQLERRM, 1, 200); + v_errormsg := + v_errormsg + || ' ORACLE (error ' + || oracle_err_num + || '/' + || oracle_err_mes + || ')'; + fac.imp_writelog (p_import_key, + 'W', + v_aanduiding || v_errormsg, + v_errorhint); + COMMIT; + END; + + END LOOP; + + IF (header_is_valid = 1) + THEN + fac.imp_writelog ( + p_import_key, + 'S', + 'Objecten/aantal ingelezen importregels: ' || TO_CHAR (v_count_tot), + '' + ); + fac.imp_writelog ( + p_import_key, + 'S', + 'Objecten/aantal ongeldige niet ingelezen importregels: ' + || TO_CHAR (v_count_tot - v_count_import), + '' + ); + END IF; + + -- Pas de logging aan zodat deze te begrijpen is. + UPDATE imp_log SET imp_log_hint = 'Element bestaat niet in Facilitor' WHERE imp_log_omschrijving LIKE '%Kijk of het externnr bestaat%' AND fac_import_key = p_import_key; + UPDATE imp_log SET imp_log_hint = 'Gebouwcode bestaat niet in Facilitor' WHERE imp_log_omschrijving LIKE '%Gebouwcode kan niet gevonden worden ORACLE (error 100/ORA'||'-01403: Geen gegevens gevonden.)%' AND fac_import_key = p_import_key; + + + COMMIT; +EXCEPTION + WHEN OTHERS + THEN + oracle_err_num := SQLCODE; + oracle_err_mes := SUBSTR (SQLERRM, 1, 200); + v_errormsg := + v_errormsg + || ' ORACLE (error ' + || oracle_err_num + || '/' + || oracle_err_mes + || ')'; + fac.imp_writelog (p_import_key, + 'E', + v_aanduiding || v_errormsg, + 'Inleesproces objecten afgebroken! regel:' || v_file_index); +END rwsn_import_ins_gebreken; +/ + +CREATE OR REPLACE PROCEDURE rwsn_update_ins_gebreken ( + p_import_key IN NUMBER) +IS + + CURSOR c_geen + IS + SELECT m.mld_melding_key + FROM ins_v_deel_gegevens dg, mld_melding m, mld_melding_object mo + WHERE mo.ins_deel_key = dg.ins_deel_key + AND mo.mld_melding_key = m.mld_melding_key + AND m.mld_melding_status IN (1, + 3, + 4, + 7) -- Nieuw, Te accepteren, In behandeling, Uitgegeven) + AND ins_discipline_omschrijving = 'MJOB' + AND alg_gebouw_upper IN (SELECT alg_gebouw_code FROM cnd_imp_nen2767_results) + AND NOT EXISTS + (SELECT 1 + FROM cnd_imp_nen2767_results i + WHERE i.ins_deel_omschrijving = dg.ins_deel_omschrijving); + + CURSOR c_nieuw + IS + SELECT * + FROM cnd_imp_nen2767_results + WHERE fac_import_key = p_import_key AND flex10 IS NULL ; + + CURSOR c_bestaand + IS + SELECT * + FROM cnd_imp_nen2767_results + WHERE fac_import_key = p_import_key AND flex10 IS NOT NULL; + + CURSOR c_checknieuw + IS + SELECT gebrekcode, ins_deel_omschrijving, COUNT (*) aantal + FROM cnd_imp_nen2767_results + WHERE flex10 IS NULL + GROUP BY gebrekcode, ins_deel_omschrijving; + + CURSOR c_melding (c_gebrekcode VARCHAR2, c_deel_omschrijving VARCHAR2) + IS + SELECT m.mld_melding_key + FROM mld_melding m, + mld_stdmelding std, + mld_melding_object mo, + ins_v_deel_gegevens dg + WHERE m.mld_stdmelding_key = std.mld_stdmelding_key + AND m.mld_melding_key = mo.mld_melding_key + AND mo.ins_deel_key = dg.ins_deel_key + AND dg.ins_deel_omschrijving = c_deel_omschrijving + AND m.mld_melding_status IN (1, + 3, + 4, + 7) -- Nieuw, Te accepteren, In behandeling, Uitgegeven) + AND std.mld_stdmelding_code = c_gebrekcode; + + + + + v_aanduiding VARCHAR2 (1000); + v_errorhint VARCHAR2 (1000); + v_errormsg VARCHAR2 (1000); + oracle_err_num NUMBER; + oracle_err_mes VARCHAR2 (200); + v_count_tot NUMBER (10); + v_count_tot_n NUMBER (10); + v_count_import NUMBER (10); + + v_mld_melding_key NUMBER (10); + + v_alg_gebouw_key NUMBER (10); + v_ins_deel_key NUMBER (10); + v_alg_ruimte_key NUMBER (10); + v_prs_perslid_key NUMBER (10); + v_mld_melding_datum VARCHAR2 (100); + v_prs_perslid_email VARCHAR2 (100); + v_prs_behandelaar_key NUMBER (10); + v_mld_stdmelding_key NUMBER (10); + + v_ernst_kenmerk_key NUMBER (10); + v_ernst_key NUMBER (10); + v_omvang_kenmerk_key NUMBER (10); + v_omvang_key NUMBER (10); + v_intensiteit_kenmerk_key NUMBER (10); + v_intensiteit_key NUMBER (10); + + v_foto_kenmerk_key NUMBER (10); + v_kosten_kenmerk_key NUMBER (10) := NULL; + v_kosten_srtkenmerk_key NUMBER (10); + + v_ernst_srtkenmerk_key NUMBER (10); + v_omvang_srtkenmerk_key NUMBER (10); + v_intensiteit_srtkenmerk_key NUMBER (10); + + v_mld_melding_omschrijving VARCHAR2 (4000); + v_omvang VARCHAR2 (1000); + v_intensiteit VARCHAR2 (1000); + v_aspect1 VARCHAR2 (1000); + v_aspect2 VARCHAR2 (1000); + v_aspect3 VARCHAR2 (1000); + v_aspect4 VARCHAR2 (1000); + v_aspect5 VARCHAR2 (1000); + v_aspect6 VARCHAR2 (1000); + v_aspect7 VARCHAR2 (1000); + v_inspecteur VARCHAR2 (1000); + v_behandelaar VARCHAR2 (1000); + v_foto VARCHAR2 (1000); + v_kosten VARCHAR2 (1000); + v_plandatum_date DATE; + v_dienst VARCHAR2 (1000); + v_taakgroep VARCHAR2 (1000); + v_datumgereedinspecteur VARCHAR2 (1000); + v_geadviseerdstartjaar VARCHAR2 (1000); + v_flex1_kenmerk_key NUMBER (10); + v_flex2_kenmerk_key NUMBER (10); + v_flex3_kenmerk_key NUMBER (10); + v_flex4_kenmerk_key NUMBER (10); + v_flex5_kenmerk_key NUMBER (10); + v_flex6_kenmerk_key NUMBER (10); + v_flex7_kenmerk_key NUMBER (10); + v_flex8_kenmerk_key NUMBER (10); + + v_flex1_waarde VARCHAR2 (1000); + v_flex1_waarde_key NUMBER (10); + v_flex2_waarde VARCHAR2 (1000); + v_flex2_waarde_key NUMBER (10); + v_flex3_waarde VARCHAR2 (1000); + v_flex4_waarde VARCHAR2 (1000); + + v_conditiescore NUMBER (10) ; + v_prioscore NUMBER (10) ; + v_herberekenen NUMBER (1) :=0; + + v_melding_GV_aantal NUMBER(10); + v_melding_GV VARCHAR2 (1000); + v_mld_melding_status NUMBER(10); + + + + PROCEDURE set_aspect (p_aspect IN VARCHAR2, + p_aspect_waarde IN VARCHAR2, + p_mld_melding_key IN NUMBER) + IS + v_key NUMBER (10); + v_kenmerk_key NUMBER (10); + v_srtkenmerk_key NUMBER (10); + BEGIN + SELECT MAX (mld_srtkenmerk_key) + INTO v_srtkenmerk_key + FROM mld_srtkenmerk + WHERE mld_srtkenmerk_code = p_aspect; + + IF v_srtkenmerk_key IS NOT NULL + THEN + v_errorhint := + p_aspect + || ' (eigen tabel) niet gevonden (bestaat niet), regel wordt overgeslagen'; + + SELECT ud.fac_usrdata_key, k.mld_kenmerk_key + INTO v_key, v_kenmerk_key + FROM mld_srtkenmerk sk, + fac_kenmerkdomein kd, + fac_usrtab ut, + fac_usrdata ud, + mld_kenmerk k + WHERE sk.mld_srtkenmerk_key = v_srtkenmerk_key + AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key + AND ut.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrdata_upper = UPPER (p_aspect_waarde) + AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key; + + mld.upsertmeldingkenmerk (v_kenmerk_key, + p_mld_melding_key, + v_key); + END IF; + END; + +BEGIN + + -- Elementen die geen gebreken meer hebben en wel een conditiescore > 1 gaan we voorzien van de geen gebrek melding + v_errorhint := + 'Geen gebrek meldingen toevoegen'; + FOR rec IN c_geen + LOOP + BEGIN + mld.setmeldingstatus(rec.mld_melding_key, 5, 4, 0); -- Afgemeld, Facilitor + cnd.process_mjb_score_effects (rec.mld_melding_key); + END; + END LOOP; + + -- we gaan kijken of het gebrek al voorkomt bij het element. Als dat zo is dan wordt flex10 gelijk aan het meldingnummer + -- het kan voorkomen dat er meerdere gebreken op een element aanwezig zijn met dezelfde gebrekcode. Dan kunnen we ze niet meer mappen, + -- we gaan dan de bestaande meldingen afmelden en de gebreken als nieuwe gebreken behandelen. + FOR rec IN c_checknieuw + LOOP + BEGIN + IF rec.aantal > 1 + THEN + -- afmelden van bestaande gebreken. Hierdoor worden de dubbele gebreken opnieuw ingelezen. + FOR recm IN c_melding (rec.gebrekcode, rec.ins_deel_omschrijving) + LOOP + mld.setmeldingstatus(recm.mld_melding_key, 5, 4, 0); -- Afgemeld, Facilitor + END LOOP; + ELSE + SELECT m.mld_melding_key + INTO v_mld_melding_key + FROM mld_melding m, + mld_stdmelding std, + mld_melding_object mo, + ins_v_deel_gegevens dg + WHERE m.mld_stdmelding_key = std.mld_stdmelding_key + AND m.mld_melding_key = mo.mld_melding_key + AND mo.ins_deel_key = dg.ins_deel_key + AND dg.ins_deel_omschrijving = rec.ins_deel_omschrijving + AND m.mld_melding_status IN (1, + 3, + 4, + 7) -- Nieuw, Te accepteren, In behandeling, Uitgegeven) + AND std.mld_stdmelding_code = rec.gebrekcode; + + UPDATE cnd_imp_nen2767_results i + SET flex10 = v_mld_melding_key + WHERE i.gebrekcode = rec.gebrekcode AND i.ins_deel_omschrijving = rec.ins_deel_omschrijving; + END IF; + EXCEPTION + WHEN NO_DATA_FOUND + THEN + NULL; -- Er bestaat geen gebrek. Dan is het een nieuw gebrek + END; + END LOOP; + + v_errorhint := + 'Bestaande meldingen markeren'; + + v_count_tot := 0; + v_count_tot_n := 0; + v_count_import := 0; + + v_errorhint := + 'Ernst kenmerk bij gebreken niet gevonden (bestaat niet), import wordt niet uitgevoerd'; + + SELECT mld_srtkenmerk_key + INTO v_ernst_srtkenmerk_key + FROM mld_srtkenmerk + WHERE mld_srtkenmerk_code = 'ERNST'; + + v_errorhint := + 'Omvang kenmerk bij gebreken niet gevonden (bestaat niet), import wordt niet uitgevoerd'; + + SELECT mld_srtkenmerk_key + INTO v_omvang_srtkenmerk_key + FROM mld_srtkenmerk + WHERE mld_srtkenmerk_code = 'OMVANG'; + + v_errorhint := + 'Intensiteit kenmerk bij gebreken niet gevonden (bestaat niet), import wordt niet uitgevoerd'; + + SELECT mld_srtkenmerk_key + INTO v_intensiteit_srtkenmerk_key + FROM mld_srtkenmerk + WHERE mld_srtkenmerk_code = 'INTENSITEIT'; + + v_errorhint := + 'Fout bij bepalen kenmerk foto-bestand'; + + SELECT max(k.mld_kenmerk_key) + INTO v_foto_kenmerk_key + FROM mld_kenmerk k, mld_srtkenmerk sk + WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND k.mld_kenmerk_niveau = 'T' + AND k.mld_stdmelding_key = fac.getsetting ('cnd_gebreken_srtdisc_key') + AND sk.mld_srtkenmerk_upper = 'FOTONAAM' ; + + v_errorhint := + 'Kosten kenmerk bij gebreken niet gevonden (bestaat niet), import wordt niet uitgevoerd'; + + SELECT MAX (mld_srtkenmerk_key) + INTO v_kosten_srtkenmerk_key + FROM mld_srtkenmerk + WHERE mld_srtkenmerk_code = 'KOSTEN'; + + IF v_kosten_srtkenmerk_key IS NOT NULL + THEN + SELECT mld_kenmerk_key + INTO v_kosten_kenmerk_key + FROM mld_kenmerk + WHERE mld_srtkenmerk_key = v_kosten_srtkenmerk_key; + END IF; + + FOR rec IN c_nieuw + LOOP + BEGIN + v_count_tot := v_count_tot + 1; + v_aanduiding := + '[' + || rec.alg_gebouw_code + || '-' + || rec.ins_deel_omschrijving + || '-' + || rec.gebrekcode + || '] '; + + v_errorhint := + 'Gebouwcode niet gevonden (bestaat niet), regel wordt overgeslagen'; + + v_alg_gebouw_key := -1; + + IF rec.alg_gebouw_code IS NOT NULL + THEN + SELECT alg_gebouw_key + INTO v_alg_gebouw_key + FROM alg_v_aanweziggebouw + WHERE alg_gebouw_upper = UPPER (rec.alg_gebouw_code); + END IF; + + v_errorhint := + 'Element (object) niet gevonden (bestaat niet bij gebouw), regel wordt overgeslagen'; + + -- Uitgangspunt hierbij is dat objectnaam uniek is per gebouw, op zich mag in Facilitor de objectnaam per objectsoort per locatie uniek zijn. + SELECT ins_deel_key, r.alg_ruimte_key + INTO v_ins_deel_key, v_alg_ruimte_key + FROM ins_v_aanwezigdeel, alg_ruimte r, alg_verdieping v + WHERE ins_deel_upper = UPPER (rec.ins_deel_omschrijving) + AND ins_alg_ruimte_key = r.alg_ruimte_key + AND r.alg_verdieping_key = v.alg_verdieping_key + AND ( v_alg_gebouw_key = -1 + OR v.alg_gebouw_key = v_alg_gebouw_key) + AND ins_alg_ruimte_type = 'R'; + + v_errorhint := + 'Mailadres van inspecteur (persoon) niet gevonden (bestaat niet), regel wordt overgeslagen'; + + SELECT prs_perslid_key + INTO v_prs_perslid_key + FROM prs_v_aanwezigperslid + WHERE UPPER (prs_perslid_email) = UPPER (rec.prs_perslid_email); + + v_errorhint := + 'Mailadres van behandelaar (persoon) niet gevonden (bestaat niet), regel wordt overgeslagen'; + + IF rec.flex9 IS NOT NULL + THEN + + SELECT prs_perslid_key + INTO v_prs_behandelaar_key + FROM prs_v_aanwezigperslid + WHERE UPPER (prs_perslid_email) = UPPER (rec.flex9); + + ELSE + v_prs_behandelaar_key := NULL ; + + END IF; + + v_errorhint := + 'Gebrek (melding) niet gevonden (bestaat niet), regel wordt overgeslagen'; + + SELECT sm.mld_stdmelding_key + INTO v_mld_stdmelding_key + FROM mld_stdmelding sm + WHERE UPPER(mld_stdmelding_code) = UPPER (rec.gebrekcode); + + IF UPPER(rec.gebrekcode) = 'GEEN' + THEN + v_errorhint := + 'Geen Gebrek melding. Ernst, Omvang en Intensiteit worden overgeslagen'; + ELSE + + v_errorhint := + 'Ernst (eigen tabel) niet gevonden (bestaat niet), regel wordt overgeslagen'; + + -- We vullen de ERNST altijd met de default-waarde bij kenmerk_key + SELECT ud.fac_usrdata_key, k.mld_kenmerk_key + INTO v_ernst_key, v_ernst_kenmerk_key + FROM mld_srtkenmerk sk, + fac_kenmerkdomein kd, + fac_usrtab ut, + fac_usrdata ud, + mld_kenmerk k + WHERE sk.mld_srtkenmerk_key = v_ernst_srtkenmerk_key + AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key + AND ut.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrdata_key = k.mld_kenmerk_default + AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND k.mld_stdmelding_key = v_mld_stdmelding_key + AND k.mld_kenmerk_niveau = 'S'; + + v_errorhint := + 'Omvang (eigen tabel) niet gevonden (bestaat niet), regel wordt overgeslagen'; + + SELECT ud.fac_usrdata_key, k.mld_kenmerk_key + INTO v_omvang_key, v_omvang_kenmerk_key + FROM mld_srtkenmerk sk, + fac_kenmerkdomein kd, + fac_usrtab ut, + fac_usrdata ud, + mld_kenmerk k + WHERE sk.mld_srtkenmerk_key = v_omvang_srtkenmerk_key + AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key + AND ut.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrdata_upper = UPPER (rec.omvang) + AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND k.mld_stdmelding_key = v_mld_stdmelding_key + AND k.mld_kenmerk_niveau = 'S'; + + v_errorhint := + 'Intensiteit (eigen tabel) niet gevonden (bestaat niet), regel wordt overgeslagen'; + + SELECT ud.fac_usrdata_key, k.mld_kenmerk_key + INTO v_intensiteit_key, v_intensiteit_kenmerk_key + FROM mld_srtkenmerk sk, + fac_kenmerkdomein kd, + fac_usrtab ut, + fac_usrdata ud, + mld_kenmerk k + WHERE sk.mld_srtkenmerk_key = v_intensiteit_srtkenmerk_key + AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key + AND ut.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrdata_upper = UPPER (rec.intensiteit) + AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND k.mld_stdmelding_key = v_mld_stdmelding_key + AND k.mld_kenmerk_niveau = 'S'; + END IF; + + v_errorhint := + 'Toevoegen melding'; + INSERT INTO mld_melding (mld_melding_module, + mld_meldbron_key, + mld_melding_datum, + mld_melding_omschrijving, + mld_stdmelding_key, + mld_alg_onroerendgoed_keys, + mld_melding_einddatum, + prs_perslid_key, + prs_perslid_key_voor, + -- mld_melding_behandelaar_key, + mld_melding_status, + mld_melding_spoed) + VALUES ( + 'MLD', + 6, + fac.safe_to_date (rec.mld_melding_datum, 'dd-mm-yyyy'), + rec.mld_melding_omschrijving, + v_mld_stdmelding_key, + v_alg_ruimte_key, + rec.plandatum, + v_prs_perslid_key, + v_prs_perslid_key, + -- v_prs_behandelaar_key, + NULL, + 3) + RETURNING mld_melding_key + INTO v_mld_melding_key; + + mld.setmeldingstatus(v_mld_melding_key, 2, v_prs_perslid_key, 0); + + v_errorhint := 'Koppelen object'; + INSERT INTO mld_melding_object (mld_melding_key, ins_deel_key) + VALUES (v_mld_melding_key, v_ins_deel_key); + + + IF UPPER(rec.gebrekcode) <> 'GEEN' THEN + v_errorhint := 'Toevoegen Ernst kenmerk'; + mld.upsertmeldingkenmerk (v_ernst_kenmerk_key, + v_mld_melding_key, + v_ernst_key); + + v_errorhint := 'Toevoegen Omvang kenmerk'; + mld.upsertmeldingkenmerk (v_omvang_kenmerk_key, + v_mld_melding_key, + v_omvang_key); + v_errorhint := 'Toevoegen Intensiteit kenmerk'; + mld.upsertmeldingkenmerk (v_intensiteit_kenmerk_key, + v_mld_melding_key, + v_intensiteit_key); + END IF; + + set_aspect ('ASPECT1', rec.aspect1, v_mld_melding_key); + set_aspect ('ASPECT2', rec.aspect2, v_mld_melding_key); + set_aspect ('ASPECT3', rec.aspect3, v_mld_melding_key); + set_aspect ('ASPECT4', rec.aspect4, v_mld_melding_key); + set_aspect ('ASPECT5', rec.aspect5, v_mld_melding_key); + set_aspect ('ASPECT6', rec.aspect6, v_mld_melding_key); + set_aspect ('ASPECT7', rec.aspect7, v_mld_melding_key); + + v_errorhint := 'Toevoegen Foto kenmerk'; + IF rec.foto IS NOT NULL + THEN + mld.upsertmeldingkenmerk (v_foto_kenmerk_key, + v_mld_melding_key, + rec.foto); + END IF; + + v_errorhint := 'Toevoegen Kosten kenmerk'; + IF rec.kosten IS NOT NULL AND v_kosten_kenmerk_key IS NOT NULL + THEN + mld.upsertmeldingkenmerk (v_kosten_kenmerk_key, + v_mld_melding_key, + TO_CHAR(rec.kosten)); + END IF; + + -- Bij direct accepteren moet ook de CND-berekening uitgevoerd worden + ---- En indien meegegeven wordt ook de behandelaar op melding gezet. + v_errorhint := 'Meldingen direct accepteren '; + IF fac.getsetting('cnd_autoaccept') = 1 + THEN + mld.setmeldingstatus(v_mld_melding_key, 4, v_prs_perslid_key, 0); + + BEGIN + cnd.process_mjb_score_effects (v_mld_melding_key); + END; + COMMIT; + + IF v_prs_behandelaar_key IS NOT NULL + THEN + + UPDATE mld_melding + SET mld_melding_behandelaar_key = v_prs_behandelaar_key + WHERE mld_melding_key = v_mld_melding_key ; + + /* -- Notificatie naar behandelaar + fac.putnotificationsrtprio ( + NULL, + v_behandelaar_key, + 'MLDBE2', + v_mld_melding_key, + 'Melding ' + || N + || v_mld_melding_key + || ' is door de klant aangepast.', + 2, + NULL, + NULL, + NULL, + 2, + NULL); */ + + END IF; + + END IF; + + v_count_import := v_count_import + 1; + COMMIT; + EXCEPTION + WHEN OTHERS + THEN + oracle_err_num := SQLCODE; + oracle_err_mes := SUBSTR (SQLERRM, 1, 200); + v_errormsg := + 'OTHERS (error ' + || oracle_err_num + || '/' + || oracle_err_mes + || ')'; + fac.imp_writelog (p_import_key, + 'E', + v_aanduiding || v_errormsg, + v_errorhint); + COMMIT; + END; + END LOOP; + + + FOR rec IN c_bestaand + LOOP + BEGIN + v_count_tot := v_count_tot + 1; + v_count_tot_n := v_count_tot_n + 1; + + v_aanduiding := + '[' + || rec.alg_gebouw_code + || '-' + || rec.ins_deel_omschrijving + || '-' + || rec.gebrekcode + || '- lopende melding ' + || rec.flex10 + || '] '; + + v_mld_melding_key := fac.safe_to_number(rec.flex10) ; + + -- Gaan eerst alle waarden vullen uit de lopende melding + -- + v_errorhint := 'Vullen huidige waarde OPMERKING van lopende melding'; + v_mld_melding_omschrijving := ''; + + SELECT max(mld_melding_omschrijving) + INTO v_mld_melding_omschrijving + FROM mld_melding + WHERE mld_melding_key = v_mld_melding_key ; + + -- + v_errorhint := 'Vullen huidige waarde OMVANG van lopende melding'; + v_omvang := ''; + + SELECT ud.fac_usrdata_omschr, k.mld_kenmerk_key + INTO v_omvang, v_omvang_kenmerk_key + FROM mld_srtkenmerk sk, + fac_kenmerkdomein kd, + fac_usrtab ut, + fac_usrdata ud, + mld_kenmerk k, + mld_kenmerkmelding km + WHERE sk.mld_srtkenmerk_key = v_omvang_srtkenmerk_key + AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key + AND ut.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrdata_key = fac.safe_to_number(km.mld_kenmerkmelding_waarde) + AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND km.mld_kenmerk_key = k.mld_kenmerk_key + AND km.mld_melding_key = v_mld_melding_key + AND k.mld_kenmerk_niveau = 'S'; + + v_errorhint := + 'Omvang (eigen tabel) niet gevonden (bestaat niet), regel wordt overgeslagen'; + + SELECT ud.fac_usrdata_key + INTO v_omvang_key + FROM mld_srtkenmerk sk, + fac_kenmerkdomein kd, + fac_usrtab ut, + fac_usrdata ud, + mld_kenmerk k, + mld_kenmerkmelding km + WHERE sk.mld_srtkenmerk_key = v_omvang_srtkenmerk_key + AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key + AND ut.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrdata_upper = UPPER (rec.omvang) + AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND km.mld_kenmerk_key = k.mld_kenmerk_key + AND km.mld_melding_key = v_mld_melding_key + AND k.mld_kenmerk_niveau = 'S'; + + -- + v_errorhint := 'Vullen huidige waarde INTENSITEIT van lopende melding'; + v_intensiteit := ''; + + SELECT ud.fac_usrdata_omschr, k.mld_kenmerk_key + INTO v_intensiteit, v_intensiteit_kenmerk_key + FROM mld_srtkenmerk sk, + fac_kenmerkdomein kd, + fac_usrtab ut, + fac_usrdata ud, + mld_kenmerk k, + mld_kenmerkmelding km + WHERE sk.mld_srtkenmerk_key = v_intensiteit_srtkenmerk_key + AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key + AND ut.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrdata_key = fac.safe_to_number(km.mld_kenmerkmelding_waarde) + AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND km.mld_kenmerk_key = k.mld_kenmerk_key + AND km.mld_melding_key = v_mld_melding_key + AND k.mld_kenmerk_niveau = 'S'; + + v_errorhint := 'Intensiteit (eigen tabel) niet gevonden (bestaat niet), regel wordt overgeslagen'; + + SELECT ud.fac_usrdata_key + INTO v_intensiteit_key + FROM mld_srtkenmerk sk, + fac_kenmerkdomein kd, + fac_usrtab ut, + fac_usrdata ud, + mld_kenmerk k, + mld_kenmerkmelding km + WHERE sk.mld_srtkenmerk_key = v_intensiteit_srtkenmerk_key + AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key + AND ut.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrdata_upper = UPPER (rec.intensiteit) + AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND km.mld_kenmerk_key = k.mld_kenmerk_key + AND km.mld_melding_key = v_mld_melding_key + AND k.mld_kenmerk_niveau = 'S'; + + -- + v_errorhint := 'Vullen huidige waarde ASPECT1 van lopende melding'; + v_aspect1 := ''; + + SELECT ud.fac_usrdata_omschr + INTO v_aspect1 + FROM mld_srtkenmerk sk, + fac_kenmerkdomein kd, + fac_usrtab ut, + fac_usrdata ud, + mld_kenmerk k, + mld_kenmerkmelding km + WHERE sk.mld_srtkenmerk_code = 'ASPECT1' + AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key + AND ut.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrdata_key = fac.safe_to_number(km.mld_kenmerkmelding_waarde) + AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND km.mld_kenmerk_key = k.mld_kenmerk_key + AND km.mld_melding_key = v_mld_melding_key + AND k.mld_kenmerk_niveau = 'T'; + + -- + v_errorhint := 'Vullen huidige waarde ASPECT2 van lopende melding'; + v_aspect2 := ''; + + SELECT ud.fac_usrdata_omschr + INTO v_aspect2 + FROM mld_srtkenmerk sk, + fac_kenmerkdomein kd, + fac_usrtab ut, + fac_usrdata ud, + mld_kenmerk k, + mld_kenmerkmelding km + WHERE sk.mld_srtkenmerk_code = 'ASPECT2' + AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key + AND ut.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrdata_key = fac.safe_to_number(km.mld_kenmerkmelding_waarde) + AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND km.mld_kenmerk_key = k.mld_kenmerk_key + AND km.mld_melding_key = v_mld_melding_key + AND k.mld_kenmerk_niveau = 'T'; + + -- + v_errorhint := 'Vullen huidige waarde ASPECT3 van lopende melding'; + v_aspect3 := ''; + + SELECT ud.fac_usrdata_omschr + INTO v_aspect3 + FROM mld_srtkenmerk sk, + fac_kenmerkdomein kd, + fac_usrtab ut, + fac_usrdata ud, + mld_kenmerk k, + mld_kenmerkmelding km + WHERE sk.mld_srtkenmerk_code = 'ASPECT3' + AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key + AND ut.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrdata_key = fac.safe_to_number(km.mld_kenmerkmelding_waarde) + AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND km.mld_kenmerk_key = k.mld_kenmerk_key + AND km.mld_melding_key = v_mld_melding_key + AND k.mld_kenmerk_niveau = 'T'; + + -- + v_errorhint := 'Vullen huidige waarde ASPECT4 van lopende melding'; + v_aspect4 := ''; + + SELECT ud.fac_usrdata_omschr + INTO v_aspect4 + FROM mld_srtkenmerk sk, + fac_kenmerkdomein kd, + fac_usrtab ut, + fac_usrdata ud, + mld_kenmerk k, + mld_kenmerkmelding km + WHERE sk.mld_srtkenmerk_code = 'ASPECT4' + AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key + AND ut.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrdata_key = fac.safe_to_number(km.mld_kenmerkmelding_waarde) + AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND km.mld_kenmerk_key = k.mld_kenmerk_key + AND km.mld_melding_key = v_mld_melding_key + AND k.mld_kenmerk_niveau = 'T'; + + -- + v_errorhint := 'Vullen huidige waarde ASPECT5 van lopende melding'; + v_aspect5 := ''; + + SELECT ud.fac_usrdata_omschr + INTO v_aspect5 + FROM mld_srtkenmerk sk, + fac_kenmerkdomein kd, + fac_usrtab ut, + fac_usrdata ud, + mld_kenmerk k, + mld_kenmerkmelding km + WHERE sk.mld_srtkenmerk_code = 'ASPECT5' + AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key + AND ut.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrdata_key = fac.safe_to_number(km.mld_kenmerkmelding_waarde) + AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND km.mld_kenmerk_key = k.mld_kenmerk_key + AND km.mld_melding_key = v_mld_melding_key + AND k.mld_kenmerk_niveau = 'T'; + + -- + v_errorhint := 'Vullen huidige waarde ASPECT6 van lopende melding'; + v_aspect6 := ''; + + SELECT ud.fac_usrdata_omschr + INTO v_aspect6 + FROM mld_srtkenmerk sk, + fac_kenmerkdomein kd, + fac_usrtab ut, + fac_usrdata ud, + mld_kenmerk k, + mld_kenmerkmelding km + WHERE sk.mld_srtkenmerk_code = 'ASPECT6' + AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key + AND ut.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrdata_key = fac.safe_to_number(km.mld_kenmerkmelding_waarde) + AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND km.mld_kenmerk_key = k.mld_kenmerk_key + AND km.mld_melding_key = v_mld_melding_key + AND k.mld_kenmerk_niveau = 'T'; + + -- + v_errorhint := 'Vullen huidige waarde ASPECT7 van lopende melding'; + v_aspect7 := ''; + + SELECT ud.fac_usrdata_omschr + INTO v_aspect7 + FROM mld_srtkenmerk sk, + fac_kenmerkdomein kd, + fac_usrtab ut, + fac_usrdata ud, + mld_kenmerk k, + mld_kenmerkmelding km + WHERE sk.mld_srtkenmerk_code = 'ASPECT7' + AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key + AND ut.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrtab_key = kd.fac_usrtab_key + AND ud.fac_usrdata_key = fac.safe_to_number(km.mld_kenmerkmelding_waarde) + AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key + AND km.mld_kenmerk_key = k.mld_kenmerk_key + AND km.mld_melding_key = v_mld_melding_key + AND k.mld_kenmerk_niveau = 'T'; + + -- + v_errorhint := 'Vullen huidige waarde FOTO van lopende melding'; + v_foto := ''; + -- v_foto_kenmerk_key; + + SELECT max(km.mld_kenmerkmelding_waarde) + INTO v_foto + FROM mld_kenmerkmelding km, mld_kenmerk k + WHERE km.mld_melding_key = v_mld_melding_key + AND km.mld_kenmerk_key = k.mld_kenmerk_key + AND k.mld_srtkenmerk_key = (SELECT MAX (mld_srtkenmerk_key) FROM mld_srtkenmerk WHERE mld_srtkenmerk_code = 'FOTONAAM'); + + -- + v_errorhint := 'Vullen huidige waarde KOSTEN van lopende melding'; + v_kosten := ''; + + SELECT max(km.mld_kenmerkmelding_waarde) + INTO v_kosten + FROM mld_kenmerkmelding km, mld_kenmerk k + WHERE km.mld_melding_key = v_mld_melding_key + AND km.mld_kenmerk_key = k.mld_kenmerk_key + AND k.mld_srtkenmerk_key = (SELECT MAX (mld_srtkenmerk_key) FROM mld_srtkenmerk WHERE mld_srtkenmerk_code = 'KOSTEN'); + + -- + v_errorhint := 'Vullen huidige waarde PLANDATUM van lopende melding'; + + SELECT max(mld_melding_einddatum) + INTO v_plandatum_date + FROM mld_melding + WHERE mld_melding_key = v_mld_melding_key ; + + -- Conditiescore + v_errorhint := 'Vullen huidige waarde CONDITIESCORE van lopende melding'; + v_conditiescore := ''; + + SELECT max(km.mld_kenmerkmelding_waarde) + INTO v_conditiescore + FROM mld_kenmerkmelding km, mld_kenmerk k + WHERE km.mld_melding_key = v_mld_melding_key + AND km.mld_kenmerk_key = k.mld_kenmerk_key + AND k.mld_srtkenmerk_key = (SELECT MAX (mld_srtkenmerk_key) FROM mld_srtkenmerk WHERE mld_srtkenmerk_code = 'CONDITIESCORE'); + + -- Prioriteitsscore + v_errorhint := 'Vullen huidige waarde PRIORITEITS-SCORE van lopende melding'; + v_prioscore := ''; + + SELECT max(km.mld_kenmerkmelding_waarde) + INTO v_prioscore + FROM mld_kenmerkmelding km, mld_kenmerk k + WHERE km.mld_melding_key = v_mld_melding_key + AND km.mld_kenmerk_key = k.mld_kenmerk_key + AND k.mld_srtkenmerk_key = (SELECT MAX (mld_srtkenmerk_key) FROM mld_srtkenmerk WHERE mld_srtkenmerk_code = 'PRIORITEITSCORE'); + + -- + v_errorhint := 'Bepalen STATUS van lopende melding'; + v_mld_melding_status := ''; + + SELECT max(mld_melding_status) + INTO v_mld_melding_status + FROM mld_melding + WHERE mld_melding_key = v_mld_melding_key ; + + -- + v_errorhint := 'Bepalen INSPECTEUR / AANVRAGER van lopende melding'; + v_inspecteur := ''; + + SELECT p.prs_perslid_email + INTO v_inspecteur + FROM mld_melding m, prs_perslid p + WHERE m.prs_perslid_key = p.prs_perslid_key + AND mld_melding_key = v_mld_melding_key ; + + -- + v_errorhint := 'Bepalen BEHANDELAAR van lopende melding'; + v_behandelaar := ''; + + SELECT max(p.prs_perslid_email) + INTO v_behandelaar + FROM mld_melding m, prs_perslid p + WHERE m.mld_melding_behandelaar_key = p.prs_perslid_key + AND mld_melding_key = v_mld_melding_key ; + + + -- Alles gevuld. Nu alle meldingsvelden updaten als REC-waarde gevuld is en als deze afwijkt van de huidige waarde + v_herberekenen:=0; + + -- Omschrijving melding - Opmerking melding + v_errorhint := 'Aanpassen opmerking bij melding'; + v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Omschrijving aangevuld met: ' || rec.mld_melding_omschrijving ; + + IF v_mld_melding_omschrijving <> rec.mld_melding_omschrijving AND rec.mld_melding_omschrijving IS NOT NULL + THEN + + UPDATE mld_melding + SET mld_melding_omschrijving = v_mld_melding_omschrijving || CHR (13) || CHR(13) || CHR (10) || to_char(sysdate,'DD-MM-YYYY') || ':' || CHR(13) || CHR (10) || rec.mld_melding_omschrijving + WHERE mld_melding_key = v_mld_melding_key; + + END IF; + + -- Omvang + v_errorhint := 'Aanpassen Omvang kenmerk'; + v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Omvang: (' || v_omvang || ') --> ' || rec.omvang ; + + IF rec.omvang IS NOT NULL AND v_omvang <> rec.omvang + THEN + mld.upsertmeldingkenmerk (v_omvang_kenmerk_key, + v_mld_melding_key, + v_omvang_key); + + v_herberekenen:=1; + fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding); + END IF; + + v_errorhint := 'Aanpassen Intensiteit kenmerk'; + v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Intensiteit: (' || v_intensiteit || ') --> ' || rec.intensiteit ; + + IF rec.intensiteit IS NOT NULL AND v_intensiteit <> rec.intensiteit + THEN + mld.upsertmeldingkenmerk (v_intensiteit_kenmerk_key, + v_mld_melding_key, + v_intensiteit_key); + + v_herberekenen:=1; + fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding); + END IF; + + -- Aspect 1 + v_errorhint := 'Aanpassen aspectwaarde 1'; + v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Aspect1: (' || v_aspect1 || ') --> ' || rec.aspect1 ; + + IF NOT(rec.aspect1 = 'NVT') AND v_aspect1 <> rec.aspect1 AND NOT(INSTR(v_aspect1,'NVT')>0 AND INSTR(rec.aspect1,'NVT')>0) + THEN + IF rec.aspect1 = '0 - NVT' THEN + set_aspect ('ASPECT1', 'NVT', v_mld_melding_key); + ELSE + set_aspect ('ASPECT1', rec.aspect1, v_mld_melding_key); + END IF; + + v_herberekenen:=1; + fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding); + END IF; + + -- Aspect 2 + v_errorhint := 'Aanpassen aspectwaarde 2'; + v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Aspect2: (' || v_aspect2 || ') --> ' || rec.aspect2 ; + + IF NOT(rec.aspect2 = 'NVT') AND v_aspect2 <> rec.aspect2 AND NOT(INSTR(v_aspect2,'NVT')>0 AND INSTR(rec.aspect2,'NVT')>0) + THEN + IF rec.aspect2 = '0 - NVT' THEN + set_aspect ('ASPECT2', 'NVT', v_mld_melding_key); + ELSE + set_aspect ('ASPECT2', rec.aspect2, v_mld_melding_key); + END IF; + + v_herberekenen:=1; + fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding); + END IF; + + -- Aspect 3 + v_errorhint := 'Aanpassen aspectwaarde 3'; + v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Aspect3: (' || v_aspect3 || ') --> ' || rec.aspect3 ; + + IF NOT(rec.aspect3 = 'NVT') AND v_aspect3 <> rec.aspect3 AND NOT(INSTR(v_aspect3,'NVT')>0 AND INSTR(rec.aspect3,'NVT')>0) + THEN + IF rec.aspect3 = '0 - NVT' THEN + set_aspect ('ASPECT3', 'NVT', v_mld_melding_key); + ELSE + set_aspect ('ASPECT3', rec.aspect3, v_mld_melding_key); + END IF; + + v_herberekenen:=1; + fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding); + END IF; + + -- Aspect 4 + v_errorhint := 'Aanpassen aspectwaarde 4'; + v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Aspect4: (' || v_aspect4 || ') --> ' || rec.aspect4 ; + + IF NOT(rec.aspect4 = 'NVT') AND v_aspect4 <> rec.aspect4 AND NOT(INSTR(v_aspect4,'NVT')>0 AND INSTR(rec.aspect4,'NVT')>0) + THEN + IF rec.aspect4 = '0 - NVT' THEN + set_aspect ('ASPECT4', 'NVT', v_mld_melding_key); + ELSE + set_aspect ('ASPECT4', rec.aspect4, v_mld_melding_key); + END IF; + + v_herberekenen:=1; + fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding); + END IF; + + -- Aspect 5 + v_errorhint := 'Aanpassen aspectwaarde 5'; + v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Aspect5: (' || v_aspect5 || ') --> ' || rec.aspect5 ; + + IF NOT(rec.aspect5 = 'NVT') AND v_aspect5 <> rec.aspect5 AND NOT(INSTR(v_aspect5,'NVT')>0 AND INSTR(rec.aspect5,'NVT')>0) + THEN + IF rec.aspect5 = '0 - NVT' THEN + set_aspect ('ASPECT5', 'NVT', v_mld_melding_key); + ELSE + set_aspect ('ASPECT5', rec.aspect5, v_mld_melding_key); + END IF; + + v_herberekenen:=1; + fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding); + END IF; + + -- Aspect 6 + v_errorhint := 'Aanpassen aspectwaarde 6'; + v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Aspect6: (' || v_aspect6 || ') --> ' || rec.aspect6 ; + + IF NOT(rec.aspect6 = 'NVT') AND v_aspect6 <> rec.aspect6 AND NOT(INSTR(v_aspect6,'NVT')>0 AND INSTR(rec.aspect6,'NVT')>0) + THEN + IF rec.aspect6 = '0 - NVT' THEN + set_aspect ('ASPECT6', 'NVT', v_mld_melding_key); + ELSE + set_aspect ('ASPECT6', rec.aspect6, v_mld_melding_key); + END IF; + + v_herberekenen:=1; + fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding); + END IF; + + -- Aspect 7 + v_errorhint := 'Aanpassen aspectwaarde 7'; + v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Aspect7: (' || v_aspect7 || ') --> ' || rec.aspect7 ; + + IF NOT(rec.aspect7 = 'NVT') AND v_aspect7 <> rec.aspect7 AND NOT(INSTR(v_aspect7,'NVT')>0 AND INSTR(rec.aspect7,'NVT')>0) + THEN + IF rec.aspect7 = '0 - NVT' THEN + set_aspect ('ASPECT7', 'NVT', v_mld_melding_key); + ELSE + set_aspect ('ASPECT7', rec.aspect7, v_mld_melding_key); + END IF; + + v_herberekenen:=1; + fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding); + END IF; + + -- + v_errorhint := 'Aanpassen Foto kenmerk'; + v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Fotonaam: (' || v_foto || ') --> ' || rec.foto ; + + IF rec.foto IS NOT NULL AND COALESCE(v_foto, '') <> rec.foto AND v_foto_kenmerk_key IS NOT NULL + THEN + mld.upsertmeldingkenmerk (v_foto_kenmerk_key, + v_mld_melding_key, + rec.foto); + + fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding); + END IF; + + -- + v_errorhint := 'Aanpassen Kosten kenmerk'; + v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Kosten: (' || v_kosten || ') --> ' || rec.kosten ; + + IF rec.kosten IS NOT NULL AND COALESCE(fac.safe_to_number(v_kosten), -1) <> rec.kosten AND v_kosten_kenmerk_key IS NOT NULL + THEN + mld.upsertmeldingkenmerk (v_kosten_kenmerk_key, + v_mld_melding_key, + TO_CHAR(rec.kosten)); + + fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding); + END IF; + + -- Plandatum + v_errorhint := 'Aanpassen Plandatum'; + v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Plandatum: (' || TO_CHAR(v_plandatum_date) || ') --> ' || TO_CHAR(rec.plandatum) ; + + IF rec.plandatum IS NOT NULL AND v_plandatum_date <> rec.plandatum + THEN + UPDATE mld_melding + SET mld_melding_einddatum = rec.plandatum + WHERE mld_melding_key = v_mld_melding_key ; + + fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding); + END IF; + + -- Inspecteur + v_errorhint := 'Aanpassen Inspecteur / Aanvrager'; + v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Inspecteur: (' || v_inspecteur || ') --> ' || rec.prs_perslid_email ; + + IF (rec.prs_perslid_email IS NOT NULL OR LENGTH (rec.prs_perslid_email) > 200) AND COALESCE(v_inspecteur, '') <> rec.prs_perslid_email + THEN + + SELECT prs_perslid_key + INTO v_prs_perslid_key + FROM prs_v_aanwezigperslid + WHERE UPPER (prs_perslid_email) = UPPER (rec.prs_perslid_email); + + IF v_prs_perslid_key IS NOT NULL + THEN + + UPDATE mld_melding + SET prs_perslid_key = v_prs_perslid_key, prs_perslid_key_voor = v_prs_perslid_key + WHERE mld_melding_key = v_mld_melding_key ; + + fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding); + END IF; + END IF; + + -- Her-berekenen van de Conditie- en Prioriteitscore + ---- Alleen als de melding status lopend heeft.. + ---- Alleen als de omvang, intensiteit of 1 vd aspectwaarden is veranderd.. + v_errorhint := 'Herberekenen conditie- en prio-score'; + v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is herberekend via upload gebreken:' || CHR(13) || CHR(10) || 'Oorspronkelijke conditiescore: ' || TO_CHAR(v_conditiescore) || CHR(13) || CHR(10) || 'Oorspronkelijke prioriteitscore: ' || TO_CHAR(v_prioscore) ; + + IF v_mld_melding_status IN (0,4,7,99) AND v_herberekenen=1 + THEN + + BEGIN + cnd.process_mjb_score_effects (v_mld_melding_key); + END; + COMMIT; + + fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding); + END IF; + + v_count_import := v_count_import + 1; + COMMIT; + EXCEPTION + WHEN OTHERS + THEN + oracle_err_num := SQLCODE; + oracle_err_mes := SUBSTR (SQLERRM, 1, 200); + v_errormsg := + 'OTHERS (error ' + || oracle_err_num + || '/' + || oracle_err_mes + || ')'; + fac.imp_writelog (p_import_key, + 'E', + v_aanduiding || v_errormsg, + v_errorhint); + COMMIT; + END; + END LOOP; + + fac.imp_writelog ( + p_import_key, + 'S', + 'UPDATE NEN2767_RESULTS: aantal regels te verwerken: ' + || TO_CHAR (v_count_tot) + || ' / aantal geldige regels: ' + || TO_CHAR (v_count_import) + || ' / aantal BIJGEWERKTE, BESTAANDE gebreken: ' + || TO_CHAR (v_count_tot_n) + , + ''); +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); + COMMIT; +END rwsn_update_ins_gebreken; +/ + + +-- +-- MJOB Taken +-- +CREATE OR REPLACE PROCEDURE rwsn_import_ins_mjob_taken (p_import_key IN NUMBER) +IS + c_delim VARCHAR2 (2) := fac.import_delimiter(p_import_key); + v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line + v_errormsg VARCHAR2 (1000); + v_errorhint VARCHAR2 (1000); + v_file_index NUMBER; + v_count NUMBER; + v_dummy VARCHAR2 (100); + oracle_err_num NUMBER; + oracle_err_mes VARCHAR2 (200); + header_is_valid NUMBER; + v_count_tot NUMBER (10); + v_count_import NUMBER (10); + v_ongeldig NUMBER (1); + v_aanduiding VARCHAR2 (400); + v_gebouw_code VARCHAR2 (255); + v_deel_externnr VARCHAR2 (255); + v_deel_omschrijving VARCHAR2(200); + v_srtcontrole_omschrijving VARCHAR2(200); + v_srtcontrole_prijs VARCHAR2(200); + v_srtcontrole_startjaar VARCHAR2(200); + v_srtcontrole_periode VARCHAR2(200); + + -- Overige velden: + CURSOR c1 + IS + SELECT * + FROM fac_imp_file + WHERE fac_import_key = p_import_key + ORDER BY fac_imp_file_index; + +BEGIN + -- Eerst opruiming + DELETE FROM rwsn_imp_ins_mjob_taken; + + COMMIT; + + v_count_tot := 0; + v_count_import := 0; + header_is_valid := 0; + + FOR rec1 IN c1 + LOOP + BEGIN + v_newline := rec1.fac_imp_file_line; + v_file_index := rec1.fac_imp_file_index; + v_errormsg := 'Fout bij opvragen importregel'; + v_aanduiding := ''; + v_ongeldig := 0; + -- Lees alle veldwaarden + fac.imp_getfield (v_newline, c_delim, v_gebouw_code); -- Objectcode + fac.imp_getfield (v_newline, c_delim, v_deel_externnr); -- Element-ID + fac.imp_getfield (v_newline, c_delim, v_srtcontrole_omschrijving); -- Taak + fac.imp_getfield (v_newline, c_delim, v_srtcontrole_prijs); + fac.imp_getfield (v_newline, c_delim, v_srtcontrole_startjaar); + fac.imp_getfield (v_newline, c_delim, v_srtcontrole_periode); + + v_gebouw_code := TRIM(v_gebouw_code); + v_deel_externnr := TRIM(v_deel_externnr); + v_srtcontrole_omschrijving := TRIM(v_srtcontrole_omschrijving); + v_srtcontrole_prijs := TRIM(v_srtcontrole_prijs); + v_srtcontrole_startjaar := TRIM(v_srtcontrole_startjaar); + v_srtcontrole_periode := TRIM(v_srtcontrole_periode); + + v_aanduiding := + '[' + || v_gebouw_code + || '|' + || v_deel_externnr + || '|' + || v_srtcontrole_startjaar + || '] '; + + -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen + -- de juiste kolomkop. Ik controleer daarbij alle NIET-kenmerk kolommen! + -- Ik negeer alles totdat ik een geldige header ben gepasseerd. + IF (header_is_valid = 0) + THEN + IF UPPER(v_gebouw_code) = 'OBJECTCODE' + AND UPPER(v_deel_externnr) = 'ELEMENT-ID' + AND UPPER(v_srtcontrole_omschrijving) = 'TAAK OMSCHRIJVING' + AND UPPER(v_srtcontrole_prijs) = 'TAAK EENHEIDSPRIJS' + AND UPPER(v_srtcontrole_startjaar) = 'STARTJAAR' + AND UPPER(v_srtcontrole_periode) = 'TAAK CYCLUS' + THEN + header_is_valid := 1; + ELSE + IF rec1.fac_imp_file_index = 1 + THEN + + fac.imp_writelog (p_import_key, + 'E', + 'Ongeldige header aangetroffen:', + 'OBJECTCODE: ' || UPPER (v_gebouw_code) || CHR(10) || + 'ELEMENT-ID: ' || UPPER (v_deel_externnr) || CHR(10) || + 'TAAK OMSCHRIJVING: ' || UPPER (v_srtcontrole_omschrijving) || CHR(10) || + 'TAAK EENHEIDSPRIJS: ' || UPPER (v_srtcontrole_prijs) || CHR(10) || + 'STARTJAAR: ' || UPPER (v_srtcontrole_startjaar) || CHR(10) || + 'TAAK CYCLUS: ' || UPPER (v_srtcontrole_periode)); + END IF; + END IF; + ELSE + v_count_tot := v_count_tot + 1; + -- Controleer alle veldwaarden + + v_errormsg := 'Gebouwcode kan niet gevonden worden'; + + SELECT alg_gebouw_key + INTO v_dummy + FROM alg_gebouw g + WHERE alg_gebouw_verwijder IS NULL + AND UPPER(alg_gebouw_code) = v_gebouw_code; + + v_errormsg := 'Bepaal object id - Kijk of het externnr bestaat'; + SELECT d.ins_deel_omschrijving + INTO v_deel_omschrijving + FROM ins_v_deel_gegevens dg, ins_deel d + WHERE dg.ins_deel_key = d.ins_deel_key + AND dg.alg_gebouw_upper = v_gebouw_code + AND d.ins_deel_externnr = v_deel_externnr; + + -- + v_errormsg := 'Prijs ongeldig; maximale grootte 999999.99'; + v_srtcontrole_prijs := REPLACE (v_srtcontrole_prijs, ',', '.'); + + IF fac.safe_to_number (v_srtcontrole_prijs) IS NULL + THEN + v_ongeldig := 1; + fac.imp_writelog (p_import_key, + 'W', + v_aanduiding || ' Prijs:' || v_srtcontrole_prijs || '-' || v_errormsg, + 'Prijs is niet geldig.'); + END IF; + + -- + v_errormsg := 'Startjaar ongeldig; 9999'; + + IF fac.safe_to_date ('01-01-' || v_srtcontrole_startjaar, 'dd-mm-yyyy') IS NULL + THEN + v_ongeldig := 1; + fac.imp_writelog (p_import_key, + 'W', + v_aanduiding || ' Jaar:' || v_srtcontrole_startjaar || '-' || v_errormsg, + 'Regel wordt overgeslagen!'); + END IF; + + -- + v_errorhint := 'Bepaling cyclus'; + IF fac.safe_to_number (v_srtcontrole_periode) IS NULL + THEN + v_ongeldig := 1; + fac.imp_writelog (p_import_key, + 'W', + v_aanduiding || ' Cyclus:' || v_srtcontrole_periode || '-' || v_errormsg, + 'Regel wordt overgeslagen!'); + END IF; + + v_errormsg := 'Bepaal object id - Kijk of het externnr bestaat'; + SELECT d.ins_deel_omschrijving + INTO v_deel_omschrijving + FROM ins_v_deel_gegevens dg, ins_deel d + WHERE dg.ins_deel_key = d.ins_deel_key + AND dg.alg_gebouw_upper = v_gebouw_code + AND d.ins_deel_externnr = v_deel_externnr; + + IF (v_ongeldig = 0) + THEN + BEGIN + v_errorhint := + 'Fout bij toevoegen regel aan importtabel cnd_imp_nen2767_results'; + + INSERT INTO rwsn_imp_ins_mjob_taken (alg_gebouw_code, + ins_deel_omschrijving, + ins_srtcontrole_omschrijving, + ins_srtcontrole_prijs, + ins_srtcontrole_startjaar, + ins_srtcontrole_periode, + ins_deel_externnr) + VALUES (v_gebouw_code, + v_deel_omschrijving, + v_srtcontrole_omschrijving || ' (' || v_srtcontrole_periode || 'j) - ' || v_srtcontrole_startjaar, + v_srtcontrole_prijs, + v_srtcontrole_startjaar, + v_srtcontrole_periode, + v_deel_externnr); + + v_count_import := v_count_import + 1; + COMMIT; + EXCEPTION + WHEN OTHERS + THEN + oracle_err_num := SQLCODE; + oracle_err_mes := SUBSTR (SQLERRM, 1, 100); + v_errormsg := + v_errorhint + || ' ORACLE (error ' + || oracle_err_num + || '/' + || oracle_err_mes + || ')'; + fac.imp_writelog ( + p_import_key, + 'E', + v_aanduiding || v_errormsg, + 'Ingelezen regel kan niet worden weggeschreven!'); + COMMIT; + END; + END IF; -- ongeldig + COMMIT; + END IF; -- ongeldig + + EXCEPTION + WHEN OTHERS + THEN + oracle_err_num := SQLCODE; + oracle_err_mes := SUBSTR (SQLERRM, 1, 200); + v_errormsg := + v_errormsg + || ' ORACLE (error ' + || oracle_err_num + || '/' + || oracle_err_mes + || ')'; + fac.imp_writelog (p_import_key, + 'W', + v_aanduiding || v_errormsg, + ''); + COMMIT; + END; + END LOOP; + + IF (header_is_valid = 1) + THEN + fac.imp_writelog ( + p_import_key, + 'S', + 'Objecten/aantal ingelezen importregels: ' || TO_CHAR (v_count_tot), + '' + ); + fac.imp_writelog ( + p_import_key, + 'S', + 'Objecten/aantal ongeldige niet ingelezen importregels: ' + || TO_CHAR (v_count_tot - v_count_import), + '' + ); + END IF; + + UPDATE imp_log SET imp_log_hint = 'Element bestaat niet in Facilitor' WHERE imp_log_omschrijving LIKE '%Bepaal object id - Kijk of het externnr bestaat ORACLE (error 100/ORA'||'-01403: Geen gegevens gevonden.)%' AND fac_import_key = p_import_key; + UPDATE imp_log SET imp_log_hint = 'Gebouwcode bestaat niet in Facilitor' WHERE imp_log_omschrijving LIKE '%Gebouwcode kan niet gevonden worden ORACLE (error 100/ORA'||'-01403: Geen gegevens gevonden.)%' AND fac_import_key = p_import_key; + + COMMIT; +EXCEPTION + WHEN OTHERS + THEN + oracle_err_num := SQLCODE; + oracle_err_mes := SUBSTR (SQLERRM, 1, 200); + v_errormsg := + v_errormsg + || ' ORACLE (error ' + || oracle_err_num + || '/' + || oracle_err_mes + || ')'; + fac.imp_writelog (p_import_key, + 'E', + v_aanduiding || v_errormsg, + 'Inleesproces objecten afgebroken! regel:' || v_file_index); +END rwsn_import_ins_mjob_taken; +/ + + +CREATE OR REPLACE PROCEDURE rwsn_update_ins_mjob_taken ( + p_import_key IN NUMBER) +IS + + v_errormsg VARCHAR2 (1000); + v_errorhint VARCHAR2 (1000); + oracle_err_num NUMBER; + oracle_err_mes VARCHAR2 (200); + v_count_tot NUMBER (10); + v_count_import NUMBER (10); + v_ongeldig NUMBER (1); + v_aanduiding VARCHAR (400); + + v_ins_discipline_key NUMBER; + v_ctr_discipline_key NUMBER; + v_srtcontrole_key NUMBER; + v_srtcontroledl_xcp_key NUMBER; + v_deel_key NUMBER; + + -- Overige velden: + CURSOR c + IS + SELECT alg_gebouw_code, ins_deel_omschrijving, ins_srtcontrole_omschrijving, SUM(ins_srtcontrole_prijs) ins_srtcontrole_prijs, ins_srtcontrole_startjaar, ins_srtcontrole_periode, ins_deel_externnr + FROM rwsn_imp_ins_mjob_taken + GROUP BY alg_gebouw_code, ins_deel_omschrijving, ins_srtcontrole_omschrijving, ins_srtcontrole_startjaar, ins_srtcontrole_periode, ins_deel_externnr + ORDER BY alg_gebouw_code, ins_deel_omschrijving; + + CURSOR c_del (c_discipline_key NUMBER) + IS + SELECT xcp.* + FROM ins_v_deel_gegevens dg, ins_srtcontroledl_xcp xcp, ins_srtcontrole sc + WHERE dg.ins_deel_key = xcp.ins_deel_key + AND dg.ins_discipline_key = c_discipline_key + AND xcp.ins_srtcontrole_key = sc.ins_srtcontrole_key + AND alg_gebouw_upper IN (SELECT DISTINCT alg_gebouw_code + FROM rwsn_imp_ins_mjob_taken) + AND NOT EXISTS + (SELECT 1 + FROM rwsn_imp_ins_mjob_taken imt + WHERE imt.INS_DEEL_OMSCHRIJVING = dg.ins_deel_omschrijving + AND sc.ins_srtcontrole_omschrijving = imt.ins_srtcontrole_omschrijving + AND xcp.ins_srtcontroledl_xcp_startdat = TO_DATE ('01-01-' || imt.ins_srtcontrole_startjaar, 'dd-mm-yyyy')); + +BEGIN + + v_errorhint := 'Zoek de taakcategorie Vervanging'; + SELECT ins_discipline_key + INTO v_ctr_discipline_key + FROM ctr_discipline d, ctr_disc_params dp + WHERE d.ins_discipline_key = dp.ctr_ins_discipline_key + AND dp.ctr_disc_params_ismjob = 1 + AND d.ins_discipline_omschrijving = 'Vervanging'; + + v_errorhint := 'Zoek de discipline MJOB'; + SELECT ins_discipline_key + INTO v_ins_discipline_key + FROM ins_discipline d + WHERE d.ins_discipline_omschrijving = 'MJOB'; + + FOR rec IN c + LOOP + BEGIN + v_errorhint := 'Controleer of de generieke taak voor vervanging (xj) al bestaat'; + SELECT ins_srtcontrole_key + INTO v_srtcontrole_key + FROM ins_srtcontrole + WHERE ins_srtinstallatie_key = v_ins_discipline_key + AND ctr_discipline_key = v_ctr_discipline_key + AND ins_srtcontrole_omschrijving = rec.ins_srtcontrole_omschrijving; + + EXCEPTION WHEN NO_DATA_FOUND + THEN + v_errorhint := 'Voeg de generieke taak vervanging toe'; + INSERT INTO ins_srtcontrole ( + ins_srtinstallatie_key, + ins_srtcontrole_niveau, + ins_srtcontrole_omschrijving, + ctr_discipline_key, + ins_srtcontrole_mode, + ins_srtcontrole_periode, + ins_srtcontrole_eenheid, + ins_srtcontrole_level, + ins_srtcontrole_materiaal, + ins_srtcontrole_percentage) + VALUES ( + v_ins_discipline_key, + 'D', + rec.ins_srtcontrole_omschrijving, + v_ctr_discipline_key, + 1, -- interval + 0, -- periode + 4, -- eenheid (altijd jaarlijks bij mjob) + 10, -- we kennen geen niveaus omdat we alleen maar vervangen + 0, -- bedrag is altijd 0 omdat we deze per object gaan overrullen. + 100) + RETURNING ins_srtcontrole_key INTO v_srtcontrole_key; + END; + + + BEGIN + v_aanduiding := rec.ins_deel_omschrijving; + -- Zoek het object + v_errorhint := 'Zoek het elemement op'; + SELECT ins_deel_key + INTO v_deel_key + FROM ins_deel + WHERE ins_deel_omschrijving = rec.ins_deel_omschrijving; + + BEGIN + v_errorhint := 'Bestaat er al een taak voor dit element met hetzelfde startjaar?'; + SELECT ins_srtcontroledl_xcp_key + INTO v_srtcontroledl_xcp_key + FROM ins_srtcontroledl_xcp xcp + WHERE ins_deel_key = v_deel_key + AND ins_srtcontrole_key = v_srtcontrole_key + AND xcp.ins_srtcontroledl_xcp_startdat = TO_DATE ('01-01-' || rec.ins_srtcontrole_startjaar, 'dd-mm-yyyy'); + + v_errorhint := 'Bijwerken van de taak bij het element'; + UPDATE ins_srtcontroledl_xcp + SET ins_srtcontroledl_xcp_materia = rec.ins_srtcontrole_prijs, + ins_srtcontroledl_xcp_opmerk = rec.ins_srtcontrole_omschrijving + WHERE ins_srtcontroledl_xcp_key = v_srtcontroledl_xcp_key; + + EXCEPTION WHEN NO_DATA_FOUND + THEN + v_errorhint := 'Aanmaken van de taak bij het element'; + INSERT INTO ins_srtcontroledl_xcp (ins_deel_key, + ins_srtcontrole_key, + ins_srtcontroledl_xcp_materia, + ins_srtcontroledl_xcp_startdat, + ins_srtcontroledl_xcp_periode, + ins_scenario_key, + ins_srtcontroledl_xcp_opmerk) + VALUES (v_deel_key, + v_srtcontrole_key, + rec.ins_srtcontrole_prijs, + TO_DATE ('01-01-' || rec.ins_srtcontrole_startjaar, 'dd-mm-yyyy'), + rec.ins_srtcontrole_periode, + 1, + rec.ins_srtcontrole_omschrijving); + END; + + EXCEPTION WHEN OTHERS + THEN + oracle_err_num := SQLCODE; + oracle_err_mes := SUBSTR (SQLERRM, 1, 200); + v_errormsg := + v_errormsg + || ' ORACLE (error ' + || oracle_err_num + || '/' + || oracle_err_mes + || ')'; + fac.imp_writelog (p_import_key, + 'E', + v_aanduiding || v_errormsg, + v_errorhint); + END; + END LOOP; + + -- taken die niet voorkomen in de import gaan we verwijderen + v_errorhint := 'Verwijderen van taken'; + FOR rec_del IN c_del (v_ins_discipline_key) + LOOP + v_aanduiding := rec_del.ins_srtcontroledl_xcp_key; + DELETE ins_srtcontroledl_xcp WHERE ins_srtcontroledl_xcp_key = rec_del.ins_srtcontroledl_xcp_key; + END LOOP; + + + EXCEPTION WHEN OTHERS + THEN + oracle_err_num := SQLCODE; + oracle_err_mes := SUBSTR (SQLERRM, 1, 200); + v_errormsg := + v_errormsg + || ' ORACLE (error ' + || oracle_err_num + || '/' + || oracle_err_mes + || ')'; + fac.imp_writelog (p_import_key, + 'E', + v_aanduiding || v_errormsg, + v_errorhint); + + +END rwsn_update_ins_mjob_taken; +/ + + +CREATE OR REPLACE PROCEDURE rwsn_daily +AS +BEGIN + RWSN.cnd_accept_melding; +END; +/ + +-- RWSN#80431: Gebruikers die dit jaar en het voorgaande jaar zijn aangemaakt +-- via SAML provisioning op basis van tracking, waarin dan staat: +-- Gebruiker '...' aangemaakt met key 12345 voor idp '1' +CREATE OR REPLACE VIEW RWSN_V_RAP_PRS_VIA_SAML +( + user_key, + aanmaakdatum, + naam, + email, + laatste_login +) +AS + SELECT p.prs_perslid_key, + p.prs_perslid_aanmaak, + pf.prs_perslid_naam_full, + p.prs_perslid_email, + p.prs_perslid_login + FROM prs_perslid p, + fac_tracking t, + prs_v_perslid_fullnames_all pf + WHERE p.prs_perslid_aanmaak > TRUNC (ADD_MONTHS (SYSDATE, -12), 'yyyy') -- Sinds 1-1 vorig jaar + AND p.prs_perslid_key = t.fac_tracking_refkey + AND t.fac_srtnotificatie_key = 210 -- PRSUPD + AND INSTR (UPPER (t.fac_tracking_oms), 'VOOR IDP ''1''') > 0 -- Aangemaakt via SAML/IDP=1 + AND p.prs_perslid_key = pf.prs_perslid_key; + ------ payload end ------ SET DEFINE OFF