From 473b73f103da12e6293199cca0472b91bcf6ea61 Mon Sep 17 00:00:00 2001 From: Robin Stoker Date: Fri, 27 Sep 2024 15:18:40 +0000 Subject: [PATCH] VNOG#83559 -- Importfunctie voor bepakkinglijst, tijdelijk tot 2025.1 svn path=/Customer/trunk/; revision=66357 --- VNOG/vnog.sql | 1101 +++++++++++++++++++++++++++++-------------------- 1 file changed, 662 insertions(+), 439 deletions(-) diff --git a/VNOG/vnog.sql b/VNOG/vnog.sql index 7f0f62333..80f5feee4 100644 --- a/VNOG/vnog.sql +++ b/VNOG/vnog.sql @@ -22,6 +22,667 @@ SET DEFINE OFF ------ payload begin ------ +CREATE OR REPLACE PROCEDURE vnog_import_bepakkinglijst (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_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_reserveerbaar VARCHAR2 (255); -- C1 + v_reserveerbaar_n NUMBER (1); -- N1 + v_res_deel_eenheid VARCHAR2 (255); -- C10 + v_res_deel_prijs VARCHAR2 (255); -- N7,2 + v_res_deel_prijs_n NUMBER (7, 2); -- N7,2 + v_alg_locatie_code VARCHAR2 (255); -- C10 + v_alg_gebouw_code VARCHAR2 (255); -- C12 + v_alg_verdieping_volgnr VARCHAR2 (255); -- N3 + v_alg_verdieping_volgnr_n NUMBER (3); -- N3 + v_alg_ruimte_nr VARCHAR2 (255); -- C20 + v_res_deel_alg_level VARCHAR2 (255); -- C1 (naar -1 t/m 5) + v_res_deel_alg_level_n NUMBER (1); -- N1 + v_res_discipline_type VARCHAR2 (255); -- C60 + v_res_discipline_omschrijving VARCHAR2 (255); -- C60 + v_res_discipline_kostensoort VARCHAR2 (255); -- C60 + v_prs_perslid_matchcode VARCHAR2 (4000); + v_prs_perslid_matchwaarde VARCHAR2 (4000); + 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_ins_deel_externnr VARCHAR2 (400); + v_file_index 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 imp_ins + IS + SELECT * + FROM fac_imp_ins; + + CURSOR loc_ins + IS + SELECT i.ins_deel_key deel_key, + l.alg_locatie_code locatie, + i.alg_gebouw_code gebouw, + i.alg_verdieping_code verdieping, + i.alg_ruimte_nr ruimte + FROM ins_v_deel_gegevens i, + alg_locatie l + WHERE i.alg_locatie_key = l.alg_locatie_key + AND i.ins_discipline_key = 561; + + CURSOR image_ins + IS + SELECT s.ins_srtdeel_omschrijving srtdeel, MAX (i.ins_deel_image) image + FROM ins_deel i, + ins_srtdeel s, + fac_imp_ins f + WHERE i.ins_srtdeel_key = s.ins_srtdeel_key + AND s.ins_srtdeel_omschrijving = f.ins_srtdeel_omschrijving + AND s.ins_srtdeel_verwijder IS NULL + GROUP BY (s.ins_srtdeel_omschrijving); + + CURSOR opm_ins + IS + SELECT f.ins_deel_omschrijving deel, i.ins_deel_omschrijving opmerking + FROM fac_imp_ins f, + ins_deel i + WHERE fac.safe_to_number (f.ins_kenmerkwaarde19) = i.ins_deel_key; + + -- 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', 'r', 'S', 'X', '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', 'r', 'S', 'X', '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; + v_prs_perslid_matchcode := ''; + + 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_ins_kenmerkwaarde1); + fac.imp_getfield (v_newline, c_delim, v_ins_srtdeel_omschrijving); + fac.imp_getfield (v_newline, c_delim, v_ins_srtgroep_omschrijving); + fac.imp_getfield (v_newline, c_delim, v_ins_discipline_omschrijving); + fac.imp_getfield (v_newline, c_delim, v_ins_deel_aantal); + fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde2); + fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde3); + fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde4); + fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde5); + fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde7); + fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde6); + + v_aanduiding := + '[' + || v_ins_discipline_omschrijving + || '|' + || v_ins_srtgroep_omschrijving + || '|' + || v_ins_srtdeel_omschrijving + || '] '; + + -- 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_ins_discipline_omschrijving) = 'DISCIPLINE' + AND UPPER (v_ins_srtgroep_omschrijving) = 'GROEP' + AND UPPER (v_ins_srtdeel_omschrijving) = 'OMSCHRIJVING' + AND UPPER (v_ins_deel_aantal) = 'AANTAL OP TS ' + 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); + + header_is_valid := 1; + END IF; + ELSE + v_count_tot := v_count_tot + 1; + -- Controleer alle veldwaarden + v_errormsg := 'Disciplineomschrijving ongeldig'; + v_ins_discipline_omschrijving := + TRIM (v_ins_discipline_omschrijving); + + IF v_ins_discipline_omschrijving IS NULL + OR LENGTH (v_ins_discipline_omschrijving) > 60 + THEN + fac.imp_writelog (p_import_key, + 'W', + v_aanduiding || v_errormsg, + 'Regel wordt overgeslagen'); + v_ongeldig := 1; + END IF; + + -- + v_errormsg := 'Groepsoortomschrijving ongeldig'; + v_ins_srtgroep_omschrijving := TRIM (v_ins_srtgroep_omschrijving); + + IF v_ins_srtgroep_omschrijving IS NULL + OR LENGTH (v_ins_srtgroep_omschrijving) > 60 + THEN + fac.imp_writelog (p_import_key, + 'W', + v_aanduiding || v_errormsg, + 'Regel wordt overgeslagen'); + v_ongeldig := 1; + END IF; + + -- + v_errormsg := 'Objectsoortomschrijving ongeldig'; + v_ins_srtdeel_omschrijving := TRIM (v_ins_srtdeel_omschrijving); + + IF v_ins_srtdeel_omschrijving IS NULL + OR LENGTH (v_ins_srtdeel_omschrijving) > 100 + THEN + fac.imp_writelog (p_import_key, + 'W', + v_aanduiding || v_errormsg, + 'Regel wordt overgeslagen'); + v_ongeldig := 1; + 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 := 'Ongeldige aanmaakdatum'; + IF v_ins_deel_aanmaak IS NOT NULL + THEN + BEGIN + v_ins_deel_aanmaak_d := + TO_DATE (v_ins_deel_aanmaak, 'dd-mm-yyyy'); + EXCEPTION + WHEN OTHERS + THEN + v_ongeldig := 1; + 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, + 'Regel wordt overgeslagen!' + ); + COMMIT; + END; + ELSE + v_ins_deel_aanmaak_d := NULL; + 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); + + -- 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, + reserveerbaar, + res_deel_eenheid, + res_deel_prijs, + alg_locatie_code, + alg_gebouw_code, + alg_verdieping_volgnr, + alg_ruimte_nr, + res_deel_alg_level, + res_discipline_type, + res_discipline_omschrijving, + res_discipline_kostensoort, + prs_perslid_matchcode, + prs_perslid_matchwaarde, + 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_vervaldatum, + 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_reserveerbaar_n, + v_res_deel_eenheid, + v_res_deel_prijs_n, + v_alg_locatie_code, + v_alg_gebouw_code, + v_alg_verdieping_volgnr_n, + v_alg_ruimte_nr, + v_res_deel_alg_level_n, + v_res_discipline_type, + v_res_discipline_omschrijving, + v_res_discipline_kostensoort, + v_prs_perslid_matchcode, + v_prs_perslid_matchwaarde, + DECODE (v_ins_kenmerk_key1, NULL, v_ins_kenmerkwaarde1, TO_CHAR (v_ins_kenmerk_key1) || '=' || SUBSTR (v_ins_kenmerkwaarde1, 1, 3900)), + DECODE (v_ins_kenmerk_key2, NULL, v_ins_kenmerkwaarde2, TO_CHAR (v_ins_kenmerk_key2) || '=' || SUBSTR (v_ins_kenmerkwaarde2, 1, 3900)), + DECODE (v_ins_kenmerk_key3, NULL, v_ins_kenmerkwaarde3, TO_CHAR (v_ins_kenmerk_key3) || '=' || SUBSTR (v_ins_kenmerkwaarde3, 1, 3900)), + DECODE (v_ins_kenmerk_key4, NULL, v_ins_kenmerkwaarde4, TO_CHAR (v_ins_kenmerk_key4) || '=' || SUBSTR (v_ins_kenmerkwaarde4, 1, 3900)), + DECODE (v_ins_kenmerk_key5, NULL, v_ins_kenmerkwaarde5, TO_CHAR (v_ins_kenmerk_key5) || '=' || SUBSTR (v_ins_kenmerkwaarde5, 1, 3900)), + DECODE (v_ins_kenmerk_key6, NULL, v_ins_kenmerkwaarde6, TO_CHAR (v_ins_kenmerk_key6) || '=' || SUBSTR (v_ins_kenmerkwaarde6, 1, 3900)), + DECODE (v_ins_kenmerk_key7, NULL, v_ins_kenmerkwaarde7, TO_CHAR (v_ins_kenmerk_key7) || '=' || SUBSTR (v_ins_kenmerkwaarde7, 1, 3900)), + DECODE (v_ins_kenmerk_key8, NULL, v_ins_kenmerkwaarde8, TO_CHAR (v_ins_kenmerk_key8) || '=' || SUBSTR (v_ins_kenmerkwaarde8, 1, 3900)), + DECODE (v_ins_kenmerk_key9, NULL, v_ins_kenmerkwaarde9, TO_CHAR (v_ins_kenmerk_key9) || '=' || SUBSTR (v_ins_kenmerkwaarde9, 1, 3900)), + DECODE (v_ins_kenmerk_key10, NULL, v_ins_kenmerkwaarde10, TO_CHAR (v_ins_kenmerk_key10) || '=' || SUBSTR (v_ins_kenmerkwaarde10, 1, 3900)), + DECODE (v_ins_kenmerk_key11, NULL, v_ins_kenmerkwaarde11, TO_CHAR (v_ins_kenmerk_key11) || '=' || SUBSTR (v_ins_kenmerkwaarde11, 1, 3900)), + DECODE (v_ins_kenmerk_key12, NULL, v_ins_kenmerkwaarde12, TO_CHAR (v_ins_kenmerk_key12) || '=' || SUBSTR (v_ins_kenmerkwaarde12, 1, 3900)), + DECODE (v_ins_kenmerk_key13, NULL, v_ins_kenmerkwaarde13, TO_CHAR (v_ins_kenmerk_key13) || '=' || SUBSTR (v_ins_kenmerkwaarde13, 1, 3900)), + DECODE (v_ins_kenmerk_key14, NULL, v_ins_kenmerkwaarde14, TO_CHAR (v_ins_kenmerk_key14) || '=' || SUBSTR (v_ins_kenmerkwaarde14, 1, 3900)), + DECODE (v_ins_kenmerk_key15, NULL, v_ins_kenmerkwaarde15, TO_CHAR (v_ins_kenmerk_key15) || '=' || SUBSTR (v_ins_kenmerkwaarde15, 1, 3900)), + DECODE (v_ins_kenmerk_key16, NULL, v_ins_kenmerkwaarde16, TO_CHAR (v_ins_kenmerk_key16) || '=' || SUBSTR (v_ins_kenmerkwaarde16, 1, 3900)), + DECODE (v_ins_kenmerk_key17, NULL, v_ins_kenmerkwaarde17, TO_CHAR (v_ins_kenmerk_key17) || '=' || SUBSTR (v_ins_kenmerkwaarde17, 1, 3900)), + DECODE (v_ins_kenmerk_key18, NULL, v_ins_kenmerkwaarde18, TO_CHAR (v_ins_kenmerk_key18) || '=' || SUBSTR (v_ins_kenmerkwaarde18, 1, 3900)), + DECODE (v_ins_kenmerk_key19, NULL, v_ins_kenmerkwaarde19, TO_CHAR (v_ins_kenmerk_key19) || '=' || SUBSTR (v_ins_kenmerkwaarde19, 1, 3900)), + DECODE (v_ins_kenmerk_key20, NULL, v_ins_kenmerkwaarde20, TO_CHAR (v_ins_kenmerk_key20) || '=' || SUBSTR (v_ins_kenmerkwaarde20, 1, 3900)), + v_ins_deel_aanmaak_d, + v_ins_deel_vervaldatum_d, + v_ins_deel_aantal_n, + v_ins_deel_externnr + ); + + COMMIT; + v_count_import := v_count_import + 1; + 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 IF; + END IF; + END; + END LOOP; + + IF (header_is_valid = 0) + THEN + fac.imp_writelog (p_import_key, + 'E', + 'Ongeldig importbestand', + 'Geen header of header niet volgens specificatie!'); + ELSE + 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; + + -- En dan nu de mutatie acties op fac_imp_ins + + v_ins_srtdeel_code := 'INV'; + + UPDATE fac_imp_ins + SET ins_srtdeel_code = v_ins_srtdeel_code + WHERE ins_srtdeel_code IS NULL; + COMMIT; + + UPDATE fac_imp_ins + SET ins_kenmerkwaarde20 = ROWNUM; + COMMIT; + + v_count_tot := fac.safe_to_number(substr(ins.nextdescription ('INV', NULL, 'default'), 4)); + + FOR rec IN imp_ins + LOOP + BEGIN + + v_ins_deel_omschrijving := v_ins_srtdeel_code || to_char (v_count_tot); + + UPDATE fac_imp_ins + SET ins_deel_omschrijving = v_ins_deel_omschrijving + WHERE ins_kenmerkwaarde20 = rec.ins_kenmerkwaarde20; + + UPDATE fac_imp_ins + SET ins_kenmerkwaarde19 = (select max(i.ins_deel_key) from ins_deel i, fac_imp_ins f where i.ins_deel_omschrijving = f.ins_kenmerkwaarde5 and i.ins_deel_verwijder IS NULL and i.ins_discipline_key = 561) + WHERE ins_kenmerkwaarde20 = rec.ins_kenmerkwaarde20; + + v_count_tot := v_count_tot + 1; + + END; + END LOOP; + COMMIT; + + FOR rec IN loc_ins + LOOP + BEGIN + + UPDATE fac_imp_ins + SET alg_locatie_code = rec.locatie, + alg_gebouw_code = rec.gebouw, + alg_verdieping_volgnr = rec.verdieping, + alg_ruimte_nr = rec.ruimte + WHERE ins_kenmerkwaarde19 = rec.deel_key; + + END; + END LOOP; + COMMIT; + + FOR rec IN image_ins + LOOP + BEGIN + + UPDATE fac_imp_ins + SET ins_kenmerkwaarde18 = rec.image + WHERE UPPER(ins_srtdeel_omschrijving) = UPPER(rec.srtdeel); + + END; + END LOOP; + COMMIT; + + FOR rec IN opm_ins + LOOP + BEGIN + + UPDATE fac_imp_ins + SET ins_deel_opmerking = rec.opmerking + WHERE UPPER(ins_deel_omschrijving) = UPPER(rec.deel); + + END; + END LOOP; + COMMIT; + +EXCEPTION + WHEN OTHERS + THEN + oracle_err_num := SQLCODE; + 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 vnog_import_bepakkinglijst; +/ + +CREATE OR REPLACE PROCEDURE vnog_update_bepakkinglijst (p_import_key IN NUMBER) +AS + + CURSOR imp_ins + IS + SELECT i.ins_deel_key asset, fac.safe_to_number (f.ins_kenmerkwaarde19) parent, f.ins_kenmerkwaarde18 image + FROM ins_deel i, + fac_imp_ins f + WHERE i.ins_deel_omschrijving = f.ins_deel_omschrijving; + + CURSOR kenmerk_ins + IS + SELECT i.ins_deel_key, DECODE (ikd.ins_kenmerk_key, 342, 341, 382, 381) kkey, ikd.ins_kenmerkdeel_waarde waarde + FROM ins_deel i, + ins_kenmerkdeel ikd, + fac_imp_ins f + WHERE ikd.ins_deel_key = fac.safe_to_number (f.ins_kenmerkwaarde19) + AND i.ins_deel_omschrijving = f.ins_deel_omschrijving + AND ikd.ins_kenmerk_key IN (382, 342) -- Beheergroep, eigenaar + ; + +BEGIN +-- Eerst de objecten verwerken op de normale manier +fac_update_ins (p_import_key); + +-- Dan de zojuist aangemaakte objecten gerelateerd maken aan de parent en de afbeelding toekennen. + FOR rec IN imp_ins + LOOP + BEGIN + INSERT INTO ins_deelkoppeling (ins_deelkoppeling_van_key, ins_deelkoppeling_naar_key) + VALUES (rec.parent, rec.asset); + + UPDATE ins_deel + SET ins_deel_image = rec.image + WHERE ins_deel_key = rec.asset; + + END; + END LOOP; + + FOR rec IN kenmerk_ins + LOOP + BEGIN + INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde, ins_kenmerkdeel_aanmaak) + VALUES (rec.ins_deel_key, rec.kkey, rec.waarde, sysdate); + + END; + END LOOP; +END vnog_update_bepakkinglijst; +/ + -- QR-code rapportage (objecten / meldingen). CREATE OR REPLACE VIEW vnog_v_rap_qrc AS @@ -63,445 +724,7 @@ AS AND i.ins_alg_ruimte_type IN ('T', 'R', 'W') AND i.ins_alg_locatie_key = o.alg_locatie_key AND i.ins_alg_locatie_key = l.alg_locatie_key; -/* --- Mail2Melding-stromen: --- - SERVICEDESK -: Registreren nieuwe melding van Soortmelding=861=Servicedesk/Algemeen/Open melding of notitie bij bestaande melding of notitie bij bestaande opdracht! --- - UITDIENST -: Registreren melding van Soortmelding=???=Wijziging/Uit dienst/Uitdiensttredingsformulier (vast/inhuur)! -CREATE OR REPLACE PROCEDURE VNOG_processemail (pfrom IN VARCHAR2, - pto IN VARCHAR2, - psubject IN VARCHAR2, - pbody IN VARCHAR2, - psessionid IN VARCHAR2, - pemailkey IN NUMBER) -AS - c_onbekend_key NUMBER (10) := 4; -- TODO:API-user tbv. hMail-koppeling? - v_errormsg VARCHAR2 (1000); - oracle_err_num NUMBER; - oracle_err_mes VARCHAR2 (200); - v_perslid_key NUMBER (10); - v_kostenplaats_key NUMBER (10); - v_locatie_key NUMBER (10); - v_exists_id VARCHAR2 (255); - v_melding_key NUMBER (10); - v_melder_key NUMBER (10); - v_opdracht_key NUMBER (10); - v_typeopdr_key NUMBER (10); - v_discipline_key NUMBER (10); - v_stdmelding_key NUMBER (10); - v_folder_kkey NUMBER (10); - subject_regexp VARCHAR2 (1000); - v_mldnum VARCHAR2 (1000); - v_count NUMBER (10); -BEGIN - CASE - --WHEN INSTR (UPPER (pfrom), '???') > 0 AND UPPER (pto) LIKE 'SERVICEDESK@%' - WHEN UPPER (pto) LIKE 'SERVICEDESK@%' - THEN - -- Bepaal de mailer op basis van e-mail adres zoals in pfrom? - v_errormsg := 'Fout bepalen mailer'; - SELECT COUNT ( * ) - INTO v_count - FROM prs_v_aanwezigperslid - WHERE UPPER (prs_perslid_email) LIKE UPPER (pfrom) || '%'; - - IF v_count = 1 - THEN - SELECT p.prs_perslid_key, a.prs_kostenplaats_key, MIN (wpg.alg_locatie_key) - INTO v_perslid_key, v_kostenplaats_key, v_locatie_key - FROM prs_v_aanwezigperslid p, prs_afdeling a, - (SELECT pw.prs_perslid_key, pw.prs_werkplek_key - FROM prs_perslidwerkplek pw - WHERE NOT EXISTS - (SELECT 1 - FROM prs_perslidwerkplek - WHERE prs_perslid_key = pw.prs_perslid_key - AND prs_perslidwerkplek_key > pw.prs_perslidwerkplek_key)) pw, - prs_v_werkplekperslid_gegevens wpg - WHERE p.prs_afdeling_key = a.prs_afdeling_key - AND UPPER (p.prs_perslid_email) LIKE UPPER (pfrom) || '%' - AND p.prs_perslid_key = pw.prs_perslid_key(+) - AND pw.prs_werkplek_key = wpg.prs_werkplek_key(+) - GROUP BY p.prs_perslid_key, a.prs_kostenplaats_key; - ELSE -- Melder kan niet 1-duidig worden bepaald, dus Onbekend en 87=APDM/Apeldoorn de Maten - SELECT p.prs_perslid_key, a.prs_kostenplaats_key, 87 - INTO v_perslid_key, v_kostenplaats_key, v_locatie_key - FROM prs_v_aanwezigperslid p, prs_afdeling a - WHERE p.prs_afdeling_key = a.prs_afdeling_key - AND p.prs_perslid_key = c_onbekend_key; - END IF; - - -- 1) Eerst meldingnr 123 of opdrachtnr 123/1 gevolgd door spatie uit - -- onderwerp proberen te bepalen. - -- 2) Het eerste voorkomen beginnend met een cijfer wordt gezien als - -- meldingnr of opdrachtnr en evt. andere voorkomens (verder naar - -- rechts) worden genegeerd. - v_errormsg := 'Fout bepalen melding/opdracht'; - v_exists_id := psubject; - IF REGEXP_INSTR (v_exists_id, '\d') > 0 - THEN - v_exists_id := SUBSTR (v_exists_id, REGEXP_INSTR (v_exists_id, '\d')) || ' '; -- Gedeelte vanaf eerste cijfer in v_exists_id plus ' '! - v_exists_id := SUBSTR (v_exists_id, 1, REGEXP_INSTR (v_exists_id, '\s') - 1); -- Gedeelte tot eerste white space in v_exists_id! - END IF; - - IF INSTR (v_exists_id, '/') = 0 -- Slash in eerste voorkomen beginnend met een cijfer? - THEN -- Melding - v_errormsg := 'Fout bepalen melding ' || v_exists_id; - SELECT MAX (mld_melding_key), MAX (prs_perslid_key) -- MAX() om te zorgen dat v_melding_key=NULL als meldingnr niet bestaat! - INTO v_melding_key, v_melder_key - FROM mld_melding - WHERE mld_melding_key = fac.safe_to_number (v_exists_id); - - IF v_melding_key IS NOT NULL -- AND INSTR (UPPER (pfrom), '@VNOG.NL') > 0 -- Melding bestaat én VNOG-mailer? - THEN - v_errormsg := 'Fout toevoegen notitie'; - INSERT INTO mld_melding_note (mld_melding_key, - mld_melding_note_omschrijving, - prs_perslid_key, - mld_melding_note_flag) - VALUES (v_melding_key, - SUBSTR (psubject || CHR (13) || CHR (10) || SUBSTR (pbody, 1, 4000 - (LENGTH (psubject) + 2)), 1, 4000), - v_perslid_key, - DECODE (v_perslid_key, -- Notitie open=1 als mailer=melder, anders gesloten=0! - v_melder_key, 1, - 0)); - - -- Default tracking is even goed genoeg. - fac.trackaction ('MLDNOT', v_melding_key, v_perslid_key, NULL, '#Notitie toegevoegd vanuit e-mail'); -- # voorkomt notificatie - - INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) - VALUES (psessionid, 'maillog', 'Als notitie toegevoegd aan melding ' || TO_CHAR (v_melding_key)); - ELSE - -- Bepaal de afgesproken soortmelding met key=861=Open melding! - v_errormsg := 'Fout bepalen soortmelding'; - SELECT mld_ins_discipline_key, mld_stdmelding_key - INTO v_discipline_key, v_stdmelding_key - FROM mld_stdmelding - WHERE mld_stdmelding_key = 861; - - -- Suggested extensions: - -- - Check for MLDUSE-write autorisations - -- - Parse the subject to find the appropriate stdmelding, if uniquely possible - -- - Append (as a note?) to an existing melding if #key is found in the subject - v_errormsg := 'Fout toevoegen melding'; - INSERT INTO mld_melding (mld_melding_module, - mld_meldbron_key, - mld_alg_locatie_key, - mld_alg_onroerendgoed_keys, - mld_melding_datum, - mld_melding_omschrijving, - mld_stdmelding_key, - mld_melding_t_uitvoertijd, - prs_kostenplaats_key, - prs_perslid_key, - prs_perslid_key_voor, - mld_melding_status, - mld_melding_spoed, - mld_melding_onderwerp, - mld_melding_behandelaar2_key, - mld_ins_discipline_key) - VALUES ('MLD', - 4, -- Email - COALESCE (v_locatie_key, 87), -- Fallback op 87=APDM/Apeldoorn de Maten - NULL, --v_onrgoed_keys, - SYSDATE, - SUBSTR (pbody, 1, 2000), - v_stdmelding_key, - NULL, - v_kostenplaats_key, - v_perslid_key, - v_perslid_key, - NULL, - 3, -- Prio normaal - SUBSTR (psubject, 1, 80), - NULL, - NULL) -- BT? - RETURNING mld_melding_key - INTO v_melding_key; - - mld.setmeldingstatus (v_melding_key, 2, v_perslid_key); - - INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) - VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || TO_CHAR (v_melding_key)); - END IF; - - -- Find the lowest volgnummer of the Folder-flexfield. - -- PAS OP: 'Alle vakgroeptypen'-kenmerken hier niet beschouwd en dat bijt - -- dus nooit met kenmerk hieronder tbv. Originele mail! - v_errormsg := 'Fout toevoegen melding-bijlage'; - SELECT MIN (k1.mld_kenmerk_key) - INTO v_folder_kkey - FROM mld_stdmelding sm1, ins_tab_discipline td1, mld_kenmerk k1, mld_srtkenmerk sk1 - WHERE sm1.mld_stdmelding_key = v_stdmelding_key - AND sm1.mld_ins_discipline_key = td1.ins_discipline_key - AND k1.mld_kenmerk_verwijder IS NULL - AND k1.mld_kenmerk_key != 441 -- Originele mail - AND k1.mld_srtkenmerk_key = sk1.mld_srtkenmerk_key - AND sk1.mld_srtkenmerk_kenmerktype = 'M' - AND (k1.mld_kenmerk_niveau = 'A' - OR (k1.mld_stdmelding_key = sm1.mld_stdmelding_key AND k1.mld_kenmerk_niveau = 'S') - OR (k1.mld_stdmelding_key = td1.ins_discipline_key AND k1.mld_kenmerk_niveau = 'D') - OR (k1.mld_stdmelding_key = td1.ins_srtdiscipline_key AND k1.mld_kenmerk_niveau = 'T')) - AND NOT EXISTS - (SELECT 1 - FROM mld_stdmelding sm2, ins_tab_discipline td2, mld_kenmerk k2, mld_srtkenmerk sk2 - WHERE sm2.mld_stdmelding_key = v_stdmelding_key - AND sm2.mld_ins_discipline_key = td2.ins_discipline_key - AND k2.mld_kenmerk_verwijder IS NULL - AND k2.mld_kenmerk_key != 441 -- Originele mail - AND k2.mld_srtkenmerk_key = sk2.mld_srtkenmerk_key - AND sk2.mld_srtkenmerk_kenmerktype = 'M' - AND (k2.mld_kenmerk_niveau = 'A' - OR (k2.mld_stdmelding_key = sm2.mld_stdmelding_key AND k2.mld_kenmerk_niveau = 'S') - OR (k2.mld_stdmelding_key = td2.ins_discipline_key AND k2.mld_kenmerk_niveau = 'D') - OR (k2.mld_stdmelding_key = td2.ins_srtdiscipline_key AND k2.mld_kenmerk_niveau = 'T')) - AND k2.mld_kenmerk_volgnummer < k1.mld_kenmerk_volgnummer); - - IF v_folder_kkey IS NOT NULL - THEN - INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) - VALUES (psessionid, 'kenmerkpath', 'MLD\M' || TO_CHAR (TRUNC (v_melding_key / 1000), 'FM0000') || '___\M' || v_melding_key || '\' || v_folder_kkey || '\'); - END IF; - - -- Per 2021.1 mogelijk dat originele mail ook wordt opgeslagen! - -- PAS OP: Voorkennis dat dit een 'Alle vakgroeptypen'-kenmerk is - -- en dus nooit bijt met Bijlage(n)-kenmerk hierboven! - v_errormsg := 'Fout toevoegen originele mail'; - INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) - VALUES (psessionid, 'kenmerkorgmailpath', 'MLD\M' || TO_CHAR (TRUNC (v_melding_key / 1000), 'FM0000') || '___\M' || v_melding_key || '\' || 441 || '\'); - ELSE -- Opdracht - v_errormsg := 'Fout bepalen opdracht ' || v_exists_id; - SELECT mld_opdr_key, mld_typeopdr_key - INTO v_opdracht_key, v_typeopdr_key - FROM mld_opdr - WHERE TO_CHAR (mld_melding_key) || '/' || TO_CHAR (mld_opdr_bedrijfopdr_volgnr) = SUBSTR (v_exists_id, REGEXP_INSTR (v_exists_id, '\d')); - - v_errormsg := 'Fout toevoegen opdracht-notitie'; - INSERT INTO mld_opdr_note (mld_opdr_key, - prs_perslid_key, - mld_opdr_note_omschrijving) - VALUES (v_opdracht_key, - v_perslid_key, - pfrom || CHR (13) || CHR (10) || psubject || CHR (13) || CHR (10) || SUBSTR (pbody, 1, 2000)); - - v_errormsg := 'Fout bijwerken opdracht-kleurbolletje'; - UPDATE mld_opdr - SET mld_opdr_flag = 1 -- Zwart - WHERE mld_opdr_key = v_opdracht_key; - - -- Find the lowest volgnummer of the Folder-flexfield. - v_errormsg := 'Fout toevoegen opdracht-bijlage'; - SELECT MIN (k1.mld_kenmerk_key) - INTO v_folder_kkey - FROM mld_kenmerk k1, mld_srtkenmerk sk1 - WHERE k1.mld_typeopdr_key = v_typeopdr_key - AND k1.mld_kenmerk_verwijder IS NULL - AND k1.mld_kenmerk_niveau = 'O' - AND k1.mld_srtkenmerk_key = sk1.mld_srtkenmerk_key - AND sk1.mld_srtkenmerk_kenmerktype = 'M' - AND NOT EXISTS - (SELECT 1 - FROM mld_kenmerk k2, mld_srtkenmerk sk2 - WHERE k2.mld_typeopdr_key = v_typeopdr_key - AND k2.mld_kenmerk_verwijder IS NULL - AND k2.mld_kenmerk_niveau = 'O' - AND k2.mld_srtkenmerk_key = sk2.mld_srtkenmerk_key - AND sk2.mld_srtkenmerk_kenmerktype = 'M' - AND k2.mld_kenmerk_volgnummer < k1.mld_kenmerk_volgnummer); - - IF v_folder_kkey IS NOT NULL - THEN - INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) - VALUES (psessionid, 'kenmerkpath', 'MLD\O' || TO_CHAR (TRUNC (v_opdracht_key / 1000), 'FM0000') || '___\O' || v_opdracht_key || '\' || v_folder_kkey || '\'); - END IF; - END IF; - WHEN UPPER (pto) LIKE 'UITDIENST@%' - THEN - -- Bepaal de mailer op basis van e-mail adres zoals in pfrom? - v_errormsg := 'Fout bepalen mailer'; - SELECT COUNT ( * ) - INTO v_count - FROM prs_v_aanwezigperslid - WHERE UPPER (prs_perslid_email) LIKE UPPER (pfrom) || '%'; - - IF v_count = -1 -- Altijd op Onbekend! - THEN - SELECT p.prs_perslid_key, a.prs_kostenplaats_key - INTO v_perslid_key, v_kostenplaats_key - FROM prs_v_aanwezigperslid p, prs_afdeling a, - (SELECT pw.prs_perslid_key, pw.prs_werkplek_key - FROM prs_perslidwerkplek pw - WHERE NOT EXISTS - (SELECT 1 - FROM prs_perslidwerkplek - WHERE prs_perslid_key = pw.prs_perslid_key - AND prs_perslidwerkplek_key > pw.prs_perslidwerkplek_key)) pw, - prs_v_werkplekperslid_gegevens wpg - WHERE p.prs_afdeling_key = a.prs_afdeling_key - AND UPPER (p.prs_perslid_email) LIKE UPPER (pfrom) || '%' - AND p.prs_perslid_key = pw.prs_perslid_key(+) - AND pw.prs_werkplek_key = wpg.prs_werkplek_key(+) - GROUP BY p.prs_perslid_key, a.prs_kostenplaats_key; - ELSE -- Melder kan niet 1-duidig worden bepaald, dus Onbekend - SELECT p.prs_perslid_key, a.prs_kostenplaats_key - INTO v_perslid_key, v_kostenplaats_key - FROM prs_v_aanwezigperslid p, prs_afdeling a - WHERE p.prs_afdeling_key = a.prs_afdeling_key - AND p.prs_perslid_key = c_onbekend_key; - END IF; - - -- 1) Eerst meldingnr 123 gevolgd door spatie uit onderwerp proberen - -- te bepalen. - -- 2) Het eerste voorkomen beginnend met een cijfer wordt gezien als - -- meldingnr en evt. andere voorkomens (verder naar rechts) worden - -- genegeerd. - -- 3) Het mailadres van afzender is gelijk aan die van melder??? => VERVALLEN - subject_regexp := '[[:digit:]]{1,}'; - v_mldnum := REGEXP_SUBSTR (psubject || ' ', subject_regexp, 1, 1, 'i'); -- 1234, of 12345, of 12, of 1 etc. - - -- Bepaal melding op basis van meldingnr uit onderwerp? - v_errormsg := 'Fout bepalen melding'; - SELECT MAX (mld_melding_key), MAX (prs_perslid_key) -- MAX() om te zorgen dat v_melding_key=NULL als meldingnr niet bestaat! - INTO v_melding_key, v_melder_key - FROM mld_melding - WHERE mld_melding_key = fac.safe_to_number (v_mldnum); - - IF v_melding_key IS NOT NULL -- AND INSTR (UPPER (pfrom), '@VNOG.NL') > 0 -- Melding bestaat én VNOG-mailer? - THEN - v_errormsg := 'Fout toevoegen notitie'; - INSERT INTO mld_melding_note (mld_melding_key, - mld_melding_note_omschrijving, - prs_perslid_key, - mld_melding_note_flag) - VALUES (v_melding_key, - SUBSTR (psubject || CHR (13) || CHR (10) || SUBSTR (pbody, 1, 4000 - (LENGTH (psubject) + 2)), 1, 4000), - v_perslid_key, - DECODE (v_perslid_key, -- Notitie open=1 als mailer=melder, anders gesloten=0! - v_melder_key, 1, - 0)); - - -- Default tracking is even goed genoeg. - fac.trackaction ('MLDNOT', v_melding_key, v_perslid_key, NULL, '#Notitie toegevoegd vanuit e-mail'); -- # voorkomt notificatie - - INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) - VALUES (psessionid, 'maillog', 'Als notitie toegevoegd aan melding ' || TO_CHAR (v_melding_key)); - ELSE - -- Bepaal de afgesproken soortmelding met key=752=Uitdiensttredingsformulier (vast/inhuur)! - v_errormsg := 'Fout bepalen soortmelding'; - SELECT mld_ins_discipline_key, mld_stdmelding_key - INTO v_discipline_key, v_stdmelding_key - FROM mld_stdmelding - WHERE mld_stdmelding_key = 752; - - -- Suggested extensions: - -- - Check for MLDUSE-write autorisations - -- - Parse the subject to find the appropriate stdmelding, if uniquely possible - -- - Append (as a note?) to an existing melding if #key is found in the subject - v_errormsg := 'Fout toevoegen melding'; - INSERT INTO mld_melding (mld_melding_module, - mld_meldbron_key, - mld_alg_locatie_key, - mld_alg_onroerendgoed_keys, - mld_melding_datum, - mld_melding_omschrijving, - mld_stdmelding_key, - mld_melding_t_uitvoertijd, - prs_kostenplaats_key, - prs_perslid_key, - prs_perslid_key_voor, - mld_melding_status, - mld_melding_spoed, - mld_melding_onderwerp, - mld_melding_behandelaar2_key, - mld_ins_discipline_key) - VALUES ('MLD', - 4, -- Email - NULL, -- Geen locatie! - NULL, --v_onrgoed_keys, - SYSDATE, - SUBSTR (pbody, 1, 2000), - v_stdmelding_key, - NULL, - v_kostenplaats_key, - v_perslid_key, - v_perslid_key, - NULL, - 3, -- Prio normaal - SUBSTR (psubject, 1, 80), - NULL, - NULL) -- BT? - RETURNING mld_melding_key - INTO v_melding_key; - - mld.setmeldingstatus (v_melding_key, 2, v_perslid_key); - - INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) - VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || TO_CHAR (v_melding_key)); - END IF; - - -- Find the lowest volgnummer of the Folder-flexfield. - -- PAS OP: 'Alle vakgroeptypen'-kenmerken hier niet beschouwd en dat bijt - -- dus nooit met kenmerk hieronder tbv. Originele mail! - v_errormsg := 'Fout toevoegen melding-bijlage'; - SELECT MIN (k1.mld_kenmerk_key) - INTO v_folder_kkey - FROM mld_stdmelding sm1, ins_tab_discipline td1, mld_kenmerk k1, mld_srtkenmerk sk1 - WHERE sm1.mld_stdmelding_key = v_stdmelding_key - AND sm1.mld_ins_discipline_key = td1.ins_discipline_key - AND k1.mld_kenmerk_verwijder IS NULL - AND k1.mld_kenmerk_key != 441 -- Originele mail - AND k1.mld_srtkenmerk_key = sk1.mld_srtkenmerk_key - AND sk1.mld_srtkenmerk_kenmerktype = 'M' - AND (k1.mld_kenmerk_niveau = 'A' - OR (k1.mld_stdmelding_key = sm1.mld_stdmelding_key AND k1.mld_kenmerk_niveau = 'S') - OR (k1.mld_stdmelding_key = td1.ins_discipline_key AND k1.mld_kenmerk_niveau = 'D') - OR (k1.mld_stdmelding_key = td1.ins_srtdiscipline_key AND k1.mld_kenmerk_niveau = 'T')) - AND NOT EXISTS - (SELECT 1 - FROM mld_stdmelding sm2, ins_tab_discipline td2, mld_kenmerk k2, mld_srtkenmerk sk2 - WHERE sm2.mld_stdmelding_key = v_stdmelding_key - AND sm2.mld_ins_discipline_key = td2.ins_discipline_key - AND k2.mld_kenmerk_verwijder IS NULL - AND k2.mld_kenmerk_key != 441 -- Originele mail - AND k2.mld_srtkenmerk_key = sk2.mld_srtkenmerk_key - AND sk2.mld_srtkenmerk_kenmerktype = 'M' - AND (k2.mld_kenmerk_niveau = 'A' - OR (k2.mld_stdmelding_key = sm2.mld_stdmelding_key AND k2.mld_kenmerk_niveau = 'S') - OR (k2.mld_stdmelding_key = td2.ins_discipline_key AND k2.mld_kenmerk_niveau = 'D') - OR (k2.mld_stdmelding_key = td2.ins_srtdiscipline_key AND k2.mld_kenmerk_niveau = 'T')) - AND k2.mld_kenmerk_volgnummer < k1.mld_kenmerk_volgnummer); - - IF v_folder_kkey IS NOT NULL - THEN - INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) - VALUES (psessionid, 'kenmerkpath', 'MLD\M' || TO_CHAR (TRUNC (v_melding_key / 1000), 'FM0000') || '___\M' || v_melding_key || '\' || v_folder_kkey || '\'); - END IF; - - -- Per 2021.1 mogelijk dat originele mail ook wordt opgeslagen! - -- PAS OP: Voorkennis dat dit een 'Alle vakgroeptypen'-kenmerk is en - -- dus nooit bijt met Bijlage(n)-kenmerk hierboven! - v_errormsg := 'Fout toevoegen originele mail'; - INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) - VALUES (psessionid, 'kenmerkorgmailpath', 'MLD\M' || TO_CHAR (TRUNC (v_melding_key / 1000), 'FM0000') || '___\M' || v_melding_key || '\' || 441 || '\'); - - -- Handle workflow actions for completion (in case of new melding). - MLD.mld_nextworkflowstep (v_melding_key, -1); -- -1=Initial - ELSE - INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) - VALUES (psessionid, 'errormsg', 'Ontvanger ongeldig - Neem contact op met uw systeembeheerder '); - END CASE; -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 ('PROCESSEMAIL', 'E', 'VNOG_processemail afgebroken!', '[' || pfrom || '] ' || v_errormsg); - INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) - VALUES (psessionid, 'errormsg', 'Database fout - Neem contact op met uw systeembeheerder '); - COMMIT; -END; -/ -*/ + CREATE OR REPLACE VIEW VNOG_V_RAP_ML_OBJ_KOSTEN AS SELECT l.alg_locatie_code locatie_code,