/* $Revision$ * $Id$ */ /* FAC_PACF.SRC, (F means FIP) to be included from fac_pac.src, isolated for convenience only * * Facilitor Import (en Export) routines. Verplichte richtlijnen: * * Voor Importfunctie XXXX moeten (uitsluitend) worden gedefinieerd * tabel fac_imp_XXXX * procedure fac_import_XXXX vult die tabel * procedure fac_update_XXXX vult de database op basis van die tabel * * evt nodige functies en procedures moeten lokaal of generiek toepasbaar worden gedefinieerd */ -- Generieke procedure om csv-regels uit FAC_IMP_FILE -- te splitsen naar losse kolommen in FAC_IMP_CSV CREATE OR REPLACE PROCEDURE fac_import_file2csv (p_import_key IN NUMBER) AS CURSOR c1 IS SELECT fac_imp_file_index, fac_imp_file_line FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; c_delim VARCHAR2 (1); v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line v_errorhint VARCHAR2 (1000); TYPE array_t IS VARRAY (100) OF VARCHAR2 (4000); a_fields array_t := array_t (); rec_count fac_imp_csv.fac_imp_csv_index%TYPE; collist VARCHAR2 (4000); fldlist VARCHAR2 (4000); l_cursor INTEGER DEFAULT DBMS_SQL.open_cursor; l_sql VARCHAR2 (4000); returnValue PLS_INTEGER; BEGIN SELECT COALESCE (fac_import_app_delimiter, ';') INTO c_delim FROM fac_import fi, fac_import_app fia WHERE fi.fac_import_key = p_import_key AND fi.fac_import_app_key = fia.fac_import_app_key; rec_count := 0; FOR rec IN c1 LOOP v_errorhint := 'Fout bij splitsen csv regel'; v_newline := rec.fac_imp_file_line; IF TRIM (REPLACE (v_newline, c_delim, '')) IS NULL -- geen lege regels THEN CONTINUE; END IF; rec_count := rec_count + 1; FOR f IN 1 .. a_fields.COUNT LOOP a_fields (f) := NULL; END LOOP; FOR f IN 1 .. 100 LOOP IF (rec_count = 1) -- eerste (header) regel bepaalt het aantal kolommen THEN IF (a_fields.COUNT = 100) THEN raise_application_error(-20001, 'More than ' || a_fields.COUNT || ' columns in csv'); END IF; a_fields.EXTEND; collist := collist || ', fac_imp_csv_col' || CASE WHEN f < 10 THEN '0' ELSE '' END || f; fldlist := fldlist || ', :a_fields' || f; ELSIF f > a_fields.COUNT THEN CONTINUE; END IF; fac.imp_getfield (v_newline, c_delim, a_fields (f)); IF v_newline IS NULL -- klaar met deze regel THEN EXIT; END IF; END LOOP; IF (rec_count = 1) THEN DBMS_OUTPUT.Put_line ('Detected ' || a_fields.COUNT || ' columns in csv'); fac.imp_writelog (p_import_key, 'I', 'Detected ' || a_fields.COUNT || ' columns in csv', ''); l_sql := 'INSERT INTO fac_imp_csv (fac_import_key, fac_imp_csv_index' || collist || ') VALUES (:import_key, :rec_count' || fldlist || ')'; --DBMS_OUTPUT.put_line (l_sql); DBMS_SQL.parse (l_cursor, l_sql, DBMS_SQL.native); DBMS_SQL.bind_variable (l_cursor, ':import_key', p_import_key); END IF; DBMS_SQL.bind_variable (l_cursor, ':rec_count', rec.fac_imp_file_index); FOR f IN 1 .. a_fields.COUNT LOOP DBMS_SQL.bind_variable (l_cursor, ':a_fields' || f, a_fields (f)); END LOOP; returnValue := DBMS_SQL.execute (l_cursor); END LOOP; IF (rec_count > 0) THEN DBMS_SQL.close_cursor (l_cursor); END IF; fac.imp_writelog (p_import_key, 'S', 'Converted ' || rec_count || ' csv lines', ''); EXCEPTION WHEN OTHERS THEN fac.imp_writelog (p_import_key, 'E', 'ORACLE (error ' || SQLCODE || '/' || SUBSTR (SQLERRM, 1, 200) || ')', v_errorhint); END; / CREATE OR REPLACE PROCEDURE fac_import_genericcsv ( p_import_key IN NUMBER ) IS BEGIN -- Het import csv-bestand wordt nu ingelezen met /imp/imp_inlezen.asp (en imp/imp_shared.js). -- Van daaruit worden de gegevens in de tabel fac_imp_csv gezet. -- fac_import_file2csv(p_import_key); NULL; END; / CREATE OR REPLACE FUNCTION fac_check_import_header(p_field IN VARCHAR2, p_value IN VARCHAR2) RETURN BOOLEAN IS v_result BOOLEAN := False; BEGIN IF ( UPPER (REPLACE(p_field, '_',' ')) = p_value) THEN v_result := True; END IF; RETURN v_result; END; / -- Geen PROCEDURE fac_update_genericcsv, dat gebeurt in de praktijk met een custom once script -- Procedures om catalogi in te lezen en te verwerken CREATE OR REPLACE PROCEDURE fac_import_catalogus ( p_import_key IN NUMBER ) IS p_discipline_key NUMBER(10); p_bedrijf_key NUMBER(10); 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); v_aanduiding VARCHAR2 (200); header_is_valid NUMBER := 0; v_count_tot NUMBER (10) := 0; v_count_import NUMBER (10) := 0; v_ongeldig NUMBER (1) := 0; -- De importvelden v_discipline_omschrijving VARCHAR2 (255); v_bedrijf_naam VARCHAR2 (255); v_catalogus_datum VARCHAR2 (255); v_srtdeel_nr VARCHAR2 (255); v_srtgroep_omschrijving VARCHAR2 (255); v_srtdeel_omschrijving VARCHAR2 (255); v_srtdeel_prijs VARCHAR2 (255); v_srtdeel_eenheid VARCHAR2 (255); v_srtdeel_image VARCHAR2 (255); v_srtdeel_veelvoud VARCHAR2 (255); v_srtdeel_btw VARCHAR2 (255); v_srtdeel_vervaldatum VARCHAR2 (255); v_srtdeel_inkprijs VARCHAR2 (255); v_srtdeel_minimum VARCHAR2 (255); v_bes_staffeltabel_naam VARCHAR2 (255); v_srtdeel_wijzigdagen VARCHAR2 (255); v_srtdeel_annuleerdagen VARCHAR2 (255); v_srtdeel_opmerking VARCHAR2 (4000); -- straks afgekapt op 2000 -- Overige velden: v_discipline_key NUMBER (10); v_bedrijf_key NUMBER (10); v_bes_staffeltabel_key NUMBER (10); CURSOR c1 IS SELECT fac_imp_file_line, LENGTH (TRIM (REPLACE (fac_imp_file_line, c_delim, ''))) regellengte FROM FAC_IMP_FILE WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; BEGIN SELECT ins_discipline_key, prs_bedrijf_key INTO p_discipline_key, p_bedrijf_key FROM fac_import fi, fac_import_app fia WHERE fi.fac_import_key = p_import_key AND fi.fac_import_app_key = fia.fac_import_app_key; -- Eerst opruiming -- LET OP: we ondersteunen geen multi-variant meer DELETE FROM fac_imp_catalogus; FOR rec IN c1 LOOP BEGIN v_aanduiding := ''; v_errorhint := 'Fout inlezen importregel'; v_newline := rec.fac_imp_file_line; v_ongeldig := 0; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_delim, v_discipline_omschrijving); fac.imp_getfield (v_newline, c_delim, v_bedrijf_naam); fac.imp_getfield (v_newline, c_delim, v_catalogus_datum); fac.imp_getfield (v_newline, c_delim, v_srtdeel_nr); fac.imp_getfield (v_newline, c_delim, v_srtgroep_omschrijving); fac.imp_getfield (v_newline, c_delim, v_srtdeel_omschrijving); fac.imp_getfield (v_newline, c_delim, v_srtdeel_prijs); fac.imp_getfield (v_newline, c_delim, v_srtdeel_eenheid); fac.imp_getfield (v_newline, c_delim, v_srtdeel_image); fac.imp_getfield (v_newline, c_delim, v_srtdeel_veelvoud); fac.imp_getfield (v_newline, c_delim, v_srtdeel_btw); fac.imp_getfield (v_newline, c_delim, v_srtdeel_vervaldatum); fac.imp_getfield (v_newline, c_delim, v_srtdeel_inkprijs); fac.imp_getfield (v_newline, c_delim, v_srtdeel_minimum); fac.imp_getfield (v_newline, c_delim, v_bes_staffeltabel_naam); fac.imp_getfield (v_newline, c_delim, v_srtdeel_wijzigdagen); fac.imp_getfield (v_newline, c_delim, v_srtdeel_annuleerdagen); fac.imp_getfield (v_newline, c_delim, v_srtdeel_opmerking); -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen -- de juiste kolomkop. Ik controleer daarbij - sinds UWVA#21562 - bijna alle -- kolommen (spaties in kolomheaders zijn onhandig bij "round-trip syncen"). -- Ik negeer alles totdat ik een geldige header ben gepasseerd. IF (header_is_valid = 0) THEN IF UPPER (TRIM (v_discipline_omschrijving)) LIKE 'CATALOGUS%' AND UPPER (TRIM (v_bedrijf_naam)) = 'LEVERANCIER' --AND UPPER (TRIM (v_catalogus_datum)) = 'CAT DATUM' -- Laat maar! AND UPPER (TRIM (v_srtdeel_nr)) = 'ARTIKELNR' AND UPPER (TRIM (v_srtgroep_omschrijving)) = 'GROEP' AND UPPER (TRIM (v_srtdeel_omschrijving)) = 'OMSCHRIJVING' AND UPPER (TRIM (v_srtdeel_prijs)) = 'PRIJS' AND UPPER (TRIM (v_srtdeel_eenheid)) = 'EENHEID' AND UPPER (TRIM (v_srtdeel_image)) = 'PICTURE' AND UPPER (TRIM (v_srtdeel_veelvoud)) = 'ORDERAANTAL' AND UPPER (TRIM (v_srtdeel_btw)) = 'TAX' AND UPPER (TRIM (v_srtdeel_vervaldatum)) = 'DUEDATE' AND UPPER (TRIM (v_srtdeel_inkprijs)) = 'INKOOPPRIJS' AND UPPER (TRIM (v_srtdeel_minimum)) = 'MINIMUM' AND UPPER (TRIM (v_bes_staffeltabel_naam)) = 'STAFFELTABEL' --AND UPPER (TRIM (v_srtdeel_wijzigdagen)) = 'WIJZIGDAGEN' -- Laat maar! --AND UPPER (TRIM (v_srtdeel_annuleerdagen)) = 'ANNULEERDAGEN' -- Laat maar! AND UPPER (TRIM (v_srtdeel_opmerking)) = 'OPMERKING' THEN header_is_valid := 1; END IF; ELSIF rec.regellengte > 1 -- Lege regels overslaan! THEN v_count_tot := v_count_tot + 1; v_aanduiding := '[' || TRIM (v_discipline_omschrijving) || '|' || TRIM (v_bedrijf_naam) || '|' || TRIM (v_srtdeel_nr) || '] '; v_discipline_omschrijving := TRIM (v_discipline_omschrijving); v_errorhint := 'Catalogus onbekend/ongeldig; regel wordt niet ingelezen'; SELECT ins_discipline_key INTO v_discipline_key FROM INS_TAB_DISCIPLINE WHERE UPPER (ins_discipline_omschrijving) = UPPER (v_discipline_omschrijving) AND COALESCE (p_discipline_key, ins_discipline_key) = ins_discipline_key -- CONN#20934/Import bedoelt voor catalogus? AND ins_discipline_module = 'BES' AND ins_discipline_verwijder IS NULL; v_bedrijf_naam := TRIM (v_bedrijf_naam); v_errorhint := 'Bedrijf onbekend/ongeldig; regel wordt niet ingelezen'; SELECT prs_bedrijf_key INTO v_bedrijf_key FROM PRS_BEDRIJF WHERE UPPER (prs_bedrijf_naam) = UPPER (v_bedrijf_naam) AND COALESCE (p_bedrijf_key, prs_bedrijf_key) = prs_bedrijf_key -- Import bedoelt voor bedrijf? AND prs_bedrijf_verwijder IS NULL; v_errorhint := 'Fout bij controleren importregel'; -- Indien leeg, dan catalogusdatum=SYSDATE gebruiken! v_catalogus_datum := COALESCE (TRIM (v_catalogus_datum), TO_CHAR (SYSDATE, 'yyyymmdd')); IF fac.safe_to_date (v_catalogus_datum, 'yyyymmdd') IS NULL THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Ongeldige catalogusdatum', 'Regel wordt niet ingelezen'); v_ongeldig := 1; END IF; v_srtdeel_nr := TRIM (v_srtdeel_nr); IF LENGTH (v_srtdeel_nr) > 32 THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Artikelnummer te lang', 'Nummer wordt afgebroken (Nr:' || v_srtdeel_nr || ')' ); END IF; v_srtgroep_omschrijving := TRIM (v_srtgroep_omschrijving); IF LENGTH (v_srtgroep_omschrijving) > 60 THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Groepomschrijving te lang', 'Omschrijving wordt afgebroken (Nr:' || v_srtdeel_nr || ')' ); END IF; v_srtdeel_omschrijving := TRIM (v_srtdeel_omschrijving); IF LENGTH (v_srtdeel_omschrijving) > 100 THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Artikelomschrijving te lang', 'Omschrijving wordt afgebroken (Nr:' || v_srtdeel_nr || ')' ); END IF; -- Indien leeg, dan blijft/wordt prijs=ongedefinieerd=NULL! v_srtdeel_prijs := TRIM (v_srtdeel_prijs); IF v_srtdeel_prijs IS NOT NULL AND fac.safe_to_number (v_srtdeel_prijs) IS NULL THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Ongeldige prijs', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')' ); v_ongeldig := 1; END IF; v_srtdeel_eenheid := TRIM (v_srtdeel_eenheid); IF LENGTH (v_srtdeel_eenheid) > 30 THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Eenheid te lang', 'Eenheid wordt afgebroken (Nr:' || v_srtdeel_nr || ')' ); END IF; v_srtdeel_image := TRIM (v_srtdeel_image); IF LENGTH (v_srtdeel_image) > 255 THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Imagenaam te lang', 'Naam wordt afgebroken (Nr:' || v_srtdeel_nr || ')' ); END IF; -- Veelvoud mag niet negatief of meer zijn dan 6 posities lang. -- Indien leeg, dan veelvoud=1! v_srtdeel_veelvoud := COALESCE (TRIM (v_srtdeel_veelvoud), '1'); IF fac.safe_to_number (v_srtdeel_veelvoud) IS NULL OR fac.safe_to_number (v_srtdeel_veelvoud) < 0 OR fac.safe_to_number (v_srtdeel_veelvoud) > 999999 THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Ongeldig veelvoud', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')' ); v_ongeldig := 1; END IF; -- Indien leeg, dan blijft/wordt BTW-tarief=ongedefinieerd=NULL! v_srtdeel_btw := TRIM (v_srtdeel_btw); IF v_srtdeel_btw IS NOT NULL AND fac.safe_to_number (v_srtdeel_btw) IS NULL THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Ongeldig BTW-tarief', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')' ); v_ongeldig := 1; END IF; -- Indien leeg, dan blijft/wordt vervaldatum=ongedefinieerd=NULL! v_srtdeel_vervaldatum := TRIM (v_srtdeel_vervaldatum); IF v_srtdeel_vervaldatum IS NOT NULL AND fac.safe_to_date (v_srtdeel_vervaldatum, 'yyyymmdd') IS NULL THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Ongeldige vervaldatum', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')' ); v_ongeldig := 1; END IF; -- Indien leeg, dan blijft/wordt inkoopprijs=ongedefinieerd=NULL! v_srtdeel_inkprijs := TRIM (v_srtdeel_inkprijs); IF v_srtdeel_inkprijs IS NOT NULL AND fac.safe_to_number (v_srtdeel_inkprijs) IS NULL THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Ongeldige inkoopprijs', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')' ); v_ongeldig := 1; END IF; -- Minimum mag niet negatief of meer zijn dan 6 posities lang. -- Indien leeg, dan blijft/wordt minimum=ongedefinieerd=NULL! v_srtdeel_minimum := TRIM (v_srtdeel_minimum); IF v_srtdeel_minimum IS NOT NULL AND ( fac.safe_to_number (v_srtdeel_minimum) IS NULL OR fac.safe_to_number (v_srtdeel_minimum) < 0 OR fac.safe_to_number (v_srtdeel_minimum) > 999999) THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Ongeldig minimum', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')' ); v_ongeldig := 1; END IF; v_bes_staffeltabel_naam := TRIM (v_bes_staffeltabel_naam); v_errorhint := 'Fout bij bepalen staffeltabel; regel wordt niet ingelezen'; IF v_bes_staffeltabel_naam IS NOT NULL THEN SELECT bes_staffeltabel_key INTO v_bes_staffeltabel_key FROM bes_staffeltabel WHERE UPPER (bes_staffeltabel_naam) = UPPER (v_bes_staffeltabel_naam); END IF; -- Wijzigdagen mag niet negatief of meer zijn dan 3 posities lang. -- Indien leeg, dan blijft/wordt wijzigdagen=ongedefinieerd=NULL! v_srtdeel_wijzigdagen := TRIM (v_srtdeel_wijzigdagen); IF v_srtdeel_wijzigdagen IS NOT NULL AND ( fac.safe_to_number (v_srtdeel_wijzigdagen) IS NULL OR fac.safe_to_number (v_srtdeel_wijzigdagen) < 0 OR fac.safe_to_number (v_srtdeel_wijzigdagen) > 999) THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Ongeldig aantal wijzigdagen', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')' ); v_ongeldig := 1; END IF; -- Annuleerdagen mag niet negatief of meer zijn dan 3 posities lang. -- Indien leeg, dan blijft/wordt annuleerdagen=ongedefinieerd=NULL! v_srtdeel_annuleerdagen := TRIM (v_srtdeel_annuleerdagen); IF v_srtdeel_annuleerdagen IS NOT NULL AND ( fac.safe_to_number (v_srtdeel_annuleerdagen) IS NULL OR fac.safe_to_number (v_srtdeel_annuleerdagen) < 0 OR fac.safe_to_number (v_srtdeel_annuleerdagen) > 999) THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Ongeldig aantal annuleerdagen', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')' ); v_ongeldig := 1; END IF; v_srtdeel_opmerking := TRIM (v_srtdeel_opmerking); IF LENGTH (v_srtdeel_opmerking) > 2000 THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Opmerking te lang', 'Opmerking wordt afgebroken (Nr:' || v_srtdeel_nr || ')' ); END IF; IF v_ongeldig = 0 THEN v_errorhint := 'Fout toevoegen importregel'; INSERT INTO FAC_IMP_CATALOGUS ( fac_import_key, ins_discipline_key, prs_bedrijf_key, fac_imp_catalogus_datum, ins_srtdeel_nr, ins_srtgroep_omschrijving, ins_srtdeel_omschrijving, ins_srtdeel_prijs, ins_srtdeel_inkprijs, ins_srtdeel_eenheid, ins_srtdeel_image, ins_srtdeel_veelvoud, ins_srtdeel_btw, ins_srtdeel_vervaldatum, ins_srtdeel_minimum, bes_staffeltabel_key, ins_srtdeel_wijzigdagen, ins_srtdeel_annuleerdagen, ins_srtdeel_opmerking ) VALUES ( p_import_key, v_discipline_key, v_bedrijf_key, fac.safe_to_date (v_catalogus_datum, 'yyyymmdd'), SUBSTR (v_srtdeel_nr, 1, 32), SUBSTR (v_srtgroep_omschrijving, 1, 60), SUBSTR (v_srtdeel_omschrijving, 1, 100), fac.safe_to_number (v_srtdeel_prijs), fac.safe_to_number (v_srtdeel_inkprijs), SUBSTR (v_srtdeel_eenheid, 1, 30), SUBSTR (v_srtdeel_image, 1, 255), fac.safe_to_number (v_srtdeel_veelvoud), fac.safe_to_number (v_srtdeel_btw), fac.safe_to_date (v_srtdeel_vervaldatum, 'yyyymmdd'), fac.safe_to_number (v_srtdeel_minimum), v_bes_staffeltabel_key, fac.safe_to_number (v_srtdeel_wijzigdagen), fac.safe_to_number (v_srtdeel_annuleerdagen), SUBSTR (v_srtdeel_opmerking, 1, 2000) ); v_count_import := v_count_import + 1; END IF; END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, v_errorhint); 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', 'Inleesproces: aantal ingelezen importregels: ' || TO_CHAR (v_count_tot), '' ); fac.imp_writelog ( p_import_key, 'S', 'Inleesproces: 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 := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Inlezen catalogus afgebroken!'); END fac_import_catalogus; / CREATE OR REPLACE PROCEDURE fac_update_catalogus ( p_import_key IN NUMBER ) AS v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_aanduiding VARCHAR2 (200); v_disc_oms ins_tab_discipline.ins_discipline_omschrijving%TYPE; v_bedr_naam prs_bedrijf.prs_bedrijf_naam%TYPE; -- Voor één catalogus PROCEDURE l_update_catalogus (pdisc_key IN NUMBER, pbedr_key IN NUMBER) AS CURSOR c_delsrtdeel ( cdisc_key IN NUMBER, cbedr_key IN NUMBER ) IS SELECT sd.bes_srtdeel_key, sd.bes_srtdeel_nr, sd.bes_srtdeel_omschrijving FROM bes_srtdeel sd, bes_srtgroep sg WHERE sd.bes_srtgroep_key = sg.bes_srtgroep_key AND sg.ins_discipline_key = cdisc_key AND sd.prs_bedrijf_key = cbedr_key AND sd.bes_srtdeel_verwijder IS NULL AND NOT EXISTS -- Niet meer in importbestand irt. cat/bedrijf! (SELECT 1 FROM fac_imp_catalogus f WHERE fac_import_key = p_import_key AND f.ins_discipline_key = cdisc_key AND f.prs_bedrijf_key = cbedr_key AND UPPER (f.ins_srtdeel_nr) = UPPER (sd.bes_srtdeel_nr)); CURSOR c_delsrtgroep ( cdisc_key IN NUMBER, cbedr_key IN NUMBER ) IS SELECT sg.bes_srtgroep_key, sg.bes_srtgroep_omschrijving FROM bes_srtgroep sg WHERE sg.ins_discipline_key = cdisc_key AND sg.bes_srtgroep_verwijder IS NULL AND NOT EXISTS -- Niet meer in importbestand irt. alleen cat! (SELECT 1 FROM fac_imp_catalogus f WHERE fac_import_key = p_import_key AND f.ins_discipline_key = cdisc_key AND UPPER (f.ins_srtgroep_omschrijving) = UPPER (sg.bes_srtgroep_omschrijving)) AND NOT EXISTS -- Waaronder geen artikelen van ander bedrijf! (SELECT 1 FROM bes_srtdeel sd WHERE sd.bes_srtgroep_key = sg.bes_srtgroep_key AND sd.prs_bedrijf_key <> cbedr_key); CURSOR c_inssrtgroep ( cdisc_key IN NUMBER, cbedr_key IN NUMBER ) IS SELECT DISTINCT f.ins_srtgroep_omschrijving FROM fac_imp_catalogus f WHERE fac_import_key = p_import_key AND f.ins_srtgroep_omschrijving IS NOT NULL AND f.ins_discipline_key = cdisc_key AND f.prs_bedrijf_key = cbedr_key AND NOT EXISTS (SELECT 1 FROM bes_srtgroep sg WHERE sg.ins_discipline_key = cdisc_key AND UPPER (sg.bes_srtgroep_omschrijving) = UPPER (f.ins_srtgroep_omschrijving) AND sg.bes_srtgroep_verwijder IS NULL); CURSOR c_updsrtdeel ( cdisc_key IN NUMBER, cbedr_key IN NUMBER ) IS SELECT s.bes_srtdeel_key, f.* FROM fac_imp_catalogus f, bes_srtgroep g, bes_srtdeel s WHERE fac_import_key = p_import_key AND f.ins_discipline_key = cdisc_key AND f.prs_bedrijf_key = cbedr_key AND g.ins_discipline_key = cdisc_key AND g.bes_srtgroep_key = s.bes_srtgroep_key AND UPPER (s.bes_srtdeel_nr) = UPPER (f.ins_srtdeel_nr) AND s.prs_bedrijf_key = cbedr_key AND s.bes_srtdeel_verwijder IS NULL; CURSOR c_inssrtdeel ( cdisc_key IN NUMBER, cbedr_key IN NUMBER ) IS SELECT f.* FROM fac_imp_catalogus f WHERE fac_import_key = p_import_key AND f.ins_discipline_key = cdisc_key AND f.prs_bedrijf_key = cbedr_key AND NOT EXISTS (SELECT 1 FROM bes_srtgroep g, bes_srtdeel s WHERE g.ins_discipline_key = cdisc_key AND g.bes_srtgroep_key = s.bes_srtgroep_key AND UPPER (s.bes_srtdeel_nr) = UPPER (f.ins_srtdeel_nr) AND s.prs_bedrijf_key = cbedr_key AND s.bes_srtdeel_verwijder IS NULL); ccount NUMBER (10); l_srtgroep_key NUMBER (10); l_bes_srtdeel_key bes_srtdeel.bes_srtdeel_key%TYPE; l_omschrijving bes_srtdeel.bes_srtdeel_omschrijving%TYPE; l_prijs bes_srtdeel_prijs.bes_srtdeel_prijs_prijs%TYPE; l_inkprijs bes_srtdeel_prijs.bes_srtdeel_prijs_inkprijs%TYPE; l_veelvoud bes_srtdeel.bes_srtdeel_veelvoud%TYPE; l_minimum bes_srtdeel.bes_srtdeel_minimum%TYPE; l_wijzigdagen bes_srtdeel.bes_srtdeel_wijzigdagen%TYPE; l_annuleerdagen bes_srtdeel.bes_srtdeel_annuleerdagen%TYPE; l_opmerking bes_srtdeel.bes_srtdeel_opmerking%TYPE; BEGIN -- DELETE SRTDEEL ccount := 0; FOR rec IN c_delsrtdeel (pdisc_key, pbedr_key) LOOP v_errormsg := 'Fout bij verwijderen artikel ' || rec.bes_srtdeel_nr; UPDATE bes_srtdeel SET bes_srtdeel_verwijder = SYSDATE WHERE bes_srtdeel_key = rec.bes_srtdeel_key; v_errormsg := 'Fout bij verwijderen artikelkenmerken ' || rec.bes_srtdeel_nr; UPDATE bes_kenmerk SET bes_kenmerk_verwijder = SYSDATE WHERE bes_kenmerk_niveau = 'S' AND bes_srtinstallatie_key = rec.bes_srtdeel_key; fac.imp_writelog ( p_import_key, 'I', v_aanduiding || 'Artikel ' || rec.bes_srtdeel_nr || '/' || rec.bes_srtdeel_omschrijving || ' is verwijderd', '' ); ccount := ccount + 1; END LOOP; fac.imp_writelog ( p_import_key, 'S', v_aanduiding || 'Er zijn ' || TO_CHAR (ccount) || ' artikelen verwijderd', '' ); COMMIT; -- DELETE SRTGROEP ccount := 0; FOR rec IN c_delsrtgroep (pdisc_key, pbedr_key) LOOP v_errormsg := 'Fout bij verwijderen groep ' || rec.bes_srtgroep_omschrijving; UPDATE bes_srtgroep SET bes_srtgroep_verwijder = SYSDATE WHERE bes_srtgroep_key = rec.bes_srtgroep_key; v_errormsg := 'Fout bij verwijderen groepskenmerken ' || rec.bes_srtgroep_omschrijving; UPDATE bes_kenmerk SET bes_kenmerk_verwijder = SYSDATE WHERE bes_kenmerk_niveau = 'G' AND bes_srtinstallatie_key = rec.bes_srtgroep_key; fac.imp_writelog ( p_import_key, 'I', v_aanduiding || 'Groep ' || rec.bes_srtgroep_omschrijving || ' is verwijderd', '' ); ccount := ccount + 1; END LOOP; fac.imp_writelog ( p_import_key, 'S', v_aanduiding || 'Er zijn ' || TO_CHAR (ccount) || ' groepen verwijderd', '' ); COMMIT; -- INSERT SRTGROEP ccount := 0; FOR rec IN c_inssrtgroep (pdisc_key, pbedr_key) LOOP BEGIN v_errormsg := 'Fout bij toevoegen groep ' || rec.ins_srtgroep_omschrijving; INSERT INTO bes_srtgroep ( ins_discipline_key, bes_srtgroep_omschrijving ) VALUES (pdisc_key, rec.ins_srtgroep_omschrijving); fac.imp_writelog ( p_import_key, 'I', v_aanduiding || 'Groep ' || rec.ins_srtgroep_omschrijving || ' is toegevoegd', '' ); ccount := ccount + 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, ''); END; END LOOP; fac.imp_writelog ( p_import_key, 'S', v_aanduiding || 'Er zijn ' || TO_CHAR (ccount) || ' groepen toegevoegd', '' ); COMMIT; -- UPDATE SRTDEEL ccount := 0; FOR rec IN c_updsrtdeel (pdisc_key, pbedr_key) LOOP BEGIN v_errormsg := 'Fout bij bepalen groep ' || rec.ins_srtgroep_omschrijving; SELECT bes_srtgroep_key INTO l_srtgroep_key FROM bes_srtgroep WHERE bes_srtgroep_verwijder IS NULL AND ins_discipline_key = pdisc_key AND UPPER (bes_srtgroep_omschrijving) = UPPER (rec.ins_srtgroep_omschrijving); v_errormsg := 'Fout bij bepalen huidige artikel-velden ' || rec.ins_srtdeel_nr; -- Tbv. logging de oude waarden opzoeken. SELECT bes_srtdeel_omschrijving, bes.getsrtdeelprijs (rec.bes_srtdeel_key, NULL), bes.getsrtdeelinkprijs (rec.bes_srtdeel_key, NULL), bes_srtdeel_veelvoud, bes_srtdeel_minimum, bes_srtdeel_wijzigdagen, bes_srtdeel_annuleerdagen, bes_srtdeel_opmerking INTO l_omschrijving, l_prijs, l_inkprijs, l_veelvoud, l_minimum, l_wijzigdagen, l_annuleerdagen, l_opmerking FROM bes_srtdeel WHERE bes_srtdeel_verwijder IS NULL AND bes_srtdeel_key = rec.bes_srtdeel_key; v_errormsg := 'Fout bij bijwerken artikel ' || rec.ins_srtdeel_nr; -- Codetechnisch zou hier bes.upsert_srtdeel() passen, maar die doet bv nog geen inkprijs. -- Later nog eens TODO UPDATE bes_srtdeel SET bes_srtgroep_key = l_srtgroep_key, bes_srtdeel_omschrijving = rec.ins_srtdeel_omschrijving, bes_srtdeel_image = rec.ins_srtdeel_image, bes_srtdeel_btw = rec.ins_srtdeel_btw, bes_srtdeel_eenheid = rec.ins_srtdeel_eenheid, bes_srtdeel_vervaldatum = rec.ins_srtdeel_vervaldatum, bes_srtdeel_veelvoud = rec.ins_srtdeel_veelvoud, bes_srtdeel_minimum = rec.ins_srtdeel_minimum, bes_staffeltabel_key = rec.bes_staffeltabel_key, bes_srtdeel_wijzigdagen = rec.ins_srtdeel_wijzigdagen, bes_srtdeel_annuleerdagen = rec.ins_srtdeel_annuleerdagen, bes_srtdeel_opmerking = rec.ins_srtdeel_opmerking WHERE bes_srtdeel_verwijder IS NULL AND bes_srtdeel_key = rec.bes_srtdeel_key; IF l_omschrijving <> rec.ins_srtdeel_omschrijving THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Omschrijving ' || l_omschrijving || ' -> ' || rec.ins_srtdeel_omschrijving ); END IF; bes.upsert_srtdeel_prijs (rec.bes_srtdeel_key, rec.ins_srtdeel_prijs, rec.ins_srtdeel_inkprijs); IF l_prijs <> rec.ins_srtdeel_prijs THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Prijs ' || l_prijs || ' -> ' || rec.ins_srtdeel_prijs ); END IF; IF l_inkprijs <> rec.ins_srtdeel_inkprijs THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Inkoopprijs ' || l_inkprijs || ' -> ' || rec.ins_srtdeel_inkprijs ); END IF; IF l_veelvoud <> rec.ins_srtdeel_veelvoud THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Bestelveelvoud ' || l_veelvoud || ' -> ' || rec.ins_srtdeel_veelvoud ); END IF; IF l_minimum <> rec.ins_srtdeel_minimum THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Bestelminimum ' || l_minimum || ' -> ' || rec.ins_srtdeel_minimum ); END IF; IF l_wijzigdagen <> rec.ins_srtdeel_wijzigdagen THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Wijzigdagen ' || l_wijzigdagen || ' -> ' || rec.ins_srtdeel_wijzigdagen ); END IF; IF l_annuleerdagen <> rec.ins_srtdeel_annuleerdagen THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Annuleerdagen ' || l_annuleerdagen || ' -> ' || rec.ins_srtdeel_annuleerdagen ); END IF; IF l_opmerking <> rec.ins_srtdeel_opmerking THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_opmerking || ' is gewijzigd', 'Opmerking ' || l_opmerking || ' -> ' || rec.ins_srtdeel_opmerking ); END IF; ccount := ccount + 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, ''); END; END LOOP; fac.imp_writelog ( p_import_key, 'S', v_aanduiding || 'Er zijn ' || TO_CHAR (ccount) || ' artikelen bijgewerkt', '' ); COMMIT; -- INSERT SRTDEEL ccount := 0; FOR rec IN c_inssrtdeel (pdisc_key, pbedr_key) LOOP BEGIN v_errormsg := 'Fout bij bepalen groep ' || rec.ins_srtgroep_omschrijving; SELECT bes_srtgroep_key INTO l_srtgroep_key FROM bes_srtgroep WHERE bes_srtgroep_verwijder IS NULL AND ins_discipline_key = pdisc_key AND UPPER (bes_srtgroep_omschrijving) = UPPER (rec.ins_srtgroep_omschrijving); v_errormsg := 'Fout bij toevoegen artikel ' || rec.ins_srtdeel_nr; INSERT INTO bes_srtdeel (bes_srtgroep_key, bes_srtdeel_nr, bes_srtdeel_omschrijving, bes_srtdeel_image, bes_srtdeel_btw, bes_srtdeel_eenheid, bes_srtdeel_dimensie, prs_bedrijf_key, bes_srtdeel_vervaldatum, bes_srtdeel_veelvoud, bes_srtdeel_minimum, bes_staffeltabel_key, bes_srtdeel_wijzigdagen, bes_srtdeel_annuleerdagen, bes_srtdeel_opmerking) VALUES (l_srtgroep_key, rec.ins_srtdeel_nr, rec.ins_srtdeel_omschrijving, rec.ins_srtdeel_image, rec.ins_srtdeel_btw, rec.ins_srtdeel_eenheid, 0, pbedr_key, rec.ins_srtdeel_vervaldatum, rec.ins_srtdeel_veelvoud, rec.ins_srtdeel_minimum, rec.bes_staffeltabel_key, rec.ins_srtdeel_wijzigdagen, rec.ins_srtdeel_annuleerdagen, rec.ins_srtdeel_opmerking) RETURNING bes_srtdeel_key INTO l_bes_srtdeel_key; bes.upsert_srtdeel_prijs (l_bes_srtdeel_key, rec.ins_srtdeel_prijs, rec.ins_srtdeel_inkprijs); fac.imp_writelog ( p_import_key, 'I', v_aanduiding || 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is toegevoegd', '' ); ccount := ccount + 1; EXCEPTION WHEN DUP_VAL_ON_INDEX THEN v_errormsg := 'Artikelnummer dubbel in importbestand'; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, ''); 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, ''); END; END LOOP; fac.imp_writelog ( p_import_key, 'S', v_aanduiding || 'Er zijn ' || TO_CHAR (ccount) || ' artikelen toegevoegd', '' ); COMMIT; END; BEGIN -- Doorloop alle catalogi/ bedrijven. Er kunnen er in theorie meerdere tegelijk zijn FOR rec IN (SELECT DISTINCT ins_discipline_key, prs_bedrijf_key FROM fac_imp_catalogus WHERE fac_import_key = p_import_key) LOOP BEGIN -- Puur voor logging toch even catalogus- en bedrijfsnaam bepalen! v_aanduiding := '[' || TO_CHAR (rec.ins_discipline_key) || '] '; v_errormsg := 'Fout bepalen catalogus'; SELECT ins_discipline_omschrijving INTO v_disc_oms FROM ins_tab_discipline WHERE ins_discipline_key = rec.ins_discipline_key; v_aanduiding := '[' || TO_CHAR (rec.prs_bedrijf_key) || '] '; v_errormsg := 'Fout bepalen bedrijf'; SELECT prs_bedrijf_naam INTO v_bedr_naam FROM prs_v_aanwezigbedrijf WHERE prs_bedrijf_key = rec.prs_bedrijf_key; fac.imp_writelog ( p_import_key, 'I', 'Import van catalogus ' || v_disc_oms || '/' || v_bedr_naam, 'discipline: ' || rec.ins_discipline_key || ', bedrijf: ' || rec.prs_bedrijf_key ); COMMIT; v_aanduiding := '[' || v_disc_oms || '|' || v_bedr_naam || '] '; l_update_catalogus (rec.ins_discipline_key, rec.prs_bedrijf_key); 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, ''); COMMIT; END; 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, 'Verwerken catalogus afgebroken!'); END fac_update_catalogus; / CREATE OR REPLACE PROCEDURE fac_import_oprognose ( p_import_key IN NUMBER ) AS v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line v_fielddelimitor VARCHAR2 (2); v_errormsg VARCHAR2 (200); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); header_is_valid NUMBER; -- v_objectcode VARCHAR2 (128); v_ele_ondbouw VARCHAR2 (128); v_han_pk VARCHAR2 (128); v_element VARCHAR2 (128); v_locatie VARCHAR2 (128); v_handeling VARCHAR2 (1024); v_gebrek VARCHAR2 (1024); v_hoeveelheid VARCHAR2 (128); v_eenheid VARCHAR2 (128); v_prijs VARCHAR2 (128); v_startjaar VARCHAR2 (128); -- v_ongeldig NUMBER; CURSOR c1 IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; rec1 c1%ROWTYPE; BEGIN v_fielddelimitor := fac.import_delimiter(p_import_key); header_is_valid := 0; -- Clear old importdata DELETE FROM fac_imp_oprognose; FOR rec1 IN c1 LOOP BEGIN v_ongeldig := 0; IF header_is_valid = 0 THEN -- de eerste regel vinden we wel best header_is_valid := 1; v_ongeldig := 1; ELSE v_errormsg := 'Fout bij opvragen te importeren rij'; v_newline := rec1.fac_imp_file_line; fac.imp_getfield (v_newline, v_fielddelimitor, v_objectcode); fac.imp_getfield (v_newline, v_fielddelimitor, v_ele_ondbouw); fac.imp_getfield (v_newline, v_fielddelimitor, v_han_pk); fac.imp_getfield (v_newline, v_fielddelimitor, v_element); fac.imp_getfield (v_newline, v_fielddelimitor, v_locatie); fac.imp_getfield (v_newline, v_fielddelimitor, v_handeling); fac.imp_getfield (v_newline, v_fielddelimitor, v_gebrek); fac.imp_getfield (v_newline, v_fielddelimitor, v_hoeveelheid); fac.imp_getfield (v_newline, v_fielddelimitor, v_eenheid); fac.imp_getfield (v_newline, v_fielddelimitor, v_prijs); fac.imp_getfield (v_newline, v_fielddelimitor, v_startjaar); END IF; IF v_ongeldig = 0 THEN v_errormsg := 'Fout bij inlezen te importeren rij'; INSERT INTO fac_imp_oprognose (objectcode, ele_ondbouw, han_pk, ELEMENT, locatie, handeling, gebrek, hoeveelheid, eenheid, prijs, startjaar ) VALUES (v_objectcode, v_ele_ondbouw, v_han_pk, v_element, v_locatie, v_handeling, v_gebrek, v_hoeveelheid, v_eenheid, REPLACE (v_prijs, ',', '.'), v_startjaar ); END IF; END; END LOOP; EXCEPTION WHEN OTHERS THEN oracle_err_mes := SUBSTR (SQLERRM, 1, 1000); v_errormsg := oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Regel:' || v_newline); END fac_import_oprognose; / CREATE OR REPLACE PROCEDURE fac_update_oprognose ( p_import_key IN NUMBER ) AS -- Constanten tbv bepalen mld_kenmerk_key c_han_pk VARCHAR2 (30) := 'OPROGNOSE_ID'; c_hoeveelheid VARCHAR2 (30) := 'HOEVEELHEID'; c_eenheid VARCHAR2 (30) := 'EENHEID'; c_prijs VARCHAR2 (30) := 'PRIJS'; -- Constanten overig c_discipline_omschrijving VARCHAR2 (60) := 'Planmatig onderhoud'; c_stdmelding_notfrontend NUMBER (1) := 1; c_meldbron_upper VARCHAR2 (30) := 'SYSTEM'; c_stdmelding_uitvoertijd NUMBER (3) := 260; -- Aantal werkdagen ongeveer c_melding_planbaar NUMBER (1) := 1; -- Planbaar c_melding_module VARCHAR2 (3) := 'MLD'; c_kosten_klant NUMBER (1) := TO_NUMBER (NULL); c_melding_status NUMBER (10) := 2; -- Ingevoerd c_mmddstart VARCHAR2 (4) := '0101'; c_mmddeind VARCHAR2 (4) := '1231'; c_melder_setting fac_usrdata.fac_usrdata_upper%TYPE := 'OP_MELDERKEY'; -- Logging currentversion fac_module.fac_module_version%TYPE; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_errormsg VARCHAR2 (1024); v_errormsg2 VARCHAR2 (1024); v_melding_datum DATE; v_melding_uitvoertijd NUMBER (3); -- Cursor CURSOR c1 IS SELECT * FROM fac_imp_oprognose; rec1 c1%ROWTYPE; -- Overig stdmelding_key NUMBER (10); discipline_key NUMBER (10); meldbron_key NUMBER (10); locatie_key NUMBER (10); gebouw_key NUMBER (10); kenmerk_key NUMBER (10); kenmerk_key_han_pk NUMBER (10); kenmerk_key_hoeveelheid NUMBER (10); kenmerk_key_eenheid NUMBER (10); kenmerk_key_prijs NUMBER (10); melding_key NUMBER (10); perslid_key NUMBER (10); kostenplaats_key NUMBER (10); perslid_naam VARCHAR2 (30); melding_new BOOLEAN; v_count_success NUMBER (10) := 0; v_count_fail NUMBER (10) := 0; stdm_default_disc mld_stdmelding.mld_stdmelding_default_disc%TYPE; FUNCTION lgetusrsetting (str VARCHAR2) RETURN VARCHAR2 IS lresult fac_usrdata.fac_usrdata_omschr%TYPE; BEGIN SELECT fac_usrdata_omschr INTO lresult FROM fac_usrdata WHERE fac_usrtab_key = (SELECT fac_usrtab_key FROM fac_usrtab WHERE fac_usrtab_object = 'USR_INSTELLINGEN') AND fac_usrdata_upper = UPPER (str); RETURN lresult; EXCEPTION WHEN NO_DATA_FOUND THEN RETURN ''; END; -- -- Geeft de kenmerkkey van kenmerk met UPPER-naam (label) pkenmerkkid FUNCTION lgetkenmerkkey (pkenmerkid IN VARCHAR2) RETURN NUMBER AS v_result mld_kenmerk.mld_kenmerk_key%TYPE; BEGIN BEGIN SELECT MIN (mld_kenmerk_key) INTO v_result FROM mld_srtkenmerk sk, mld_kenmerk k WHERE sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key AND sk.mld_srtkenmerk_upper = UPPER (pkenmerkid); EXCEPTION WHEN OTHERS THEN v_result := -1; END; RETURN v_result; END; -- -- Geeft de meldingkey van dit OPrognose record obv ID, -1 als die niet bestaat FUNCTION lgetmeldingkey (poprognoseid IN VARCHAR2, pidkey IN NUMBER) RETURN NUMBER AS v_result mld_kenmerkmelding.mld_melding_key%TYPE; BEGIN BEGIN SELECT mld_melding_key INTO v_result FROM mld_kenmerkmelding km WHERE km.mld_kenmerkmelding_verwijder IS NULL AND UPPER (km.mld_kenmerkmelding_waarde) = UPPER (poprognoseid) AND km.mld_kenmerk_key = pidkey; EXCEPTION WHEN OTHERS THEN v_result := -1; END; RETURN v_result; END; BEGIN SELECT MAX (fac_module_version) INTO currentversion FROM fac_module; fac.imp_writelog (p_import_key, 'I', 'Facilitor OPROGNOSE import version ' || currentversion, '$Revision$' ); v_errormsg := 'Opvragen discipline_key adhv ins_discipline_omschrijving = [' || c_discipline_omschrijving || ']'; -- DBMS_OUTPUT.put_line (v_errormsg); -- Wat is de planmatigonderhoud discipline SELECT ins_discipline_key INTO discipline_key FROM ins_tab_discipline WHERE ins_discipline_omschrijving = c_discipline_omschrijving AND ins_discipline_module = 'MLD'; v_errormsg := 'Opvragen meldbron_key adhv mld_meldbron_upper = [' || c_meldbron_upper || ']'; -- DBMS_OUTPUT.put_line (v_errormsg); SELECT mld_meldbron_key INTO meldbron_key FROM mld_meldbron WHERE mld_meldbron_upper = c_meldbron_upper; perslid_key := lgetusrsetting (c_melder_setting); kenmerk_key_han_pk := lgetkenmerkkey (c_han_pk); kenmerk_key_hoeveelheid := lgetkenmerkkey (c_hoeveelheid); kenmerk_key_eenheid := lgetkenmerkkey (c_eenheid); kenmerk_key_prijs := lgetkenmerkkey (c_prijs); FOR rec1 IN c1 LOOP BEGIN v_errormsg := 'Opvragen mld_stdmelding_key adhv mld_stdmelding_upper = [' || rec1.ELEMENT || ']'; -- DBMS_OUTPUT.put_line (v_errormsg); SELECT MAX (mld_stdmelding_key) INTO stdmelding_key FROM mld_stdmelding WHERE mld_stdmelding_upper = UPPER (SUBSTR (rec1.ELEMENT, 1, 60)); IF stdmelding_key IS NULL THEN -- Bestaat de MLD_STDMELDING? SELECT mld_s_mld_stdmelding_key.NEXTVAL INTO stdmelding_key FROM DUAL; v_errormsg := 'Aanmaak nieuwe MLD_STD_MELDING met mld_stdmelding_omschrijving = [' || SUBSTR (rec1.ELEMENT, 1, 60) || ']'; --DBMS_OUTPUT.put_line (v_errormsg); -- Aanmaak nieuwe MLD_STDMELDING BEGIN INSERT INTO mld_stdmelding (mld_stdmelding_key, mld_ins_discipline_key, mld_stdmelding_omschrijving, mld_stdmelding_notfrontend, mld_stdmelding_t_uitvoertijd, mld_stdmelding_planbaar ) VALUES (stdmelding_key, discipline_key, SUBSTR (rec1.ELEMENT, 1, 60), c_stdmelding_notfrontend, MLD_T_UITVOERTIJD(c_stdmelding_uitvoertijd, 'D'), c_melding_planbaar ); --DBMS_OUTPUT.put_line ('inserted ' || TO_CHAR (stdmelding_key)); EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (NVL (SQLERRM, 'SQLERRM=NULL!!!'), 1, 100); v_errormsg2 := '(XORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', 'Import_oprognose: ' || v_errormsg, v_errormsg2); COMMIT; END; END IF; v_errormsg := 'Gebouw [' || rec1.objectcode || '] kan niet worden gevonden'; SELECT alg_gebouw_key INTO gebouw_key FROM alg_gebouw WHERE alg_gebouw_verwijder IS NULL AND alg_gebouw_upper = UPPER (rec1.objectcode); -- springt naar exception als niet gevonden v_errormsg := 'Fout bij bepalen locatie van gebouw met key = [' || TO_CHAR (gebouw_key) || ']'; SELECT alg_locatie_key INTO locatie_key FROM alg_gebouw WHERE alg_gebouw_key = gebouw_key; SELECT MAX (prs_kostenplaats_key) INTO kostenplaats_key FROM alg_gebouw WHERE alg_gebouw_key = gebouw_key; melding_key := lgetmeldingkey (rec1.han_pk, kenmerk_key_han_pk); melding_new := (melding_key = -1); IF melding_new THEN v_errormsg := 'Bepalen melding datum voor startjaar [' || rec1.startjaar || ']'; --Testers pas op: vereist goede nls_territory! SELECT fac.count_work_days (TO_DATE (rec1.startjaar || c_mmddstart, 'YYYYMMDD'), TO_DATE (rec1.startjaar || c_mmddeind, 'YYYYMMDD') ) INTO v_melding_uitvoertijd FROM DUAL; -- DBMS_OUTPUT.put_line (v_melding_uitvoertijd); SELECT TO_DATE (rec1.startjaar || c_mmddstart, 'YYYYMMDD') INTO v_melding_datum FROM DUAL; stdm_default_disc := fac.getDefaultBehandelteam(stdmelding_key); v_errormsg := 'Bepalen mld_melding_key voor nieuwe melding'; -- DBMS_OUTPUT.put_line (v_errormsg); SELECT mld_s_mld_melding_key.NEXTVAL INTO melding_key FROM DUAL; v_errormsg := 'Toevoegen MELDING [' || rec1.handeling || ']'; -- DBMS_OUTPUT.put_line (v_errormsg); -- Invoeren melding INSERT INTO mld_melding (mld_melding_key, mld_meldbron_key, mld_stdmelding_key, mld_alg_locatie_key, mld_alg_onroerendgoed_keys, mld_melding_t_uitvoertijd, mld_melding_module, mld_melding_omschrijving, mld_melding_opmerking, mld_kosten_klant, prs_perslid_key, mld_melding_datum, prs_kostenplaats_key, mld_melding_status, mld_melding_einddatum, mld_ins_discipline_key ) VALUES (melding_key, meldbron_key, stdmelding_key, locatie_key, gebouw_key, MLD_T_UITVOERTIJD(v_melding_uitvoertijd, 'D'), c_melding_module, rec1.handeling, rec1.gebrek, c_kosten_klant, perslid_key, v_melding_datum, kostenplaats_key, c_melding_status, TO_DATE (rec1.startjaar || c_mmddeind, 'YYYYMMDD'), stdm_default_disc ); ELSE v_errormsg := 'Bijwerken MELDING [' || rec1.handeling || ']'; -- DBMS_OUTPUT.put_line (v_errormsg); UPDATE mld_melding SET mld_melding_omschrijving = rec1.handeling, mld_melding_opmerking = rec1.gebrek WHERE mld_melding_key = melding_key; END IF; -- c_han_pk IF melding_new THEN v_errormsg := 'OPROGNOSE_ID van melding [' || TO_CHAR (melding_key) || '] = [' || rec1.han_pk || ']'; -- DBMS_OUTPUT.put_line (v_errormsg); -- v_errormsg := 'Insert FlexProp OPROGNOSE_ID met waarde = <'||rec1.han_pk||'>'; INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde) VALUES (melding_key, kenmerk_key_han_pk, rec1.han_pk); END IF; -- c_hoeveelheid DELETE FROM mld_kenmerkmelding WHERE mld_melding_key = melding_key AND mld_kenmerk_key = kenmerk_key_hoeveelheid; IF rec1.hoeveelheid IS NOT NULL THEN v_errormsg := 'HOEVEELHEID = [' || rec1.hoeveelheid || ']'; -- DBMS_OUTPUT.put_line (v_errormsg); INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde) VALUES (melding_key, kenmerk_key_hoeveelheid, TO_CHAR (fac.safe_to_number (REPLACE (rec1.hoeveelheid, ',', '.'))) ); END IF; -- c_eenheid DELETE FROM mld_kenmerkmelding WHERE mld_melding_key = melding_key AND mld_kenmerk_key = kenmerk_key_eenheid; IF rec1.eenheid IS NOT NULL THEN v_errormsg := 'EENHEID = [' || rec1.eenheid || ']'; -- DBMS_OUTPUT.put_line (v_errormsg); INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde) VALUES (melding_key, kenmerk_key_eenheid, rec1.eenheid); END IF; -- c_prijs DELETE FROM mld_kenmerkmelding WHERE mld_melding_key = melding_key AND mld_kenmerk_key = kenmerk_key_prijs; IF rec1.eenheid IS NOT NULL THEN v_errormsg := 'PRIJS = [' || rec1.prijs || ']'; -- DBMS_OUTPUT.put_line (v_errormsg); INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde) VALUES (melding_key, kenmerk_key_prijs, TO_CHAR (fac.safe_to_number (rec1.prijs))); END IF; -- Alles goed? Dan deze regel committen! COMMIT; v_count_success := v_count_success + 1; EXCEPTION WHEN OTHERS THEN -- Foutje? Deze regel terugdraaien v_count_fail := v_count_fail + 1; ROLLBACK; oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (NVL (SQLERRM, 'SQLERRM=NULL!!!'), 1, 100); fac.imp_writelog (p_import_key, 'E', v_errormsg, oracle_err_mes); -- de logging wel committen COMMIT; END; END LOOP; fac.imp_writelog (p_import_key, 'I', 'Import gereed, ' || v_count_success || ' regels ingelezen, ' || v_count_fail || ' regels geweigerd', '' ); COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (NVL (SQLERRM, 'SQLERRM=NULL!!!'), 1, 100); v_errormsg := '(' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', 'Onverwachte fout', v_errormsg); END; / --// PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports --// PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports --// PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports --// 1. ALG CREATE OR REPLACE PROCEDURE fac_import_onrgoed1 (p_import_key IN NUMBER) AS 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); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); header_is_valid NUMBER; v_count_tot NUMBER (10); v_count_imp NUMBER (10); v_ongeldig NUMBER (1); v_aanduiding VARCHAR2 (200); v_alg_kenmerk_key1 VARCHAR2 (255); v_alg_kenmerk_key2 VARCHAR2 (255); v_alg_kenmerk_key3 VARCHAR2 (255); v_alg_kenmerk_key4 VARCHAR2 (255); v_alg_kenmerk_key5 VARCHAR2 (255); v_alg_kenmerk_key6 VARCHAR2 (255); v_alg_kenmerk_key7 VARCHAR2 (255); v_alg_kenmerk_key8 VARCHAR2 (255); v_alg_kenmerk_key9 VARCHAR2 (255); v_alg_kenmerk_key10 VARCHAR2 (255); -- De importvelden: v_regio_omschrijving VARCHAR2 (255); -- 30 v_district_omschrijving VARCHAR2 (255); -- 30 v_locatie_code VARCHAR2 (255); -- 10 v_locatie_omschrijving VARCHAR2 (255); -- 60 v_locatie_verantw VARCHAR2 (255); -- 30 v_locatie_verantw_tel VARCHAR2 (255); -- 15 v_locatie_adres VARCHAR2 (255); -- 50 v_locatie_postcode VARCHAR2 (255); -- 12 v_locatie_plaats VARCHAR2 (255); -- 30 v_locatie_land VARCHAR2 (255); -- 30 v_locatie_post_adres VARCHAR2 (255); -- 50 v_locatie_post_postcode VARCHAR2 (255); -- 12 v_locatie_post_plaats VARCHAR2 (255); -- 30 v_locatie_post_land VARCHAR2 (255); -- 30 v_srtgebouw_omschrijving VARCHAR2 (255); -- 30 v_gebouw_code VARCHAR2 (255); -- 10 v_gebouw_naam VARCHAR2 (255); -- 30 v_gebouw_adres VARCHAR2 (255); -- 50 v_gebouw_postcode VARCHAR2 (255); -- 12 v_alg_kenmerkwaarde1 VARCHAR2 (4000); v_alg_kenmerkwaarde2 VARCHAR2 (4000); v_alg_kenmerkwaarde3 VARCHAR2 (4000); v_alg_kenmerkwaarde4 VARCHAR2 (4000); v_alg_kenmerkwaarde5 VARCHAR2 (4000); v_alg_kenmerkwaarde6 VARCHAR2 (4000); v_alg_kenmerkwaarde7 VARCHAR2 (4000); v_alg_kenmerkwaarde8 VARCHAR2 (4000); v_alg_kenmerkwaarde9 VARCHAR2 (4000); v_alg_kenmerkwaarde10 VARCHAR2 (4000); CURSOR c1 IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; -- Controleer tijdens import-fase alleen op (uniek) bestaan van kenmerk (of -- deze is gedefinieerd voor gebouw/locatie, volgt tijdens de update-fase)! FUNCTION bepaal_kenmerk_key (ok IN VARCHAR) RETURN NUMBER IS v_kenmerk_key NUMBER; BEGIN IF fac.safe_to_number (ok) IS NULL THEN -- Kenmerkwaarde is alfanumeriek (dus omschrijving)! SELECT alg_kenmerk_key INTO v_kenmerk_key FROM alg_kenmerk WHERE alg_kenmerk_verwijder IS NULL AND alg_kenmerk_niveau IN ('L', 'G') AND alg_kenmerk_upper = UPPER (ok) AND alg_kenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'r', 'S', 'X', 'V'); ELSE -- Kenmerkwaarde is numeriek (dus key)! SELECT alg_kenmerk_key INTO v_kenmerk_key FROM alg_kenmerk WHERE alg_kenmerk_verwijder IS NULL AND alg_kenmerk_niveau IN ('L', 'G') AND alg_kenmerk_key = fac.safe_to_number (ok) AND alg_kenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'r', 'S', 'X', 'V'); END IF; RETURN v_kenmerk_key; EXCEPTION WHEN NO_DATA_FOUND THEN IF ok IS NULL OR UPPER (ok) LIKE 'KENMERK%' THEN RETURN NULL; ELSE fac.imp_writelog (p_import_key, 'W', 'Fout bij bepalen kenmerk [' || ok || ']', 'Bestaat niet of type ongeldig'); COMMIT; RETURN NULL; END IF; WHEN OTHERS THEN fac.imp_writelog (p_import_key, 'W', 'Fout bij bepalen kenmerk [' || ok || ']', 'Kan kenmerk niet 1-duidig bepalen'); COMMIT; RETURN NULL; END; BEGIN -- Eerst opruiming DELETE FROM fac_imp_onrgoed1; COMMIT; v_count_tot := 0; v_count_imp := 0; header_is_valid := 0; FOR rec1 IN c1 LOOP BEGIN v_errormsg := 'Fout FETCH importregel'; v_newline := rec1.fac_imp_file_line; v_errormsg := 'Fout bij opvragen importregel'; v_aanduiding := ''; v_ongeldig := 0; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_delim, v_regio_omschrijving); fac.imp_getfield (v_newline, c_delim, v_district_omschrijving); fac.imp_getfield (v_newline, c_delim, v_locatie_code); fac.imp_getfield (v_newline, c_delim, v_locatie_omschrijving); fac.imp_getfield (v_newline, c_delim, v_locatie_verantw); fac.imp_getfield (v_newline, c_delim, v_locatie_verantw_tel); fac.imp_getfield (v_newline, c_delim, v_locatie_adres); fac.imp_getfield (v_newline, c_delim, v_locatie_postcode); fac.imp_getfield (v_newline, c_delim, v_locatie_plaats); fac.imp_getfield (v_newline, c_delim, v_locatie_land); fac.imp_getfield (v_newline, c_delim, v_locatie_post_adres); fac.imp_getfield (v_newline, c_delim, v_locatie_post_postcode); fac.imp_getfield (v_newline, c_delim, v_locatie_post_plaats); fac.imp_getfield (v_newline, c_delim, v_locatie_post_land); fac.imp_getfield (v_newline, c_delim, v_srtgebouw_omschrijving); fac.imp_getfield (v_newline, c_delim, v_gebouw_code); fac.imp_getfield (v_newline, c_delim, v_gebouw_naam); fac.imp_getfield (v_newline, c_delim, v_gebouw_adres); fac.imp_getfield (v_newline, c_delim, v_gebouw_postcode); fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde1); fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde2); fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde3); fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde4); fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde5); fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde6); fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde7); fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde8); fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde9); fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde10); v_aanduiding := '[' || v_locatie_code || '|' || v_gebouw_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_regio_omschrijving) = 'REGIO' AND UPPER (v_district_omschrijving) = 'DISTRICT' AND UPPER (v_locatie_code) = 'LOCATIECODE' AND UPPER (v_locatie_omschrijving) = 'LOCATIEOMSCHRIJVING' AND UPPER (v_locatie_verantw) = 'CONTACTPERSOON' AND UPPER (v_locatie_verantw_tel) = 'TELEFOONNUMMER' AND UPPER (v_locatie_adres) = 'BEZOEKADRES' AND UPPER (v_locatie_postcode) = 'POSTCODE' AND UPPER (v_locatie_plaats) = 'PLAATS' AND UPPER (v_locatie_land) = 'LAND' AND UPPER (v_locatie_post_adres) = 'POSTADRES' AND UPPER (v_locatie_post_postcode) = 'POSTPOSTCODE' AND UPPER (v_locatie_post_plaats) = 'POSTPLAATS' AND UPPER (v_locatie_post_land) LIKE 'POSTLAND' AND UPPER (v_srtgebouw_omschrijving) = 'GEBOUWFUNCTIE' AND UPPER (v_gebouw_code) = 'GEBOUWCODE' AND UPPER (v_gebouw_naam) = 'GEBOUWNAAM' AND UPPER (v_gebouw_adres) = 'GEBOUWADRES' AND UPPER (v_gebouw_postcode) = 'GEBOUWPOSTCODE' THEN v_alg_kenmerk_key1 := bepaal_kenmerk_key (v_alg_kenmerkwaarde1); v_alg_kenmerk_key2 := bepaal_kenmerk_key (v_alg_kenmerkwaarde2); v_alg_kenmerk_key3 := bepaal_kenmerk_key (v_alg_kenmerkwaarde3); v_alg_kenmerk_key4 := bepaal_kenmerk_key (v_alg_kenmerkwaarde4); v_alg_kenmerk_key5 := bepaal_kenmerk_key (v_alg_kenmerkwaarde5); v_alg_kenmerk_key6 := bepaal_kenmerk_key (v_alg_kenmerkwaarde6); v_alg_kenmerk_key7 := bepaal_kenmerk_key (v_alg_kenmerkwaarde7); v_alg_kenmerk_key8 := bepaal_kenmerk_key (v_alg_kenmerkwaarde8); v_alg_kenmerk_key9 := bepaal_kenmerk_key (v_alg_kenmerkwaarde9); v_alg_kenmerk_key10 := bepaal_kenmerk_key (v_alg_kenmerkwaarde10); header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden v_errormsg := 'Regio-omschrijving leeg of te lang'; v_regio_omschrijving := TRIM (v_regio_omschrijving); IF v_regio_omschrijving IS NULL THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Regel overgeslagen'); ELSIF LENGTH (v_regio_omschrijving) > 30 THEN v_regio_omschrijving := SUBSTR (v_regio_omschrijving, 1, 30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg , 'Regio-omschrijving afgebroken tot [' || v_regio_omschrijving || ']'); END IF; -- v_errormsg := 'District-omschrijving leeg of te lang'; v_district_omschrijving := TRIM (v_district_omschrijving); IF v_district_omschrijving IS NULL THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Regel overgeslagen'); ELSIF LENGTH (v_district_omschrijving) > 30 THEN v_district_omschrijving := SUBSTR (v_district_omschrijving, 1, 30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg , 'District-omschrijving afgebroken tot [' || v_district_omschrijving || ']'); END IF; -- v_errormsg := 'Locatiecode leeg of te lang'; v_locatie_code := TRIM (v_locatie_code); IF v_locatie_code IS NULL OR LENGTH (v_locatie_code) > 10 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Regel overgeslagen'); END IF; -- v_errormsg := 'Locatie-omschrijving leeg of te lang'; v_locatie_omschrijving := TRIM (v_locatie_omschrijving); IF v_locatie_omschrijving IS NULL THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Regel overgeslagen'); ELSIF LENGTH (v_locatie_omschrijving) > 60 THEN v_locatie_omschrijving := SUBSTR (v_locatie_omschrijving, 1, 60); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg , 'Locatie-omschrijving afgebroken tot [' || v_locatie_omschrijving || ']'); END IF; -- v_errormsg := 'Naam te lang (contactpersoon)'; v_locatie_verantw := TRIM (v_locatie_verantw); IF LENGTH (v_locatie_verantw) > 30 THEN v_locatie_verantw := SUBSTR (v_locatie_verantw, 1, 30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg , 'Naam afgebroken tot [' || v_locatie_verantw || ']'); END IF; -- v_errormsg := 'Telefoonnummer te lang (contactpersoon)'; v_locatie_verantw_tel := TRIM (v_locatie_verantw_tel); IF LENGTH (v_locatie_verantw_tel) > 20 THEN v_locatie_verantw_tel := SUBSTR (v_locatie_verantw_tel, 1, 20); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg , 'Telefoonnummer afgebroken tot [' || v_locatie_verantw_tel || ']'); END IF; -- v_errormsg := 'Adres te lang (bezoekadres)'; v_locatie_adres := TRIM (v_locatie_adres); IF LENGTH (v_locatie_adres) > 50 THEN v_locatie_adres := SUBSTR (v_locatie_adres, 1, 50); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg , 'Adres afgebroken tot ]' || v_locatie_adres || ']'); END IF; -- v_errormsg := 'Postcode te lang (bezoekadres)'; v_locatie_postcode := TRIM (v_locatie_postcode); IF LENGTH (v_locatie_postcode) > 12 THEN v_locatie_postcode := SUBSTR (v_locatie_postcode, 1, 12); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg , 'Postcode afgebroken tot [' || v_locatie_postcode || ']'); END IF; -- v_errormsg := 'Plaatsnaam te lang (bezoekadres)'; v_locatie_plaats := TRIM (v_locatie_plaats); IF LENGTH (v_locatie_plaats) > 30 THEN v_locatie_plaats := SUBSTR (v_locatie_plaats, 1, 30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg , 'Plaatsnaam afgebroken tot [' || v_locatie_plaats || ']'); END IF; -- v_errormsg := 'Landnaam te lang (bezoekadres)'; v_locatie_land := TRIM (v_locatie_land); IF LENGTH (v_locatie_land) > 30 THEN v_locatie_land := SUBSTR (v_locatie_land, 1, 30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg , 'Landnaam afgebroken tot [' || v_locatie_land || ']'); END IF; -- v_errormsg := 'Adres te lang (postadres)'; v_locatie_post_adres := TRIM (v_locatie_post_adres); IF LENGTH (v_locatie_post_adres) > 50 THEN v_locatie_post_adres := SUBSTR (v_locatie_post_adres, 1, 50); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg , 'Adres afgebroken tot [' || v_locatie_post_adres || ']'); END IF; -- v_errormsg := 'Postcode te lang (postadres)'; v_locatie_post_postcode := TRIM (v_locatie_post_postcode); IF LENGTH (v_locatie_post_postcode) > 12 THEN v_locatie_post_postcode := SUBSTR (v_locatie_post_postcode, 1, 12); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg , 'Postcode afgebroken tot [' || v_locatie_post_postcode || ']'); END IF; -- v_errormsg := 'Plaatsnaam te lang (postadres)'; v_locatie_post_plaats := TRIM (v_locatie_post_plaats); IF LENGTH (v_locatie_post_plaats) > 30 THEN v_locatie_post_plaats := SUBSTR (v_locatie_post_plaats, 1, 30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg , 'Plaatsnaam afgebroken tot [' || v_locatie_post_plaats || ']'); END IF; -- v_errormsg := 'Landnaam te lang (postadres)'; v_locatie_post_land := TRIM (v_locatie_post_land); IF LENGTH (v_locatie_post_land) > 30 THEN v_locatie_post_land := SUBSTR (v_locatie_post_land, 1, 30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg ,'Landnaam afgebroken tot [' || v_locatie_post_land || ']'); END IF; -- v_errormsg := 'Gebouwfunctie te lang'; v_srtgebouw_omschrijving := TRIM (v_srtgebouw_omschrijving); IF LENGTH (v_srtgebouw_omschrijving) > 30 THEN v_srtgebouw_omschrijving := SUBSTR (v_srtgebouw_omschrijving, 1, 30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg , 'Gebouwfunctie afgebroken tot [' || v_srtgebouw_omschrijving || ']'); END IF; -- v_errormsg := 'Gebouwcode leeg of te lang'; v_gebouw_code := TRIM (v_gebouw_code); IF v_gebouw_code IS NULL OR LENGTH (v_gebouw_code) > 12 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Regel overgeslagen'); END IF; -- v_errormsg := 'Gebouwnaam leeg of te lang'; v_gebouw_naam := TRIM (v_gebouw_naam); IF v_gebouw_naam IS NULL THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Regel overgeslagen'); ELSIF LENGTH (v_gebouw_naam) > 60 THEN v_gebouw_naam := SUBSTR (v_gebouw_naam, 1, 60); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg , 'Gebouwnaam afgebroken tot [' || v_gebouw_naam || ']' ); END IF; -- v_errormsg := 'Gebouwadres te lang'; v_gebouw_adres := TRIM (v_gebouw_adres); IF LENGTH (v_gebouw_adres) > 50 THEN v_gebouw_adres := SUBSTR (v_gebouw_adres, 1, 50); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg , 'Gebouwadres afgebroken tot [' || v_gebouw_adres || ']'); END IF; -- v_errormsg := 'Gebouwpostcode te lang'; v_gebouw_postcode := TRIM (v_gebouw_postcode); IF LENGTH (v_gebouw_postcode) > 12 THEN v_gebouw_postcode := SUBSTR (v_gebouw_postcode, 1, 12); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg , 'Gebouw postcode afgebroken tot [' || v_gebouw_postcode || ']'); END IF; -- De rest alleen ff trimmen. v_alg_kenmerkwaarde1 := TRIM (v_alg_kenmerkwaarde1); v_alg_kenmerkwaarde2 := TRIM (v_alg_kenmerkwaarde2); v_alg_kenmerkwaarde3 := TRIM (v_alg_kenmerkwaarde3); v_alg_kenmerkwaarde4 := TRIM (v_alg_kenmerkwaarde4); v_alg_kenmerkwaarde5 := TRIM (v_alg_kenmerkwaarde5); v_alg_kenmerkwaarde6 := TRIM (v_alg_kenmerkwaarde6); v_alg_kenmerkwaarde7 := TRIM (v_alg_kenmerkwaarde7); v_alg_kenmerkwaarde8 := TRIM (v_alg_kenmerkwaarde8); v_alg_kenmerkwaarde9 := TRIM (v_alg_kenmerkwaarde9); v_alg_kenmerkwaarde10 := TRIM (v_alg_kenmerkwaarde10); -- Insert geformatteerde import record IF v_ongeldig = 0 THEN BEGIN v_errormsg := 'Fout bij wegschrijven importregel'; INSERT INTO fac_imp_onrgoed1 ( alg_regio_omschrijving, alg_district_omschrijving, alg_locatie_code, alg_locatie_omschrijving, alg_locatie_verantw, alg_locatie_verantw_tel, alg_locatie_adres, alg_locatie_postcode, alg_locatie_plaats, alg_locatie_land, alg_locatie_post_adres, alg_locatie_post_postcode, alg_locatie_post_plaats, alg_locatie_post_land, alg_srtgebouw_omschrijving, alg_gebouw_code, alg_gebouw_naam, alg_gebouw_adres, alg_gebouw_postcode, alg_kenmerkwaarde1, alg_kenmerkwaarde2, alg_kenmerkwaarde3, alg_kenmerkwaarde4, alg_kenmerkwaarde5, alg_kenmerkwaarde6, alg_kenmerkwaarde7, alg_kenmerkwaarde8, alg_kenmerkwaarde9, alg_kenmerkwaarde10 ) VALUES ( v_regio_omschrijving, v_district_omschrijving, v_locatie_code, v_locatie_omschrijving, v_locatie_verantw, v_locatie_verantw_tel, v_locatie_adres, v_locatie_postcode, v_locatie_plaats, v_locatie_land, v_locatie_post_adres, v_locatie_post_postcode, v_locatie_post_plaats, v_locatie_post_land, v_srtgebouw_omschrijving, v_gebouw_code, v_gebouw_naam, v_gebouw_adres, v_gebouw_postcode, DECODE (v_alg_kenmerk_key1 , NULL, v_alg_kenmerkwaarde1 , TO_CHAR (v_alg_kenmerk_key1) || '=' || SUBSTR (v_alg_kenmerkwaarde1, 1, 200) ), DECODE (v_alg_kenmerk_key2 , NULL, v_alg_kenmerkwaarde2 , TO_CHAR (v_alg_kenmerk_key2) || '=' || SUBSTR (v_alg_kenmerkwaarde2, 1, 200) ), DECODE (v_alg_kenmerk_key3 , NULL, v_alg_kenmerkwaarde3 , TO_CHAR (v_alg_kenmerk_key3) || '=' || SUBSTR (v_alg_kenmerkwaarde3, 1, 200) ), DECODE (v_alg_kenmerk_key4 , NULL, v_alg_kenmerkwaarde4 , TO_CHAR (v_alg_kenmerk_key4) || '=' || SUBSTR (v_alg_kenmerkwaarde4, 1, 200) ), DECODE (v_alg_kenmerk_key5 , NULL, v_alg_kenmerkwaarde5 , TO_CHAR (v_alg_kenmerk_key5) || '=' || SUBSTR (v_alg_kenmerkwaarde5, 1, 200) ), DECODE (v_alg_kenmerk_key6 , NULL, v_alg_kenmerkwaarde6 , TO_CHAR (v_alg_kenmerk_key6) || '=' || SUBSTR (v_alg_kenmerkwaarde6, 1, 200) ), DECODE (v_alg_kenmerk_key7 , NULL, v_alg_kenmerkwaarde7 , TO_CHAR (v_alg_kenmerk_key7) || '=' || SUBSTR (v_alg_kenmerkwaarde7, 1, 200) ), DECODE (v_alg_kenmerk_key8 , NULL, v_alg_kenmerkwaarde8 , TO_CHAR (v_alg_kenmerk_key8) || '=' || SUBSTR (v_alg_kenmerkwaarde8, 1, 200) ), DECODE (v_alg_kenmerk_key9 , NULL, v_alg_kenmerkwaarde9 , TO_CHAR (v_alg_kenmerk_key9) || '=' || SUBSTR (v_alg_kenmerkwaarde9, 1, 200) ), DECODE (v_alg_kenmerk_key10 , NULL, v_alg_kenmerkwaarde10 , TO_CHAR (v_alg_kenmerk_key10) || '=' || SUBSTR (v_alg_kenmerkwaarde10, 1, 200) ) ); COMMIT; v_count_imp := v_count_imp + 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', 'Locatie-Gebouw/#ingelezen regels: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog (p_import_key, 'S', 'Locatie-Gebouw/#ongeldige niet ingelezen importregels: ' || TO_CHAR (v_count_tot - v_count_imp), ''); 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 locaties/gebouwen afgebroken!'); END fac_import_onrgoed1; / CREATE OR REPLACE PROCEDURE fac_update_onrgoed1 (p_import_key IN NUMBER) IS v_errormsg VARCHAR2 (1000) := '-'; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_aanduiding VARCHAR2 (200); v_count_tot NUMBER (10); v_count_new NUMBER (10); v_count_upd NUMBER (10); v_count NUMBER (10); v_regio_key NUMBER (10); v_district_key NUMBER (10); v_locatie_key NUMBER (10); v_srtgebouw_key NUMBER (10); v_gebouw_key NUMBER (10); v_srtnoti_code VARCHAR2 (6); CURSOR cRegio -- Regioomschrijving uniek! IS SELECT MIN (alg_regio_omschrijving) alg_regio_omschrijving FROM fac_imp_onrgoed1 GROUP BY UPPER (alg_regio_omschrijving) ORDER BY 1; CURSOR cDistrict -- Districtomschrijving uniek binnen regio! IS SELECT MIN (alg_regio_omschrijving) alg_regio_omschrijving, MIN (alg_district_omschrijving) alg_district_omschrijving FROM fac_imp_onrgoed1 GROUP BY UPPER (alg_regio_omschrijving), UPPER (alg_district_omschrijving) ORDER BY 1, 2; CURSOR cLocatie -- Locatiecode uniek (omschrijving niet)! IS SELECT MIN (alg_regio_omschrijving) alg_regio_omschrijving, MIN (alg_district_omschrijving) alg_district_omschrijving, MIN (alg_locatie_code) alg_locatie_code, MIN (alg_locatie_omschrijving) alg_locatie_omschrijving, MIN (alg_locatie_verantw) alg_locatie_verantw, MIN (alg_locatie_verantw_tel) alg_locatie_verantw_tel, MIN (alg_locatie_adres) alg_locatie_adres, MIN (alg_locatie_postcode) alg_locatie_postcode, MIN (alg_locatie_plaats) alg_locatie_plaats, MIN (alg_locatie_land) alg_locatie_land, MIN (alg_locatie_post_adres) alg_locatie_post_adres, MIN (alg_locatie_post_postcode) alg_locatie_post_postcode, MIN (alg_locatie_post_plaats) alg_locatie_post_plaats, MIN (alg_locatie_post_land) alg_locatie_post_land, MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde1, 1, INSTR (alg_kenmerkwaarde1, '=') - 1))) kenmerk_key1, MIN(SUBSTR (alg_kenmerkwaarde1, INSTR (alg_kenmerkwaarde1, '=') + 1)) waarde1, MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde2, 1, INSTR (alg_kenmerkwaarde2, '=') - 1))) kenmerk_key2, MIN(SUBSTR (alg_kenmerkwaarde2, INSTR (alg_kenmerkwaarde2, '=') + 1)) waarde2, MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde3, 1, INSTR (alg_kenmerkwaarde3, '=') - 1))) kenmerk_key3, MIN(SUBSTR (alg_kenmerkwaarde3, INSTR (alg_kenmerkwaarde3, '=') + 1)) waarde3, MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde4, 1, INSTR (alg_kenmerkwaarde4, '=') - 1))) kenmerk_key4, MIN(SUBSTR (alg_kenmerkwaarde4, INSTR (alg_kenmerkwaarde4, '=') + 1)) waarde4, MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde5, 1, INSTR (alg_kenmerkwaarde5, '=') - 1))) kenmerk_key5, MIN(SUBSTR (alg_kenmerkwaarde5, INSTR (alg_kenmerkwaarde5, '=') + 1)) waarde5, MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde6, 1, INSTR (alg_kenmerkwaarde6, '=') - 1))) kenmerk_key6, MIN(SUBSTR (alg_kenmerkwaarde6, INSTR (alg_kenmerkwaarde6, '=') + 1)) waarde6, MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde7, 1, INSTR (alg_kenmerkwaarde7, '=') - 1))) kenmerk_key7, MIN(SUBSTR (alg_kenmerkwaarde7, INSTR (alg_kenmerkwaarde7, '=') + 1)) waarde7, MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde8, 1, INSTR (alg_kenmerkwaarde8, '=') - 1))) kenmerk_key8, MIN(SUBSTR (alg_kenmerkwaarde8, INSTR (alg_kenmerkwaarde8, '=') + 1)) waarde8, MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde9, 1, INSTR (alg_kenmerkwaarde9, '=') - 1))) kenmerk_key9, MIN(SUBSTR (alg_kenmerkwaarde9, INSTR (alg_kenmerkwaarde9, '=') + 1)) waarde9, MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde10, 1, INSTR (alg_kenmerkwaarde10, '=') - 1))) kenmerk_key10, MIN(SUBSTR (alg_kenmerkwaarde10, INSTR (alg_kenmerkwaarde10, '=') + 1)) waarde10 FROM fac_imp_onrgoed1 GROUP BY UPPER (alg_regio_omschrijving), UPPER (alg_district_omschrijving), UPPER (alg_locatie_code) ORDER BY 1, 2, 3; CURSOR cSrtGebouw -- Gebouwfunctie uniek! IS SELECT MIN (alg_srtgebouw_omschrijving) alg_srtgebouw_omschrijving FROM fac_imp_onrgoed1 WHERE alg_srtgebouw_omschrijving IS NOT NULL GROUP BY UPPER (alg_srtgebouw_omschrijving) ORDER BY 1; CURSOR cGebouw -- Gebouwcode uniek binnen locatie (naam niet)! IS SELECT MIN (alg_regio_omschrijving) alg_regio_omschrijving, MIN (alg_district_omschrijving) alg_district_omschrijving, MIN (alg_locatie_code) alg_locatie_code, MIN (alg_gebouw_code) alg_gebouw_code, MIN (alg_gebouw_naam) alg_gebouw_naam, MIN (alg_srtgebouw_omschrijving) alg_srtgebouw_omschrijving, MIN (alg_gebouw_adres) alg_gebouw_adres, MIN (alg_gebouw_postcode) alg_gebouw_postcode, MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde1, 1, INSTR (alg_kenmerkwaarde1, '=') - 1))) kenmerk_key1, MIN(SUBSTR (alg_kenmerkwaarde1, INSTR (alg_kenmerkwaarde1, '=') + 1)) waarde1, MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde2, 1, INSTR (alg_kenmerkwaarde2, '=') - 1))) kenmerk_key2, MIN(SUBSTR (alg_kenmerkwaarde2, INSTR (alg_kenmerkwaarde2, '=') + 1)) waarde2, MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde3, 1, INSTR (alg_kenmerkwaarde3, '=') - 1))) kenmerk_key3, MIN(SUBSTR (alg_kenmerkwaarde3, INSTR (alg_kenmerkwaarde3, '=') + 1)) waarde3, MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde4, 1, INSTR (alg_kenmerkwaarde4, '=') - 1))) kenmerk_key4, MIN(SUBSTR (alg_kenmerkwaarde4, INSTR (alg_kenmerkwaarde4, '=') + 1)) waarde4, MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde5, 1, INSTR (alg_kenmerkwaarde5, '=') - 1))) kenmerk_key5, MIN(SUBSTR (alg_kenmerkwaarde5, INSTR (alg_kenmerkwaarde5, '=') + 1)) waarde5, MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde6, 1, INSTR (alg_kenmerkwaarde6, '=') - 1))) kenmerk_key6, MIN(SUBSTR (alg_kenmerkwaarde6, INSTR (alg_kenmerkwaarde6, '=') + 1)) waarde6, MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde7, 1, INSTR (alg_kenmerkwaarde7, '=') - 1))) kenmerk_key7, MIN(SUBSTR (alg_kenmerkwaarde7, INSTR (alg_kenmerkwaarde7, '=') + 1)) waarde7, MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde8, 1, INSTR (alg_kenmerkwaarde8, '=') - 1))) kenmerk_key8, MIN(SUBSTR (alg_kenmerkwaarde8, INSTR (alg_kenmerkwaarde8, '=') + 1)) waarde8, MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde9, 1, INSTR (alg_kenmerkwaarde9, '=') - 1))) kenmerk_key9, MIN(SUBSTR (alg_kenmerkwaarde9, INSTR (alg_kenmerkwaarde9, '=') + 1)) waarde9, MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde10, 1, INSTR (alg_kenmerkwaarde10, '=') - 1))) kenmerk_key10, MIN(SUBSTR (alg_kenmerkwaarde10, INSTR (alg_kenmerkwaarde10, '=') + 1)) waarde10 FROM fac_imp_onrgoed1 GROUP BY UPPER (alg_regio_omschrijving), UPPER (alg_district_omschrijving), UPPER (alg_locatie_code), UPPER (alg_gebouw_code) ORDER BY 1, 2, 3, 4; -- SUBPROC PROCEDURE upsert_algkenmerk (p_alg_key IN NUMBER, p_alg_niv IN VARCHAR2, p_kenmerk_key IN NUMBER, p_waarde IN VARCHAR2) AS v_kenmerk_niveau alg_kenmerk.alg_kenmerk_niveau%TYPE; v_kenmerk_type alg_kenmerk.alg_kenmerk_kenmerktype%TYPE; ccount NUMBER; v_waarde VARCHAR2 (4000); v_objectnaam fac_kenmerkdomein.fac_kenmerkdomein_objectnaam%TYPE; v_kolomnaam fac_kenmerkdomein.fac_kenmerkdomein_kolomnaam%TYPE; v_kolomtxt fac_kenmerkdomein.fac_kenmerkdomein_kolomtxt%TYPE; sql_stmt VARCHAR2 (1000); v_onrgoedkenmerk_key alg_onrgoedkenmerk.alg_onrgoedkenmerk_key%TYPE; l_cursor_1 INTEGER; l_rowsprocessed NUMBER DEFAULT 0; BEGIN IF p_kenmerk_key IS NOT NULL AND p_waarde IS NOT NULL THEN v_errormsg := 'Fout bij bepalen kenmerk [' || p_kenmerk_key || ']'; SELECT alg_kenmerk_niveau, alg_kenmerk_kenmerktype INTO v_kenmerk_niveau, v_kenmerk_type FROM alg_kenmerk WHERE alg_kenmerk_verwijder IS NULL AND alg_kenmerk_key = p_kenmerk_key AND alg_kenmerk_niveau IN ('L', 'G'); IF (v_kenmerk_niveau = p_alg_niv) -- Alleen op juiste niveau doen! THEN IF v_kenmerk_type IN ('R', 'r', 'S') THEN v_errormsg := 'Fout bij bepalen eigen tabel'; SELECT COUNT ( * ) INTO ccount FROM alg_kenmerk k, fac_kenmerkdomein d WHERE k.alg_kenmerk_key = p_kenmerk_key AND k.alg_kenmerk_niveau = p_alg_niv AND k.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key AND d.fac_usrtab_key IS NOT NULL; v_errormsg := 'Fout bij bepalen nieuwe waarde [' || SUBSTR(p_waarde, 1, 200) || ']'; IF ccount = 1 THEN -- Eigen tabel SELECT TO_CHAR (ud.fac_usrdata_key) INTO v_waarde FROM alg_kenmerk k, fac_kenmerkdomein d, fac_v_aanwezigusrdata ud WHERE k.alg_kenmerk_key = p_kenmerk_key AND k.alg_kenmerk_niveau = p_alg_niv AND k.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key AND d.fac_usrtab_key = ud.fac_usrtab_key AND UPPER (TRIM (ud.fac_usrdata_omschr)) = UPPER (p_waarde); ELSE -- FACILITOR view/tabel SELECT d.fac_kenmerkdomein_objectnaam, d.fac_kenmerkdomein_kolomnaam, d.fac_kenmerkdomein_kolomtxt INTO v_objectnaam, v_kolomnaam, v_kolomtxt FROM alg_kenmerk k, fac_kenmerkdomein d WHERE k.alg_kenmerk_key = p_kenmerk_key AND k.alg_kenmerk_niveau = p_alg_niv AND k.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key AND d.fac_usrtab_key IS NULL; sql_stmt := 'SELECT MAX (' || v_kolomnaam || ') FROM ' || v_objectnaam || ' WHERE UPPER (TRIM (' || v_kolomtxt || ')) = UPPER (:pwaarde)'; l_cursor_1 := DBMS_SQL.open_cursor; DBMS_SQL.parse (l_cursor_1, sql_stmt, DBMS_SQL.native); DBMS_SQL.BIND_VARIABLE(l_cursor_1,':pwaarde', p_waarde); DBMS_SQL.define_column(l_cursor_1, 1, v_waarde, 255); l_rowsprocessed := DBMS_SQL.execute_and_fetch (l_cursor_1); DBMS_SQL.column_value (l_cursor_1, 1, v_waarde); DBMS_SQL.close_cursor(l_cursor_1); END IF; ELSE -- C(Karakter)/D(Datum)/N(Numeriek)/X(Bestandsnaam) v_waarde := p_waarde; END IF; v_errormsg := 'Fout bij bepalen huidige waarde'; SELECT COUNT ( * ), MAX (alg_onrgoedkenmerk_key) INTO ccount, v_onrgoedkenmerk_key FROM alg_v_aanwezigonrgoedkenmerk WHERE alg_onrgoed_key = p_alg_key AND alg_onrgoed_niveau = p_alg_niv AND alg_kenmerk_key = p_kenmerk_key; IF ccount = 0 THEN v_errormsg := 'Fout bij toevoegen waarde [' || SUBSTR(v_waarde, 1, 200) || ']'; INSERT INTO alg_onrgoedkenmerk (alg_onrgoed_key, alg_onrgoed_niveau, alg_kenmerk_key, alg_onrgoedkenmerk_waarde) VALUES (p_alg_key, p_alg_niv, p_kenmerk_key, v_waarde); ELSE v_errormsg := 'Fout bij bijwerken waarde [' || SUBSTR(v_waarde, 1, 200) || ']'; UPDATE alg_onrgoedkenmerk SET alg_onrgoedkenmerk_waarde = v_waarde WHERE alg_onrgoedkenmerk_key = v_onrgoedkenmerk_key; END IF; 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, 'upsert_algkenmerk'); END; BEGIN -- *********** -- ***REGIO*** -- *********** -- Alleen ontbrekende regio's worden toegevoegd v_count_tot := 0; v_count_new := 0; FOR recRegio IN cRegio LOOP BEGIN v_count_tot := v_count_tot + 1; v_aanduiding := '[' || recRegio.alg_regio_omschrijving || '] '; v_errormsg := 'Fout bij toevoegen regio'; SELECT COUNT ( * ) INTO v_count FROM alg_v_aanwezigregio WHERE TRIM (alg_regio_upper) = UPPER (recRegio.alg_regio_omschrijving); IF (v_count = 0) THEN INSERT INTO alg_regio ( alg_regio_omschrijving) VALUES ( recRegio.alg_regio_omschrijving); v_count_new := v_count_new + 1; 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, ''); END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'Regio/#ingelezen: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog (p_import_key, 'S', 'Regio/#toegevoegd: ' || TO_CHAR (v_count_new), ''); COMMIT; -- ************** -- ***DISTRICT*** -- ************** -- Alleen ontbrekende districten worden toegevoegd v_count_tot := 0; v_count_new := 0; FOR recDistrict IN cDistrict LOOP BEGIN v_count_tot := v_count_tot + 1; v_aanduiding := '[' || recDistrict.alg_regio_omschrijving || '|' || recDistrict.alg_district_omschrijving || '] '; v_errormsg := 'Fout bij bepalen regio'; SELECT alg_regio_key INTO v_regio_key FROM alg_v_aanwezigregio WHERE alg_regio_upper = UPPER (recDistrict.alg_regio_omschrijving); v_errormsg := 'Fout bij toevoegen district'; SELECT COUNT ( * ) INTO v_count FROM alg_v_aanwezigdistrict WHERE alg_regio_key = v_regio_key AND TRIM (alg_district_upper) = UPPER (recDistrict.alg_district_omschrijving); IF (v_count = 0) THEN INSERT INTO alg_district ( alg_regio_key, alg_district_omschrijving ) VALUES ( v_regio_key, recDistrict.alg_district_omschrijving ); v_count_new := v_count_new + 1; 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, ''); END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'District/#ingelezen: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog (p_import_key, 'S', 'District/#toegevoegd: ' || TO_CHAR (v_count_new), ''); COMMIT; -- ************** -- ***LOCATIE**** -- ************** v_count_tot := 0; v_count_new := 0; v_count_upd := 0; FOR recLocatie IN cLocatie LOOP BEGIN v_count_tot := v_count_tot + 1; v_aanduiding := '[' || recLocatie.alg_regio_omschrijving || '|' || recLocatie.alg_district_omschrijving || '|' || recLocatie.alg_locatie_code || '] '; v_errormsg := 'Fout bij bepalen regio'; SELECT alg_regio_key INTO v_regio_key FROM alg_v_aanwezigregio WHERE alg_regio_upper = UPPER (recLocatie.alg_regio_omschrijving); v_errormsg := 'Fout bij bepalen district'; SELECT alg_district_key INTO v_district_key FROM alg_v_aanwezigdistrict WHERE alg_regio_key = v_regio_key AND TRIM (alg_district_upper) = UPPER (recLocatie.alg_district_omschrijving); v_errormsg := 'Fout bij toevoegen locatie'; SELECT COUNT ( * ) INTO v_count FROM alg_v_aanweziglocatie WHERE alg_district_key = v_district_key AND UPPER (alg_locatie_code) = UPPER (recLocatie.alg_locatie_code); IF (v_count = 0) THEN INSERT INTO alg_locatie ( alg_district_key, alg_locatie_code, alg_locatie_omschrijving, alg_locatie_verantw, alg_locatie_verantw_tel, alg_locatie_adres, alg_locatie_postcode, alg_locatie_plaats, alg_locatie_land, alg_locatie_post_adres, alg_locatie_post_postcode, alg_locatie_post_plaats, alg_locatie_post_land ) VALUES ( v_district_key, recLocatie.alg_locatie_code, recLocatie.alg_locatie_omschrijving, recLocatie.alg_locatie_verantw, recLocatie.alg_locatie_verantw_tel, recLocatie.alg_locatie_adres, recLocatie.alg_locatie_postcode, recLocatie.alg_locatie_plaats, recLocatie.alg_locatie_land, recLocatie.alg_locatie_post_adres, recLocatie.alg_locatie_post_postcode, recLocatie.alg_locatie_post_plaats, recLocatie.alg_locatie_post_land ) RETURNING alg_locatie_key INTO v_locatie_key; v_srtnoti_code := 'ALGLNE'; v_count_new := v_count_new + 1; ELSE -- bijwerken kenmerken! v_errormsg := 'Fout bij bepalen locatie'; SELECT alg_locatie_key INTO v_locatie_key FROM alg_v_aanweziglocatie WHERE UPPER (TRIM (alg_locatie_code)) = UPPER (recLocatie.alg_locatie_code); v_srtnoti_code := 'ALGLUP'; v_count_upd := v_count_upd + 1; END IF; -- NULL-waarden resulteren NIET in het wissen van kenmerkvelden -- (bijwerken kan wel, maar wissen dus niet)! upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key1, recLocatie.waarde1); upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key2, recLocatie.waarde2); upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key3, recLocatie.waarde3); upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key4, recLocatie.waarde4); upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key5, recLocatie.waarde5); upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key6, recLocatie.waarde6); upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key7, recLocatie.waarde7); upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key8, recLocatie.waarde8); upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key9, recLocatie.waarde9); upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key10, recLocatie.waarde10); fac.trackaction (v_srtnoti_code, v_locatie_key, NULL, NULL, NULL); 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; fac.imp_writelog (p_import_key, 'S', 'Locatie/#ingelezen: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog (p_import_key, 'S', 'Locatie/#toegevoegd: ' || TO_CHAR (v_count_new), ''); fac.imp_writelog (p_import_key, 'S', 'Locatie/#bijgewerkt: ' || TO_CHAR (v_count_upd), ''); COMMIT; -- ******************** -- ***GEBOUWFUNCTIE**** -- ******************** v_count_tot := 0; v_count_new := 0; FOR recSrtGebouw IN cSrtGebouw LOOP BEGIN v_count_tot := v_count_tot + 1; v_aanduiding := '[' || recSrtGebouw.alg_srtgebouw_omschrijving || '] '; v_errormsg := 'Fout bij toevoegen gebouwfunctie'; SELECT COUNT ( * ) INTO v_count FROM alg_v_aanwezigsrtgebouw WHERE TRIM (alg_srtgebouw_upper) = UPPER (recSrtGebouw.alg_srtgebouw_omschrijving); IF (v_count = 0) THEN INSERT INTO alg_srtgebouw ( alg_srtgebouw_omschrijving) VALUES ( recSrtGebouw.alg_srtgebouw_omschrijving); v_count_new := v_count_new + 1; 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, ''); END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'Gebouwfunctie/#ingelezen: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog (p_import_key, 'S', 'Gebouwfunctie/#toegevoegd: ' || TO_CHAR (v_count_new), ''); COMMIT; -- ************ -- ***GEBOUW*** -- ************ v_count_tot := 0; v_count_new := 0; v_count_upd := 0; FOR recGebouw IN cGebouw LOOP BEGIN v_count_tot := v_count_tot + 1; v_aanduiding := '[' || recGebouw.alg_regio_omschrijving || '|' || recGebouw.alg_district_omschrijving || '|' || recGebouw.alg_locatie_code || '|' || recGebouw.alg_gebouw_code || '] '; v_errormsg := 'Fout bij bepalen regio'; SELECT alg_regio_key INTO v_regio_key FROM alg_v_aanwezigregio WHERE alg_regio_upper = UPPER (recGebouw.alg_regio_omschrijving); v_errormsg := 'Fout bij bepalen district'; SELECT alg_district_key INTO v_district_key FROM alg_v_aanwezigdistrict WHERE alg_regio_key = v_regio_key AND TRIM (alg_district_upper) = UPPER (recGebouw.alg_district_omschrijving); v_errormsg := 'Fout bij bepalen locatie'; SELECT alg_locatie_key INTO v_locatie_key FROM alg_v_aanweziglocatie WHERE alg_district_key = v_district_key AND UPPER (TRIM (alg_locatie_code)) = UPPER (recGebouw.alg_locatie_code); IF (recGebouw.alg_srtgebouw_omschrijving IS NOT NULL) THEN v_errormsg := 'Fout bij bepalen gebouwfunctie'; SELECT alg_srtgebouw_key INTO v_srtgebouw_key FROM alg_v_aanwezigsrtgebouw WHERE TRIM (alg_srtgebouw_upper) = UPPER (recGebouw.alg_srtgebouw_omschrijving); END IF; v_errormsg := 'Fout bij toevoegen gebouw'; SELECT COUNT ( * ) INTO v_count FROM alg_v_aanweziggebouw WHERE alg_locatie_key = v_locatie_key AND UPPER (TRIM (alg_gebouw_code)) = UPPER (recGebouw.alg_gebouw_code); IF (v_count = 0) THEN INSERT INTO alg_gebouw ( alg_locatie_key, alg_srtgebouw_key, alg_gebouw_code, alg_gebouw_naam, alg_gebouw_adres, alg_gebouw_postcode ) VALUES ( v_locatie_key, v_srtgebouw_key, recGebouw.alg_gebouw_code, recGebouw.alg_gebouw_naam, recGebouw.alg_gebouw_adres, recGebouw.alg_gebouw_postcode ) RETURNING alg_gebouw_key INTO v_gebouw_key; v_srtnoti_code := 'ALGGNE'; v_count_new := v_count_new + 1; ELSE -- bijwerken kenmerken! v_errormsg := 'Fout bij bepalen gebouw'; SELECT alg_gebouw_key INTO v_gebouw_key FROM alg_v_aanweziggebouw WHERE alg_locatie_key = v_locatie_key AND UPPER (TRIM (alg_gebouw_code)) = UPPER (recGebouw.alg_gebouw_code); v_srtnoti_code := 'ALGGUP'; v_count_upd := v_count_upd + 1; END IF; -- NULL-waarden resulteren NIET in het wissen van kenmerkvelden -- (bijwerken kan wel, maar wissen dus niet)! upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key1, recGebouw.waarde1); upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key2, recGebouw.waarde2); upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key3, recGebouw.waarde3); upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key4, recGebouw.waarde4); upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key5, recGebouw.waarde5); upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key6, recGebouw.waarde6); upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key7, recGebouw.waarde7); upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key8, recGebouw.waarde8); upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key9, recGebouw.waarde9); upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key10, recGebouw.waarde10); fac.trackaction (v_srtnoti_code, v_gebouw_key, NULL, NULL, NULL); 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; fac.imp_writelog (p_import_key, 'S', 'Gebouw/#ingelezen: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog (p_import_key, 'S', 'Gebouw/#toegevoegd: ' || TO_CHAR (v_count_new), ''); fac.imp_writelog (p_import_key, 'S', 'Gebouw/#bijgewerkt: ' || TO_CHAR (v_count_upd), ''); 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_errormsg, 'Importproces locaties/gebouwen afgebroken!'); END fac_update_onrgoed1; / CREATE OR REPLACE PROCEDURE fac_import_onrgoed1_del ( p_import_key IN NUMBER ) IS BEGIN fac_import_onrgoed1(p_import_key); END fac_import_onrgoed1_del; / CREATE OR REPLACE PROCEDURE fac_update_onrgoed1_del ( p_import_key IN NUMBER ) IS BEGIN fac.imp_alg_delete_onrgoed(p_import_key,1); fac_update_onrgoed1(p_import_key); END fac_update_onrgoed1_del; / CREATE OR REPLACE PROCEDURE fac_import_onrgoed2 (p_import_key IN NUMBER ) AS c_fielddelimitor 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 NUMBER; v_ongeldig NUMBER (1); v_mode NUMBER (1); v_aanduiding VARCHAR2 (200); v_alg_kenmerk_key1 VARCHAR2 (255); v_alg_kenmerk_key2 VARCHAR2 (255); v_alg_kenmerk_key3 VARCHAR2 (255); v_alg_kenmerk_key4 VARCHAR2 (255); v_alg_kenmerk_key5 VARCHAR2 (255); -- De importvelden: v_locatie_code VARCHAR2 (255); -- 10 v_gebouw_code VARCHAR2 (255); -- 12 v_verdieping_volgnr VARCHAR2 (255); -- 3,0 v_verdieping_volgnr_n NUMBER (3, 0); -- 3,0 v_srtruimte_omschrijving VARCHAR2 (255); -- 30 v_ruimte_nr VARCHAR2 (255); -- 10 v_ruimte_omschrijving VARCHAR2 (255); -- 30 v_ruimte_bruto_vloeropp VARCHAR2 (255); -- 8,2 v_ruimte_bruto_vloeropp_n NUMBER (8, 2); -- 8,2 v_afdeling_naam VARCHAR2 (255); -- 10 v_ruimte_afdeling_bezetting VARCHAR2 (255); -- 8,5 v_ruimte_afdeling_bezetting_n VARCHAR2 (255); -- 8,5 v_reserveerbaar VARCHAR2 (255); -- 1 v_res_discipline_omschrijving VARCHAR2 (255); -- 60 v_res_discipline_expire_dagen VARCHAR2 (255); -- 3 v_res_disc_expire_dagen_n NUMBER (3, 0); -- 3 v_res_ruimte_prijs VARCHAR2 (255); -- 7,2 v_res_ruimte_prijs_n NUMBER (7, 2); -- 7,2 v_res_opstelling_omschrijving VARCHAR2 (255); -- 30 v_res_ruimte_opstel_bezoekers VARCHAR2 (255); -- 5,0 v_res_ruimte_opstel_bez_n NUMBER (5, 0); -- 5,0 v_res_ruimte_nr VARCHAR2 (255); -- 40 v_res_ruimte_omschrijving VARCHAR2 (4000); -- 255 v_alg_kenmerkwaarde1 VARCHAR2 (4000); v_alg_kenmerkwaarde2 VARCHAR2 (4000); v_alg_kenmerkwaarde3 VARCHAR2 (4000); v_alg_kenmerkwaarde4 VARCHAR2 (4000); v_alg_kenmerkwaarde5 VARCHAR2 (4000); CURSOR c1 IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; -- Controleer tijdens import-fase op bestaan van kenmerk FUNCTION bepaal_kenmerk_key (kw IN VARCHAR) RETURN NUMBER IS v_kenmerk_key NUMBER; BEGIN IF fac.safe_to_number (kw) IS NULL THEN -- kenmerkwaarde is alfanumeriek (dus omschrijving)! SELECT alg_kenmerk_key INTO v_kenmerk_key FROM alg_kenmerk WHERE alg_kenmerk_upper = UPPER (kw) AND alg_kenmerk_verwijder IS NULL AND alg_kenmerk_niveau = 'R' AND alg_kenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'r', 'S', 'X', 'V'); ELSE -- kenmerkwaarde is numeriek (dus key)! SELECT alg_kenmerk_key INTO v_kenmerk_key FROM alg_kenmerk WHERE alg_kenmerk_key = fac.safe_to_number (kw) AND alg_kenmerk_verwijder IS NULL AND alg_kenmerk_niveau = 'R' AND alg_kenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'r', 'S', 'X', 'V'); END IF; RETURN v_kenmerk_key; EXCEPTION WHEN NO_DATA_FOUND THEN IF kw IS NULL OR UPPER (kw) LIKE 'KENMERK%' THEN RETURN NULL; ELSE fac.imp_writelog (p_import_key, 'W', 'Fout bij bepalen kenmerk [' || kw || ']', 'Bestaat niet of type ongeldig'); COMMIT; RETURN NULL; END IF; END; BEGIN DELETE FROM fac_imp_onrgoed2; header_is_valid := 0; v_count := 0; FOR rec1 IN c1 LOOP BEGIN v_errormsg := 'Fout FETCH te importeren rij'; v_newline := rec1.fac_imp_file_line; v_errormsg := 'Fout opvragen te importeren rij met index ' || TO_CHAR (rec1.fac_imp_file_index); v_aanduiding := ''; v_errorhint := ''; v_ongeldig := 0; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_fielddelimitor, v_locatie_code); fac.imp_getfield (v_newline, c_fielddelimitor, v_gebouw_code); fac.imp_getfield (v_newline, c_fielddelimitor, v_verdieping_volgnr); fac.imp_getfield (v_newline, c_fielddelimitor, v_srtruimte_omschrijving); fac.imp_getfield (v_newline, c_fielddelimitor, v_ruimte_nr); fac.imp_getfield (v_newline, c_fielddelimitor, v_ruimte_omschrijving); fac.imp_getfield (v_newline, c_fielddelimitor, v_ruimte_bruto_vloeropp); fac.imp_getfield (v_newline, c_fielddelimitor, v_afdeling_naam); fac.imp_getfield (v_newline, c_fielddelimitor, v_ruimte_afdeling_bezetting); fac.imp_getfield (v_newline, c_fielddelimitor, v_reserveerbaar); fac.imp_getfield (v_newline, c_fielddelimitor, v_res_discipline_omschrijving); fac.imp_getfield (v_newline, c_fielddelimitor, v_res_discipline_expire_dagen); fac.imp_getfield (v_newline, c_fielddelimitor, v_res_ruimte_prijs); fac.imp_getfield (v_newline, c_fielddelimitor, v_res_opstelling_omschrijving); fac.imp_getfield (v_newline, c_fielddelimitor, v_res_ruimte_opstel_bezoekers); fac.imp_getfield (v_newline, c_fielddelimitor, v_res_ruimte_nr); fac.imp_getfield (v_newline, c_fielddelimitor, v_res_ruimte_omschrijving); fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_kenmerkwaarde1); fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_kenmerkwaarde2); fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_kenmerkwaarde3); fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_kenmerkwaarde4); fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_kenmerkwaarde5); v_aanduiding := v_locatie_code || '|' || v_gebouw_code || '|' || v_verdieping_volgnr || '|' || v_ruimte_nr || '| '; IF (header_is_valid = 0) THEN IF UPPER (v_locatie_code) = 'LOCATIECODE' AND UPPER (v_ruimte_nr) = 'RUIMTENUMMER' AND UPPER (v_res_ruimte_omschrijving) = 'OMSCHRIJVING' THEN v_alg_kenmerk_key1 := bepaal_kenmerk_key (v_alg_kenmerkwaarde1); v_alg_kenmerk_key2 := bepaal_kenmerk_key (v_alg_kenmerkwaarde2); v_alg_kenmerk_key3 := bepaal_kenmerk_key (v_alg_kenmerkwaarde3); v_alg_kenmerk_key4 := bepaal_kenmerk_key (v_alg_kenmerkwaarde4); v_alg_kenmerk_key5 := bepaal_kenmerk_key (v_alg_kenmerkwaarde5); header_is_valid := 1; END IF; ELSE v_count := v_count + 1; v_errormsg := 'Fout inlezen locatie [' || v_locatie_code || ']'; v_locatie_code := TRIM(v_locatie_code); IF LENGTH (v_locatie_code) > 10 THEN v_locatie_code := SUBSTR (v_locatie_code, 1, 10); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Locatie-aanduiding is te lang', 'Aanduiding wordt afgebroken tot <' || v_locatie_code || '>' ); END IF; -- v_errormsg := 'Fout inlezen gebouw [' || v_gebouw_code || ']'; v_gebouw_code := TRIM(v_gebouw_code); IF LENGTH (v_gebouw_code) > 12 THEN v_gebouw_code := SUBSTR (v_gebouw_code, 1, 12); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Gebouwcode-aanduiding is te lang', 'Aanduiding wordt afgebroken tot <' || v_gebouw_code || '>' ); END IF; -- v_errormsg := '1 Fout inlezen verdiepingvolgnr [' || v_verdieping_volgnr || ']'; v_errorhint := 'Geef een geheel getal niet groter dan 3 posities'; IF (NVL (LENGTH (ROUND (fac.safe_to_number (v_verdieping_volgnr))), 10)) > 3 THEN fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'xyz Ongeldig verdiepingvolgnummer [' || v_verdieping_volgnr || ']', v_errorhint ); v_ongeldig := 1; ELSE v_verdieping_volgnr_n := ROUND (fac.safe_to_number (v_verdieping_volgnr)); END IF; -- v_errormsg := 'Fout inlezen ruimtefunctie [' || v_srtruimte_omschrijving || ']'; v_srtruimte_omschrijving := TRIM(v_srtruimte_omschrijving); IF LENGTH (v_srtruimte_omschrijving) > 50 THEN v_srtruimte_omschrijving := SUBSTR (v_srtruimte_omschrijving, 1, 50); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Ruimtefunctie-aanduiding is te lang', 'Aanduiding wordt afgebroken tot <' || v_srtruimte_omschrijving || '>' ); END IF; -- v_errormsg := 'Fout inlezen ruimtenummer [' || v_ruimte_nr || ']'; v_ruimte_nr := TRIM(v_ruimte_nr); IF LENGTH (v_ruimte_nr) > 20 THEN v_ruimte_nr := SUBSTR (v_ruimte_nr, 1, 20); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Ruimtenr-aanduiding is te lang', 'Aanduiding wordt afgebroken tot <' || v_ruimte_nr || '>' ); END IF; -- v_errormsg := 'Fout inlezen ruimte [' || v_ruimte_omschrijving || ']'; v_ruimte_omschrijving := TRIM(v_ruimte_omschrijving); IF LENGTH (v_ruimte_omschrijving) > 30 THEN v_ruimte_omschrijving := SUBSTR (v_ruimte_omschrijving, 1, 30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Ruimte-aanduiding is te lang', 'Aanduiding wordt afgebroken tot <' || v_ruimte_omschrijving || '>' ); END IF; -- v_errormsg := 'Fout inlezen ruimte oppervlakte [' || v_ruimte_bruto_vloeropp || ']'; v_errorhint := 'Maximaal grootte getal is 99999.99'; IF TRIM (v_ruimte_bruto_vloeropp) IS NULL THEN v_ruimte_bruto_vloeropp_n := TO_NUMBER (NULL); ELSE -- nls_numeric_characters wordt verondersteld v_ruimte_bruto_vloeropp_n := TO_NUMBER (TRIM (REPLACE (v_ruimte_bruto_vloeropp, ',', '.')), '999999D99'); END IF; -- v_errormsg := 'Fout inlezen afdelingscode [' || v_afdeling_naam || ']'; v_afdeling_naam := TRIM(v_afdeling_naam); IF LENGTH (v_afdeling_naam) > 15 THEN v_afdeling_naam := SUBSTR (v_afdeling_naam, 1, 15); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Afdelingscode is te lang', 'Afdelingscode wordt afgebroken tot <' || v_afdeling_naam || '>' ); END IF; -- v_errormsg := 'Fout inlezen ruimtebezetting [' || v_ruimte_afdeling_bezetting || ']'; v_errorhint := 'Maximaal grootte getal is 999.99999'; IF TRIM (v_ruimte_afdeling_bezetting) IS NULL THEN v_ruimte_afdeling_bezetting_n := TO_NUMBER (NULL); ELSE -- nls_numeric_characters wordt verondersteld v_ruimte_afdeling_bezetting_n := TO_NUMBER (TRIM (REPLACE (v_ruimte_afdeling_bezetting, ',', '.')), '999D99999'); END IF; -- v_reserveerbaar := SUBSTR (TRIM (v_reserveerbaar), 1, 1); -- v_errormsg := 'Fout inlezen catalogus [' || v_res_discipline_omschrijving || ']'; v_res_discipline_omschrijving := TRIM(v_res_discipline_omschrijving); IF LENGTH (v_res_discipline_omschrijving) > 60 THEN v_res_discipline_omschrijving := SUBSTR (v_res_discipline_omschrijving, 1, 60); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Categorie-aanduiding ruimte is te lang', 'Aanduiding wordt afgebroken tot <' || v_res_discipline_omschrijving || '>' ); END IF; -- v_errormsg := 'Fout inlezen expire dagen [' || v_res_discipline_expire_dagen || ']'; v_errorhint := 'Geef geheel getal niet groter dan 3 posities'; IF TRIM (v_res_discipline_expire_dagen) IS NULL THEN v_res_disc_expire_dagen_n := 0; ELSE v_res_disc_expire_dagen_n := TO_NUMBER (v_res_discipline_expire_dagen); END IF; -- v_errormsg := 'Fout inlezen prijs reserveerbare ruimte [' || v_res_ruimte_prijs || ']'; v_errorhint := 'Maximaal grootte getal is 99999.99 '; IF (TRIM (v_res_ruimte_prijs) IS NULL) THEN v_res_ruimte_prijs_n := TO_NUMBER (NULL); ELSE -- nls_numeric_characters wordt verondersteld v_res_ruimte_prijs_n := TO_NUMBER (TRIM (REPLACE (v_res_ruimte_prijs, ',', '.')), '999999D99'); END IF; -- v_errormsg := 'Fout inlezen opstelling [' || v_res_opstelling_omschrijving || ']'; v_res_opstelling_omschrijving := TRIM(v_res_opstelling_omschrijving); IF LENGTH (v_res_opstelling_omschrijving) > 30 THEN v_res_opstelling_omschrijving := SUBSTR (v_res_opstelling_omschrijving, 1, 30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Ruimteopstelling-aanduiding is te lang', 'Aanduiding wordt afgebroken tot <' || v_res_opstelling_omschrijving || '>' ); END IF; -- v_errormsg := 'Fout inlezen aantal bezoekers [' || v_res_ruimte_opstel_bezoekers || ']'; v_errorhint := 'Geef geheel getal niet groter dan 5 posities'; IF TRIM (v_res_ruimte_opstel_bezoekers) IS NULL THEN v_res_ruimte_opstel_bez_n := TO_NUMBER (NULL); ELSE v_res_ruimte_opstel_bez_n := TO_NUMBER (v_res_ruimte_opstel_bezoekers); END IF; -- v_errormsg := 'Fout inlezen ruimte nummer reserveerbare ruimte omschrijving [' || v_res_ruimte_nr || ']'; v_res_ruimte_nr := TRIM(v_res_ruimte_nr); IF LENGTH (v_res_ruimte_nr) > 40 THEN v_errormsg := 'Fout inlezen ruimte nummer reserveerbare ruimte omschrijving [' || v_res_ruimte_nr || ']'; v_res_ruimte_nr := SUBSTR (v_res_ruimte_nr, 1, 40); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Ruimtenr-aanduiding reserveerbare ruimte is te lang', 'Aanduiding wordt afgebroken tot <' || v_res_ruimte_nr || '>' ); v_errormsg := 'Fout inlezen ruimte nummer reserveerbare ruimte omschrijving [' || v_res_ruimte_nr || ']'; END IF; v_errormsg := 'Fout inlezen ruimte nummer reserveerbare ruimte omschrijving [' || v_res_ruimte_nr || ']'; -- v_errormsg := 'Fout inlezen reserveerbare ruimte [' || v_res_ruimte_omschrijving || ']'; v_res_ruimte_omschrijving := TRIM(v_res_ruimte_omschrijving); IF LENGTH (v_res_ruimte_omschrijving) > 255 THEN v_res_ruimte_omschrijving := SUBSTR (v_res_ruimte_omschrijving, 1, 255); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Ruimte-aanduiding reserveerbare ruimte is te lang', 'Aanduiding wordt afgebroken tot <' || v_res_ruimte_omschrijving || '>' ); END IF; v_alg_kenmerkwaarde1 := TRIM (v_alg_kenmerkwaarde1); v_alg_kenmerkwaarde2 := TRIM (v_alg_kenmerkwaarde2); v_alg_kenmerkwaarde3 := TRIM (v_alg_kenmerkwaarde3); v_alg_kenmerkwaarde4 := TRIM (v_alg_kenmerkwaarde4); v_alg_kenmerkwaarde5 := TRIM (v_alg_kenmerkwaarde5); -- Insert geformatteerde import record IF v_ongeldig = 0 THEN v_errormsg := 'Fout bij toevoegen te impoteren ruimte [' || v_res_ruimte_omschrijving || ']'; INSERT INTO fac_imp_onrgoed2 ( alg_locatie_code, alg_gebouw_code, alg_verdieping_volgnr, alg_srtruimte_omschrijving, alg_ruimte_nr, alg_ruimte_omschrijving, alg_ruimte_bruto_vloeropp, prs_afdeling_naam, prs_ruimteafdeling_bezetting, reserveerbaar, res_discipline_omschrijving, res_discipline_expire_dagen, res_ruimte_prijs, res_opstelling_omschrijving, res_ruimte_opstel_bezoekers, res_ruimte_nr, res_ruimte_omschrijving, alg_kenmerkwaarde1, alg_kenmerkwaarde2, alg_kenmerkwaarde3, alg_kenmerkwaarde4, alg_kenmerkwaarde5 ) VALUES ( v_locatie_code, v_gebouw_code, v_verdieping_volgnr_n, v_srtruimte_omschrijving, v_ruimte_nr, v_ruimte_omschrijving, v_ruimte_bruto_vloeropp_n, v_afdeling_naam, v_ruimte_afdeling_bezetting_n, v_reserveerbaar, v_res_discipline_omschrijving, v_res_disc_expire_dagen_n, v_res_ruimte_prijs_n, v_res_opstelling_omschrijving, v_res_ruimte_opstel_bez_n, v_res_ruimte_nr, v_res_ruimte_omschrijving, DECODE (v_alg_kenmerk_key1, NULL, v_alg_kenmerkwaarde1, TO_CHAR (v_alg_kenmerk_key1) || '=' || SUBSTR (v_alg_kenmerkwaarde1, 1, 3980) ), DECODE (v_alg_kenmerk_key2, NULL, v_alg_kenmerkwaarde2, TO_CHAR (v_alg_kenmerk_key2) || '=' || SUBSTR (v_alg_kenmerkwaarde2, 1, 3980) ), DECODE (v_alg_kenmerk_key3, NULL, v_alg_kenmerkwaarde3, TO_CHAR (v_alg_kenmerk_key3) || '=' || SUBSTR (v_alg_kenmerkwaarde3, 1, 3980) ), DECODE (v_alg_kenmerk_key4, NULL, v_alg_kenmerkwaarde4, TO_CHAR (v_alg_kenmerk_key4) || '=' || SUBSTR (v_alg_kenmerkwaarde4, 1, 3980) ), DECODE (v_alg_kenmerk_key5, NULL, v_alg_kenmerkwaarde5, TO_CHAR (v_alg_kenmerk_key5) || '=' || SUBSTR (v_alg_kenmerkwaarde5, 1, 3980) ) ); END IF; END IF; END; END LOOP; IF (header_is_valid = 0) THEN fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Ongeldig importbestand', 'Geen geldige headerregel aanwezig' ); ELSE fac.imp_writelog (p_import_key, 'S', 'Ruimte: aantal ingelezen regels: ' || TO_CHAR (v_count), ''); END IF; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := v_errormsg || ' Error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Eventeel resterende regels worden niet meer ingelezen!' ); END fac_import_onrgoed2; / CREATE OR REPLACE PROCEDURE fac_update_onrgoed2 ( p_import_key IN NUMBER ) IS c_fielddelimitor 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); v_aanduiding VARCHAR2 (200); v_count NUMBER(10); v_count_update NUMBER(10); v_count_tot NUMBER(10); -- De importvelden: v_regio_omschrijving VARCHAR2(255); -- 30 v_district_omschrijving VARCHAR2(255); -- 30 v_locatie_code VARCHAR2(255); -- 10 v_locatie_omschrijving VARCHAR2(255); -- 60 v_gebouw_code VARCHAR2(255); -- 12 v_gebouw_naam VARCHAR2(255); -- 30 v_srtgebouw_omschrijving VARCHAR2(255); -- 30 v_locatie_verantw VARCHAR2(255); -- 30 v_locatie_verantw_tel VARCHAR2(255); -- 15 v_locatie_adres VARCHAR2(255); -- 50 v_locatie_postcode VARCHAR2(255); -- 12 v_locatie_plaats VARCHAR2(255); -- 30 v_locatie_land VARCHAR2(255); -- 30 v_locatie_post_adres VARCHAR2(255); -- 50 v_locatie_post_postcode VARCHAR2(255); -- 12 v_locatie_post_plaats VARCHAR2(255); -- 30 v_locatie_post_land VARCHAR2(255); -- 30 v_regio_key NUMBER(10); v_district_key NUMBER(10); v_locatie_key NUMBER(10); v_srtgebouw_key NUMBER(10); v_gebouw_key NUMBER(10); v_verdieping_key NUMBER(10); v_verdieping_volgnr NUMBER(3); v_srtruimte_key NUMBER(10); v_ruimte_key NUMBER(10); v_res_ruimte_key NUMBER(10); v_ruimte_omschrijving res_ruimte.res_ruimte_nr%TYPE; -- 40 v_discipline_key NUMBER(10); v_opstelling_key NUMBER(10); v_ruimteafdeling_key NUMBER(10); CURSOR cVerdieping IS SELECT min(alg_locatie_code) alg_locatie_code ,min(alg_gebouw_code) alg_gebouw_code ,alg_verdieping_volgnr alg_verdieping_volgnr FROM fac_imp_onrgoed2 GROUP BY upper(alg_locatie_code), upper(alg_gebouw_code), alg_verdieping_volgnr; recVerdieping cVerdieping%ROWTYPE; CURSOR cSrtRuimte IS SELECT min(alg_srtruimte_omschrijving) alg_srtruimte_omschrijving FROM fac_imp_onrgoed2 GROUP BY alg_srtruimte_omschrijving; recSrtRuimte cSrtRuimte%ROWTYPE; CURSOR cRuimte IS SELECT alg_locatie_code, alg_gebouw_code, alg_verdieping_volgnr, alg_srtruimte_omschrijving, alg_ruimte_nr, alg_ruimte_omschrijving, alg_ruimte_bruto_vloeropp, reserveerbaar, res_discipline_omschrijving, res_ruimte_prijs, res_opstelling_omschrijving, res_ruimte_opstel_bezoekers, res_ruimte_nr, res_ruimte_omschrijving, i.prs_afdeling_naam, prs_afdeling_key, prs_ruimteafdeling_bezetting, fac.safe_to_number (SUBSTR (alg_kenmerkwaarde1, 1, INSTR (alg_kenmerkwaarde1, '=') - 1)) kenmerk_key1, SUBSTR (alg_kenmerkwaarde1, INSTR (alg_kenmerkwaarde1, '=') + 1) waarde1, fac.safe_to_number (SUBSTR (alg_kenmerkwaarde2, 1, INSTR (alg_kenmerkwaarde2, '=') - 1)) kenmerk_key2, SUBSTR (alg_kenmerkwaarde2, INSTR (alg_kenmerkwaarde2, '=') + 1) waarde2, fac.safe_to_number (SUBSTR (alg_kenmerkwaarde3, 1, INSTR (alg_kenmerkwaarde3, '=') - 1)) kenmerk_key3, SUBSTR (alg_kenmerkwaarde3, INSTR (alg_kenmerkwaarde3, '=') + 1) waarde3, fac.safe_to_number (SUBSTR (alg_kenmerkwaarde4, 1, INSTR (alg_kenmerkwaarde4, '=') - 1)) kenmerk_key4, SUBSTR (alg_kenmerkwaarde4, INSTR (alg_kenmerkwaarde4, '=') + 1) waarde4, fac.safe_to_number (SUBSTR (alg_kenmerkwaarde5, 1, INSTR (alg_kenmerkwaarde5, '=') - 1)) kenmerk_key5, SUBSTR (alg_kenmerkwaarde5, INSTR (alg_kenmerkwaarde5, '=') + 1) waarde5 FROM fac_imp_onrgoed2 i, prs_afdeling a WHERE a.prs_afdeling_verwijder IS NULL AND UPPER(i.prs_afdeling_naam) = a.prs_afdeling_upper(+); recRuimte cRuimte%ROWTYPE; CURSOR cOpstelling IS SELECT min(res_opstelling_omschrijving) res_opstelling_omschrijving ,UPPER(res_opstelling_omschrijving) res_opstelling_upper FROM FAC_IMP_ONRGOED2 WHERE res_opstelling_omschrijving IS NOT NULL GROUP BY UPPER(res_opstelling_omschrijving); recOpstelling cOpstelling%ROWTYPE; CURSOR cCategorie IS SELECT min(res_discipline_omschrijving) res_discipline_omschrijving ,upper(res_discipline_omschrijving) res_discipline_upper ,NVL(res_discipline_expire_dagen,0) res_discipline_expire_dagen FROM FAC_IMP_ONRGOED2 WHERE reserveerbaar in ('Y','y','J','j') GROUP BY upper(res_discipline_omschrijving) , res_discipline_expire_dagen; recCategorie cCategorie%ROWTYPE; CURSOR cResRuimte IS SELECT * FROM FAC_IMP_ONRGOED2 WHERE RESERVEERBAAR in ('J','j','Y','y'); recResRuimte cResRuimte%ROWTYPE; -- SUBPROC PROCEDURE upsert_algkenmerk (p_ruimte_key IN NUMBER, p_kenmerk_key IN NUMBER, p_waarde IN VARCHAR2) AS v_kenmerk_type alg_kenmerk.alg_kenmerk_kenmerktype%TYPE; ccount NUMBER; v_waarde VARCHAR2 (4000); v_objectnaam fac_kenmerkdomein.fac_kenmerkdomein_objectnaam%TYPE; v_kolomnaam fac_kenmerkdomein.fac_kenmerkdomein_kolomnaam%TYPE; v_kolomtxt fac_kenmerkdomein.fac_kenmerkdomein_kolomtxt%TYPE; sql_stmt VARCHAR2 (1000); l_cursor_1 INTEGER; l_rowsprocessed NUMBER DEFAULT 0; BEGIN IF (p_kenmerk_key IS NOT NULL AND p_waarde IS NOT NULL) THEN v_errormsg := 'Fout bij bepalen kenmerktype'; SELECT alg_kenmerk_kenmerktype INTO v_kenmerk_type FROM alg_kenmerk WHERE alg_kenmerk_verwijder IS NULL AND alg_kenmerk_key = p_kenmerk_key AND alg_kenmerk_niveau = 'R'; IF v_kenmerk_type IN ('R', 'r', 'S') THEN v_errormsg := 'Fout bij bepalen eigen tabel'; SELECT COUNT ( * ) INTO ccount FROM alg_kenmerk k, fac_kenmerkdomein d WHERE k.alg_kenmerk_key = p_kenmerk_key AND k.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key AND d.fac_usrtab_key IS NOT NULL; v_errormsg := 'Fout bij bepalen nieuwe waarde [' || SUBSTR(p_waarde, 1, 200) || ']'; IF ccount = 1 THEN -- Eigen tabel SELECT TO_CHAR (ud.fac_usrdata_key) INTO v_waarde FROM alg_kenmerk k, fac_kenmerkdomein d, fac_v_aanwezigusrdata ud WHERE k.alg_kenmerk_key = p_kenmerk_key AND k.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key AND d.fac_usrtab_key = ud.fac_usrtab_key AND UPPER (TRIM (ud.fac_usrdata_omschr)) = UPPER (p_waarde); ELSE -- FACILITOR view/tabel SELECT d.fac_kenmerkdomein_objectnaam, d.fac_kenmerkdomein_kolomnaam, d.fac_kenmerkdomein_kolomtxt INTO v_objectnaam, v_kolomnaam, v_kolomtxt FROM alg_kenmerk k, fac_kenmerkdomein d WHERE k.alg_kenmerk_key = p_kenmerk_key AND k.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key AND d.fac_usrtab_key IS NULL; sql_stmt := 'SELECT MAX (' || v_kolomnaam || ') FROM ' || v_objectnaam || ' WHERE UPPER (TRIM (' || v_kolomtxt || ')) = UPPER (:pwaarde)'; l_cursor_1 := DBMS_SQL.open_cursor; DBMS_SQL.parse (l_cursor_1, sql_stmt, DBMS_SQL.native); DBMS_SQL.BIND_VARIABLE(l_cursor_1,':pwaarde', p_waarde); DBMS_SQL.define_column(l_cursor_1, 1, v_waarde, 255); l_rowsprocessed := DBMS_SQL.execute_and_fetch (l_cursor_1); DBMS_SQL.column_value (l_cursor_1, 1, v_waarde); DBMS_SQL.close_cursor(l_cursor_1); END IF; ELSE -- C(Karakter)/D(Datum)/N(Numeriek)/X(Bestandsnaam) v_waarde := p_waarde; END IF; v_errormsg := 'Fout bij toevoegen/bijwerken kenmerk'; alg.upsertkenmerk (p_kenmerk_key, p_ruimte_key, v_waarde); 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, 'upsert_algkenmerk'); END; BEGIN -- **************** -- ***VERDIEPING*** -- **************** OPEN cVerdieping; v_count_update := 0; v_count_tot := 0; IF cVerdieping%ISOPEN THEN LOOP BEGIN v_errormsg := ''; v_errorhint := ''; v_aanduiding := ''; FETCH cVerdieping INTO recVerdieping; EXIT WHEN cVerdieping%NOTFOUND; v_count_tot := v_count_tot + 1; v_aanduiding := recVerdieping.ALG_LOCATIE_CODE||'|'||recVerdieping.ALG_GEBOUW_CODE||'|'||recVerdieping.ALG_VERDIEPING_VOLGNR||'| '; v_errorhint := ' Fout bij bepalen locatie ['||recVerdieping.ALG_LOCATIE_CODE||']'; SELECT ALG_LOCATIE_KEY INTO v_locatie_key FROM ALG_LOCATIE WHERE UPPER(ALG_LOCATIE_CODE) = UPPER(recVerdieping.ALG_LOCATIE_CODE) AND ALG_LOCATIE_VERWIJDER IS NULL; v_errorhint := ' Fout bij bepalen gebouw ['||recVerdieping.ALG_GEBOUW_CODE||']'; SELECT ALG_GEBOUW_KEY INTO v_gebouw_key FROM ALG_GEBOUW WHERE UPPER(ALG_GEBOUW_CODE) = UPPER(recVerdieping.ALG_GEBOUW_CODE) AND ALG_LOCATIE_KEY = v_locatie_key AND ALG_GEBOUW_VERWIJDER IS NULL; v_errorhint := 'Fout bij toevoegen verdieping'; SELECT count(*) INTO v_count FROM alg_v_aanwezigverdieping WHERE alg_gebouw_key = v_gebouw_key AND ALG_VERDIEPING_VOLGNR = recVerdieping.ALG_VERDIEPING_VOLGNR; IF (v_count = 0) THEN insert into ALG_VERDIEPING (ALG_GEBOUW_KEY ,ALG_VERDIEPING_VOLGNR ,ALG_VERDIEPING_CODE ,ALG_VERDIEPING_OMSCHRIJVING ) values (v_gebouw_key ,recVerdieping.ALG_VERDIEPING_VOLGNR ,to_char(recVerdieping.ALG_VERDIEPING_VOLGNR) ,'Verdieping '||to_char(recVerdieping.ALG_VERDIEPING_VOLGNR) ); END IF; commit; v_count_update := v_count_update + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR(SQLERRM, 1, 200); v_errormsg := 'Fout tijdens verwerken verdieping ['||recVerdieping.ALG_LOCATIE_CODE||'-'||recVerdieping.ALG_GEBOUW_CODE||'-'||to_number(recVerdieping.ALG_VERDIEPING_VOLGNR)||']'; v_errorhint := v_errorhint||': ' || 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', 'Verdieping: verwerkte regels zonder foutmelding: '||to_char(v_count_update), '' ); fac.imp_writelog (p_import_key, 'S', 'Verdieping: verwerkte regels met foutmelding: '||to_char(v_count_tot-v_count_update), '' ); END IF; CLOSE cVerdieping; -- ******************* -- ***RUIMTEFUNCTIE*** -- ******************* OPEN cSrtRuimte; v_count_update := 0; v_count_tot := 0; IF cSrtRuimte%ISOPEN THEN LOOP BEGIN v_errormsg := ''; v_errorhint := ''; v_aanduiding := ''; FETCH cSrtRuimte INTO recSrtRuimte; EXIT WHEN cSrtRuimte%NOTFOUND; v_count_tot := v_count_tot + 1; v_aanduiding := recSrtRuimte.ALG_SRTRUIMTE_OMSCHRIJVING||'| '; v_errorhint := ' Fout bij toevoegen ruimtefunctie'; SELECT count(*) INTO v_count FROM alg_srtruimte WHERE upper(alg_srtruimte_omschrijving) = upper(recSrtRuimte.ALG_SRTRUIMTE_OMSCHRIJVING) AND alg_srtruimte_verwijder is null; IF (v_count = 0) THEN insert into ALG_SRTRUIMTE (ALG_SRTRUIMTE_OMSCHRIJVING ) values (recSrtRuimte.ALG_SRTRUIMTE_OMSCHRIJVING ); END IF; commit; v_count_update := v_count_update + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR(SQLERRM, 1, 200); v_errormsg := 'Fout tijdens verwerken ruimtefunctie ['||recSrtRuimte.ALG_SRTRUIMTE_OMSCHRIJVING||']'; v_errorhint := v_errorhint||': ' || 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', 'Ruimtefunctie: verwerkte regels zonder foutmelding: '||to_char(v_count_update), '' ); fac.imp_writelog (p_import_key, 'S', 'Ruimtefunctie: verwerkte regels met foutmelding: '||to_char(v_count_tot-v_count_update), '' ); END IF; CLOSE cSrtRuimte; -- ************ -- ***RUIMTE*** -- ************ OPEN cRuimte; v_count_update := 0; v_count_tot := 0; IF cRuimte%ISOPEN THEN LOOP BEGIN v_errormsg := ''; v_errorhint := ''; v_aanduiding := ''; v_ruimte_key := NULL; FETCH cRuimte INTO recRuimte; EXIT WHEN cRuimte%NOTFOUND; v_count_tot := v_count_tot + 1; v_aanduiding := recRuimte.ALG_LOCATIE_CODE||'|'||recRuimte.ALG_GEBOUW_CODE||'|'||recRuimte.ALG_VERDIEPING_VOLGNR||'|'||recRuimte.ALG_RUIMTE_NR||'| '; v_errorhint := ' Fout bij bepalen locatie'; SELECT ALG_LOCATIE_KEY INTO v_locatie_key FROM ALG_LOCATIE WHERE UPPER(ALG_LOCATIE_CODE) = UPPER(recRuimte.ALG_LOCATIE_CODE) AND ALG_LOCATIE_verwijder is null; v_errorhint := ' Fout bij bepalen gebouw'; SELECT ALG_GEBOUW_KEY INTO v_gebouw_key FROM ALG_GEBOUW WHERE UPPER(ALG_GEBOUW_CODE) = UPPER(recRuimte.ALG_GEBOUW_CODE) AND ALG_LOCATIE_KEY = v_locatie_key AND ALG_GEBOUW_verwijder is null; v_errorhint := ' Fout bij bepalen verdieping'; SELECT ALG_VERDIEPING_KEY INTO v_verdieping_key FROM ALG_VERDIEPING WHERE ALG_GEBOUW_KEY = v_gebouw_key AND ALG_VERDIEPING_VOLGNR = recRuimte.ALG_VERDIEPING_VOLGNR AND ALG_VERDIEPING_verwijder is null; v_errorhint := ' Fout bij bepalen ruimtefunctie'||' ['||recRuimte.alg_srtruimte_omschrijving||']'; SELECT ALG_SRTRUIMTE_KEY INTO v_srtruimte_key FROM ALG_SRTRUIMTE WHERE upper(alg_srtruimte_omschrijving) = upper(recRuimte.ALG_SRTRUIMTE_OMSCHRIJVING) AND ALG_SRTRUIMTE_verwijder is null; SELECT count(*) INTO v_count FROM ALG_RUIMTE WHERE ALG_VERDIEPING_KEY = v_verdieping_key AND UPPER(ALG_RUIMTE_NR) = UPPER(recRuimte.ALG_RUIMTE_NR) -- als ruimteomschrijving in sheet afwijkt geeft dit een onduidelijke error, dan liever -- de omschrijving negeren en gewoon niet bijwerken -- AND UPPER(ALG_RUIMTE_OMSCHRIJVING) = UPPER(recRuimte.ALG_RUIMTE_OMSCHRIJVING) AND alg_ruimte_verwijder is null; v_errorhint := ' Fout bij toevoegen ruimte'; IF v_count = 0 THEN insert into ALG_RUIMTE (ALG_VERDIEPING_KEY ,ALG_SRTRUIMTE_KEY ,ALG_RUIMTE_NR ,ALG_RUIMTE_OMSCHRIJVING ,ALG_RUIMTE_OPMERKING ,ALG_RUIMTE_BRUTO_VLOEROPP ) values (v_verdieping_key ,v_srtruimte_key ,recRuimte.ALG_RUIMTE_NR ,recRuimte.ALG_RUIMTE_OMSCHRIJVING ,'' ,TO_NUMBER(recRuimte.ALG_RUIMTE_BRUTO_VLOEROPP) ) RETURNING ALG_RUIMTE_KEY INTO v_ruimte_key; END IF; commit; v_count_update := v_count_update + 1; -- Als de ruimte al bestaat, dan nog de key ophalen, zodat we 'm hieronder kunnen gebruiken. IF (v_ruimte_key IS NULL) THEN v_errorhint := ' Fout bij bepalen ruimte'; SELECT ALG_RUIMTE_KEY INTO v_ruimte_key FROM ALG_RUIMTE WHERE ALG_VERDIEPING_KEY = v_verdieping_key AND UPPER(ALG_RUIMTE_NR) = UPPER(recRuimte.ALG_RUIMTE_NR) AND alg_ruimte_verwijder is null; END IF; -- ******************** -- ***RUIMTEAFDELING*** -- ******************** -- AAES#25942: koppel afdeling(en) aan ruimte; één afdeling per regel, ruimte kan meerdere keren voorkomen. IF (recRuimte.prs_afdeling_naam IS NOT NULL) THEN IF (recRuimte.prs_afdeling_key IS NULL) THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding||' afdeling ['||recRuimte.prs_afdeling_naam||']', 'Afdeling niet gevonden' ); ELSE IF (recRuimte.prs_ruimteafdeling_bezetting IS NULL) THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding||' afdeling ['||recRuimte.prs_afdeling_naam||']', 'Fout: afdeling gevuld, bezetting leeg!' ); ELSIF (recRuimte.prs_ruimteafdeling_bezetting > 100 OR recRuimte.prs_ruimteafdeling_bezetting < 0) THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding||' afdeling ['||recRuimte.prs_afdeling_naam||']', 'Ongeldige ruimtebezetting ['||TO_CHAR(recRuimte.prs_ruimteafdeling_bezetting)||'] verwacht 0 <= bezetting <= 100' ); ELSE BEGIN SELECT COUNT(*), MAX(prs_ruimteafdeling_key) INTO v_count, v_ruimteafdeling_key FROM prs_ruimteafdeling WHERE prs_ruimteafdeling_verwijder IS NULL AND prs_afdeling_key = recRuimte.prs_afdeling_key AND alg_ruimte_key = v_ruimte_key; IF (v_count = 0) THEN v_errorhint := ' Fout bij toevoegen ruimtebezetting'; INSERT INTO prs_ruimteafdeling (prs_afdeling_key ,alg_ruimte_key ,prs_ruimteafdeling_bezetting) VALUES (recRuimte.prs_afdeling_key ,v_ruimte_key ,recRuimte.prs_ruimteafdeling_bezetting ); END IF; IF (v_count = 1) THEN v_errorhint := ' Fout bij aanpassen ruimtebezetting'; UPDATE prs_ruimteafdeling SET prs_ruimteafdeling_bezetting = recRuimte.prs_ruimteafdeling_bezetting WHERE prs_ruimteafdeling_key = v_ruimteafdeling_key; END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR(SQLERRM, 1, 200); v_errormsg := 'Fout tijdens verwerken ruimteafdeling ['|| recRuimte.ALG_LOCATIE_CODE||'-'||recRuimte.ALG_GEBOUW_CODE||'-'||recRuimte.ALG_VERDIEPING_VOLGNR||'-'||recRuimte.ALG_RUIMTE_NR ||'] / ['||recRuimte.PRS_AFDELING_NAAM||']'; v_errorhint := v_errorhint||': ' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_aanduiding||v_errormsg, v_errorhint ); commit; END; END IF; END IF; END IF; -- ******************* -- ***FLEXKENMERKEN*** -- ******************* v_errorhint := ' Fout bij toevoegen/bijwerken flexkenmerken'; upsert_algkenmerk (v_ruimte_key, recRuimte.kenmerk_key1, recRuimte.waarde1); upsert_algkenmerk (v_ruimte_key, recRuimte.kenmerk_key2, recRuimte.waarde2); upsert_algkenmerk (v_ruimte_key, recRuimte.kenmerk_key3, recRuimte.waarde3); upsert_algkenmerk (v_ruimte_key, recRuimte.kenmerk_key4, recRuimte.waarde4); upsert_algkenmerk (v_ruimte_key, recRuimte.kenmerk_key5, recRuimte.waarde5); EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR(SQLERRM, 1, 200); v_errormsg := 'Fout tijdens verwerken ruimte ['||recRuimte.ALG_LOCATIE_CODE||'-'||recRuimte.ALG_GEBOUW_CODE||'-'||recRuimte.ALG_VERDIEPING_VOLGNR||'-'||recRuimte.ALG_RUIMTE_NR||']'; v_errorhint := v_errorhint||': ' || 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', 'Ruimte: verwerkte regels zonder foutmelding: '||to_char(v_count_update), '' ); fac.imp_writelog (p_import_key, 'S', 'Ruimte: verwerkte regels met foutmelding: '||to_char(v_count_tot-v_count_update), '' ); END IF; CLOSE cRuimte; -- **************** -- ***OPSTELLING*** -- **************** OPEN cOpstelling; v_count_update := 0; v_count_tot := 0; IF cOpstelling%ISOPEN THEN LOOP BEGIN v_errormsg := ''; v_errorhint := ''; v_aanduiding := ''; FETCH cOpstelling INTO recOpstelling; EXIT WHEN cOpstelling%NOTFOUND; v_count_tot := v_count_tot + 1; v_aanduiding := recOpstelling.RES_OPSTELLING_OMSCHRIJVING||'| '; v_errorhint := ' Fout bij toevoegen opstelling'; select count(*) into v_count from RES_OPSTELLING where RES_OPSTELLING_verwijder is null and trim(RES_OPSTELLING_upper) = upper(trim(recOpstelling.RES_OPSTELLING_OMSCHRIJVING)); IF (v_count = 0) THEN insert into RES_OPSTELLING (RES_OPSTELLING_OMSCHRIJVING ) values (trim(recOpstelling.RES_OPSTELLING_OMSCHRIJVING) ); END IF; commit; v_count_update := v_count_update + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR(SQLERRM, 1, 200); v_errormsg := 'Fout tijdens verwerken opstelling ['||recOpstelling.RES_OPSTELLING_OMSCHRIJVING||']'; v_errorhint := v_errorhint||': ' || 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', 'Opstelling: verwerkte regels zonder foutmelding: '||to_char(v_count_update), '' ); fac.imp_writelog (p_import_key, 'S', 'Opstelling: verwerkte regels met foutmelding: '||to_char(v_count_tot-v_count_update), '' ); END IF; CLOSE cOpstelling; -- *************** -- ***CATEGORIE*** -- *************** OPEN cCategorie; v_count_update := 0; v_count_tot := 0; IF cCategorie%ISOPEN THEN LOOP BEGIN v_errormsg := ''; v_errorhint := ''; v_aanduiding := ''; FETCH cCategorie INTO recCategorie; EXIT WHEN cCategorie%NOTFOUND; v_count_tot := v_count_tot + 1; v_aanduiding := recCategorie.res_discipline_omschrijving||'| '; v_errorhint := ' Fout bij toevoegen categorie'; select count(*) into v_count from ins_tab_discipline where ins_discipline_verwijder is null and ins_discipline_module='RES' and upper(trim(ins_discipline_omschrijving)) = upper(trim(recCategorie.res_discipline_omschrijving)); IF (v_count = 0) THEN INSERT INTO ins_tab_discipline (ins_discipline_module ,ins_discipline_omschrijving ,ins_discipline_verwijder ,ins_discipline_min_level) VALUES ('RES' ,trim(recCategorie.res_discipline_omschrijving) ,to_date(null) ,3) RETURNING ins_discipline_key INTO v_discipline_key; INSERT INTO res_disc_params (res_ins_discipline_key ,res_disc_params_expire_dagen) VALUES (v_discipline_key ,recCategorie.res_discipline_expire_dagen ); END IF; commit; v_count_update := v_count_update + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR(SQLERRM, 1, 200); v_errormsg := 'Fout tijdens verwerken catalogus ['||recCategorie.res_discipline_omschrijving||']'; v_errorhint := v_errorhint||': ' || 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', 'Categorie: verwerkte regels zonder foutmelding: '||to_char(v_count_update), '' ); fac.imp_writelog (p_import_key, 'S', 'Categorie: verwerkte regels met foutmelding: '||to_char(v_count_tot-v_count_update), '' ); END IF; CLOSE cCategorie; -- *************** -- ***RESRUIMTE*** -- *************** OPEN cResRuimte; v_count_update := 0; v_count_tot := 0; IF cResRuimte%ISOPEN THEN LOOP BEGIN v_errormsg := ''; v_errorhint := ''; v_aanduiding := ''; FETCH cResRuimte INTO recResRuimte; EXIT WHEN cResRuimte%NOTFOUND; v_count_tot := v_count_tot + 1; v_aanduiding := recResRuimte.ALG_LOCATIE_CODE||'|'||recResRuimte.ALG_GEBOUW_CODE||'|'||recResRuimte.ALG_VERDIEPING_VOLGNR||'|'||recResRuimte.ALG_RUIMTE_NR||'| '; v_errorhint := ' Fout bij bepalen locatie'; SELECT ALG_LOCATIE_KEY INTO v_locatie_key FROM ALG_LOCATIE WHERE UPPER(ALG_LOCATIE_CODE) = UPPER(recResRuimte.ALG_LOCATIE_CODE) AND alg_locatie_verwijder is null; v_errorhint := ' Fout bij bepalen gebouw'; SELECT ALG_GEBOUW_KEY INTO v_gebouw_key FROM ALG_GEBOUW WHERE UPPER(ALG_GEBOUW_CODE) = UPPER(recResRuimte.ALG_GEBOUW_CODE) AND ALG_LOCATIE_KEY = v_locatie_key AND alg_gebouw_verwijder is null; v_errorhint := ' Fout bij bepalen verdieping'; SELECT ALG_VERDIEPING_KEY, ALG_VERDIEPING_VOLGNR INTO v_verdieping_key, v_verdieping_volgnr FROM ALG_VERDIEPING WHERE ALG_GEBOUW_KEY = v_gebouw_key AND ALG_VERDIEPING_VOLGNR = recResRuimte.ALG_VERDIEPING_VOLGNR AND alg_verdieping_verwijder is null; v_errorhint := ' Fout bij bepalen ruimte'; SELECT ALG_RUIMTE_KEY INTO v_ruimte_key FROM ALG_V_AANWEZIGRUIMTE WHERE ALG_VERDIEPING_KEY = v_verdieping_key AND ALG_RUIMTE_UPPER_NR = UPPER(recResRuimte.ALG_RUIMTE_NR); v_errorhint := ' Fout bij bepalen catalogus ['||recResRuimte.res_discipline_omschrijving||']'; SELECT ins_discipline_key INTO v_discipline_key FROM RES_V_RES_CATALOGUS WHERE ins_discipline_verwijder IS NULL AND ins_discipline_min_level = 3 AND upper(trim(ins_discipline_omschrijving)) = upper(trim(recResRuimte.res_discipline_omschrijving)); v_errorhint := ' Fout bij bepalen opstelling ['||recResRuimte.RES_OPSTELLING_OMSCHRIJVING||']'; SELECT RES_OPSTELLING_KEY INTO v_opstelling_key FROM RES_OPSTELLING WHERE UPPER(trim(RES_OPSTELLING_OMSCHRIJVING)) = UPPER(trim(recResRuimte.RES_OPSTELLING_OMSCHRIJVING)) AND RES_OPSTELLING_verwijder is null; v_errorhint := ' Fout bij samenstellen ruimte-omschrijving'; IF (recResRuimte.RES_RUIMTE_NR IS NULL) THEN v_ruimte_omschrijving := SUBSTR( recResRuimte.ALG_LOCATIE_CODE || '-' || recResRuimte.ALG_GEBOUW_CODE || '-' || TO_CHAR(recResRuimte.ALG_VERDIEPING_VOLGNR) || '-' || recResRuimte.ALG_RUIMTE_NR,1,40); ELSE v_ruimte_omschrijving := recResRuimte.RES_RUIMTE_NR; END IF; v_errorhint := 'Fout bij bepalen reserveerbare ruimte'; SELECT count(*) INTO v_count FROM RES_RUIMTE WHERE RES_RUIMTE_UPPER = upper(v_ruimte_omschrijving) AND res_ruimte_verwijder is null; IF v_count = 0 THEN v_errorhint := 'Fout bij toevoegen reserveerbare ruimte'; INSERT INTO RES_RUIMTE (RES_RUIMTE_NR ,RES_RUIMTE_UPPER ,RES_RUIMTE_PRIJS ,RES_RUIMTE_OMSCHRIJVING ,RES_DISCIPLINE_KEY ) VALUES (v_ruimte_omschrijving ,upper(v_ruimte_omschrijving) ,recResRuimte.RES_RUIMTE_PRIJS ,recResRuimte.RES_RUIMTE_OMSCHRIJVING ,v_discipline_key ) RETURNING RES_RUIMTE_KEY INTO v_res_ruimte_key; v_errorhint := 'Fout bij koppelen ruimte en reserveerbare ruimte'; insert into RES_ALG_RUIMTE (RES_RUIMTE_KEY ,ALG_RUIMTE_KEY ) values (v_res_ruimte_key ,v_ruimte_key ); ELSE SELECT RES_RUIMTE_KEY INTO v_res_ruimte_key FROM RES_RUIMTE WHERE RES_RUIMTE_UPPER = upper(v_ruimte_omschrijving) AND res_ruimte_verwijder IS NULL; END IF; v_errorhint := 'Fout bij koppelen opstelling en reserveerbare ruimte'; insert into RES_RUIMTE_OPSTELLING (RES_RUIMTE_KEY ,RES_OPSTELLING_KEY ,RES_RUIMTE_OPSTEL_BEZOEKERS ) values (v_res_ruimte_key ,v_opstelling_key ,NVL(recResRuimte.RES_RUIMTE_OPSTEL_BEZOEKERS, 0) ); commit; v_count_update := v_count_update + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR(SQLERRM, 1, 200); v_errormsg := 'Reserveerbare ruimte ['||recResRuimte.RES_RUIMTE_OMSCHRIJVING||']'; v_errorhint := v_errorhint||': ' || 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', 'Res. ruimte: verwerkte regels zonder foutmelding: '||to_char(v_count_update), '' ); fac.imp_writelog (p_import_key, 'S', 'Res. ruimte: verwerkte regels met foutmelding: '||to_char(v_count_tot-v_count_update), '' ); END IF; CLOSE cResRuimte; EXCEPTION WHEN OTHERS THEN oracle_err_mes := SUBSTR (SQLERRM, 1, 150); v_errormsg := '(ORACLE error ' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', 'Fout tijdens importeren van onroerend goed (verdieping en ruimte) ', '' ); END fac_update_onrgoed2; / CREATE OR REPLACE PROCEDURE fac_update_onrgoed2_del ( p_import_key IN NUMBER ) IS BEGIN fac.imp_alg_delete_onrgoed(p_import_key,2); fac_update_onrgoed2(p_import_key); END fac_update_onrgoed2_del; / CREATE OR REPLACE PROCEDURE fac_import_onrgoed2_del ( p_import_key IN NUMBER ) IS BEGIN fac_import_onrgoed2(p_import_key); END fac_import_onrgoed2_del; / --// PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports --// PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports --// PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports --// 2. PRS --//////////////////////////////////////////////////PRS IMPORT STUFF/////////////////////////////////////////// CREATE OR REPLACE PROCEDURE fac_import_organisatie (p_import_key IN NUMBER ) AS c_fielddelimitor VARCHAR2 (2) := fac.import_delimiter(p_import_key); v_newline VARCHAR2 (1000); -- Input line v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); header_is_valid NUMBER; v_count NUMBER; v_ongeldig NUMBER (1); v_mode NUMBER (1); v_aanduiding VARCHAR2 (200); v_all_null BOOLEAN; v_count_error NUMBER (10); v_count_tot NUMBER (10); v_count_import NUMBER (10); -- De importvelden: v_bedrijf_naam VARCHAR2 (256); v_afdeling_naam VARCHAR2 (256); v_afdeling_naam_parent VARCHAR2 (256); v_afdeling_omschrijving VARCHAR2 (256); v_kostenplaats_nr VARCHAR2 (256); v_externid VARCHAR2 (256); -- PRS_BEDRIJF 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 fac_imp_organisatie; COMMIT; v_count_error := 0; header_is_valid := 0; v_count_tot := 0; v_count_import := 0; FOR rec1 IN c1 LOOP BEGIN v_errormsg := 'Fout FETCH te importeren rij'; v_newline := rec1.fac_imp_file_line; v_errormsg := 'Fout opvragen te importeren rij'; v_aanduiding := ''; v_ongeldig := 0; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_fielddelimitor, v_bedrijf_naam); fac.imp_getfield (v_newline, c_fielddelimitor, v_afdeling_naam_parent); fac.imp_getfield (v_newline, c_fielddelimitor, v_afdeling_naam); fac.imp_getfield (v_newline, c_fielddelimitor, v_afdeling_omschrijving); fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_nr); fac.imp_getfield (v_newline, c_fielddelimitor, v_externid); v_aanduiding := v_bedrijf_naam || '|' || v_afdeling_naam || '|' || v_afdeling_omschrijving || '| '; IF (header_is_valid = 0) THEN IF UPPER (v_bedrijf_naam) = 'BEDRIJFSNAAM' AND UPPER (v_afdeling_naam_parent) = 'AFDELINGSCODEPARENT' AND UPPER (v_kostenplaats_nr) = 'KOSTENPLAATS' THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; --fac.imp_writelog (p_import_key, 'I', v_aanduiding, ''); -- Controleer alle veldwaarde v_bedrijf_naam := TRIM (v_bedrijf_naam); IF LENGTH (v_bedrijf_naam) > 60 THEN v_bedrijf_naam := SUBSTR (v_bedrijf_naam, 1, 60); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Bedrijf-aanduiding is te lang', 'Aanduiding wordt afgebroken tot [' || v_bedrijf_naam || ']' ); END IF; -- v_afdeling_naam := TRIM (v_afdeling_naam); IF LENGTH (v_afdeling_naam) > 15 THEN v_afdeling_naam := SUBSTR (v_afdeling_naam, 1, 15); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Afdeling-aanduiding is te lang', 'Aanduiding wordt afgebroken tot [' || v_afdeling_naam || ']' ); END IF; -- v_afdeling_naam_parent := TRIM (v_afdeling_naam_parent); IF LENGTH (v_afdeling_naam_parent) > 15 THEN v_afdeling_naam_parent := SUBSTR (v_afdeling_naam_parent, 1, 15); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Afdeling-aanduiding is te lang', 'Aanduiding wordt afgebroken tot [' || v_afdeling_naam_parent || ']' ); END IF; -- v_afdeling_omschrijving := TRIM (v_afdeling_omschrijving); IF LENGTH (v_afdeling_omschrijving) > 60 THEN v_afdeling_omschrijving := SUBSTR (v_afdeling_omschrijving, 1, 60); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Afdelingsomschrijving is te lang', 'Aanduiding wordt afgebroken tot [' || v_afdeling_omschrijving || ']' ); END IF; -- v_kostenplaats_nr := TRIM (v_kostenplaats_nr); IF LENGTH (v_kostenplaats_nr) > 30 THEN v_kostenplaats_nr := SUBSTR (v_kostenplaats_nr, 1, 30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Kostenplaats-aanduiding is te lang', 'Aanduiding wordt afgebroken tot [' || v_kostenplaats_nr || ']' ); END IF; -- v_externid := TRIM(v_externid); IF LENGTH (v_externid) > 256 THEN v_externid := SUBSTR(v_externid, 1, 256); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Extern Id is te lang', 'Extern Id wort afgebroken tot [' || v_externid || ']' ); END IF; v_all_null := (v_bedrijf_naam IS NULL) AND (v_afdeling_naam IS NULL) AND (v_afdeling_naam_parent IS NULL) AND (v_afdeling_omschrijving IS NULL) AND (v_kostenplaats_nr IS NULL); -- Insert geformatteerde import record IF v_ongeldig = 0 THEN v_errormsg := 'Fout bij toevoegen te impoteren bedrijf/afdeling [' || v_afdeling_naam || ']'; INSERT INTO fac_imp_organisatie ( prs_bedrijf_naam, prs_afdeling_naam, prs_afdeling_naam_parent, prs_afdeling_omschrijving, prs_kostenplaats_nr, prs_afdeling_externid ) VALUES ( v_bedrijf_naam, v_afdeling_naam, v_afdeling_naam_parent, v_afdeling_omschrijving, v_kostenplaats_nr, v_externid ); v_count_import := v_count_import + 1; END IF; END IF; END; END LOOP; IF (header_is_valid = 0) THEN fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Ongeldig importbestand', 'Geen geldige headerregel aanwezig' ); ELSE fac.imp_writelog (p_import_key, 'S', 'Bedrijf: aantal ingelezen regels: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog (p_import_key, 'S', 'Bedrijf: aantal ongeldige 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, 100); v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, ''); END fac_import_organisatie; / CREATE OR REPLACE PROCEDURE fac_import_organisatie_del ( p_import_key IN NUMBER ) IS BEGIN fac_import_organisatie(p_import_key); END; / CREATE OR REPLACE PROCEDURE fac_update_organisatie ( p_import_key IN NUMBER ) IS c_fielddelimitor 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); v_aanduiding VARCHAR2 (200); v_count NUMBER(10); v_ongeldig NUMBER(1); v_count_update NUMBER(10); v_count_error NUMBER(10); v_count_tot NUMBER(10); -- v_bedrijf_key NUMBER(10); v_kostenplaats_key NUMBER(10); v_prs_afdeling_parentkey NUMBER(10); CURSOR cBedrijf IS SELECT min(prs_bedrijf_naam) prs_bedrijf_naam FROM fac_imp_organisatie WHERE prs_bedrijf_naam is not null GROUP BY upper(prs_bedrijf_naam); recBedrijf cBedrijf%ROWTYPE; -- Bij 1-op-1 relatie tussen kostenplaats en afdeling de kostenplaatsomschrijving zetten op -- de afdelingsomschrijving, ander de kostenplaatsomschrijving leeg laten. CURSOR cKPN IS SELECT MIN(prs_kostenplaats_nr) prs_kostenplaats_nr, DECODE(COUNT(*),1,MAX(prs_afdeling_omschrijving),'') prs_kostenplaats_omschrijving, 'PRS' prs_kostenplaats_module FROM FAC_IMP_ORGANISATIE WHERE prs_kostenplaats_nr IS NOT NULL GROUP BY UPPER(prs_kostenplaats_nr); recKPN cKpn%ROWTYPE; CURSOR cAfdeling1 IS SELECT MIN(prs_bedrijf_naam) prs_bedrijf_naam ,UPPER(prs_bedrijf_naam) prs_bedrijf_naam_upper ,MIN(prs_afdeling_naam) prs_afdeling_naam ,UPPER(prs_afdeling_naam) prs_afdeling_upper ,MAX(prs_afdeling_omschrijving) prs_afdeling_omschrijving ,MIN(prs_afdeling_naam_parent) prs_afdeling_naam_parent ,MIN(UPPER(prs_afdeling_naam_parent)) prs_afdeling_naam_parent_upper ,MAX(prs_kostenplaats_nr) prs_kostenplaats_nr ,MAX(UPPER(prs_kostenplaats_nr)) prs_kostenplaats_upper ,MAX(prs_afdeling_externid) prs_afdeling_externid ,NIVEAU FROM (SELECT 1 NIVEAU, a1.prs_bedrijf_naam, a1.prs_afdeling_naam, a1.prs_afdeling_omschrijving, a1.prs_kostenplaats_nr, '' PRS_AFDELING_NAAM_PARENT, a1.prs_afdeling_externid FROM FAC_IMP_ORGANISATIE a1 WHERE a1.prs_afdeling_naam_parent IS NULL UNION ALL SELECT 2, a2.prs_bedrijf_naam, a2.prs_afdeling_naam, a2.prs_afdeling_omschrijving, a2.prs_kostenplaats_nr, a1.prs_afdeling_naam, a2.prs_afdeling_externid FROM FAC_IMP_ORGANISATIE a1, FAC_IMP_ORGANISATIE a2 WHERE a2.prs_afdeling_naam_parent = a1.prs_afdeling_naam AND a1.prs_afdeling_naam_parent IS NULL UNION ALL SELECT 3, a3.prs_bedrijf_naam, a3.prs_afdeling_naam, a3.prs_afdeling_omschrijving, a3.prs_kostenplaats_nr, a2.prs_afdeling_naam, a3.prs_afdeling_externid FROM FAC_IMP_ORGANISATIE a1, FAC_IMP_ORGANISATIE a2, FAC_IMP_ORGANISATIE a3 WHERE a3.prs_afdeling_naam_parent = a2.prs_afdeling_naam AND a2.prs_afdeling_naam_parent = a1.prs_afdeling_naam AND a1.prs_afdeling_naam_parent IS NULL UNION ALL SELECT 4, a4.prs_bedrijf_naam, a4.prs_afdeling_naam, a4.prs_afdeling_omschrijving, a4.prs_kostenplaats_nr, a3.prs_afdeling_naam, a4.prs_afdeling_externid FROM FAC_IMP_ORGANISATIE a1, FAC_IMP_ORGANISATIE a2, FAC_IMP_ORGANISATIE a3, FAC_IMP_ORGANISATIE a4 WHERE a4.prs_afdeling_naam_parent = a3.prs_afdeling_naam AND a3.prs_afdeling_naam_parent = a2.prs_afdeling_naam AND a2.prs_afdeling_naam_parent = a1.prs_afdeling_naam AND a1.prs_afdeling_naam_parent IS NULL UNION ALL SELECT 5, a5.prs_bedrijf_naam, a5.prs_afdeling_naam, a5.prs_afdeling_omschrijving, a5.prs_kostenplaats_nr, a4.prs_afdeling_naam, a5.prs_afdeling_externid FROM FAC_IMP_ORGANISATIE a1, FAC_IMP_ORGANISATIE a2, FAC_IMP_ORGANISATIE a3, FAC_IMP_ORGANISATIE a4, FAC_IMP_ORGANISATIE a5 WHERE a5.prs_afdeling_naam_parent = a4.prs_afdeling_naam AND a4.prs_afdeling_naam_parent = a3.prs_afdeling_naam AND a3.prs_afdeling_naam_parent = a2.prs_afdeling_naam AND a2.prs_afdeling_naam_parent = a1.prs_afdeling_naam AND a1.prs_afdeling_naam_parent IS NULL) WHERE ((prs_bedrijf_naam IS NOT NULL) AND (prs_afdeling_naam IS NOT NULL)) -- geen lege regels GROUP BY UPPER(prs_bedrijf_naam), UPPER(prs_afdeling_naam), NIVEAU ORDER BY NIVEAU; recAfdeling1 cAfdeling1%ROWTYPE; BEGIN OPEN cBedrijf; v_count_update := 0; v_count_tot := 0; v_count_error := 0; IF cBedrijf%ISOPEN THEN LOOP BEGIN FETCH cBedrijf INTO recBedrijf; EXIT WHEN cBedrijf%NOTFOUND; v_count_tot := v_count_tot + 1; v_aanduiding := recBedrijf.PRS_BEDRIJF_NAAM||'| '; v_errormsg := ''; v_errorhint := ''; v_errorhint := 'Kijken of bedrijf al bestaat'; SELECT count(*) INTO v_count FROM prs_bedrijf WHERE upper(prs_bedrijf_naam_upper) = upper(recBedrijf.prs_bedrijf_naam) AND prs_bedrijf_verwijder is null; IF (v_count = 0) THEN v_errorhint := 'Fout bij toevoegen bedrijf'; INSERT INTO PRS_BEDRIJF ( prs_bedrijf_naam ,prs_bedrijf_intern ) VALUES ( recBedrijf.prs_bedrijf_naam ,1 ); commit; v_count_update := v_count_update + 1; END IF; EXCEPTION WHEN OTHERS THEN v_count_error := v_count_error + 1; oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR(SQLERRM, 1, 200); IF (v_errormsg IS NULL) THEN v_errormsg := 'Fout tijdens verwerken van bedrijf ['||recBedrijf.PRS_BEDRIJF_NAAM||']'; END IF; v_errorhint := v_errorhint||': ' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_aanduiding||v_errormsg, v_errorhint ); commit; -- tbv logging END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'Bedrijf: verwerkte regels zonder foutmelding: '||to_char(v_count_tot-v_count_error), '' ); fac.imp_writelog (p_import_key, 'S', 'Bedrijf: verwerkte regels met foutmelding: '||to_char(v_count_error), '' ); END IF; OPEN cKPN; v_count_update := 0; v_count_tot := 0; v_count_error := 0; IF cKPN%ISOPEN THEN LOOP BEGIN v_aanduiding := recKPN.PRS_KOSTENPLAATS_NR||'| '; v_errormsg := ''; v_errorhint := ''; FETCH cKPN INTO recKPN; EXIT WHEN cKPN%NOTFOUND; v_count_tot := v_count_tot + 1; v_aanduiding := recBedrijf.PRS_BEDRIJF_NAAM||'| '; v_errormsg := ''; v_errorhint := ''; v_errorhint := 'Kijken of de kostenplaats al bestaat'; SELECT count(*) INTO v_count FROM prs_kostenplaats WHERE prs_kostenplaats_verwijder is null AND upper(prs_kostenplaats_upper) = upper(recKPN.prs_kostenplaats_nr); IF (v_count = 0) THEN v_errorhint := 'Fout bij toevoegen kostenplaats'; INSERT INTO PRS_KOSTENPLAATS (PRS_KOSTENPLAATS_NR ,PRS_KOSTENPLAATS_OMSCHRIJVING ,PRS_KOSTENPLAATS_MODULE) VALUES (recKPN.prs_kostenplaats_nr ,recKPN.prs_kostenplaats_omschrijving ,recKPN.prs_kostenplaats_module); commit; v_count_update := v_count_update + 1; END IF; EXCEPTION WHEN OTHERS THEN v_count_error := v_count_error + 1; oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR(SQLERRM, 1, 200); IF (v_errormsg IS NULL) THEN v_errormsg := 'Fout tijdens verwerken van kostenplaats ['||recKPN.PRS_KOSTENPLAATS_NR||']'; END IF; v_errorhint := v_errorhint||': ' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_aanduiding||v_errormsg, v_errorhint ); commit; -- tbv logging END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'Kostenplaats: verwerkte regels zonder foutmelding: '||to_char(v_count_tot-v_count_error), '' ); fac.imp_writelog (p_import_key, 'S', 'Kostenplaats: verwerkte regels met foutmelding: '||to_char(v_count_error), '' ); END IF; OPEN cAfdeling1; v_count_update := 0; v_count_tot := 0; v_count_error := 0; IF cAfdeling1%ISOPEN THEN LOOP BEGIN FETCH cAfdeling1 INTO recAfdeling1; EXIT WHEN cAfdeling1%NOTFOUND; v_count_tot := v_count_tot + 1; v_aanduiding := recAfdeling1.prs_bedrijf_naam||'|'||recAfdeling1.prs_afdeling_naam||'|'||recAfdeling1.prs_afdeling_naam_parent ||'| '; v_errormsg := ''; v_errorhint := ''; IF (recAfdeling1.niveau = 1) THEN v_errorhint := 'Bedrijf niet gevonden bij afdeling'; v_prs_afdeling_parentkey := to_number(NULL); SELECT prs_bedrijf_key INTO v_bedrijf_key FROM prs_bedrijf WHERE prs_bedrijf_verwijder IS NULL AND prs_bedrijf_naam_upper = recAfdeling1.prs_bedrijf_naam_upper; ELSE v_errorhint := 'Parent van de afdeling niet gevonden'; v_bedrijf_key := to_number(NULL); SELECT prs_afdeling_key INTO v_prs_afdeling_parentkey FROM prs_afdeling WHERE prs_afdeling_verwijder IS NULL AND prs_afdeling_upper = recAfdeling1.prs_afdeling_naam_parent_upper; END IF; v_errorhint := 'Bepalen of afdeling bestaat'; SELECT count(*) INTO v_count FROM prs_afdeling WHERE upper(rtrim(prs_afdeling_omschrijving)) = upper(rtrim(recAfdeling1.prs_afdeling_omschrijving)) AND prs_afdeling_verwijder is null; v_errorhint := 'Kostenplaats bij afdeling bepalen'; SELECT COUNT(*), NVL(MAX(prs_kostenplaats_key),to_number(NULL)) INTO v_count, v_kostenplaats_key FROM PRS_KOSTENPLAATS WHERE prs_kostenplaats_verwijder IS NULL AND prs_kostenplaats_upper = UPPER(trim(recAfdeling1.prs_kostenplaats_upper)) AND UPPER(prs_kostenplaats_module) = 'PRS'; v_errorhint := 'Kostenplaats bij afdeling bepalen'; SELECT COUNT(*) INTO v_count FROM PRS_AFDELING WHERE prs_afdeling_verwijder IS NULL AND prs_afdeling_upper = UPPER(trim(recAfdeling1.prs_afdeling_upper)); v_errorhint := 'Fout bij toevoegen afdeling'; IF (v_count = 0) THEN INSERT INTO prs_afdeling ( prs_afdeling_naam , prs_afdeling_omschrijving , prs_bedrijf_key , prs_afdeling_parentkey , prs_kostenplaats_key , prs_afdeling_externid ) VALUES ( recAfdeling1.prs_afdeling_naam , recAfdeling1.prs_afdeling_omschrijving , v_bedrijf_key , v_prs_afdeling_parentkey , v_kostenplaats_key , recAfdeling1.prs_afdeling_externid ); COMMIT; v_count_update := v_count_update + 1; END IF; EXCEPTION WHEN OTHERS THEN v_count_error := v_count_error + 1; oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR(SQLERRM, 1, 200); IF (v_errormsg IS NULL) THEN v_errormsg := 'Fout tijdens verwerken van afdeling ['||recAfdeling1.PRS_AFDELING_NAAM||']'; END IF; v_errorhint := v_errorhint||': ' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_aanduiding||v_errormsg, v_errorhint ); commit; -- tbv logging END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'Afdeling: verwerkte regels zonder foutmelding: '||to_char(v_count_tot-v_count_error), '' ); fac.imp_writelog (p_import_key, 'S', 'Afdeling: verwerkte regels met foutmelding: '||to_char(v_count_error), '' ); END IF; CLOSE cAfdeling1; END fac_update_organisatie; / CREATE OR REPLACE PROCEDURE fac_update_organisatie_del ( p_import_key IN NUMBER ) IS BEGIN fac.imp_prs_delete_organisatie(p_import_key,1); fac_update_organisatie(p_import_key); END; / -- FIP routine voor kostenplaatsen. Indien een niet verwijderde kostenplaats met hetzelfde -- nummer gevonden kan worden dan zal deze aangepast worden. Anders wordt een nieuwe kostenplaats -- aangemaakt. CREATE OR REPLACE PROCEDURE fac_import_kpn (p_import_key IN NUMBER) AS c_fielddelimitor VARCHAR2 (2) := fac.import_delimiter(p_import_key); v_newline VARCHAR2 (1000); -- Input line v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); header_is_valid NUMBER; v_count NUMBER; v_ongeldig NUMBER (1); v_mode NUMBER (1); v_aanduiding VARCHAR2 (200); v_all_null BOOLEAN; v_count_error NUMBER (10); v_count_tot NUMBER (10); v_count_import NUMBER (10); -- De importvelden: v_kostenplaats_nr VARCHAR2 (255); v_kostenplaats_omschrijving VARCHAR2 (255); v_kostenplaats_module VARCHAR2 (255); v_kostenplaats_begin VARCHAR2 (255); v_kostenplaats_begin_d DATE; v_kostenplaats_eind VARCHAR2 (255); v_kostenplaats_eind_d DATE; v_kostenplaatsgrp_oms VARCHAR2 (255); v_kostenplaatsgrp_key NUMBER; v_perslid VARCHAR2 (255); v_perslid_key NUMBER (10); v_kostenplaats_limiet VARCHAR2 (255); v_kostenplaats_limietperiode VARCHAR2 (255); v_kostenplaats_extern VARCHAR2 (255); v_kostenplaats_fiat VARCHAR2 (255); CURSOR c IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; BEGIN -- Eerst opruiming DELETE FROM fac_imp_kpn; COMMIT; v_count_error := 0; header_is_valid := 0; v_count_tot := 0; v_count_import := 0; FOR rec IN c LOOP BEGIN v_errormsg := 'Fout FETCH te importeren rij'; v_newline := rec.fac_imp_file_line; v_errormsg := 'Fout opvragen te importeren rij'; v_aanduiding := ''; v_ongeldig := 0; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_nr); fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_omschrijving); fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_module); fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_begin); fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_eind); fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaatsgrp_oms); fac.imp_getfield (v_newline, c_fielddelimitor, v_perslid); fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_limiet); fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_limietperiode); fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_extern); fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_fiat); v_aanduiding := v_kostenplaats_nr || '|' || v_kostenplaats_omschrijving; IF v_kostenplaats_nr IS NOT NULL THEN IF (header_is_valid = 0) THEN IF UPPER (v_kostenplaats_nr) = 'KOSTENPLAATS' AND UPPER (v_perslid) = 'BUDGETHOUDER' AND UPPER (v_kostenplaats_fiat) = 'OPDRACHTENFIATTEREN' THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; --fac.imp_writelog (p_import_key, 'I', v_aanduiding, ''); -- Controleer alle veldwaarde v_kostenplaats_nr := TRIM (v_kostenplaats_nr); IF LENGTH (v_kostenplaats_nr) > 30 THEN v_kostenplaats_nr := SUBSTR (v_kostenplaats_nr, 1, 30); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Kostenplaatsnummer is te lang', 'Kostenplaatsnummer wordt afgebroken tot [' || v_kostenplaats_nr || ']'); END IF; -- v_kostenplaats_omschrijving := TRIM (v_kostenplaats_omschrijving); IF LENGTH (v_kostenplaats_omschrijving) > 60 THEN v_kostenplaats_omschrijving := SUBSTR (v_kostenplaats_omschrijving, 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Kostenpaatsomschrijving is te lang', 'Kostenpaatsomschrijving wordt afgebroken tot [' || v_kostenplaats_omschrijving || ']'); END IF; -- v_kostenplaats_module := UPPER (TRIM (v_kostenplaats_module)); IF v_kostenplaats_module NOT IN ('ALG', 'PRS', 'PRJ') THEN v_kostenplaats_module := 'PRS'; fac.imp_writelog ( p_import_key, 'E', v_aanduiding || 'Ongelding kostenplaatstype', 'Kostenplaatstype wordt aangepast naar [' || v_kostenplaats_module || ']'); END IF; -- v_kostenplaats_begin := TRIM (v_kostenplaats_begin); v_kostenplaats_begin_d := fac.safe_to_date (v_kostenplaats_begin, 'dd-mm-yyyy'); IF v_kostenplaats_begin IS NOT NULL AND v_kostenplaats_begin_d IS NULL THEN fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Kostenplaatsbegin is ongeldig', 'Kostenplaatsbegin wordt leeg gemaakt'); END IF; -- v_kostenplaats_eind := TRIM (v_kostenplaats_eind); v_kostenplaats_eind_d := fac.safe_to_date (v_kostenplaats_eind, 'dd-mm-yyyy'); IF v_kostenplaats_eind IS NOT NULL AND v_kostenplaats_eind_d IS NULL THEN fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Kostenplaatseind is ongeldig', 'Kostenplaatseind wordt leeg gemaakt'); END IF; -- v_kostenplaatsgrp_oms := TRIM (v_kostenplaatsgrp_oms); IF v_kostenplaatsgrp_oms IS NOT NULL THEN BEGIN SELECT prs_kostenplaatsgrp_key INTO v_kostenplaatsgrp_key FROM prs_kostenplaatsgrp WHERE UPPER (prs_kostenplaatsgrp_oms) = UPPER (v_kostenplaatsgrp_oms); EXCEPTION WHEN NO_DATA_FOUND THEN v_kostenplaatsgrp_key := NULL; fac.imp_writelog ( p_import_key, 'E', v_aanduiding || 'Kostenplaatsgroep-aanduiding kan niet gevonden worden', 'Kostenplaatsgroep wordt leeg gemaakt [' || v_kostenplaatsgrp_oms || ']'); END; ELSE v_kostenplaatsgrp_key := NULL; END IF; -- v_perslid := TRIM (v_perslid); IF v_perslid IS NOT NULL THEN BEGIN SELECT prs_perslid_key INTO v_perslid_key FROM prs_perslid WHERE prs_perslid_oslogin = UPPER (v_perslid) OR prs_perslid_oslogin = UPPER (v_perslid); EXCEPTION WHEN NO_DATA_FOUND THEN v_perslid_key := NULL; fac.imp_writelog ( p_import_key, 'E', v_aanduiding || 'Budgethouder-aanduiding kan niet gevonden worden', 'Budgethouder wordt leeg gemaakt [' || v_perslid || ']'); END; ELSE v_perslid_key := NULL; END IF; v_kostenplaats_limiet := TRIM (v_kostenplaats_limiet); v_kostenplaats_limietperiode := UPPER (TRIM (v_kostenplaats_limietperiode)); IF v_kostenplaats_limietperiode IS NOT NULL AND v_kostenplaats_limietperiode NOT IN ('J', 'M') THEN fac.imp_writelog ( p_import_key, 'E', v_aanduiding || 'Budgetperiode-aanduiding kan niet gevonden worden', 'Budgetperiode wordt leeg gemaakt [' || v_kostenplaats_limietperiode || ']'); END IF; v_kostenplaats_extern := TRIM (v_kostenplaats_extern); IF v_kostenplaats_extern IS NOT NULL AND v_kostenplaats_extern NOT IN ('0', '1') THEN v_kostenplaats_extern := NULL; fac.imp_writelog ( p_import_key, 'E', v_aanduiding || 'Kostenplaats extern-aanduiding kan niet gevonden worden', 'Kostenplaats_extern-aanduiding wordt leeg gemaakt'); END IF; v_kostenplaats_fiat := TRIM (v_kostenplaats_fiat); IF v_kostenplaats_fiat IS NOT NULL AND v_kostenplaats_fiat NOT IN ('0', '1') THEN v_kostenplaats_fiat := NULL; fac.imp_writelog ( p_import_key, 'E', v_aanduiding || 'Opdrachtfiatteren-aanduiding kan niet gevonden worden', 'Opdrachtfiatteren-aanduiding wordt leeg gemaakt'); END IF; -- Insert geformatteerde import record IF v_ongeldig = 0 THEN v_errormsg := 'Fout bij toevoegen te impoteren kostenplaats [' || v_aanduiding || ']'; INSERT INTO fac_imp_kpn (prs_kostenplaats_nr, prs_kostenplaats_omschrijving, prs_kostenplaats_module, prs_kostenplaats_begin, prs_kostenplaats_eind, prs_kostenplaatsgrp_key, prs_perslid_key, prs_kostenplaats_limiet, prs_kostenplaats_limietperiode, prs_kostenplaats_extern, prs_kostenplaats_fiat) VALUES (v_kostenplaats_nr, v_kostenplaats_omschrijving, v_kostenplaats_module, v_kostenplaats_begin_d, v_kostenplaats_eind_d, v_kostenplaatsgrp_key, v_perslid_key, fac.safe_to_number (v_kostenplaats_limiet), DECODE (v_kostenplaats_limietperiode, 'M', 1, 'J', 2, 0), fac.safe_to_number (v_kostenplaats_extern), fac.safe_to_number (v_kostenplaats_fiat)); v_count_import := v_count_import + 1; END IF; END IF; END IF; END; END LOOP; IF (header_is_valid = 0) THEN fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Ongeldig importbestand', 'Geen geldige headerregel aanwezig'); ELSE fac.imp_writelog (p_import_key, 'S', 'Kostenplaats: aantal ingelezen regels: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog ( p_import_key, 'S', 'Kostenplaats: aantal ongeldige 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, 100); v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, ''); END fac_import_kpn; / CREATE OR REPLACE PROCEDURE fac_update_kpn (p_import_key IN NUMBER) AS CURSOR c IS SELECT * FROM fac_imp_kpn; v_errormsg VARCHAR2 (1000); v_errorhint VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count NUMBER; v_ongeldig NUMBER (1); v_aanduiding VARCHAR2 (200); v_kostenplaats_key prs_kostenplaats.prs_kostenplaats_key%TYPE; BEGIN FOR rec IN c LOOP BEGIN BEGIN v_aanduiding := rec.prs_kostenplaats_nr || '|' || rec.prs_kostenplaats_omschrijving; v_errorhint := 'Opzoeken kostenplaats'; SELECT prs_kostenplaats_key INTO v_kostenplaats_key FROM prs_kostenplaats WHERE prs_kostenplaats_verwijder IS NULL AND prs_kostenplaats_upper = UPPER (rec.prs_kostenplaats_nr); EXCEPTION WHEN NO_DATA_FOUND THEN v_errorhint := 'Toevoegen kostenplaats'; INSERT INTO prs_kostenplaats (prs_kostenplaats_nr, prs_kostenplaats_module, prs_kostenplaats_omschrijving) VALUES (rec.prs_kostenplaats_nr, rec.prs_kostenplaats_module, rec.prs_kostenplaats_omschrijving) RETURNING prs_kostenplaats_key INTO v_kostenplaats_key; END; -- We hebben nu een kostenplaats record aangemaakt of gevonden. -- Dan gaan we deze nu updaten. v_errorhint := 'Aanpassen kostenplaats'; UPDATE prs_kostenplaats k SET prs_kostenplaats_omschrijving = rec.prs_kostenplaats_omschrijving, prs_kostenplaats_module = rec.prs_kostenplaats_module, prs_kostenplaats_begin = rec.prs_kostenplaats_begin, prs_kostenplaats_eind = rec.prs_kostenplaats_eind, prs_kostenplaatsgrp_key = rec.prs_kostenplaatsgrp_key, prs_perslid_key = rec.prs_perslid_key, prs_kostenplaats_limiet = rec.prs_kostenplaats_limiet, prs_kostenplaats_limietperiode = rec.prs_kostenplaats_limietperiode, prs_kostenplaats_extern = COALESCE (rec.prs_kostenplaats_extern, prs_kostenplaats_extern), prs_kostenplaats_fiat = COALESCE (rec.prs_kostenplaats_fiat, prs_kostenplaats_fiat) WHERE k.prs_kostenplaats_key = v_kostenplaats_key; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint || ' | ' || v_aanduiding); END; END LOOP; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint || ' | ' || v_aanduiding); END fac_update_kpn; / -- FIP routine voor kostensoorten. Indien een niet verwijderde kostensoort met dezelfde -- omschrijving (GUI:code) gevonden kan worden dan zal deze aangepast worden. Anders wordt een nieuwe kostensoort -- aangemaakt. CREATE OR REPLACE PROCEDURE fac_import_kostensoort (p_import_key IN NUMBER) AS c_fielddelimitor VARCHAR2 (2) := fac.import_delimiter(p_import_key); v_newline VARCHAR2 (1000); -- Input line v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); header_is_valid NUMBER; v_count NUMBER; v_ongeldig NUMBER (1); v_mode NUMBER (1); v_aanduiding VARCHAR2 (200); v_all_null BOOLEAN; v_count_error NUMBER (10); v_count_tot NUMBER (10); v_count_import NUMBER (10); -- De importvelden: v_kostensoort_oms VARCHAR2 (255); -- VARCHAR2 (60), code v_kostensoort_opmerking VARCHAR2 (255); -- VARCHAR2 (255), omschrijving v_kostensoort_refcode VARCHAR2 (255); -- VARCHAR2 (60), financiele waarde v_kostensoort_doorbelasten VARCHAR2 (255); -- NUMBER (1), 1=Ja v_kostensoort_btw VARCHAR2 (255); -- NUMBER (1), v_kostenplaats_nr VARCHAR2 (255); v_kostenplaats_key NUMBER (10); -- leverende kostenplaats v_kostensoortgrp_oms VARCHAR2 (255); v_kostensoortgrp_key NUMBER (10); -- bestaande kostenplaatsgrp v_kostensoort_altcode VARCHAR2 (255); -- VARCHAR2 (60), alternatieve code v_kostensoort_eind_txt VARCHAR2 (255); v_kostensoort_eind DATE; CURSOR c IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; BEGIN -- Eerst opruiming DELETE FROM fac_imp_kpn; COMMIT; v_count_error := 0; header_is_valid := 0; v_count_tot := 0; v_count_import := 0; FOR rec IN c LOOP BEGIN v_errormsg := 'Fout FETCH te importeren rij'; v_newline := rec.fac_imp_file_line; v_errormsg := 'Fout opvragen te importeren rij'; v_aanduiding := ''; v_ongeldig := 0; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_fielddelimitor, v_kostensoortgrp_oms); fac.imp_getfield (v_newline, c_fielddelimitor, v_kostensoort_oms); fac.imp_getfield (v_newline, c_fielddelimitor, v_kostensoort_opmerking); fac.imp_getfield (v_newline, c_fielddelimitor, v_kostensoort_altcode); fac.imp_getfield (v_newline, c_fielddelimitor, v_kostensoort_refcode); fac.imp_getfield (v_newline, c_fielddelimitor, v_kostensoort_doorbelasten); fac.imp_getfield (v_newline, c_fielddelimitor, v_kostensoort_btw); fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_nr); -- leverende kostenplaats fac.imp_getfield (v_newline, c_fielddelimitor, v_kostensoort_eind_txt); v_aanduiding := v_kostensoort_oms || '|' || v_kostensoort_opmerking; IF v_kostensoort_oms IS NOT NULL THEN IF (header_is_valid = 0) THEN IF UPPER (v_kostensoort_oms) = 'KOSTENSOORTCODE' AND UPPER (v_kostensoort_refcode) = 'FINANCIELEWAARDE' AND UPPER (v_kostenplaats_nr) = 'LEVERENDEKOSTENPLAATS' THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; --fac.imp_writelog (p_import_key, 'I', v_aanduiding, ''); -- Controleer alle veldwaarde v_kostensoortgrp_oms := TRIM (v_kostensoortgrp_oms); BEGIN SELECT prs_kostensoortgrp_key INTO v_kostensoortgrp_key FROM prs_kostensoortgrp WHERE UPPER (prs_kostensoortgrp_oms) = UPPER (v_kostensoortgrp_oms); EXCEPTION WHEN NO_DATA_FOUND THEN v_kostensoortgrp_key := NULL; fac.imp_writelog ( p_import_key, 'E', v_aanduiding || 'Kostensoortgroep-aanduiding kan niet gevonden worden', 'Kostensoortgroep wordt leeg gemaakt [' || v_kostensoortgrp_oms || ']'); v_ongeldig := 1; END; v_kostensoort_oms := TRIM (v_kostensoort_oms); IF LENGTH (v_kostensoort_oms) > 60 THEN v_kostensoort_oms := SUBSTR (v_kostensoort_oms, 1, 60); fac.imp_writelog ( p_import_key, 'E', v_aanduiding || 'Kostensoortcode is te lang', 'Kostensoortcode wordt afgebroken tot [' || v_kostensoort_oms || ']'); v_ongeldig := 1; END IF; -- v_kostensoort_opmerking := TRIM (v_kostensoort_opmerking); IF LENGTH (v_kostensoort_opmerking) > 255 THEN v_kostensoort_opmerking := SUBSTR (v_kostensoort_opmerking, 1, 255); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Kostensoortomschrijving is te lang', 'Kostensoortomschrijving wordt afgebroken tot [' || v_kostensoort_opmerking || ']'); END IF; -- v_kostensoort_altcode := UPPER (TRIM (v_kostensoort_altcode)); IF LENGTH(v_kostensoort_altcode) > 60 THEN v_kostensoort_altcode := SUBSTR (v_kostensoort_altcode, 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Kostensoort alternatieve code is te lang', 'Kostensoort alternatieve code wordt afgebroken tot [' || v_kostensoort_altcode || ']'); END IF; -- v_kostensoort_refcode := UPPER (TRIM (v_kostensoort_refcode)); IF LENGTH(v_kostensoort_refcode) > 60 THEN v_kostensoort_refcode := SUBSTR (v_kostensoort_refcode, 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Kostensoort financiele waarde is te lang', 'Kostensoort financiele waarde wordt afgebroken tot [' || v_kostensoort_refcode || ']'); END IF; -- v_kostensoort_doorbelasten := UPPER (TRIM (v_kostensoort_doorbelasten)); IF UPPER(v_kostensoort_doorbelasten) NOT IN ('J', 'N') THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Ongeldige doorbelastingsindicatie', 'Doorbelastingsindicatie [' || v_kostensoort_doorbelasten || ']'); END IF; -- v_kostensoort_btw := UPPER (TRIM (v_kostensoort_btw)); IF UPPER(v_kostensoort_btw) NOT IN ('J', 'N') THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Ongeldige BTW indicatie', 'BTW indicatie [' || v_kostensoort_btw || ']'); END IF; v_kostenplaats_nr := TRIM (v_kostenplaats_nr); IF v_kostenplaats_nr IS NOT NULL THEN BEGIN SELECT prs_kostenplaats_key INTO v_kostenplaats_key FROM prs_kostenplaats WHERE prs_kostenplaats_verwijder IS NULL AND UPPER (prs_kostenplaats_nr) = UPPER (v_kostenplaats_nr); EXCEPTION WHEN NO_DATA_FOUND THEN v_kostenplaats_key := NULL; fac.imp_writelog ( p_import_key, 'E', v_aanduiding || 'Leverende kostenplaats kan niet gevonden worden', 'Kostenplaats wordt leeg gemaakt [' || v_kostenplaats_nr || ']'); v_ongeldig := 1; END; END IF; -- v_kostensoort_eind_txt := TRIM (v_kostensoort_eind_txt); v_kostensoort_eind := fac.safe_to_date (v_kostensoort_eind_txt, 'dd-mm-yyyy'); IF v_kostensoort_eind_txt IS NOT NULL AND v_kostensoort_eind IS NULL THEN fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Kostensoorteind is ongeldig', 'Kostensoorteind wordt leeg gemaakt'); END IF; -- Insert geformatteerde import record dbms_output.put_line ('v_ongeldig:' || v_ongeldig); IF v_ongeldig = 0 THEN v_errormsg := 'Fout bij toevoegen te impoteren kostensoort [' || v_aanduiding || ']'; INSERT INTO fac_imp_kostensoort (prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoort_doorbelasten, prs_kostensoort_btw, prs_kostenplaats_key, prs_kostensoortgrp_key, prs_kostensoort_eind, prs_kostensoort_altcode ) VALUES (v_kostensoort_oms, v_kostensoort_opmerking, v_kostensoort_refcode, DECODE(v_kostensoort_doorbelasten, 'J', 1, 0), DECODE(v_kostensoort_btw, 'J', 1, 0), v_kostenplaats_key, v_kostensoortgrp_key, v_kostensoort_eind, v_kostensoort_altcode ); v_count_import := v_count_import + 1; END IF; END IF; END IF; END; END LOOP; IF (header_is_valid = 0) THEN fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Ongeldig importbestand', 'Geen geldige headerregel aanwezig'); ELSE fac.imp_writelog (p_import_key, 'S', 'Kostensoort: aantal ingelezen regels: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog ( p_import_key, 'S', 'Kostensoort: aantal ongeldige 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, 100); v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, ''); END fac_import_kostensoort; / CREATE OR REPLACE PROCEDURE fac_update_kostensoort (p_import_key IN NUMBER) AS CURSOR c IS SELECT * FROM fac_imp_kostensoort; v_errormsg VARCHAR2 (1000); v_errorhint VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count NUMBER; v_ongeldig NUMBER (1); v_aanduiding VARCHAR2 (200); v_kostensoort_key prs_kostensoort.prs_kostensoort_key%TYPE; BEGIN FOR rec IN c LOOP BEGIN BEGIN v_aanduiding := rec.prs_kostensoort_oms || '|' || rec.prs_kostensoort_opmerking; v_errorhint := 'Opzoeken kostensoort'; SELECT prs_kostensoort_key INTO v_kostensoort_key FROM prs_kostensoort WHERE 1=1 -- prs_kostensoort_verwijder IS NULL AND prs_kostensoort_upper = UPPER (rec.prs_kostensoort_oms); EXCEPTION WHEN NO_DATA_FOUND THEN v_errorhint := 'Toevoegen kostensoort'; INSERT INTO prs_kostensoort (prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoortgrp_key) VALUES (rec.prs_kostensoort_oms, rec.prs_kostensoort_opmerking, rec.prs_kostensoortgrp_key) RETURNING prs_kostensoort_key INTO v_kostensoort_key; END; -- We hebben nu een kostensoort record aangemaakt of gevonden. -- Dan gaan we deze nu updaten. v_errorhint := 'Aanpassen kostensoort'; UPDATE prs_kostensoort k SET prs_kostensoort_opmerking = rec.prs_kostensoort_opmerking, prs_kostensoort_altcode = rec.prs_kostensoort_altcode, prs_kostensoort_refcode = rec.prs_kostensoort_refcode, prs_kostensoort_eind = rec.prs_kostensoort_eind, prs_kostensoortgrp_key = rec.prs_kostensoortgrp_key, prs_kostensoort_doorbelasten = rec.prs_kostensoort_doorbelasten, prs_kostensoort_btw = rec.prs_kostensoort_btw WHERE k.prs_kostensoort_key = v_kostensoort_key; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint || ' | ' || v_aanduiding); END; END LOOP; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint || ' | ' || v_aanduiding); END fac_update_kostensoort; / CREATE OR REPLACE PROCEDURE fac_import_perslid (p_import_key IN NUMBER ) AS v_seq_of_columns VARCHAR(255); BEGIN v_seq_of_columns := '1;2;3;4;5;6;7;8;9;11;10;0;0;0;0;13;14;15;0;17;16;18;19;12;0;20;27;28;29;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46;47'; prs.import_perslid(p_import_key, v_seq_of_columns, 'Locatiecode;Gebouwcode;Bouwlaagvolgnummer;Ruimtenummer;Werkplekvolgnummer;Omschrijving;Afdelingscode;PersoonAchternaam;Tussenvoegsel;Voorletters;Voornaam;TitelAanhef;Telefoonnummer;Mobiel;Email;Functie;Personeelsnummer;Loginnaam;Password;Kostenplaatsnr%'); END; / CREATE OR REPLACE PROCEDURE fac_update_perslid ( p_import_key IN NUMBER ) IS BEGIN prs.update_perslid (p_import_key, 'NR', 'A', 1); END fac_update_perslid; / CREATE OR REPLACE PROCEDURE fac_update_perslid_del ( p_import_key IN NUMBER ) IS BEGIN fac.imp_prs_delete_organisatie(p_import_key,2); fac_update_perslid(p_import_key); END; / CREATE OR REPLACE PROCEDURE fac_import_contactpersoon (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); -- De importvelden v_prs_bedrijf_naam VARCHAR2 (255); -- C60 v_prs_leverancier_nr VARCHAR2 (255); -- C50 v_prs_perslid_matchcode VARCHAR2 (4000); -- N1 v_prs_perslid_matchwaarde VARCHAR2 (4000); v_prs_contactpersoon_naam VARCHAR2 (255); -- C30 v_prs_contactpersoon_tussenv VARCHAR2 (255); -- C15 v_prs_contactpersoon_voorletters VARCHAR2 (255); -- C10 v_prs_contactpersoon_voornaam VARCHAR2 (255); -- C30 v_prs_contactpersoon_aanhef VARCHAR2 (255); -- C30 v_prs_contactpersoon_titel VARCHAR2 (255); -- C10 v_prs_contactpersoon_telefoon_1 VARCHAR2 (255); -- C30 v_prs_contactpersoon_telefoon_2 VARCHAR2 (255); -- C30 v_prs_contactpersoon_email VARCHAR2 (255); -- C200 v_prs_contactpersoon_functie VARCHAR2 (255); -- C60 v_prs_contactpersoon_opmerking VARCHAR2 (255); -- C255 v_alg_locatie_code VARCHAR2 (255); -- C10 v_matchkolom VARCHAR2 (255); sql_stmt VARCHAR2 (1000); l_cursor_1 INTEGER; l_rowsprocessed NUMBER DEFAULT 0; pcount NUMBER; v_prs_bedrijf_key NUMBER; v_prs_perslid_key NUMBER; v_alg_locatie_key NUMBER; 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; BEGIN -- Eerst opruiming DELETE FROM fac_imp_contactpersoon; 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_errorhint := 'Fout bij opvragen importregel'; v_aanduiding := ''; v_ongeldig := 0; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_naam); fac.imp_getfield (v_newline, c_delim, v_prs_leverancier_nr); fac.imp_getfield (v_newline, c_delim, v_prs_perslid_matchcode); fac.imp_getfield (v_newline, c_delim, v_prs_perslid_matchwaarde); fac.imp_getfield (v_newline, c_delim, v_prs_contactpersoon_naam); fac.imp_getfield (v_newline, c_delim, v_prs_contactpersoon_tussenv); fac.imp_getfield (v_newline, c_delim, v_prs_contactpersoon_voorletters); fac.imp_getfield (v_newline, c_delim, v_prs_contactpersoon_voornaam); fac.imp_getfield (v_newline, c_delim, v_prs_contactpersoon_titel); fac.imp_getfield (v_newline, c_delim, v_prs_contactpersoon_aanhef); fac.imp_getfield (v_newline, c_delim, v_prs_contactpersoon_telefoon_1); fac.imp_getfield (v_newline, c_delim, v_prs_contactpersoon_telefoon_2); fac.imp_getfield (v_newline, c_delim, v_prs_contactpersoon_email); fac.imp_getfield (v_newline, c_delim, v_prs_contactpersoon_functie); fac.imp_getfield (v_newline, c_delim, v_prs_contactpersoon_opmerking); fac.imp_getfield (v_newline, c_delim, v_alg_locatie_code); v_aanduiding := '[' || v_prs_bedrijf_naam || '|' || v_prs_leverancier_nr || '|' || v_prs_contactpersoon_naam || '|' || v_prs_contactpersoon_voornaam || '|' || v_prs_perslid_matchwaarde || '] '; -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen -- de juiste kolomkop. -- Ik negeer alles totdat ik een geldige header ben gepasseerd. IF (header_is_valid = 0) THEN IF UPPER (v_prs_bedrijf_naam) = 'BEDRIJFSNAAM' AND UPPER (v_prs_leverancier_nr) = 'LEVERANCIERNUMMER' AND UPPER (v_prs_perslid_matchcode) = 'PERSOONMATCHCODE' AND UPPER (v_prs_perslid_matchwaarde) = 'PERSOONMATCHWAARDE' AND UPPER (v_prs_contactpersoon_naam) = 'CONTACTPERSOONACHTERNAAM' AND UPPER (v_prs_contactpersoon_tussenv) = 'TUSSENVOEGSEL' AND UPPER (v_prs_contactpersoon_voorletters) = 'VOORLETTERS' AND UPPER (v_prs_contactpersoon_voornaam) = 'VOORNAAM' AND UPPER (v_prs_contactpersoon_titel) = 'TITEL' AND UPPER (v_prs_contactpersoon_aanhef) = 'AANHEF' AND UPPER (v_prs_contactpersoon_telefoon_1) = 'TELEFOONNUMMER' AND UPPER (v_prs_contactpersoon_telefoon_2) = 'MOBIEL' AND UPPER (v_prs_contactpersoon_email) = 'EMAIL' AND UPPER (v_prs_contactpersoon_functie) = 'FUNCTIE' AND UPPER (v_prs_contactpersoon_opmerking) = 'OPMERKING' AND UPPER (v_alg_locatie_code) = 'LOCATIECODE' THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden v_errorhint := 'Bedrijfsnaam ongeldig'; v_prs_bedrijf_naam := TRIM (v_prs_bedrijf_naam); v_errorhint := 'Leveranciersnr ongeldig'; v_prs_leverancier_nr := TRIM (v_prs_leverancier_nr); v_errorhint := 'Fout bij bepalen persoon'; SELECT MIN (prs_bedrijf_key) INTO v_prs_bedrijf_key FROM prs_v_aanwezigbedrijf WHERE TRIM(prs_bedrijf_naam_upper) = UPPER (v_prs_bedrijf_naam) OR UPPER(TRIM(prs_leverancier_nr)) = UPPER (v_prs_leverancier_nr); IF v_prs_bedrijf_key IS NULL THEN fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errorhint, 'Kan bedrijf niet 1-duidig bepalen'); v_ongeldig := 1; END IF; v_errorhint := 'Fout bij bepalen persoon [' || v_prs_perslid_matchwaarde || ']'; v_prs_perslid_matchcode := TRIM(v_prs_perslid_matchcode); v_prs_perslid_matchwaarde := TRIM(v_prs_perslid_matchwaarde); v_prs_perslid_key := NULL; IF v_prs_perslid_matchcode IS NOT NULL AND v_prs_perslid_matchwaarde IS NOT NULL THEN v_matchkolom := ''; CASE v_prs_perslid_matchcode WHEN '1' THEN v_matchkolom := 'PRS_PERSLID_EMAIL'; WHEN '2' THEN v_matchkolom := 'PRS_PERSLID_OSLOGIN'; WHEN '3' THEN v_matchkolom := 'PRS_PERSLID_KEY'; WHEN '4' THEN v_matchkolom := 'PRS_PERSLID_NR'; WHEN '5' THEN v_matchkolom := 'PRS_PERSLID_VOORNAAM || '' '' || PRS_PERSLID_NAAM'; ELSE -- voor developers only: indien geen code wordt gebruikt, -- kan als persoonmatchcode een kolom uit de perslid-tabel -- worden ingevoerd, bijvoorbeeld: prs_perslid_oslogin2 v_matchkolom := v_prs_perslid_matchcode; END CASE; sql_stmt := 'SELECT MIN (prs_perslid_key), COUNT (prs_perslid_key) ' || ' FROM prs_v_aanwezigperslid ' || ' WHERE UPPER (' || v_matchkolom || ') = UPPER (:pwaarde) '; --dbms_output.put_line(v_prs_perslid_matchwaarde); l_cursor_1 := DBMS_SQL.open_cursor; DBMS_SQL.parse (l_cursor_1, sql_stmt, DBMS_SQL.native); DBMS_SQL.BIND_VARIABLE(l_cursor_1,':pwaarde', v_prs_perslid_matchwaarde); DBMS_SQL.define_column(l_cursor_1, 1, v_prs_perslid_key); DBMS_SQL.define_column(l_cursor_1, 2, pcount); l_rowsprocessed := DBMS_SQL.execute_and_fetch (l_cursor_1); -- Bij no rows gaat-ie naar de exception. Moet daar dan nog een cursor dicht?? DBMS_SQL.column_value (l_cursor_1, 1, v_prs_perslid_key); DBMS_SQL.column_value (l_cursor_1, 2, pcount); DBMS_SQL.close_cursor(l_cursor_1); --dbms_output.put_line(pcount); IF pcount != 1 THEN IF pcount = 0 THEN fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errorhint, 'Persoon niet (meer) aanwezig'); ELSE fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errorhint, 'Kan persoon niet 1-duidig bepalen'); END IF; v_ongeldig := 1; ELSE SELECT prs_perslid_naam, prs_perslid_tussenvoegsel, prs_perslid_voorletters, prs_perslid_voornaam, prs_perslid_telefoonnr, prs_perslid_mobiel, prs_perslid_email INTO v_prs_contactpersoon_naam, v_prs_contactpersoon_tussenv, v_prs_contactpersoon_voorletters, v_prs_contactpersoon_voornaam, v_prs_contactpersoon_telefoon_1, v_prs_contactpersoon_telefoon_2, v_prs_contactpersoon_email FROM prs_perslid WHERE prs_perslid_key = v_prs_perslid_key; END IF; END IF; v_errorhint := 'Contactpersoon naam ongeldig'; v_prs_contactpersoon_naam := TRIM (v_prs_contactpersoon_naam); IF v_prs_perslid_key IS NULL THEN IF v_prs_contactpersoon_naam IS NULL THEN fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errorhint, 'Regel wordt overgeslagen'); v_ongeldig := 1; ELSE IF LENGTH (v_prs_contactpersoon_naam) > 30 THEN v_prs_contactpersoon_naam := SUBSTR(v_prs_contactpersoon_naam, 1,30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Contactpersoon naam wordt afgebroken tot: ' || v_prs_contactpersoon_naam); END IF; END IF; END IF; v_errorhint := 'Contactpersoon tussenvoegsels ongeldig'; v_prs_contactpersoon_tussenv := TRIM (v_prs_contactpersoon_tussenv); IF LENGTH (v_prs_contactpersoon_tussenv) > 30 THEN v_prs_contactpersoon_tussenv := SUBSTR(v_prs_contactpersoon_tussenv, 1,30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Contactpersoon tussenvoegsels wordt afgebroken tot: ' || v_prs_contactpersoon_tussenv); END IF; v_errorhint := 'Contactpersoon voorletters ongeldig'; v_prs_contactpersoon_voorletters := TRIM (v_prs_contactpersoon_voorletters); IF LENGTH (v_prs_contactpersoon_voorletters) > 10 THEN v_prs_contactpersoon_voorletters := SUBSTR(v_prs_contactpersoon_voorletters, 1,10); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Contactpersoon voorletters wordt afgebroken tot: ' || v_prs_contactpersoon_voorletters); END IF; v_errorhint := 'Contactpersoon voornaam ongeldig'; v_prs_contactpersoon_voornaam := TRIM (v_prs_contactpersoon_voornaam); IF LENGTH (v_prs_contactpersoon_voornaam) > 30 THEN v_prs_contactpersoon_voornaam := SUBSTR(v_prs_contactpersoon_voornaam, 1,30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Contactpersoon voornaam wordt afgebroken tot: ' || v_prs_contactpersoon_voornaam); END IF; v_errorhint := 'Contactpersoon aanhef ongeldig'; v_prs_contactpersoon_aanhef := TRIM (v_prs_contactpersoon_aanhef); IF LENGTH (v_prs_contactpersoon_aanhef) > 30 THEN v_prs_contactpersoon_aanhef := SUBSTR(v_prs_contactpersoon_aanhef, 1,30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Contactpersoon aanhef wordt afgebroken tot: ' || v_prs_contactpersoon_aanhef); END IF; v_errorhint := 'Contactpersoon titel ongeldig'; v_prs_contactpersoon_titel := TRIM (v_prs_contactpersoon_titel); IF LENGTH (v_prs_contactpersoon_titel) > 10 THEN v_prs_contactpersoon_titel := SUBSTR(v_prs_contactpersoon_titel, 1,10); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Contactpersoon titel wordt afgebroken tot: ' || v_prs_contactpersoon_titel); END IF; v_errorhint := 'Contactpersoon telefoonnr ongeldig'; v_prs_contactpersoon_telefoon_1 := TRIM (v_prs_contactpersoon_telefoon_1); IF LENGTH (v_prs_contactpersoon_telefoon_1) > 30 THEN v_prs_contactpersoon_telefoon_1 := SUBSTR(v_prs_contactpersoon_telefoon_1, 1,30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Contactpersoon telefoonnr wordt afgebroken tot: ' || v_prs_contactpersoon_telefoon_1); END IF; v_errorhint := 'Contactpersoon mobiel ongeldig'; v_prs_contactpersoon_telefoon_2 := TRIM (v_prs_contactpersoon_telefoon_2); IF LENGTH (v_prs_contactpersoon_telefoon_2) > 30 THEN v_prs_contactpersoon_telefoon_2 := SUBSTR(v_prs_contactpersoon_telefoon_2, 1,30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Contactpersoon mobiel wordt afgebroken tot: ' || v_prs_contactpersoon_telefoon_2); END IF; v_errorhint := 'Contactpersoon email ongeldig'; v_prs_contactpersoon_email := TRIM (v_prs_contactpersoon_email); IF LENGTH (v_prs_contactpersoon_email) > 200 THEN v_prs_contactpersoon_email := SUBSTR(v_prs_contactpersoon_email, 1,200); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Contactpersoon email wordt afgebroken tot: ' || v_prs_contactpersoon_email); END IF; v_errorhint := 'Contactpersoon functie ongeldig'; v_prs_contactpersoon_functie := TRIM (v_prs_contactpersoon_functie); IF LENGTH (v_prs_contactpersoon_functie) > 30 THEN v_prs_contactpersoon_functie := SUBSTR(v_prs_contactpersoon_functie, 1,30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Contactpersoon functie wordt afgebroken tot: ' || v_prs_contactpersoon_functie); END IF; v_errorhint := 'Contactpersoon opmerking ongeldig'; v_prs_contactpersoon_opmerking := TRIM (v_prs_contactpersoon_opmerking); IF LENGTH (v_prs_contactpersoon_opmerking) > 30 THEN v_prs_contactpersoon_opmerking := SUBSTR(v_prs_contactpersoon_opmerking, 1,30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Contactpersoon opmerking wordt afgebroken tot: ' || v_prs_contactpersoon_opmerking); END IF; v_errorhint := 'Locatiecode ongeldig'; v_alg_locatie_code := TRIM (v_alg_locatie_code); v_alg_locatie_key := NULL; v_errorhint := 'Fout bij bepalen locatie'; IF v_alg_locatie_code IS NOT NULL THEN SELECT MIN(alg_locatie_key) INTO v_alg_locatie_key FROM alg_v_aanweziglocatie l WHERE UPPER(alg_locatie_code) = UPPER(v_alg_locatie_code); IF v_alg_locatie_key IS NULL THEN fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errorhint, 'Regel wordt overgeslagen'); v_ongeldig := 1; END IF; END IF; -- Insert geformatteerde import record IF v_ongeldig = 0 THEN BEGIN v_errorhint := 'Fout bij wegschrijven importregel'; INSERT INTO fac_imp_contactpersoon (prs_contactpersoon_naam, prs_contactpersoon_tussenv, prs_contactpersoon_voorletters, prs_contactpersoon_voornaam, prs_contactpersoon_aanhef, prs_contactpersoon_titel, prs_contactpersoon_telefoon_1, prs_contactpersoon_telefoon_2, prs_contactpersoon_email, prs_contactpersoon_functie, prs_contactpersoon_opmerking, prs_bedrijf_key, prs_perslid_key, alg_locatie_key, fac_import_key ) VALUES ( v_prs_contactpersoon_naam, v_prs_contactpersoon_tussenv, v_prs_contactpersoon_voorletters, v_prs_contactpersoon_voornaam, v_prs_contactpersoon_aanhef, v_prs_contactpersoon_titel, v_prs_contactpersoon_telefoon_1, v_prs_contactpersoon_telefoon_2, v_prs_contactpersoon_email, v_prs_contactpersoon_functie, v_prs_contactpersoon_opmerking, v_prs_bedrijf_key, v_prs_perslid_key, v_alg_locatie_key, p_import_key ); 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, v_errorhint); 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', 'Contactpersonen/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 contactpersonen afgebroken! regel:' || v_file_index); END fac_import_contactpersoon; / CREATE OR REPLACE PROCEDURE fac_update_contactpersoon ( p_import_key IN NUMBER ) IS CURSOR c IS SELECT DISTINCT prs_contactpersoon_naam, prs_contactpersoon_tussenv, prs_contactpersoon_voorletters, prs_contactpersoon_voornaam, prs_contactpersoon_aanhef, prs_contactpersoon_titel, prs_contactpersoon_telefoon_1, prs_contactpersoon_telefoon_2, prs_contactpersoon_email, prs_contactpersoon_functie, prs_contactpersoon_opmerking, prs_bedrijf_key, prs_perslid_key, fac_import_key FROM fac_imp_contactpersoon WHERE fac_import_key = p_import_key; CURSOR c_loc IS SELECT prs_contactpersoon_naam, prs_contactpersoon_tussenv, prs_contactpersoon_voorletters, prs_contactpersoon_voornaam, prs_perslid_key, prs_bedrijf_key, alg_locatie_key FROM fac_imp_contactpersoon WHERE fac_import_key = p_import_key AND alg_locatie_key IS NOT NULL; v_errormsg VARCHAR2 (1000); v_errorhint VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_aanduiding VARCHAR2 (200); v_count NUMBER (10); v_ongeldig NUMBER (1); v_count_update NUMBER (10); v_count_tot NUMBER (10); v_prs_contactpersoon_key NUMBER; BEGIN FOR rec in c LOOP BEGIN v_aanduiding := rec.prs_contactpersoon_naam || ' - ' || rec.prs_contactpersoon_tussenv || ' - ' || rec.prs_contactpersoon_voornaam || ' - ' || rec.prs_perslid_key; v_errorhint := 'Fout bij wegschrijven contactpersoon'; INSERT INTO prs_contactpersoon (prs_contactpersoon_naam, prs_contactpersoon_tussenv, prs_contactpersoon_voorletters, prs_contactpersoon_voornaam, prs_contactpersoon_aanhef, prs_contactpersoon_titel, prs_contactpersoon_telefoon_1, prs_contactpersoon_telefoon_2, prs_contactpersoon_email, prs_contactpersoon_functie, prs_contactpersoon_opmerking, prs_perslid_key, prs_bedrijf_key) VALUES (rec.prs_contactpersoon_naam, rec.prs_contactpersoon_tussenv, rec.prs_contactpersoon_voorletters, rec.prs_contactpersoon_voornaam, rec.prs_contactpersoon_aanhef, rec.prs_contactpersoon_titel, rec.prs_contactpersoon_telefoon_1, rec.prs_contactpersoon_telefoon_2, rec.prs_contactpersoon_email, rec.prs_contactpersoon_functie, rec.prs_contactpersoon_opmerking, rec.prs_perslid_key, rec.prs_bedrijf_key); EXCEPTION WHEN OTHERS THEN oracle_err_mes := SUBSTR (SQLERRM, 1, 150); v_errormsg := '(ORACLE error ' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint ); END; END LOOP; FOR rec1 IN c_loc LOOP BEGIN v_aanduiding := rec1.prs_contactpersoon_naam || ' - ' || rec1.prs_contactpersoon_tussenv || ' - ' || rec1.prs_contactpersoon_voornaam || ' - ' || rec1.prs_perslid_key || ' - ' || rec1.alg_locatie_key; v_errorhint := 'Fout bij opzoeken contactpersoon'; v_prs_contactpersoon_key := NULL; -- zoek de contactpersoon SELECT prs_contactpersoon_key INTO v_prs_contactpersoon_key FROM prs_contactpersoon c WHERE c.prs_bedrijf_key = rec1.prs_bedrijf_key AND ( c.prs_perslid_key = rec1.prs_perslid_key OR ( c.prs_contactpersoon_naam = rec1.prs_contactpersoon_naam AND c.prs_contactpersoon_tussenv = rec1.prs_contactpersoon_tussenv AND c.prs_contactpersoon_voorletters = rec1.prs_contactpersoon_voorletters AND c.prs_contactpersoon_voornaam = rec1.prs_contactpersoon_voornaam ) ); v_errorhint := 'Fout bij toevoegen locatie'; INSERT INTO prs_contactpersoon_locatie (prs_contactpersoon_key, alg_locatie_key) VALUES (v_prs_contactpersoon_key, rec1.alg_locatie_key); EXCEPTION WHEN OTHERS THEN oracle_err_mes := SUBSTR (SQLERRM, 1, 150); v_errormsg := '(ORACLE error ' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint ); END; END LOOP; EXCEPTION WHEN OTHERS THEN oracle_err_mes := SUBSTR (SQLERRM, 1, 150); v_errormsg := '(ORACLE error ' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Importproces meldingen afgebroken!' ); END fac_update_contactpersoon; / --//////////////////////////////////////////////////MLD IMPORT STUFF/////////////////////////////////////////// CREATE OR REPLACE PROCEDURE fac_import_mld ( p_import_key IN NUMBER ) AS c_fielddelimitor VARCHAR2 (2) := fac.import_delimiter(p_import_key); v_newline VARCHAR2(2000); -- Input line v_errormsg 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 VARCHAR2(1000); -- De importvelden: v_srtdiscipline_omschrijving VARCHAR2(255); -- C30 v_srtdiscipline_prefix VARCHAR2(255); -- C3 v_srtdiscipline_alg VARCHAR2(255); -- N1 v_srtdiscipline_ins VARCHAR2(255); -- N1 v_srtdiscipline_bes VARCHAR2(255); -- N1 v_discipline_omschrijving VARCHAR2(255); -- C60 v_stdmelding_omschrijving VARCHAR2(255); -- C30 v_stdmelding_groep VARCHAR2(255); -- C30 v_stdmelding_kostensoort VARCHAR2(255); -- C60 v_stdmelding_accepttijd VARCHAR2(255); -- N12,5 v_stdmelding_accepttijd1 VARCHAR2(255); -- N12,5 v_stdmelding_accepttijd2 VARCHAR2(255); -- N12,5 v_stdmelding_accepttijd4 VARCHAR2(255); -- N12,5 v_stdmelding_uitvoertijd VARCHAR2(255); -- N12,5 v_stdmelding_uitvoertijd1 VARCHAR2(255); -- N12,5 v_stdmelding_uitvoertijd2 VARCHAR2(255); -- N12,5 v_stdmelding_uitvoertijd4 VARCHAR2(255); -- N12,5 v_discipline_directklaar VARCHAR2(255); -- N1 v_dienst VARCHAR2(255); v_stdmelding_notfrontend VARCHAR2(255); -- N1 v_onrgoed_niveau VARCHAR2(255); -- C1 v_typeopdr_omschrijving VARCHAR2(255); -- C30 v_stdmelding_hint VARCHAR2(1000); -- C1000 v_stdmelding_kopieerbaar VARCHAR2(255); -- N1 v_stdmelding_afmeldtext VARCHAR2(255); -- N1 v_stdmelding_doublecheck VARCHAR2(255); -- N4 v_stdmelding_slabewaken VARCHAR2(255); -- N1 v_stdmelding_maxobjecten VARCHAR2(255); -- N1 v_discipline_image VARCHAR2(255); -- C255 v_stdmelding_image VARCHAR2(255); -- C255 -- Gebruikt voor numeriek-validatie en conversie v_stdmelding_accepttijd_n mld_stdmelding.mld_stdmelding_t_accepttijd.tijdsduur%TYPE; v_stdmelding_accepttijd1_n mld_stdmelding.mld_stdmelding_t_accept_pr1.tijdsduur%TYPE; v_stdmelding_accepttijd2_n mld_stdmelding.mld_stdmelding_t_accept_pr2.tijdsduur%TYPE; v_stdmelding_accepttijd4_n mld_stdmelding.mld_stdmelding_t_accept_pr4.tijdsduur%TYPE; v_stdmelding_uitvoertijd_n mld_stdmelding.mld_stdmelding_t_uitvoertijd.tijdsduur%TYPE; v_stdmelding_uitvoertijd1_n mld_stdmelding.mld_stdmelding_t_uitvtijd_pr1.tijdsduur%TYPE; v_stdmelding_uitvoertijd2_n mld_stdmelding.mld_stdmelding_t_uitvtijd_pr2.tijdsduur%TYPE; v_stdmelding_uitvoertijd4_n mld_stdmelding.mld_stdmelding_t_uitvtijd_pr4.tijdsduur%TYPE; -- Overige velden (alleen gebruikt voor numeriek-validatie) v_typeopdr_key mld_stdmelding.mld_typeopdr_key%TYPE; -- 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 fac_imp_mld; v_count_tot := 0; v_count_import := 0; header_is_valid := 0; COMMIT; FOR rec1 IN c1 LOOP BEGIN v_newline := rec1.fac_imp_file_line; v_errormsg := 'Fout opvragen te importeren rij'; v_aanduiding := ''; v_ongeldig := 0; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_fielddelimitor, v_srtdiscipline_omschrijving); fac.imp_getfield (v_newline, c_fielddelimitor, v_srtdiscipline_prefix); fac.imp_getfield (v_newline, c_fielddelimitor, v_srtdiscipline_alg); fac.imp_getfield (v_newline, c_fielddelimitor, v_srtdiscipline_ins); fac.imp_getfield (v_newline, c_fielddelimitor, v_srtdiscipline_bes); fac.imp_getfield (v_newline, c_fielddelimitor, v_discipline_omschrijving); fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_omschrijving); fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_groep); fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_kostensoort); fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_accepttijd); fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_accepttijd1); fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_accepttijd2); fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_accepttijd4); fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_uitvoertijd); fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_uitvoertijd1); fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_uitvoertijd2); fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_uitvoertijd4); fac.imp_getfield (v_newline, c_fielddelimitor, v_discipline_directklaar); fac.imp_getfield (v_newline, c_fielddelimitor, v_dienst); fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_notfrontend); -- N1 fac.imp_getfield (v_newline, c_fielddelimitor, v_onrgoed_niveau); -- C1 fac.imp_getfield (v_newline, c_fielddelimitor, v_typeopdr_omschrijving); -- C30 fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_hint); -- C1000 fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_kopieerbaar); -- N1 fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_afmeldtext); -- N1 fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_doublecheck); -- N4 fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_slabewaken); -- N1 fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_maxobjecten); -- N1 fac.imp_getfield (v_newline, c_fielddelimitor, v_discipline_image); fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_image); -- -- Spaties ervoor en erachter verwijderen. v_srtdiscipline_omschrijving := TRIM(v_srtdiscipline_omschrijving); v_srtdiscipline_prefix := TRIM(v_srtdiscipline_prefix); v_srtdiscipline_alg := TRIM(v_srtdiscipline_alg); v_srtdiscipline_ins := TRIM(v_srtdiscipline_ins); v_srtdiscipline_bes := TRIM(v_srtdiscipline_bes); v_discipline_omschrijving := TRIM(v_discipline_omschrijving); v_stdmelding_omschrijving := TRIM(v_stdmelding_omschrijving); v_stdmelding_groep := TRIM(v_stdmelding_groep); v_stdmelding_kostensoort := TRIM(v_stdmelding_kostensoort); v_stdmelding_accepttijd := TRIM(v_stdmelding_accepttijd); v_stdmelding_accepttijd1 := TRIM(v_stdmelding_accepttijd1); v_stdmelding_accepttijd2 := TRIM(v_stdmelding_accepttijd2); v_stdmelding_accepttijd4 := TRIM(v_stdmelding_accepttijd4); v_stdmelding_uitvoertijd := TRIM(v_stdmelding_uitvoertijd); v_stdmelding_uitvoertijd1 := TRIM(v_stdmelding_uitvoertijd1); v_stdmelding_uitvoertijd2 := TRIM(v_stdmelding_uitvoertijd2); v_stdmelding_uitvoertijd4 := TRIM(v_stdmelding_uitvoertijd4); v_discipline_directklaar := TRIM(v_discipline_directklaar); v_dienst := TRIM(v_dienst); v_stdmelding_notfrontend := TRIM(v_stdmelding_notfrontend); v_onrgoed_niveau := TRIM(v_onrgoed_niveau); v_typeopdr_omschrijving := TRIM(v_typeopdr_omschrijving); v_stdmelding_hint := TRIM(v_stdmelding_hint); v_stdmelding_kopieerbaar := TRIM(v_stdmelding_kopieerbaar); v_stdmelding_afmeldtext := TRIM(v_stdmelding_afmeldtext); v_stdmelding_doublecheck := TRIM(v_stdmelding_doublecheck); v_stdmelding_slabewaken := TRIM(v_stdmelding_slabewaken); v_stdmelding_maxobjecten := TRIM(v_stdmelding_maxobjecten); v_discipline_image := TRIM(v_discipline_image); v_stdmelding_image := TRIM(v_stdmelding_image); -- v_aanduiding := '|' || v_srtdiscipline_omschrijving || '|' || v_srtdiscipline_prefix || '|' || v_srtdiscipline_alg || '|' || v_srtdiscipline_ins || '|' || v_srtdiscipline_bes || '|' || v_discipline_omschrijving || '|' || v_stdmelding_omschrijving || '|' || v_stdmelding_groep || '|' || v_stdmelding_kostensoort || '|' || v_stdmelding_accepttijd || '|' || v_stdmelding_accepttijd1 || '|' || v_stdmelding_accepttijd2 || '|' || v_stdmelding_accepttijd4 || '|' || v_stdmelding_uitvoertijd || '|' || v_stdmelding_uitvoertijd1 || '|' || v_stdmelding_uitvoertijd2 || '|' || v_stdmelding_uitvoertijd4 || '|' || v_discipline_directklaar || '|' || v_dienst || '|' || v_stdmelding_notfrontend || '|' || v_onrgoed_niveau || '|' || v_typeopdr_omschrijving || '|' || v_stdmelding_hint || '|' || v_stdmelding_kopieerbaar || '|' || v_stdmelding_afmeldtext || '|' || v_stdmelding_doublecheck || '|' || v_stdmelding_slabewaken || '|' || v_stdmelding_maxobjecten || '|' || v_discipline_image || '|' || v_stdmelding_image; -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen -- de juiste kolomkop. Ik controleer alleen de verplichte kolommen, ik zou ze ook -- allemaal kunnen doen.. -- Ik negeer alles totdat ik een geldige header gepasseerd ben IF (header_is_valid = 0) THEN IF fac_check_import_header(v_srtdiscipline_omschrijving, 'VAKGROEPTYPE') AND fac_check_import_header(v_discipline_omschrijving, 'VAKGROEP') AND fac_check_import_header(v_stdmelding_omschrijving, 'STANDAARDMELDING') AND fac_check_import_header(v_stdmelding_uitvoertijd4, 'UITVOERTIJD LAAG') AND fac_check_import_header(v_stdmelding_slabewaken, 'SLA BEWAKEN') THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarde IF LENGTH (v_srtdiscipline_omschrijving) > 30 THEN v_srtdiscipline_omschrijving := SUBSTR (TRIM (v_srtdiscipline_omschrijving), 1, 30); fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Vakgroeptype wordt afgebroken tot [' || v_srtdiscipline_omschrijving || ']' ); END IF; -- IF LENGTH (v_srtdiscipline_prefix) > 3 THEN v_srtdiscipline_prefix := SUBSTR (v_srtdiscipline_prefix, 1, 3); fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Prefix wordt afgebroken tot [' || v_srtdiscipline_prefix || ']' ); END IF; -- SELECT DECODE (fac.safe_to_number (v_srtdiscipline_alg), 1, '1', '0') INTO v_srtdiscipline_alg FROM DUAL; -- SELECT DECODE (fac.safe_to_number (v_srtdiscipline_ins), 1, '1', '0') INTO v_srtdiscipline_ins FROM DUAL; -- SELECT DECODE (fac.safe_to_number (v_srtdiscipline_bes), 1, '1', '0') INTO v_srtdiscipline_bes FROM DUAL; -- v_discipline_omschrijving := TRIM (v_discipline_omschrijving); IF LENGTH (v_discipline_omschrijving) > 60 THEN v_discipline_omschrijving := SUBSTR (v_discipline_omschrijving, 1, 60); fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Vakgroep wordt afgebroken tot [' || v_discipline_omschrijving || ']' ); END IF; -- IF LENGTH (v_stdmelding_omschrijving) > 60 THEN v_stdmelding_omschrijving := SUBSTR (v_stdmelding_omschrijving, 1, 60); fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Standaardmelding wordt afgebroken tot [' || v_stdmelding_omschrijving || ']' ); END IF; -- IF LENGTH (v_stdmelding_kostensoort) > 60 THEN v_stdmelding_kostensoort := SUBSTR (v_stdmelding_kostensoort, 1, 60); fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Melding herkenningstekst wordt afgebroken tot [' || v_stdmelding_kostensoort || ']' ); END IF; -- BEGIN v_stdmelding_accepttijd_n := fac.safe_to_number (v_stdmelding_accepttijd); v_stdmelding_accepttijd1_n := fac.safe_to_number (v_stdmelding_accepttijd1); v_stdmelding_accepttijd2_n := fac.safe_to_number (v_stdmelding_accepttijd2); v_stdmelding_accepttijd4_n := fac.safe_to_number (v_stdmelding_accepttijd4); 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, 'W', v_aanduiding, 'Importregel kan niet worden ingelezen. Ongeldige acceptatietijd [' || v_stdmelding_accepttijd || '/' || v_stdmelding_accepttijd1 || '/' || v_stdmelding_accepttijd2 || '/' || v_stdmelding_accepttijd4 || ']' ); END; -- BEGIN v_stdmelding_uitvoertijd_n := fac.safe_to_number (v_stdmelding_uitvoertijd); v_stdmelding_uitvoertijd1_n := fac.safe_to_number (v_stdmelding_uitvoertijd1); v_stdmelding_uitvoertijd2_n := fac.safe_to_number (v_stdmelding_uitvoertijd2); v_stdmelding_uitvoertijd4_n := fac.safe_to_number (v_stdmelding_uitvoertijd4); 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, 'W', v_aanduiding, 'Importregel kan niet worden ingelezen. Ongeldige uitvoertijd(en) [' || v_stdmelding_uitvoertijd || '/' || v_stdmelding_uitvoertijd1 || '/' || v_stdmelding_uitvoertijd2 || '/' || v_stdmelding_uitvoertijd4 || ']' ); END; -- SELECT DECODE (fac.safe_to_number (v_discipline_directklaar), 1, '1', '0') INTO v_discipline_directklaar FROM DUAL; -- v_dienst := SUBSTR (v_dienst, 1, 60); -- SELECT DECODE (fac.safe_to_number (v_stdmelding_notfrontend), 1, '1', '0') INTO v_stdmelding_notfrontend FROM DUAL; -- IF v_onrgoed_niveau IS NULL THEN v_onrgoed_niveau := 'L'; END IF; IF v_onrgoed_niveau NOT IN ('H', 'L', 'G', 'V', 'R') THEN v_onrgoed_niveau := 'L'; fac.imp_writelog ( p_import_key, 'W', v_aanduiding, 'Importregel kan niet worden ingelezen. Ongeldig onrgoedniveau [' || v_onrgoed_niveau || ']' ); END IF; IF v_typeopdr_omschrijving IS NOT NULL THEN BEGIN SELECT mld_typeopdr_key INTO v_typeopdr_key FROM mld_typeopdr WHERE mld_typeopdr_upper = UPPER(v_typeopdr_omschrijving); 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, 'W', v_aanduiding, 'Importregel kan niet worden ingelezen. Ongeldige opdrachttype [' || v_typeopdr_omschrijving || ']' ); END; END IF; -- IF LENGTH (v_stdmelding_hint) > 1000 THEN v_stdmelding_hint := SUBSTR (v_stdmelding_hint, 1, 1000); fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Standaardmelding hint wordt afgebroken op 1000 tekens' ); END IF; -- SELECT DECODE (fac.safe_to_number (v_stdmelding_kopieerbaar), 1, '1', '0') INTO v_stdmelding_kopieerbaar FROM DUAL; -- SELECT DECODE (fac.safe_to_number (v_stdmelding_afmeldtext), 1, '2', '1') INTO v_stdmelding_afmeldtext FROM DUAL; -- waarden: [1,2] -- SELECT DECODE (fac.safe_to_number (v_stdmelding_slabewaken), 1, '1', '0') INTO v_stdmelding_slabewaken FROM DUAL; -- SELECT DECODE (fac.safe_to_number (v_stdmelding_maxobjecten), 0, '0', 1, '1', '2') INTO v_stdmelding_maxobjecten FROM DUAL; -- IF UPPER(v_stdmelding_doublecheck) NOT IN ('N', 'I', 'A', 'B') THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding, 'Importregel kan niet worden ingelezen. Ongeldig doublecheck waarde [' || v_stdmelding_doublecheck || ']' ); ELSE SELECT DECODE (UPPER(v_stdmelding_doublecheck), 'I', '1', 'A', '2', 'B', '3', '0') INTO v_stdmelding_doublecheck FROM DUAL; -- waarden: [0,1,2,3] END IF; -- IF LENGTH (v_discipline_image) > 255 THEN v_discipline_image := SUBSTR (v_discipline_image, 1, 255); fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Discipline image wordt afgebroken tot [' || v_discipline_image || ']' ); END IF; -- IF LENGTH (v_stdmelding_image) > 255 THEN v_stdmelding_image := SUBSTR (v_stdmelding_image, 1, 255); fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Standaardmelding image wordt afgebroken tot [' || v_stdmelding_image || ']' ); END IF; -- -- Insert geformatteerde import record -- We hebben hier vooralsnog de oude uitvoertijden, zonder type IF v_ongeldig = 0 THEN BEGIN INSERT INTO fac_imp_mld ( ins_srtdiscipline_omschrijving, ins_srtdiscipline_prefix, ins_srtdiscipline_alg, ins_srtdiscipline_ins, ins_srtdiscipline_bes, ins_discipline_omschrijving, mld_stdmelding_omschrijving, mld_stdmelding_groep, mld_stdmelding_kostensoort, mld_stdmelding_accepttijd, mld_stdmelding_accepttijd1, mld_stdmelding_accepttijd2, mld_stdmelding_accepttijd4, mld_stdmelding_uitvoertijd, mld_stdmelding_uitvoertijd1, mld_stdmelding_uitvoertijd2, mld_stdmelding_uitvoertijd4, mld_discipline_directklaar, prs_dienst, mld_stdmelding_notfrontend, alg_onrgoed_niveau, mld_typeopdr_omschrijving, mld_stdmelding_hint, mld_stdmelding_afmeldtext, mld_stdmelding_kopieerbaar, mld_stdmelding_slabewaken, mld_stdmelding_doublecheck, mld_stdmelding_objects_allowed, ins_discipline_image, mld_stdmelding_image ) VALUES ( v_srtdiscipline_omschrijving, v_srtdiscipline_prefix, v_srtdiscipline_alg, v_srtdiscipline_ins, v_srtdiscipline_bes, v_discipline_omschrijving, v_stdmelding_omschrijving, v_stdmelding_groep, v_stdmelding_kostensoort, v_stdmelding_accepttijd_n, v_stdmelding_accepttijd1_n, v_stdmelding_accepttijd2_n, v_stdmelding_accepttijd4_n, v_stdmelding_uitvoertijd_n, v_stdmelding_uitvoertijd1_n, v_stdmelding_uitvoertijd2_n, v_stdmelding_uitvoertijd4_n, v_discipline_directklaar, v_dienst, v_stdmelding_notfrontend, v_onrgoed_niveau, v_typeopdr_omschrijving, v_stdmelding_hint, v_stdmelding_afmeldtext, v_stdmelding_kopieerbaar, v_stdmelding_slabewaken, v_stdmelding_doublecheck, v_stdmelding_maxobjecten, v_discipline_image, v_stdmelding_image ); v_count_import := v_count_import + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding, 'Fout bij toevoegen regel aan importtabel FAC_IMP_MLD. ' || v_errormsg ); END; END IF; END IF; END; END LOOP; IF (header_is_valid = 0) THEN fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Ongeldig importbestand', 'Toelichting: ... '); ELSE fac.imp_writelog (p_import_key, 'S', 'Servicedesk: aantal ingelezen regels: ' || TO_CHAR (v_count_tot), '' ); fac.imp_writelog ( p_import_key, 'S', 'Servicedesk: 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, 100); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Inleesproces meldingen afgebroken!'); END fac_import_mld; / CREATE OR REPLACE PROCEDURE fac_update_mld ( p_import_key IN NUMBER ) IS c_fielddelimitor 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); v_aanduiding VARCHAR2 (200); v_count NUMBER (10); v_ongeldig NUMBER (1); v_count_update NUMBER (10); v_count_tot NUMBER (10); -- SUBPROC PROCEDURE add_srtdiscipline (p_import_key IN NUMBER) IS CURSOR c1 IS SELECT MAX (ins_srtdiscipline_omschrijving) ins_srtdiscipline_omschrijving, UPPER (ins_srtdiscipline_omschrijving) ins_srtdiscipline_upper, MAX (ins_srtdiscipline_prefix) ins_srtdiscipline_prefix, MAX (ins_srtdiscipline_alg) ins_srtdiscipline_alg, MAX (ins_srtdiscipline_ins) ins_srtdiscipline_ins, MAX (ins_srtdiscipline_bes) ins_srtdiscipline_bes FROM fac_imp_mld WHERE UPPER (ins_srtdiscipline_omschrijving) IS NOT NULL GROUP BY UPPER (ins_srtdiscipline_omschrijving) ORDER BY 1; teller INTEGER; const_max_inserts INTEGER := 100; ccount NUMBER (10); oracle_err_num NUMBER; oracle_err_var VARCHAR2 (100); v_count_tot NUMBER (10); v_count_update NUMBER (10); BEGIN v_count_tot := 0; v_count_update := 0; teller := 0; FOR rec IN c1 LOOP BEGIN v_count_tot := v_count_tot + 1; SELECT COUNT (*) INTO ccount FROM ins_srtdiscipline WHERE ins_srtdiscipline_verwijder IS NULL AND UPPER (TRIM (ins_srtdiscipline_omschrijving)) = TRIM (rec.ins_srtdiscipline_upper); IF (ccount = 0) THEN INSERT INTO ins_srtdiscipline (ins_srtdiscipline_module, ins_srtdiscipline_omschrijving, ins_srtdiscipline_prefix, ins_srtdiscipline_alg, ins_srtdiscipline_ins, ins_srtdiscipline_bes ) VALUES ('MLD', rec.ins_srtdiscipline_omschrijving, rec.ins_srtdiscipline_prefix, fac.safe_to_number (rec.ins_srtdiscipline_alg), fac.safe_to_number (rec.ins_srtdiscipline_ins), fac.safe_to_number (rec.ins_srtdiscipline_bes) ); v_count_update := v_count_update + 1; END IF; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_var := SUBSTR (SQLERRM, 1, 100); fac.imp_writelog (p_import_key, 'W', 'Vakgroeptype [' || rec.ins_srtdiscipline_omschrijving || ']', 'Kan vakgroeptype niet wegschrijven (module = MLD)' || ' ' || 'Oracle fout: ' || oracle_err_var ); END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'Servicedesk: aantal vakgroeptyperegels: ' || TO_CHAR (v_count_tot), '' ); fac.imp_writelog (p_import_key, 'S', 'Servicedesk: aantal vakgroeptyperegels toegevoegd: ' || TO_CHAR (v_count_update), '' ); COMMIT; END; -- SUBPROC PROCEDURE add_discipline (p_import_key IN NUMBER) IS CURSOR c1 IS SELECT MAX (ins_srtdiscipline_omschrijving) ins_srtdiscipline_omschrijving, MAX (ins_discipline_omschrijving) ins_discipline_omschrijving, MAX (mld_discipline_directklaar) mld_discipline_directklaar, MAX (ins_discipline_image) ins_discipline_image, UPPER (ins_srtdiscipline_omschrijving) ins_srtdiscipline_upper, UPPER (ins_discipline_omschrijving) ins_discipline_upper FROM fac_imp_mld GROUP BY UPPER (ins_srtdiscipline_omschrijving), UPPER (ins_discipline_omschrijving) ORDER BY 1, 2; teller INTEGER; const_max_inserts INTEGER := 100; v_errmes VARCHAR2 (1024); srtdiscipline_key NUMBER (10); v_discipline_key NUMBER (10); ccount NUMBER (10); oracle_err_num NUMBER; oracle_err_var VARCHAR2 (100); v_count_tot NUMBER (10); v_count_update NUMBER (10); BEGIN v_count_tot := 0; v_count_update := 0; teller := 0; FOR rec IN c1 LOOP BEGIN v_count_tot := v_count_tot + 1; v_errmes := 'Bepalen of de srtdiscipline'; IF (rec.ins_srtdiscipline_omschrijving IS NOT NULL) THEN SELECT ins_srtdiscipline_key INTO srtdiscipline_key FROM ins_srtdiscipline sd WHERE sd.ins_srtdiscipline_verwijder IS NULL AND UPPER (TRIM (sd.ins_srtdiscipline_omschrijving)) = UPPER (TRIM (rec.ins_srtdiscipline_omschrijving)); ELSE SELECT TO_NUMBER (NULL) INTO srtdiscipline_key FROM DUAL; END IF; v_errmes := 'Bepalen of de discipline bestaat'; SELECT COUNT (*) INTO ccount FROM ins_tab_discipline d WHERE d.ins_discipline_verwijder IS NULL AND d.ins_discipline_module = 'MLD' AND UPPER (TRIM (d.ins_discipline_omschrijving)) = UPPER (TRIM (rec.ins_discipline_omschrijving)) AND d.ins_srtdiscipline_key = srtdiscipline_key; IF ccount = 0 THEN SELECT ins_srtdiscipline_key INTO srtdiscipline_key FROM ins_srtdiscipline sd WHERE sd.ins_srtdiscipline_verwijder IS NULL AND sd.ins_srtdiscipline_module = 'MLD' AND UPPER (TRIM (sd.ins_srtdiscipline_omschrijving)) = UPPER (TRIM (rec.ins_srtdiscipline_omschrijving)); SELECT ins_s_ins_discipline_key.NEXTVAL INTO v_discipline_key FROM DUAL; INSERT INTO ins_tab_discipline (ins_discipline_module, ins_discipline_omschrijving, ins_discipline_min_level, ins_srtdiscipline_key, ins_discipline_image ) VALUES ('MLD', SUBSTR (rec.ins_discipline_omschrijving, 1, 60), 1, srtdiscipline_key, rec.ins_discipline_image ) RETURNING ins_discipline_key INTO v_discipline_key; INSERT INTO mld_disc_params (mld_ins_discipline_key, mld_disc_params_factuurappr, mld_disc_params_noti_dagen, mld_disc_params_notify, mld_disc_params_opdr_kosten, mld_disc_params_directklaar ) VALUES (v_discipline_key, 0, NULL, 0, 0, rec.mld_discipline_directklaar ); v_count_update := v_count_update + 1; END IF; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_var := SUBSTR (SQLERRM, 1, 100); fac.imp_writelog (p_import_key, 'W', 'Vakgroep [' || rec.ins_srtdiscipline_omschrijving || ']', 'Kan vakgroep niet wegschrijven' || ' ' || 'Oracle error: ' || oracle_err_var ); COMMIT; -- tbv logging END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'Servicedesk: aantal vakgroepregels: ' || TO_CHAR (v_count_tot), '' ); fac.imp_writelog (p_import_key, 'S', 'Servicedesk: aantal vakgroepregels toegevoegd: ' || TO_CHAR (v_count_update), '' ); COMMIT; END; -- SUBPROC PROCEDURE add_stdmeldinggroep (p_import_key IN NUMBER) AS CURSOR c1 IS SELECT DISTINCT mld_stdmelding_groep FROM fac_imp_mld WHERE mld_stdmelding_groep IS NOT NULL ORDER BY 1; v_aanduiding VARCHAR2 (200); v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count NUMBER (10); v_count_tot NUMBER (10); v_count_update NUMBER (10); BEGIN v_count_tot := 0; v_count_update := 0; FOR rec IN c1 LOOP BEGIN v_count_tot := v_count_tot + 1; v_aanduiding := '[' || rec.mld_stdmelding_groep || '] '; v_errorhint := 'Fout bij bepalen meldinggroep'; SELECT COUNT ( * ) INTO v_count FROM mld_stdmeldinggroep WHERE UPPER (mld_stdmeldinggroep_naam) = UPPER (rec.mld_stdmelding_groep); IF v_count = 0 THEN v_errorhint := 'Fout bij toevoegen meldinggroep'; INSERT INTO mld_stdmeldinggroep (mld_stdmeldinggroep_naam) VALUES (rec.mld_stdmelding_groep); v_count_update := v_count_update + 1; COMMIT; END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'ORACLE (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', 'Servicedesk: aantal meldinggroepen: ' || TO_CHAR (v_count_tot), '' ); fac.imp_writelog (p_import_key, 'S', 'Servicedesk: aantal meldinggroepen toegevoegd: ' || TO_CHAR (v_count_update), '' ); COMMIT; END; -- SUBPROC PROCEDURE add_kostensoort (p_import_key IN NUMBER) IS CURSOR c1 IS SELECT MAX (mld_stdmelding_kostensoort) prs_kostensoort_oms, UPPER (mld_stdmelding_kostensoort) prs_kostensoort_upper FROM fac_imp_mld WHERE mld_stdmelding_kostensoort IS NOT NULL GROUP BY UPPER (mld_stdmelding_kostensoort) ORDER BY 1; teller INTEGER; const_max_inserts INTEGER := 100; v_errmes VARCHAR2 (1024); srtdiscipline_key NUMBER (10); ccount NUMBER (10); oracle_err_num NUMBER; oracle_err_var VARCHAR2 (100); v_count_tot NUMBER (10); v_count_update NUMBER (10); BEGIN v_count_tot := 0; v_count_update := 0; teller := 0; FOR rec IN c1 LOOP BEGIN v_count_tot := v_count_tot + 1; v_errmes := 'Bepalen of de kostensoort bestaat'; SELECT COUNT (*) INTO ccount FROM prs_kostensoort WHERE prs_kostensoort_upper = rec.prs_kostensoort_upper AND prs_kostensoort_verwijder IS NULL; IF ccount = 0 THEN v_errmes := 'Toevoegen kostensoort'; INSERT INTO prs_kostensoort (prs_kostensoort_oms, prs_kostensoort_opmerking ) VALUES (rec.prs_kostensoort_oms, '' ); v_count_update := v_count_update + 1; END IF; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_var := SUBSTR (SQLERRM, 1, 100); fac.imp_writelog (p_import_key, 'W', 'Vakgroep [' || rec.prs_kostensoort_oms || ']', 'Kan PRS_KOSTENSOORT niet wegschrijven (module = MLD)' || ' ' || 'Oracle fout: ' || oracle_err_var ); END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'Servicedesk: aantal kostensoortregels: ' || TO_CHAR (v_count_tot), '' ); fac.imp_writelog (p_import_key, 'S', 'Servicedesk: aantal kostensoortregels toegevoegd:' || TO_CHAR (v_count_update), '' ); COMMIT; END; -- SUBPROC PROCEDURE add_dienst (p_import_key IN NUMBER) AS CURSOR c1 IS SELECT DISTINCT prs_dienst FROM fac_imp_mld WHERE prs_dienst IS NOT NULL ORDER BY 1; v_aanduiding VARCHAR2 (200); v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count NUMBER (10); v_count_tot NUMBER (10); v_count_update NUMBER (10); BEGIN v_count_tot := 0; v_count_update := 0; FOR rec IN c1 LOOP BEGIN v_count_tot := v_count_tot + 1; v_aanduiding := '[' || rec.prs_dienst || '] '; v_errorhint := 'Fout bij bepalen dienst'; SELECT COUNT ( * ) INTO v_count FROM prs_dienst WHERE UPPER (prs_dienst_omschrijving) = UPPER (rec.prs_dienst); IF v_count = 0 THEN v_errorhint := 'Fout bij toevoegen dienst'; INSERT INTO prs_dienst (prs_dienst_omschrijving) VALUES (rec.prs_dienst); v_count_update := v_count_update + 1; COMMIT; END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint); COMMIT; END; END LOOP; END; -- SUBPROC PROCEDURE add_typeopdr (p_import_key IN NUMBER) AS CURSOR c1 IS SELECT DISTINCT mld_typeopdr_omschrijving FROM fac_imp_mld WHERE mld_typeopdr_omschrijving IS NOT NULL ORDER BY 1; v_aanduiding VARCHAR2 (200); v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count NUMBER (10); v_count_tot NUMBER (10); v_count_update NUMBER (10); BEGIN v_count_tot := 0; v_count_update := 0; FOR rec IN c1 LOOP BEGIN v_count_tot := v_count_tot + 1; v_aanduiding := '[' || rec.mld_typeopdr_omschrijving || '] '; v_errorhint := 'Fout bij bepalen opdrachttype'; SELECT COUNT ( * ) INTO v_count FROM mld_typeopdr WHERE mld_typeopdr_upper = UPPER (rec.mld_typeopdr_omschrijving); IF v_count = 0 THEN v_errorhint := 'Fout bij toevoegen opdrachttype'; INSERT INTO mld_typeopdr (mld_typeopdr_omschrijving) VALUES (rec.mld_typeopdr_omschrijving); v_count_update := v_count_update + 1; COMMIT; END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint); COMMIT; END; END LOOP; END; -- SUBPROC PROCEDURE add_stdmelding (p_import_key IN NUMBER) IS CURSOR c1 IS SELECT * FROM fac_imp_mld sm ORDER BY ins_srtdiscipline_omschrijving , ins_discipline_omschrijving , mld_stdmelding_omschrijving; teller INTEGER; discipline_key NUMBER (10); srtdiscipline_key NUMBER (10); kostensoort_key NUMBER (10); dienst_key NUMBER (10); stdmeldinggroep_key NUMBER (10); typeopdr_key NUMBER (10); ccount NUMBER (10); v_errmes VARCHAR2 (1024); oracle_err_num NUMBER; oracle_err_var VARCHAR2 (100); v_count_tot NUMBER (10); v_count_update NUMBER (10); BEGIN v_count_tot := 0; v_count_update := 0; teller := 0; FOR rec IN c1 LOOP BEGIN v_count_tot := v_count_tot + 1; IF (rec.ins_srtdiscipline_omschrijving IS NOT NULL) THEN v_errmes := 'Bepalen srtdiscipline_key'; SELECT ins_srtdiscipline_key INTO srtdiscipline_key FROM ins_srtdiscipline sd WHERE sd.ins_srtdiscipline_module = 'MLD' AND UPPER (sd.ins_srtdiscipline_omschrijving) = UPPER (TRIM (rec.ins_srtdiscipline_omschrijving)) AND sd.ins_srtdiscipline_verwijder IS NULL; ELSE srtdiscipline_key := TO_NUMBER (NULL); END IF; v_errmes := 'Bepalen discipline_key'; SELECT ins_discipline_key INTO discipline_key FROM ins_tab_discipline d WHERE TRIM (UPPER (d.ins_discipline_omschrijving)) = TRIM (UPPER (rec.ins_discipline_omschrijving)) AND d.ins_discipline_module = 'MLD' AND d.ins_srtdiscipline_key = srtdiscipline_key AND d.ins_discipline_verwijder IS NULL; v_errmes := 'Kijken mld_stdmelding bestaat'; SELECT COUNT (*) INTO ccount FROM mld_stdmelding WHERE mld_ins_discipline_key = discipline_key AND mld_stdmelding_verwijder IS NULL AND TRIM (UPPER (mld_stdmelding_omschrijving)) = TRIM (UPPER (rec.mld_stdmelding_omschrijving)); IF ccount = 0 THEN v_errmes := 'Bepalen of de kostensoort bestaat'; SELECT COUNT (*), NVL (MAX (prs_kostensoort_key), TO_NUMBER (NULL)) INTO ccount, kostensoort_key FROM prs_kostensoort WHERE prs_kostensoort_upper = rec.mld_stdmelding_kostensoort AND prs_kostensoort_verwijder IS NULL; v_errmes := 'Bepalen of de dienst bestaat'; dienst_key := NULL; IF rec.prs_dienst IS NOT NULL THEN SELECT prs_dienst_key INTO dienst_key FROM prs_dienst WHERE UPPER(prs_dienst_omschrijving) = UPPER(rec.prs_dienst); END IF; v_errmes := 'Bepalen stdmeldinggroep_key'; stdmeldinggroep_key := NULL; IF rec.mld_stdmelding_groep IS NOT NULL THEN SELECT mld_stdmeldinggroep_key INTO stdmeldinggroep_key FROM mld_stdmeldinggroep WHERE TRIM (UPPER (mld_stdmeldinggroep_naam)) = TRIM (UPPER (rec.mld_stdmelding_groep)); END IF; v_errmes := 'Bepalen typeopdr_key'; typeopdr_key := NULL; IF rec.mld_typeopdr_omschrijving IS NOT NULL THEN SELECT mld_typeopdr_key INTO typeopdr_key FROM mld_typeopdr WHERE TRIM (mld_typeopdr_upper) = TRIM (UPPER (rec.mld_typeopdr_omschrijving)); END IF; v_errmes := 'Toevoegen mld_stdmelding'; v_errmes := ' (discipline_key = ' || TO_CHAR (discipline_key) || '| rec.mld_stdmelding_omschrijving = ' || rec.mld_stdmelding_omschrijving || '| KOSTENSOORT_KEY' || TO_CHAR (kostensoort_key) || 'NVL (TO_NUMBER (rec.mld_stdmelding_accepttijd), NULL) = ' || TO_CHAR (NVL (TO_NUMBER (rec.mld_stdmelding_accepttijd), 0)) || 'NVL (rec.mld_stdmelding_uitvoertijd, 0) = ' || TO_CHAR (NVL (rec.mld_stdmelding_uitvoertijd, 0)) || ')'; INSERT INTO mld_stdmelding (mld_ins_discipline_key, mld_stdmelding_omschrijving, mld_stdmeldinggroep_key, prs_kostensoort_key, mld_stdmelding_t_accepttijd, mld_stdmelding_t_accept_pr1, mld_stdmelding_t_accept_pr2, mld_stdmelding_t_accept_pr4, mld_stdmelding_t_uitvoertijd, mld_stdmelding_t_uitvtijd_pr1, mld_stdmelding_t_uitvtijd_pr2, mld_stdmelding_t_uitvtijd_pr4, prs_dienst_key, mld_stdmelding_notfrontend, alg_onrgoed_niveau, mld_typeopdr_key, mld_stdmelding_hint, mld_stdmelding_kopieerbaar, mld_stdmelding_afmeldtext, mld_stdmelding_doublecheck, mld_stdmelding_slabewaken, mld_stdmelding_image, mld_stdmelding_objects_allowed ) VALUES (discipline_key, rec.mld_stdmelding_omschrijving, stdmeldinggroep_key, kostensoort_key, MLD_T_UITVOERTIJD(rec.mld_stdmelding_accepttijd, 'U'), -- acceptatietijden vullen we altijd in in uren. MLD_T_UITVOERTIJD(rec.mld_stdmelding_accepttijd1, 'U'), MLD_T_UITVOERTIJD(rec.mld_stdmelding_accepttijd2, 'U'), MLD_T_UITVOERTIJD(rec.mld_stdmelding_accepttijd4, 'U'), -- Uitvoertijden worden in de importsheet en exportview altijd ingevuld in dagen. -- Is de uitvoertijd kleiner dan 1 dag, dan slaan we het in mld_stdmelding op in uren. MLD_T_UITVOERTIJD(CASE WHEN COALESCE(rec.mld_stdmelding_uitvoertijd, 2) > 0 AND COALESCE(rec.mld_stdmelding_uitvoertijd, 2) < 1 THEN COALESCE(rec.mld_stdmelding_uitvoertijd, 2) * 24 -- Uren ELSE COALESCE(rec.mld_stdmelding_uitvoertijd, 2) -- Dagen END, CASE WHEN COALESCE(rec.mld_stdmelding_uitvoertijd, 2) > 0 AND COALESCE(rec.mld_stdmelding_uitvoertijd, 2) < 1 THEN 'U' -- Uren ELSE 'D' -- Dagen END), MLD_T_UITVOERTIJD(CASE WHEN rec.mld_stdmelding_uitvoertijd1 > 0 AND rec.mld_stdmelding_uitvoertijd1 < 1 THEN rec.mld_stdmelding_uitvoertijd1 * 24 -- Uren ELSE rec.mld_stdmelding_uitvoertijd1 -- Dagen END, CASE WHEN rec.mld_stdmelding_uitvoertijd1 > 0 AND rec.mld_stdmelding_uitvoertijd1 < 1 THEN 'U' -- Uren ELSE 'D' -- Dagen END), MLD_T_UITVOERTIJD(CASE WHEN rec.mld_stdmelding_uitvoertijd2 > 0 AND rec.mld_stdmelding_uitvoertijd2 < 1 THEN rec.mld_stdmelding_uitvoertijd2 * 24 -- Uren ELSE rec.mld_stdmelding_uitvoertijd2 -- Dagen END, CASE WHEN rec.mld_stdmelding_uitvoertijd2 > 0 AND rec.mld_stdmelding_uitvoertijd2 < 1 THEN 'U' -- Uren ELSE 'D' -- Dagen END), MLD_T_UITVOERTIJD(CASE WHEN rec.mld_stdmelding_uitvoertijd4 > 0 AND rec.mld_stdmelding_uitvoertijd4 < 1 THEN rec.mld_stdmelding_uitvoertijd4 * 24 -- Uren ELSE rec.mld_stdmelding_uitvoertijd4 -- Dagen END, CASE WHEN rec.mld_stdmelding_uitvoertijd4 > 0 AND rec.mld_stdmelding_uitvoertijd4 < 1 THEN 'U' -- Uren ELSE 'D' -- Dagen END), dienst_key, rec.mld_stdmelding_notfrontend, rec.alg_onrgoed_niveau, typeopdr_key, rec.mld_stdmelding_hint, rec.mld_stdmelding_kopieerbaar, rec.mld_stdmelding_afmeldtext, rec.mld_stdmelding_doublecheck, rec.mld_stdmelding_slabewaken, rec.mld_stdmelding_image, rec.mld_stdmelding_objects_allowed ); v_count_update := v_count_update + 1; END IF; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_var := SUBSTR (SQLERRM, 1, 100); fac.imp_writelog (p_import_key, 'W', 'standaardmelding kan niet worden weggeschreven [' || rec.mld_stdmelding_omschrijving || ']', v_errmes || ' Oracle fout: ' || oracle_err_var ); COMMIT; -- tbv logging END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'Servicedesk: aantal standaardmeldingen: ' || TO_CHAR (v_count_tot), '' ); fac.imp_writelog (p_import_key, 'S', 'Servicedesk: aantal standaardmeldingen toegevoegd: ' || TO_CHAR (v_count_update), '' ); COMMIT; END; -- MAIN BEGIN add_srtdiscipline (p_import_key); add_discipline (p_import_key); add_stdmeldinggroep (p_import_key); add_kostensoort (p_import_key); add_dienst (p_import_key); add_typeopdr (p_import_key); add_stdmelding (p_import_key); EXCEPTION WHEN OTHERS THEN oracle_err_mes := SUBSTR (SQLERRM, 1, 150); v_errormsg := '(ORACLE error ' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', 'Importproces meldingen afgebroken!', '' ); END fac_update_mld; / CREATE OR REPLACE PROCEDURE fac_import_mld_del ( p_import_key IN NUMBER ) IS BEGIN fac_import_mld(p_import_key); END fac_import_mld_del; / CREATE OR REPLACE PROCEDURE fac_update_mld_del ( p_import_key IN NUMBER ) IS BEGIN fac.imp_mld_delete_mld(p_import_key, NULL); fac_update_mld(p_import_key); END fac_update_mld_del; / CREATE OR REPLACE PROCEDURE fac_import_mldafmtxt (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); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_aanduiding VARCHAR2 (200) := ''; header_is_valid NUMBER := 0; v_count_tot NUMBER (10) := 0; v_count_import NUMBER (10) := 0; v_ongeldig NUMBER (1); -- De importvelden: v_afmeldtekst_naam VARCHAR2 (256); -- C60 v_afmeldtekst_oms VARCHAR2 (4000); -- C1000 v_discipline_key VARCHAR2 (256); -- N10 v_stdmelding_key VARCHAR2 (256); -- N10 v_afmeldtekst_usefor VARCHAR2 (256); -- N1 CURSOR c1 IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; BEGIN DELETE FROM fac_imp_mldafmtxt; COMMIT; FOR rec1 IN c1 LOOP BEGIN v_newline := rec1.fac_imp_file_line; v_errormsg := 'Fout bij opvragen importregel'; v_aanduiding := ''; v_ongeldig := 0; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_delim, v_afmeldtekst_naam); fac.imp_getfield (v_newline, c_delim, v_afmeldtekst_oms); fac.imp_getfield (v_newline, c_delim, v_discipline_key); fac.imp_getfield (v_newline, c_delim, v_stdmelding_key); fac.imp_getfield (v_newline, c_delim, v_afmeldtekst_usefor); v_aanduiding := '[' || v_afmeldtekst_naam || '] '; -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen -- de juiste kolomkop. Ik controleer daarbij ALLE kolommen! -- Ik negeer alles totdat ik een geldige header ben gepasseerd. IF (header_is_valid = 0) THEN IF UPPER (v_afmeldtekst_naam) = 'AFMELDTEKSTNAAM' AND UPPER (v_afmeldtekst_oms) = 'AFMELDTEKSTOMSCHRIJVING' AND UPPER (v_discipline_key) = 'DISCIPLINE_KEY' AND UPPER (v_stdmelding_key) = 'STDMELDING_KEY' AND UPPER (v_afmeldtekst_usefor) = 'AFMELDTEKSTUSEFOR' THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden v_errormsg := 'Afmeldtekstnaam ongeldig/ongedefinieerd of te lang'; v_afmeldtekst_naam := TRIM (v_afmeldtekst_naam); IF v_afmeldtekst_naam IS NULL OR LENGTH (v_afmeldtekst_naam) > 60 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'Afmeldtekstomschrijving ongeldig/ongedefinieerd of te lang'; v_afmeldtekst_oms := TRIM (v_afmeldtekst_oms); IF v_afmeldtekst_oms IS NULL OR LENGTH (v_afmeldtekst_oms) > 1000 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'Discipline-key ongeldig'; v_discipline_key := TRIM (v_discipline_key); IF (v_discipline_key IS NOT NULL AND fac.safe_to_number (v_discipline_key) IS NULL) THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Discipline-key wordt genegeerd!'); END IF; -- v_errormsg := 'Soortmelding-key ongeldig'; v_stdmelding_key := TRIM (v_stdmelding_key); IF (v_stdmelding_key IS NOT NULL AND fac.safe_to_number (v_stdmelding_key) IS NULL) THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Soortmelding-key wordt genegeerd!'); END IF; -- v_errormsg := 'afmeldtekstusefor ongeldig/ongedefinieerd'; v_afmeldtekst_usefor := TRIM (v_afmeldtekst_usefor); IF v_afmeldtekst_usefor IS NULL OR v_afmeldtekst_usefor < 1 OR v_afmeldtekst_usefor > 4 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- Insert geformatteerde import record IF v_ongeldig = 0 THEN BEGIN v_errormsg := 'Fout bij wegschrijven importregel'; INSERT INTO fac_imp_mldafmtxt (mld_afmeldtekst_naam, mld_afmeldtekst_omschrijving, ins_discipline_key, mld_stdmelding_key, mld_afmeldtekst_usefor) VALUES (v_afmeldtekst_naam, v_afmeldtekst_oms, fac.safe_to_number (v_discipline_key), fac.safe_to_number (v_stdmelding_key), v_afmeldtekst_usefor); 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, 'E', v_aanduiding || v_errormsg, ''); END; COMMIT; 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', 'Afmeldteksten: #ingelezen importregels = ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog ( p_import_key, 'S', 'Afmeldteksten: #ongeldige 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 afmeldteksten afgebroken!'); END fac_import_mldafmtxt; / CREATE OR REPLACE PROCEDURE fac_update_mldafmtxt (p_import_key IN NUMBER) AS -- Cursor loopt over de voorkomende (unieke) tabelnamen. CURSOR c1 IS SELECT * FROM fac_imp_mldafmtxt; v_errormsg VARCHAR2 (1000) := ''; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count NUMBER (10); v_count_tot NUMBER (10); v_count_upd NUMBER (10); BEGIN v_count_tot := 0; v_count_upd := 0; FOR rec IN c1 LOOP BEGIN v_count_tot := v_count_tot + 1; v_errormsg := 'Fout bij bepalen bestaan afmeldtekst [' || rec.mld_afmeldtekst_naam || '] '; SELECT COUNT ( * ) INTO v_count FROM mld_afmeldtekst WHERE UPPER (mld_afmeldtekst_naam) = UPPER (rec.mld_afmeldtekst_naam); IF (v_count = 0) THEN v_errormsg := 'Fout bij toevoegen afmeldtekst [' || rec.mld_afmeldtekst_naam || '] '; INSERT INTO mld_afmeldtekst (mld_afmeldtekst_naam, mld_afmeldtekst_omschrijving, mld_ins_discipline_key, mld_stdmelding_key, mld_afmeldtekst_usefor) VALUES (rec.mld_afmeldtekst_naam, rec.mld_afmeldtekst_omschrijving, rec.ins_discipline_key, rec.mld_stdmelding_key, rec.mld_afmeldtekst_usefor); ELSE v_errormsg := 'Fout bij bijwerken afmeldtekst [' || rec.mld_afmeldtekst_naam || '] '; UPDATE mld_afmeldtekst SET mld_afmeldtekst_omschrijving = rec.mld_afmeldtekst_omschrijving, mld_ins_discipline_key = rec.ins_discipline_key, mld_stdmelding_key = rec.mld_stdmelding_key, mld_afmeldtekst_usefor = rec.mld_afmeldtekst_usefor WHERE UPPER (mld_afmeldtekst_naam) = UPPER (rec.mld_afmeldtekst_naam); END IF; COMMIT; v_count_upd := v_count_upd + 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, 'E', v_errormsg, ''); COMMIT; END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'Afmeldteksten: #ingelezen = ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog (p_import_key, 'S', 'Afmeldteksten: #toegevoegd/bijgewerkt = ' || TO_CHAR (v_count_upd), ''); 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_errormsg, 'Importproces afmeldteksten afgebroken!'); END fac_update_mldafmtxt; / CREATE OR REPLACE PROCEDURE fac_import_ins (p_import_key IN NUMBER) AS -- Standaard volgorde van de kolommen in het CSV-formaat, waarbij 3 velden VERPLICHT (minimaal door Facilitor vereist) -- Variabelelijst --v_ins_discipline_omschrijving: 1 (VERPLICHT) --v_ins_discipline_kostensoort: 2 --v_ins_srtgroep_omschrijving: 3 (VERPLICHT) --v_ins_srtdeel_code: 4 (VERPLICHT) --v_ins_srtdeel_omschrijving: 5 (VERPLICHT) --v_ins_deel_omschrijving: 6 (VERPLICHT) --v_ins_deel_opmerking: 7 --v_reserveerbaar: 8 --v_res_deel_eenheid: 9 --v_res_deel_prijs: 10 --v_alg_locatie_code: 11 --v_alg_gebouw_code: 12 --v_alg_verdieping_volgnr: 13 --v_alg_ruimte_nr: 14 --v_res_deel_alg_level: 15 --v_res_discipline_type: 16 --v_res_discipline_omschrijving: 17 --v_res_discipline_kostensoort: 18 --v_prs_perslid_matchcode: 19 --v_prs_perslid_matchwaarde: 20 --v_ins_deel_aanmaak: 21 --v_ins_deel_vervaldatum: 22 --v_ins_deel_aantal: 23 --v_ins_deel_externnr: 24 --v_ins_srtdeel_omschr_parent 25 --v_ins_deel_omschr_parent 26 --v_ins_kenmerkwaarde1: 27 --v_ins_kenmerkwaarde2: 28 --v_ins_kenmerkwaarde3: 29 --v_ins_kenmerkwaarde4: 30 --v_ins_kenmerkwaarde5: 31 --v_ins_kenmerkwaarde6: 32 --v_ins_kenmerkwaarde7: 33 --v_ins_kenmerkwaarde8: 34 --v_ins_kenmerkwaarde9: 35 --v_ins_kenmerkwaarde10: 36 --v_ins_kenmerkwaarde11: 37 --v_ins_kenmerkwaarde12: 38 --v_ins_kenmerkwaarde13: 39 --v_ins_kenmerkwaarde14: 40 --v_ins_kenmerkwaarde15: 41 --v_ins_kenmerkwaarde16: 42 --v_ins_kenmerkwaarde17: 43 --v_ins_kenmerkwaarde18: 44 --v_ins_kenmerkwaarde19: 45 --v_ins_kenmerkwaarde20: 46 -- Via een string, en ook op slimme wijze, nl alsof het een ingelezen deel-record is met p_fielddelimitor v_seq_of_columns VARCHAR(255); -- (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46); -- Afwijkingen op deze volgorde zijn in eigen cust_import_factuur te regelen. -- Als discipline_omschrijving en discipline_kostensoort b.v. zijn omgedraaid in het CSV-formaat, -- dan is de lijst van integers: v_seq_of_columns := "2,1,3,4,5,6,7,8,9,10,11,12....."; -- Als discipline_omschrijving NIET in CSV staat, dan factuurimport v_seq_of_columns := "0,2,3,4,5,6,7,8,9,10,11,12....."; -- v_seq_of_columns := "0;2;3;4;5;6;7;8;9;10;11;12....."; -- M.a.w. waar een 0 staat, wordt de variabele niet ingelezen en blijft LEEG. BEGIN v_seq_of_columns := '1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46'; fac_import_ins_body(p_import_key, v_seq_of_columns); END; / --//////////////////////////////////////////////////INS IMPORT STUFF/////////////////////////////////////////// CREATE OR REPLACE PROCEDURE fac_import_ins_body (p_import_key IN NUMBER, p_seq_of_columns IN VARCHAR2) IS v_fielddelimitor 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_srtdeel_omschr_parent VARCHAR2 (255); -- C100 v_ins_deel_omschr_parent VARCHAR2 (255); -- C60 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; v_seq_of_columns VARCHAR2(255); v_colnr VARCHAR2 (2); v_colnr1 NUMBER; v_colnr2 NUMBER; v_colnr3 NUMBER; v_colnr4 NUMBER; v_colnr5 NUMBER; v_colnr6 NUMBER; v_colnr7 NUMBER; v_colnr8 NUMBER; v_colnr9 NUMBER; v_colnr10 NUMBER; v_colnr11 NUMBER; v_colnr12 NUMBER; v_colnr13 NUMBER; v_colnr14 NUMBER; v_colnr15 NUMBER; v_colnr16 NUMBER; v_colnr17 NUMBER; v_colnr18 NUMBER; v_colnr19 NUMBER; v_colnr20 NUMBER; v_colnr21 NUMBER; v_colnr22 NUMBER; v_colnr23 NUMBER; v_colnr24 NUMBER; v_colnr25 NUMBER; v_colnr26 NUMBER; v_colnr27 NUMBER; v_colnr28 NUMBER; v_colnr29 NUMBER; v_colnr30 NUMBER; v_colnr31 NUMBER; v_colnr32 NUMBER; v_colnr33 NUMBER; v_colnr34 NUMBER; v_colnr35 NUMBER; v_colnr36 NUMBER; v_colnr37 NUMBER; v_colnr38 NUMBER; v_colnr39 NUMBER; v_colnr40 NUMBER; v_colnr41 NUMBER; v_colnr42 NUMBER; v_colnr43 NUMBER; v_colnr44 NUMBER; v_colnr45 NUMBER; v_colnr46 NUMBER; -- Overige velden: CURSOR c1 IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; -- 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 := ''; -- Init v_seq_of_columns := p_seq_of_columns; v_errorhint := 'Bepalen volgorde kolommen'; -- De volgorde van de te importeren kolommen in de CSV uitlezen uit v_seq_of_columns fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr1); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr2); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr3); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr4); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr5); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr6); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr7); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr8); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr9); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr10); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr11); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr12); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr13); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr14); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr15); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr16); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr17); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr18); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr19); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr20); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr21); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr22); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr23); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr24); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr25); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr26); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr27); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr28); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr29); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr30); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr31); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr32); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr33); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr34); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr35); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr36); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr37); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr38); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr39); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr40); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr41); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr42); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr43); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr44); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr45); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr46); 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 v_aanduiding := 'Inlezen ins_discipline_omschrijving kolom:' || v_colnr1; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr1), v_ins_discipline_omschrijving); v_aanduiding := 'Inlezen ins_discipline_kostensoort kolom:' || v_colnr2; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr2), v_ins_discipline_kostensoort); v_aanduiding := 'Inlezen ins_srtgroep_omschrijving kolom:' || v_colnr3; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr3), v_ins_srtgroep_omschrijving); v_aanduiding := 'Inlezen ins_srtdeel_code kolom:' || v_colnr4; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr4), v_ins_srtdeel_code); v_aanduiding := 'Inlezen ins_srtdeel_omschrijving kolom:' || v_colnr5; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr5), v_ins_srtdeel_omschrijving); v_aanduiding := 'Inlezen ins_deel_omschrijving kolom:' || v_colnr6; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr6), v_ins_deel_omschrijving); v_aanduiding := 'Inlezen ins_deel_opmerking kolom:' || v_colnr7; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr7), v_ins_deel_opmerking); v_aanduiding := 'Inlezen reserveerbaar kolom:' || v_colnr8; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr8), v_reserveerbaar); v_aanduiding := 'Inlezen res_deel_eenheid kolom:' || v_colnr9; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr9), v_res_deel_eenheid); v_aanduiding := 'Inlezen res_deel_prijs kolom:' || v_colnr10; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr10), v_res_deel_prijs); v_aanduiding := 'Inlezen alg_locatie_code kolom:' || v_colnr11; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr11), v_alg_locatie_code); v_aanduiding := 'Inlezen alg_gebouw_code kolom:' || v_colnr12; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr12), v_alg_gebouw_code); v_aanduiding := 'Inlezen alg_verdieping_volgnr kolom:' || v_colnr13; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr13), v_alg_verdieping_volgnr); v_aanduiding := 'Inlezen alg_ruimte_nr kolom:' || v_colnr14; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr14), v_alg_ruimte_nr); v_aanduiding := 'Inlezen res_deel_alg_level kolom:' || v_colnr15; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr15), v_res_deel_alg_level); v_aanduiding := 'Inlezen v_res_discipline_type kolom:' || v_colnr16; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr16), v_res_discipline_type); v_aanduiding := 'Inlezen v_res_discipline_omschrijving kolom:' || v_colnr17; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr17), v_res_discipline_omschrijving); v_aanduiding := 'Inlezen v_res_discipline_kostensoort kolom:' || v_colnr18; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr18), v_res_discipline_kostensoort); v_aanduiding := 'Inlezen v_prs_perslid_matchcode kolom:' || v_colnr19; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr19), v_prs_perslid_matchcode); v_aanduiding := 'Inlezen v_prs_perslid_matchwaarde kolom:' || v_colnr20; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr20), v_prs_perslid_matchwaarde); v_aanduiding := 'Inlezen v_ins_deel_aanmaak kolom:' || v_colnr21; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr21), v_ins_deel_aanmaak); v_aanduiding := 'Inlezen v_ins_deel_vervaldatum kolom:' || v_colnr22; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr22), v_ins_deel_vervaldatum); v_aanduiding := 'Inlezen v_ins_deel_aantal kolom:' || v_colnr23; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr23), v_ins_deel_aantal); v_aanduiding := 'Inlezen v_ins_deel_externnr kolom:' || v_colnr24; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr24), v_ins_deel_externnr); v_aanduiding := 'Inlezen parent ins_srtdeel_omschrijving kolom:' || v_colnr25; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr25), v_ins_srtdeel_omschr_parent); v_aanduiding := 'Inlezen parent ins_deel_omschrijving kolom:' || v_colnr26; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr26), v_ins_deel_omschr_parent); v_aanduiding := 'Inlezen kenmerk1 kolom:' || v_colnr27; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr27), v_ins_kenmerkwaarde1); v_aanduiding := 'Inlezen kenmerk2 kolom:' || v_colnr28; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr28), v_ins_kenmerkwaarde2); v_aanduiding := 'Inlezen kenmerk3 kolom:' || v_colnr29; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr29), v_ins_kenmerkwaarde3); v_aanduiding := 'Inlezen kenmerk4 kolom:' || v_colnr30; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr30), v_ins_kenmerkwaarde4); v_aanduiding := 'Inlezen kenmerk5 kolom:' || v_colnr31; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr31), v_ins_kenmerkwaarde5); v_aanduiding := 'Inlezen kenmerk6 kolom:' || v_colnr32; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr32), v_ins_kenmerkwaarde6); v_aanduiding := 'Inlezen kenmerk7 kolom:' || v_colnr33; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr33), v_ins_kenmerkwaarde7); v_aanduiding := 'Inlezen kenmerk8 kolom:' || v_colnr34; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr34), v_ins_kenmerkwaarde8); v_aanduiding := 'Inlezen kenmerk9 kolom:' || v_colnr35; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr35), v_ins_kenmerkwaarde9); v_aanduiding := 'Inlezen kenmerk10 kolom:' || v_colnr36; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr36), v_ins_kenmerkwaarde10); v_aanduiding := 'Inlezen kenmerk11 kolom:' || v_colnr37; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr37), v_ins_kenmerkwaarde11); v_aanduiding := 'Inlezen kenmerk12 kolom:' || v_colnr38; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr38), v_ins_kenmerkwaarde12); v_aanduiding := 'Inlezen kenmerk13 kolom:' || v_colnr39; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr39), v_ins_kenmerkwaarde13); v_aanduiding := 'Inlezen kenmerk14 kolom:' || v_colnr40; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr40), v_ins_kenmerkwaarde14); v_aanduiding := 'Inlezen kenmerk15 kolom:' || v_colnr41; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr41), v_ins_kenmerkwaarde15); v_aanduiding := 'Inlezen kenmerk16 kolom:' || v_colnr42; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr42), v_ins_kenmerkwaarde16); v_aanduiding := 'Inlezen kenmerk17 kolom:' || v_colnr43; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr43), v_ins_kenmerkwaarde17); v_aanduiding := 'Inlezen kenmerk18 kolom:' || v_colnr44; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr44), v_ins_kenmerkwaarde18); v_aanduiding := 'Inlezen kenmerk19 kolom:' || v_colnr45; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr45), v_ins_kenmerkwaarde19); v_aanduiding := 'Inlezen kenmerk20 kolom:' || v_colnr46; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr46), v_ins_kenmerkwaarde20); v_aanduiding := '[' || v_ins_discipline_omschrijving || '|' || v_ins_srtgroep_omschrijving || '|' || v_ins_srtdeel_code || '|' || v_ins_srtdeel_omschrijving || '|' || v_ins_deel_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) = 'DISCIPLINEOMSCHRIJVING' AND UPPER (v_ins_discipline_kostensoort) = 'DISCIPLINEKOSTENSOORT' AND UPPER (v_ins_srtgroep_omschrijving) = 'GROEPSOORTOMSCHRIJVING' AND UPPER (v_ins_srtdeel_code) = 'OBJECTSOORTCODE' AND UPPER (v_ins_srtdeel_omschrijving) = 'OBJECTSOORTOMSCHRIJVING' AND UPPER (v_ins_deel_omschrijving) = 'OBJECTIDENTIFICATIE' AND UPPER (v_ins_deel_opmerking) = 'OBJECTOPMERKING' AND UPPER (v_reserveerbaar) = 'RESERVEERBAAR' AND UPPER (v_res_deel_eenheid) = 'EENHEID' AND UPPER (v_res_deel_prijs) = 'PRIJS' AND UPPER (v_alg_locatie_code) = 'LOCATIECODE' AND UPPER (v_alg_gebouw_code) = 'GEBOUWCODE' AND UPPER (v_alg_verdieping_volgnr) = 'BOUWLAAGVOLGNUMMER' AND UPPER (v_alg_ruimte_nr) = 'RUIMTENUMMER' AND UPPER (v_res_deel_alg_level) = 'RESERVERINGSCOPE' AND UPPER (v_res_discipline_type) = 'CATALOGUSTYPE' AND UPPER (v_res_discipline_omschrijving) = 'CATALOGUSNAAM' AND UPPER (v_res_discipline_kostensoort) = 'CATALOGUSKOSTENSOORT' AND UPPER (v_prs_perslid_matchcode) = 'PERSOONMATCHCODE' AND UPPER (v_prs_perslid_matchwaarde) = 'PERSOONMATCHWAARDE' AND UPPER (v_ins_deel_aanmaak) = 'INGANGSDATUM' AND UPPER (v_ins_deel_vervaldatum) = 'VERVALDATUM' AND UPPER (v_ins_deel_aantal) = 'AANTAL' AND UPPER (v_ins_deel_externnr) = 'EXTERNNR' AND UPPER (v_ins_srtdeel_omschr_parent) = 'PARENTOBJECTSOORTOMSCHR' AND UPPER (v_ins_deel_omschr_parent) = 'PARENTOBJECTIDENTIFICATIE' 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; 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 := 'Kostensoort ongeldig'; v_ins_discipline_kostensoort := TRIM (v_ins_discipline_kostensoort); IF LENGTH (v_ins_discipline_kostensoort) > 60 THEN v_ins_discipline_kostensoort := SUBSTR (v_ins_discipline_kostensoort, 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Disciplinekostensoort wordt afgebroken tot [' || v_ins_discipline_kostensoort || ']' ); 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 := 'Objectsoortcode ongeldig'; v_ins_srtdeel_code := TRIM (v_ins_srtdeel_code); IF v_ins_srtdeel_code IS NULL OR LENGTH (v_ins_srtdeel_code) > 10 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 := 'Objectomschrijving ongeldig'; v_ins_deel_omschrijving := TRIM (v_ins_deel_omschrijving); IF v_ins_deel_omschrijving IS NULL OR LENGTH (v_ins_deel_omschrijving) > 60 THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen'); v_ongeldig := 1; 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; -- Verder geen foutdetectie; kan dus stricter? SELECT DECODE (SUBSTR (TRIM (UPPER (v_reserveerbaar)), 1, 1), 'J', 1, 0) INTO v_reserveerbaar_n FROM DUAL; -- v_errormsg := 'Eenheid ongeldig'; v_res_deel_eenheid := TRIM (v_res_deel_eenheid); IF LENGTH (v_res_deel_eenheid) > 10 THEN v_res_deel_eenheid := SUBSTR (v_res_deel_eenheid, 1, 10); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Eenheid wordt afgebroken tot [' || v_res_deel_eenheid || ']' ); END IF; -- v_errormsg := 'Prijs ongeldig; maximale grootte 99999.99'; v_res_deel_prijs := TRIM (v_res_deel_prijs); v_res_deel_prijs_n := NULL; IF (v_res_deel_prijs IS NOT NULL) THEN IF (fac.safe_to_number (v_res_deel_prijs) IS NULL) THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); ELSE v_res_deel_prijs_n := fac.safe_to_number (v_res_deel_prijs); END IF; END IF; -- v_errormsg := 'Locatiecode ongeldig'; v_alg_locatie_code := TRIM (v_alg_locatie_code); IF LENGTH (v_alg_locatie_code) > 10 THEN v_alg_locatie_code := SUBSTR (v_alg_locatie_code, 1, 10); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Locatiecode wordt afgebroken tot [' || v_alg_locatie_code || ']' ); END IF; -- v_errormsg := 'Gebouwcode ongeldig'; v_alg_gebouw_code := TRIM (v_alg_gebouw_code); IF LENGTH (v_alg_gebouw_code) > 12 THEN v_alg_gebouw_code := SUBSTR (v_alg_gebouw_code, 1, 12); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Gebouwcode wordt afgebroken tot [' || v_alg_gebouw_code || ']' ); END IF; -- v_errormsg := 'Bouwlaagvolgnummer ongeldig'; v_alg_verdieping_volgnr := TRIM (v_alg_verdieping_volgnr); v_alg_verdieping_volgnr_n := NULL; IF (v_alg_verdieping_volgnr IS NOT NULL) THEN v_alg_verdieping_volgnr_n := ROUND (fac.safe_to_number (v_alg_verdieping_volgnr)); IF v_alg_verdieping_volgnr_n NOT BETWEEN -999 AND 999 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); ELSE v_alg_verdieping_volgnr_n := fac.safe_to_number (v_alg_verdieping_volgnr); END IF; END IF; -- v_errormsg := 'Ruimtenummer ongeldig'; v_alg_ruimte_nr := TRIM (v_alg_ruimte_nr); IF LENGTH (v_alg_ruimte_nr) > 20 THEN v_alg_ruimte_nr := SUBSTR (v_alg_ruimte_nr, 1, 20); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Ruimtenummer wordt afgebroken tot [' || v_alg_ruimte_nr || ']' ); END IF; -- Verder geen foutdetectie; kan dus stricter? SELECT DECODE (SUBSTR (TRIM (v_res_deel_alg_level), 1, 1), 'E', 0, 'D', 1, 'L', 2, 'G', 3, 'V', 4, 'R', 5, -1) INTO v_res_deel_alg_level_n FROM DUAL; -- v_errormsg := 'Catalogustype ongeldig'; SELECT DECODE (SUBSTR(TRIM(v_res_discipline_type), 1, 1), 'R', '3', 'O', '1', 'V', '2', 'W', '5', 'P', '4', '') INTO v_res_discipline_type FROM DUAL; -- v_errormsg := 'Catalogusnaam ongeldig'; v_res_discipline_omschrijving := TRIM (v_res_discipline_omschrijving); IF LENGTH (v_res_discipline_omschrijving) > 60 THEN v_res_discipline_omschrijving := SUBSTR (TRIM (v_res_discipline_omschrijving), 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Catalogusnaam wordt afgebroken tot [' || v_res_discipline_omschrijving || ']' ); END IF; -- v_errormsg := 'Cataloguskostensoort ongeldig'; v_res_discipline_kostensoort := TRIM (v_res_discipline_kostensoort); IF LENGTH (v_res_discipline_kostensoort) > 60 THEN v_res_discipline_kostensoort := SUBSTR (TRIM (v_res_discipline_kostensoort), 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Cataloguskostensoort wordt afgebroken tot [' || v_res_discipline_kostensoort || ']' ); 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; -- v_errorhint := 'Ongeldige vervaldatum'; IF v_ins_deel_vervaldatum IS NOT NULL THEN BEGIN v_ins_deel_vervaldatum_d := TO_DATE (v_ins_deel_vervaldatum, '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_vervaldatum_d := NULL; END IF; -- v_errormsg := 'Externnr ongeldig'; v_ins_deel_externnr := TRIM (v_ins_deel_externnr); IF LENGTH (v_ins_deel_externnr) > 255 THEN v_ins_deel_externnr := SUBSTR (TRIM (v_ins_deel_externnr), 1, 255); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Externnr wordt afgebroken tot [' || v_ins_deel_externnr || ']' ); END IF; -- v_errormsg := 'Parent objectsoortomschrijving ongeldig'; v_ins_srtdeel_omschr_parent := TRIM (v_ins_srtdeel_omschr_parent); IF LENGTH (v_ins_srtdeel_omschr_parent) > 100 THEN v_ins_srtdeel_omschr_parent := SUBSTR (TRIM (v_ins_srtdeel_omschr_parent), 1, 255); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Parent objectsoortomschrijving wordt afgebroken tot [' || v_ins_srtdeel_omschr_parent || ']' ); END IF; -- v_errormsg := 'Parent objectomschrijving ongeldig'; v_ins_deel_omschr_parent := TRIM (v_ins_deel_omschr_parent); IF LENGTH (v_ins_deel_omschr_parent) > 60 THEN v_ins_deel_omschr_parent := SUBSTR (TRIM (v_ins_deel_omschr_parent), 1, 255); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Parent objectomschrijving wordt afgebroken tot [' || v_ins_deel_omschr_parent || ']' ); END IF; -- De rest alleen ff trimmen. v_prs_perslid_matchcode := TRIM (v_prs_perslid_matchcode); v_prs_perslid_matchwaarde := TRIM (v_prs_perslid_matchwaarde); 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, 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, ins_srtdeel_omschr_parent, ins_deel_omschr_parent ) 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, v_ins_srtdeel_omschr_parent, v_ins_deel_omschr_parent ); 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; 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 fac_import_ins_body; / CREATE OR REPLACE PROCEDURE fac_update_ins (p_import_key IN NUMBER) AS v_errormsg VARCHAR2 (1000) := '-'; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_aanduiding VARCHAR2 (200); -- SUBPROC PROCEDURE add_kostensoort (p_import_key IN NUMBER) AS CURSOR c1 IS SELECT prs_kostensoort_upper, MAX (prs_kostensoort_omschrijving) prs_kostensoort_omschrijving FROM ( SELECT UPPER (ins_discipline_kostensoort) prs_kostensoort_upper, MAX (ins_discipline_kostensoort) prs_kostensoort_omschrijving FROM fac_imp_ins WHERE ins_discipline_kostensoort IS NOT NULL GROUP BY UPPER (ins_discipline_kostensoort) UNION ALL SELECT UPPER (res_discipline_kostensoort) prs_kostensoort_upper, MAX (res_discipline_kostensoort) prs_kostensoort_omschrijving FROM fac_imp_ins WHERE reserveerbaar = 1 AND res_discipline_kostensoort IS NOT NULL GROUP BY UPPER (res_discipline_kostensoort)) GROUP BY prs_kostensoort_upper; v_kostensoort_key NUMBER (10); ccount NUMBER (10); v_count_tot NUMBER (10); v_count_update NUMBER (10); BEGIN v_count_tot := 0; v_count_update := 0; FOR rec IN c1 LOOP BEGIN v_count_tot := v_count_tot + 1; v_errormsg := 'Fout bij toevoegen kostensoort [' || rec.prs_kostensoort_omschrijving || ']'; SELECT COUNT ( * ) INTO ccount FROM prs_kostensoort WHERE TRIM (prs_kostensoort_upper) = rec.prs_kostensoort_upper AND prs_kostensoort_verwijder IS NULL; IF ccount = 0 THEN INSERT INTO prs_kostensoort (prs_kostensoort_oms) VALUES (rec.prs_kostensoort_omschrijving); v_count_update := v_count_update + 1; END IF; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'W', v_errormsg, ''); COMMIT; END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'Kostensoorten/aantal ingelezen: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog (p_import_key, 'S', 'Kostensoorten/aantal toegevoegd: ' || TO_CHAR (v_count_update), ''); COMMIT; END; -- SUBPROC PROCEDURE add_insdiscipline (p_import_key IN NUMBER) AS CURSOR c1 IS SELECT UPPER (ins_discipline_omschrijving) ins_discipline_upper, UPPER (ins_discipline_kostensoort) ins_kostensoort_upper, MAX (ins_discipline_omschrijving) ins_discipline_omschrijving FROM fac_imp_ins GROUP BY UPPER (ins_discipline_omschrijving), UPPER (ins_discipline_kostensoort); v_discipline_key NUMBER (10); v_kostensoort_key NUMBER (10); ccount NUMBER (10); v_count_tot NUMBER (10); v_count_update NUMBER (10); BEGIN v_count_tot := 0; v_count_update := 0; FOR rec IN c1 LOOP BEGIN v_count_tot := v_count_tot + 1; v_errormsg := 'Fout bij toevoegen INS-discipline [' || rec.ins_discipline_omschrijving || ']'; SELECT COUNT ( * ) INTO ccount FROM ins_tab_discipline WHERE ins_discipline_verwijder IS NULL AND ins_discipline_module = 'INS' AND UPPER (TRIM (ins_discipline_omschrijving)) = rec.ins_discipline_upper; IF ccount = 0 THEN IF rec.ins_kostensoort_upper IS NULL THEN v_kostensoort_key := NULL; ELSE SELECT prs_kostensoort_key INTO v_kostensoort_key FROM prs_kostensoort WHERE TRIM (prs_kostensoort_upper) = rec.ins_kostensoort_upper AND prs_kostensoort_verwijder IS NULL; END IF; INSERT INTO ins_tab_discipline (ins_discipline_module, ins_discipline_omschrijving, ins_discipline_min_level, ins_discipline_kpnverplicht, prs_kostensoort_key) VALUES ('INS', SUBSTR (rec.ins_discipline_omschrijving, 1, 60), 1, 0, v_kostensoort_key) RETURNING ins_discipline_key INTO v_discipline_key; INSERT INTO ins_disc_params (ins_discipline_key, ins_disc_params_type) VALUES (v_discipline_key, 0); v_count_update := v_count_update + 1; END IF; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'W', v_errormsg, ''); COMMIT; END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'INS-Disciplines/aantal ingelezen: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog (p_import_key, 'S', 'INS-Disciplines/aantal toegevoegd: ' || TO_CHAR (v_count_update), ''); COMMIT; END; -- SUBPROC PROCEDURE add_resdiscipline (p_import_key IN NUMBER) AS CURSOR c1 IS SELECT TO_NUMBER(res_discipline_type) res_discipline_type, UPPER (res_discipline_omschrijving) res_discipline_upper, UPPER (res_discipline_kostensoort) res_kostensoort_upper, MAX (res_discipline_omschrijving) res_discipline_omschrijving FROM fac_imp_ins WHERE reserveerbaar = 1 GROUP BY UPPER (res_discipline_omschrijving), UPPER (res_discipline_kostensoort), TO_NUMBER(res_discipline_type); v_discipline_key NUMBER (10); v_kostensoort_key NUMBER (10); ccount NUMBER (10); v_count_tot NUMBER (10); v_count_update NUMBER (10); BEGIN v_count_tot := 0; v_count_update := 0; FOR rec IN c1 LOOP BEGIN v_count_tot := v_count_tot + 1; v_errormsg := 'Fout bij toevoegen RES-discipline [' || rec.res_discipline_omschrijving || ']'; SELECT COUNT ( * ) INTO ccount FROM ins_tab_discipline WHERE ins_discipline_verwijder IS NULL AND ins_discipline_module = 'RES' AND UPPER (TRIM (ins_discipline_omschrijving)) = rec.res_discipline_upper; IF ccount = 0 THEN IF rec.res_kostensoort_upper IS NULL THEN v_kostensoort_key := NULL; ELSE SELECT prs_kostensoort_key INTO v_kostensoort_key FROM prs_kostensoort WHERE TRIM (prs_kostensoort_upper) = rec.res_kostensoort_upper AND prs_kostensoort_verwijder IS NULL; END IF; INSERT INTO ins_tab_discipline (ins_discipline_module, ins_discipline_omschrijving, ins_discipline_min_level, ins_discipline_kpnverplicht, prs_kostensoort_key) VALUES ('RES', SUBSTR (rec.res_discipline_omschrijving, 1, 60), COALESCE(rec.res_discipline_type, 1), 0, v_kostensoort_key) RETURNING ins_discipline_key INTO v_discipline_key; INSERT INTO res_disc_params (res_ins_discipline_key) VALUES (v_discipline_key); v_count_update := v_count_update + 1; END IF; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'W', v_errormsg, ''); COMMIT; END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'RES-Disciplines/aantal ingelezen: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog (p_import_key, 'S', 'RES-Disciplines/aantal toegevoegd: ' || TO_CHAR (v_count_update), ''); COMMIT; END; -- SUBPROC PROCEDURE add_srtgroep (p_import_key IN NUMBER) AS CURSOR c1 IS SELECT UPPER (ins_discipline_omschrijving) ins_discipline_upper, UPPER (ins_srtgroep_omschrijving) ins_srtgroep_upper, MAX (ins_discipline_omschrijving) ins_discipline_omschrijving, MAX (ins_srtgroep_omschrijving) ins_srtgroep_omschrijving FROM fac_imp_ins GROUP BY UPPER (ins_discipline_omschrijving), UPPER (ins_srtgroep_omschrijving); v_discipline_key NUMBER (10); ccount NUMBER (10); v_count_tot NUMBER (10); v_count_update NUMBER (10); BEGIN v_count_tot := 0; v_count_update := 0; FOR rec IN c1 LOOP BEGIN v_count_tot := v_count_tot + 1; v_errormsg := 'Fout bij bepalen discipline'; SELECT ins_discipline_key INTO v_discipline_key FROM ins_tab_discipline WHERE ins_discipline_verwijder IS NULL AND ins_discipline_module = 'INS' AND UPPER (TRIM (ins_discipline_omschrijving)) = rec.ins_discipline_upper; v_errormsg := 'Fout bij toevoegen groepsoort [' || rec.ins_srtgroep_omschrijving || '] '; SELECT COUNT ( * ) INTO ccount FROM ins_srtgroep WHERE ins_srtgroep_verwijder IS NULL AND ins_srtgroep_module = 'INS' AND ins_discipline_key = v_discipline_key AND TRIM (ins_srtgroep_upper) = rec.ins_srtgroep_upper; IF ccount = 0 THEN INSERT INTO ins_srtgroep (ins_discipline_key, ins_srtgroep_module, ins_srtgroep_omschrijving) VALUES (v_discipline_key, 'INS', SUBSTR (TRIM (rec.ins_srtgroep_omschrijving), 1, 60)); v_count_update := v_count_update + 1; END IF; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'W', v_errormsg, ''); COMMIT; END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'Groepsoorten/aantal ingelezen: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog (p_import_key, 'S', 'Groepsoorten/aantal toegevoegd: ' || TO_CHAR (v_count_update), ''); COMMIT; END; -- SUBPROC PROCEDURE add_srtdeel (p_import_key IN NUMBER) AS CURSOR c1 IS SELECT UPPER (ins_discipline_omschrijving) ins_discipline_upper, UPPER (ins_srtgroep_omschrijving) ins_srtgroep_upper, UPPER (ins_srtdeel_code) ins_srtdeel_code_upper, UPPER (ins_srtdeel_omschrijving) ins_srtdeel_upper, MAX (ins_discipline_omschrijving) ins_discipline_omschrijving, MAX (ins_srtgroep_omschrijving) ins_srtgroep_omschrijving, MAX (ins_srtdeel_code) ins_srtdeel_code, MAX (ins_srtdeel_omschrijving) ins_srtdeel_omschrijving FROM fac_imp_ins GROUP BY UPPER (ins_discipline_omschrijving), UPPER (ins_srtgroep_omschrijving), UPPER (ins_srtdeel_code), UPPER (ins_srtdeel_omschrijving); v_discipline_key NUMBER (10); v_srtgroep_key NUMBER (10); ccount NUMBER (10); v_count_tot NUMBER (10); v_count_update NUMBER (10); BEGIN v_count_tot := 0; v_count_update := 0; FOR rec IN c1 LOOP BEGIN v_count_tot := v_count_tot + 1; v_errormsg := 'Fout bij bepalen discipline'; SELECT ins_discipline_key INTO v_discipline_key FROM ins_tab_discipline WHERE ins_discipline_verwijder IS NULL AND ins_discipline_module = 'INS' AND UPPER (TRIM (ins_discipline_omschrijving)) = rec.ins_discipline_upper; v_errormsg := 'Fout bij bepalen groepsoort'; SELECT ins_srtgroep_key INTO v_srtgroep_key FROM ins_srtgroep WHERE ins_srtgroep_verwijder IS NULL AND ins_srtgroep_module = 'INS' AND ins_discipline_key = v_discipline_key AND TRIM (ins_srtgroep_upper) = rec.ins_srtgroep_upper; v_errormsg := 'Fout bij toevoegen objectsoort [' || rec.ins_srtdeel_omschrijving || ']'; SELECT COUNT ( * ) INTO ccount FROM ins_srtdeel WHERE ins_srtdeel_verwijder IS NULL AND ins_srtdeel_module = 'INS' AND ins_srtgroep_key = v_srtgroep_key AND TRIM (ins_srtdeel_code_upper) = rec.ins_srtdeel_code_upper AND TRIM (ins_srtdeel_upper) = rec.ins_srtdeel_upper; IF ccount = 0 THEN -- binding 17 betekent ruimtegebonden of persoonsgebonden INSERT INTO ins_srtdeel (ins_srtgroep_key, ins_srtdeel_module, ins_srtdeel_code, ins_srtdeel_omschrijving, ins_srtdeel_binding) VALUES (v_srtgroep_key, 'INS', rec.ins_srtdeel_code, rec.ins_srtdeel_omschrijving, 17); v_count_update := v_count_update + 1; END IF; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'W', v_errormsg, ''); COMMIT; END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'Objectsoorten/aantal ingelezen: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog (p_import_key, 'S', 'Objectsoorten/aantal toegevoegd: ' || TO_CHAR (v_count_update), ''); COMMIT; END; -- SUBPROC -- p_kenmerkwaarde = 'Parkeercode|1=37-ZB-DR'. Ofwel: kenmerk_omschrijving|groep=waarde. -- p_kenmerkwaarde = '234|1=37-ZB-DR'. Ofwel: kenmerk_key|groep=waarde. PROCEDURE upsert_inskenmerk (p_deel_key IN NUMBER, p_kenmerkwaarde IN VARCHAR2) AS v_kenmerk_key NUMBER; v_srtkenmerk_key NUMBER; v_groep NUMBER; v_kenmerk VARCHAR2 (50); v_waarde VARCHAR2 (4053); v_srtkenmerk_type ins_srtkenmerk.ins_srtkenmerk_kenmerktype%TYPE; ccount NUMBER; v_objectnaam fac_kenmerkdomein.fac_kenmerkdomein_objectnaam%TYPE; v_kolomnaam fac_kenmerkdomein.fac_kenmerkdomein_kolomnaam%TYPE; v_kolomtxt fac_kenmerkdomein.fac_kenmerkdomein_kolomtxt%TYPE; sql_stmt VARCHAR2 (1000); v_kenmerkdeel_key NUMBER; l_cursor_1 INTEGER; l_rowsprocessed NUMBER DEFAULT 0; BEGIN IF p_kenmerkwaarde IS NOT NULL THEN v_errormsg := 'Fout bij bepalen kenmerk [' || SUBSTR(p_kenmerkwaarde, 1, 200) || ']'; v_kenmerk := SUBSTR (p_kenmerkwaarde, 1, INSTR (p_kenmerkwaarde, '|') - 1); v_groep := fac.safe_to_number ( SUBSTR (p_kenmerkwaarde, INSTR (p_kenmerkwaarde, '|') + 1, INSTR (p_kenmerkwaarde, '=') - 1 - INSTR (p_kenmerkwaarde, '|'))); v_waarde := SUBSTR (p_kenmerkwaarde, INSTR (p_kenmerkwaarde, '=') + 1); IF fac.safe_to_number (v_kenmerk) IS NULL THEN -- Er kunnen drie kenmerken met dezelfde omschrijving gedefinieerd worden voor een object, -- namenlijk op drie niveaus discipline (D), 0bjectgroep (G) en objectsoort (S). -- Bij meerdere dezelfde kenmerken nemen we het kenmerk met de laagste volgnummer. SELECT ins_kenmerk_key, ins_srtkenmerk_key, ins_srtkenmerk_kenmerktype INTO v_kenmerk_key, v_srtkenmerk_key, v_srtkenmerk_type FROM ( SELECT k.ins_kenmerk_key, sk.ins_srtkenmerk_key, sk.ins_srtkenmerk_kenmerktype, k.ins_kenmerk_volgnummer FROM ins_deel d, ins_srtdeel sd, ins_srtgroep sg, ins_v_aanwezigkenmerk k, ins_v_aanwezigsrtkenmerk sk WHERE d.ins_deel_key = p_deel_key AND d.ins_srtdeel_key = sd.ins_srtdeel_key AND sd.ins_srtgroep_key = sg.ins_srtgroep_key AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key AND k.ins_kenmerk_groep = v_groep AND ((k.ins_srtinstallatie_key = sd.ins_srtdeel_key AND k.ins_kenmerk_niveau = 'S') OR (k.ins_srtinstallatie_key = sg.ins_srtgroep_key AND k.ins_kenmerk_niveau = 'G') OR (k.ins_srtinstallatie_key = sg.ins_discipline_key AND k.ins_kenmerk_niveau = 'D')) AND COALESCE(UPPER(k.ins_kenmerk_omschrijving), sk.ins_srtkenmerk_upper) = UPPER(v_kenmerk) AND sk.ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'r', 'S', 'X', 'V') ORDER BY k.ins_kenmerk_volgnummer) WHERE ROWNUM = 1; ELSE SELECT k.ins_kenmerk_key, sk.ins_srtkenmerk_key, sk.ins_srtkenmerk_kenmerktype INTO v_kenmerk_key, v_srtkenmerk_key, v_srtkenmerk_type FROM ins_v_aanwezigkenmerk k, ins_v_aanwezigsrtkenmerk sk WHERE k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key AND k.ins_kenmerk_groep = v_groep AND k.ins_kenmerk_key = v_kenmerk AND sk.ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'r', 'S', 'X', 'V') ORDER BY k.ins_kenmerk_volgnummer; END IF; IF v_waarde IS NOT NULL THEN IF v_srtkenmerk_type IN ('R', 'r', 'S') THEN v_errormsg := 'Fout bij bepalen eigen tabel'; SELECT COUNT (*) INTO ccount FROM ins_srtkenmerk sk, fac_kenmerkdomein d WHERE sk.ins_srtkenmerk_key = v_srtkenmerk_key AND sk.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key AND d.fac_usrtab_key IS NOT NULL; v_errormsg := 'Fout bij bepalen nieuwe waarde [' || SUBSTR(v_waarde, 1, 200) || ']'; IF ccount = 1 THEN -- Eigen tabel SELECT TO_CHAR (ud.fac_usrdata_key) INTO v_waarde FROM ins_srtkenmerk sk, fac_kenmerkdomein d, fac_v_aanwezigusrdata ud WHERE sk.ins_srtkenmerk_key = v_srtkenmerk_key AND sk.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key AND d.fac_usrtab_key = ud.fac_usrtab_key AND UPPER (TRIM (ud.fac_usrdata_omschr)) = UPPER (v_waarde); ELSE -- FACILITOR view/tabel SELECT d.fac_kenmerkdomein_objectnaam, d.fac_kenmerkdomein_kolomnaam, d.fac_kenmerkdomein_kolomtxt INTO v_objectnaam, v_kolomnaam, v_kolomtxt FROM ins_srtkenmerk sk, fac_kenmerkdomein d WHERE sk.ins_srtkenmerk_key = v_srtkenmerk_key AND sk.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key AND d.fac_usrtab_key IS NULL; sql_stmt := 'SELECT MAX (' || v_kolomnaam || ') FROM ' || v_objectnaam || ' WHERE UPPER (TRIM (' || v_kolomtxt || ')) = UPPER (:pwaarde)'; l_cursor_1 := DBMS_SQL.open_cursor; DBMS_SQL.parse (l_cursor_1, sql_stmt, DBMS_SQL.native); DBMS_SQL.BIND_VARIABLE(l_cursor_1,':pwaarde', v_waarde); DBMS_SQL.define_column(l_cursor_1, 1, v_waarde, 255); l_rowsprocessed := DBMS_SQL.execute_and_fetch (l_cursor_1); DBMS_SQL.column_value (l_cursor_1, 1, v_waarde); DBMS_SQL.close_cursor(l_cursor_1); END IF; ELSE -- C(Karakter)/D(Datum)/N(Numeriek)/X(Bestandsnaam) NULL; -- v_waarde := p_waarde; END IF; v_errormsg := 'Fout bij bepalen huidige waarde'; SELECT COUNT (*), MAX (ins_kenmerkdeel_key) INTO ccount, v_kenmerkdeel_key FROM ins_v_aanwezigkenmerkdeel WHERE ins_deel_key = p_deel_key AND ins_kenmerk_key = v_kenmerk_key; IF v_srtkenmerk_type = 'N' -- Alleen voor numerieke waarden de decimale komma vervangen door punt. THEN v_waarde := REPLACE (v_waarde, ',', '.'); END IF; IF ccount = 0 THEN v_errormsg := 'Fout bij toevoegen waarde [' || SUBSTR(v_waarde, 1, 200) || ']'; INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde) VALUES (p_deel_key, v_kenmerk_key, v_waarde); ELSE v_errormsg := 'Fout bij bijwerken waarde [' || SUBSTR(v_waarde, 1, 200) || ']'; UPDATE ins_kenmerkdeel SET ins_kenmerkdeel_waarde = v_waarde WHERE ins_kenmerkdeel_key = v_kenmerkdeel_key; END IF; ELSE -- Verwijder kenmerken die al bestaan maar met de nieuwe import leeg zijn. DELETE ins_kenmerkdeel WHERE ins_kenmerk_key = v_kenmerk_key AND ins_deel_key = p_deel_key; END IF; END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'upsert_inskenmerk'); END; -- SUBPROC PROCEDURE add_deel (p_import_key IN NUMBER) AS CURSOR c1 IS SELECT ins_discipline_omschrijving, 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, reserveerbaar, res_discipline_omschrijving, res_deel_eenheid, res_deel_prijs, res_deel_alg_level, 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, ins_srtdeel_omschr_parent, ins_deel_omschr_parent FROM fac_imp_ins; v_discipline_key NUMBER (10); v_rdiscipline_key NUMBER (10); v_srtgroep_key NUMBER (10); v_srtdeel_key NUMBER (10); v_locatie_key NUMBER (10); v_gebouw_key NUMBER (10); v_verdieping_key NUMBER (10); v_ruimte_key NUMBER (10); v_matchkolom VARCHAR2 (255); sql_stmt VARCHAR2 (1000); v_ruimte_type VARCHAR2 (10); v_deel_key NUMBER (10); ccount NUMBER (10); pcount NUMBER (10); v_count_tot NUMBER (10); v_count_insnew NUMBER (10); v_count_insupd NUMBER (10); v_count_resnew NUMBER (10); v_srtnoti_code VARCHAR2 (6); l_cursor_1 INTEGER; l_rowsprocessed NUMBER DEFAULT 0; v_ins_deel_aanmaak_d DATE; v_ins_deel_vervaldatum_d DATE; v_ins_deel_aantal_n NUMBER(8,2); v_ins_deel_externnr VARCHAR2(255); v_ins_deel_parent_key NUMBER (10); BEGIN v_count_tot := 0; v_count_insnew := 0; v_count_insupd := 0; v_count_resnew := 0; v_aanduiding := ''; FOR rec IN c1 LOOP BEGIN v_count_tot := v_count_tot + 1; v_ins_deel_aanmaak_d := rec.ins_deel_aanmaak; v_ins_deel_vervaldatum_d := rec.ins_deel_vervaldatum; v_ins_deel_aantal_n := rec.ins_deel_aantal; v_ins_deel_externnr := rec.ins_deel_externnr; v_aanduiding := '[' || rec.ins_discipline_omschrijving || '|' || rec.ins_srtgroep_omschrijving || '|' || rec.ins_srtdeel_code || '|' || rec.ins_srtdeel_omschrijving || '|' || rec.ins_deel_omschrijving || '] '; v_errormsg := 'Fout bij bepalen discipline'; SELECT ins_discipline_key INTO v_discipline_key FROM ins_tab_discipline WHERE ins_discipline_verwijder IS NULL AND ins_discipline_module = 'INS' AND UPPER (TRIM (ins_discipline_omschrijving)) = UPPER (rec.ins_discipline_omschrijving); v_errormsg := 'Fout bij bepalen groepsoort'; SELECT ins_srtgroep_key INTO v_srtgroep_key FROM ins_srtgroep WHERE ins_srtgroep_verwijder IS NULL AND ins_srtgroep_module = 'INS' AND ins_discipline_key = v_discipline_key AND TRIM (ins_srtgroep_upper) = UPPER (rec.ins_srtgroep_omschrijving); v_errormsg := 'Fout bij bepalen objectsoort'; SELECT ins_srtdeel_key INTO v_srtdeel_key FROM ins_srtdeel WHERE ins_srtdeel_verwijder IS NULL AND ins_srtdeel_module = 'INS' AND ins_srtgroep_key = v_srtgroep_key AND TRIM (UPPER(ins_srtdeel_code)) = UPPER (rec.ins_srtdeel_code) AND TRIM (ins_srtdeel_upper) = UPPER (rec.ins_srtdeel_omschrijving); v_locatie_key := NULL; IF rec.alg_locatie_code IS NOT NULL THEN -- ruimtegebonden object v_errormsg := 'Fout bij bepalen locatie [' || rec.alg_locatie_code || ']'; SELECT alg_locatie_key INTO v_locatie_key FROM alg_v_aanweziglocatie WHERE UPPER (TRIM (alg_locatie_code)) = UPPER (rec.alg_locatie_code); v_errormsg := 'Fout bij bepalen gebouw [' || rec.alg_gebouw_code || ']'; SELECT alg_gebouw_key INTO v_gebouw_key FROM alg_v_aanweziggebouw WHERE alg_locatie_key = v_locatie_key AND UPPER (TRIM (alg_gebouw_code)) = UPPER (rec.alg_gebouw_code); v_errormsg := 'Fout bij bepalen verdieping [' || rec.alg_verdieping_volgnr || ']'; SELECT alg_verdieping_key INTO v_verdieping_key FROM alg_v_aanwezigverdieping WHERE alg_gebouw_key = v_gebouw_key AND alg_verdieping_volgnr = rec.alg_verdieping_volgnr; v_errormsg := 'Fout bij bepalen ruimte [' || rec.alg_ruimte_nr || ']'; SELECT alg_ruimte_key INTO v_ruimte_key FROM alg_v_aanwezigruimte WHERE alg_verdieping_key = v_verdieping_key AND TRIM (alg_ruimte_upper_nr) = UPPER (rec.alg_ruimte_nr); v_ruimte_type := 'R'; -- ruimtegebonden objecten hebben een unieke ID binnen locatie SELECT COUNT ( * ) INTO ccount FROM ins_v_aanwezigdeel WHERE ins_deel_module = 'INS' AND ins_srtdeel_key = v_srtdeel_key AND ins_alg_ruimte_type = v_ruimte_type -- R AND ins_alg_locatie_key = v_locatie_key AND TRIM (ins_deel_upper) = UPPER (rec.ins_deel_omschrijving); ELSE -- persoonsgebonden object v_matchkolom := ''; CASE rec.prs_perslid_matchcode WHEN '1' THEN v_matchkolom := 'PRS_PERSLID_EMAIL'; WHEN '10' THEN v_matchkolom := 'PRS_PERSLID_EMAIL'; WHEN '2' THEN v_matchkolom := 'PRS_PERSLID_OSLOGIN'; WHEN '20' THEN v_matchkolom := 'PRS_PERSLID_OSLOGIN'; WHEN '3' THEN v_matchkolom := 'PRS_PERSLID_KEY'; WHEN '30' THEN v_matchkolom := 'PRS_PERSLID_KEY'; WHEN '4' THEN v_matchkolom := 'PRS_PERSLID_NR'; WHEN '40' THEN v_matchkolom := 'PRS_PERSLID_NR'; WHEN '5' THEN v_matchkolom := 'PRS_PERSLID_VOORNAAM || '' '' || PRS_PERSLID_NAAM'; WHEN '50' THEN v_matchkolom := 'PRS_PERSLID_VOORNAAM || '' '' || PRS_PERSLID_NAAM'; ELSE -- voor developers only: indien geen code wordt gebruikt, -- kan als persoonmatchcode een kolom uit de perslid-tabel -- worden ingevoerd, bijvoorbeeld: prs_perslid_oslogin2 v_matchkolom := rec.prs_perslid_matchcode; END CASE; v_errormsg := 'Fout bij bepalen persoon [' || rec.prs_perslid_matchwaarde || ']'; sql_stmt := 'SELECT MIN (prs_perslid_key), COUNT (prs_perslid_key) ' || ' FROM prs_v_aanwezigperslid ' || ' WHERE UPPER (' || v_matchkolom || ') = UPPER (:pwaarde) '; --dbms_output.put_line(rec.prs_perslid_matchwaarde); l_cursor_1 := DBMS_SQL.open_cursor; DBMS_SQL.parse (l_cursor_1, sql_stmt, DBMS_SQL.native); DBMS_SQL.BIND_VARIABLE(l_cursor_1,':pwaarde', rec.prs_perslid_matchwaarde); DBMS_SQL.define_column(l_cursor_1, 1, v_ruimte_key); DBMS_SQL.define_column(l_cursor_1, 2, pcount); l_rowsprocessed := DBMS_SQL.execute_and_fetch (l_cursor_1); -- Bij no rows gaat-ie naar de exception. Moet daar dan nog een cursor dicht?? DBMS_SQL.column_value (l_cursor_1, 1, v_ruimte_key); DBMS_SQL.column_value (l_cursor_1, 2, pcount); DBMS_SQL.close_cursor(l_cursor_1); --dbms_output.put_line(pcount); IF pcount != 1 THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Kan persoon niet 1-duidig bepalen'); END IF; v_errormsg := 'Fout bij bepalen type koppeling'; IF rec.prs_perslid_matchcode in ('10','20','30','40','50') THEN v_ruimte_type := 'A' ; -- Koppeling aan Afdeling van desbetreffende SELECT prs_afdeling_key INTO v_ruimte_key FROM prs_v_aanwezigperslid WHERE prs_perslid_key = v_ruimte_key; ELSE v_ruimte_type := 'P' ; END IF; -- persoonsgebonden objecten hebben een unieke ID SELECT COUNT ( * ) INTO ccount FROM ins_v_aanwezigdeel WHERE ins_deel_module = 'INS' AND ins_srtdeel_key = v_srtdeel_key AND ins_alg_ruimte_type = v_ruimte_type -- P AND ins_alg_locatie_key IS NULL AND TRIM (ins_deel_upper) = UPPER (rec.ins_deel_omschrijving); END IF; IF rec.ins_deel_omschr_parent IS NOT NULL THEN v_errormsg := 'Fout bij bepalen parent object'; SELECT d.ins_deel_key INTO v_ins_deel_parent_key FROM ins_v_aanwezigdeel d , ins_srtdeel sd WHERE d.ins_srtdeel_key = sd.ins_srtdeel_key AND TRIM (sd.ins_srtdeel_upper) = UPPER (rec.ins_srtdeel_omschr_parent) AND TRIM (d.ins_deel_upper) = UPPER (rec.ins_deel_omschr_parent) AND sd.ins_srtdeel_verwijder IS NULL AND ins_srtdeel_module = 'INS'; END IF; IF ccount = 0 THEN -- toevoegen object! v_errormsg := 'Fout bij toevoegen INS-object'; INSERT INTO ins_deel (ins_discipline_key, ins_srtdeel_key, ins_deel_module, ins_deel_omschrijving, ins_deel_opmerking, ins_alg_ruimte_key, ins_alg_ruimte_type, ins_alg_locatie_key, ins_deel_aanmaak, ins_deel_vervaldatum, ins_deel_aantal, ins_deel_externnr, ins_deel_parent_key) VALUES (v_discipline_key, v_srtdeel_key, 'INS', rec.ins_deel_omschrijving, rec.ins_deel_opmerking, v_ruimte_key, v_ruimte_type, v_locatie_key, v_ins_deel_aanmaak_d, v_ins_deel_vervaldatum_d, v_ins_deel_aantal_n, v_ins_deel_externnr, v_ins_deel_parent_key) RETURNING ins_deel_key INTO v_deel_key; -- Overslaan als reserveerbaar en geen RES-discipline of andersom, -- dus verder geen controle op eventuele inconsistentie! IF (rec.reserveerbaar = 1 AND rec.res_discipline_omschrijving IS NOT NULL) THEN v_errormsg := 'Fout bij bepalen RES-discipline [' || rec.res_discipline_omschrijving || ']'; SELECT ins_discipline_key INTO v_rdiscipline_key FROM res_discipline WHERE ins_discipline_verwijder IS NULL AND ins_discipline_module = 'RES' AND UPPER (TRIM (ins_discipline_omschrijving)) = UPPER (rec.res_discipline_omschrijving); v_errormsg := 'Fout bij toevoegen RES-object'; INSERT INTO res_deel (res_ins_deel_key, res_deel_omschrijving, res_deel_opmerking, res_deel_eenheid, res_deel_prijs, res_discipline_key, res_deel_alg_level) VALUES (v_deel_key, rec.ins_deel_omschrijving, rec.ins_deel_opmerking, rec.res_deel_eenheid, rec.res_deel_prijs, v_rdiscipline_key, rec.res_deel_alg_level); v_count_resnew := v_count_resnew + 1; END IF; v_srtnoti_code := 'INSNEW'; v_count_insnew := v_count_insnew + 1; ELSE -- bijwerken object! v_errormsg := 'Fout bij bepalen INS-object'; SELECT ins_deel_key INTO v_deel_key FROM ins_v_aanwezigdeel WHERE ins_deel_module = 'INS' AND ins_srtdeel_key = v_srtdeel_key AND ins_alg_ruimte_type = v_ruimte_type -- R/P AND COALESCE (ins_alg_locatie_key, -1) = COALESCE (v_locatie_key, -1) -- gevuld/NULL AND TRIM (ins_deel_upper) = UPPER (rec.ins_deel_omschrijving); v_srtnoti_code := 'INSUPD'; v_count_insupd := v_count_insupd + 1; END IF; -- NULL-waarden resulteren NIET in het wissen van kenmerkvelden -- (bijwerken kan wel, maar wissen dus niet)! ins_kenmerkwaarde1 upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde1); upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde2); upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde3); upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde4); upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde5); upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde6); upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde7); upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde8); upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde9); upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde10); upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde11); upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde12); upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde13); upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde14); upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde15); upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde16); upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde17); upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde18); upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde19); upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde20); fac.trackaction (v_srtnoti_code, v_deel_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, NULL); COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, ''); COMMIT; END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'INS-objecten/aantal ingelezen: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog (p_import_key, 'S', 'INS-objecten/aantal toegevoegd: ' || TO_CHAR (v_count_insnew), ''); fac.imp_writelog (p_import_key, 'S', 'INS-objecten/aantal bijgewerkt: ' || TO_CHAR (v_count_insupd), ''); fac.imp_writelog (p_import_key, 'S', 'RES-objecten/aantal toegevoegd: ' || TO_CHAR (v_count_resnew), ''); COMMIT; END; -- MAIN BEGIN add_kostensoort (p_import_key); add_insdiscipline (p_import_key); add_resdiscipline (p_import_key); add_srtgroep (p_import_key); add_srtdeel (p_import_key); add_deel (p_import_key); EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Importproces objecten afgebroken!'); END fac_update_ins; / -- UWVA#22765 - SLE: Verfijning sleutelbeheer CREATE OR REPLACE PROCEDURE fac_import_sle (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); 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 (200); -- De importvelden v_ins_srtdeel_code VARCHAR2 (255); -- C10 v_ins_srtdeel_omschrijving VARCHAR2 (255); -- C100 v_alg_locatie_code VARCHAR2 (255); -- C10 v_alg_gebouw_code VARCHAR2 (255); -- C12 v_alg_verdieping_code VARCHAR2 (255); -- C10 v_alg_ruimte_nr VARCHAR2 (255); -- C20 v_cil_gebouw_code VARCHAR2 (255); -- C12 v_cil_verdieping_code VARCHAR2 (255); -- C10 v_cil_ruimte_nr VARCHAR2 (255); -- C10 v_aant_sleutels_in_set VARCHAR2 (255); -- N3 v_aant_sleutels_in_set_n NUMBER (3); -- N3 v_ins_kenmerkwaarde1 VARCHAR2 (4000); v_ins_kenmerkwaarde2 VARCHAR2 (4000); v_ins_kenmerkwaarde3 VARCHAR2 (4000); v_ins_kenmerkwaarde4 VARCHAR2 (4000); v_ins_kenmerkwaarde5 VARCHAR2 (4000); -- 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 fac_imp_sle; 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_errormsg := 'Fout opvragen te importeren rij'; v_aanduiding := ''; v_ongeldig := 0; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_delim, v_ins_srtdeel_code); fac.imp_getfield (v_newline, c_delim, v_ins_srtdeel_omschrijving); fac.imp_getfield (v_newline, c_delim, v_alg_locatie_code); fac.imp_getfield (v_newline, c_delim, v_alg_gebouw_code); fac.imp_getfield (v_newline, c_delim, v_alg_verdieping_code); fac.imp_getfield (v_newline, c_delim, v_alg_ruimte_nr); fac.imp_getfield (v_newline, c_delim, v_cil_gebouw_code); fac.imp_getfield (v_newline, c_delim, v_cil_verdieping_code); fac.imp_getfield (v_newline, c_delim, v_cil_ruimte_nr); fac.imp_getfield (v_newline, c_delim, v_aant_sleutels_in_set); fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde1); 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); v_aanduiding := '[' || v_ins_srtdeel_code || '|' || v_ins_srtdeel_omschrijving || '|' || v_alg_locatie_code || '] '; -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen -- de juiste kolomkop. -- Ik controleer daarbij alleen alle CORE-kolommen, dus niet kenmerk1 t/m 5! -- Ik negeer alles totdat ik een geldige header ben gepasseerd. IF (header_is_valid = 0) THEN IF UPPER (v_ins_srtdeel_code) = 'SLEUTELSETCODE' AND UPPER (v_ins_srtdeel_omschrijving) = 'SLEUTELSETOMSCHRIJVING' AND UPPER (v_alg_locatie_code) = 'LOCATIECODE' AND UPPER (v_alg_gebouw_code) = 'STAMGEBOUWCODE' AND UPPER (v_alg_verdieping_code) = 'STAMVERDIEPINGCODE' AND UPPER (v_alg_ruimte_nr) = 'STAMRUIMTENUMMER' AND UPPER (v_cil_gebouw_code) = 'GEBOUWCODE' AND UPPER (v_cil_verdieping_code) = 'VERDIEPINGCODE' AND UPPER (v_cil_ruimte_nr) = 'RUIMTENUMMER' AND UPPER (v_aant_sleutels_in_set) = 'AANTALEXEMPLAREN' THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden v_errormsg := 'Soortcode ongeldig'; v_ins_srtdeel_code := TRIM (v_ins_srtdeel_code); IF v_ins_srtdeel_code IS NULL OR LENGTH (v_ins_srtdeel_code) > 10 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'Soortomschrijving 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 v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'Locatiecode ongeldig'; v_alg_locatie_code := TRIM (v_alg_locatie_code); IF v_alg_locatie_code IS NULL OR LENGTH (v_alg_locatie_code) > 10 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'Stamgebouwcode ongeldig'; v_alg_gebouw_code := TRIM (v_alg_gebouw_code); IF v_alg_gebouw_code IS NULL OR LENGTH (v_alg_gebouw_code) > 12 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'Stamverdiepingcode ongeldig'; v_alg_verdieping_code := TRIM (v_alg_verdieping_code); IF v_alg_verdieping_code IS NULL OR LENGTH (v_alg_verdieping_code) > 10 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'Stamruimtenummer ongeldig'; v_alg_ruimte_nr := TRIM (v_alg_ruimte_nr); IF v_alg_ruimte_nr IS NULL OR LENGTH (v_alg_ruimte_nr) > 20 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'Gebouwcode/cilinder ongeldig'; v_cil_gebouw_code := TRIM (v_cil_gebouw_code); IF v_cil_gebouw_code IS NULL OR LENGTH (v_cil_gebouw_code) > 12 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'Verdiepingcode/cilinder ongeldig'; v_cil_verdieping_code := TRIM (v_cil_verdieping_code); IF v_cil_verdieping_code IS NULL OR LENGTH (v_cil_verdieping_code) > 10 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'Ruimtenummer/cilinder ongeldig'; v_cil_ruimte_nr := TRIM (v_cil_ruimte_nr); IF v_cil_ruimte_nr IS NULL OR LENGTH (v_cil_ruimte_nr) > 10 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'Aantal exemplaren ongeldig'; v_aant_sleutels_in_set := TRIM (v_aant_sleutels_in_set); IF (COALESCE ( LENGTH ( ROUND (fac.safe_to_number (v_aant_sleutels_in_set)) ), 10 )) > 3 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); ELSE v_aant_sleutels_in_set_n := ROUND (fac.safe_to_number (v_aant_sleutels_in_set)); END IF; -- Insert geformatteerde import record IF v_ongeldig = 0 THEN BEGIN v_errormsg := 'Fout bij wegschrijven importregel'; INSERT INTO fac_imp_sle (ins_srtdeel_code, ins_srtdeel_omschrijving, alg_locatie_code, alg_gebouw_code, alg_verdieping_code, alg_ruimte_nr, cil_gebouw_code, cil_verdieping_code, cil_ruimte_nr, aant_sleutels_in_set, ins_kenmerkwaarde1, ins_kenmerkwaarde2, ins_kenmerkwaarde3, ins_kenmerkwaarde4, ins_kenmerkwaarde5) VALUES (v_ins_srtdeel_code, v_ins_srtdeel_omschrijving, v_alg_locatie_code, v_alg_gebouw_code, v_alg_verdieping_code, v_alg_ruimte_nr, v_cil_gebouw_code, v_cil_verdieping_code, v_cil_ruimte_nr, v_aant_sleutels_in_set_n, TRIM (v_ins_kenmerkwaarde1), TRIM (v_ins_kenmerkwaarde2), TRIM (v_ins_kenmerkwaarde3), TRIM (v_ins_kenmerkwaarde4), TRIM (v_ins_kenmerkwaarde5)); 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, 'E', v_aanduiding || v_errormsg, 'Fout bij toevoegen regel aan importtabel FAC_IMP_SLE.' ); 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', 'Sleutelsets/aantal ingelezen importregels: ' || TO_CHAR (v_count_tot), '' ); fac.imp_writelog ( p_import_key, 'S', 'Sleutelsets/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 sleutelsets afgebroken!'); END fac_import_sle; / CREATE OR REPLACE PROCEDURE fac_update_sle (p_import_key IN NUMBER) AS v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); -- SUBPROC PROCEDURE add_srtdeel (p_import_key IN NUMBER) AS CURSOR c1 IS SELECT cs.ins_srtgroep_key cilindergroep_key, ss.ins_srtgroep_key sleutelgroep_key, UPPER (x.ins_srtdeel_code) ins_srtdeel_code_upper, UPPER (x.ins_srtdeel_omschrijving) ins_srtdeel_upper, MIN (x.ins_srtdeel_code) ins_srtdeel_code, MIN (x.ins_srtdeel_omschrijving) ins_srtdeel_omschrijving FROM (SELECT ins_srtgroep_key FROM fac_setting s, ins_srtgroep sg WHERE UPPER (s.fac_setting_name) = 'CIL_INS_SRT_GROEP_KEY' AND fac.safe_to_number (s.fac_setting_pvalue) = sg.ins_srtgroep_key) cs, (SELECT ins_srtgroep_key FROM fac_setting s, ins_srtgroep sg WHERE UPPER (s.fac_setting_name) = 'SLE_INS_SRT_GROEP_KEY' AND fac.safe_to_number (s.fac_setting_pvalue) = sg.ins_srtgroep_key) ss, fac_imp_sle x GROUP BY cs.ins_srtgroep_key, ss.ins_srtgroep_key, UPPER (x.ins_srtdeel_code), UPPER (x.ins_srtdeel_omschrijving) ORDER BY 1, 2, 3, 4; v_count_tot NUMBER (10); v_count_cs NUMBER (10); v_count_ss NUMBER (10); v_aanduiding VARCHAR (200); v_cilindergroep_key NUMBER (10); v_cilinderset_key NUMBER (10); v_sleutelgroep_key NUMBER (10); v_sleutelset_key NUMBER (10); ccount NUMBER (10); BEGIN v_count_tot := 0; v_count_cs := 0; v_count_ss := 0; FOR rec IN c1 LOOP BEGIN v_aanduiding := '[' || rec.ins_srtdeel_code || '|' || rec.ins_srtdeel_omschrijving || '] '; v_count_tot := v_count_tot + 1; v_errormsg := 'Fout bij bepalen INS-Cilinderset (tbv. koppeling)'; SELECT COUNT ( * ) INTO ccount FROM ins_srtdeel WHERE ins_srtdeel_verwijder IS NULL AND ins_srtdeel_module = 'INS' AND ins_srtgroep_key = rec.cilindergroep_key AND UPPER (TRIM (ins_srtdeel_omschrijving)) = UPPER (TRIM (rec.ins_srtdeel_omschrijving)); IF ccount = 0 THEN v_errormsg := 'Fout bij toevoegen INS-Cilinderset (tbv. koppeling)'; -- Binding 5 betekent ruimte=1 of terreingebonden=4 -- (Ruimte- en Terrein-vinkje gezet)! INSERT INTO ins_srtdeel (ins_srtgroep_key, ins_srtdeel_module, ins_srtdeel_code, ins_srtdeel_omschrijving, ins_srtdeel_binding, ins_srtdeel_uitleenbaar) VALUES (rec.cilindergroep_key, 'INS', rec.ins_srtdeel_code_upper, rec.ins_srtdeel_omschrijving, 5, 1) RETURNING ins_srtdeel_key INTO v_cilinderset_key; v_count_cs := v_count_cs + 1; ELSE SELECT ins_srtdeel_key INTO v_cilinderset_key FROM ins_srtdeel WHERE ins_srtdeel_verwijder IS NULL AND ins_srtdeel_module = 'INS' AND ins_srtgroep_key = rec.cilindergroep_key AND UPPER (TRIM (ins_srtdeel_omschrijving)) = UPPER (TRIM (rec.ins_srtdeel_omschrijving)); END IF; v_errormsg := 'Fout bij bepalen INS-Sleutelset (tbv. koppeling)'; SELECT COUNT ( * ) INTO ccount FROM ins_srtdeel WHERE ins_srtdeel_verwijder IS NULL AND ins_srtdeel_module = 'INS' AND ins_srtgroep_key = rec.sleutelgroep_key AND UPPER (TRIM (ins_srtdeel_omschrijving)) = UPPER (TRIM (rec.ins_srtdeel_omschrijving)); IF ccount = 0 THEN v_errormsg := 'Fout bij toevoegen INS-Sleutelset (tbv. koppeling)'; -- Binding 5 betekent ruimte=1 of terreingebonden=4 -- (Ruimte- en Terrein-vinkje gezet)! INSERT INTO ins_srtdeel (ins_srtgroep_key, ins_srtdeel_module, ins_srtdeel_code, ins_srtdeel_omschrijving, ins_srtdeel_binding, ins_srtdeel_uitleenbaar) VALUES (rec.sleutelgroep_key, 'INS', rec.ins_srtdeel_code_upper, rec.ins_srtdeel_omschrijving, 5, 1) RETURNING ins_srtdeel_key INTO v_sleutelset_key; v_count_ss := v_count_ss + 1; ELSE SELECT ins_srtdeel_key INTO v_sleutelset_key FROM ins_srtdeel WHERE ins_srtdeel_verwijder IS NULL AND ins_srtdeel_module = 'INS' AND ins_srtgroep_key = rec.sleutelgroep_key AND UPPER (TRIM (ins_srtdeel_omschrijving)) = UPPER (TRIM (rec.ins_srtdeel_omschrijving)); END IF; v_errormsg := 'Fout bij toevoegen INS-Cilinderset-Sleutelset'; INSERT INTO ins_srtdeel_srtdeel (ins_srtdeel_key_1, ins_srtdeel_key_2, ins_module) SELECT v_cilinderset_key, v_sleutelset_key, 'SLE' FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM ins_srtdeel_srtdeel WHERE ins_srtdeel_key_1 = v_cilinderset_key AND ins_srtdeel_key_2 = v_sleutelset_key AND ins_module = 'SLE'); 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_errormsg, ''); END; COMMIT; END LOOP; fac.imp_writelog ( p_import_key, 'S', 'INS-Cilindersets/#toegevoegd: ' || TO_CHAR (v_count_cs) || ' (van ' || TO_CHAR (v_count_tot) || ')', '' ); fac.imp_writelog ( p_import_key, 'S', 'INS-Sleutelsets/#toegevoegd: ' || TO_CHAR (v_count_ss) || ' (van ' || TO_CHAR (v_count_tot) || ')', '' ); COMMIT; END; -- SUBPROC PROCEDURE add_cilinders (p_import_key IN NUMBER) AS CURSOR c1 IS SELECT sg.ins_discipline_key, sg.ins_srtgroep_key, x.ins_srtdeel_code, x.ins_srtdeel_omschrijving, x.alg_locatie_code, x.alg_gebouw_code, x.alg_verdieping_code, x.alg_ruimte_nr, x.cil_gebouw_code, x.cil_verdieping_code, x.cil_ruimte_nr FROM fac_setting s, ins_srtgroep sg, fac_imp_sle x WHERE UPPER (s.fac_setting_name) = 'CIL_INS_SRT_GROEP_KEY' AND fac.safe_to_number (s.fac_setting_pvalue) = sg.ins_srtgroep_key ORDER BY 1, 2, 3, 4, 5, 9, 10, 11; v_count_tot NUMBER (10); v_count_create NUMBER (10); v_aanduiding VARCHAR (200); v_srtdeel_key NUMBER (10); v_locatie_key NUMBER (10); v_alg_gebouw_key NUMBER (10); v_alg_verdieping_key NUMBER (10); v_alg_ruimte_key NUMBER (10); v_cil_gebouw_key NUMBER (10); v_cil_verdieping_key NUMBER (10); v_cil_ruimte_key NUMBER (10); v_deel_oms VARCHAR2 (60); ccount NUMBER (10); BEGIN v_count_tot := 0; v_count_create := 0; FOR rec IN c1 LOOP BEGIN v_count_tot := v_count_tot + 1; v_aanduiding := '[' || rec.ins_srtdeel_code || '|' || rec.ins_srtdeel_omschrijving || '|' || rec.alg_locatie_code || '|' || rec.cil_gebouw_code || '|' || rec.cil_verdieping_code || '|' || rec.cil_ruimte_nr || '] '; v_errormsg := 'Fout bij bepalen INS-Cilinderset'; SELECT ins_srtdeel_key INTO v_srtdeel_key FROM ins_srtdeel WHERE ins_srtdeel_verwijder IS NULL AND ins_srtdeel_module = 'INS' AND ins_srtgroep_key = rec.ins_srtgroep_key AND UPPER (TRIM (ins_srtdeel_omschrijving)) = UPPER (TRIM (rec.ins_srtdeel_omschrijving)); v_errormsg := 'Fout bij bepalen locatie (tbv. cilinders)'; SELECT alg_locatie_key INTO v_locatie_key FROM alg_locatie WHERE alg_locatie_verwijder IS NULL AND UPPER (TRIM (alg_locatie_code)) = UPPER (TRIM (rec.alg_locatie_code)); v_errormsg := 'Fout bij bepalen stamgebouw (tbv. cilinders)'; SELECT alg_gebouw_key INTO v_alg_gebouw_key FROM alg_gebouw WHERE alg_gebouw_verwijder IS NULL AND alg_locatie_key = v_locatie_key AND UPPER (TRIM (alg_gebouw_code)) = UPPER (TRIM (rec.alg_gebouw_code)); v_errormsg := 'Fout bij bepalen stamverdieping (tbv. cilinders)'; 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 UPPER (TRIM (alg_verdieping_code)) = UPPER (TRIM (rec.alg_verdieping_code)); v_errormsg := 'Fout bij bepalen stamruimte (tbv. cilinders)'; 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 UPPER (TRIM (alg_ruimte_nr)) = UPPER (TRIM (rec.alg_ruimte_nr)); v_errormsg := 'Fout bij bepalen cilindergebouw'; SELECT alg_gebouw_key INTO v_cil_gebouw_key FROM alg_gebouw WHERE alg_gebouw_verwijder IS NULL AND alg_locatie_key = v_locatie_key AND UPPER (TRIM (alg_gebouw_code)) = UPPER (TRIM (rec.cil_gebouw_code)); v_errormsg := 'Fout bij bepalen cilinderverdieping'; SELECT alg_verdieping_key INTO v_cil_verdieping_key FROM alg_verdieping WHERE alg_verdieping_verwijder IS NULL AND alg_gebouw_key = v_cil_gebouw_key AND UPPER (TRIM (alg_verdieping_code)) = UPPER (TRIM (rec.cil_verdieping_code)); v_errormsg := 'Fout bij bepalen cilinderruimte'; SELECT alg_ruimte_key INTO v_cil_ruimte_key FROM alg_ruimte WHERE alg_ruimte_verwijder IS NULL AND alg_verdieping_key = v_cil_verdieping_key AND UPPER (TRIM (alg_ruimte_nr)) = UPPER (TRIM (rec.cil_ruimte_nr)); -- Binnen een dezelfde cilinderset kunnen 1 of meer cilinders zijn -- "uitgeleend" aan dezelfde ruimte (ruimte kan >1 deuren hebben). v_errormsg := 'Fout bij bepalen default ID (cilinder)'; SELECT INS.nextdescription (rec.ins_srtdeel_code, NULL) INTO v_deel_oms FROM ins_srtdeel WHERE ins_srtdeel_key = v_srtdeel_key; v_errormsg := 'Fout bij toevoegen cilinder'; INSERT INTO ins_deel (ins_discipline_key, ins_srtdeel_key, ins_deel_module, ins_deel_omschrijving, ins_alg_ruimte_key, ins_alg_ruimte_type, ins_alg_locatie_key, ins_alg_ruimte_key_org, ins_alg_ruimte_type_org) VALUES (rec.ins_discipline_key, v_srtdeel_key, 'INS', v_deel_oms, v_cil_ruimte_key, 'R', v_locatie_key, v_alg_ruimte_key, 'R'); v_count_create := v_count_create + 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, ''); END; COMMIT; END LOOP; fac.imp_writelog ( p_import_key, 'S', 'INS-Cilinders/#toegevoegd: ' || TO_CHAR (v_count_create) || ' (van ' || TO_CHAR (v_count_tot) || ')', '' ); COMMIT; END; -- SUBPROC PROCEDURE add_sleutels (p_import_key IN NUMBER) AS CURSOR c1 IS SELECT sg.ins_discipline_key, sg.ins_srtgroep_key, x.ins_srtdeel_code, x.ins_srtdeel_omschrijving, x.alg_locatie_code, x.alg_gebouw_code, x.alg_verdieping_code, x.alg_ruimte_nr, MAX (x.aant_sleutels_in_set) aant_sleutels_in_set FROM fac_setting s, ins_srtgroep sg, fac_imp_sle x WHERE UPPER (s.fac_setting_name) = 'SLE_INS_SRT_GROEP_KEY' AND fac.safe_to_number (s.fac_setting_pvalue) = sg.ins_srtgroep_key GROUP BY sg.ins_discipline_key, sg.ins_srtgroep_key, x.ins_srtdeel_code, x.ins_srtdeel_omschrijving, x.alg_locatie_code, x.alg_gebouw_code, x.alg_verdieping_code, x.alg_ruimte_nr ORDER BY 1, 2, 3, 4, 5, 6, 7, 8; v_count_tot NUMBER (10); v_count_create NUMBER (10); v_aanduiding VARCHAR (200); v_srtdeel_key NUMBER (10); v_locatie_key NUMBER (10); v_alg_gebouw_key NUMBER (10); v_alg_verdieping_key NUMBER (10); v_alg_ruimte_key NUMBER (10); v_deel_oms VARCHAR2 (60); ccount NUMBER (10); BEGIN v_count_tot := 0; v_count_create := 0; FOR rec IN c1 LOOP BEGIN v_aanduiding := '[' || rec.ins_srtdeel_code || '|' || rec.ins_srtdeel_omschrijving || '|' || rec.alg_locatie_code || '|' || rec.alg_gebouw_code || '|' || rec.alg_verdieping_code || '|' || rec.alg_ruimte_nr || '|' || TO_CHAR (rec.aant_sleutels_in_set) || '] '; v_errormsg := 'Fout bij bepalen INS-Sleutelset'; SELECT ins_srtdeel_key INTO v_srtdeel_key FROM ins_srtdeel WHERE ins_srtdeel_verwijder IS NULL AND ins_srtdeel_module = 'INS' AND ins_srtgroep_key = rec.ins_srtgroep_key AND UPPER (TRIM (ins_srtdeel_omschrijving)) = UPPER (TRIM (rec.ins_srtdeel_omschrijving)); v_errormsg := 'Fout bij bepalen locatie (tbv. sleutels)'; SELECT alg_locatie_key INTO v_locatie_key FROM alg_locatie WHERE alg_locatie_verwijder IS NULL AND UPPER (TRIM (alg_locatie_code)) = UPPER (TRIM (rec.alg_locatie_code)); v_errormsg := 'Fout bij bepalen stamgebouw (tbv. sleutels)'; SELECT alg_gebouw_key INTO v_alg_gebouw_key FROM alg_gebouw WHERE alg_gebouw_verwijder IS NULL AND alg_locatie_key = v_locatie_key AND UPPER (TRIM (alg_gebouw_code)) = UPPER (TRIM (rec.alg_gebouw_code)); v_errormsg := 'Fout bij bepalen stamverdieping (tbv. sleutels)'; 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 UPPER (TRIM (alg_verdieping_code)) = UPPER (TRIM (rec.alg_verdieping_code)); v_errormsg := 'Fout bij bepalen stamruimte (tbv. sleutels)'; 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 UPPER (TRIM (alg_ruimte_nr)) = UPPER (TRIM (rec.alg_ruimte_nr)); v_errormsg := 'Fout bij bepalen huidig aantal sleutels in set'; SELECT COUNT ( * ) INTO ccount FROM ins_deel d WHERE ins_deel_verwijder IS NULL AND ins_deel_module = 'INS' AND ins_srtdeel_key = v_srtdeel_key; IF ccount > 0 -- Sleutelset bevat al sleutels! THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Sleutelset bevat al sleutels', '' ); ELSE v_count_tot := v_count_tot + 1; WHILE ccount < rec.aant_sleutels_in_set LOOP BEGIN v_errormsg := 'Fout bij bepalen default ID (sleutel)'; SELECT INS.nextdescription (rec.ins_srtdeel_code, NULL) INTO v_deel_oms FROM ins_srtdeel WHERE ins_srtdeel_key = v_srtdeel_key; v_errormsg := 'Fout bij toevoegen sleutel'; INSERT INTO ins_deel (ins_discipline_key, ins_srtdeel_key, ins_deel_module, ins_deel_omschrijving, ins_alg_ruimte_key, ins_alg_ruimte_type, ins_alg_locatie_key) VALUES (rec.ins_discipline_key, v_srtdeel_key, 'INS', v_deel_oms, v_alg_ruimte_key, 'R', v_locatie_key); v_count_create := v_count_create + 1; ccount := ccount + 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, ''); END; END LOOP; 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, ''); END; COMMIT; END LOOP; fac.imp_writelog ( p_import_key, 'S', 'INS-Sleutels/#toegevoegd: ' || TO_CHAR (v_count_create) || ' (bij ' || TO_CHAR (v_count_tot) || ')', '' ); COMMIT; END; -- MAIN BEGIN add_srtdeel (p_import_key); -- Evenveel cilindersets als sleutelsets add_cilinders (p_import_key); add_sleutels (p_import_key); 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_errormsg, 'Importproces sleutelsets afgebroken!'); END fac_update_sle; / /* FSN#13971: adres-import bleek onverhoopt nodig. Klantspecifieke routines gemaakt op basis van de standaard fac_imp_adres tabel. Voor consistentie hierom deze bijbehorende procedure gedefinieerd, die geduldig op implementatie wachten. Afgewogen niet voor fac_import_mld_adres gekozen. */ CREATE OR REPLACE PROCEDURE fac_import_adres ( p_import_key IN NUMBER, p_discipline_key IN NUMBER ) IS BEGIN NULL; END; / CREATE OR REPLACE PROCEDURE fac_update_adres ( p_import_key IN NUMBER ) IS BEGIN NULL; END; / CREATE OR REPLACE PROCEDURE fac_import_res_artikel_sync ( p_import_key IN NUMBER ) AS c_fielddelimitor VARCHAR2 (2) := fac.import_delimiter(p_import_key); v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line v_errormsg 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 VARCHAR2 (200); -- De importvelden: v_res_artikel_key VARCHAR2 (255); v_res_discipline_key NUMBER (10); v_res_discipline_oms VARCHAR2 (255); v_res_kostensoort_key NUMBER (10); v_res_kostensoort_oms VARCHAR2 (255); v_res_artikel_nr VARCHAR2 (255); v_res_artikel_omschrijving VARCHAR2 (255); v_res_artikel_eenheid VARCHAR2 (255); v_res_artikel_prijs VARCHAR2 (255); v_res_artikel_prijs_vast VARCHAR2 (255); v_res_artikel_inkoopprijs VARCHAR2 (255); v_res_artikel_kostenpersoneel VARCHAR2 (255); v_res_artikel_kostenalgemeen VARCHAR2 (255); v_res_artikel_btw VARCHAR2 (255); v_res_artikel_opmerking VARCHAR2 (2000); v_res_artikel_groep VARCHAR2 (255); v_res_artikel_volgnummer VARCHAR2 (255); v_res_artikel_ingangsdatum VARCHAR2 (255); v_res_artikel_vervaldatum VARCHAR2 (255); v_res_artikel_minimum VARCHAR2 (255); v_res_artikel_externnr VARCHAR2 (256); -- Overige velden: v_res_artikel_key2 NUMBER; 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 fac_imp_res_artikel_sync; v_count_tot := 0; v_count_import := 0; header_is_valid := 0; COMMIT; FOR rec1 IN c1 LOOP BEGIN v_newline := rec1.fac_imp_file_line; v_errormsg := 'Fout opvragen te importeren rij'; v_aanduiding := ''; v_ongeldig := 0; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_key); fac.imp_getfield (v_newline, c_fielddelimitor, v_res_discipline_oms); fac.imp_getfield (v_newline, c_fielddelimitor, v_res_kostensoort_oms); fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_nr); fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_omschrijving); fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_eenheid); fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_prijs); fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_prijs_vast); fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_inkoopprijs); fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_kostenpersoneel); fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_kostenalgemeen); fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_btw); fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_opmerking); fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_groep); fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_volgnummer); fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_ingangsdatum); fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_vervaldatum); fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_minimum); fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_externnr); -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen -- de juiste kolomkop. Ik controleer alle kolommen.. -- Ik negeer alles totdat ik een geldige header gepasseerd ben IF (header_is_valid = 0) THEN v_aanduiding := 'importregel: (' || v_res_artikel_key || '|' || v_res_discipline_oms || '|' || v_res_artikel_nr || '|' || v_res_artikel_omschrijving || ')'; IF UPPER (v_res_artikel_key) = 'ARTIKELKEY' AND UPPER (v_res_discipline_oms) = 'CATALOGUSNAAM' AND UPPER (v_res_kostensoort_oms) = 'CATALOGUSKOSTENSOORT' AND UPPER (v_res_artikel_nr) = 'ARTIKELNUMMER' AND UPPER (v_res_artikel_omschrijving) = 'ARTIKELOMSCHRIJVING' AND UPPER (v_res_artikel_eenheid) = 'ARTIKELEENHEID' AND UPPER (v_res_artikel_prijs) = 'ARTIKELPRIJS' AND UPPER (v_res_artikel_prijs_vast) = 'ARTIKELPRIJSVAST' AND UPPER (v_res_artikel_inkoopprijs) = 'ARTIKELINKOOPPRIJS' AND UPPER (v_res_artikel_kostenpersoneel) = 'ARTIKELPERSONEELKOSTEN' AND UPPER (v_res_artikel_kostenalgemeen) = 'ARTIKELALGEMENEKOSTEN' AND UPPER (v_res_artikel_btw) = 'ARTIKELBTW' AND UPPER (v_res_artikel_opmerking) = 'ARTIKELOPMERKING' AND UPPER (v_res_artikel_groep) = 'ARTIKELGROEP' AND UPPER (v_res_artikel_volgnummer) = 'ARTIKELVOLGNUMMER' AND UPPER (v_res_artikel_ingangsdatum) = 'ARTIKELINGANGSDATUM' AND UPPER (v_res_artikel_vervaldatum) = 'ARTIKELVERVALDATUM' AND UPPER (v_res_artikel_minimum) = 'ARTIKELMINIMUM' AND UPPER (v_res_artikel_externnr) = 'EXTERNNR' THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; v_aanduiding := 'importregel ' || TO_CHAR(v_count_tot) || ': (' || v_res_artikel_key || '|' || v_res_discipline_oms || '|' || v_res_artikel_nr || '|' || v_res_artikel_omschrijving || ')'; -- Controleer alle veldwaarde IF TRIM (v_res_artikel_key) IS NOT NULL THEN IF fac.safe_to_number (v_res_artikel_key) IS NOT NULL THEN BEGIN SELECT res_artikel_key INTO v_res_artikel_key2 FROM res_v_aanwezigartikel WHERE res_artikel_key = v_res_artikel_key; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog (p_import_key, 'I', v_aanduiding, 'Catalogus is nieuw' ); END; ELSE fac.imp_writelog (p_import_key, 'E', v_aanduiding, 'Artikel key ongeldig' ); v_ongeldig := 1; END IF; END IF; v_res_discipline_oms := TRIM (v_res_discipline_oms); IF v_res_discipline_oms IS NOT NULL THEN BEGIN SELECT ins_discipline_key INTO v_res_discipline_key FROM res_discipline WHERE ins_discipline_omschrijving = v_res_discipline_oms AND ins_discipline_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog (p_import_key, 'I', v_aanduiding, 'Catalogus ' || v_res_discipline_oms || ' is nieuw' ); END; ELSE fac.imp_writelog (p_import_key, 'E', v_aanduiding, 'Catalogus ontbreekt' ); v_ongeldig := 1; END IF; v_res_kostensoort_oms := TRIM (v_res_kostensoort_oms); IF v_res_kostensoort_oms IS NOT NULL THEN BEGIN SELECT prs_kostensoort_key INTO v_res_kostensoort_key FROM prs_kostensoort k WHERE k.prs_kostensoort_oms = v_res_kostensoort_oms AND k.prs_kostensoort_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog (p_import_key, 'E', v_aanduiding, 'Kostensoort ' || v_res_kostensoort_oms || ' niet gevonden' ); v_ongeldig := 1; END; END IF; v_res_artikel_nr := TRIM (v_res_artikel_nr); IF LENGTH (v_res_artikel_nr) > 10 THEN v_res_artikel_nr := SUBSTR (v_res_artikel_nr, 1, 10); fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Artikelnummer wordt afgebroken tot [' || v_res_artikel_nr || ']' ); END IF; v_res_artikel_omschrijving := TRIM (v_res_artikel_omschrijving); IF LENGTH (v_res_artikel_omschrijving) > 40 THEN v_res_artikel_omschrijving := SUBSTR (v_res_artikel_omschrijving, 1, 40); fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Artikelomschrijving wordt afgebroken tot [' || v_res_artikel_omschrijving || ']' ); END IF; IF v_res_artikel_omschrijving IS NULL THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Artikelomschrijving ontbreekt' ); v_ongeldig := 1; END IF; v_res_artikel_eenheid := TRIM (v_res_artikel_eenheid); IF LENGTH (v_res_artikel_eenheid) > 10 THEN v_res_artikel_eenheid := SUBSTR (v_res_artikel_eenheid, 1, 10); fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Artikeleenheid wordt afgebroken tot [' || v_res_artikel_eenheid || ']' ); END IF; v_res_artikel_prijs := REPLACE (v_res_artikel_prijs, ',', '.'); IF v_res_artikel_prijs IS NOT NULL AND fac.safe_to_number (v_res_artikel_prijs) IS NULL THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Ongeldige artikelprijs [' || v_res_artikel_prijs || ']' ); END IF; IF ( v_res_artikel_prijs_vast <> '0' AND v_res_artikel_prijs_vast <> '1') THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Ongeldige artikel_prijs_vast [' || v_res_artikel_prijs_vast || '] --> [0|1]' ); END IF; -- Doe een poging er de juiste waarde van te maken. IF v_res_artikel_prijs_vast IS NULL OR v_res_artikel_prijs_vast <> '1' THEN v_res_artikel_prijs_vast := '0'; END IF; v_res_artikel_inkoopprijs := REPLACE (v_res_artikel_inkoopprijs, ',', '.'); IF v_res_artikel_inkoopprijs IS NOT NULL AND fac.safe_to_number (v_res_artikel_inkoopprijs) IS NULL THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Ongeldige inkoopprijs [' || v_res_artikel_inkoopprijs || ']' ); END IF; v_res_artikel_kostenpersoneel := REPLACE (v_res_artikel_kostenpersoneel, ',', '.'); IF v_res_artikel_kostenpersoneel IS NOT NULL AND fac.safe_to_number (v_res_artikel_kostenpersoneel) IS NULL THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Ongeldige personeelskosten [' || v_res_artikel_kostenpersoneel || ']' ); END IF; v_res_artikel_kostenalgemeen := REPLACE (v_res_artikel_kostenalgemeen, ',', '.'); IF v_res_artikel_kostenalgemeen IS NOT NULL AND fac.safe_to_number (v_res_artikel_kostenalgemeen) IS NULL THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Ongeldige algemene kosten [' || v_res_artikel_kostenalgemeen || ']' ); END IF; v_res_artikel_btw := REPLACE (v_res_artikel_btw, ',', '.'); IF v_res_artikel_btw IS NOT NULL AND fac.safe_to_number (v_res_artikel_btw) IS NULL THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Ongeldige BTW tarief [' || v_res_artikel_btw || ']' ); END IF; v_res_artikel_opmerking := TRIM (v_res_artikel_opmerking); IF LENGTH (v_res_artikel_opmerking) > 2000 THEN v_res_artikel_opmerking := SUBSTR (v_res_artikel_opmerking, 1, 2000); fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Artikelopmerking wordt afgebroken tot [' || v_res_artikel_opmerking || ']' ); END IF; v_res_artikel_groep := TRIM (v_res_artikel_groep); IF LENGTH (v_res_artikel_groep) > 10 THEN v_res_artikel_groep := SUBSTR (v_res_artikel_groep, 1, 10); fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Artikelgroep wordt afgebroken tot [' || v_res_artikel_groep || ']' ); END IF; IF v_res_artikel_volgnummer IS NOT NULL THEN IF LENGTH (v_res_artikel_volgnummer) > 3 OR fac.safe_to_number (v_res_artikel_volgnummer) IS NULL THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Ongeldig artikelvolgnummer [' || v_res_artikel_volgnummer || ']' ); v_res_artikel_volgnummer := NULL; END IF; ELSE v_res_artikel_volgnummer := NULL; END IF; IF v_res_artikel_ingangsdatum IS NOT NULL AND fac.safe_to_date (v_res_artikel_ingangsdatum, 'yyyymmdd') IS NULL THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Ongeldige ingangsdatum [' || v_res_artikel_ingangsdatum || ']' ); END IF; IF v_res_artikel_vervaldatum IS NOT NULL AND fac.safe_to_date (v_res_artikel_vervaldatum, 'yyyymmdd') IS NULL THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Ongeldige vervaldatum [' || v_res_artikel_vervaldatum || ']' ); END IF; IF v_res_artikel_minimum IS NOT NULL THEN IF LENGTH (v_res_artikel_minimum) > 3 OR fac.safe_to_number (v_res_artikel_minimum) IS NULL THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Ongeldig artikelminimum [' || v_res_artikel_minimum || ']' ); v_res_artikel_minimum := NULL; END IF; ELSE v_res_artikel_minimum := NULL; END IF; v_res_artikel_externnr := TRIM (v_res_artikel_externnr); IF LENGTH (v_res_artikel_externnr) > 256 THEN v_res_artikel_externnr := SUBSTR (v_res_artikel_externnr, 1, 256); fac.imp_writelog (p_import_key, 'E', v_aanduiding, 'Externnr te lang [' || v_res_artikel_externnr || ']' ); v_ongeldig := 1; END IF; -- Insert geformatteerde import record IF v_ongeldig = 0 THEN BEGIN INSERT INTO fac_imp_res_artikel_sync (res_artikel_key, res_discipline_oms, res_kostensoort_oms, res_artikel_nr, res_artikel_omschrijving, res_artikel_eenheid, res_artikel_prijs, res_artikel_prijs_vast, res_artikel_inkoopprijs, res_artikel_kostenpersoneel, res_artikel_kostenalgemeen, res_artikel_btw, res_artikel_opmerking, res_artikel_groep, res_artikel_volgnummer, res_artikel_ingangsdatum, res_artikel_vervaldatum, res_artikel_minimum, res_artikel_externnr ) VALUES (fac.safe_to_number (v_res_artikel_key), v_res_discipline_oms, v_res_kostensoort_oms, v_res_artikel_nr, v_res_artikel_omschrijving, v_res_artikel_eenheid, fac.safe_to_number (v_res_artikel_prijs), fac.safe_to_number (v_res_artikel_prijs_vast), fac.safe_to_number (v_res_artikel_inkoopprijs), fac.safe_to_number (v_res_artikel_kostenpersoneel), fac.safe_to_number (v_res_artikel_kostenalgemeen), fac.safe_to_number (v_res_artikel_btw), v_res_artikel_opmerking, v_res_artikel_groep, fac.safe_to_number (v_res_artikel_volgnummer), fac.safe_to_date (v_res_artikel_ingangsdatum, 'yyyymmdd'), fac.safe_to_date (v_res_artikel_vervaldatum, 'yyyymmdd'), fac.safe_to_number (v_res_artikel_minimum), v_res_artikel_externnr ); v_count_import := v_count_import + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := ' ORACLE (' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding, 'Ingelezen regel kan niet weggeschreven worden: fout bij toevoegen regel aan importtabel FAC_IMP_RES_ARTIKEL_SYNC. ' || v_errormsg ); END; END IF; END IF; END; END LOOP; IF (header_is_valid = 0) THEN fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Ongeldig importbestand', 'Toelichting: ... ' ); ELSE fac.imp_writelog (p_import_key, 'S', 'Reserveringen: aantal ingelezen catering regels: ' || TO_CHAR (v_count_tot), '' ); fac.imp_writelog (p_import_key, 'S', 'Reserveringen: 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, 100); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Inleesproces verbruiksartikelen afgebroken!' ); END fac_import_res_artikel_sync; / CREATE OR REPLACE PROCEDURE fac_update_res_artikel_sync ( p_import_key IN NUMBER ) AS CURSOR c1 IS SELECT * FROM fac_imp_res_artikel_sync; v_errormsg VARCHAR2 (1000); v_count_tot NUMBER (10); v_count_update NUMBER (10); v_count_ins NUMBER (10); v_res_discipline_key NUMBER (10); v_artikel_key_count NUMBER (10); v_res_kostensoort_key NUMBER (10); BEGIN v_count_tot := 0; v_count_update := 0; v_count_ins := 0; SELECT COUNT (*) INTO v_artikel_key_count FROM fac_imp_res_artikel_sync WHERE res_artikel_key IS NOT NULL; -- markeer bestaande artikelen om verwijderd te worden IF v_artikel_key_count > 0 THEN UPDATE res_artikel ra SET res_artikel_omschrijving = SUBSTR ('*' || res_artikel_omschrijving, 1, 40) WHERE SUBSTR (res_artikel_omschrijving, 1, 1) <> '*' AND NOT EXISTS (SELECT res_artikel_key FROM fac_imp_res_artikel_sync fip WHERE fip.res_artikel_key = ra.res_artikel_key) AND res_artikel_verwijder IS NULL; END IF; FOR rec IN c1 LOOP BEGIN v_count_tot := v_count_tot + 1; v_res_kostensoort_key := NULL; IF rec.res_kostensoort_oms IS NOT NULL THEN BEGIN SELECT prs_kostensoort_key INTO v_res_kostensoort_key FROM prs_kostensoort WHERE prs_kostensoort_oms = rec.res_kostensoort_oms AND prs_kostensoort_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog (p_import_key, 'W', 'Kostensoort [' || rec.res_kostensoort_oms || '] bestaat niet', ''); END; END IF; BEGIN SELECT ins_discipline_key INTO v_res_discipline_key FROM res_discipline WHERE ins_discipline_omschrijving = rec.res_discipline_oms AND ins_discipline_min_level = 2 AND ins_discipline_verwijder IS NULL; UPDATE ins_tab_discipline SET prs_kostensoort_key = v_res_kostensoort_key WHERE ins_discipline_key = v_res_discipline_key; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO ins_tab_discipline (ins_discipline_module, ins_discipline_omschrijving, ins_discipline_min_level, prs_kostensoort_key ) VALUES ('RES', rec.res_discipline_oms, 2, v_res_kostensoort_key ) RETURNING ins_discipline_key INTO v_res_discipline_key; INSERT INTO res_disc_params (res_ins_discipline_key ) VALUES (v_res_discipline_key ); END; IF rec.res_artikel_key IS NULL THEN INSERT INTO res_artikel (res_discipline_key, res_artikel_nr, res_artikel_omschrijving, res_artikel_eenheid, res_artikel_prijs, res_artikel_prijs_vast, res_artikel_inkoopprijs, res_artikel_btw, res_artikel_opmerking, res_artikel_groep, res_artikel_kostenpersoneel, res_artikel_kostenalgemeen, res_artikel_volgnummer, res_artikel_ingangsdatum, res_artikel_vervaldatum, res_artikel_minimum, res_artikel_externnr ) VALUES (v_res_discipline_key, rec.res_artikel_nr, rec.res_artikel_omschrijving, rec.res_artikel_eenheid, rec.res_artikel_prijs, rec.res_artikel_prijs_vast, rec.res_artikel_inkoopprijs, rec.res_artikel_btw, rec.res_artikel_opmerking, rec.res_artikel_groep, rec.res_artikel_kostenpersoneel, rec.res_artikel_kostenalgemeen, rec.res_artikel_volgnummer, rec.res_artikel_ingangsdatum, rec.res_artikel_vervaldatum, rec.res_artikel_minimum, rec.res_artikel_externnr ); v_count_ins := v_count_ins + 1; ELSE UPDATE res_artikel SET res_discipline_key = v_res_discipline_key, res_artikel_nr = rec.res_artikel_nr, res_artikel_omschrijving = rec.res_artikel_omschrijving, res_artikel_eenheid = rec.res_artikel_eenheid, res_artikel_prijs = rec.res_artikel_prijs, res_artikel_prijs_vast = rec.res_artikel_prijs_vast, res_artikel_inkoopprijs = rec.res_artikel_inkoopprijs, res_artikel_kostenpersoneel = rec.res_artikel_kostenpersoneel, res_artikel_kostenalgemeen = rec.res_artikel_kostenalgemeen, res_artikel_btw = rec.res_artikel_btw, res_artikel_opmerking = rec.res_artikel_opmerking, res_artikel_groep = rec.res_artikel_groep, res_artikel_volgnummer = rec.res_artikel_volgnummer, res_artikel_ingangsdatum = rec.res_artikel_ingangsdatum, res_artikel_vervaldatum = rec.res_artikel_vervaldatum, res_artikel_minimum = rec.res_artikel_minimum, res_artikel_externnr = rec.res_artikel_externnr WHERE res_artikel_key = rec.res_artikel_key; v_count_update := v_count_update + 1; END IF; END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'Reserveringen: aantal artikelregels: ' || TO_CHAR (v_count_tot), '' ); IF v_count_ins <> 0 THEN fac.imp_writelog (p_import_key, 'S', 'Reserveringen: aantal artikelregels toegevoegd: ' || TO_CHAR (v_count_ins), '' ); END IF; IF v_count_update <> 0 THEN fac.imp_writelog (p_import_key, 'S', 'Reserveringen: aantal artikelregels aangepast: ' || TO_CHAR (v_count_update), '' ); END IF; IF (v_count_tot > (v_count_ins + v_count_update)) THEN fac.imp_writelog (p_import_key, 'S', 'Reserveringen: aantal artikelregels overgeslagen: ' || TO_CHAR (v_count_tot - v_count_ins - v_count_update), '' ); END IF; COMMIT; EXCEPTION WHEN OTHERS THEN v_errormsg := ' (ORACLE error ' || SUBSTR (SQLERRM, 1, 150) || ')'; fac.imp_writelog (p_import_key, 'E', 'Importproces verbruiksartikelen afgebroken!' || v_errormsg, '' ); END fac_update_res_artikel_sync; / CREATE OR REPLACE PROCEDURE fac_import_fac_groep ( p_import_key IN NUMBER ) IS c_fielddelimitor VARCHAR2 (2) := fac.import_delimiter(p_import_key); v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line v_errormsg VARCHAR (1000); oracle_err_mes VARCHAR2 (200); header_is_valid NUMBER; v_count_tot NUMBER (10); v_count_import NUMBER (10); v_aanduiding VARCHAR (200); -- De importvelden: v_naam VARCHAR (100); v_functiecode VARCHAR2 (100); v_srtdiscipline VARCHAR2 (100); v_discipline VARCHAR2 (100); v_orgread VARCHAR2 (100); v_orgwrite VARCHAR2 (100); v_algread VARCHAR2 (100); v_algwrite VARCHAR2 (100); 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 fac_imp_fac_groep; 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_errormsg := 'Fout opvragen te importeren rij'; v_aanduiding := ''; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_fielddelimitor, v_naam); fac.imp_getfield (v_newline, c_fielddelimitor, v_functiecode); fac.imp_getfield (v_newline, c_fielddelimitor, v_srtdiscipline); fac.imp_getfield (v_newline, c_fielddelimitor, v_discipline); fac.imp_getfield (v_newline, c_fielddelimitor, v_orgread); fac.imp_getfield (v_newline, c_fielddelimitor, v_orgwrite); fac.imp_getfield (v_newline, c_fielddelimitor, v_algread); fac.imp_getfield (v_newline, c_fielddelimitor, v_algwrite); v_aanduiding := '|' || v_naam || '|' || v_functiecode || '|' || v_srtdiscipline || '|' || v_discipline || '|' || v_orgread || '|' || v_orgwrite || '|' || v_algread || '|' || v_algwrite || '| '; -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen -- de juiste kolomkop. Ik controleer maar een aantal kolommen, ik zou ze ook -- allemaal kunnen doen.. -- Ik negeer alles totdat ik een geldige header gepasseerd ben IF (header_is_valid = 0) THEN IF UPPER (v_naam) = 'GROEP' AND UPPER (v_discipline) = 'VAKGROEP' AND UPPER (v_algwrite) = 'PLAATS_SCHRIJVEN' THEN header_is_valid := 1; END IF; ELSIF header_is_valid = 1 THEN v_count_tot := v_count_tot + 1; BEGIN INSERT INTO fac_imp_fac_groep (naam, functiecode, srtdiscipline, discipline, orgread, orgwrite, algread, algwrite) VALUES (SUBSTR (v_naam, 1, 60), SUBSTR (v_functiecode, 1, 10), SUBSTR (v_srtdiscipline, 1, 30), SUBSTR (v_discipline, 1, 60), fac.safe_to_number (v_orgread), fac.safe_to_number (v_orgwrite), fac.safe_to_number (v_algread), fac.safe_to_number (v_algwrite) ); v_count_import := v_count_import + 1; EXCEPTION WHEN OTHERS THEN oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := ' ORACLE (error ' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding, 'Fout bij toevoegen regel aan importtabel FAC_IMP_MLD. ' || v_errormsg ); END; END IF; END; END LOOP; IF (header_is_valid = 0) THEN fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Ongeldig importbestand', 'Toelichting: ... '); ELSE fac.imp_writelog (p_import_key, 'S', 'Autorisatiegroepen: aantal ingelezen regels: ' || TO_CHAR (v_count_tot), '' ); fac.imp_writelog (p_import_key, 'S', 'Autorisatiegroepen: aantal ongeldige niet ingelezen importregels: ' || TO_CHAR (v_count_tot - v_count_import), '' ); END IF; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'OTHERS (error ' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Inleesproces autorisatiegroepen afgebroken!'); END fac_import_fac_groep; / CREATE OR REPLACE PROCEDURE fac_update_fac_groep (p_import_key IN NUMBER) AS CURSOR c1 IS SELECT DISTINCT i.naam FROM fac_imp_fac_groep i WHERE i.orgread IS NOT NULL AND i.orgwrite IS NOT NULL AND i.algread IS NOT NULL AND i.algwrite IS NOT NULL; CURSOR c2 IS SELECT i.naam, f.fac_functie_key, NULL discipline, i.orgread, i.orgwrite, i.algread, i.algwrite, NULL srtdiscipline FROM fac_imp_fac_groep i, fac_functie f WHERE functiecode = f.fac_functie_code AND f.fac_functie_discipline = 0 AND i.orgread IS NOT NULL AND i.orgwrite IS NOT NULL AND i.algread IS NOT NULL AND i.algwrite IS NOT NULL UNION ALL SELECT i.naam, f.fac_functie_key, d.ins_discipline_key, i.orgread, i.orgwrite, i.algread, i.algwrite, sd.ins_srtdiscipline_key FROM fac_imp_fac_groep i, fac_functie f, ins_tab_discipline d, ins_srtdiscipline sd WHERE functiecode = f.fac_functie_code AND f.fac_functie_discipline = 1 AND i.orgread IS NOT NULL AND i.orgwrite IS NOT NULL AND i.algread IS NOT NULL AND i.algwrite IS NOT NULL AND f.fac_functie_module = d.ins_discipline_module AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key(+) AND UPPER (TRIM(coalesce(sd.ins_srtdiscipline_omschrijving,'###'))) = UPPER (TRIM(coalesce(i.srtdiscipline,'###'))) AND UPPER (TRIM(d.ins_discipline_omschrijving)) = UPPER (TRIM(i.discipline)) AND sd.ins_srtdiscipline_verwijder IS NULL AND d.ins_discipline_verwijder IS NULL; -- Eventueel niet bestaande vakgroeptypen+vakgroepen of catalogie (BES/RES), die gaan we loggen. CURSOR c3 IS SELECT i.naam, i.functiecode, i.srtdiscipline, i.discipline, i.orgread, i.orgwrite, i.algread, i.algwrite FROM fac_imp_fac_groep i, fac_functie f WHERE functiecode = f.fac_functie_code AND f.fac_functie_discipline = 1 AND NOT EXISTS (SELECT 'x' FROM ins_tab_discipline d, ins_srtdiscipline sd WHERE f.fac_functie_module = d.ins_discipline_module AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key(+) AND UPPER (TRIM(coalesce(sd.ins_srtdiscipline_omschrijving,'###'))) = UPPER (TRIM(coalesce(i.srtdiscipline,'###'))) AND UPPER (TRIM(d.ins_discipline_omschrijving)) = UPPER (TRIM(i.discipline)) AND sd.ins_srtdiscipline_verwijder IS NULL AND d.ins_discipline_verwijder IS NULL); -- Eventueel foute autorisatiecijfers loggen CURSOR c4 IS SELECT i.naam, i.functiecode, i.srtdiscipline, i.discipline, i.orgread, i.orgwrite, i.algread, i.algwrite FROM fac_imp_fac_groep i WHERE (i.orgread IS NULL OR i.orgwrite IS NULL OR i.algread IS NULL OR i.algwrite IS NULL); v_errormsg VARCHAR2 (1000); v_count_tot NUMBER (10); v_count_update NUMBER (10); v_count_ins NUMBER (10); v_discipline_key NUMBER (10); v_groep_key NUMBER (10); v_count NUMBER (10); v_groeprechten_key NUMBER (10); BEGIN v_count_tot := 0; v_count_update := 0; v_count_ins := 0; SELECT COUNT (*) INTO v_count FROM fac_imp_fac_groep; -- markeer bestaande artikelen om verwijderd te worden IF v_count = 0 THEN RETURN; END IF; -- Logging van de onbekende vakgroeptypen, vakgroepen en/of catalogi... FOR rec3 IN c3 LOOP fac.imp_writelog (p_import_key, 'E', 'Onbekend vakgroep(type) / catalogus: bij autorisatiegroep:' || rec3.naam, 'Functiecode: ' || rec3.functiecode || ', Vakgroeptype: ' || rec3.srtdiscipline || ', Vakgroep: ' || rec3.discipline || ', Autorisaties (O-R/W A-R/W): ' || rec3.orgread || '/' || rec3.orgwrite || '/' || rec3.algread || '/' || rec3.algwrite ); END LOOP; -- Logging van eventuele lege autorisatiegetallen... FOR rec4 IN c4 LOOP fac.imp_writelog (p_import_key, 'E', 'Lege autorisatie: bij autorisatiegroep:' || rec4.naam, 'Functiecode: ' || rec4.functiecode || ', Vakgroeptype: ' || rec4.srtdiscipline || ', Vakgroep: ' || rec4.discipline || ', Autorisaties (O-R/W A-R/W): ' || rec4.orgread || '/' || rec4.orgwrite || '/' || rec4.algread || '/' || rec4.algwrite ); END LOOP; -- Maak de groepen aan FOR rec1 IN c1 LOOP BEGIN SELECT fac_groep_key INTO v_groep_key FROM fac_groep WHERE UPPER (fac_groep_omschrijving) = UPPER (rec1.naam); EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO fac_groep (fac_groep_omschrijving) VALUES (rec1.naam); fac.imp_writelog (p_import_key, 'I', 'Nieuwe autorisatiegroep toegevoegd: ' || rec1.naam, '' ); END; END LOOP; -- Ken de rechten toe FOR rec2 IN c2 LOOP BEGIN SELECT fac_groep_key INTO v_groep_key FROM fac_groep WHERE UPPER (fac_groep_omschrijving) = UPPER (rec2.naam); BEGIN -- Moet een update of een insert gedaan worden IF rec2.discipline IS NULL THEN SELECT fac_groeprechten_key INTO v_groeprechten_key FROM fac_groeprechten WHERE fac_groep_key = v_groep_key AND fac_functie_key = rec2.fac_functie_key AND ins_discipline_key IS NULL; UPDATE fac_groeprechten SET fac_gebruiker_prs_level_read = rec2.orgread, fac_gebruiker_prs_level_write = rec2.orgwrite, fac_gebruiker_alg_level_read = rec2.algread, fac_gebruiker_alg_level_write = rec2.algwrite WHERE fac_groep_key = v_groep_key AND fac_functie_key = rec2.fac_functie_key AND ins_discipline_key IS NULL; ELSE SELECT fac_groeprechten_key INTO v_groeprechten_key FROM fac_groeprechten WHERE fac_groep_key = v_groep_key AND fac_functie_key = rec2.fac_functie_key AND ins_discipline_key = rec2.discipline; UPDATE fac_groeprechten SET fac_gebruiker_prs_level_read = rec2.orgread, fac_gebruiker_prs_level_write = rec2.orgwrite, fac_gebruiker_alg_level_read = rec2.algread, fac_gebruiker_alg_level_write = rec2.algwrite WHERE fac_groep_key = v_groep_key AND fac_functie_key = rec2.fac_functie_key AND ins_discipline_key = rec2.discipline; END IF; v_count_tot := v_count_tot + 1; EXCEPTION WHEN NO_DATA_FOUND THEN BEGIN INSERT INTO fac_groeprechten (fac_groep_key, fac_functie_key, ins_discipline_key, fac_gebruiker_prs_level_read, fac_gebruiker_prs_level_write, fac_gebruiker_alg_level_read, fac_gebruiker_alg_level_write ) VALUES (v_groep_key, rec2.fac_functie_key, rec2.discipline, rec2.orgread, rec2.orgwrite, rec2.algread, rec2.algwrite ); v_count_tot := v_count_tot + 1; EXCEPTION WHEN OTHERS THEN v_errormsg := ' (ORACLE error ' || SUBSTR (SQLERRM, 1, 900) || ')'; fac.imp_writelog (p_import_key, 'W', 'Probleem bij het toevoegen van nieuwe fac_groeprecht ' || v_errormsg, rec2.naam || ', ' || TO_CHAR (v_groep_key) || ', ' || TO_CHAR (rec2.fac_functie_key) || ', ' || TO_CHAR (rec2.srtdiscipline) || '/' || TO_CHAR (rec2.discipline) ); END; WHEN OTHERS THEN v_errormsg := ' (ORACLE error ' || SUBSTR (SQLERRM, 1, 900) || ')'; fac.imp_writelog (p_import_key, 'W', 'Probleem bij vinden fac_groeprechten/updaten van fac_groeprecht ' || v_errormsg, rec2.naam || ', ' || TO_CHAR (v_groep_key) || ', ' || TO_CHAR (rec2.fac_functie_key) || ', ' || TO_CHAR (rec2.srtdiscipline) || '/' || TO_CHAR (rec2.discipline) ); END; EXCEPTION WHEN OTHERS THEN v_errormsg := ' (ORACLE error ' || SUBSTR (SQLERRM, 1, 900) || ')'; fac.imp_writelog (p_import_key, 'W', 'Probleem bij definieren ' || v_errormsg, rec2.naam || ', ' || TO_CHAR (v_groep_key) || ', ' || TO_CHAR (rec2.fac_functie_key) || ', ' || TO_CHAR (rec2.srtdiscipline) || '/' || TO_CHAR (rec2.discipline) ); END; END LOOP; COMMIT; EXCEPTION WHEN OTHERS THEN v_errormsg := ' (ORACLE error ' || SUBSTR (SQLERRM, 1, 900) || ')'; fac.imp_writelog (p_import_key, 'E', 'Importproces autorisatiegroepen afgebroken! ' || v_errormsg, ''); END fac_update_fac_groep; / -- Verwijder eerst de autorisaties van de autorisatiegroepen die voorkomen in bestand (importtabel) CREATE OR REPLACE PROCEDURE fac_delete_fac_groep (p_import_key IN NUMBER) AS CURSOR c1 IS SELECT DISTINCT i.naam FROM fac_imp_fac_groep i WHERE i.orgread IS NOT NULL AND i.orgwrite IS NOT NULL AND i.algread IS NOT NULL AND i.algwrite IS NOT NULL; v_errormsg VARCHAR2 (1000); v_discipline_key NUMBER (10); v_groep_key NUMBER (10); v_count NUMBER (10); BEGIN SELECT COUNT (*) INTO v_count FROM fac_imp_fac_groep; IF v_count = 0 THEN RETURN; END IF; -- Verwijder de rechten van de groep(en( die in het bestand staat(n). FOR rec1 IN c1 LOOP BEGIN SELECT fac_groep_key INTO v_groep_key FROM fac_groep WHERE UPPER (fac_groep_omschrijving) = UPPER (rec1.naam); DELETE fac_groeprechten WHERE fac_groep_key = v_groep_key; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; END; END LOOP; COMMIT; EXCEPTION WHEN OTHERS THEN v_errormsg := ' (ORACLE error ' || SUBSTR (SQLERRM, 1, 900) || ')'; fac.imp_writelog (p_import_key, 'E', 'Importproces autorisatiegroepen afgebroken! ' || v_errormsg, ''); END fac_delete_fac_groep; / CREATE OR REPLACE PROCEDURE fac_import_fac_groep_del ( p_import_key IN NUMBER ) IS BEGIN fac_import_fac_groep(p_import_key); END fac_import_fac_groep_del; / -- Verwijder eerst de autorisaties van de autorisatiegroepen die voorkomen in bestand (importtabel):fac_delete_fac_groep -- En vul daarna de autorisatiegroep opnieuw in: fac_update_fac_groep CREATE OR REPLACE PROCEDURE fac_update_fac_groep_del ( p_import_key IN NUMBER ) IS BEGIN fac_delete_fac_groep(p_import_key); fac_update_fac_groep(p_import_key); END fac_update_fac_groep_del; / -- Verwijder eerst de autorisaties van alle vakgroepen die voorkomen in bestand (importtabel) CREATE OR REPLACE PROCEDURE fac_delete_fac_vakgroep (p_import_key IN NUMBER) AS CURSOR c1 IS SELECT DISTINCT d.ins_discipline_key FROM fac_imp_fac_groep i, fac_functie f, ins_tab_discipline d, ins_srtdiscipline sd WHERE i.functiecode = f.fac_functie_code AND f.fac_functie_discipline = 1 AND i.orgread IS NOT NULL AND i.orgwrite IS NOT NULL AND i.algread IS NOT NULL AND i.algwrite IS NOT NULL AND f.fac_functie_module = d.ins_discipline_module AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key(+) AND UPPER (TRIM(coalesce(sd.ins_srtdiscipline_omschrijving,'###'))) = UPPER (TRIM(coalesce(i.srtdiscipline,'###'))) AND UPPER (TRIM(d.ins_discipline_omschrijving)) = UPPER (TRIM(i.discipline)) AND sd.ins_srtdiscipline_verwijder IS NULL AND d.ins_discipline_verwijder IS NULL; v_errormsg VARCHAR2 (1000); v_discipline_key NUMBER (10); v_groep_key NUMBER (10); v_count NUMBER (10); BEGIN SELECT COUNT (*) INTO v_count FROM fac_imp_fac_groep; IF v_count = 0 THEN RETURN; END IF; -- Verwijder de rechten van de groep(en( die in het bestand staat(n). FOR rec1 IN c1 LOOP BEGIN DELETE fac_groeprechten WHERE ins_discipline_key = rec1.ins_discipline_key; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; -- bedoelen we dit? END; END LOOP; COMMIT; EXCEPTION WHEN OTHERS THEN v_errormsg := ' (ORACLE error ' || SUBSTR (SQLERRM, 1, 900) || ')'; fac.imp_writelog (p_import_key, 'E', 'Importproces autorisatiegroepen afgebroken! ' || v_errormsg, ''); END fac_delete_fac_vakgroep; / CREATE OR REPLACE PROCEDURE fac_import_fac_vakgroep_del ( p_import_key IN NUMBER ) IS BEGIN fac_import_fac_groep(p_import_key); END fac_import_fac_vakgroep_del; / --Verwijder eerst de autorisaties van de vakgroepen die voorkomen in bestand (importtabel), over alle autorisatiegroepen heen --En vul daarna de autorisatiegroep opnieuw in: fac_update_fac_groep CREATE OR REPLACE PROCEDURE fac_update_fac_vakgroep_del ( p_import_key IN NUMBER ) IS BEGIN fac_delete_fac_vakgroep(p_import_key); fac_update_fac_groep(p_import_key); END fac_update_fac_vakgroep_del; / -------------------------------- CREATE OR REPLACE PROCEDURE fac_import_fac_gebruikersgroep ( p_import_key IN NUMBER ) IS c_fielddelimitor VARCHAR2 (2) := fac.import_delimiter(p_import_key); v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line v_errormsg VARCHAR (1000); oracle_err_mes VARCHAR2 (200); header_is_valid NUMBER; v_count_tot NUMBER (10); v_count_import NUMBER (10); v_aanduiding VARCHAR (200); -- De importvelden: v_groep VARCHAR2 (100); v_personeelsnummer VARCHAR2 (100); v_login VARCHAR2 (100); v_email VARCHAR2 (255); 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 fac_imp_fac_gebruikersgroep; 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_errormsg := 'Fout opvragen te importeren rij'; v_aanduiding := ''; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_fielddelimitor, v_groep); fac.imp_getfield (v_newline, c_fielddelimitor, v_personeelsnummer); fac.imp_getfield (v_newline, c_fielddelimitor, v_login); fac.imp_getfield (v_newline, c_fielddelimitor, v_email); v_aanduiding := '|' || v_groep || '|' || v_personeelsnummer || '|' || v_login || '|' || v_email || '| '; -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen -- de juiste kolomkop. Ik controleer alleen de verplichte kolommen, ik zou ze ook -- allemaal kunnen doen.. -- Ik negeer alles totdat ik een geldige header gepasseerd ben IF (header_is_valid = 0) THEN IF UPPER (v_groep) = 'GROEP' AND UPPER (v_personeelsnummer) = 'PERSONEELSNUMMER' AND UPPER (v_login) = 'LOGIN' AND UPPER (v_email) = 'EMAIL' THEN header_is_valid := 1; END IF; ELSIF header_is_valid = 1 THEN v_count_tot := v_count_tot + 1; BEGIN INSERT INTO fac_imp_fac_gebruikersgroep (groep, personeelsnummer, login, email) VALUES (v_groep, v_personeelsnummer, v_login, v_email ); v_count_import := v_count_import + 1; EXCEPTION WHEN OTHERS THEN oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := ' ORACLE (error ' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding, 'Fout bij toevoegen regel aan importtabel FAC_IMP_GEBRUIKERSGROEP. ' || v_errormsg ); END; END IF; END; END LOOP; IF (header_is_valid = 0) THEN fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Ongeldig importbestand', 'Toelichting: ... '); ELSE fac.imp_writelog (p_import_key, 'S', 'Gebruikersgroepen: aantal ingelezen regels: ' || TO_CHAR (v_count_tot), '' ); fac.imp_writelog (p_import_key, 'S', 'Gebruikersgroepen: aantal ongeldige niet ingelezen importregels: ' || TO_CHAR (v_count_tot - v_count_import), '' ); END IF; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'OTHERS (error ' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Inleesproces gebruikersgroepen afgebroken!'); END fac_import_fac_gebruikersgroep; / CREATE OR REPLACE PROCEDURE fac_update_fac_gebruikersgroep (p_import_key IN NUMBER) AS CURSOR c1 IS SELECT DISTINCT i.groep, i.personeelsnummer, i.login, i.email FROM fac_imp_fac_gebruikersgroep i; v_errormsg VARCHAR2 (1000); v_count_tot NUMBER (10); v_count_update NUMBER (10); v_count_ins NUMBER (10); v_perslid_key NUMBER (10); v_perslid_count NUMBER (10); v_groep_key NUMBER (10); v_count NUMBER (10); v_count2 NUMBER (10); v_count_gg NUMBER (10); v_hint VARCHAR2 (1000); BEGIN v_count_tot := 0; v_count_update := 0; v_count_ins := 0; SELECT COUNT (*) INTO v_count FROM fac_gebruikersgroep; IF v_count = 0 THEN RETURN; END IF; -- Maak de records aan FOR rec1 IN c1 LOOP BEGIN v_groep_key := NULL; -- bekijk of de groep bestaat v_hint := 'Zoek groep: ' || rec1.groep; SELECT fac_groep_key INTO v_groep_key FROM fac_groep WHERE UPPER (fac_groep_omschrijving) = UPPER (rec1.groep); EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog (p_import_key, 'E', 'Gebruikersgroepen: kan groep niet vinden: ' || rec1.groep, 'Controleer waarom groep niet bestaat of maak nieuwe groep aan.' ); END; BEGIN -- bekijk of de persoon bestaat v_hint := ''; v_perslid_key := NULL; IF rec1.personeelsnummer IS NOT NULL THEN v_hint := 'Zoek personeelsnummer: ' || rec1.personeelsnummer; -- controleer personeelsnummer SELECT COUNT(prs_perslid_key) INTO v_perslid_count FROM prs_v_aanwezigperslid WHERE UPPER (prs_perslid_nr) = UPPER (rec1.personeelsnummer); IF v_perslid_count = 1 THEN SELECT prs_perslid_key INTO v_perslid_key FROM prs_v_aanwezigperslid WHERE UPPER (prs_perslid_nr) = UPPER (rec1.personeelsnummer); ELSE -- probeer de match op de nummerieke waarde van het nummer ivm voorloopnullen SELECT COUNT(prs_perslid_key) INTO v_perslid_count FROM prs_v_aanwezigperslid WHERE FAC.SAFE_TO_NUMBER(prs_perslid_nr) = FAC.SAFE_TO_NUMBER (rec1.personeelsnummer); IF v_perslid_count = 1 THEN SELECT prs_perslid_key INTO v_perslid_key FROM prs_v_aanwezigperslid WHERE FAC.SAFE_TO_NUMBER(prs_perslid_nr) = FAC.SAFE_TO_NUMBER (rec1.personeelsnummer); ELSE fac.imp_writelog (p_import_key, 'E', 'Gebruikersgroepen: kan persoon niet vinden (op basis van nummer): ' || rec1.personeelsnummer, 'Controleer of persoon voorkomt in Facilitor.' ); END IF; END IF; ELSIF rec1.login IS NOT NULL THEN v_hint := 'Zoek login: ' || rec1.login; -- controleer login SELECT COUNT(prs_perslid_key) INTO v_perslid_count FROM prs_v_aanwezigperslid WHERE UPPER (prs_perslid_oslogin) = UPPER (rec1.login); IF v_perslid_count = 1 THEN SELECT prs_perslid_key INTO v_perslid_key FROM prs_v_aanwezigperslid WHERE UPPER (prs_perslid_oslogin) = UPPER (rec1.login); ELSE fac.imp_writelog (p_import_key, 'E', 'Gebruikersgroepen: kan persoon niet vinden (op basis van login): ' || rec1.login, 'Controleer of persoon voorkomt in Facilitor.' ); END IF; ELSIF rec1.email IS NOT NULL THEN v_hint := 'Zoek email: ' || rec1.email; -- controleer email SELECT COUNT(prs_perslid_key) INTO v_perslid_count FROM prs_v_aanwezigperslid WHERE INSTR(UPPER (prs_perslid_email), UPPER (rec1.email)) >0; IF v_perslid_count = 1 THEN SELECT prs_perslid_key INTO v_perslid_key FROM prs_v_aanwezigperslid WHERE INSTR(UPPER (prs_perslid_email), UPPER (rec1.email)) >0; ELSE fac.imp_writelog (p_import_key, 'E', 'Gebruikersgroepen: kan persoon niet vinden (op basis van email): ' || rec1.email, 'Controleer of persoon voorkomt in Facilitor.' ); END IF; END IF; IF v_groep_key IS NOT NULL AND v_perslid_key IS NOT NULL THEN SELECT count(fac_gebruikersgroep_key) INTO v_count_gg FROM fac_gebruikersgroep WHERE fac_groep_key = v_groep_key AND prs_perslid_key = v_perslid_key; IF v_count_gg = 0 THEN INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key) VALUES (v_groep_key, v_perslid_key); fac.imp_writelog (p_import_key, 'I', 'Gebruikersgroepen: persoon-groep toegevoegd: ' || rec1.groep || '-n:' || rec1.personeelsnummer || ' l:' || rec1.login || ' e:' || rec1.email, '' ); ELSE fac.imp_writelog (p_import_key, 'I', 'Gebruikersgroepen: persoon-groep relatie bestaat al: ' || rec1.groep || '-n:' || rec1.personeelsnummer || ' l:' || rec1.login || ' e:' || rec1.email, '' ); END IF; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog (p_import_key, 'E', 'Gebruikersgroepen: kan groep niet vinden: ' || rec1.groep, 'Controleer waarom groep niet bestaat of maak nieuwe groep aan.' ); END; END LOOP; SELECT COUNT (*) INTO v_count2 FROM fac_gebruikersgroep; fac.imp_writelog (p_import_key, 'S', 'Gebruikersgroepen: aantal records toegevoegd: ' || to_char(v_count2 - v_count), '' ); COMMIT; EXCEPTION WHEN OTHERS THEN v_errormsg := ' (ORACLE error ' || SUBSTR (SQLERRM, 1, 900) || ')'; fac.imp_writelog (p_import_key, 'E', 'Importproces gebruikersgroep afgebroken! ' || v_errormsg, v_hint); END fac_update_fac_gebruikersgroep; / -- MB 150219, Hieronder de COMMON EXT-bedrijven FIP import / SYNC functie (obv leveranciernummer) -- p_seq_of_columns geeft aan op welke plek in de CVS het bedrijfsnaam staat, leveranciersnummer etc etc. -- p_checkheader is 0 of 1, bij 0 bestaat er geen header, bij 1 wordt de header niet gecheckt, bij 2 wordt de header wel gecheckt. CREATE OR REPLACE PROCEDURE fac_import_bedrijf_body ( p_import_key IN NUMBER, p_seq_of_columns IN VARCHAR2, p_checkheader IN NUMBER ) IS ----- STANDAARD Variabelelijst met hun volgnummer -- 1 BEDRIJFSNAAM'; -- 2 LEVERANCIERNUMMER'; -- 3 BEZOEK ADRES'; -- 4 BEZOEK POSTCODE'; -- 5 BEZOEK PLAATS'; -- 6 BEZOEK LAND'; -- 7 POST ADRES'; -- 8 POST POSTCODE'; -- 9 POST PLAATS'; -- 10 POST LAND'; -- 11 BEDRIJF TELEFOON'; -- 12 BEDRIJF FAX'; -- 13 BEDRIJF EMAIL'; -- 14 CONTACT PERSOON'; -- 15 CONTACT TELEFOON'; -- 16 CONTACT FAX'; -- 17 BEDRIJF XSL'; -- 18 BEDRIJF ORDERADRES'; -- 19 LEVERANCIER'; -- 20 UITVOERENDE'; -- 21 CONTRACTANT'; -- 22 HUURDER'; -- 23 TOONINGIDS'; -- 24 UURLOON'; -- 25 OVEREENKOMSTNUMMER'; -- 26 OVEREENKOMSTDATUM'; -- 27 OPMERKING'; -- 28 DIENST'; -- 29 LOCATIECODE'; -- 30 GEBOUWCODE'; -- 31 RELATIETYPE'; -- 32 OVERIG1'; -- 33 OVERIG2'; -- 34 OVERIG3'; 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 (200); -- De importvelden: v_prs_bedrijf_naam VARCHAR2 (256); -- C60 v_prs_leverancier_nr VARCHAR2 (256); -- C50 v_prs_bedrijf_bezoek_adres VARCHAR2 (256); -- C50 v_prs_bedrijf_bezoek_postcode VARCHAR2 (256); -- C12 v_prs_bedrijf_bezoek_plaats VARCHAR2 (256); -- C30 v_prs_bedrijf_bezoek_land VARCHAR2 (256); -- C30 v_prs_bedrijf_telefoon VARCHAR2 (256); -- C20 v_prs_bedrijf_fax VARCHAR2 (256); -- C20 v_prs_bedrijf_post_adres VARCHAR2 (256); -- C50 v_prs_bedrijf_post_postcode VARCHAR2 (256); -- C12 v_prs_bedrijf_post_plaats VARCHAR2 (256); -- C30 v_prs_bedrijf_post_land VARCHAR2 (256); -- C30 v_prs_bedrijf_contact_persoon VARCHAR2 (256); -- C30 v_prs_bedrijf_contact_telefoon VARCHAR2 (256); -- C20 v_prs_bedrijf_contact_fax VARCHAR2 (256); -- C20 v_prs_bedrijf_leverancier VARCHAR2 (256); -- N1 v_prs_bedrijf_uitvoerende VARCHAR2 (256); -- N1 v_prs_bedrijf_contract VARCHAR2 (256); -- N1 v_prs_bedrijf_huurder VARCHAR2 (256); -- N1 v_prs_bedrijf_ingids VARCHAR2 (256); -- N1 v_prs_bedrijf_uurloon VARCHAR2 (256); -- N6,2 v_prs_bedrijf_xsl VARCHAR2 (256); --C256 v_prs_bedrijf_mldorder_adres VARCHAR2 (256); --C256 v_prs_overeenkomst_nr VARCHAR2 (256); -- C30 v_prs_overeenkomst_datum VARCHAR2 (256); -- DATE v_prs_bedrijf_email VARCHAR2 (256); -- C100 v_prs_bedrijf_opmerking VARCHAR2 (4000); -- C4000 v_prs_dienst_omschrijving VARCHAR2 (256); -- C60 v_alg_locatie_code VARCHAR2 (256); -- C10 v_alg_gebouw_code VARCHAR2 (256); -- C12 v_prs_relatietype VARCHAR2 (256); -- C100 v_prs_bedrijf_overig1 VARCHAR2 (256); -- C256 v_prs_bedrijf_overig2 VARCHAR2 (256); -- C256 v_prs_bedrijf_overig3 VARCHAR2 (256); -- C256 -- Overig: v_prs_bedrijf_leverancier_n NUMBER (1); -- N1 v_prs_bedrijf_uitvoerende_n NUMBER (1); -- N1 v_prs_bedrijf_contract_n NUMBER (1); -- N1 v_prs_bedrijf_huurder_n NUMBER (1); -- N1 v_prs_bedrijf_ingids_n NUMBER (1); -- N1 v_prs_bedrijf_uurloon_n NUMBER (6, 2); -- N6,2 v_prs_overeenkomst_date DATE; -- DATE -- De kolommen v_seq_of_columns VARCHAR2(255); v_colnr1 NUMBER; v_colnr2 NUMBER; v_colnr3 NUMBER; v_colnr4 NUMBER; v_colnr5 NUMBER; v_colnr6 NUMBER; v_colnr7 NUMBER; v_colnr8 NUMBER; v_colnr9 NUMBER; v_colnr10 NUMBER; v_colnr11 NUMBER; v_colnr12 NUMBER; v_colnr13 NUMBER; v_colnr14 NUMBER; v_colnr15 NUMBER; v_colnr16 NUMBER; v_colnr17 NUMBER; v_colnr18 NUMBER; v_colnr19 NUMBER; v_colnr20 NUMBER; v_colnr21 NUMBER; v_colnr22 NUMBER; v_colnr23 NUMBER; v_colnr24 NUMBER; v_colnr25 NUMBER; v_colnr26 NUMBER; v_colnr27 NUMBER; v_colnr28 NUMBER; v_colnr29 NUMBER; v_colnr30 NUMBER; v_colnr31 NUMBER; v_colnr32 NUMBER; v_colnr33 NUMBER; v_colnr34 NUMBER; 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 fac_imp_ext_bedrijf; v_count_tot := 0; v_count_import := 0; header_is_valid := 0; IF p_checkheader = 0 THEN -- Er is geen header, dus header is valid (en direct de waarden lezen) header_is_valid := 1; END IF; COMMIT; v_seq_of_columns := p_seq_of_columns; v_errorhint := 'Bepalen volgorde kolommen'; -- De volgorde de te importeren kolommen in de CSV uitlezen uit v_seq_of_columns fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr1); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr2); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr3); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr4); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr5); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr6); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr7); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr8); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr9); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr10); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr11); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr12); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr13); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr14); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr15); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr16); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr17); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr18); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr19); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr20); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr21); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr22); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr23); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr24); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr25); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr26); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr27); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr28); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr29); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr30); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr31); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr32); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr33); fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr34); FOR rec1 IN c1 LOOP BEGIN v_newline := rec1.fac_imp_file_line; v_errormsg := 'Fout opvragen te importeren rij'; v_aanduiding := ''; v_ongeldig := 0; -- Lees alle veldwaarden v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEDRIJFSNAAM'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr1), v_prs_bedrijf_naam); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: LEVERANCIERNUMMER'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr2), v_prs_leverancier_nr); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEZOEK ADRES'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr3), v_prs_bedrijf_bezoek_adres); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEZOEK POSTCODE'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr4), v_prs_bedrijf_bezoek_postcode); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEZOEK PLAATS'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr5), v_prs_bedrijf_bezoek_plaats); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEZOEK LAND'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr6), v_prs_bedrijf_bezoek_land); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: POST ADRES'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr7), v_prs_bedrijf_post_adres); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: POST POSTCODE'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr8), v_prs_bedrijf_post_postcode); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: POST PLAATS'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr9), v_prs_bedrijf_post_plaats); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: POST LAND'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr10), v_prs_bedrijf_post_land); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEDRIJF TELEFOON'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr11), v_prs_bedrijf_telefoon); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEDRIJF FAX'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr12), v_prs_bedrijf_fax); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEDRIJF EMAIL'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr13), v_prs_bedrijf_email); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: CONTACT PERSOON'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr14), v_prs_bedrijf_contact_persoon); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: CONTACT TELEFOON'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr15), v_prs_bedrijf_contact_telefoon); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: CONTACT FAX'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr16), v_prs_bedrijf_contact_fax); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEDRIJF XSL'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr17), v_prs_bedrijf_xsl); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEDRIJF ORDERADRES'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr18), v_prs_bedrijf_mldorder_adres); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: LEVERANCIER'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr19), v_prs_bedrijf_leverancier); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: UITVOERENDE'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr20), v_prs_bedrijf_uitvoerende); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: CONTRACTANT'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr21), v_prs_bedrijf_contract); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: HUURDER'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr22), v_prs_bedrijf_huurder); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: TOONINGIDS'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr23), v_prs_bedrijf_ingids); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: UURLOON'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr24), v_prs_bedrijf_uurloon); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: OVEREENKOMSTNUMMER'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr25), v_prs_overeenkomst_nr); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: OVEREENKOMSTDATUM'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr26), v_prs_overeenkomst_datum); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: OPMERKING'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr27), v_prs_bedrijf_opmerking); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: DIENST'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr28), v_prs_dienst_omschrijving); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: LOCATIECODE'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr29), v_alg_locatie_code); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: GEBOUWCODE'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr30), v_alg_gebouw_code); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: RELATIETYPE'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr31), v_prs_relatietype); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: OVERIG1'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr32), v_prs_bedrijf_overig1); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: OVERIG2'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr33), v_prs_bedrijf_overig2); v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: OVERIG3'; fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr34), v_prs_bedrijf_overig3); v_aanduiding := '[' || v_prs_bedrijf_naam || '] '; -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen -- de juiste kolomkop. Ik controleer daarbij ALLE kolommen! -- Ik negeer alles totdat ik een geldige header ben gepasseerd. IF (header_is_valid = 0) THEN IF (p_checkheader = 1) THEN -- De controle op header is niet nodig. header_is_valid := 1; END IF; IF (p_checkheader = 2) THEN IF fac_check_import_header(v_prs_bedrijf_naam, 'BEDRIJFSNAAM') AND fac_check_import_header(v_prs_leverancier_nr, 'LEVERANCIERNUMMER') AND fac_check_import_header(v_prs_bedrijf_bezoek_adres, 'BEZOEK ADRES') AND fac_check_import_header(v_prs_bedrijf_bezoek_postcode, 'BEZOEK POSTCODE') AND fac_check_import_header(v_prs_bedrijf_bezoek_plaats, 'BEZOEK PLAATS') AND fac_check_import_header(v_prs_bedrijf_bezoek_land, 'BEZOEK LAND') AND fac_check_import_header(v_prs_bedrijf_post_adres, 'POST ADRES') AND fac_check_import_header(v_prs_bedrijf_post_postcode, 'POST POSTCODE') AND fac_check_import_header(v_prs_bedrijf_post_plaats, 'POST PLAATS') AND fac_check_import_header(v_prs_bedrijf_post_land, 'POST LAND') AND fac_check_import_header(v_prs_bedrijf_telefoon, 'BEDRIJF TELEFOON') AND fac_check_import_header(v_prs_bedrijf_fax, 'BEDRIJF FAX') AND fac_check_import_header(v_prs_bedrijf_email, 'BEDRIJF EMAIL') AND fac_check_import_header(v_prs_bedrijf_contact_persoon, 'CONTACT PERSOON') AND fac_check_import_header(v_prs_bedrijf_contact_telefoon, 'CONTACT TELEFOON') AND fac_check_import_header(v_prs_bedrijf_contact_fax, 'CONTACT FAX') AND fac_check_import_header(v_prs_bedrijf_xsl, 'BEDRIJF XSL') AND fac_check_import_header(v_prs_bedrijf_mldorder_adres, 'BEDRIJF ORDERADRES') AND fac_check_import_header(v_prs_bedrijf_leverancier, 'LEVERANCIER') AND fac_check_import_header(v_prs_bedrijf_uitvoerende, 'UITVOERENDE') AND fac_check_import_header(v_prs_bedrijf_contract, 'CONTRACTANT') AND fac_check_import_header(v_prs_bedrijf_huurder, 'HUURDER') AND fac_check_import_header(v_prs_bedrijf_ingids, 'TOONINGIDS') AND fac_check_import_header(v_prs_bedrijf_uurloon, 'UURLOON') AND fac_check_import_header(v_prs_overeenkomst_nr, 'OVEREENKOMSTNUMMER') AND fac_check_import_header(v_prs_overeenkomst_datum, 'OVEREENKOMSTDATUM') AND fac_check_import_header(v_prs_bedrijf_opmerking, 'OPMERKING') AND fac_check_import_header(v_prs_dienst_omschrijving, 'DIENST') AND fac_check_import_header(v_alg_locatie_code, 'LOCATIECODE') AND fac_check_import_header(v_alg_gebouw_code, 'GEBOUWCODE') AND fac_check_import_header(v_prs_relatietype, 'RELATIETYPE') THEN header_is_valid := 1; END IF; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden v_errorhint := 'Bedrijfsnaam te lang'; v_prs_bedrijf_naam := TRIM (v_prs_bedrijf_naam); IF LENGTH (v_prs_bedrijf_naam) > 60 THEN v_prs_bedrijf_naam := SUBSTR (TRIM (v_prs_bedrijf_naam), 1, 60); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Bedrijfsnaam wordt afgebroken tot [' || v_prs_bedrijf_naam || ']' ); END IF; v_errorhint := 'Leveranciernummer te lang'; v_prs_leverancier_nr := TRIM (v_prs_leverancier_nr); IF LENGTH (v_prs_leverancier_nr) > 50 THEN v_prs_leverancier_nr := SUBSTR (TRIM (v_prs_leverancier_nr), 1, 50); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Leveranciernummer wordt afgebroken tot [' || v_prs_leverancier_nr || ']' ); END IF; v_errorhint := 'Bezoek/adres te lang'; v_prs_bedrijf_bezoek_adres := TRIM (v_prs_bedrijf_bezoek_adres); IF LENGTH (v_prs_bedrijf_bezoek_adres) > 50 THEN v_prs_bedrijf_bezoek_adres := SUBSTR (TRIM (v_prs_bedrijf_bezoek_adres), 1, 50); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Bezoek/adres wordt afgebroken tot [' || v_prs_bedrijf_bezoek_adres || ']' ); END IF; v_errorhint := 'Bezoek/postcode te lang'; v_prs_bedrijf_bezoek_postcode := TRIM (v_prs_bedrijf_bezoek_postcode); IF LENGTH (v_prs_bedrijf_bezoek_postcode) > 12 THEN v_prs_bedrijf_bezoek_postcode := SUBSTR (TRIM (v_prs_bedrijf_bezoek_postcode), 1, 12); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Bezoek/postcode wordt afgebroken tot [' || v_prs_bedrijf_bezoek_postcode || ']' ); END IF; v_errorhint := 'Bezoek/plaats te lang'; v_prs_bedrijf_bezoek_plaats := TRIM (v_prs_bedrijf_bezoek_plaats); IF LENGTH (v_prs_bedrijf_bezoek_plaats) > 30 THEN v_prs_bedrijf_bezoek_plaats := SUBSTR (TRIM (v_prs_bedrijf_bezoek_plaats), 1, 30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Bezoek/plaats wordt afgebroken tot [' || v_prs_bedrijf_bezoek_plaats || ']' ); END IF; v_errorhint := 'Bezoek/land te lang'; v_prs_bedrijf_bezoek_land := TRIM (v_prs_bedrijf_bezoek_land); IF LENGTH (v_prs_bedrijf_bezoek_land) > 30 THEN v_prs_bedrijf_bezoek_land := SUBSTR (TRIM (v_prs_bedrijf_bezoek_land), 1, 30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Bezoek/land wordt afgebroken tot [' || v_prs_bedrijf_bezoek_land || ']' ); END IF; v_errorhint := 'Post/adres te lang'; v_prs_bedrijf_post_adres := TRIM (v_prs_bedrijf_post_adres); IF LENGTH (v_prs_bedrijf_post_adres) > 50 THEN v_prs_bedrijf_post_adres := SUBSTR (TRIM (v_prs_bedrijf_post_adres), 1, 50); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Post/adres wordt afgebroken tot [' || v_prs_bedrijf_post_adres || ']' ); END IF; v_errorhint := 'Post/postcode te lang'; v_prs_bedrijf_post_postcode := TRIM (v_prs_bedrijf_post_postcode); IF LENGTH (v_prs_bedrijf_post_postcode) > 12 THEN v_prs_bedrijf_post_postcode := SUBSTR (TRIM (v_prs_bedrijf_post_postcode), 1, 12); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Post/postcode wordt afgebroken tot [' || v_prs_bedrijf_post_postcode || ']' ); END IF; v_errorhint := 'Post/plaats te lang'; v_prs_bedrijf_post_plaats := TRIM (v_prs_bedrijf_post_plaats); IF LENGTH (v_prs_bedrijf_post_plaats) > 30 THEN v_prs_bedrijf_post_plaats := SUBSTR (TRIM (v_prs_bedrijf_post_plaats), 1, 30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Post/plaats wordt afgebroken tot [' || v_prs_bedrijf_post_plaats || ']' ); END IF; v_errorhint := 'Post/land te lang'; v_prs_bedrijf_post_land := TRIM (v_prs_bedrijf_post_land); IF LENGTH (v_prs_bedrijf_post_land) > 30 THEN v_prs_bedrijf_post_land := SUBSTR (TRIM (v_prs_bedrijf_post_land), 1, 30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Post/land wordt afgebroken tot [' || v_prs_bedrijf_post_land || ']' ); END IF; v_errorhint := 'Bedrijf/telefoon te lang'; v_prs_bedrijf_telefoon := TRIM (v_prs_bedrijf_telefoon); IF LENGTH (v_prs_bedrijf_telefoon) > 20 THEN v_prs_bedrijf_telefoon := SUBSTR (TRIM (v_prs_bedrijf_telefoon), 1, 20); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Bedrijf/telefoon wordt afgebroken tot [' || v_prs_bedrijf_telefoon || ']' ); END IF; v_errorhint := 'Bedrijf/fax te lang'; v_prs_bedrijf_fax := TRIM (v_prs_bedrijf_fax); IF LENGTH (v_prs_bedrijf_fax) > 20 THEN v_prs_bedrijf_fax := SUBSTR (TRIM (v_prs_bedrijf_fax), 1, 20); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Bedrijf/fax wordt afgebroken tot [' || v_prs_bedrijf_fax || ']' ); END IF; v_errorhint := 'Bedrijf/e-mail te lang'; v_prs_bedrijf_email := TRIM (v_prs_bedrijf_email); IF LENGTH (v_prs_bedrijf_email) > 100 THEN v_prs_bedrijf_email := SUBSTR (TRIM (v_prs_bedrijf_email), 1, 100); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Bedrijf/e-mail wordt afgebroken tot [' || v_prs_bedrijf_email || ']' ); END IF; v_errorhint := 'Contactpersoon te lang'; v_prs_bedrijf_contact_persoon := TRIM (v_prs_bedrijf_contact_persoon); IF LENGTH (v_prs_bedrijf_contact_persoon) > 30 THEN v_prs_bedrijf_contact_persoon := SUBSTR (TRIM (v_prs_bedrijf_contact_persoon), 1, 30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Contactpersoon wordt afgebroken tot [' || v_prs_bedrijf_contact_persoon || ']' ); END IF; v_errorhint := 'Contact/telefoon te lang'; v_prs_bedrijf_contact_telefoon := TRIM (v_prs_bedrijf_contact_telefoon); IF LENGTH (v_prs_bedrijf_contact_telefoon) > 20 THEN v_prs_bedrijf_contact_telefoon := SUBSTR (TRIM (v_prs_bedrijf_contact_telefoon), 1, 20); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Contact/telefoon wordt afgebroken tot [' || v_prs_bedrijf_contact_telefoon || ']' ); END IF; v_errorhint := 'Contact/fax te lang'; v_prs_bedrijf_contact_fax := TRIM (v_prs_bedrijf_contact_fax); IF LENGTH (v_prs_bedrijf_contact_fax) > 20 THEN v_prs_bedrijf_contact_fax := SUBSTR (TRIM (v_prs_bedrijf_contact_fax), 1, 20); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Contact/fax wordt afgebroken tot [' || v_prs_bedrijf_contact_fax || ']' ); END IF; -- Verder geen foutdetectie; kan dus stricter? SELECT DECODE (SUBSTR (TRIM (UPPER (v_prs_bedrijf_leverancier)), 1, 1 ), 'J', 1, 0 ) INTO v_prs_bedrijf_leverancier_n FROM DUAL; -- Verder geen foutdetectie; kan dus stricter? SELECT DECODE (SUBSTR (TRIM (UPPER (v_prs_bedrijf_uitvoerende)), 1, 1 ), 'J', 1, 0 ) INTO v_prs_bedrijf_uitvoerende_n FROM DUAL; -- Verder geen foutdetectie; kan dus stricter? SELECT DECODE (SUBSTR (TRIM (UPPER (v_prs_bedrijf_contract)), 1, 1), 'J', 1, 0 ) INTO v_prs_bedrijf_contract_n FROM DUAL; -- Verder geen foutdetectie; kan dus stricter? SELECT DECODE (SUBSTR (TRIM (UPPER (v_prs_bedrijf_huurder)), 1, 1), 'J', 1, 0 ) INTO v_prs_bedrijf_huurder_n FROM DUAL; -- Verder geen foutdetectie; kan dus stricter? SELECT DECODE (SUBSTR (TRIM (UPPER (v_prs_bedrijf_ingids)), 1, 1), 'J', 1, 0 ) INTO v_prs_bedrijf_ingids_n FROM DUAL; v_errorhint := 'Ongeldig uurloon; maximale grootte 9999.99'; BEGIN v_prs_bedrijf_uurloon_n := fac.safe_to_number (v_prs_bedrijf_uurloon); 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!' ); END; v_errorhint := 'Overeenkomstnummer te lang'; v_prs_overeenkomst_nr := TRIM (v_prs_overeenkomst_nr); IF LENGTH (v_prs_overeenkomst_nr) > 30 THEN v_prs_overeenkomst_nr := SUBSTR (TRIM (v_prs_overeenkomst_nr), 1, 30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Overeenkomstnummer wordt afgebroken tot [' || v_prs_overeenkomst_nr || ']' ); END IF; v_errorhint := 'Ongeldige overeenkomstdatum'; v_prs_overeenkomst_datum := TRIM (v_prs_overeenkomst_datum); IF v_prs_overeenkomst_datum IS NOT NULL THEN BEGIN v_prs_overeenkomst_date := TO_DATE (v_prs_overeenkomst_datum, '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_prs_overeenkomst_date := NULL; END IF; v_errorhint := 'Opmerking te lang'; v_prs_bedrijf_opmerking := TRIM (v_prs_bedrijf_opmerking); IF LENGTH (v_prs_bedrijf_opmerking) > 4000 THEN v_prs_bedrijf_opmerking := SUBSTR (TRIM (v_prs_bedrijf_opmerking), 1, 4000); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Opmerking wordt afgebroken tot [' || SUBSTR(v_prs_bedrijf_opmerking, 1, 1000) -- imp_log_omschrijving is niet groter :) || ']' ); END IF; v_errorhint := 'Dienst te lang'; v_prs_dienst_omschrijving := TRIM (v_prs_dienst_omschrijving); IF LENGTH (v_prs_dienst_omschrijving) > 60 THEN v_prs_dienst_omschrijving := SUBSTR (TRIM (v_prs_dienst_omschrijving), 1, 60); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Dienst wordt afgebroken tot [' || v_prs_dienst_omschrijving || ']' ); END IF; v_errorhint := 'Locatiecode te lang'; v_alg_locatie_code := TRIM (v_alg_locatie_code); IF LENGTH (v_alg_locatie_code) > 10 THEN v_alg_locatie_code := NULL; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errorhint, 'Locatiecode is te lang [' || v_alg_locatie_code || ']' ); END IF; v_errorhint := 'Gebouwcode te lang'; v_alg_gebouw_code := TRIM (v_alg_gebouw_code); IF LENGTH (v_alg_gebouw_code) > 12 THEN v_alg_gebouw_code := NULL; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errorhint, 'Gebouwcode is te lang [' || v_alg_gebouw_code || ']' ); END IF; v_errorhint := 'Relatietype omschrijving te lang'; v_prs_relatietype := TRIM (v_prs_relatietype); IF LENGTH (v_prs_relatietype) > 100 THEN v_prs_relatietype := SUBSTR (TRIM (v_prs_relatietype), 1, 100); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Relatietype omschrijving wordt afgebroken tot [' || v_prs_relatietype || ']' ); END IF; v_errorhint := 'Overig_1 te lang'; v_prs_bedrijf_overig1 := TRIM (v_prs_bedrijf_overig1); IF LENGTH (v_prs_bedrijf_overig1) > 256 THEN v_prs_bedrijf_overig1 := SUBSTR (TRIM (v_prs_bedrijf_overig1), 1, 256); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Overig_1 wordt afgebroken tot [' || v_prs_bedrijf_overig1 || ']' ); END IF; v_errorhint := 'Overig_2 te lang'; v_prs_bedrijf_overig2 := TRIM (v_prs_bedrijf_overig2); IF LENGTH (v_prs_bedrijf_overig2) > 256 THEN v_prs_bedrijf_overig2 := SUBSTR (TRIM (v_prs_bedrijf_overig2), 1, 256); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Overig_2 wordt afgebroken tot [' || v_prs_bedrijf_overig2 || ']' ); END IF; v_errorhint := 'Overig_3 te lang'; v_prs_bedrijf_overig3 := TRIM (v_prs_bedrijf_overig3); IF LENGTH (v_prs_bedrijf_overig3) > 256 THEN v_prs_bedrijf_overig3 := SUBSTR (TRIM (v_prs_bedrijf_overig3), 1, 256); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Overig_3 wordt afgebroken tot [' || v_prs_bedrijf_overig3 || ']' ); END IF; -- Insert geformatteerde import record IF v_ongeldig = 0 THEN BEGIN INSERT INTO fac_imp_ext_bedrijf (prs_bedrijf_naam, prs_leverancier_nr, prs_bedrijf_bezoek_adres, prs_bedrijf_bezoek_postcode, prs_bedrijf_bezoek_plaats, prs_bedrijf_bezoek_land, prs_bedrijf_post_adres, prs_bedrijf_post_postcode, prs_bedrijf_post_plaats, prs_bedrijf_post_land, prs_bedrijf_telefoon, prs_bedrijf_fax, prs_bedrijf_email, prs_bedrijf_contact_persoon, prs_bedrijf_contact_telefoon, prs_bedrijf_contact_fax, prs_bedrijf_xsl, prs_bedrijf_order_adres, prs_bedrijf_leverancier, prs_bedrijf_uitvoerende, prs_bedrijf_contract, prs_bedrijf_huurder, prs_bedrijf_ingids, prs_bedrijf_uurloon, prs_overeenkomst_nr, prs_overeenkomst_datum, prs_bedrijf_opmerking, prs_dienst_omschrijving, alg_locatie_code, alg_gebouw_code, prs_relatietype, prs_bedrijf_overig1, prs_bedrijf_overig2, prs_bedrijf_overig3 ) VALUES (v_prs_bedrijf_naam, v_prs_leverancier_nr, v_prs_bedrijf_bezoek_adres, v_prs_bedrijf_bezoek_postcode, v_prs_bedrijf_bezoek_plaats, v_prs_bedrijf_bezoek_land, v_prs_bedrijf_post_adres, v_prs_bedrijf_post_postcode, v_prs_bedrijf_post_plaats, v_prs_bedrijf_post_land, v_prs_bedrijf_telefoon, v_prs_bedrijf_fax, v_prs_bedrijf_email, v_prs_bedrijf_contact_persoon, v_prs_bedrijf_contact_telefoon, v_prs_bedrijf_contact_fax, v_prs_bedrijf_xsl, v_prs_bedrijf_mldorder_adres, v_prs_bedrijf_leverancier_n, v_prs_bedrijf_uitvoerende_n, v_prs_bedrijf_contract_n, v_prs_bedrijf_huurder_n, v_prs_bedrijf_ingids_n, v_prs_bedrijf_uurloon_n, v_prs_overeenkomst_nr, v_prs_overeenkomst_date, v_prs_bedrijf_opmerking, v_prs_dienst_omschrijving, v_alg_locatie_code, v_alg_gebouw_code, v_prs_relatietype, v_prs_bedrijf_overig1, v_prs_bedrijf_overig2, v_prs_bedrijf_overig3 ); v_count_import := v_count_import + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Fout bij toevoegen regel aan importtabel FAC_IMP_EXT_BEDRIJF.' ); 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', 'Relaties: aantal ingelezen importregels: ' || TO_CHAR (v_count_tot), '' ); fac.imp_writelog (p_import_key, 'S', 'Relaties: 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, 100); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Inleesproces relaties afgebroken! ' || v_aanduiding ); END fac_import_bedrijf_body; / CREATE OR REPLACE PROCEDURE fac_import_ext_bedrijf (p_import_key IN NUMBER) AS v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_seq_of_columns VARCHAR(255); BEGIN -- hulpje 1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34 v_seq_of_columns := '1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34'; fac_import_bedrijf_body (p_import_key, v_seq_of_columns, 2); EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Inleesproces relaties afgebroken!'); END; / -- Parameter p_sync = 0 of 1: -- 0 = er wordt niet gesynchroniseerd (op leveranciersnummer), maar gewoon (ala FIP) aangevuld. Elke leverancier wordt toegevoegd. -- 1 = er wel wel gesynchroniseerd (op leveranciernummer), dus add + update + delete CREATE OR REPLACE PROCEDURE fac_update_bedrijf_body ( p_import_key IN NUMBER, p_sync IN NUMBER) AS v_errormsg VARCHAR2 (1000) := '-'; v_errorhint VARCHAR2 (1000) := '-'; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count NUMBER (10); v_count_tot NUMBER (10); v_count_new NUMBER (10); v_count_upd NUMBER (10); v_count_del NUMBER (10); v_aanduiding VARCHAR2 (200) := '-'; -- SUBPROC PROCEDURE add_relatietype (p_import_key IN NUMBER) AS CURSOR c1 IS SELECT DISTINCT prs_relatietype FROM fac_imp_ext_bedrijf WHERE prs_relatietype IS NOT NULL; v_aanduiding VARCHAR2 (200); v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count NUMBER (10); v_count_tot NUMBER (10); v_count_update NUMBER (10); BEGIN v_count_tot := 0; v_count_update := 0; FOR rec IN c1 LOOP BEGIN v_count_tot := v_count_tot + 1; v_aanduiding := '[' || rec.prs_relatietype || '] '; v_errorhint := 'Fout bij bepalen relatietype'; SELECT COUNT (*) INTO v_count FROM prs_relatietype WHERE UPPER (prs_relatietype_omschrijving) = UPPER (rec.prs_relatietype) AND prs_relatietype_verwijder IS NULL; IF v_count = 0 THEN v_errorhint := 'Fout bij toevoegen relatietype'; INSERT INTO prs_relatietype (prs_relatietype_omschrijving) VALUES (rec.prs_relatietype); v_count_update := v_count_update + 1; COMMIT; END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint); COMMIT; END; END LOOP; END; -- SUBPROC PROCEDURE add_bedrijf (p_import_key IN NUMBER) AS CURSOR c1 IS SELECT * FROM fac_imp_ext_bedrijf ib; -- v_bedrijf_key NUMBER(10); v_relatietype_key NUMBER(10); BEGIN v_count_tot := 0; v_count_new := 0; v_count_upd := 0; FOR rec IN c1 LOOP BEGIN v_count_tot := v_count_tot + 1; v_aanduiding := '[' || rec.prs_bedrijf_naam || '|' || rec.prs_leverancier_nr || '] '; v_errorhint := 'Fout bepalen bedrijf'; v_relatietype_key := NULL; IF rec.prs_relatietype IS NOT NULL THEN SELECT prs_relatietype_key INTO v_relatietype_key FROM prs_relatietype WHERE UPPER(TRIM(prs_relatietype_omschrijving)) = UPPER(rec.prs_relatietype) AND prs_relatietype_verwijder IS NULL; END IF; IF rec.prs_leverancier_nr IS NULL AND p_sync = 1 THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Leveranciernummer ongedefinieerd!', v_errorhint); COMMIT; ELSE SELECT COUNT (*) INTO v_count FROM prs_v_aanwezigbedrijf WHERE UPPER (prs_leverancier_nr) = UPPER (rec.prs_leverancier_nr); -- IF v_count = 0 OR p_sync = 0 THEN v_errorhint := 'Fout toevoegen bedrijf'; INSERT INTO prs_bedrijf (prs_bedrijf_naam, prs_leverancier_nr, prs_bedrijf_bezoek_adres, prs_bedrijf_bezoek_postcode, prs_bedrijf_bezoek_plaats, prs_bedrijf_bezoek_land, prs_bedrijf_post_adres, prs_bedrijf_post_postcode, prs_bedrijf_post_plaats, prs_bedrijf_post_land, prs_bedrijf_telefoon, prs_bedrijf_fax, prs_bedrijf_email, prs_bedrijf_contact_persoon, prs_bedrijf_contact_telefoon, prs_bedrijf_contact_fax, prs_bedrijf_leverancier, prs_bedrijf_uitvoerende, prs_bedrijf_contract, prs_bedrijf_huurder, prs_bedrijf_ingids, prs_bedrijf_uurloon, prs_overeenkomst_nr, prs_overeenkomst_datum, prs_bedrijf_opmerking, prs_relatietype_key) VALUES (rec.prs_bedrijf_naam, rec.prs_leverancier_nr, rec.prs_bedrijf_bezoek_adres, rec.prs_bedrijf_bezoek_postcode, rec.prs_bedrijf_bezoek_plaats, rec.prs_bedrijf_bezoek_land, rec.prs_bedrijf_post_adres, rec.prs_bedrijf_post_postcode, rec.prs_bedrijf_post_plaats, rec.prs_bedrijf_post_land, rec.prs_bedrijf_telefoon, rec.prs_bedrijf_fax, rec.prs_bedrijf_email, rec.prs_bedrijf_contact_persoon, rec.prs_bedrijf_contact_telefoon, rec.prs_bedrijf_contact_fax, DECODE (rec.prs_bedrijf_leverancier, 1, 1, NULL), DECODE (rec.prs_bedrijf_uitvoerende, 1, 1, NULL), DECODE (rec.prs_bedrijf_contract, 1, 1, NULL), DECODE (rec.prs_bedrijf_huurder, 1, 1, NULL), DECODE (rec.prs_bedrijf_ingids, 1, 1, NULL), rec.prs_bedrijf_uurloon, rec.prs_overeenkomst_nr, rec.prs_overeenkomst_datum, rec.prs_bedrijf_opmerking, v_relatietype_key) RETURNING prs_bedrijf_key INTO v_bedrijf_key; v_count_new := v_count_new + 1; ELSE -- v_count > 0 SELECT prs_bedrijf_key INTO v_bedrijf_key FROM prs_v_aanwezigbedrijf WHERE UPPER (prs_leverancier_nr) = UPPER (rec.prs_leverancier_nr); v_errorhint := 'Fout bijwerken bedrijf'; UPDATE prs_bedrijf SET prs_bedrijf_naam = COALESCE (rec.prs_bedrijf_naam, prs_bedrijf_naam), prs_bedrijf_bezoek_adres = COALESCE (rec.prs_bedrijf_bezoek_adres, prs_bedrijf_bezoek_adres), prs_bedrijf_bezoek_postcode = COALESCE (rec.prs_bedrijf_bezoek_postcode, prs_bedrijf_bezoek_postcode), prs_bedrijf_bezoek_plaats = COALESCE (rec.prs_bedrijf_bezoek_plaats, prs_bedrijf_bezoek_plaats), prs_bedrijf_bezoek_land = COALESCE (rec.prs_bedrijf_bezoek_land, prs_bedrijf_bezoek_land), prs_bedrijf_post_adres = COALESCE (rec.prs_bedrijf_post_adres, prs_bedrijf_post_adres), prs_bedrijf_post_postcode = COALESCE (rec.prs_bedrijf_post_postcode, prs_bedrijf_post_postcode), prs_bedrijf_post_plaats = COALESCE (rec.prs_bedrijf_post_plaats, prs_bedrijf_post_plaats), prs_bedrijf_post_land = COALESCE (rec.prs_bedrijf_post_land, prs_bedrijf_post_land), prs_bedrijf_telefoon = COALESCE (rec.prs_bedrijf_telefoon, prs_bedrijf_telefoon), prs_bedrijf_fax = COALESCE (rec.prs_bedrijf_fax, prs_bedrijf_fax), prs_bedrijf_email = COALESCE (rec.prs_bedrijf_email, prs_bedrijf_email), prs_bedrijf_contact_persoon = COALESCE (rec.prs_bedrijf_contact_persoon, prs_bedrijf_contact_persoon), prs_bedrijf_contact_telefoon = COALESCE (rec.prs_bedrijf_contact_telefoon, prs_bedrijf_contact_telefoon), prs_bedrijf_contact_fax = COALESCE (rec.prs_bedrijf_contact_fax, prs_bedrijf_contact_fax), prs_bedrijf_leverancier = DECODE (rec.prs_bedrijf_leverancier, 1, 1, NULL), prs_bedrijf_uitvoerende = DECODE (rec.prs_bedrijf_uitvoerende, 1, 1, NULL), prs_bedrijf_contract = DECODE (rec.prs_bedrijf_contract, 1, 1, NULL), prs_bedrijf_huurder = DECODE (rec.prs_bedrijf_huurder, 1, 1, NULL), prs_bedrijf_ingids = DECODE (rec.prs_bedrijf_ingids, 1, 1, NULL), prs_bedrijf_uurloon = COALESCE (rec.prs_bedrijf_uurloon, prs_bedrijf_uurloon), prs_overeenkomst_nr = COALESCE (rec.prs_overeenkomst_nr, prs_overeenkomst_nr), prs_overeenkomst_datum = COALESCE (rec.prs_overeenkomst_datum, prs_overeenkomst_datum), prs_bedrijf_opmerking = COALESCE (rec.prs_bedrijf_opmerking, prs_bedrijf_opmerking), prs_relatietype_key = DECODE (rec.prs_relatietype, NULL, prs_relatietype_key, v_relatietype_key) -- kan wel wijzigen, maar niet leeg maken. WHERE prs_bedrijf_key = v_bedrijf_key; v_count_upd := v_count_upd + 1; END IF; -- v_count = 0 END IF; -- rec.prs_leverancier_nr IS NULL EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'ORACLE (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', 'Bedrijf: #ingelezen: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog (p_import_key, 'S', 'Bedrijf: #toegevoegd: ' || TO_CHAR (v_count_new), ''); fac.imp_writelog (p_import_key, 'S', 'Bedrijf: #bijgewerkt: ' || TO_CHAR (v_count_upd), ''); COMMIT; END; -- SUBPROC PROCEDURE del_bedrijf (p_import_key IN NUMBER) AS CURSOR c1 IS SELECT * FROM prs_v_aanwezigbedrijf b WHERE b.prs_bedrijf_intern IS NULL AND b.prs_leverancier_nr IS NOT NULL AND NOT EXISTS (SELECT 1 FROM fac_imp_ext_bedrijf WHERE prs_leverancier_nr = b.prs_leverancier_nr); -- v_bedrijf_key NUMBER (10); BEGIN v_count_del := 0; -- FOR rec IN c1 LOOP BEGIN v_aanduiding := '[' || rec.prs_bedrijf_naam || '] '; v_errorhint := 'Fout verwijderen bedrijf'; UPDATE prs_bedrijf SET prs_bedrijf_verwijder = SYSDATE WHERE prs_bedrijf_key = rec.prs_bedrijf_key; v_count_del := v_count_del + 1; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'ORACLE (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', 'Bedrijf: #verwijderd: ' || TO_CHAR (v_count_del), ''); COMMIT; END; -- SUBPROC PROCEDURE diensten_bedrijf (p_import_key IN NUMBER) AS CURSOR c_dienst IS SELECT DISTINCT prs_dienst_omschrijving FROM fac_imp_ext_bedrijf WHERE prs_dienst_omschrijving IS NOT NULL; CURSOR c_dienstlocgebouw IS SELECT prs_dienst_omschrijving, alg_locatie_code, alg_gebouw_code, prs_bedrijf_naam FROM fac_imp_ext_bedrijf WHERE prs_dienst_omschrijving IS NOT NULL; v_alg_locatie_key NUMBER (10); v_alg_gebouw_key NUMBER (10); v_prs_dienst_key NUMBER (10); v_prs_bedrijf_key NUMBER (10); BEGIN v_count_tot := 0; v_count_upd := 0; FOR rec2 IN c_dienst LOOP BEGIN v_count_tot := v_count_tot + 1; v_errormsg := 'Kan dienst niet bepalen [' || rec2.prs_dienst_omschrijving || '] '; -- BEGIN SELECT prs_dienst_key INTO v_prs_dienst_key FROM prs_dienst WHERE UPPER(prs_dienst_omschrijving) = UPPER(rec2.prs_dienst_omschrijving); EXCEPTION WHEN NO_DATA_FOUND THEN v_errormsg := 'Kan dienst niet wegschrijven [' || rec2.prs_dienst_omschrijving || '] '; -- INSERT INTO prs_dienst (prs_dienst_omschrijving) VALUES (rec2.prs_dienst_omschrijving); END; -- v_count_upd := v_count_upd + 1; COMMIT; EXCEPTION WHEN OTHERS THEN v_errorhint := v_errormsg; oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := v_errormsg || 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint ); COMMIT; -- tbv logging END; END LOOP; -- fac.imp_writelog (p_import_key, 'S', 'Diensten: aantal ingelezen: ' || TO_CHAR (v_count_tot), '' ); fac.imp_writelog (p_import_key, 'S', 'Diensten: aantal toegevoegd: ' || TO_CHAR (v_count_upd), '' ); -- v_count_tot := 0; v_count_upd := 0; -- FOR rec3 IN c_dienstlocgebouw LOOP BEGIN v_count_tot := v_count_tot + 1; v_errormsg := 'Kan dienst niet bepalen [' || rec3.prs_dienst_omschrijving || '] '; SELECT prs_dienst_key INTO v_prs_dienst_key FROM prs_dienst WHERE prs_dienst_omschrijving = rec3.prs_dienst_omschrijving; v_errormsg := 'Kan locatie niet bepalen [' || rec3.alg_locatie_code || '] '; IF rec3.alg_locatie_code IS NOT NULL THEN SELECT alg_locatie_key INTO v_alg_locatie_key FROM alg_v_aanweziglocatie WHERE alg_locatie_code = rec3.alg_locatie_code; ELSE v_alg_locatie_key := NULL; END IF; v_errormsg := 'Kan gebouw niet bepalen [' || rec3.alg_gebouw_code || '] '; IF rec3.alg_gebouw_code IS NOT NULL THEN SELECT alg_gebouw_key INTO v_alg_gebouw_key FROM alg_v_aanweziggebouw WHERE alg_gebouw_code = rec3.alg_gebouw_code AND alg_locatie_key = v_alg_locatie_key; ELSE v_alg_gebouw_key := NULL; END IF; v_errormsg := 'Kan bedrijf niet bepalen [' || rec3.prs_bedrijf_naam || '] '; SELECT prs_bedrijf_key INTO v_prs_bedrijf_key FROM prs_v_aanwezigbedrijf WHERE prs_bedrijf_naam = rec3.prs_bedrijf_naam; v_errormsg := 'Kan bedrijf/dienst/loc/gebouw niet wegschrijven [' || rec3.prs_bedrijf_naam || '/' || rec3.prs_dienst_omschrijving || '/' || rec3.alg_locatie_code || '/' || rec3.alg_gebouw_code || '] '; INSERT INTO prs_bedrijfdienstlocatie ( prs_dienst_key , prs_bedrijf_key , alg_locatie_key , alg_gebouw_key ) VALUES ( v_prs_dienst_key , v_prs_bedrijf_key , decode (v_alg_gebouw_key, null, v_alg_locatie_key, null) , v_alg_gebouw_key ); v_count_upd := v_count_upd + 1; COMMIT; EXCEPTION WHEN OTHERS THEN v_errorhint := v_errormsg; oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := v_errormsg || 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint ); COMMIT; -- tbv logging END; END LOOP; -- fac.imp_writelog (p_import_key, 'S', 'Bedrijf/dienst/locatie: aantal ingelezen: ' || TO_CHAR (v_count_tot), '' ); fac.imp_writelog (p_import_key, 'S', 'Bedrijf/dienst/locatie: aantal toegevoegd: ' || TO_CHAR (v_count_upd), '' ); END; -- -- MAIN BEGIN IF p_sync = 1 THEN -- Bij aanvullen nooit verwijderen, alleen bij sync-en del_bedrijf (p_import_key); END IF; -- add_relatietype (p_import_key); add_bedrijf (p_import_key); -- IF p_sync = 0 THEN -- Bij aanvullen bedrijven de diensten-locatie-gebouw uitvoeren, bij sync-en (nog) niet diensten_bedrijf(p_import_key); END IF; -- EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Importproces relaties afgebroken!'); END; / CREATE OR REPLACE PROCEDURE fac_update_ext_bedrijf (p_import_key IN NUMBER ) AS BEGIN fac_update_bedrijf_body(p_import_key, 0); END; / CREATE OR REPLACE PROCEDURE fac_import_bedrijfadres (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 (200); -- De importvelden v_prs_bedrijf_naam VARCHAR2 (255); -- VARCHAR2(60), v_prs_leverancier_nr VARCHAR2 (255); -- VARCHAR2(50), v_prs_bedrijf_key NUMBER(10); v_prs_bedrijfadres_type VARCHAR2 (255); -- VARCHAR2(1), v_mld_typeopdr_omschrijving VARCHAR2 (255); -- NUMBER(10), v_mld_typeopdr_key NUMBER(10); v_prs_bedrijfadres_url VARCHAR2 (1000); -- VARCHAR2(512), v_prs_bedrijfadres_ordermode VARCHAR2 (255); -- NUMBER(3), v_prs_bedrijfadres_certificate VARCHAR2 (1000); -- VARCHAR2(255), v_prs_bedrijfadres_xsl VARCHAR2 (1000); -- VARCHAR2(256), v_prs_bedrijfadres_ext VARCHAR2 (255); -- VARCHAR2(10), v_prs_bedrijfadres_attachfile VARCHAR2 (1000); -- VARCHAR2(256), v_prs_bedrijfadres_username VARCHAR2 (255); -- VARCHAR2(128), v_prs_bedrijfadres_password VARCHAR2 (1000); -- VARCHAR2(320)), v_prs_bedrijfadres_sender VARCHAR2 (1000); -- VARCHAR2(512), v_prs_bedrijfadres_replyaddress VARCHAR2 (1000); -- VARCHAR2(512), v_prs_bedrijfadres_lockuser VARCHAR2 (255); -- NUMBER(10), v_lockuser_key NUMBER (10); v_prs_bedrijfadres_lockexpire VARCHAR2 (255); 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 fac_imp_bedrijfadres; 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_errormsg := 'Fout bij opvragen importregel'; v_aanduiding := ''; v_ongeldig := 0; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_naam); fac.imp_getfield (v_newline, c_delim, v_prs_leverancier_nr); fac.imp_getfield (v_newline, c_delim, v_prs_bedrijfadres_type); fac.imp_getfield (v_newline, c_delim, v_mld_typeopdr_omschrijving); fac.imp_getfield (v_newline, c_delim, v_prs_bedrijfadres_url); fac.imp_getfield (v_newline, c_delim, v_prs_bedrijfadres_ordermode); fac.imp_getfield (v_newline, c_delim, v_prs_bedrijfadres_certificate); fac.imp_getfield (v_newline, c_delim, v_prs_bedrijfadres_xsl); fac.imp_getfield (v_newline, c_delim, v_prs_bedrijfadres_ext); fac.imp_getfield (v_newline, c_delim, v_prs_bedrijfadres_attachfile); fac.imp_getfield (v_newline, c_delim, v_prs_bedrijfadres_username); fac.imp_getfield (v_newline, c_delim, v_prs_bedrijfadres_password); fac.imp_getfield (v_newline, c_delim, v_prs_bedrijfadres_sender); fac.imp_getfield (v_newline, c_delim, v_prs_bedrijfadres_replyaddress); fac.imp_getfield (v_newline, c_delim, v_prs_bedrijfadres_lockuser); fac.imp_getfield (v_newline, c_delim, v_prs_bedrijfadres_lockexpire); v_aanduiding := '[' || v_prs_bedrijf_naam || '|' || v_prs_leverancier_nr || '|' || v_prs_bedrijfadres_type || '|' || v_mld_typeopdr_omschrijving || '] '; -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen -- de juiste kolomkop -- Ik negeer alles totdat ik een geldige header ben gepasseerd. IF (header_is_valid = 0) THEN IF fac_check_import_header(v_prs_bedrijf_naam, 'BEDRIJFSNAAM') AND fac_check_import_header(v_prs_leverancier_nr, 'LEVERANCIERNUMMER') AND fac_check_import_header(v_prs_bedrijfadres_type, 'KANAAL') AND fac_check_import_header(v_mld_typeopdr_omschrijving, 'OPDRACHTTYPE') AND fac_check_import_header(v_prs_bedrijfadres_url, 'ADRES') AND fac_check_import_header(v_prs_bedrijfadres_ordermode, 'ORDERMODE') AND fac_check_import_header(v_prs_bedrijfadres_certificate, 'CERTIFICAAT') AND fac_check_import_header(v_prs_bedrijfadres_xsl, 'XSL TEMPLATE') AND fac_check_import_header(v_prs_bedrijfadres_ext, 'EXTENSIE') AND fac_check_import_header(v_prs_bedrijfadres_attachfile, 'VASTE BIJLAGE') AND fac_check_import_header(v_prs_bedrijfadres_username, 'LOGIN') AND fac_check_import_header(v_prs_bedrijfadres_password, 'WACHTWOORD') AND fac_check_import_header(v_prs_bedrijfadres_sender, 'AFZENDER') AND fac_check_import_header(v_prs_bedrijfadres_replyaddress,'REPLY ADRES') AND fac_check_import_header(v_prs_bedrijfadres_lockuser, 'VASTE GEBRUIKER') AND fac_check_import_header(v_prs_bedrijfadres_lockexpire, 'EXPIRE DAYS') THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden v_errormsg := 'Bedrijf niet gevonden'; BEGIN SELECT prs_bedrijf_key INTO v_prs_bedrijf_key FROM prs_bedrijf WHERE COALESCE(prs_bedrijf_intern, 0) <> 1 AND prs_bedrijf_verwijder IS NULL AND UPPER(prs_leverancier_nr) = UPPER(v_prs_leverancier_nr); EXCEPTION WHEN NO_DATA_FOUND THEN BEGIN SELECT prs_bedrijf_key INTO v_prs_bedrijf_key FROM prs_bedrijf WHERE COALESCE(prs_bedrijf_intern, 0) <> 1 AND prs_bedrijf_verwijder IS NULL AND UPPER(prs_bedrijf_naam) = UPPER(v_prs_bedrijf_naam); EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen'); v_ongeldig := 1; END; WHEN TOO_MANY_ROWS THEN BEGIN SELECT prs_bedrijf_key INTO v_prs_bedrijf_key FROM prs_bedrijf WHERE COALESCE(prs_bedrijf_intern, 0) <> 1 AND prs_bedrijf_verwijder IS NULL AND UPPER(prs_leverancier_nr) = UPPER(v_prs_leverancier_nr) AND UPPER(prs_bedrijf_naam) = UPPER(v_prs_bedrijf_naam); EXCEPTION WHEN NO_DATA_FOUND OR TOO_MANY_ROWS THEN fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Leveranciernummer/bedrijf niet gevonden', 'Regel wordt overgeslagen'); v_ongeldig := 1; END; END; IF v_ongeldig = 0 THEN v_errormsg := 'Opdrachttype niet gevonden'; v_mld_typeopdr_key := NULL; IF UPPER(v_prs_bedrijfadres_type) = 'O' AND v_mld_typeopdr_omschrijving IS NOT NULL THEN BEGIN SELECT mld_typeopdr_key INTO v_mld_typeopdr_key FROM mld_typeopdr WHERE mld_typeopdr_upper = UPPER(v_mld_typeopdr_omschrijving); EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen'); v_ongeldig := 1; END; END IF; END IF; -- Expire days mag niet negatief of meer zijn dan 10 posities lang. -- Indien leeg, dan blijft/wordt expire_days=ongedefinieerd=NULL! v_prs_bedrijfadres_lockexpire := TRIM (v_prs_bedrijfadres_lockexpire); IF v_prs_bedrijfadres_lockexpire IS NOT NULL AND ( fac.safe_to_number (v_prs_bedrijfadres_lockexpire) IS NULL OR fac.safe_to_number (v_prs_bedrijfadres_lockexpire) < 0 OR fac.safe_to_number (v_prs_bedrijfadres_lockexpire) > 9999999999) THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Ongeldig aantal expire days', 'Regel wordt niet ingelezen (Expire days:' || v_prs_bedrijfadres_lockexpire || ')' ); v_ongeldig := 1; END IF; IF v_ongeldig = 0 THEN v_errormsg := 'Controleer kanaal'; IF LENGTH(v_prs_bedrijfadres_type) > 1 THEN v_prs_bedrijfadres_type := SUBSTR(v_prs_bedrijfadres_type, 1, 1); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Kanaal aangepast naar: ' || v_prs_bedrijfadres_type); END IF; v_errormsg := 'Controleer lengte van URL'; IF LENGTH(v_prs_bedrijfadres_url) > 512 THEN v_prs_bedrijfadres_url := SUBSTR(v_prs_bedrijfadres_url, 1, 512); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'URL aangepast naar: ' || v_prs_bedrijfadres_url); END IF; v_errormsg := 'Controleer ordermode'; IF LENGTH(v_prs_bedrijfadres_ordermode) > 3 OR ( fac.safe_to_number(v_prs_bedrijfadres_ordermode) IS NULL AND v_prs_bedrijfadres_ordermode IS NOT NULL) THEN v_prs_bedrijfadres_ordermode := SUBSTR(v_prs_bedrijfadres_ordermode, 1, 3); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Ordermode aangepast naar: ' || fac.safe_to_number(v_prs_bedrijfadres_ordermode)); END IF; v_errormsg := 'Controleer lengte van certificaat'; IF LENGTH(v_prs_bedrijfadres_certificate) > 255 THEN v_prs_bedrijfadres_certificate := SUBSTR(v_prs_bedrijfadres_certificate, 1, 255); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Certificaat aangepast naar: ' || v_prs_bedrijfadres_certificate); END IF; v_errormsg := 'Controleer lengte van stylesheet'; IF LENGTH(v_prs_bedrijfadres_xsl) > 256 THEN v_prs_bedrijfadres_xsl := SUBSTR(v_prs_bedrijfadres_xsl, 1, 256); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Stylesheet aangepast naar: ' || v_prs_bedrijfadres_xsl); END IF; v_errormsg := 'Controleer lengte van extensie'; IF LENGTH(v_prs_bedrijfadres_ext) > 10 THEN v_prs_bedrijfadres_ext := SUBSTR(v_prs_bedrijfadres_ext, 1, 10); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Extensie aangepast naar: ' || v_prs_bedrijfadres_ext); END IF; v_errormsg := 'Controleer lengte van vaste bijlage'; IF LENGTH(v_prs_bedrijfadres_attachfile) > 256 THEN v_prs_bedrijfadres_attachfile := SUBSTR(v_prs_bedrijfadres_attachfile, 1, 256); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Vaste bijlage aangepast naar: ' || v_prs_bedrijfadres_attachfile); ELSE IF ((LENGTH(v_prs_bedrijfadres_attachfile) > 0) AND (INSTR(v_prs_bedrijfadres_attachfile,'.') < 0)) THEN v_prs_bedrijfadres_attachfile := ''; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Ongeldige vaste bijlage verwijderd: ' || v_prs_bedrijfadres_attachfile); END IF; END IF; v_errormsg := 'Controleer lengte van login'; IF LENGTH(v_prs_bedrijfadres_username) > 128 THEN v_prs_bedrijfadres_username := SUBSTR(v_prs_bedrijfadres_username, 1, 128); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Login aangepast naar: ' || v_prs_bedrijfadres_username); END IF; v_errormsg := 'Controleer lengte van wachtwoord'; IF LENGTH(v_prs_bedrijfadres_password) > 320 THEN v_prs_bedrijfadres_password := SUBSTR(v_prs_bedrijfadres_password, 1, 320); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Wachtwoord aangepast naar: ' || v_prs_bedrijfadres_password); END IF; v_errormsg := 'Controleer lengte van afzender'; IF LENGTH(v_prs_bedrijfadres_sender) > 512 THEN v_prs_bedrijfadres_sender := SUBSTR(v_prs_bedrijfadres_sender, 1, 512); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Afzender aangepast naar: ' || v_prs_bedrijfadres_sender); END IF; v_errormsg := 'Controleer lengte van reply adres'; IF LENGTH(v_prs_bedrijfadres_replyaddress) > 512 THEN v_prs_bedrijfadres_replyaddress := SUBSTR(v_prs_bedrijfadres_replyaddress, 1, 512); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Reply adres aangepast naar: ' || v_prs_bedrijfadres_replyaddress); END IF; -- Vindt de key van de vaste gebruiker. v_prs_bedrijfadres_lockuser := TRIM (v_prs_bedrijfadres_lockuser); IF v_prs_bedrijfadres_lockuser IS NOT NULL THEN BEGIN SELECT prs_perslid_key INTO v_lockuser_key FROM prs_perslid WHERE prs_perslid_oslogin = UPPER (v_prs_bedrijfadres_lockuser) AND prs_perslid_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN v_lockuser_key := NULL; fac.imp_writelog ( p_import_key, 'E', v_aanduiding || 'Budgethouder-aanduiding kan niet gevonden worden', 'Vaste gebruiker wordt leeg gemaakt [' || v_prs_bedrijfadres_lockuser || ']'); END; ELSE v_lockuser_key := NULL; END IF; BEGIN v_errormsg := 'Toevoegen bedrijfadres'; INSERT INTO fac_imp_bedrijfadres (prs_bedrijf_key, prs_bedrijfadres_type, mld_typeopdr_key, prs_bedrijfadres_url, prs_bedrijfadres_ordermode, prs_bedrijfadres_certificate, prs_bedrijfadres_xsl, prs_bedrijfadres_ext, prs_bedrijfadres_attachfile, prs_bedrijfadres_username, prs_bedrijfadres_password, prs_bedrijfadres_sender, prs_bedrijfadres_replyaddress, prs_bedrijfadres_lockuser_key, prs_bedrijfadres_lockexpire) VALUES (v_prs_bedrijf_key, v_prs_bedrijfadres_type, v_mld_typeopdr_key, v_prs_bedrijfadres_url, v_prs_bedrijfadres_ordermode, v_prs_bedrijfadres_certificate, v_prs_bedrijfadres_xsl, v_prs_bedrijfadres_ext, v_prs_bedrijfadres_attachfile, v_prs_bedrijfadres_username, v_prs_bedrijfadres_password, v_prs_bedrijfadres_sender, v_prs_bedrijfadres_replyaddress, v_lockuser_key, fac.safe_to_number (v_prs_bedrijfadres_lockexpire)); 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, 'E', 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', 'Adressen/aantal ingelezen importregels: ' || TO_CHAR (v_count_tot), '' ); fac.imp_writelog ( p_import_key, 'S', 'Adressen/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 adressen afgebroken!'); END fac_import_bedrijfadres; / CREATE OR REPLACE PROCEDURE fac_update_bedrijfadres (p_import_key IN NUMBER) AS CURSOR c IS SELECT * FROM fac_imp_bedrijfadres i; v_errormsg VARCHAR2 (1000) := '-'; v_errorhint VARCHAR2 (1000) := '-'; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count NUMBER (10); v_count_tot NUMBER (10); v_aanduiding VARCHAR2 (200) := '-'; v_prs_bedrijf_naam VARCHAR (60); -- MAIN BEGIN v_count_tot := 0; v_count := 0; FOR rec IN c LOOP BEGIN SELECT prs_bedrijf_naam INTO v_prs_bedrijf_naam FROM prs_bedrijf WHERE prs_bedrijf_key = rec.prs_bedrijf_key; v_count_tot := v_count_tot + 1; v_aanduiding := '[' || v_prs_bedrijf_naam || '|' || rec.prs_bedrijfadres_type || '] '; v_errorhint := 'Fout toevoegen bedrijfadres'; INSERT INTO prs_bedrijfadres (prs_bedrijf_key, prs_bedrijfadres_type, mld_typeopdr_key, prs_bedrijfadres_url, prs_bedrijfadres_ordermode, prs_bedrijfadres_certificate, prs_bedrijfadres_xsl, prs_bedrijfadres_ext, prs_bedrijfadres_attachfile, prs_bedrijfadres_username, prs_bedrijfadres_password, prs_bedrijfadres_sender, prs_bedrijfadres_replyaddress, prs_bedrijfadres_lockuser_key, prs_bedrijfadres_locksecret, prs_bedrijfadres_lockexpire) VALUES (rec.prs_bedrijf_key, rec.prs_bedrijfadres_type, rec.mld_typeopdr_key, rec.prs_bedrijfadres_url, rec.prs_bedrijfadres_ordermode, rec.prs_bedrijfadres_certificate, rec.prs_bedrijfadres_xsl, rec.prs_bedrijfadres_ext, rec.prs_bedrijfadres_attachfile, rec.prs_bedrijfadres_username, rec.prs_bedrijfadres_password, rec.prs_bedrijfadres_sender, rec.prs_bedrijfadres_replyaddress, rec.prs_bedrijfadres_lockuser_key, CASE WHEN rec.prs_bedrijfadres_lockuser_key IS NOT NULL THEN DBMS_RANDOM.string('a', 32) ELSE NULL END, CASE WHEN rec.prs_bedrijfadres_lockuser_key IS NOT NULL THEN COALESCE(rec.prs_bedrijfadres_lockexpire, 30) ELSE NULL END); v_count := v_count + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'ORACLE (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', 'Bedrijf: #ingelezen: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog (p_import_key, 'S', 'Bedrijf: #toegevoegd: ' || TO_CHAR (v_count), ''); COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Importproces bedrijfadressen afgebroken!'); END; / -- FSN#19006: dit is hier ingeplakt, maar moet nog gereviseerd worden naar de laatste stand van zaken CREATE OR REPLACE PROCEDURE fac_import_factuur (p_import_key IN NUMBER ) AS -- Standaard volgorde van de kolommen in het CSV-formaat, waarbij 3 velden VERPLICHT (minimaal door Facilitor vereist) -- Variabelelijst -- v_leveranciernr: 1 -- v_factuurnr: 2 (VERPLICHT, anders zet Facilitor '-' in factuurnr, en is status van factuur "Incompleet") -- v_factuurdatum: 3 -- v_empty); -- v_ordernr: 4 (VERPLICHT, anders is status van factuur "Incompleet") -- v_locatie: 5 -- v_afleverdatum: 6 -- v_omschrijving: 7 -- v_aantal: 8 -- v_kostprijs: 9 (VERPLICHT, anders is status van factuur "Incompleet") -- v_btw_bedrag: 10 (VERPLICHT, of anders veld 11, anders is status van factuur "Incompleet") -- v_btw: 11 (VERPLICHT, of anders veld 10, anders is status van factuur "Incompleet") -- v_docid: 12 -- v_debiteur_nr: 13 -- v_opmerking: 14 -- v_btw_verlegd: 15 (VERPLICHT, Ja/Nee/ waarbij leeg gelijk is aan Nee. Andere waarden leidt tot "Incompleet") -- v_kenmerk1: 16 -- v_kenmerk2: 17 -- v_kenmerk3: 18 -- v_kenmerk4: 19 -- v_kenmerk5: 20 -- v_boekmaand: 21 -- v_kenmerk6: 22 -- v_kenmerk7: 23 -- v_kenmerk8: 24 -- v_kenmerk9: 25 -- v_kenmerk10: 26 -- v_kenmerk11: 27 -- v_kenmerk12: 28 -- v_kenmerk13: 29 -- v_kenmerk14: 30 -- v_kenmerk15: 31 -- v_kenmerk16: 32 -- v_kenmerk17: 33 -- v_kenmerk18: 34 -- v_kenmerk19: 35 -- v_kenmerk20: 36 -- v_artikelcode: 37 -- v_factuurregelaantal: 38 -- v_eenheid: 39 -- v_opdrachtregelid: 40 -- Eerst geprobeerd via nette array, geeft problemen met type buiten package, en in package lukt niet omdat -- de import in Facilitor package-loos is (en niet 1-2-3 zo kan worden gemaakt vanwege alle bestaande klanten) -- v_seq_of_columns ListOfInteger := (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40); -- Dus dan maar via een string, en ook op slimme wijze, nl alsof het een ingelezen factuur-record is met p_fielddelimitor v_seq_of_columns VARCHAR(255); -- Afwijkingen op deze volgorde zijn in eigen cust_import_factuur te regelen. -- Als leveranciersnr en factuurnr b.v. zijn omgedraaid in het CSV-formaat, -- dan factuurimport ListOfInteger := (2,1,3,4,5,6,7,8,9,10,11,12); -- v_seq_of_columns := '2;1;3;4;5;6;7;8;9;10;11;12'; -- Als leveranciersnr NIET in CSV staat, dan factuurimport ListOfInteger := (0,2,3,4,5,6,7,8,9,10,11,12); -- v_seq_of_columns := '0;2;3;4;5;6;7;8;9;10;11;12'; -- M.a.w. waar een 0 staat, wordt de variabele niet ingelezen en blijft LEEG. BEGIN v_seq_of_columns := '1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40'; fac_import_factuur_body(p_import_key, v_seq_of_columns); END; / CREATE OR REPLACE PROCEDURE fac_import_factuur_body (p_import_key IN NUMBER, p_seq_of_columns IN VARCHAR2 ) AS v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line v_field VARCHAR2 (100); v_fielddelimitor VARCHAR2 (2); v_errormsg VARCHAR (200); v_errorhint VARCHAR2 (200); v_count NUMBER(10); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); -- De velden op de eerste regel v_totbedrfact VARCHAR2 (100); v_totbedrfactvalue VARCHAR2 (100); -- De importvelden v_empty VARCHAR2 (100); v_debiteurnr VARCHAR2 (100); v_ordernr VARCHAR2 (100); v_leveranciernr VARCHAR2 (100); v_factuurnr VARCHAR2 (100); v_factuurdatum VARCHAR2 (100); v_aantal VARCHAR2 (100); v_kostprijs VARCHAR2 (100); v_btw VARCHAR2 (100); v_btw_bedrag VARCHAR2 (100); v_docid VARCHAR2 (255); v_locatie VARCHAR2 (100); v_afleverdatum VARCHAR2 (100); v_omschrijving VARCHAR2 (4000); v_opmerking VARCHAR2 (250); v_btw_verlegd VARCHAR2 (255); v_kenmerk1 VARCHAR2 (4000); v_kenmerk2 VARCHAR2 (4000); v_kenmerk3 VARCHAR2 (4000); v_kenmerk4 VARCHAR2 (4000); v_kenmerk5 VARCHAR2 (4000); v_kenmerk6 VARCHAR2 (4000); v_kenmerk7 VARCHAR2 (4000); v_kenmerk8 VARCHAR2 (4000); v_kenmerk9 VARCHAR2 (4000); v_kenmerk10 VARCHAR2 (4000); v_kenmerk11 VARCHAR2 (4000); v_kenmerk12 VARCHAR2 (4000); v_kenmerk13 VARCHAR2 (4000); v_kenmerk14 VARCHAR2 (4000); v_kenmerk15 VARCHAR2 (4000); v_kenmerk16 VARCHAR2 (4000); v_kenmerk17 VARCHAR2 (4000); v_kenmerk18 VARCHAR2 (4000); v_kenmerk19 VARCHAR2 (4000); v_kenmerk20 VARCHAR2 (4000); v_boekmaand VARCHAR2 (4000); v_artikelcode VARCHAR2(255); v_factuurregelaantal NUMBER(8,2); v_eenheid VARCHAR2(30); v_opdrachtregelid NUMBER(10); v_check_dec_sign NUMBER (5, 2); v_seq_of_columns VARCHAR2(255); v_colnr VARCHAR2 (2); v_colnr1 NUMBER; v_colnr2 NUMBER; v_colnr3 NUMBER; v_colnr4 NUMBER; v_colnr5 NUMBER; v_colnr6 NUMBER; v_colnr7 NUMBER; v_colnr8 NUMBER; v_colnr9 NUMBER; v_colnr10 NUMBER; v_colnr11 NUMBER; v_colnr12 NUMBER; v_colnr13 NUMBER; v_colnr14 NUMBER; v_colnr15 NUMBER; v_colnr16 NUMBER; v_colnr17 NUMBER; v_colnr18 NUMBER; v_colnr19 NUMBER; v_colnr20 NUMBER; v_colnr21 NUMBER; v_colnr22 NUMBER; v_colnr23 NUMBER; v_colnr24 NUMBER; v_colnr25 NUMBER; v_colnr26 NUMBER; v_colnr27 NUMBER; v_colnr28 NUMBER; v_colnr29 NUMBER; v_colnr30 NUMBER; v_colnr31 NUMBER; v_colnr32 NUMBER; v_colnr33 NUMBER; v_colnr34 NUMBER; v_colnr35 NUMBER; v_colnr36 NUMBER; v_colnr37 NUMBER; v_colnr38 NUMBER; v_colnr39 NUMBER; v_colnr40 NUMBER; CURSOR cfactuur IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; BEGIN -- Er kunnen al records in fac_imp_factuur zitten als meerdere XML-bestanden -- zijn ingelezen door UTILS\gen_import\gen_import.wsf die tegelijk worden -- verwerkt SELECT COALESCE(MAX(fac_imp_file_index), 0)+1 INTO v_count FROM fac_imp_factuur WHERE fac_import_key = p_import_key; -- Init v_fielddelimitor := fac.import_delimiter(p_import_key); v_seq_of_columns := p_seq_of_columns; v_errorhint := 'Bepalen volgorde kolommen'; -- De volgorde de te importeren kolommen in de CSV uitlezen uit v_seq_of_columns fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr1); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr2); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr3); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr4); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr5); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr6); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr7); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr8); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr9); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr10); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr11); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr12); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr13); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr14); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr15); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr16); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr17); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr18); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr19); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr20); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr21); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr22); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr23); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr24); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr25); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr26); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr27); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr28); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr29); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr30); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr31); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr32); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr33); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr34); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr35); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr36); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr37); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr38); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr39); fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr40); v_errorhint := 'Decimaal check'; -- check the client decimal settings -- we do not convert the , to a . if the client decimal separator is a , SELECT fac.safe_to_number ('2,5') INTO v_check_dec_sign FROM DUAL; FOR v_rec IN cfactuur LOOP BEGIN v_errorhint := 'Inlezen regel'; v_newline := v_rec.fac_imp_file_line; -- we gaan geen regels inlezen die geen informatie bevatten. IF LENGTH (v_newline) > 10 THEN v_errorhint := 'Inlezen leveranciernr kolom:' || v_colnr1; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr1), v_leveranciernr); v_errorhint := 'Inlezen factuurnr kolom:' || v_colnr2; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr2), v_factuurnr); v_errorhint := 'Inlezen factuurdatum kolom:' || v_colnr3; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr3), v_factuurdatum); v_errorhint := 'Inlezen ordernr kolom:' || v_colnr4; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr4), v_ordernr); v_errorhint := 'Inlezen locatie kolom:' || v_colnr5; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr5), v_locatie); v_errorhint := 'Inlezen afleverdatum kolom:' || v_colnr6; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr6), v_afleverdatum); v_errorhint := 'Inlezen omschrijving kolom:' || v_colnr7; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr7), v_omschrijving); v_errorhint := 'Inlezen aantal kolom:' || v_colnr8; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr8), v_aantal); v_errorhint := 'Inlezen kostprijs kolom:' || v_colnr9; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr9), v_kostprijs); v_errorhint := 'Inlezen btw_bedrag kolom:' || v_colnr10; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr10), v_btw_bedrag); v_errorhint := 'Inlezen btw kolom:' || v_colnr11; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr11), v_btw); v_errorhint := 'Inlezen docid kolom:' || v_colnr12; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr12), v_docid); v_errorhint := 'Inlezen debiteurnr kolom:' || v_colnr13; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr13), v_debiteurnr); v_errorhint := 'Inlezen opmerking kolom:' || v_colnr14; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr14), v_opmerking); v_errorhint := 'Inlezen btw_verlegd kolom:' || v_colnr15; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr15), v_btw_verlegd); v_errorhint := 'Inlezen kenmerk1 kolom:' || v_colnr16; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr16), v_kenmerk1); v_errorhint := 'Inlezen kenmerk2 kolom:' || v_colnr17; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr17), v_kenmerk2); v_errorhint := 'Inlezen kenmerk3 kolom:' || v_colnr18; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr18), v_kenmerk3); v_errorhint := 'Inlezen kenmerk4 kolom:' || v_colnr19; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr19), v_kenmerk4); v_errorhint := 'Inlezen kenmerk5 kolom:' || v_colnr20; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr20), v_kenmerk5); v_errorhint := 'Inlezen boekmaand kolom:' || v_colnr21; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr21), v_boekmaand); v_errorhint := 'Inlezen kenmerk6 kolom:' || v_colnr22; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr22), v_kenmerk6); v_errorhint := 'Inlezen kenmerk7 kolom:' || v_colnr23; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr23), v_kenmerk7); v_errorhint := 'Inlezen kenmerk8 kolom:' || v_colnr24; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr24), v_kenmerk8); v_errorhint := 'Inlezen kenmerk9 kolom:' || v_colnr25; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr25), v_kenmerk9); v_errorhint := 'Inlezen kenmerk10 kolom:' || v_colnr26; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr26), v_kenmerk10); v_errorhint := 'Inlezen kenmerk11 kolom:' || v_colnr27; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr27), v_kenmerk11); v_errorhint := 'Inlezen kenmerk12 kolom:' || v_colnr28; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr28), v_kenmerk12); v_errorhint := 'Inlezen kenmerk13 kolom:' || v_colnr29; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr29), v_kenmerk13); v_errorhint := 'Inlezen kenmerk14 kolom:' || v_colnr30; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr30), v_kenmerk14); v_errorhint := 'Inlezen kenmerk15 kolom:' || v_colnr31; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr31), v_kenmerk15); v_errorhint := 'Inlezen kenmerk16 kolom:' || v_colnr32; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr32), v_kenmerk16); v_errorhint := 'Inlezen kenmerk17 kolom:' || v_colnr33; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr33), v_kenmerk17); v_errorhint := 'Inlezen kenmerk18 kolom:' || v_colnr34; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr34), v_kenmerk18); v_errorhint := 'Inlezen kenmerk19 kolom:' || v_colnr35; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr35), v_kenmerk19); v_errorhint := 'Inlezen kenmerk20 kolom:' || v_colnr36; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr36), v_kenmerk20); v_errorhint := 'Inlezen factuurregel artikelcode kolom:' || v_colnr37; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr37), v_artikelcode); v_errorhint := 'Inlezen factuurregel aantal kolom:' || v_colnr38; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr38), v_factuurregelaantal); v_errorhint := 'Inlezen factuurregel eenheid kolom:' || v_colnr39; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr39), v_eenheid); v_errorhint := 'Inlezen factuurregel opdrachtregelid kolom:' || v_colnr40; fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr40), v_opdrachtregelid); IF v_check_dec_sign IS NULL THEN v_kostprijs := REPLACE (SUBSTR (v_kostprijs, 1, 15), ',', '.'); v_btw_bedrag := REPLACE (SUBSTR (v_btw_bedrag, 1, 15), ',', '.'); v_aantal := REPLACE (SUBSTR (v_aantal, 1, 10), ',', '.'); ELSE v_kostprijs := SUBSTR (v_kostprijs, 1, 15); v_btw_bedrag := SUBSTR (v_btw_bedrag, 1, 15); v_aantal := SUBSTR (v_aantal, 1, 10); END IF; -- Een (eventuele) header-regel willen we niet importeren -- ORDERNR lijkt een goede maatstaf, want die bevat de verwijzing -- naar onze BROC en moet aan conventies voldoen IF UPPER (v_ordernr) = 'ORDERNR' THEN -- de header, dus negeren NULL; ELSE INSERT INTO fac_imp_factuur ( fac_import_key, fac_imp_file_index, leveranciernr, ordernr, factuurnr, factuurdatum, aantal, kostprijs, btw, debiteurnr, locatie, afleverdatum, btw_bedrag, docid, omschrijving, opmerking, btw_verlegd, kenmerk1, kenmerk2, kenmerk3, kenmerk4, kenmerk5, kenmerk6, kenmerk7, kenmerk8, kenmerk9, kenmerk10, kenmerk11, kenmerk12, kenmerk13, kenmerk14, kenmerk15, kenmerk16, kenmerk17, kenmerk18, kenmerk19, kenmerk20, boekmaand, artikelcode, factuurregelaantal, eenheid, opdrachtregelid) VALUES ( v_rec.fac_import_key, v_count, UPPER (SUBSTR (v_leveranciernr, 1, 20)), SUBSTR (REPLACE(v_ordernr,' ',''), 1, 31), SUBSTR (v_factuurnr, 1, 30), SUBSTR (v_factuurdatum, 1, 10), SUBSTR (v_aantal, 1, 10), v_kostprijs, SUBSTR (v_btw, 1, 2), SUBSTR (v_debiteurnr, 1, 30), SUBSTR (v_locatie, 1, 30), SUBSTR (v_afleverdatum, 1, 10), v_btw_bedrag, SUBSTR (v_docid, 1, 255), SUBSTR (v_omschrijving, 1, 250), SUBSTR (v_opmerking, 1, 250), SUBSTR (v_btw_verlegd, 1, 3), SUBSTR (v_kenmerk1, 1, 4000), SUBSTR (v_kenmerk2, 1, 4000), SUBSTR (v_kenmerk3, 1, 4000), SUBSTR (v_kenmerk4, 1, 4000), SUBSTR (v_kenmerk5, 1, 4000), SUBSTR (v_kenmerk6, 1, 4000), SUBSTR (v_kenmerk7, 1, 4000), SUBSTR (v_kenmerk8, 1, 4000), SUBSTR (v_kenmerk9, 1, 4000), SUBSTR (v_kenmerk10, 1, 4000), SUBSTR (v_kenmerk11, 1, 4000), SUBSTR (v_kenmerk12, 1, 4000), SUBSTR (v_kenmerk13, 1, 4000), SUBSTR (v_kenmerk14, 1, 4000), SUBSTR (v_kenmerk15, 1, 4000), SUBSTR (v_kenmerk16, 1, 4000), SUBSTR (v_kenmerk17, 1, 4000), SUBSTR (v_kenmerk18, 1, 4000), SUBSTR (v_kenmerk19, 1, 4000), SUBSTR (v_kenmerk20, 1, 4000), SUBSTR (v_boekmaand, 1, 7), SUBSTR (v_artikelcode, 1, 30), v_factuurregelaantal, SUBSTR (v_eenheid, 1, 30), v_opdrachtregelid ); v_count := v_count + 1; END IF; COMMIT; END IF; END; END LOOP; DELETE fac_imp_file WHERE fac_import_key = p_import_key; EXCEPTION WHEN OTHERS THEN oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := ' ORACLE (error ' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint); END; / CREATE OR REPLACE PROCEDURE fac_update_factuur (p_import_key IN NUMBER) AS -- In cursor cfactuur is alles mooi getrimmed. NB: de sortering is cruciaal! CURSOR cfactuurregel IS SELECT leveranciernr, ordernr, factuurnr, factuurdatum, fac.safe_to_number (aantal) aantal, fac.safe_to_number (kostprijs) kostprijs, fac.safe_to_number (btw) btw, fac.safe_to_number (btw_bedrag) btw_bedrag, debiteurnr, locatie, afleverdatum, docid, omschrijving, opmerking, btw_verlegd, boekmaand, artikelcode, factuurregelaantal, eenheid, opdrachtregelid, fac_import_key, fac_imp_file_index FROM fac_imp_factuur WHERE fac_import_key = p_import_key ORDER BY factuurnr, ordernr DESC, fac_imp_file_index; c_i NUMBER; c_factuur_record_is_added BOOLEAN; c_succeeded BOOLEAN; c_factuur_key NUMBER; c_factuurregel NUMBER; c_fac_type VARCHAR2 (1); c_prefix VARCHAR2 (3); c_ordernr_index NUMBER; c_ordernr_s1 VARCHAR2 (20); c_ordernr_s2 VARCHAR2 (20); c_ordernr_t VARCHAR2 (40); c_old_ordernr fac_imp_factuur.ordernr%TYPE; c_factuur_nr fac_imp_factuur.factuurnr%TYPE; c_old_factuurnr fac_imp_factuur.factuurnr%TYPE; c_fin_factuur_datum fin_factuur.fin_factuur_datum%TYPE; c_write_ordernr VARCHAR2 (20); c_bestelopdr_id VARCHAR2 (20); c_totaal NUMBER; c_fact_totaal NUMBER; c_factuur_totaal NUMBER; c_factuur_btw NUMBER; c_factuur_statuses_key fin_factuur.fin_factuur_statuses_key%TYPE; c_kostprijs fin_factuurregel.fin_factuurregel_totaal%TYPE; c_btwtabel_key fin_btwtabel.fin_btwtabel_key%TYPE; c_boekmaand fin_factuur.fin_factuur_boekmaand%TYPE; c_artikelcode fin_factuurregel.fin_factuurregel_code%TYPE; c_factuurregelaantal fin_factuurregel.fin_factuurregel_aantal%TYPE; c_eenheid fin_factuurregel.fin_factuurregel_eenheid%TYPE; c_opdrachtregelid fin_factuurregel.fin_factuurregel_id%TYPE; c_find BOOLEAN; c_find_ordernr BOOLEAN; c_mld_opdr_key NUMBER (10); c_cnt_contract_key NUMBER (10); c_bes_bestelopdr_key NUMBER (10); c_prs_perslid_key_user NUMBER(10); c_prs_kostensoort_key NUMBER(10); c_btw_verlegd NUMBER(1); c_fin_factuurregel_key NUMBER(10); c_prs_bedrijf_naam VARCHAR2 (100); c_opmerking VARCHAR2 (1000); -- maar wordt uiteindelijk getruct naar fin_factuur_opmerking%type (250) v_errormsg VARCHAR (200); oracle_err_mes VARCHAR2 (150); -- Het datumformaat mag een van de volgende zijn: -- 1) dd-mm-yyyy of dd/mm/yyyy -- 2) yyyy-mm-dd of yyyy/mm/dd -- 3) ddmmyyyy of (dd-mm-yy of dd/mm/yy) -- 4) ddmmyy -- Indien geen van bovenstaand datumformaat of ongeldig datumformaat, -- dan indien p_wheninvalid_sysdate = TRUE, dan wordt de huidige systeemdatum opgeleverd, -- en anders de lege waarde (NULL-value). FUNCTION try_getdatum (p_c_datum IN VARCHAR2, p_wheninvalid_sysdate IN BOOLEAN) RETURN DATE AS c_dd VARCHAR2 (2); c_mm VARCHAR2 (2); c_yyyy VARCHAR2 (4); c_yy VARCHAR2 (2); v_c_datum VARCHAR2 (10); p_d_datum DATE; BEGIN -- plaats een voorloopnul als deze door Excel verwijderd is. IF length(p_c_datum) = 7 THEN v_c_datum := '0' || p_c_datum; ELSE v_c_datum := p_c_datum; END IF; p_d_datum := NULL; IF LENGTH(v_c_datum) = 10 THEN IF ((SUBSTR(v_c_datum,3,1) = '-' AND SUBSTR(v_c_datum,6,1) = '-') OR (SUBSTR(v_c_datum,3,1) = '/' AND SUBSTR(v_c_datum,6,1) = '/')) THEN -- Formaat 1) dd-mm-yyyy of dd/mm/yyyy c_dd := SUBSTR(v_c_datum, 1,2); c_mm := SUBSTR(v_c_datum, 4,2); c_yyyy := SUBSTR(v_c_datum, 7,4); ELSIF ((SUBSTR(v_c_datum,5,1) = '-' AND SUBSTR(v_c_datum,8,1) = '-') OR (SUBSTR(v_c_datum,5,1) = '/' AND SUBSTR(v_c_datum,8,1) = '/')) THEN -- Formaat 2) yyyy-mm-dd of yyyy/mm/dd c_dd := SUBSTR(v_c_datum, 9,2); c_mm := SUBSTR(v_c_datum, 6,2); c_yyyy := SUBSTR(v_c_datum, 1,4); END IF; ELSIF LENGTH(v_c_datum) = 8 THEN -- Formaat 3) ddmmyyyy of dd-mm-yy of dd/mm/yy IF ((SUBSTR(v_c_datum,3,1) = '-' AND SUBSTR(v_c_datum,6,1) = '-') OR (SUBSTR(v_c_datum,3,1) = '/' AND SUBSTR(v_c_datum,6,1) = '/')) THEN -- dd-mm-yy of dd/mm/yy c_dd := SUBSTR(v_c_datum, 1,2); c_mm := SUBSTR(v_c_datum, 4,2); c_yyyy := SUBSTR(v_c_datum, 7,2); ELSE -- Formaat 3) ddmmyyyy c_dd := SUBSTR(v_c_datum, 1,2); c_mm := SUBSTR(v_c_datum, 3,2); c_yyyy := SUBSTR(v_c_datum, 5,4); END IF; ELSIF LENGTH(v_c_datum) = 6 THEN -- Formaat 4) ddmmyy c_dd := SUBSTR(v_c_datum, 1,2); c_mm := SUBSTR(v_c_datum, 3,2); c_yyyy := SUBSTR(v_c_datum, 5,2); END IF; BEGIN IF LENGTH(c_yyyy)=2 THEN SELECT SUBSTR(TO_CHAR(SYSDATE,'YYYY'),1,2) INTO c_yy FROM DUAL; c_yyyy := c_yy || c_yyyy; END IF; SELECT TO_DATE (c_yyyy || '-' || c_mm || '-' || c_dd || ' 00:00', 'YYYY-MM-DD HH24:MI') INTO p_d_datum FROM DUAL; -- controleer of we toch een geldige datum hebben. Oracle vind 12-12-0006 ook geldig. IF p_d_datum NOT BETWEEN TO_DATE('20000101', 'yyyymmdd') AND TO_DATE('20991231', 'yyyymmdd') THEN IF p_wheninvalid_sysdate THEN BEGIN SELECT TRUNC(SYSDATE) INTO p_d_datum FROM DUAL; EXCEPTION WHEN OTHERS THEN p_d_datum := NULL; END; ELSE p_d_datum := NULL; END IF; END IF; EXCEPTION WHEN OTHERS THEN IF p_wheninvalid_sysdate THEN BEGIN SELECT TRUNC(SYSDATE) INTO p_d_datum FROM DUAL; EXCEPTION WHEN OTHERS THEN p_d_datum := NULL; END; ELSE p_d_datum := NULL; END IF; END; RETURN(p_d_datum); END; FUNCTION try_getcontract_id (p_broc_nr IN VARCHAR2, p_leverancier_nr IN VARCHAR2, p_factuur_datum IN DATE) RETURN NUMBER AS c_prefix1 VARCHAR2 (1); c_contract_nr VARCHAR2 (20); p_broc_key NUMBER(10); BEGIN p_broc_key := NULL; c_prefix1 := SUBSTR (p_broc_nr, 1, 1); IF (ASCII (c_prefix1) = 67 OR ASCII (c_prefix1) = 99) THEN BEGIN -- Haal prefix 'C' of 'c' eraf c_contract_nr := SUBSTR (p_broc_nr, 2); IF INSTR(p_broc_nr, '.') = 0 THEN BEGIN -- Het laatste contract met de hoogste versie nummer opvragen. -- Er kunnen meerdere contracten zijn met dezelfde contract_key, maar met verschillende versies. -- Het contract met de hoogste versie is de laatste. SELECT cnt_contract_key INTO p_broc_key FROM cnt_contract WHERE cnt_contract_verwijder IS NULL AND cnt_contract_status = 0 AND cnt_contract_nummer_intern = c_contract_nr; EXCEPTION WHEN TOO_MANY_ROWS THEN BEGIN -- Meerdere versies gevonden; ga specifieker zoeken -- Bij overlappende contracten; pak het oudste contract SELECT cnt_contract_key INTO p_broc_key FROM (SELECT cnt_contract_key FROM cnt_contract WHERE cnt_contract_verwijder IS NULL AND cnt_contract_status = 0 AND cnt_contract_nummer_intern = c_contract_nr AND p_factuur_datum BETWEEN cnt_contract_looptijd_van AND cnt_contract_looptijd_tot ORDER BY cnt_contract_looptijd_van ASC) WHERE ROWNUM = 1; EXCEPTION WHEN NO_DATA_FOUND THEN BEGIN -- Geen contract gevonden waarbinnen deze factuurdatum valt -- Zoek het contract wat het recentst (mbt de factuurdatum) is afgelopen SELECT cnt_contract_key INTO p_broc_key FROM (SELECT cnt_contract_key FROM cnt_contract WHERE cnt_contract_verwijder IS NULL AND cnt_contract_status = 0 AND cnt_contract_nummer_intern = c_contract_nr AND cnt_contract_looptijd_tot <= p_factuur_datum ORDER BY cnt_contract_looptijd_tot DESC) WHERE ROWNUM = 1; EXCEPTION WHEN NO_DATA_FOUND THEN -- Geen contract gevonden met een einddatum die ligt voor de factuurdatum -- Dan ligt de factuurdatum dus voor de startdatum van de eerste contract-versie; pak het eerste contract SELECT cnt_contract_key INTO p_broc_key FROM (SELECT cnt_contract_key FROM cnt_contract WHERE cnt_contract_verwijder IS NULL AND cnt_contract_status = 0 AND cnt_contract_nummer_intern = c_contract_nr ORDER BY cnt_contract_looptijd_van) WHERE ROWNUM = 1; END; END; END; ELSE -- Exact dit contract en versie. SELECT cnt_contract_key INTO p_broc_key FROM cnt_contract WHERE cnt_contract_verwijder IS NULL AND cnt_contract_status = 0 AND cnt_contract_nummer_intern || '.' || COALESCE(cnt_contract_versie, '0') = c_contract_nr; END IF; EXCEPTION WHEN OTHERS THEN p_broc_key := NULL; END; END IF; RETURN p_broc_key; END; FUNCTION try_getopdracht_id (p_broc_nr IN VARCHAR2, p_leverancier_nr IN VARCHAR2) RETURN NUMBER AS c_prefix1 VARCHAR2 (1); -- Ter bepaling van de positie van de slash in bron-nr c_index NUMBER; c_slash_index NUMBER; -- Opdrachtnr voor de slash -- 200 is overkill voor een geldige referentie maar voorkomt een ORA -06502 op te lange ongeldige referenties c_broc_s1 VARCHAR2 (200); -- Opdrachtnr na de slash c_broc_s2 VARCHAR2 (200); p_broc_key NUMBER(10); BEGIN p_broc_key := NULL; c_index := 1; c_prefix1 := SUBSTR (p_broc_nr, c_index, 1); IF ( ( (ASCII (c_prefix1) >= 65 AND ASCII (c_prefix1) <= 90) OR (ASCII (c_prefix1) >= 97 AND ASCII(c_prefix1) <= 122)) AND ASCII (c_prefix1) != 67 AND ASCII (c_prefix1) != 99) THEN -- Eerste karakter is een letter -- Heeft opdrachtnr nog meer aan prefix? c_index := 2; c_prefix1 := SUBSTR (p_broc_nr, c_index, 1); IF ( (ASCII (c_prefix1) >= 65 AND ASCII (c_prefix1) <= 90) OR (ASCII (c_prefix1) >= 97 AND ASCII(c_prefix1) <= 122)) THEN -- Eerste 2 karakter zijn letters -- Heeft opdrachtnr nog meer aan prefix? c_index := 3; c_prefix1 := SUBSTR (p_broc_nr, c_index, 1); IF ( (ASCII (c_prefix1) >= 65 AND ASCII (c_prefix1) <= 90) OR (ASCII (c_prefix1) >= 97 AND ASCII(c_prefix1) <= 122)) THEN -- Opdracht heeft prefix van 3 letters. c_index := 4; END IF; END IF; c_slash_index := INSTR (p_broc_nr, '/'); IF c_slash_index = 0 THEN c_broc_s1 := SUBSTR (p_broc_nr, c_index); c_broc_s2 := ''; ELSE c_broc_s1 := SUBSTR (p_broc_nr, c_index, c_slash_index - c_index); c_broc_s2 := SUBSTR (p_broc_nr, c_slash_index + 1); END IF; BEGIN SELECT o.mld_opdr_key INTO p_broc_key FROM mld_opdr o, mld_typeopdr mto WHERE o.mld_typeopdr_key = mto.mld_typeopdr_key AND mto.mld_typeopdr_kosten = 1 AND o.mld_statusopdr_key NOT IN (1, 2, 3, 10) AND o.mld_melding_key = fac.safe_to_number (c_broc_s1) AND o.mld_opdr_bedrijfopdr_volgnr = fac.safe_to_number (c_broc_s2); EXCEPTION WHEN OTHERS THEN p_broc_key := NULL; END; END IF; RETURN p_broc_key; END; -- Function to extract a valid reference from a string by removing any leading or trailing text. -- A valid reference consists of: -- - An optional prefix of up to 3 letters, -- - Followed by 1 to 10 digits, -- - Optionally followed by a slash and a sequence number (e.g., ST0123456/2). -- Examples: -- 'C12345 Somecomments' -> 'C12345' -- 'Sometext C12345' -> 'C12345' -- 'SometextC12345' -> 'xtC12345' (!) -- 'ST0123456/2 extra' -> 'ST0123456/2' FUNCTION sanitizereferentiestring (p_broc_nr IN VARCHAR2) RETURN VARCHAR2 AS cleaner_broc_nr fac_imp_factuur.ordernr%TYPE; BEGIN -- Extract pattern: up to 3 letters, 1-10 digits, optional /digits cleaner_broc_nr := REGEXP_SUBSTR (p_broc_nr, '([A-Za-z]{0,3}\d{1,10}(\/\d+)?)', 1); IF cleaner_broc_nr IS NULL THEN cleaner_broc_nr := p_broc_nr; END IF; RETURN cleaner_broc_nr; END; FUNCTION try_getbestelling_id (p_broc_nr IN VARCHAR2, p_leverancier_nr IN VARCHAR2) RETURN NUMBER AS p_broc_key NUMBER(10); BEGIN p_broc_key := NULL; BEGIN SELECT bes_bestelopdr_key INTO p_broc_key FROM bes_bestelopdr WHERE bes_bestelopdr_id = p_broc_nr; EXCEPTION WHEN OTHERS THEN p_broc_key := NULL; END; RETURN p_broc_key; END; -- Getfactype's levert van een gegevens opdrachtnummer p_broc_nr de key op van: -- de bestelopdracht (p_bkey), meldingopdracht (p_okey) of contract (p_ckey). -- Deze werking is gebaseerd op volgende randvoorwaarden cq. eisen cq. instellingen: -- 1) Contractnummer wordt geprefixed door 'c' (of 'C'). -- 2) Meldingen worden geprefixed door minimaal 1 letter (let op: dus GEEN!!! cijfer(s)). -- 3) De prefix van melding (vakgroeptype) mag geen c (of C) zijn -- 4) Bestellingen worden niet geprefixed (we kunnen hier de setting bes_bestelopdr_prefix in default.inc niet uitlezen, -- of we moeten die instelling ombuigen tot een DB-setting (fac_setting?) -- 5) De prefix-instelling mag tussentijds (nadat een opdracht uitgegeven) niet worden gewijzigd. PROCEDURE get_fin_factuur_referentie (p_broc_nr IN VARCHAR2, p_leverancier_nr IN VARCHAR2, p_factuur_datum IN DATE, p_ckey IN OUT NUMBER, p_okey IN OUT NUMBER, p_bkey IN OUT NUMBER) IS sanitized_broc_nr fac_imp_factuur.ordernr%TYPE; BEGIN p_ckey:=NULL; p_okey:=NULL; p_bkey:=NULL; sanitized_broc_nr := sanitizereferentiestring (p_broc_nr); IF LENGTH (sanitized_broc_nr) > 0 THEN p_ckey := try_getcontract_id (sanitized_broc_nr, p_leverancier_nr, p_factuur_datum); IF p_ckey IS NULL THEN p_okey := try_getopdracht_id (sanitized_broc_nr, p_leverancier_nr); IF p_okey IS NULL THEN p_bkey := try_getbestelling_id (sanitized_broc_nr, p_leverancier_nr); END IF; END IF; END IF; END; FUNCTION try_getkostensoort (p_ckey IN NUMBER, p_okey IN NUMBER, p_bkey IN NUMBER) RETURN NUMBER IS -- Kostensoort bij de bestelling -- bestelopdracht->bestelopdritems->bestelitem->srtdeel->srtgroep[->discipline] CURSOR c_bes_kostensoort IS SELECT DISTINCT COALESCE(isg.prs_kostensoort_key, itd.prs_kostensoort_key) prs_kostensoort_key, count(*) aant_art FROM bes_bestelling_item bi, bes_srtdeel isd, bes_srtgroep isg, ins_tab_discipline itd, bes_bestelopdr_item boi, bes_bestelopdr bo WHERE bi.bes_srtdeel_key = isd.bes_srtdeel_key AND isd.bes_srtgroep_key = isg.bes_srtgroep_key AND isg.ins_discipline_key = itd.ins_discipline_key AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key AND bo.bes_bestelopdr_key = p_bkey GROUP BY COALESCE(isg.prs_kostensoort_key, itd.prs_kostensoort_key) ORDER BY aant_art DESC; CURSOR c_mld_kostensoort IS SELECT COALESCE(std.prs_kostensoort_key, id.prs_kostensoort_key) prs_kostensoort_key FROM mld_opdr o, ins_tab_discipline id, mld_stdmelding std, mld_melding m WHERE id.ins_discipline_key = std.mld_ins_discipline_key AND std.mld_stdmelding_key = m.mld_stdmelding_key AND m.mld_melding_key = o.mld_melding_key AND o.mld_opdr_key = p_okey; CURSOR c_cnt_kostensoort IS SELECT COALESCE (c.prs_kostensoort_key,id.prs_kostensoort_key) prs_kostensoort_key FROM cnt_contract c, ins_tab_discipline id WHERE id.ins_discipline_key = c.ins_discipline_key AND c.cnt_contract_key = p_ckey; p_prs_kostensoort_key NUMBER(10); BEGIN p_prs_kostensoort_key:=NULL; BEGIN -- De strategie is om bij de categorie de meeste waarschijnlijke default ks te vinden -- kennelijk IF p_bkey IS NOT NULL THEN -- Kostensoort is te zoeken bij de bestelopdracht FOR rc IN c_bes_kostensoort LOOP p_prs_kostensoort_key := rc.prs_kostensoort_key; EXIT WHEN p_prs_kostensoort_key IS NOT NULL; END LOOP; ELSIF p_okey IS NOT NULL THEN -- Kostensoort is te zoeken bij de meldingopdracht FOR rc IN c_mld_kostensoort LOOP p_prs_kostensoort_key := rc.prs_kostensoort_key; EXIT WHEN p_prs_kostensoort_key IS NOT NULL; END LOOP; ELSIF p_ckey IS NOT NULL THEN -- Kostensoort is te zoeken bij contract FOR rc IN c_cnt_kostensoort LOOP p_prs_kostensoort_key := rc.prs_kostensoort_key; EXIT WHEN p_prs_kostensoort_key IS NOT NULL; END LOOP; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN p_prs_kostensoort_key := NULL; END; RETURN(p_prs_kostensoort_key); END; FUNCTION try_getrefdatum (p_fin_defaultboekmaand_opdr IN NUMBER, p_fin_defaultboekmaand_cnt IN NUMBER, p_ckey IN NUMBER, p_okey IN NUMBER, p_bkey IN NUMBER, p_fin_factuur_datum IN DATE) RETURN DATE IS refdatum DATE; BEGIN refdatum := NULL; BEGIN IF p_bkey IS NOT NULL AND p_fin_defaultboekmaand_opdr IN (2, 3) THEN SELECT CASE WHEN p_fin_defaultboekmaand_opdr = 2 THEN bes_bestelopdr_datum ELSE bes_bestelopdr_leverdatum END INTO refdatum FROM bes_bestelopdr bo WHERE bo.bes_bestelopdr_key = p_bkey; ELSIF p_okey IS NOT NULL AND p_fin_defaultboekmaand_opdr IN (2, 3) THEN SELECT CASE WHEN p_fin_defaultboekmaand_opdr = 2 THEN mld_opdr_datumbegin ELSE mld_opdr_einddatum END INTO refdatum FROM mld_opdr o WHERE o.mld_opdr_key = p_okey; ELSIF p_ckey IS NOT NULL AND p_fin_defaultboekmaand_cnt = 2 THEN refdatum := p_fin_factuur_datum; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN refdatum := NULL; END; RETURN(refdatum); END; -- Bepaalt of het BTW-tarief standaard (0), verlegd(1) of vrijgesteld(2) is, of ongeldig FUNCTION try_getbtw_verlegd (p_btw_verlegd IN VARCHAR2) RETURN NUMBER IS BEGIN IF UPPER(p_btw_verlegd) = 'JA' OR p_btw_verlegd = '1' THEN RETURN (1); ELSIF p_btw_verlegd IS NULL OR UPPER(p_btw_verlegd) = 'NEE' OR p_btw_verlegd = '0' THEN RETURN (0); ELSIF UPPER(p_btw_verlegd) = 'VRI' OR p_btw_verlegd = '2' -- VRIJ, maar de kolom is maar 3 breed THEN RETURN (2); ELSE c_opmerking := c_opmerking || CHR(13) || 'BTW-type is onbekend ('|| p_btw_verlegd ||')'; c_factuur_statuses_key := 3; -- Incompleet RETURN (0); END IF; END; -- Bepaalt het BTW-tarief (=btwtabelwaarde_key), gegeven (XOR) of het btw-tarief 'p_btw', -- of aan de hand de kosten 'pkosten' + het btwbedrag 'p_btwbedrag' -- Daarbij wordt de volgende hanteerwijze toegepast: -- 1) Als btw-tarief bekend is, is deze leidend. Ook al is btw-bedrag bekend, dan nog is tarief leidend. -- Mocht het BTW-tarief niet in de btwtabelwaarde voorkomen, maar wel het BTW-tarief dat wordt afgeleid uit het BTW-bedrag, -- dan en alleen in dat geval wordt het btw-bedrag leidend. -- Mocht in het uiterste geval ook dan het btw-tarief niet in de tabel voorkomen, dan wordt de lege waarde (NULL) opgeleverd. -- 2) Als btw-tarief NIET bekend is, maar btw-bedrag en kosten wel, dan wordt het btw-tarief omgekeerd berekend. -- Mocht het btw-tarief niet in de btw-tabel voorkomen, dan wordt de lege waarde (NULL) opgeleverd. FUNCTION try_getbtwtabelwaarde_key (p_btw IN NUMBER, p_kosten IN NUMBER, p_btwbedrag IN NUMBER, p_btwtabel_key IN NUMBER, p_btw_verlegd IN NUMBER) RETURN NUMBER IS p_btwtabelwaarde_key NUMBER(10); BEGIN p_btwtabelwaarde_key := NULL; IF p_btw IS NOT NULL THEN -- Regel 1): btw-tarief is bekend, dus deze zou leidend moeten zijn (tenzij een niet bestaande)... p_btwtabelwaarde_key := fin.getbtwtabelwaardekey_perc(p_btw, p_btwtabel_key, p_btw_verlegd); END IF; IF p_btwtabelwaarde_key IS NULL THEN -- Hier geldt dat: of p_btw is niet meegegeven, of dat -- p_btw wel is meegegeven maar dat het BTW-tarief kan niet in de BTW-tabel worden gevonden !!! -- Dit laatste zou eigenlijk niet mogen voorkomen, maar tja, dan proberen we het via de kosten en BTW-bedrag. IF (p_kosten IS NOT NULL AND p_btwbedrag IS NOT NULL) THEN -- Regel 2): btw-tarief is NIET bekend of ONGELDIG, dan a.d.h.v. btw-bedrag en kosten... p_btwtabelwaarde_key := fin.getbtwtabelwaardekey(p_kosten, p_btwbedrag, p_btwtabel_key, p_btw_verlegd); END IF; END IF; RETURN(p_btwtabelwaarde_key); END; -- Retourneert het fin_kenmerk_key van kenmerktype "X" (bestand) als volgt: -- 1) Eerst kijken of in fac_setting het kenmerk is geconfigureerd (obv tag 'fin_import_fin_kenmerk_bestand') -- 2) Dan via poging 2: via fin_kenmerk met type = "X" (en indien meerdere, het laagste volgnummer) FUNCTION try_getbestand_fin_kenmerk_key RETURN NUMBER IS CURSOR curs_fin_kenmerk IS SELECT fin_kenmerk_key FROM fin_kenmerk k WHERE k.fin_kenmerk_kenmerktype = 'X' AND fin_kenmerk_verwijder IS NULL ORDER BY fin_kenmerk_volgnr; lkey NUMBER(10); BEGIN BEGIN -- Eerst poging 1, via fac_setting --SELECT fac.getSetting('fin_import_fin_kenmerk_bestand') --INTO lkey --FROM DUAL; --IF lkey IS NULL --THEN -- Dan via poging 2: via fin_kenmerk met type = "X" (en indien meerdere, het laagste volgnummer) FOR rc IN curs_fin_kenmerk LOOP lkey := rc.fin_kenmerk_key; EXIT WHEN lkey IS NOT NULL; END LOOP; --END IF; EXCEPTION WHEN OTHERS THEN lkey := NULL; END; RETURN lkey; END; PROCEDURE try_insert_factuur_docid(p_factuur_key IN NUMBER, p_docid IN VARCHAR2) IS lkey NUMBER(10); BEGIN IF p_docid IS NOT NULL THEN -- Document/bestand is gevuld met een waarde, dus we zetten deze in de flexprop 'Factuurbestand' -- Dit flexprop wordt gevonden door de functie try_getbestand_fin_kenmerk_key. lkey := try_getbestand_fin_kenmerk_key(); IF lkey IS NOT NULL THEN BEGIN -- Ook is het flexprop gevonden, nu volgt de insert in fin_kenmerkfactuur INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde) VALUES (p_factuur_key, lkey, p_docid); EXCEPTION WHEN OTHERS THEN lkey := NULL; END; END IF; END IF; END; PROCEDURE try_insert_factuurregel(c_factuur_key IN NUMBER, c_factuurregel IN NUMBER, c_kostprijs IN NUMBER, c_btw IN NUMBER, c_btw_bedrag IN NUMBER, c_btwtabel_key IN NUMBER, c_fac_import_key IN NUMBER, c_fac_imp_file_index IN NUMBER, c_omschrijving IN VARCHAR2, c_locatie IN VARCHAR2, c_btw_verlegd IN NUMBER, c_artikelcode IN VARCHAR2, c_factuurregelaantal IN NUMBER, c_eenheid IN VARCHAR2, c_opdrachtregelid IN NUMBER, c_factuur_statuses_key IN OUT NUMBER, c_opmerking IN OUT VARCHAR2, c_succeeded IN OUT BOOLEAN) IS c_btwtabelwaarde_key NUMBER(10); l_btwbedrag fin_factuurregel.fin_factuurregel_btw%TYPE; l_kostprijs fin_factuurregel.fin_factuurregel_totaal%TYPE; BEGIN l_kostprijs := c_kostprijs; c_succeeded := FALSE; IF l_kostprijs IS NULL THEN -- Kostprijs is niet gevonden, of er zat een ongeldig karakters in (b.v. letter, of euro-teken). c_opmerking := c_opmerking || CHR(13) || 'Leeg of fout bedrag (exBTW) bij regel ' || c_factuurregel || ': is op 0 gezet'; l_kostprijs := 0; c_factuur_statuses_key := 3; -- Incompleet END IF; c_btwtabelwaarde_key := try_getbtwtabelwaarde_key(c_btw, l_kostprijs, c_btw_bedrag, c_btwtabel_key, c_btw_verlegd); IF c_btwtabelwaarde_key IS NULL THEN -- BTW-tarief is onbekend of niet gevonden volgens de BTW-tabel, we hanteren het 0-tarief c_btwtabelwaarde_key := fin.getbtwtabelwaardekey_perc(0, c_btwtabel_key, c_btw_verlegd); IF c_btwtabelwaarde_key IS NULL THEN c_opmerking := c_opmerking || CHR(13) || 'BTW-percentage ' || c_btw || ' % bij regel ' || c_factuurregel || ': ongeldig en kan niet worden toegevoegd'; ELSE c_opmerking := c_opmerking || CHR(13) || 'BTW-percentage ' || c_btw || ' % bij regel ' || c_factuurregel || ': ongeldig en is op 0 gezet'; END IF; c_factuur_statuses_key := 3; -- Incompleet END IF; IF (l_kostprijs IS NOT NULL AND c_btwtabelwaarde_key IS NOT NULL) THEN l_btwbedrag := fin.getbtw_bedrag(l_kostprijs, c_btwtabelwaarde_key); IF ABS(ROUND(l_btwbedrag,2) - ROUND(c_btw_bedrag,2)) > fac.safe_to_number(fac.getsetting('fin_import_btwmarge')) THEN c_opmerking := c_opmerking || CHR(13) || 'BTW-bedrag bij regel ' || c_factuurregel || ': is op ' || l_btwbedrag || ' gezet'; c_factuur_statuses_key := 3; -- Incompleet ELSIF c_btw_bedrag IS NOT NULL THEN l_btwbedrag := c_btw_bedrag; -- wel alle decimalen behouden END IF; INSERT INTO fin_factuurregel ( fin_factuur_key, fin_factuurregel_nr, fin_factuurregel_totaal, fin_factuurregel_btw, fin_factuurregel_omschrijving, fin_factuurregel_referentie, fin_btwtabelwaarde_key, fin_factuurregel_code, fin_factuurregel_aantal, fin_factuurregel_eenheid, fin_factuurregel_id) VALUES (c_factuur_key, c_factuurregel, l_kostprijs, l_btwbedrag, c_omschrijving, c_locatie, c_btwtabelwaarde_key, c_artikelcode, c_factuurregelaantal, c_eenheid, c_opdrachtregelid) RETURNING fin_factuurregel_key INTO c_fin_factuurregel_key; -- Voor CUST-postprocessing (van de kenmerken) is het handig te onthouden: UPDATE fac_imp_factuur SET fin_factuurregel_key = c_fin_factuurregel_key WHERE fac_import_key = c_fac_import_key AND fac_imp_file_index = c_fac_imp_file_index; c_succeeded := TRUE; COMMIT; END IF; EXCEPTION WHEN OTHERS THEN c_factuur_statuses_key := 3; c_succeeded := FALSE; END; PROCEDURE fin_factuur_finalupdate(c_factuur_key IN NUMBER, c_opmerking IN VARCHAR2, c_factuur_statuses_key IN NUMBER) IS l_opmerking VARCHAR2(1000); l_factuur_totaal_btw fin_factuur.fin_factuur_totaal_btw%TYPE; BEGIN l_opmerking := c_opmerking; -- De nabewerking op het vorige record kan hier plaatsvinden IF c_factuur_statuses_key = 3 THEN fac.trackaction ('FINNEW', c_factuur_key, NULL, NULL, lcl.l('lcl_fin_imp_bad')); l_opmerking := lcl.l('lcl_fin_imp_errors') || TO_CHAR(SYSDATE,'dd-mm-yyyy') || CHR(13) || '----' || l_opmerking; ELSE fac.trackaction ('FINNEW', c_factuur_key, NULL, NULL, lcl.l('lcl_fin_imp_good')); -- l_opmerking := lcl.l('lcl_fin_imp_success') || TO_CHAR(SYSDATE,'dd-mm-yyyy'); END IF; -- Btw tarief kan niet gevonden zijn. In dat geval is 0% genomen. Dan klopt het totaal_btw niet meer. -- Daarom wordt totaal_btw opnieuw berekend en gevuld. SELECT SUM (fin_factuurregel_btw) INTO l_factuur_totaal_btw FROM fin_factuurregel WHERE fin_factuur_key = c_factuur_key; -- Factuur toevoegen met als bron=1 (Excel/bulk) UPDATE fin_factuur SET fin_factuur_statuses_key = c_factuur_statuses_key, fin_factuur_bron = 1, fin_factuur_opmerking = SUBSTR(l_opmerking , 1, 250), fin_factuur_totaal_btw = COALESCE(l_factuur_totaal_btw,0) WHERE fin_factuur_key = c_factuur_key; EXCEPTION WHEN OTHERS THEN NULL; END; --- *** START VAN DE HOOFDPROCEDURE *** --- --- *** START VAN DE HOOFDPROCEDURE *** --- --- *** START VAN DE HOOFDPROCEDURE *** --- BEGIN c_old_ordernr := ''; c_old_factuurnr := ''; -- Factuur(regels) stuk voor stuk op volgorde van opdracht en factuurnummer afwerken... FOR rc IN cfactuurregel LOOP -- Check: Nieuwe factuur, dwz eerste regel of overgang naar nieuw factuurnummer+opdrachtnr, of nog dezelfde IF (rc.ordernr = c_old_ordernr AND (rc.factuurnr = c_old_factuurnr OR (rc.factuurnr IS NULL AND c_old_factuurnr IS NULL))) THEN -- Hier dus nog dezelfde factuurnr+opdrachtnr -- Voeg alleen nieuwe factuurregel toe, indien de factuur kon worden toegevoegd (c_factuur_record_is_added = TRUE) IF c_factuur_record_is_added THEN -- Er is dus een bijbehorende correcte factuur(record) aangemaakt, dus volgende factuurregel kan erbij... -- Waarde van c_factuur_key EN c_btwtabel_key zijn nog steeds actueel... c_factuurregel := c_factuurregel + 1; c_btw_verlegd := try_getbtw_verlegd (rc.btw_verlegd); try_insert_factuurregel(c_factuur_key, c_factuurregel, rc.kostprijs, rc.btw, rc.btw_bedrag, c_btwtabel_key, rc.fac_import_key, rc.fac_imp_file_index, rc.omschrijving, rc.locatie, c_btw_verlegd, rc.artikelcode, rc.factuurregelaantal, rc.eenheid, rc.opdrachtregelid, c_factuur_statuses_key, c_opmerking, c_succeeded); IF c_succeeded THEN fac.imp_writelog (p_import_key, 'I', 'Factuur ' || c_factuur_key || ' toegevoegd met factuurregel ' || c_factuurregel, rc.ordernr || ' / ' || rc.factuurnr ); ELSE oracle_err_mes := SUBSTR (SQLERRM, 1, 150); v_errormsg := '(ORACLE error ' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', 'Factuur(regel) kan niet toegevoegd worden ' || v_errormsg, rc.ordernr || '/' || rc.factuurnr ); END IF; END IF; ELSE -- Nieuwe factuur, dwz eerste regel of overgang naar nieuw factuurnummer/opdrachtnr. -- Let op: van de vorige factuur nog de laatste nabewerking uitvoeren, nl. de status en de opmerking vullen... -- Als c_factuur_record_is_added is TRUE, dan is er al minimaal 1 fin_factuur record toegevoegd, -- anders (=FALSE) zijn we hier voor de eerste keer IF c_factuur_record_is_added THEN fin_factuur_finalupdate(c_factuur_key, c_opmerking,c_factuur_statuses_key); fin.autoapprovefactuur(c_factuur_key); END IF; c_factuur_statuses_key := 2; c_opmerking := rc.opmerking; c_old_ordernr := rc.ordernr; c_old_factuurnr := rc.factuurnr; c_factuurregel := 1; c_mld_opdr_key := NULL; c_cnt_contract_key := NULL; c_bes_bestelopdr_key := NULL; c_prs_perslid_key_user := NULL; c_fin_factuur_datum := NULL; c_prs_kostensoort_key := NULL; c_btw_verlegd := try_getbtw_verlegd (rc.btw_verlegd); c_fin_factuur_datum := try_getdatum (rc.factuurdatum, FALSE); get_fin_factuur_referentie (rc.ordernr, rc.leveranciernr, c_fin_factuur_datum, c_cnt_contract_key, c_mld_opdr_key, c_bes_bestelopdr_key); c_prs_kostensoort_key := try_getkostensoort(c_cnt_contract_key, c_mld_opdr_key, c_bes_bestelopdr_key); IF (c_prs_kostensoort_key IS NULL AND fac.getSetting('fin_kostensoort_verplicht') = 1) THEN c_opmerking := c_opmerking || CHR(13) || 'Kostensoort is verplicht maar leeg'; c_factuur_statuses_key := 3; -- Incompleet END IF; IF (rc.factuurnr IS NULL) THEN c_opmerking := c_opmerking || CHR(13) || 'Onbekend factuurnr: is op ### gezet'; c_factuur_nr := '###'; c_factuur_statuses_key := 3; -- Incompleet ELSE c_factuur_nr := rc.factuurnr; END IF; IF (rc.boekmaand IS NOT NULL) THEN -- meegegeven, gebruik die IF fac.safe_to_date(rc.boekmaand, 'yyyy-mm') IS NULL THEN c_opmerking := c_opmerking || CHR(13) || 'Ongeldige boekmaand: ' || rc.boekmaand; c_boekmaand := ''; c_factuur_statuses_key := 3; -- Incompleet ELSE c_boekmaand := rc.boekmaand; END IF; ELSE c_boekmaand := TO_CHAR(SYSDATE, 'YYYY-MM'); IF ((fac.getSetting('fin_defaultboekmaand') IN (2, 3) AND c_mld_opdr_key IS NOT NULL) OR (fac.getSetting('fin_defaultboekmaand_cnt') = 2 AND c_cnt_contract_key IS NOT NULL)) THEN BEGIN c_boekmaand := TO_CHAR(try_getrefdatum(fac.getSetting('fin_defaultboekmaand'), fac.getSetting('fin_defaultboekmaand_cnt'), c_cnt_contract_key, c_mld_opdr_key, c_bes_bestelopdr_key, c_fin_factuur_datum), 'YYYY-MM'); END; END IF; END IF; IF (c_cnt_contract_key IS NULL AND c_mld_opdr_key IS NULL AND c_bes_bestelopdr_key IS NULL) THEN c_opmerking := c_opmerking || CHR(13) || 'Referentienr: is niet gevonden ('|| rc.ordernr ||')'; c_factuur_statuses_key := 3; -- Incompleet END IF; IF (c_fin_factuur_datum IS NULL) THEN BEGIN SELECT TRUNC(SYSDATE) INTO c_fin_factuur_datum FROM DUAL; c_opmerking := c_opmerking || CHR(13) || 'Factuurdatum: is op vandaag gezet.'; c_factuur_statuses_key := 3; -- Incompleet EXCEPTION WHEN OTHERS THEN c_fin_factuur_datum := NULL; END; END IF; c_factuur_record_is_added := FALSE; IF (LENGTH(c_factuur_nr) > 0 AND (c_fin_factuur_datum IS NOT NULL)) THEN BEGIN SELECT fin_s_fin_factuur_key.NEXTVAL INTO c_factuur_key FROM DUAL; -- Ordernummer kan ook leeg zijn. IF rc.ordernr IS NULL THEN SELECT COALESCE(SUM (kostprijs),0) totaal, COALESCE(SUM (btw_bedrag),0) totaal_btw INTO c_factuur_totaal, c_factuur_btw FROM fac_imp_factuur WHERE ordernr IS NULL AND factuurnr = rc.factuurnr AND fac_import_key = p_import_key; ELSE SELECT COALESCE(SUM (kostprijs),0) totaal, COALESCE(SUM (btw_bedrag),0) totaal_btw INTO c_factuur_totaal, c_factuur_btw FROM fac_imp_factuur WHERE ordernr = rc.ordernr AND factuurnr = rc.factuurnr AND fac_import_key = p_import_key; END IF; INSERT INTO fin_factuur ( fin_factuur_key, fin_factuur_totaal, fin_factuur_totaal_btw, mld_opdr_key, cnt_contract_key, bes_bestelopdr_key, prs_perslid_key_user, fin_factuur_datum, fin_factuur_statuses_key, fin_factuur_nr, fin_factuur_debiteur_nr, prs_kostensoort_key, fin_factuur_boekmaand, fin_factuur_bron ) VALUES ( c_factuur_key, c_factuur_totaal, c_factuur_btw, c_mld_opdr_key, c_cnt_contract_key, c_bes_bestelopdr_key, c_prs_perslid_key_user, c_fin_factuur_datum, c_factuur_statuses_key, c_factuur_nr, rc.debiteurnr, c_prs_kostensoort_key, c_boekmaand, 1 -- Excel ); c_factuur_record_is_added := TRUE; -- Voor CUST-postprocessing (van de kenmerken) is het handig te onthouden: UPDATE fac_imp_factuur SET fin_factuur_key = c_factuur_key WHERE fac_import_key = rc.fac_import_key AND fac_imp_file_index = rc.fac_imp_file_index AND fac_import_key = p_import_key; try_insert_factuur_docid(c_factuur_key,rc.docid); c_btwtabel_key := fin.getbtwtabelkey(c_bes_bestelopdr_key,c_cnt_contract_key, c_mld_opdr_key, TRUE); try_insert_factuurregel(c_factuur_key, c_factuurregel, rc.kostprijs, rc.btw, rc.btw_bedrag, c_btwtabel_key, rc.fac_import_key, rc.fac_imp_file_index, rc.omschrijving, rc.locatie, c_btw_verlegd, rc.artikelcode, rc.factuurregelaantal, rc.eenheid, rc.opdrachtregelid, c_factuur_statuses_key, c_opmerking, c_succeeded); IF c_succeeded THEN fac.imp_writelog (p_import_key, 'I', 'Factuur ' || c_factuur_key || ' toegevoegd met factuurregel ' || c_factuurregel, rc.ordernr || ' / ' || rc.factuurnr ); ELSE oracle_err_mes := SUBSTR (SQLERRM, 1, 150); v_errormsg := '(ORACLE error ' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', 'Factuur(regel) kan niet toegevoegd worden ' || v_errormsg, rc.ordernr || '/' || rc.factuurnr ); END IF; EXCEPTION WHEN OTHERS THEN c_factuur_record_is_added := FALSE; oracle_err_mes := SUBSTR (SQLERRM, 1, 150); v_errormsg := '(ORACLE error ' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', 'Factuur kan niet toegevoegd worden ' || v_errormsg, rc.ordernr || '/' || rc.factuurnr ); END; ELSE fac.imp_writelog (p_import_key, 'E', 'Factuur kan niet toegevoegd worden (factuurnummer onbekend) ', rc.ordernr || '/' || rc.factuurnr || ':' || rc.leveranciernr || ',' || rc.factuurdatum || ',' || rc.kostprijs || ',' || rc.btw || ',' || rc.btw_bedrag || ',' || rc.debiteurnr || ',' || rc.locatie || ',' || rc.afleverdatum || ',' || rc.docid || ',' || rc.omschrijving || ',' || rc.opmerking || ',' || rc.artikelcode || ',' || rc.factuurregelaantal || ',' || rc.eenheid || ',' || rc.opdrachtregelid ); END IF; END IF; END LOOP; -- Let op: van de vorige (=LAATSTE) factuur nog de laatste nabewerking uitvoeren, nl. de status en de opmerking vullen... -- Als c_factuur_record_is_added is TRUE, dan is er al minimaal 1 fin_factuur record toegevoegd, -- anders (=FALSE) zijn we hier voor de eerste keer IF c_factuur_record_is_added THEN fin_factuur_finalupdate(c_factuur_key, c_opmerking, c_factuur_statuses_key); fin.autoapprovefactuur(c_factuur_key); END IF; -- Opruimen fac_imp_factuur gebeurt vanzelf na 7 dagen doordat achteraan -- imp_shared.js/impProcessStream de tabel fac_import wordt opgeruimd en -- fac_imp_factuur meecascadeert END; / /* menu-import (transport), volgens UWVA#20707 */ CREATE OR REPLACE PROCEDURE fac_import_menu (p_import_key IN NUMBER ) AS CURSOR c1 IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; v_newline VARCHAR2 (1000); -- Import line v_field VARCHAR2 (100); -- Import field v_fielddelimitor VARCHAR2 (2) := fac.import_delimiter(p_import_key); -- Field seperator v_count_import NUMBER (10); v_count NUMBER; v_errormsg VARCHAR2 (200); v_errorhint VARCHAR2 (200); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_buffercount NUMBER := 0; c_commitbuffer NUMBER := 2000; -- om de zoveel committen -- De importvelden v_menu_volgnr VARCHAR2 (255); v_menuitems_label VARCHAR2 (255); v_menuitems_groep VARCHAR2 (255); v_menuitems_url VARCHAR2 (255); v_menu_info VARCHAR2 (255); v_menu_altlabel VARCHAR2 (255); v_menu_alturl VARCHAR2 (1000); v_menu_altgroep VARCHAR2 (255); v_functie_code VARCHAR2 (255); v_discipline_omschr VARCHAR2 (255); v_srtdiscipline_omschr VARCHAR2 (255); v_menu_image VARCHAR2 (255); v_menu_level VARCHAR2 (255); v_menu_portal VARCHAR2 (255); header_found BOOLEAN := FALSE; BEGIN -- Clear my previous imported rows DELETE FROM fac_imp_menu; v_count_import := 0; FOR rec1 IN c1 LOOP BEGIN v_newline := rec1.fac_imp_file_line; fac.imp_getfield (v_newline, v_fielddelimitor, v_menu_volgnr); fac.imp_getfield (v_newline, v_fielddelimitor, v_menuitems_label); fac.imp_getfield (v_newline, v_fielddelimitor, v_menuitems_groep); fac.imp_getfield (v_newline, v_fielddelimitor, v_menuitems_url); fac.imp_getfield (v_newline, v_fielddelimitor, v_menu_info); fac.imp_getfield (v_newline, v_fielddelimitor, v_menu_altlabel); fac.imp_getfield (v_newline, v_fielddelimitor, v_menu_alturl); fac.imp_getfield (v_newline, v_fielddelimitor, v_menu_altgroep); fac.imp_getfield (v_newline, v_fielddelimitor, v_functie_code); fac.imp_getfield (v_newline, v_fielddelimitor, v_discipline_omschr); fac.imp_getfield (v_newline, v_fielddelimitor, v_srtdiscipline_omschr); fac.imp_getfield (v_newline, v_fielddelimitor, v_menu_image); fac.imp_getfield (v_newline, v_fielddelimitor, v_menu_level); fac.imp_getfield (v_newline, v_fielddelimitor, v_menu_portal); -- Skip until the header is found IF (header_found = FALSE) THEN IF UPPER (v_menu_volgnr) = 'MENU_VOLGNR' AND UPPER (v_menuitems_label) = 'MENUITEMS_LABEL' AND UPPER (v_menuitems_groep) = 'MENUITEMS_GROEP' AND UPPER (v_menuitems_url) = 'MENUITEMS_URL' AND UPPER (v_menu_info) = 'MENU_INFO' AND UPPER (v_menu_altlabel) = 'MENU_ALTLABEL' AND UPPER (v_menu_alturl) = 'MENU_ALTURL' AND UPPER (v_menu_altgroep) = 'MENU_ALTGROEP' AND UPPER (v_functie_code) = 'FUNCTIE_CODE' AND UPPER (v_discipline_omschr) = 'DISCIPLINE_OMSCHR' AND UPPER (v_srtdiscipline_omschr) = 'SRTDISCIPLINE_OMSCHR' AND UPPER (v_menu_image) = 'MENU_IMAGE' AND UPPER (v_menu_level) = 'MENU_LEVEL' AND UPPER (v_menu_portal) = 'MENU_PORTAL' THEN header_found := TRUE; END IF; ELSE INSERT INTO fac_imp_menu ( menu_volgnr, menuitems_label, menuitems_groep, menuitems_url, menu_info, menu_altlabel, menu_alturl, menu_altgroep, functie_code, discipline_omschr, srtdiscipline_omschr, menu_image, menu_level, menu_portal ) VALUES ( SUBSTR (v_menu_volgnr, 1, 255), SUBSTR (v_menuitems_label, 1, 255), SUBSTR (v_menuitems_groep, 1, 255), SUBSTR (v_menuitems_url, 1, 255), SUBSTR (v_menu_info, 1, 255), SUBSTR (v_menu_altlabel, 1, 255), SUBSTR (v_menu_alturl, 1, 1000), SUBSTR (v_menu_altgroep, 1, 255), SUBSTR (v_functie_code, 1, 255), SUBSTR (v_discipline_omschr, 1, 255), SUBSTR (v_srtdiscipline_omschr, 1, 255), SUBSTR (v_menu_image, 1, 255), SUBSTR (v_menu_level, 1, 255), SUBSTR (v_menu_portal, 1, 255) ); v_count_import := v_count_import + 1; END IF; END; END LOOP; IF (header_found = FALSE) THEN fac.imp_writelog (p_import_key, 'W', 'Ongeldig importbestand', 'Geen header of header niet volgens specificatie!' ); ELSE fac.imp_writelog (p_import_key, 'S', 'Aantal ingelezen regels: ' || TO_CHAR (v_count_import), ''); END IF; COMMIT; 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, 'W', v_errormsg, ''); END; / CREATE OR REPLACE PROCEDURE fac_update_menu (p_import_key IN NUMBER) AS CURSOR c_menu IS SELECT * FROM fac_imp_menu; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (250); v_errormsg VARCHAR2 (1024); v_errorhint VARCHAR2 (1024); v_count NUMBER; v_menuitems_key NUMBER; v_functie_key NUMBER; v_discipline_key NUMBER; v_srtdiscipline_key NUMBER; currentversion fac_module.fac_module_version%TYPE; e_transport EXCEPTION; BEGIN -- Init SELECT MAX (fac_module_version) INTO currentversion FROM fac_module; fac.imp_writelog (p_import_key, 'S', 'Facilitor menustructuur import versie ' || currentversion, '$Revision$' ); COMMIT; -- Alle standaard-menuopties bestaan --> gaan met die banaan! v_errormsg := 'Verwijderen oude menu'; --TODO: remove TEST DELETE FROM fac_menu; -- Menu-items uit import één voor één toevoegen. Als we ergens onderweg een -- fout tegenkomen, doen we een rollback. FOR rec IN c_menu LOOP BEGIN v_errormsg := 'Volgend item'; v_errorhint := COALESCE (rec.menu_altgroep, rec.menuitems_groep) || '/' || rec.menu_volgnr || '/' || rec.menuitems_label || '/' || rec.menu_altlabel; v_menuitems_key := NULL; v_functie_key := NULL; v_discipline_key := NULL; v_srtdiscipline_key := NULL; -- Volgnummer is verplicht --TODO: Is dat wel zo? IF (rec.menu_volgnr IS NULL) THEN v_errormsg := 'volgnummer is verplicht!'; --TODO: throw error RAISE e_transport; END IF; -- Als gerefereerd wordt naar een standaard-menuoptie, dan moet deze bestaan IF (rec.menuitems_label IS NOT NULL) THEN v_errormsg := 'Onbekende of dubbele standaard-menuoptie'; --TODO: check of label bestaat SELECT fac_menuitems_key INTO v_menuitems_key FROM fac_menuitems WHERE fac_menuitems_label = rec.menuitems_label AND fac_menuitems_groep = fac.safe_to_number (rec.menuitems_groep) AND fac_menuitems_url = rec.menuitems_url; ELSE -- Als geen standaard-menuoptie gebruikt wordt, dan zijn onderstaande gegevens verplicht IF (rec.menu_altlabel IS NULL OR rec.menu_altgroep IS NULL) THEN v_errormsg := 'altlabel + groep zijn verplicht!'; --TODO: throw error RAISE e_transport; END IF; END IF; -- Gebruikte functiecodes moeten bestaan IF (rec.functie_code IS NOT NULL) THEN v_errormsg := 'Onbekende of dubbele functiecode'; --TODO: check of fac_functie_code bestaat SELECT fac_functie_key INTO v_functie_key FROM fac_functie WHERE fac_functie_code = rec.functie_code; END IF; -- Als alles ok is, voegen we het menu-item toe. INSERT INTO fac_menu ( fac_menu_volgnr, fac_menuitems_key, fac_menu_info, fac_menu_altlabel, fac_menu_alturl, fac_menu_altgroep, fac_functie_key, ins_discipline_key, ins_srtdiscipline_key, fac_menu_image, fac_menu_level, fac_menu_portal ) VALUES ( rec.menu_volgnr, v_menuitems_key, rec.menu_info, rec.menu_altlabel, rec.menu_alturl, rec.menu_altgroep, v_functie_key, v_discipline_key, v_srtdiscipline_key, rec.menu_image, rec.menu_level, rec.menu_portal ); END; END LOOP; -- Als we hier uitkomen, is alles goed gegaan en kunnen we committen COMMIT; -- Als er ergens een fout optreedt, dan worden alle voorgaande mutaties teruggedraaid en wordt er alleen de logging gecommit EXCEPTION WHEN OTHERS THEN -- TODO: Zoiets? ROLLBACK; oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errorhint := v_errorhint || ' {' || v_errormsg || '}'; v_errormsg := '(ORACLE error ' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint); COMMIT; END; / CREATE OR REPLACE PROCEDURE fac_import_usrdata (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); 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 (200); -- De importvelden: v_fac_usrtab_naam VARCHAR2 (256); -- C16 v_fac_usrdata_code VARCHAR2 (256); -- C40 v_fac_usrdata_omschr VARCHAR2 (256); -- C60 v_fac_usrdata_omschr2 VARCHAR2 (256); -- C60 v_fac_usrdata_volgnr VARCHAR2 (256); -- N3 v_fac_usrdata_prijs VARCHAR2 (256); -- N8,2 v_fac_usrdata_vervaldatum VARCHAR2 (256); -- DATE v_fac_usrdata_reftabel VARCHAR2 (256); -- C16 v_fac_usrdata_refcode VARCHAR2 (256); -- C40 -- Overig: v_fac_usrdata_volgnr_n fac_imp_usrdata.fac_usrdata_volgnr%TYPE; -- N3 v_fac_usrdata_prijs_n fac_imp_usrdata.fac_usrdata_prijs%TYPE; -- N15,7 v_fac_usrdata_vervaldatum_d fac_imp_usrdata.fac_usrdata_vervaldatum%TYPE; -- DATE CURSOR c1 IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; BEGIN DELETE FROM fac_imp_usrdata; v_count_tot := 0; v_count_import := 0; header_is_valid := 0; COMMIT; FOR rec1 IN c1 LOOP BEGIN v_newline := rec1.fac_imp_file_line; v_errormsg := 'Fout bij opvragen importregel'; v_aanduiding := ''; v_ongeldig := 0; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_delim, v_fac_usrtab_naam); fac.imp_getfield (v_newline, c_delim, v_fac_usrdata_code); fac.imp_getfield (v_newline, c_delim, v_fac_usrdata_omschr); fac.imp_getfield (v_newline, c_delim, v_fac_usrdata_omschr2); fac.imp_getfield (v_newline, c_delim, v_fac_usrdata_volgnr); fac.imp_getfield (v_newline, c_delim, v_fac_usrdata_prijs); fac.imp_getfield (v_newline, c_delim, v_fac_usrdata_vervaldatum); fac.imp_getfield (v_newline, c_delim, v_fac_usrdata_reftabel); fac.imp_getfield (v_newline, c_delim, v_fac_usrdata_refcode); v_aanduiding := '[' || v_fac_usrtab_naam || '|' || v_fac_usrdata_code || '] '; -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen -- de juiste kolomkop. Ik controleer daarbij ALLE kolommen! -- Ik negeer alles totdat ik een geldige header ben gepasseerd. IF (header_is_valid = 0) THEN IF UPPER (v_fac_usrtab_naam) = 'TABELNAAM' AND UPPER (v_fac_usrdata_code) = 'WAARDE_CODE' AND UPPER (v_fac_usrdata_omschr) = 'WAARDE_OMS' AND UPPER (v_fac_usrdata_omschr2) = 'WAARDE_OMS2' AND UPPER (v_fac_usrdata_volgnr) = 'VOLGNR' AND UPPER (v_fac_usrdata_prijs) = 'PRIJS' AND UPPER (v_fac_usrdata_vervaldatum) = 'VERVALDATUM' AND UPPER (v_fac_usrdata_reftabel) = 'WAARDETABEL' AND UPPER (v_fac_usrdata_refcode) = 'WAARDETABEL_CODE' THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden v_errormsg := 'Tabelnaam ongeldig; ongedefinieerd of te lang'; v_fac_usrtab_naam := TRIM (v_fac_usrtab_naam); IF v_fac_usrtab_naam IS NULL OR LENGTH (v_fac_usrtab_naam) > 16 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'Waarde-code ongeldig; ongedefinieerd of te lang'; v_fac_usrdata_code := TRIM (v_fac_usrdata_code); IF v_fac_usrdata_code IS NULL OR LENGTH (v_fac_usrdata_code) > 40 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'Waarde-omschrijving te lang'; v_fac_usrdata_omschr := TRIM (v_fac_usrdata_omschr); IF LENGTH (v_fac_usrdata_omschr) > 60 THEN v_fac_usrdata_omschr := SUBSTR (TRIM (v_fac_usrdata_omschr), 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Waarde-omschrijving wordt afgebroken tot [' || v_fac_usrdata_omschr || ']' ); END IF; -- v_errormsg := 'Waarde-omschrijving2 te lang'; v_fac_usrdata_omschr2 := TRIM (v_fac_usrdata_omschr2); IF LENGTH (v_fac_usrdata_omschr2) > 60 THEN v_fac_usrdata_omschr2 := SUBSTR (TRIM (v_fac_usrdata_omschr2), 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Waarde-omschrijving2 wordt afgebroken tot [' || v_fac_usrdata_omschr2 || ']' ); END IF; -- v_errormsg := 'Volgnummer ongeldig; maximale grootte 999'; v_fac_usrdata_volgnr := TRIM (v_fac_usrdata_volgnr); v_fac_usrdata_volgnr_n := NULL; IF (v_fac_usrdata_volgnr IS NOT NULL) THEN IF (fac.safe_to_number (v_fac_usrdata_volgnr) IS NULL) THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); ELSE v_fac_usrdata_volgnr_n := fac.safe_to_number (v_fac_usrdata_volgnr); END IF; END IF; -- v_errormsg := 'Prijs ongeldig; maximale grootte 999999.99'; v_fac_usrdata_prijs := TRIM (v_fac_usrdata_prijs); v_fac_usrdata_prijs_n := NULL; IF (v_fac_usrdata_prijs IS NOT NULL) THEN IF (fac.safe_to_number (v_fac_usrdata_prijs) IS NULL) THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); ELSE v_fac_usrdata_prijs_n := fac.safe_to_number (v_fac_usrdata_prijs); END IF; END IF; -- v_errormsg := 'Vervaldatum ongeldig'; v_fac_usrdata_vervaldatum := TRIM (v_fac_usrdata_vervaldatum); v_fac_usrdata_vervaldatum_d := NULL; IF (v_fac_usrdata_vervaldatum IS NOT NULL) THEN IF (fac.safe_to_date (v_fac_usrdata_vervaldatum, 'dd-mm-yyyy') IS NULL) THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); ELSE v_fac_usrdata_vervaldatum_d := fac.safe_to_date (v_fac_usrdata_vervaldatum, 'dd-mm-yyyy'); END IF; END IF; -- v_errormsg := 'Waardetabelnaam ongeldig; ongedefinieerd of te lang'; v_fac_usrdata_reftabel := TRIM (v_fac_usrdata_reftabel); IF LENGTH (v_fac_usrdata_reftabel) > 16 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'Waardetabelcode ongeldig; ongedefinieerd of te lang'; v_fac_usrdata_refcode := TRIM(v_fac_usrdata_refcode); IF ( (v_fac_usrdata_reftabel IS NULL AND v_fac_usrdata_refcode IS NOT NULL) OR (v_fac_usrdata_reftabel IS NOT NULL AND v_fac_usrdata_refcode IS NULL) OR COALESCE(LENGTH (v_fac_usrdata_refcode),0) > 40 ) THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- Insert geformatteerde import record IF v_ongeldig = 0 THEN BEGIN v_errormsg := 'Fout bij wegschrijven importregel'; INSERT INTO fac_imp_usrdata (fac_usrtab_naam, fac_usrdata_code, fac_usrdata_omschr, fac_usrdata_omschr2, fac_usrdata_volgnr, fac_usrdata_prijs, fac_usrdata_vervaldatum, fac_usrdata_reftabel, fac_usrdata_refcode) VALUES (v_fac_usrtab_naam, v_fac_usrdata_code, v_fac_usrdata_omschr, v_fac_usrdata_omschr2, v_fac_usrdata_volgnr_n, v_fac_usrdata_prijs_n, v_fac_usrdata_vervaldatum_d, v_fac_usrdata_reftabel, v_fac_usrdata_refcode); 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, 'E', v_aanduiding || v_errormsg, ''); END; COMMIT; 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', 'Eigen tabellen/aantal ingelezen importregels: ' || TO_CHAR (v_count_tot), '' ); fac.imp_writelog ( p_import_key, 'S', 'Eigen tabellen/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 eigen tabellen afgebroken!'); END fac_import_usrdata; / CREATE OR REPLACE PROCEDURE fac_update_usrdata (p_import_key IN NUMBER) AS -- Cursor loopt over de voorkomende (unieke) tabelnamen. CURSOR c1 IS SELECT DISTINCT fac_usrtab_naam FROM fac_imp_usrdata; v_errormsg VARCHAR2 (1000) := ''; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); -- SUBPROC PROCEDURE add_tabel (p_import_key IN NUMBER, p_tabname IN VARCHAR2) AS CURSOR c1 IS SELECT fac_usrtab_naam, fac_usrdata_code, fac_usrdata_omschr, fac_usrdata_omschr2, fac_usrdata_volgnr, fac_usrdata_prijs, fac_usrdata_vervaldatum, fac_usrdata_reftabel, fac_usrdata_refcode FROM fac_imp_usrdata WHERE fac_usrtab_naam = p_tabname; v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count NUMBER (10); v_count_tot NUMBER (10); v_count_upd NUMBER (10); v_tab_key NUMBER; v_parentkey NUMBER; v_parentwaarde_key NUMBER(10); v_waardetabel_naam VARCHAR2(16); v_waardetabel_key NUMBER(10) := -2; v_count_waardetabel NUMBER(10); BEGIN v_count_tot := 0; v_count_upd := 0; -- Bepaal de key bij waardetabel. SELECT COUNT(*) , MIN(fac_usrdata_reftabel) INTO v_count_waardetabel , v_waardetabel_naam FROM (SELECT DISTINCT fac_usrdata_reftabel FROM fac_imp_usrdata WHERE fac_usrtab_naam = p_tabname ); IF (v_count_waardetabel = 1) THEN IF (v_waardetabel_naam IS NULL) THEN v_waardetabel_key := NULL; ElSE SELECT COALESCE(MIN(fac_usrtab_key), -1) INTO v_waardetabel_key FROM fac_usrtab WHERE fac_usrtab_naam = v_waardetabel_naam; END IF; END IF; -- v_waardetabel_key: NULL -> usrtab_parentkey NULL -- >0 -> usrtab_parentkey -- -1 -> tabel bestaat niet -- -2 -> voor p_tabname zijn meer dan 1 verschillende parent keys gevonden v_errormsg := 'Fout bij bepalen eigen tabel [' || p_tabname || '] '; SELECT COUNT(*) , MIN(fac_usrtab_key) , MIN(fac_usrtab_parentkey) INTO v_count , v_tab_key , v_parentkey FROM fac_usrtab WHERE fac_usrtab_verwijder IS NULL AND fac_usrtab_naam = p_tabname; IF (v_count = 0) THEN v_errormsg := 'Fout bij toevoegen eigen tabel [' || p_tabname || '] ' || CASE WHEN v_waardetabel_key IS NULL THEN '' ELSE 'met waardetabelkey=' || v_waardetabel_key END; INSERT INTO fac_usrtab (fac_usrtab_naam, fac_usrtab_omschrijving, fac_usrtab_parentkey) VALUES (p_tabname, p_tabname, v_waardetabel_key) RETURNING fac_usrtab_key INTO v_tab_key; v_parentkey := v_waardetabel_key; COMMIT; END IF; -- Voor een bestaande fac_usrtab moet de parentkey gelijk zijn aan v_waardetabel_key. IF ((v_parentkey = v_waardetabel_key) OR (v_parentkey IS NULL AND v_waardetabel_key IS NULL)) THEN BEGIN FOR rec IN c1 LOOP BEGIN v_count_tot := v_count_tot + 1; -- Als er een referentietabel is moet de waarde in die tabel bestaan. IF (v_parentkey > 0) THEN v_errormsg := 'Fout bij bepalen bestaan waardetabel_code [' || v_waardetabel_naam || '.' || rec.fac_usrdata_refcode || '] ' || TO_CHAR(v_parentkey) || ',' || rec.fac_usrdata_refcode; SELECT fac_usrdata_key INTO v_parentwaarde_key FROM fac_usrdata WHERE fac_usrtab_key = v_parentkey AND fac_usrdata_code = rec.fac_usrdata_refcode; END IF; -- Toevoegen/wijzigen van tabelwaarde. v_errormsg := 'Fout bij bepalen bestaan waarde-code [' || rec.fac_usrdata_code || '] '; SELECT COUNT ( * ) INTO v_count FROM fac_usrdata WHERE fac_usrdata_verwijder IS NULL AND fac_usrtab_key = v_tab_key AND fac_usrdata_code = rec.fac_usrdata_code; IF (v_count = 0) THEN v_errormsg := 'Fout bij toevoegen waarde-code [' || rec.fac_usrdata_code || '] '; INSERT INTO fac_usrdata (fac_usrtab_key, fac_usrdata_code, fac_usrdata_omschr, fac_usrdata_omschr2, fac_usrdata_volgnr, fac_usrdata_vervaldatum, fac_usrdata_prijs, fac_usrdata_parentkey ) VALUES (v_tab_key, rec.fac_usrdata_code, rec.fac_usrdata_omschr, rec.fac_usrdata_omschr2, rec.fac_usrdata_volgnr, rec.fac_usrdata_vervaldatum, rec.fac_usrdata_prijs, v_parentwaarde_key); ELSE v_errormsg := 'Fout bij bijwerken waarde-code [' || rec.fac_usrdata_code || '] '; UPDATE fac_usrdata SET fac_usrdata_omschr = rec.fac_usrdata_omschr, fac_usrdata_omschr2 = rec.fac_usrdata_omschr2, fac_usrdata_volgnr = rec.fac_usrdata_volgnr, fac_usrdata_vervaldatum = rec.fac_usrdata_vervaldatum, fac_usrdata_prijs = rec.fac_usrdata_prijs, fac_usrdata_parentkey = v_parentwaarde_key WHERE fac_usrdata_verwijder IS NULL AND fac_usrtab_key = v_tab_key AND fac_usrdata_code = rec.fac_usrdata_code; END IF; COMMIT; v_count_upd := v_count_upd + 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, 'E', v_errormsg, ''); COMMIT; END; END LOOP; fac.imp_writelog ( p_import_key, 'S', p_tabname || ': #ingelezen = ' || TO_CHAR (v_count_tot), '' ); fac.imp_writelog ( p_import_key, 'S', p_tabname || ': #toegevoegd/bijgewerkt = ' || TO_CHAR (v_count_upd), '' ); COMMIT; END; ELSE fac.imp_writelog ( p_import_key, 'E', p_tabname || ': waardetabel [' || v_waardetabel_naam || '] komt niet overeen met parentkey', '' ); COMMIT; END IF; END; -- MAIN BEGIN -- Loop door de voorkomende (unieke) tabelnamen en voeg deze toe en/of werk -- deze bij. FOR rec IN c1 LOOP BEGIN add_tabel (p_import_key, rec.fac_usrtab_naam); END; 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_errormsg, 'Importproces eigen tabellen afgebroken!'); END fac_update_usrdata; / --// FLEX -- kenmerken-import (transport), volgens UWVA#20708 -- UWVA#32742: flexkenmerken transport voor objecten CREATE OR REPLACE PROCEDURE fac_import_flex (p_import_key IN NUMBER ) IS CURSOR c1 IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; v_newline VARCHAR2 (10000); -- Import line v_field VARCHAR2 (100); -- Import field v_fielddelimitor VARCHAR2 (2) := fac.import_delimiter(p_import_key); -- Field seperator v_count_import NUMBER (10); v_count NUMBER; v_errormsg VARCHAR2 (200); v_errorhint VARCHAR2 (200); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); -- De importvelden v_fac_kenmerkdomein_omschr VARCHAR2 (300); v_fac_kenmerkdomein_objectnaam VARCHAR2 (300); v_fac_kenmerkdomein_kolomnaam VARCHAR2 (300); v_fac_kenmerkdomein_kolomtxt VARCHAR2 (300); v_fac_usrtab_naam VARCHAR2 (300); v_srtkenmerk_omschrijving VARCHAR2 (300); v_srtkenmerk_kenmerktype VARCHAR2 (300); v_srtkenmerk_systeem VARCHAR2 (300); v_srtkenmerk_lengte VARCHAR2 (300); v_srtkenmerk_dec VARCHAR2 (300); v_srtkenmerk_nmin VARCHAR2 (300); v_srtkenmerk_nmax VARCHAR2 (300); v_srtkenmerk_dimensie VARCHAR2 (300); v_srtkenmerk_code VARCHAR2 (300); v_kenmerk_type VARCHAR2 (300); v_kenmerk_niveau VARCHAR2 (300); v_kenmerk_verplicht VARCHAR2 (300); v_kenmerk_groep VARCHAR2 (300); v_kenmerk_rolcode VARCHAR2 (300); v_kenmerk_volgnummer VARCHAR2 (300); v_kenmerk_default VARCHAR2 (4000); v_kenmerk_toonbaar VARCHAR2 (300); v_kenmerk_uniek VARCHAR2 (300); v_kenmerk_hint VARCHAR2 (300); v_kenmerk_regexp VARCHAR2 (300); v_kenmerk_show_expr VARCHAR2 (4000); v_kenmerk_omschr VARCHAR2 (300); v_kenmerk_verwijder VARCHAR2 (300); v_kenmerk_wissen VARCHAR2 (300); v_kenmerk_code VARCHAR2 (300); v_deflevel1 VARCHAR2 (300); /* res_srtactiviteit, mld_srtdiscipline, bes_discipline of cnt_discipline */ v_deflevel2 VARCHAR2 (300); /* res_activiteit, mld_discipline, bes_srtgroep of niks */ v_deflevel3 VARCHAR2 (300); /* niks, mld_stdmelding, bes_srtdeel of niks */ v_deflevel4 VARCHAR2 (300); /* niks, mld_typeopdr, niks of niks */ v_kenmerk_extra_1 VARCHAR2 (300); /* extra kolommen voor kenmerk die niet in elke module voorkomen */ v_kenmerk_extra_2 VARCHAR2 (300); /* check wel of dit veld groot genoeg is voor het betreffende kenmerk */ v_kenmerk_extra_3 VARCHAR2 (300); /* als er een extra kenmerk wordt gebruikt moeten deflevel1 t/m 4 bestaan, desnoods als null-value */ v_kenmerk_extra_4 VARCHAR2 (300); flexmodule VARCHAR2 (3); v_res_srtactiviteit VARCHAR2 (300); v_res_activiteit VARCHAR2 (300); v_mld_srtdiscipline VARCHAR2 (300); v_mld_discipline VARCHAR2 (300); v_mld_stdmelding VARCHAR2 (300); v_mld_typeopdr VARCHAR2 (300); v_bes_discipline VARCHAR2 (300); v_bes_srtgroep VARCHAR2 (300); v_bes_srtdeel VARCHAR2 (300); v_cnt_discipline VARCHAR2 (300); v_ins_discipline VARCHAR2 (300); v_ins_srtgroep VARCHAR2 (300); v_ins_srtdeel VARCHAR2 (300); header_found BOOLEAN := FALSE; BEGIN -- Clear my previous imported rows DELETE FROM fac_imp_flex; v_count_import := 0; FOR rec1 IN c1 LOOP BEGIN v_newline := rec1.fac_imp_file_line; fac.imp_getfield (v_newline, v_fielddelimitor, v_fac_kenmerkdomein_omschr); --1 fac.imp_getfield (v_newline, v_fielddelimitor, v_fac_kenmerkdomein_objectnaam); fac.imp_getfield (v_newline, v_fielddelimitor, v_fac_kenmerkdomein_kolomnaam); fac.imp_getfield (v_newline, v_fielddelimitor, v_fac_kenmerkdomein_kolomtxt); fac.imp_getfield (v_newline, v_fielddelimitor, v_fac_usrtab_naam); fac.imp_getfield (v_newline, v_fielddelimitor, v_srtkenmerk_code); fac.imp_getfield (v_newline, v_fielddelimitor, v_srtkenmerk_omschrijving); fac.imp_getfield (v_newline, v_fielddelimitor, v_srtkenmerk_kenmerktype); fac.imp_getfield (v_newline, v_fielddelimitor, v_srtkenmerk_systeem); fac.imp_getfield (v_newline, v_fielddelimitor, v_srtkenmerk_lengte); -- 10 fac.imp_getfield (v_newline, v_fielddelimitor, v_srtkenmerk_dec); fac.imp_getfield (v_newline, v_fielddelimitor, v_srtkenmerk_nmin); fac.imp_getfield (v_newline, v_fielddelimitor, v_srtkenmerk_nmax); fac.imp_getfield (v_newline, v_fielddelimitor, v_srtkenmerk_dimensie); fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_type); fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_niveau); fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_verplicht); fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_groep); fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_rolcode); fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_volgnummer); fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_default); -- 20 fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_toonbaar); fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_uniek); fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_hint); fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_regexp); fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_show_expr); fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_code); fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_omschr); fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_verwijder); fac.imp_getfield (v_newline, v_fielddelimitor, v_deflevel1); fac.imp_getfield (v_newline, v_fielddelimitor, v_deflevel2); -- 30 fac.imp_getfield (v_newline, v_fielddelimitor, v_deflevel3); fac.imp_getfield (v_newline, v_fielddelimitor, v_deflevel4); fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_extra_1); fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_extra_2); fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_extra_3); fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_extra_4); -- 36 -- Skip until the header is found IF (header_found = FALSE) THEN IF UPPER (v_fac_kenmerkdomein_omschr) = 'FAC_KENMERKDOMEIN_OMSCHRIJVING' AND UPPER (v_fac_kenmerkdomein_objectnaam) = 'FAC_KENMERKDOMEIN_OBJECTNAAM' AND UPPER (v_fac_kenmerkdomein_kolomnaam) = 'FAC_KENMERKDOMEIN_KOLOMNAAM' AND UPPER (v_fac_kenmerkdomein_kolomtxt) = 'FAC_KENMERKDOMEIN_KOLOMTXT' AND UPPER (v_fac_usrtab_naam) = 'FAC_USRTAB_NAAM' AND UPPER (v_srtkenmerk_code) = 'SRTKENMERK_CODE' AND UPPER (v_srtkenmerk_omschrijving) = 'SRTKENMERK_OMSCHRIJVING' AND UPPER (v_srtkenmerk_kenmerktype) = 'SRTKENMERK_KENMERKTYPE' AND UPPER (v_srtkenmerk_systeem) = 'SRTKENMERK_SYSTEEM' AND UPPER (v_srtkenmerk_lengte) = 'SRTKENMERK_LENGTE' AND UPPER (v_srtkenmerk_dec) = 'SRTKENMERK_DEC' AND UPPER (v_srtkenmerk_nmin) = 'SRTKENMERK_NMIN' AND UPPER (v_srtkenmerk_nmax) = 'SRTKENMERK_NMAX' AND UPPER (v_srtkenmerk_dimensie) = 'SRTKENMERK_DIMENSIE' AND UPPER (v_kenmerk_type) = 'KENMERK_TYPE' AND UPPER (v_kenmerk_niveau) = 'KENMERK_NIVEAU' AND UPPER (v_kenmerk_verplicht) = 'KENMERK_VERPLICHT' AND UPPER (v_kenmerk_groep) = 'KENMERK_GROEP' AND UPPER (v_kenmerk_rolcode) = 'KENMERK_ROLCODE' AND UPPER (v_kenmerk_volgnummer) = 'KENMERK_VOLGNUMMER' AND UPPER (v_kenmerk_default) = 'KENMERK_DEFAULT' AND UPPER (v_kenmerk_toonbaar) = 'KENMERK_TOONBAAR' AND UPPER (v_kenmerk_uniek) = 'KENMERK_UNIEK' AND UPPER (v_kenmerk_hint) = 'KENMERK_HINT' AND UPPER (v_kenmerk_regexp) = 'KENMERK_REGEXP' AND UPPER (v_kenmerk_show_expr) = 'KENMERK_SHOW_EXPR' AND UPPER (v_kenmerk_code) = 'KENMERK_CODE' AND UPPER (v_kenmerk_omschr) = 'KENMERK_OMSCHR' AND UPPER (v_kenmerk_verwijder) = 'KENMERK_VERWIJDER' THEN header_found := TRUE; -- Wat voor een header is het? IF UPPER (v_deflevel1) = 'ACTIVITEITSOORT' AND UPPER (v_deflevel2) = 'ACTIVITEIT' THEN flexmodule := 'RES'; ELSIF UPPER (v_deflevel1) = 'CATALOGUS' AND UPPER (v_deflevel2) = 'GROEP' AND UPPER (v_deflevel3) = 'ARTIKEL' THEN flexmodule := 'BES'; ELSIF UPPER (v_deflevel1) = 'VAKGROEPTYPE' AND UPPER (v_deflevel2) = 'VAKGROEP' AND UPPER (v_deflevel3) = 'MELDING' AND UPPER (v_deflevel4) = 'OPDRACHTTYPE' THEN flexmodule := 'MLD'; ELSIF UPPER (v_deflevel1) = 'CONTRACTSOORT' THEN flexmodule := 'CNT'; ELSIF UPPER (v_deflevel1) = 'DISCIPLINE' AND UPPER (v_deflevel2) = 'GROEP' AND UPPER (v_deflevel3) = 'OBJECTSOORT' THEN flexmodule := 'INS'; ELSIF UPPER (v_deflevel1) = 'FACTUUR' THEN flexmodule := 'FIN'; ELSIF UPPER (v_deflevel1) = 'DISCIPLINE' AND UPPER (v_deflevel2) = 'SRTCONTROLE' THEN flexmodule := 'CTR'; END IF; END IF; ELSE IF flexmodule = 'RES' THEN v_res_srtactiviteit := v_deflevel1; v_res_activiteit := v_deflevel2; ELSIF flexmodule = 'BES' THEN v_bes_discipline := v_deflevel1; v_bes_srtgroep := v_deflevel2; v_bes_srtdeel := v_deflevel3; ELSIF flexmodule = 'MLD' THEN v_mld_srtdiscipline := v_deflevel1; v_mld_discipline := v_deflevel2; v_mld_stdmelding := v_deflevel3; v_mld_typeopdr := v_deflevel4; ELSIF flexmodule = 'CNT' THEN v_cnt_discipline := v_deflevel1; ELSIF flexmodule = 'INS' THEN -- Hieronder staat telkens de splisting van kenmerk: of op discipline/groep/objectsoort of op inspectiekenmerk. -- In de update-procedure wordt deze splitsing bepaald door kenmerk_niveau (D = deel, C = controle) -- Discipline of (voor inspectiekenmerken) een dummy Tekst voor ctr_controle_type (1,2,3), iets als inspectie controle, - vervanging, - certificering v_ins_discipline := v_deflevel1; -- Groep binnen de discipline, of (voor inspectiekenmerken) de omschrijving van de soortcontrole (ins_srtcontrole_omschrijving) v_ins_srtgroep := v_deflevel2; -- Objectsoort, of (voor inspectiekenmerken) de (tekst)waarde '1', '2' of '3' (ctr_controle_type). v_ins_srtdeel := v_deflevel3; ELSIF flexmodule = 'CTR' THEN v_ins_discipline := v_deflevel1; v_ins_srtgroep := v_deflevel2; END IF; INSERT INTO fac_imp_flex ( fac_kenmerkdomein_omschrijving, -- 1 fac_kenmerkdomein_objectnaam, fac_kenmerkdomein_kolomnaam, fac_kenmerkdomein_kolomtxt, fac_usrtab_naam, srtkenmerk_code, srtkenmerk_omschrijving, srtkenmerk_kenmerktype, srtkenmerk_systeem, srtkenmerk_lengte, -- 10 srtkenmerk_dec, srtkenmerk_nmin, srtkenmerk_nmax, srtkenmerk_dimensie, kenmerk_niveau, kenmerk_verplicht, kenmerk_groep, kenmerk_rolcode, kenmerk_volgnummer, kenmerk_default, kenmerk_type, -- 20 kenmerk_toonbaar, kenmerk_uniek, kenmerk_hint, kenmerk_regexp, kenmerk_show_expr, kenmerk_code, kenmerk_omschr, kenmerk_verwijder, kenmerk_extra_1, kenmerk_extra_2, -- 30 kenmerk_extra_3, kenmerk_extra_4, res_srtactiviteit, res_activiteit, mld_srtdiscipline, mld_discipline, mld_stdmelding, mld_typeopdr, bes_discipline, bes_srtgroep, -- 40 bes_srtdeel, cnt_discipline, ins_discipline, ins_srtgroep, ins_srtdeel, -- 45 kenmerk_module ) VALUES ( SUBSTR (v_fac_kenmerkdomein_omschr, 1, 255), -- 1 SUBSTR (v_fac_kenmerkdomein_objectnaam, 1, 255), SUBSTR (v_fac_kenmerkdomein_kolomnaam, 1, 255), SUBSTR (v_fac_kenmerkdomein_kolomtxt, 1, 255), SUBSTR (v_fac_usrtab_naam, 1, 255), SUBSTR (v_srtkenmerk_code, 1, 255), SUBSTR (v_srtkenmerk_omschrijving, 1, 255), SUBSTR (v_srtkenmerk_kenmerktype, 1, 255), SUBSTR (v_srtkenmerk_systeem, 1, 255), SUBSTR (v_srtkenmerk_lengte, 1, 255), -- 10 SUBSTR (v_srtkenmerk_dec, 1, 255), SUBSTR (v_srtkenmerk_nmin, 1, 255), SUBSTR (v_srtkenmerk_nmax, 1, 255), SUBSTR (v_srtkenmerk_dimensie, 1, 255), SUBSTR (v_kenmerk_niveau, 1, 255), SUBSTR (v_kenmerk_verplicht, 1, 255), SUBSTR (v_kenmerk_groep, 1, 255), SUBSTR (v_kenmerk_rolcode, 1, 255), SUBSTR (v_kenmerk_volgnummer, 1, 255), SUBSTR (v_kenmerk_default, 1, 4000), SUBSTR (v_kenmerk_type, 1, 255), -- 20 SUBSTR (v_kenmerk_toonbaar, 1, 255), SUBSTR (v_kenmerk_uniek, 1, 255), SUBSTR (v_kenmerk_hint, 1, 255), SUBSTR (v_kenmerk_regexp, 1, 255), SUBSTR (v_kenmerk_show_expr, 1, 4000), SUBSTR (v_kenmerk_code, 1, 255), SUBSTR (v_kenmerk_omschr, 1, 255), SUBSTR (v_kenmerk_verwijder, 1, 255), SUBSTR (v_kenmerk_extra_1, 1, 255), SUBSTR (v_kenmerk_extra_2, 1, 255), -- 30 SUBSTR (v_kenmerk_extra_3, 1, 255), SUBSTR (v_kenmerk_extra_4, 1, 255), v_res_srtactiviteit, v_res_activiteit, v_mld_srtdiscipline, v_mld_discipline, v_mld_stdmelding, v_mld_typeopdr, v_bes_discipline, v_bes_srtgroep, -- 40 v_bes_srtdeel, v_cnt_discipline, v_ins_discipline, v_ins_srtgroep, v_ins_srtdeel, -- 45 flexmodule ); v_count_import := v_count_import + 1; END IF; END; END LOOP; IF (header_found = FALSE) THEN fac.imp_writelog (p_import_key, 'W', 'Ongeldig importbestand', 'Geen header of header niet volgens specificatie!' ); ELSE fac.imp_writelog (p_import_key, 'S', 'Aantal ingelezen regels ('||flexmodule||'): ' || TO_CHAR (v_count_import), ''); END IF; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := '(ORACLE error ' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'W', v_errormsg, ''); END; / -- UNDER CONSTRUCTION -- -- Mijn voorstel is om het als volgt te doen: -- 1. inlezen van het bestand in fac_imp_flex -- 2. Op basis van de header constateren of het res/bes/mld is -- res: ACTIVITEITSOORT;ACTIVITEIT -- mld: VAKGROEPTYPE;VAKGROEP;MELDING;OPDRACHTTYPE -- bes: CATALOGUS;GROEP;ARTIKEL -- cnt: CONTRACTSOORT -- 3. Dan de verdere handling in fac_update_flex -- flexkenmerken-import (transport) voor RES/MLD/BES, volgens UWVA#20706 -- en voor CNT, volgens AALB#27395 -- UWVA#32742: flexkenmerken transport voor objecten CREATE OR REPLACE PROCEDURE fac_update_flex (p_import_key IN NUMBER) IS CURSOR c_flex IS SELECT * FROM fac_imp_flex ORDER BY srtkenmerk_omschrijving, kenmerk_volgnummer; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (250); v_errormsg VARCHAR2 (1024); v_errorhint VARCHAR2 (1024); v_count NUMBER; flexmodule VARCHAR2 (3); v_desc VARCHAR2 (255); v_usrtab_key NUMBER; v_kenmerkdomein_key NUMBER; v_srtkenmerk_key NUMBER; v_kenmerk_key NUMBER; v_srtinstallatie_key NUMBER; v_srtgroep_key NUMBER; v_srtdeel_key NUMBER; v_srtdiscipline_key NUMBER; v_discipline_key NUMBER; v_stdmelding_key NUMBER; v_typeopdr_key NUMBER; v_activiteit_key NUMBER; currentversion fac_module.fac_module_version%TYPE; e_transport EXCEPTION; BEGIN -- Init SELECT MAX (fac_module_version) INTO currentversion FROM fac_module; fac.imp_writelog (p_import_key, 'S', 'Facilitor flexkenmerken import versie ' || currentversion, '$Revision$' ); COMMIT; -- Bestaan de gebruikte Eigen tabellen? SELECT COUNT ( * ) INTO v_count FROM fac_imp_flex WHERE fac_usrtab_naam IS NOT NULL AND fac_usrtab_naam NOT IN (SELECT fac_usrtab_naam FROM fac_usrtab); IF (v_count != 0) THEN v_errormsg := 'Ontbrekende Eigen tabel(len)'; RAISE e_transport; END IF; -- Proces de importregel. Als we ergens onderweg -- een fout tegenkomen, doen we een rollback. FOR rec IN c_flex LOOP -- Kenmerkdomeinen: maak nog-niet-bestaande domeinen aan. BEGIN -- bepaal de module IF rec.res_activiteit IS NOT NULL THEN flexmodule := 'RES'; ELSIF rec.bes_discipline IS NOT NULL THEN flexmodule := 'BES'; ELSIF rec.ins_discipline IS NOT NULL THEN flexmodule := 'INS'; ELSE flexmodule := rec.kenmerk_module; -- MLD, FIN, ... END IF; v_kenmerkdomein_key := NULL; IF rec.fac_kenmerkdomein_omschrijving IS NOT NULL THEN v_usrtab_key := NULL; v_kenmerkdomein_key := NULL; v_desc := rec.fac_kenmerkdomein_omschrijving; v_errormsg := 'Fout bij bepalen kenmerkdomein ' || v_desc; -- Bestaat dit domein al? SELECT COUNT ( * ), MIN(fac_kenmerkdomein_key) INTO v_count, v_kenmerkdomein_key FROM fac_kenmerkdomein kd WHERE kd.fac_kenmerkdomein_module = flexmodule AND kd.fac_kenmerkdomein_omschrijving = rec.fac_kenmerkdomein_omschrijving AND fac_kenmerkdomein_verwijder IS NULL; IF (v_count = 0) THEN -- Bestaat nog niet --> aanmaken v_errormsg := 'Fout bij bepalen Eigen tabel ' || rec.fac_usrtab_naam; -- Gebruikt domein een usrtab? IF (rec.fac_usrtab_naam || 'x' != 'x') THEN SELECT fac_usrtab_key INTO v_usrtab_key FROM fac_usrtab WHERE fac_usrtab_naam = rec.fac_usrtab_naam; END IF; -- Domein toevoegen -- (NB: mogelijk bestaat er nog een domein met de goede omschrijving, -- maar met een verwijderdatum. Die negeren we en maken een nieuwe) v_errormsg := 'Fout bij toevoegen kenmerkdomein ' || v_desc; INSERT INTO fac_kenmerkdomein ( fac_kenmerkdomein_module, fac_kenmerkdomein_omschrijving, fac_kenmerkdomein_objectnaam, fac_kenmerkdomein_kolomnaam, fac_kenmerkdomein_kolomtxt, fac_usrtab_key ) VALUES ( flexmodule, rec.fac_kenmerkdomein_omschrijving, rec.fac_kenmerkdomein_objectnaam, rec.fac_kenmerkdomein_kolomnaam, rec.fac_kenmerkdomein_kolomtxt, v_usrtab_key ) RETURNING fac_kenmerkdomein_key INTO v_kenmerkdomein_key; fac.imp_writelog (p_import_key, 'I', flexmodule||'-kenmerkdomein toegevoegd', v_desc); ELSE -- Bestaat al wel fac.imp_writelog (p_import_key, 'I', 'Kenmerkdomein opgehaald', v_desc || ' (' || v_kenmerkdomein_key || ')' ); END IF; END IF; -- Kenmerksoorten: maak nog-niet-bestaande soorten aan. v_srtkenmerk_key := NULL; IF rec.srtkenmerk_omschrijving IS NOT NULL THEN v_desc := rec.srtkenmerk_omschrijving; v_errormsg := 'Fout bij bepalen kenmerksoort ' || v_desc; -- Bestaat dit soort al? CASE flexmodule WHEN 'BES' THEN SELECT COUNT ( * ), MIN(bes_srtkenmerk_key) INTO v_count, v_srtkenmerk_key FROM bes_srtkenmerk WHERE bes_srtkenmerk_omschrijving = rec.srtkenmerk_omschrijving AND bes_srtkenmerk_verwijder IS NULL; WHEN 'MLD' THEN SELECT COUNT ( * ), MIN(mld_srtkenmerk_key) INTO v_count, v_srtkenmerk_key FROM mld_srtkenmerk WHERE mld_srtkenmerk_omschrijving = rec.srtkenmerk_omschrijving AND mld_srtkenmerk_verwijder IS NULL; WHEN 'RES' THEN SELECT COUNT ( * ), MIN(res_srtkenmerk_key) INTO v_count, v_srtkenmerk_key FROM res_srtkenmerk WHERE res_srtkenmerk_omschrijving = rec.srtkenmerk_omschrijving AND res_srtkenmerk_verwijder IS NULL; WHEN 'CNT' THEN SELECT COUNT ( * ), MIN(cnt_srtkenmerk_key) INTO v_count, v_srtkenmerk_key FROM cnt_srtkenmerk WHERE cnt_srtkenmerk_omschrijving = rec.srtkenmerk_omschrijving AND cnt_srtkenmerk_verwijder IS NULL; WHEN 'INS' THEN SELECT COUNT ( * ), MIN(ins_srtkenmerk_key) INTO v_count, v_srtkenmerk_key FROM ins_srtkenmerk WHERE ins_srtkenmerk_omschrijving = rec.srtkenmerk_omschrijving AND ins_srtkenmerk_verwijder IS NULL; END CASE; IF (v_count = 0) THEN -- Bestaat nog niet --> aanmaken -- (NB: mogelijk bestaat er nog een soort met de goede omschrijving, -- maar met een verwijderdatum. Die negeren we en maken een nieuwe) v_errormsg := 'Fout bij toevoegen kenmerksoort ' || v_desc; CASE flexmodule WHEN 'BES' THEN INSERT INTO bes_srtkenmerk ( bes_srtkenmerk_omschrijving, bes_srtkenmerk_code, bes_srtkenmerk_kenmerktype, bes_srtkenmerk_systeem, bes_srtkenmerk_lengte, bes_srtkenmerk_dec, bes_srtkenmerk_nmin, bes_srtkenmerk_nmax, bes_srtkenmerk_dimensie, fac_kenmerkdomein_key ) VALUES ( rec.srtkenmerk_omschrijving, rec.srtkenmerk_code, rec.srtkenmerk_kenmerktype, rec.srtkenmerk_systeem, rec.srtkenmerk_lengte, rec.srtkenmerk_dec, rec.srtkenmerk_nmin, rec.srtkenmerk_nmax, rec.srtkenmerk_dimensie, v_kenmerkdomein_key ) RETURNING bes_srtkenmerk_key INTO v_srtkenmerk_key; WHEN 'MLD' THEN INSERT INTO mld_srtkenmerk ( mld_srtkenmerk_omschrijving, mld_srtkenmerk_code, mld_srtkenmerk_kenmerktype, mld_srtkenmerk_systeem, mld_srtkenmerk_lengte, mld_srtkenmerk_dec, mld_srtkenmerk_nmin, mld_srtkenmerk_nmax, mld_srtkenmerk_dimensie, fac_kenmerkdomein_key ) VALUES ( rec.srtkenmerk_omschrijving, rec.srtkenmerk_code, rec.srtkenmerk_kenmerktype, rec.srtkenmerk_systeem, rec.srtkenmerk_lengte, rec.srtkenmerk_dec, rec.srtkenmerk_nmin, rec.srtkenmerk_nmax, rec.srtkenmerk_dimensie, v_kenmerkdomein_key ) RETURNING mld_srtkenmerk_key INTO v_srtkenmerk_key; WHEN 'RES' THEN INSERT INTO res_srtkenmerk ( res_srtkenmerk_omschrijving, res_srtkenmerk_code, res_srtkenmerk_kenmerktype, res_srtkenmerk_systeem, res_srtkenmerk_lengte, res_srtkenmerk_dec, res_srtkenmerk_nmin, res_srtkenmerk_nmax, res_srtkenmerk_dimensie, fac_kenmerkdomein_key ) VALUES ( rec.srtkenmerk_omschrijving, rec.srtkenmerk_code, rec.srtkenmerk_kenmerktype, rec.srtkenmerk_systeem, rec.srtkenmerk_lengte, rec.srtkenmerk_dec, rec.srtkenmerk_nmin, rec.srtkenmerk_nmax, rec.srtkenmerk_dimensie, v_kenmerkdomein_key ) RETURNING res_srtkenmerk_key INTO v_srtkenmerk_key; WHEN 'CNT' THEN INSERT INTO cnt_srtkenmerk ( cnt_srtkenmerk_omschrijving, cnt_srtkenmerk_code, cnt_srtkenmerk_kenmerktype, cnt_srtkenmerk_systeem, cnt_srtkenmerk_lengte, cnt_srtkenmerk_dec, cnt_srtkenmerk_nmin, cnt_srtkenmerk_nmax, cnt_srtkenmerk_dimensie, fac_kenmerkdomein_key ) VALUES ( rec.srtkenmerk_omschrijving, rec.srtkenmerk_code, rec.srtkenmerk_kenmerktype, rec.srtkenmerk_systeem, rec.srtkenmerk_lengte, rec.srtkenmerk_dec, rec.srtkenmerk_nmin, rec.srtkenmerk_nmax, rec.srtkenmerk_dimensie, v_kenmerkdomein_key ) RETURNING cnt_srtkenmerk_key INTO v_srtkenmerk_key; WHEN 'INS' THEN INSERT INTO ins_srtkenmerk ( ins_srtkenmerk_omschrijving, ins_srtkenmerk_code, ins_srtkenmerk_kenmerktype, ins_srtkenmerk_systeem, ins_srtkenmerk_lengte, ins_srtkenmerk_dec, ins_srtkenmerk_nmin, ins_srtkenmerk_nmax, ins_srtkenmerk_dimensie, fac_kenmerkdomein_key ) VALUES ( rec.srtkenmerk_omschrijving, rec.srtkenmerk_code, rec.srtkenmerk_kenmerktype, rec.srtkenmerk_systeem, rec.srtkenmerk_lengte, rec.srtkenmerk_dec, rec.srtkenmerk_nmin, rec.srtkenmerk_nmax, rec.srtkenmerk_dimensie, v_kenmerkdomein_key ) RETURNING ins_srtkenmerk_key INTO v_srtkenmerk_key; END CASE; fac.imp_writelog (p_import_key, 'I', 'Kenmersoort toegevoegd', v_desc); ELSE -- Bestaat al wel CASE flexmodule WHEN 'BES' THEN UPDATE bes_srtkenmerk SET bes_srtkenmerk_omschrijving = rec.srtkenmerk_omschrijving, bes_srtkenmerk_code = rec.srtkenmerk_code, bes_srtkenmerk_kenmerktype = rec.srtkenmerk_kenmerktype, bes_srtkenmerk_systeem = rec.srtkenmerk_systeem, bes_srtkenmerk_lengte = rec.srtkenmerk_lengte, bes_srtkenmerk_dec = rec.srtkenmerk_dec, bes_srtkenmerk_nmin = rec.srtkenmerk_nmin, bes_srtkenmerk_nmax = rec.srtkenmerk_nmax, bes_srtkenmerk_dimensie = rec.srtkenmerk_dimensie, fac_kenmerkdomein_key = v_kenmerkdomein_key WHERE bes_srtkenmerk_key = v_srtkenmerk_key; WHEN 'MLD' THEN UPDATE mld_srtkenmerk SET mld_srtkenmerk_omschrijving = rec.srtkenmerk_omschrijving, mld_srtkenmerk_code = rec.srtkenmerk_code, mld_srtkenmerk_kenmerktype = rec.srtkenmerk_kenmerktype, mld_srtkenmerk_systeem = rec.srtkenmerk_systeem, mld_srtkenmerk_lengte = rec.srtkenmerk_lengte, mld_srtkenmerk_dec = rec.srtkenmerk_dec, mld_srtkenmerk_nmin = rec.srtkenmerk_nmin, mld_srtkenmerk_nmax = rec.srtkenmerk_nmax, mld_srtkenmerk_dimensie = rec.srtkenmerk_dimensie, fac_kenmerkdomein_key = v_kenmerkdomein_key WHERE mld_srtkenmerk_key = v_srtkenmerk_key; WHEN 'RES' THEN UPDATE res_srtkenmerk SET res_srtkenmerk_omschrijving = rec.srtkenmerk_omschrijving, res_srtkenmerk_code = rec.srtkenmerk_code, res_srtkenmerk_kenmerktype = rec.srtkenmerk_kenmerktype, res_srtkenmerk_systeem = rec.srtkenmerk_systeem, res_srtkenmerk_lengte = rec.srtkenmerk_lengte, res_srtkenmerk_dec = rec.srtkenmerk_dec, res_srtkenmerk_nmin = rec.srtkenmerk_nmin, res_srtkenmerk_nmax = rec.srtkenmerk_nmax, res_srtkenmerk_dimensie = rec.srtkenmerk_dimensie, fac_kenmerkdomein_key = v_kenmerkdomein_key WHERE res_srtkenmerk_key = v_srtkenmerk_key; WHEN 'CNT' THEN UPDATE cnt_srtkenmerk SET cnt_srtkenmerk_omschrijving = rec.srtkenmerk_omschrijving, cnt_srtkenmerk_code = rec.srtkenmerk_code, cnt_srtkenmerk_kenmerktype = rec.srtkenmerk_kenmerktype, cnt_srtkenmerk_systeem = rec.srtkenmerk_systeem, cnt_srtkenmerk_lengte = rec.srtkenmerk_lengte, cnt_srtkenmerk_dec = rec.srtkenmerk_dec, cnt_srtkenmerk_nmin = rec.srtkenmerk_nmin, cnt_srtkenmerk_nmax = rec.srtkenmerk_nmax, cnt_srtkenmerk_dimensie = rec.srtkenmerk_dimensie, fac_kenmerkdomein_key = v_kenmerkdomein_key WHERE cnt_srtkenmerk_key = v_srtkenmerk_key; WHEN 'INS' THEN UPDATE ins_srtkenmerk SET ins_srtkenmerk_omschrijving = rec.srtkenmerk_omschrijving, ins_srtkenmerk_code = rec.srtkenmerk_code, ins_srtkenmerk_kenmerktype = rec.srtkenmerk_kenmerktype, ins_srtkenmerk_systeem = rec.srtkenmerk_systeem, ins_srtkenmerk_lengte = rec.srtkenmerk_lengte, ins_srtkenmerk_dec = rec.srtkenmerk_dec, ins_srtkenmerk_nmin = rec.srtkenmerk_nmin, ins_srtkenmerk_nmax = rec.srtkenmerk_nmax, ins_srtkenmerk_dimensie = rec.srtkenmerk_dimensie, fac_kenmerkdomein_key = v_kenmerkdomein_key WHERE ins_srtkenmerk_key = v_srtkenmerk_key; END CASE; fac.imp_writelog (p_import_key, 'I', 'Kenmerksoort aangepast', v_desc || ' (' || v_srtkenmerk_key || ')' ); END IF; END IF; -- Kenmerken -- 1) bepaal keys -- 2a) voeg toe -- 2b) update v_kenmerk_key := NULL; CASE flexmodule WHEN 'BES' THEN -- Bepaal catalogus / groep / artikel v_errormsg := 'Fout bij bepalen catalogus ' || rec.bes_discipline; SELECT ins_discipline_key INTO v_discipline_key FROM bes_discipline WHERE ins_discipline_verwijder IS NULL AND ins_discipline_omschrijving = rec.bes_discipline; v_srtinstallatie_key := v_discipline_key; IF rec.bes_srtgroep IS NOT NULL THEN v_errormsg := 'Fout bij bepalen groep ' || rec.bes_discipline || '/' || rec.bes_srtgroep; SELECT bes_srtgroep_key INTO v_srtgroep_key FROM bes_srtgroep WHERE bes_srtgroep_verwijder IS NULL AND ins_discipline_key = v_discipline_key AND bes_srtgroep_omschrijving = rec.bes_srtgroep; v_srtinstallatie_key := v_srtgroep_key; END IF; IF rec.bes_srtdeel IS NOT NULL THEN v_errormsg := 'Fout bij bepalen artikel ' || rec.bes_discipline || '/' || rec.bes_srtgroep || '/' || rec.bes_srtdeel; SELECT bes_srtdeel_key INTO v_srtdeel_key FROM bes_srtdeel WHERE bes_srtdeel_verwijder IS NULL AND bes_srtgroep_key = v_srtgroep_key AND bes_srtdeel_omschrijving = rec.bes_srtdeel; v_srtinstallatie_key := v_srtdeel_key; END IF; v_desc := rec.srtkenmerk_omschrijving || ' (' || rec.bes_discipline || '/' || rec.bes_srtgroep || '/' || rec.bes_srtdeel || ')'; -- Bestaat dit kenmerk al? v_errormsg := 'Fout bij bepalen kenmerk ' || v_desc; SELECT COUNT ( * ), MIN(bes_kenmerk_key) INTO v_count, v_kenmerk_key FROM bes_kenmerk WHERE bes_srtkenmerk_key = v_srtkenmerk_key AND bes_kenmerk_niveau = rec.kenmerk_niveau AND bes_kenmerk_type = rec.kenmerk_type AND bes_srtinstallatie_key = v_srtinstallatie_key AND (bes_kenmerk_omschrijving = rec.kenmerk_omschr OR (rec.kenmerk_omschr IS NULL AND bes_kenmerk_omschrijving IS NULL)); IF (v_count = 0) THEN -- Bestaat nog niet --> aanmaken v_errormsg := 'Fout bij toevoegen kenmerk ' || v_desc; INSERT INTO bes_kenmerk ( bes_srtkenmerk_key, bes_srtinstallatie_key, bes_kenmerk_niveau, bes_kenmerk_type, bes_kenmerk_verplicht, bes_kenmerk_groep, bes_kenmerk_rolcode, bes_kenmerk_volgnummer, bes_kenmerk_default, bes_kenmerk_verwijder, bes_kenmerk_toonbaar, bes_kenmerk_uniek, bes_kenmerk_hint, bes_kenmerk_regexp, bes_kenmerk_show_expr, bes_kenmerk_code, bes_kenmerk_omschrijving ) VALUES ( v_srtkenmerk_key, v_srtinstallatie_key, rec.kenmerk_niveau, rec.kenmerk_type, fac.safe_to_number (rec.kenmerk_verplicht), fac.safe_to_number (rec.kenmerk_groep), fac.safe_to_number (rec.kenmerk_rolcode), fac.safe_to_number (rec.kenmerk_volgnummer), rec.kenmerk_default, TO_DATE (rec.kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS'), fac.safe_to_number (rec.kenmerk_toonbaar), fac.safe_to_number (rec.kenmerk_uniek), rec.kenmerk_hint, rec.kenmerk_regexp, rec.kenmerk_show_expr, rec.kenmerk_code, rec.kenmerk_omschr ) RETURNING bes_kenmerk_key INTO v_kenmerk_key; fac.imp_writelog (p_import_key, 'I', 'Kenmerk toegevoegd', v_desc || ' (' || v_kenmerk_key || ')'); ELSE -- Bestaat al wel --> updaten (dat kan ook verwijderen zijn!) v_errormsg := 'Fout bij bijwerken kenmerk ' || v_desc; UPDATE bes_kenmerk SET bes_srtkenmerk_key = v_srtkenmerk_key, bes_srtinstallatie_key = v_srtinstallatie_key, bes_kenmerk_niveau = rec.kenmerk_niveau, bes_kenmerk_type = rec.kenmerk_type, bes_kenmerk_verplicht = fac.safe_to_number (rec.kenmerk_verplicht), bes_kenmerk_groep = fac.safe_to_number (rec.kenmerk_groep), bes_kenmerk_rolcode = fac.safe_to_number (rec.kenmerk_rolcode), bes_kenmerk_volgnummer = fac.safe_to_number (rec.kenmerk_volgnummer), bes_kenmerk_default = rec.kenmerk_default, bes_kenmerk_verwijder = TO_DATE (rec.kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS'), bes_kenmerk_toonbaar = fac.safe_to_number (rec.kenmerk_toonbaar), bes_kenmerk_uniek = fac.safe_to_number (rec.kenmerk_uniek), bes_kenmerk_hint = rec.kenmerk_hint, bes_kenmerk_regexp = rec.kenmerk_regexp, bes_kenmerk_show_expr = rec.kenmerk_show_expr, bes_kenmerk_code = rec.kenmerk_code, bes_kenmerk_omschrijving = rec.kenmerk_omschr WHERE bes_kenmerk_key = v_kenmerk_key AND bes_kenmerk_verwijder IS NULL; fac.imp_writelog (p_import_key, 'I', 'Kenmerk bijgewerkt', v_desc || ' (' || v_kenmerk_key || ')'); END IF; WHEN 'MLD' THEN -- Bepaal vakgroeptype / vakgroep / stdmelding / opdrachttype v_srtdiscipline_key := NULL; v_discipline_key := NULL; v_stdmelding_key := NULL; v_typeopdr_key := NULL; IF rec.mld_srtdiscipline IS NOT NULL THEN v_errormsg := 'Fout bij bepalen srtdiscipline ' || rec.mld_srtdiscipline; SELECT ins_srtdiscipline_key INTO v_srtdiscipline_key FROM ins_srtdiscipline WHERE ins_srtdiscipline_verwijder IS NULL AND ins_srtdiscipline_omschrijving = rec.mld_srtdiscipline; v_stdmelding_key := v_srtdiscipline_key; END IF; IF rec.mld_discipline IS NOT NULL THEN v_errormsg := 'Fout bij bepalen discipline ' || rec.mld_srtdiscipline || '/' || rec.mld_discipline; SELECT ins_discipline_key INTO v_discipline_key FROM mld_discipline WHERE ins_discipline_verwijder IS NULL AND ins_srtdiscipline_key = v_srtdiscipline_key AND ins_discipline_omschrijving = rec.mld_discipline; v_stdmelding_key := v_discipline_key; END IF; IF rec.mld_stdmelding IS NOT NULL THEN v_errormsg := 'Fout bij bepalen stdmelding ' || rec.mld_srtdiscipline || '/' || rec.mld_discipline || '/' || rec.mld_stdmelding; SELECT mld_stdmelding_key INTO v_stdmelding_key FROM mld_stdmelding WHERE mld_stdmelding_verwijder IS NULL AND mld_ins_discipline_key = v_discipline_key AND mld_stdmelding_omschrijving = rec.mld_stdmelding; END IF; IF rec.mld_typeopdr IS NOT NULL THEN v_errormsg := 'Fout bij bepalen typeopdr ' || rec.mld_typeopdr; SELECT mld_typeopdr_key INTO v_typeopdr_key FROM mld_typeopdr WHERE mld_typeopdr_omschrijving = rec.mld_typeopdr; END IF; v_desc := rec.srtkenmerk_omschrijving || ' [' || v_srtkenmerk_key || '] (' || rec.mld_srtdiscipline || '/' || rec.mld_discipline || '/' || rec.mld_stdmelding || ' - ' || rec.mld_typeopdr || ')'; -- Bestaat dit kenmerk al? v_errormsg := 'Fout bij bepalen kenmerk ' || v_desc; SELECT COUNT ( * ), MIN(mld_kenmerk_key) INTO v_count, v_kenmerk_key FROM mld_kenmerk WHERE mld_srtkenmerk_key = v_srtkenmerk_key AND mld_kenmerk_niveau = rec.kenmerk_niveau AND mld_kenmerk_groep = rec.kenmerk_groep AND (mld_stdmelding_key = v_stdmelding_key OR mld_typeopdr_key = v_typeopdr_key OR (mld_stdmelding_key IS NULL AND mld_typeopdr_key IS NULL) ) AND (mld_kenmerk_omschrijving = rec.kenmerk_omschr OR (rec.kenmerk_omschr IS NULL AND mld_kenmerk_omschrijving IS NULL)); IF (v_count = 0) THEN -- Bestaat nog niet --> aanmaken v_errormsg := 'Fout bij toevoegen kenmerk ' || v_desc; INSERT INTO mld_kenmerk ( mld_srtkenmerk_key, mld_stdmelding_key, mld_typeopdr_key, mld_kenmerk_niveau, mld_kenmerk_verplicht, mld_kenmerk_groep, mld_kenmerk_rolcode, mld_kenmerk_volgnummer, mld_kenmerk_default, mld_kenmerk_verwijder, mld_kenmerk_toonbaar, mld_kenmerk_uniek, mld_kenmerk_hint, mld_kenmerk_regexp, mld_kenmerk_show_expr, mld_kenmerk_code, mld_kenmerk_omschrijving, mld_kenmerk_verplicht_status, mld_kenmerk_onderbreken, mld_kenmerk_obligation_fill ) VALUES ( v_srtkenmerk_key, v_stdmelding_key, v_typeopdr_key, rec.kenmerk_niveau, fac.safe_to_number (rec.kenmerk_verplicht), fac.safe_to_number (rec.kenmerk_groep), fac.safe_to_number (rec.kenmerk_rolcode), fac.safe_to_number (rec.kenmerk_volgnummer), rec.kenmerk_default, TO_DATE (rec.kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS'), fac.safe_to_number (rec.kenmerk_toonbaar), fac.safe_to_number (rec.kenmerk_uniek), rec.kenmerk_hint, rec.kenmerk_regexp, rec.kenmerk_show_expr, rec.kenmerk_code, rec.kenmerk_omschr, fac.safe_to_number (rec.kenmerk_extra_1), fac.safe_to_number (rec.kenmerk_extra_2), fac.safe_to_number (rec.kenmerk_extra_3) ) RETURNING mld_kenmerk_key INTO v_kenmerk_key; fac.imp_writelog (p_import_key, 'I', 'Kenmerk toegevoegd', v_desc || ' (' || v_kenmerk_key || ')'); ELSE -- Bestaat al wel --> updaten (dat kan ook verwijderen zijn!) v_errormsg := 'Fout bij bijwerken kenmerk ' || '[' || v_kenmerk_key || ']' || ' Gegevens:' || v_stdmelding_key || ',' || v_srtkenmerk_key || ',' || rec.kenmerk_niveau || ',' || v_desc; UPDATE mld_kenmerk SET mld_srtkenmerk_key = v_srtkenmerk_key, mld_stdmelding_key = v_stdmelding_key, mld_typeopdr_key = v_typeopdr_key, mld_kenmerk_niveau = rec.kenmerk_niveau, mld_kenmerk_verplicht = fac.safe_to_number (rec.kenmerk_verplicht), mld_kenmerk_groep = fac.safe_to_number (rec.kenmerk_groep), mld_kenmerk_rolcode = fac.safe_to_number (rec.kenmerk_rolcode), mld_kenmerk_volgnummer = fac.safe_to_number (rec.kenmerk_volgnummer), mld_kenmerk_default = rec.kenmerk_default, mld_kenmerk_verwijder = TO_DATE (rec.kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS'), mld_kenmerk_toonbaar = fac.safe_to_number (rec.kenmerk_toonbaar), mld_kenmerk_uniek = fac.safe_to_number (rec.kenmerk_uniek), mld_kenmerk_hint = rec.kenmerk_hint, mld_kenmerk_regexp = rec.kenmerk_regexp, mld_kenmerk_show_expr = rec.kenmerk_show_expr, mld_kenmerk_code = rec.kenmerk_code, mld_kenmerk_omschrijving = rec.kenmerk_omschr, mld_kenmerk_verplicht_status = fac.safe_to_number (rec.kenmerk_extra_1), mld_kenmerk_onderbreken = fac.safe_to_number (rec.kenmerk_extra_2), mld_kenmerk_obligation_fill = fac.safe_to_number (rec.kenmerk_extra_3) WHERE mld_kenmerk_key = v_kenmerk_key AND mld_kenmerk_verwijder IS NULL; fac.imp_writelog (p_import_key, 'I', 'Kenmerk bijgewerkt', v_desc || ' (' || v_kenmerk_key || ')'); END IF; WHEN 'RES' THEN -- Bepaal activiteit v_activiteit_key := NULL; v_errormsg := 'Fout bij bepalen activiteit ' || rec.res_srtactiviteit || '/' || rec.res_activiteit; SELECT res_activiteit_key INTO v_activiteit_key FROM res_srtactiviteit rsa, res_activiteit ra WHERE res_srtactiviteit_verwijder IS NULL AND res_activiteit_verwijder IS NULL AND rsa.res_srtactiviteit_key = ra.res_srtactiviteit_key AND rsa.res_srtactiviteit_omschrijving = rec.res_srtactiviteit AND ra.res_activiteit_omschrijving = rec.res_activiteit; v_desc := rec.srtkenmerk_omschrijving || ' (' || rec.res_srtactiviteit || '/' || rec.res_activiteit || ')'; -- Bestaat dit kenmerk al? v_errormsg := 'Fout bij bepalen kenmerk ' || v_desc; SELECT COUNT ( * ), MIN(res_kenmerk_key) INTO v_count, v_kenmerk_key FROM res_kenmerk WHERE res_srtkenmerk_key = v_srtkenmerk_key AND res_activiteit_key = v_activiteit_key AND (res_kenmerk_omschrijving = rec.kenmerk_omschr OR (rec.kenmerk_omschr IS NULL AND res_kenmerk_omschrijving IS NULL)); IF (v_count = 0) THEN -- Bestaat nog niet --> aanmaken v_errormsg := 'Fout bij toevoegen kenmerk ' || v_desc; INSERT INTO res_kenmerk ( res_srtkenmerk_key, res_activiteit_key, res_kenmerk_niveau, res_kenmerk_verplicht, res_kenmerk_groep, res_kenmerk_rolcode, res_kenmerk_volgnummer, res_kenmerk_default, res_kenmerk_verwijder, res_kenmerk_toonbaar, res_kenmerk_uniek, res_kenmerk_hint, res_kenmerk_regexp, res_kenmerk_show_expr, res_kenmerk_code, res_kenmerk_omschrijving ) VALUES ( v_srtkenmerk_key, v_activiteit_key, rec.kenmerk_niveau, fac.safe_to_number (rec.kenmerk_verplicht), fac.safe_to_number (rec.kenmerk_groep), fac.safe_to_number (rec.kenmerk_rolcode), fac.safe_to_number (rec.kenmerk_volgnummer), rec.kenmerk_default, TO_DATE (rec.kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS'), fac.safe_to_number (rec.kenmerk_toonbaar), fac.safe_to_number (rec.kenmerk_uniek), rec.kenmerk_hint, rec.kenmerk_regexp, rec.kenmerk_show_expr, rec.kenmerk_code, rec.kenmerk_omschr ) RETURNING res_kenmerk_key INTO v_kenmerk_key; fac.imp_writelog (p_import_key, 'I', 'Kenmerk toegevoegd', v_desc || ' (' || v_kenmerk_key || ')'); ELSE -- Bestaat al wel --> updaten (dat kan ook verwijderen zijn!) v_errormsg := 'Fout bij bijwerken kenmerk ' || v_desc; UPDATE res_kenmerk SET res_srtkenmerk_key = v_srtkenmerk_key, res_activiteit_key = v_activiteit_key, res_kenmerk_niveau = rec.kenmerk_niveau, res_kenmerk_verplicht = fac.safe_to_number (rec.kenmerk_verplicht), res_kenmerk_groep = fac.safe_to_number (rec.kenmerk_groep), res_kenmerk_rolcode = fac.safe_to_number (rec.kenmerk_rolcode), res_kenmerk_volgnummer = fac.safe_to_number (rec.kenmerk_volgnummer), res_kenmerk_default = rec.kenmerk_default, res_kenmerk_verwijder = TO_DATE (rec.kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS'), res_kenmerk_toonbaar = fac.safe_to_number (rec.kenmerk_toonbaar), res_kenmerk_uniek = fac.safe_to_number (rec.kenmerk_uniek), res_kenmerk_hint = rec.kenmerk_hint, res_kenmerk_regexp = rec.kenmerk_regexp, res_kenmerk_show_expr = rec.kenmerk_show_expr, res_kenmerk_code = rec.kenmerk_code, res_kenmerk_omschrijving = rec.kenmerk_omschr WHERE res_kenmerk_key = v_kenmerk_key AND res_kenmerk_verwijder IS NULL; fac.imp_writelog (p_import_key, 'I', 'Kenmerk bijgewerkt', v_desc || ' (' || v_kenmerk_key || ')'); END IF; WHEN 'CNT' THEN -- Bepaal contractsoort v_discipline_key := NULL; v_errormsg := 'Fout bij bepalen contractsoort ' || rec.cnt_discipline; IF (rec.cnt_discipline IS NOT NULL OR rec.cnt_discipline != '') THEN SELECT ins_discipline_key INTO v_discipline_key FROM cnt_discipline WHERE ins_discipline_verwijder IS NULL AND ins_discipline_omschrijving = rec.cnt_discipline; END IF; v_desc := rec.srtkenmerk_omschrijving || ' (' || rec.cnt_discipline || ')'; -- Bestaat dit kenmerk al? v_errormsg := 'Fout bij bepalen kenmerk ' || v_desc; SELECT COUNT ( * ), MIN(cnt_kenmerk_key) INTO v_count, v_kenmerk_key FROM cnt_kenmerk WHERE cnt_srtkenmerk_key = v_srtkenmerk_key AND ( (cnt_srtcontract_key = v_discipline_key) OR (v_discipline_key IS NULL AND cnt_srtcontract_key IS NULL) ) AND ( (cnt_kenmerk_omschrijving = rec.kenmerk_omschr) OR (rec.kenmerk_omschr IS NULL AND cnt_kenmerk_omschrijving IS NULL) ); IF (v_count = 0) THEN -- Bestaat nog niet --> aanmaken v_errormsg := 'Fout bij toevoegen kenmerk ' || v_desc; INSERT INTO cnt_kenmerk ( cnt_srtkenmerk_key, cnt_srtcontract_key, cnt_kenmerk_niveau, cnt_kenmerk_verplicht, cnt_kenmerk_groep, cnt_kenmerk_toonbaar, cnt_kenmerk_rolcode, cnt_kenmerk_volgnummer, cnt_kenmerk_uniek, cnt_kenmerk_verwijder, cnt_kenmerk_default, cnt_kenmerk_hint, cnt_kenmerk_regexp, cnt_kenmerk_show_expr, cnt_kenmerk_code, cnt_kenmerk_omschrijving ) VALUES ( v_srtkenmerk_key, v_discipline_key, rec.kenmerk_niveau, fac.safe_to_number (rec.kenmerk_verplicht), fac.safe_to_number (rec.kenmerk_groep), fac.safe_to_number (rec.kenmerk_toonbaar), fac.safe_to_number (rec.kenmerk_rolcode), fac.safe_to_number (rec.kenmerk_volgnummer), fac.safe_to_number (rec.kenmerk_uniek), TO_DATE (rec.kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS'), rec.kenmerk_default, rec.kenmerk_hint, rec.kenmerk_regexp, rec.kenmerk_show_expr, rec.kenmerk_code, rec.kenmerk_omschr ) RETURNING cnt_kenmerk_key INTO v_kenmerk_key; fac.imp_writelog (p_import_key, 'I', 'Kenmerk toegevoegd', v_desc || ' (' || v_kenmerk_key || ')'); ELSE -- Bestaat al wel --> updaten (dat kan ook verwijderen zijn!) v_errormsg := 'Fout bij bijwerken kenmerk ' || v_desc; UPDATE cnt_kenmerk SET cnt_srtkenmerk_key = v_srtkenmerk_key, cnt_srtcontract_key = v_discipline_key, cnt_kenmerk_niveau = rec.kenmerk_niveau, cnt_kenmerk_verplicht = fac.safe_to_number (rec.kenmerk_verplicht), cnt_kenmerk_groep = fac.safe_to_number (rec.kenmerk_groep), cnt_kenmerk_toonbaar = fac.safe_to_number (rec.kenmerk_toonbaar), cnt_kenmerk_rolcode = fac.safe_to_number (rec.kenmerk_rolcode), cnt_kenmerk_volgnummer = fac.safe_to_number (rec.kenmerk_volgnummer), cnt_kenmerk_uniek = fac.safe_to_number (rec.kenmerk_uniek), cnt_kenmerk_verwijder = TO_DATE (rec.kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS'), cnt_kenmerk_default = rec.kenmerk_default, cnt_kenmerk_hint = rec.kenmerk_hint, cnt_kenmerk_regexp = rec.kenmerk_regexp, cnt_kenmerk_show_expr = rec.kenmerk_show_expr, cnt_kenmerk_code = rec.kenmerk_code, cnt_kenmerk_omschrijving = rec.kenmerk_omschr WHERE cnt_kenmerk_key = v_kenmerk_key AND cnt_kenmerk_verwijder IS NULL; fac.imp_writelog (p_import_key, 'I', 'Kenmerk bijgewerkt', v_desc || ' (' || v_kenmerk_key || ')'); END IF; WHEN 'INS' THEN IF rec.kenmerk_niveau = 'C' THEN -- Kenmerk is inspectie-gerelateerd (dus via ins_srtcontrole) -- Bepalen van soort controle, dat is op basis van de omschrijving van soort controle in kolom ins_srtgroep, icm taakcategorie kolom rec.ins_discipline v_errormsg := 'Fout bij bepalen soort controle ' || rec.ins_discipline || ' - ' || rec.ins_srtgroep; SELECT ins_srtcontrole_key INTO v_srtinstallatie_key FROM ins_srtcontrole isc, ctr_discipline cd WHERE isc.ins_srtcontrole_omschrijving = rec.ins_srtgroep AND isc.ctr_discipline_key = cd.ins_discipline_key AND cd.ins_discipline_omschrijving = rec.ins_discipline; v_desc := rec.srtkenmerk_omschrijving || ' (' || rec.ins_discipline || '/' || rec.ins_srtgroep || ')'; ELSE -- Kenmerk is object-gerelateerd (dus via ins_discipline, ins_srtgroep of ins_srtdeel) -- Bepaal discipline / (soort)groep / objectsoort v_errormsg := 'Fout bij bepalen discipline ' || rec.ins_discipline; SELECT ins_discipline_key INTO v_discipline_key FROM ins_discipline WHERE ins_discipline_verwijder IS NULL AND ins_discipline_omschrijving = rec.ins_discipline; v_srtinstallatie_key := v_discipline_key; IF rec.ins_srtgroep IS NOT NULL THEN v_errormsg := 'Fout bij bepalen groep ' || rec.ins_discipline || '/' || rec.ins_srtgroep; SELECT ins_srtgroep_key INTO v_srtgroep_key FROM ins_srtgroep WHERE ins_srtgroep_verwijder IS NULL AND ins_discipline_key = v_discipline_key AND ins_srtgroep_omschrijving = rec.ins_srtgroep; v_srtinstallatie_key := v_srtgroep_key; END IF; IF rec.ins_srtdeel IS NOT NULL THEN v_errormsg := 'Fout bij objectsoort ' || rec.ins_discipline || '/' || rec.ins_srtgroep || '/' || rec.ins_srtdeel; SELECT ins_srtdeel_key INTO v_srtdeel_key FROM ins_srtdeel WHERE ins_srtdeel_verwijder IS NULL AND ins_srtgroep_key = v_srtgroep_key AND ins_srtdeel_omschrijving = rec.ins_srtdeel; v_srtinstallatie_key := v_srtdeel_key; END IF; v_desc := rec.srtkenmerk_omschrijving || ' (' || rec.ins_discipline || '/' || rec.ins_srtgroep || '/' || rec.ins_srtdeel || ')'; END IF; -- Bestaat dit kenmerk al? v_errormsg := 'Fout bij bepalen kenmerk ' || v_desc; SELECT COUNT ( * ), MIN(ins_kenmerk_key) INTO v_count, v_kenmerk_key FROM ins_kenmerk WHERE ins_srtkenmerk_key = v_srtkenmerk_key AND ins_kenmerk_niveau = rec.kenmerk_niveau AND ins_kenmerk_bewerkniveau = rec.kenmerk_type AND ins_srtinstallatie_key = v_srtinstallatie_key AND (ins_kenmerk_omschrijving = rec.kenmerk_omschr OR (rec.kenmerk_omschr IS NULL AND ins_kenmerk_omschrijving IS NULL)) AND ins_kenmerk_verwijder IS NULL; -- MB: Let op, deze verbetering in de vorm van extra conditie bij INS erbij gezet, -- Is niet bij de andere (RES,MLD,BES,CNT) takken aangepast. Kan tzt eventueel indien hier meldingen over komen. -- Dit zorgt ervoor dat een verwijderd kenmerk in doel met dezelfde kenmerksoort NIET wordt beschouwd als kenmerk bestaat al, want dan wordt een update geprobeerd die faalt. -- Nu wordt een nieuw kenmerk van die soort aangemaakt. Zie details in call UWVA#32742 IF (v_count = 0) THEN -- Bestaat nog niet --> aanmaken v_errormsg := 'Fout bij toevoegen kenmerk ' || v_desc; INSERT INTO ins_kenmerk ( ins_srtkenmerk_key, ins_srtinstallatie_key, ins_kenmerk_niveau, ins_kenmerk_bewerkniveau, ins_kenmerk_verplicht, ins_kenmerk_groep, ins_kenmerk_rolcode, ins_kenmerk_volgnummer, ins_kenmerk_default, ins_kenmerk_verwijder, ins_kenmerk_toonbaar, ins_kenmerk_uniek, ins_kenmerk_hint, ins_kenmerk_regexp, ins_kenmerk_show_expr, ins_kenmerk_code, ins_kenmerk_omschrijving, ins_kenmerk_meetwaarde, ins_kenmerk_wissen ) VALUES ( v_srtkenmerk_key, v_srtinstallatie_key, rec.kenmerk_niveau, rec.kenmerk_type, fac.safe_to_number (rec.kenmerk_verplicht), fac.safe_to_number (rec.kenmerk_groep), fac.safe_to_number (rec.kenmerk_rolcode), fac.safe_to_number (rec.kenmerk_volgnummer), rec.kenmerk_default, TO_DATE (rec.kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS'), fac.safe_to_number (rec.kenmerk_toonbaar), fac.safe_to_number (rec.kenmerk_uniek), rec.kenmerk_hint, rec.kenmerk_regexp, rec.kenmerk_show_expr, rec.kenmerk_code, rec.kenmerk_omschr, fac.safe_to_number (rec.kenmerk_extra_1), fac.safe_to_number (rec.kenmerk_extra_2) ) RETURNING ins_kenmerk_key INTO v_kenmerk_key; fac.imp_writelog (p_import_key, 'I', 'Kenmerk toegevoegd', v_desc || ' (' || v_kenmerk_key || ')'); ELSE -- Bestaat al wel --> updaten (dat kan ook verwijderen zijn!) v_errormsg := 'Fout bij bijwerken kenmerk ' || v_desc; UPDATE ins_kenmerk SET ins_srtkenmerk_key = v_srtkenmerk_key, ins_srtinstallatie_key = v_srtinstallatie_key, ins_kenmerk_niveau = rec.kenmerk_niveau, ins_kenmerk_bewerkniveau = rec.kenmerk_type, ins_kenmerk_verplicht = fac.safe_to_number (rec.kenmerk_verplicht), ins_kenmerk_groep = fac.safe_to_number (rec.kenmerk_groep), ins_kenmerk_rolcode = fac.safe_to_number (rec.kenmerk_rolcode), ins_kenmerk_volgnummer = fac.safe_to_number (rec.kenmerk_volgnummer), ins_kenmerk_default = rec.kenmerk_default, ins_kenmerk_verwijder = TO_DATE (rec.kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS'), ins_kenmerk_toonbaar = fac.safe_to_number (rec.kenmerk_toonbaar), ins_kenmerk_uniek = fac.safe_to_number (rec.kenmerk_uniek), ins_kenmerk_hint = rec.kenmerk_hint, ins_kenmerk_regexp = rec.kenmerk_regexp, ins_kenmerk_show_expr = rec.kenmerk_show_expr, ins_kenmerk_code = rec.kenmerk_code, ins_kenmerk_omschrijving = rec.kenmerk_omschr, ins_kenmerk_meetwaarde = fac.safe_to_number (rec.kenmerk_extra_1), ins_kenmerk_wissen = fac.safe_to_number (rec.kenmerk_extra_2) WHERE ins_kenmerk_key = v_kenmerk_key AND ins_kenmerk_verwijder IS NULL; fac.imp_writelog (p_import_key, 'I', 'Kenmerk bijgewerkt', v_desc || ' (' || v_kenmerk_key || ')'); END IF; WHEN 'FIN' THEN -- Bestaat dit kenmerk al? v_desc := rec.kenmerk_omschr; v_errormsg := 'Fout bij bepalen kenmerk ' || v_desc; SELECT COUNT (*), MIN(fin_kenmerk_key) INTO v_count, v_kenmerk_key FROM fin_kenmerk WHERE (fin_kenmerk_omschrijving = rec.kenmerk_omschr OR (rec.kenmerk_omschr IS NULL AND fin_kenmerk_omschrijving IS NULL)); IF (v_count = 0) THEN -- Bestaat nog niet --> aanmaken v_errormsg := 'Fout bij toevoegen kenmerk ' || v_desc; INSERT INTO fin_kenmerk ( fin_kenmerk_kenmerktype, fin_kenmerk_systeem, fin_kenmerk_lengte, fin_kenmerk_dec, fin_kenmerk_nmin, fin_kenmerk_nmax, fin_kenmerk_dimensie, fin_kenmerk_type, fin_kenmerk_verplicht, fin_kenmerk_rolcode, fin_kenmerk_volgnr, fin_kenmerk_groep, fin_kenmerk_default, fin_kenmerk_verwijder, fin_kenmerk_toonbaar, fin_kenmerk_uniek, fin_kenmerk_hint, fin_kenmerk_regexp, fin_kenmerk_show_expr, fin_kenmerk_code, fin_kenmerk_omschrijving ) VALUES ( rec.srtkenmerk_kenmerktype, rec.srtkenmerk_systeem, rec.srtkenmerk_lengte, rec.srtkenmerk_dec, rec.srtkenmerk_nmin, rec.srtkenmerk_nmax, rec.srtkenmerk_dimensie, rec.kenmerk_type, fac.safe_to_number (rec.kenmerk_verplicht), fac.safe_to_number (rec.kenmerk_rolcode), fac.safe_to_number (rec.kenmerk_volgnummer), fac.safe_to_number (rec.kenmerk_groep), rec.kenmerk_default, TO_DATE (rec.kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS'), fac.safe_to_number (rec.kenmerk_toonbaar), fac.safe_to_number (rec.kenmerk_uniek), rec.kenmerk_hint, rec.kenmerk_regexp, rec.kenmerk_show_expr, rec.kenmerk_code, rec.kenmerk_omschr ) RETURNING fin_kenmerk_key INTO v_kenmerk_key; fac.imp_writelog (p_import_key, 'I', 'Kenmerk toegevoegd', v_desc || ' (' || v_kenmerk_key || ')'); ELSE -- Bestaat al wel --> updaten (dat kan ook verwijderen zijn!) v_errormsg := 'Fout bij bijwerken kenmerk ' || v_desc; UPDATE fin_kenmerk SET fin_kenmerk_kenmerktype = rec.srtkenmerk_kenmerktype, fin_kenmerk_systeem = rec.srtkenmerk_systeem, fin_kenmerk_lengte = rec.srtkenmerk_lengte, fin_kenmerk_dec = rec.srtkenmerk_dec, fin_kenmerk_nmin = rec.srtkenmerk_nmin, fin_kenmerk_nmax = rec.srtkenmerk_nmax, fin_kenmerk_dimensie = rec.srtkenmerk_dimensie, fin_kenmerk_type = rec.kenmerk_type, fin_kenmerk_verplicht = fac.safe_to_number (rec.kenmerk_verplicht), fin_kenmerk_groep = fac.safe_to_number (rec.kenmerk_groep), fin_kenmerk_rolcode = fac.safe_to_number (rec.kenmerk_rolcode), fin_kenmerk_volgnr = fac.safe_to_number (rec.kenmerk_volgnummer), fin_kenmerk_default = rec.kenmerk_default, fin_kenmerk_verwijder = TO_DATE (rec.kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS'), fin_kenmerk_toonbaar = fac.safe_to_number (rec.kenmerk_toonbaar), fin_kenmerk_uniek = fac.safe_to_number (rec.kenmerk_uniek), fin_kenmerk_hint = rec.kenmerk_hint, fin_kenmerk_regexp = rec.kenmerk_regexp, fin_kenmerk_show_expr = rec.kenmerk_show_expr, fin_kenmerk_code = rec.kenmerk_code, fin_kenmerk_omschrijving = rec.kenmerk_omschr WHERE fin_kenmerk_key = v_kenmerk_key AND fin_kenmerk_verwijder IS NULL; fac.imp_writelog (p_import_key, 'I', 'Kenmerk bijgewerkt', v_desc || ' (' || v_kenmerk_key || ')'); END IF; END CASE; END; END LOOP; -------------------------------------------------------------------------------- -- Als we hier uitkomen, is alles goed gegaan en kunnen we committen COMMIT; -- Als er ergens een fout optreedt, dan worden alle voorgaande mutaties teruggedraaid en wordt er alleen de logging gecommit EXCEPTION WHEN OTHERS THEN -- TODO: Zoiets? ROLLBACK; oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 150); v_errorhint := v_errorhint || ' {' || v_errormsg || '}'; v_errormsg := '(ORACLE error ' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint); COMMIT; END; / ------------- INSPECTIEDEFINITIES ------------------- CREATE OR REPLACE PROCEDURE fac_import_inspectie (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 VARCHAR2 (200); -- De importvelden v_ins_discipline_omschrijving VARCHAR2 (255); -- C60 v_ins_srtgroep_omschrijving VARCHAR2 (255); -- C60 v_ins_srtdeel_code VARCHAR2 (255); -- C10 v_ins_srtcontrole_omschrijving VARCHAR2 (255); -- C60 v_ins_srtcontrole_info VARCHAR2 (1000); -- C320 v_ins_srtcontrole_periode VARCHAR2 (255); -- N6,2 v_ins_srtcontrole_mode VARCHAR2 (255); -- N1: 0=moment-modus of 1=interval-modus v_ins_srtcontrole_eenheid VARCHAR2 (255); -- N1: 0=uurlijks, 1=dagelijks, 2=wekelijk, 3=maandelijk, 4=jaarlijks, null=niet v_ins_srtcontrole_bits VARCHAR2 (255); -- N4: details, afhankelijk van de mode (mag best null zijn) v_ctr_discipline_omschrijving VARCHAR2 (255); -- C60 -- 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 fac_imp_inspectie; v_count_tot := 0; v_count_import := 0; header_is_valid := 0; COMMIT; FOR rec1 IN c1 LOOP BEGIN v_newline := rec1.fac_imp_file_line; v_errormsg := 'Fout opvragen te importeren rij'; v_aanduiding := ''; v_ongeldig := 0; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_delim, v_ins_discipline_omschrijving); fac.imp_getfield (v_newline, c_delim, v_ins_srtgroep_omschrijving); fac.imp_getfield (v_newline, c_delim, v_ins_srtdeel_code); fac.imp_getfield (v_newline, c_delim, v_ins_srtcontrole_omschrijving); fac.imp_getfield (v_newline, c_delim, v_ins_srtcontrole_info); fac.imp_getfield (v_newline, c_delim, v_ins_srtcontrole_periode); fac.imp_getfield (v_newline, c_delim, v_ins_srtcontrole_eenheid); fac.imp_getfield (v_newline, c_delim, v_ins_srtcontrole_mode); fac.imp_getfield (v_newline, c_delim, v_ins_srtcontrole_bits); fac.imp_getfield (v_newline, c_delim, v_ctr_discipline_omschrijving); v_aanduiding := '|' || v_ins_discipline_omschrijving || '|' || v_ins_srtgroep_omschrijving || '|' || v_ins_srtdeel_code || '|' || v_ins_srtcontrole_omschrijving || '|' || v_ctr_discipline_omschrijving || '| '; -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen -- de juiste kolomkop. Ik controleer daarbij ALLE kolommen! -- Ik negeer alles totdat ik een geldige header ben gepasseerd. IF (header_is_valid = 0) THEN IF fac_check_import_header(v_ins_discipline_omschrijving, 'DISCIPLINEOMSCHRIJVING') AND fac_check_import_header(v_ins_srtgroep_omschrijving, 'GROEPSOORTOMSCHRIJVING') AND fac_check_import_header(v_ins_srtdeel_code, 'OBJECTSOORTCODE') AND fac_check_import_header(v_ins_srtcontrole_omschrijving, 'CONTROLE OMSCHRIJVING') AND fac_check_import_header(v_ins_srtcontrole_info, 'CONTROLE INFORMATIE') AND fac_check_import_header(v_ins_srtcontrole_periode, 'CONTROLE PERIODE') AND fac_check_import_header(v_ins_srtcontrole_eenheid, 'EENHEID') AND fac_check_import_header(v_ins_srtcontrole_mode, 'CONTROLE MODE') AND fac_check_import_header(v_ins_srtcontrole_bits, 'BITS') AND fac_check_import_header(v_ctr_discipline_omschrijving, 'TAAKCATEGORIE') THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden v_ins_discipline_omschrijving := TRIM (v_ins_discipline_omschrijving); IF LENGTH (v_ins_discipline_omschrijving) > 60 THEN v_ins_discipline_omschrijving := SUBSTR (TRIM (v_ins_discipline_omschrijving), 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding, 'Disciplineomschrijving wordt afgebroken tot [' || v_ins_discipline_omschrijving || ']'); END IF; -- v_ins_srtgroep_omschrijving := TRIM (v_ins_srtgroep_omschrijving); IF LENGTH (v_ins_srtgroep_omschrijving) > 60 THEN v_ins_srtgroep_omschrijving := SUBSTR (TRIM (v_ins_srtgroep_omschrijving), 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding, 'Groepsoortomschrijving wordt afgebroken tot [' || v_ins_srtgroep_omschrijving || ']'); END IF; -- v_ins_srtdeel_code := TRIM (v_ins_srtdeel_code); IF LENGTH (v_ins_srtdeel_code) > 10 THEN v_ins_srtdeel_code := SUBSTR (TRIM (v_ins_srtdeel_code), 1, 10); fac.imp_writelog ( p_import_key, 'W', v_aanduiding, 'Objectsoortcode wordt afgebroken tot [' || v_ins_srtdeel_code || ']'); END IF; -- v_ins_srtcontrole_omschrijving := TRIM (v_ins_srtcontrole_omschrijving); IF LENGTH (v_ins_srtcontrole_omschrijving) > 60 THEN v_ins_srtcontrole_omschrijving := SUBSTR (TRIM (v_ins_srtcontrole_omschrijving), 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding, 'Controle omschrijving wordt afgebroken tot [' || v_ins_srtcontrole_omschrijving || ']'); END IF; -- v_ins_srtcontrole_info := TRIM (v_ins_srtcontrole_info); IF LENGTH (v_ins_srtcontrole_info) > 320 THEN v_ins_srtcontrole_info := SUBSTR (TRIM (v_ins_srtcontrole_info), 1, 320); fac.imp_writelog ( p_import_key, 'W', v_aanduiding, 'Controle informatie wordt afgebroken tot [' || v_ins_srtcontrole_info || ']'); END IF; -- v_ins_srtcontrole_periode := TRIM (v_ins_srtcontrole_periode); IF ( v_ins_srtcontrole_periode IS NULL OR LENGTH (v_ins_srtcontrole_periode) > 7 OR VALIDATE_CONVERSION(v_ins_srtcontrole_periode AS NUMBER) = 0 ) THEN v_ongeldig := 1; fac.imp_writelog ( p_import_key, 'W', v_aanduiding, 'Controle Periode [' || v_ins_srtcontrole_periode || '] is niet ingevuld, te lang of geen getal'); END IF; -- v_ins_srtcontrole_eenheid := TRIM (v_ins_srtcontrole_eenheid); IF v_ins_srtcontrole_eenheid NOT IN ('0','1','2','3','4') THEN v_ongeldig := 1; fac.imp_writelog ( p_import_key, 'W', v_aanduiding, 'Controle Eenheid [' || v_ins_srtcontrole_eenheid || '] is niet ingevuld of heeft een ongeldige waarde'); END IF; -- v_ins_srtcontrole_mode := TRIM (v_ins_srtcontrole_mode); IF v_ins_srtcontrole_mode NOT IN ('0','1') THEN v_ongeldig := 1; fac.imp_writelog ( p_import_key, 'W', v_aanduiding, 'Controle Mode [' || v_ins_srtcontrole_mode || '] is niet ingevuld of heeft een ongeldige waarde'); END IF; -- v_ins_srtcontrole_bits := TRIM (v_ins_srtcontrole_bits); IF ( LENGTH (v_ins_srtcontrole_bits) > 4 OR VALIDATE_CONVERSION(v_ins_srtcontrole_bits AS NUMBER) = 0 ) THEN v_ongeldig := 1; fac.imp_writelog ( p_import_key, 'W', v_aanduiding, 'Controle Bits [' || v_ins_srtcontrole_bits || '] is te lang of geen getal'); END IF; v_ctr_discipline_omschrijving := TRIM (v_ctr_discipline_omschrijving); IF LENGTH (v_ctr_discipline_omschrijving) > 60 THEN v_ctr_discipline_omschrijving := SUBSTR (TRIM( v_ctr_discipline_omschrijving), 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding , 'Taakcategorie wordt afgebroken tot [' || v_ctr_discipline_omschrijving || ']' ); END IF; -- Insert geformatteerde import record IF v_ongeldig = 0 THEN BEGIN INSERT INTO fac_imp_inspectie (ins_discipline_omschrijving, ins_srtgroep_omschrijving, ins_srtdeel_code, ins_srtcontrole_omschrijving, ins_srtcontrole_info, ins_srtcontrole_periode, ins_srtcontrole_eenheid, ins_srtcontrole_mode, ins_srtcontrole_bits, ctr_discipline_omschrijving) VALUES (v_ins_discipline_omschrijving, v_ins_srtgroep_omschrijving, v_ins_srtdeel_code, v_ins_srtcontrole_omschrijving, v_ins_srtcontrole_info, v_ins_srtcontrole_periode, v_ins_srtcontrole_eenheid, v_ins_srtcontrole_mode, v_ins_srtcontrole_bits, v_ctr_discipline_omschrijving); v_count_import := v_count_import + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog ( p_import_key, 'E', v_aanduiding || v_errormsg, 'Fout bij toevoegen regel aan importtabel FAC_IMP_INSPECTIE.'); 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', 'Inspectie controles: aantal ingelezen importregels: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog ( p_import_key, 'S', 'Inspectie controles: 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, 100); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Inleesproces inspecties afgebroken!'); END fac_import_inspectie; / CREATE OR REPLACE PROCEDURE fac_update_inspectie (p_import_key IN NUMBER) AS v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); data_is_valid NUMBER; v_count_error NUMBER (10); v_count NUMBER (10); v_count_tot NUMBER (10); v_count_import NUMBER (10); v_ongeldig NUMBER (1); v_aanduiding VARCHAR2 (200); v_errorhint VARCHAR2 (1000); v_ins_srtinstallatie_key NUMBER (10); v_ins_srtcontrole_niveau VARCHAR (1); v_week_bits NUMBER (10); v_maand_bits NUMBER (10); v_ctr_discipline_key NUMBER (10); CURSOR c_inspecties IS SELECT * FROM fac_imp_inspectie; -- MAIN BEGIN FOR rec_ins IN c_inspecties LOOP BEGIN v_count_tot := v_count_tot + 1; v_aanduiding := rec_ins.ins_discipline_omschrijving || ' - ' || rec_ins.ins_srtgroep_omschrijving || '-' || rec_ins.ins_srtdeel_code || ' - ' || rec_ins.ctr_discipline_omschrijving; v_errorhint := 'Fout bij bepalen discipline'; data_is_valid := 1; IF rec_ins.ins_discipline_omschrijving IS NULL THEN data_is_valid := 0; fac.imp_writelog ( p_import_key, 'E' , v_aanduiding , 'Discipline mag niet leeg zijn: inspectie wordt niet toegevoegd.'); ELSE SELECT ins_discipline_key, 'D' INTO v_ins_srtinstallatie_key, v_ins_srtcontrole_niveau FROM ins_tab_discipline WHERE UPPER (ins_discipline_omschrijving) = UPPER (rec_ins.ins_discipline_omschrijving) AND ins_discipline_module = 'INS' AND ins_discipline_verwijder IS NULL; IF rec_ins.ins_srtgroep_omschrijving IS NOT NULL THEN v_errorhint := 'Fout bij bepalen groepsoort'; SELECT ins_srtgroep_key, 'G' INTO v_ins_srtinstallatie_key, v_ins_srtcontrole_niveau FROM ins_srtgroep WHERE UPPER (ins_srtgroep_omschrijving) = UPPER (rec_ins.ins_srtgroep_omschrijving) AND ins_srtgroep_module = 'INS' AND ins_srtgroep_verwijder IS NULL AND ins_discipline_key = v_ins_srtinstallatie_key; v_errorhint := 'Fout bij bepalen deelsoort'; IF rec_ins.ins_srtdeel_code IS NOT NULL THEN SELECT ins_srtdeel_key, 'S' INTO v_ins_srtinstallatie_key, v_ins_srtcontrole_niveau FROM ins_srtdeel WHERE UPPER (ins_srtdeel_code) = UPPER (rec_ins.ins_srtdeel_code) AND ins_srtdeel_module = 'INS' AND ins_srtdeel_verwijder IS NULL AND ins_srtgroep_key = v_ins_srtinstallatie_key; END IF; END IF; v_errorhint := 'Fout bij bepalen bits'; -- Alleen de gezette bits van de dagen van de week. SELECT COALESCE(BITAND(rec_ins.ins_srtcontrole_bits, 127), 0) INTO v_week_bits FROM DUAL; -- Alleen de gezette bits van de y-ste xxxdag van de maand. SELECT COALESCE(BITAND(rec_ins.ins_srtcontrole_bits, 256 + 512 + 1024) / 256, 0) INTO v_maand_bits FROM DUAL; v_errorhint := 'Fout bij bepalen takcategorie'; BEGIN SELECT ins_discipline_key INTO v_ctr_discipline_key FROM ctr_discipline WHERE UPPER (ins_discipline_omschrijving) = UPPER(rec_ins.ctr_discipline_omschrijving) AND ins_discipline_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN data_is_valid := 0; v_errorhint := 'Taakcategorie [' || rec_ins.ctr_discipline_omschrijving || '] bestaat niet'; END; IF ( rec_ins.ins_srtcontrole_omschrijving IS NOT NULL AND rec_ins.ins_srtcontrole_periode IS NOT NULL AND ( (rec_ins.ins_srtcontrole_eenheid = 0) OR (rec_ins.ins_srtcontrole_eenheid > 0 AND MOD(rec_ins.ins_srtcontrole_periode, 1) = 0) ) AND rec_ins.ins_srtcontrole_eenheid IS NOT NULL AND rec_ins.ins_srtcontrole_mode IS NOT NULL AND ( (rec_ins.ins_srtcontrole_mode = 1) OR (rec_ins.ins_srtcontrole_mode = 0 AND v_week_bits > 0 AND v_maand_bits > 0) ) ) THEN INSERT INTO ins_srtcontrole (ins_srtinstallatie_key, ins_srtcontrole_niveau, ins_srtcontrole_omschrijving, ins_srtcontrole_info, ins_srtcontrole_periode, ins_srtcontrole_eenheid, ins_srtcontrole_mode, ins_srtcontrole_bits, ctr_discipline_key) VALUES (v_ins_srtinstallatie_key, v_ins_srtcontrole_niveau, rec_ins.ins_srtcontrole_omschrijving, rec_ins.ins_srtcontrole_info, rec_ins.ins_srtcontrole_periode, rec_ins.ins_srtcontrole_eenheid, rec_ins.ins_srtcontrole_mode, rec_ins.ins_srtcontrole_bits, v_ctr_discipline_key ); ELSE IF rec_ins.ins_srtcontrole_mode = 0 AND (v_week_bits = 0 OR v_maand_bits = 0) THEN v_errorhint := 'Het verplichte veld "Moment" is niet (goed) ingevuld: inspectie wordt niet toegevoegd.'; ELSIF rec_ins.ins_srtcontrole_eenheid > 0 AND MOD(rec_ins.ins_srtcontrole_periode, 1) > 0 THEN v_errorhint := 'Periode moet een geheel getal zijn voor dagelijkse, wekelijkse, maandelijkse en jaarlijkse taken: inspectie wordt niet toegevoegd.'; ELSE v_errorhint := 'Één of meerdere van de verplichte velden "Omschrijving", "Period", "Eenheid" of "Mode" zijn niet ingevuld: inspectie wordt niet toegevoegd.'; END IF; fac.imp_writelog ( p_import_key, 'E' , v_aanduiding , v_errorhint); END IF; END IF; EXCEPTION WHEN OTHERS THEN v_count_error := v_count_error + 1; 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; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 150); v_errormsg := v_errormsg || 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog ( p_import_key, 'E' , 'Importproces inspecties afgebroken!' , v_errormsg); END fac_update_inspectie; / -- AAIT#25547 - FAQ: Verbeteren kennisbank CREATE OR REPLACE PROCEDURE fac_import_faq (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 (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 VARCHAR (900); -- De importvelden v_fac_faq_question VARCHAR2 (4000); -- C4000 (Voor import tot 500 beperkt) v_fac_faq_answer VARCHAR2 (4000); -- C4000 v_fac_faq_answer2 VARCHAR2 (4000); -- C4000 v_fac_faq_level VARCHAR2 (255); -- C1 v_ins_discipline_key VARCHAR2 (255); -- N10 v_mld_stdmelding_key VARCHAR2 (255); -- N10 v_fac_faq_source VARCHAR2 (255); -- C60 v_fac_faq_url VARCHAR2 (255); -- C250 v_fac_faq_datum VARCHAR2 (255); -- DATE v_fac_faq_lang VARCHAR2 (255); -- C3 v_fac_faq_hint VARCHAR2 (1000); -- C1000 (Voor import tot 1000 beperkt) v_fac_faq_vervaldatum VARCHAR2 (255); -- DATE v_faq_discipline_omschrijving VARCHAR2 (255); -- N10 v_fac_faq_displaymode VARCHAR2 (255); -- N3 -- Overig: v_ins_discipline_key2 VARCHAR2 (255); -- N10 v_mld_stdmelding_key2 VARCHAR2 (255); -- N10 v_ins_discipline_key_n NUMBER (10); -- N10 v_mld_stdmelding_key_n NUMBER (10); -- N10 v_fac_faq_displaymode_n NUMBER (3); -- N3 v_fac_faq_datum_d DATE; -- DATE v_fac_faq_datum_v DATE; -- DATE -- 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 fac_imp_faq; 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_errormsg := 'Fout opvragen te importeren rij'; v_aanduiding := ''; v_ongeldig := 0; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_delim, v_fac_faq_question); fac.imp_getfield (v_newline, c_delim, v_fac_faq_answer); fac.imp_getfield (v_newline, c_delim, v_fac_faq_answer2); fac.imp_getfield (v_newline, c_delim, v_fac_faq_level); fac.imp_getfield (v_newline, c_delim, v_ins_discipline_key); fac.imp_getfield (v_newline, c_delim, v_mld_stdmelding_key); fac.imp_getfield (v_newline, c_delim, v_fac_faq_source); fac.imp_getfield (v_newline, c_delim, v_fac_faq_url); fac.imp_getfield (v_newline, c_delim, v_fac_faq_datum); fac.imp_getfield (v_newline, c_delim, v_fac_faq_lang); fac.imp_getfield (v_newline, c_delim, v_fac_faq_hint); fac.imp_getfield (v_newline, c_delim, v_fac_faq_vervaldatum); fac.imp_getfield (v_newline, c_delim, v_faq_discipline_omschrijving); fac.imp_getfield (v_newline, c_delim, v_fac_faq_displaymode); v_aanduiding := '[' || SUBSTR (v_fac_faq_question, 1, 500) || '|' || v_ins_discipline_key || '|' || v_mld_stdmelding_key || '] '; -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen -- de juiste kolomkop. -- Ik negeer alles totdat ik een geldige header ben gepasseerd. IF (header_is_valid = 0) THEN IF UPPER (v_fac_faq_question) LIKE 'VRAAG%' AND UPPER (v_fac_faq_answer) LIKE 'ANTWOORD%' AND UPPER (v_fac_faq_answer2) LIKE 'MEER ANTWOORD%' AND UPPER (v_fac_faq_level) = 'ZICHTBAAR VOOR' AND UPPER (v_ins_discipline_key) = 'VAKGROEP' AND UPPER (v_mld_stdmelding_key) = 'MELDING' AND UPPER (v_fac_faq_source) = 'OORSPRONG' AND UPPER (v_fac_faq_url) LIKE 'MEER INFO%' AND UPPER (v_fac_faq_datum) = 'PUBLICATIEDATUM' AND UPPER (v_fac_faq_lang) = 'TAAL' AND UPPER (v_fac_faq_hint) = 'HINT' AND UPPER (v_fac_faq_vervaldatum) = 'VERVALDATUM' AND UPPER (v_faq_discipline_omschrijving) = 'CATALOGUSNAAM' AND UPPER (v_fac_faq_displaymode) = 'DISPLAYMODE' THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden v_errormsg := 'Vraag ongeldig. Vraag heeft geen waarde of is langer dan 500 tekens'; v_fac_faq_question := TRIM (v_fac_faq_question); IF v_fac_faq_question IS NULL OR LENGTH (v_fac_faq_question) > 500 -- Import beperking. In fac_faq tabel is dit 4000 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'Antwoord ongeldig. Antwoord heeft geen waarde of is langer dan 4000 tekens'; v_fac_faq_answer := TRIM (v_fac_faq_answer); IF v_fac_faq_answer IS NULL OR LENGTH (v_fac_faq_answer) > 4000 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'Meer antwoord ongeldig. Waarde is langer dan 4000 tekens'; v_fac_faq_answer2 := TRIM(v_fac_faq_answer2); IF LENGTH (v_fac_faq_answer2) > 4000 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'Zichtbaar voor ongeldig'; v_fac_faq_level := TRIM (v_fac_faq_level); IF v_fac_faq_level IS NULL OR UPPER(v_fac_faq_level) NOT IN ('ZELFSERVICE', 'PROFESSIONALS', 'BEIDE') THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || '|' || v_fac_faq_level || '|' || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'Vakgroep (MLD Discipline) ongeldig'; v_ins_discipline_key := LTRIM (RTRIM (v_ins_discipline_key)); v_ins_discipline_key_n := NULL; IF LENGTH(v_ins_discipline_key) != 0 THEN IF fac.safe_to_number (v_ins_discipline_key) IS NOT NULL THEN v_ins_discipline_key_n := fac.safe_to_number (v_ins_discipline_key); BEGIN SELECT ins_discipline_key INTO v_ins_discipline_key2 FROM ins_tab_discipline WHERE ins_discipline_key = v_ins_discipline_key_n AND ins_discipline_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog (p_import_key, 'I', v_aanduiding, 'Vakgroep (MLD Discipline) is nieuw' ); END; ELSE fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!' ); v_ongeldig := 1; END IF; END IF; -- v_errormsg := 'Melding ongeldig'; v_mld_stdmelding_key := LTRIM (RTRIM (v_mld_stdmelding_key)); v_mld_stdmelding_key_n := NULL; IF LENGTH(v_mld_stdmelding_key) != 0 THEN IF fac.safe_to_number (v_mld_stdmelding_key) IS NOT NULL THEN v_mld_stdmelding_key_n := fac.safe_to_number (v_mld_stdmelding_key); BEGIN SELECT mld_stdmelding_key INTO v_mld_stdmelding_key2 FROM mld_stdmelding WHERE mld_stdmelding_key = v_mld_stdmelding_key_n AND mld_stdmelding_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog (p_import_key, 'I', v_aanduiding, 'Melding is nieuw' ); END; ELSE fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!' ); v_ongeldig := 1; END IF; END IF; -- v_errormsg := 'Oorsprong ongeldig. Oorsprong is langer als 60 tekens'; v_fac_faq_source := TRIM (v_fac_faq_source); IF v_fac_faq_source IS NOT NULL AND LENGTH (v_fac_faq_source) > 60 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'Meer info ongeldig. Meer info is langer als 250 tekens'; v_fac_faq_url := TRIM (v_fac_faq_url); IF v_fac_faq_url IS NOT NULL AND LENGTH (v_fac_faq_url) > 250 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'Publicatiedatum ongeldig. Formaat datum is ddmmyyyy'; v_fac_faq_datum := TRIM (v_fac_faq_datum); v_fac_faq_datum_d := NULL; IF v_fac_faq_datum IS NOT NULL AND fac.safe_to_date (v_fac_faq_datum, 'dd-mm-yyyy') IS NULL THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); ELSE v_fac_faq_datum_d := fac.safe_to_date (v_fac_faq_datum, 'dd-mm-yyyy'); END IF; -- v_errormsg := 'Taal ongeldig. Taal is langer als 3 tekens'; v_fac_faq_lang := TRIM (v_fac_faq_lang); IF v_fac_faq_lang IS NOT NULL AND LENGTH (v_fac_faq_lang) > 3 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'Hint ongeldig. Hint heeft geen waarde of is langer als 500 tekens'; v_fac_faq_hint := TRIM (v_fac_faq_hint); IF v_fac_faq_hint IS NOT NULL AND LENGTH (v_fac_faq_hint) > 500 -- Import beperking. In fac_faq tabel is dit 1000 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'Vervaldatum ongeldig. Formaat datum is ddmmyyyy'; v_fac_faq_vervaldatum := TRIM (v_fac_faq_vervaldatum); v_fac_faq_datum_v := NULL; IF v_fac_faq_vervaldatum IS NOT NULL AND fac.safe_to_date (v_fac_faq_vervaldatum, 'dd-mm-yyyy') IS NULL THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); ELSE v_fac_faq_datum_v := fac.safe_to_date (v_fac_faq_vervaldatum, 'dd-mm-yyyy'); END IF; -- v_errormsg := 'Catalogusnaam (FAQ Discipline) ongeldig'; v_faq_discipline_omschrijving := TRIM (v_faq_discipline_omschrijving); IF LENGTH (v_faq_discipline_omschrijving) > 60 THEN v_faq_discipline_omschrijving := SUBSTR (TRIM (v_faq_discipline_omschrijving), 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Catalogusnaam wordt afgebroken tot [' || v_faq_discipline_omschrijving || ']' ); END IF; -- v_errormsg := 'Displaymode ongeldig'; v_fac_faq_displaymode := LTRIM (RTRIM (v_fac_faq_displaymode)); v_fac_faq_displaymode_n := 3; -- +1=Altijd tonen melding, +2=Pop-up melding, +4=Altijd tonen opdracht, +8=Pop-up opdracht. IF LENGTH(v_fac_faq_displaymode) != 0 THEN v_fac_faq_displaymode_n := fac.safe_to_number (v_fac_faq_displaymode); IF v_fac_faq_displaymode_n IS NOT NULL THEN IF v_fac_faq_displaymode_n < 0 OR v_fac_faq_displaymode_n >= 16 THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!' ); v_ongeldig := 1; END IF; ELSE v_fac_faq_displaymode_n := 3; END IF; END IF; -- Insert geformatteerde import record IF v_ongeldig = 0 THEN BEGIN v_errormsg := 'Fout bij wegschrijven importregel'; INSERT INTO fac_imp_faq (fac_faq_question, fac_faq_answer, fac_faq_answer2, fac_faq_level, ins_discipline_key, mld_stdmelding_key, fac_faq_source, fac_faq_url, fac_faq_datum, fac_faq_lang, fac_faq_hint, fac_faq_vervaldatum, faq_discipline_omschrijving, fac_faq_displaymode) VALUES (v_fac_faq_question, v_fac_faq_answer, v_fac_faq_answer2, v_fac_faq_level, v_ins_discipline_key_n, v_mld_stdmelding_key_n, v_fac_faq_source, v_fac_faq_url, v_fac_faq_datum_d, v_fac_faq_lang, v_fac_faq_hint, v_fac_faq_datum_v, v_faq_discipline_omschrijving, v_fac_faq_displaymode_n); 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, 'E', v_aanduiding || v_errormsg, 'Fout bij toevoegen regel aan importtabel FAC_IMP_FAQ.' ); 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', 'Kennisbank/aantal ingelezen importregels: ' || TO_CHAR (v_count_tot), '' ); fac.imp_writelog ( p_import_key, 'S', 'Kennisbank/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 kennisbank afgebroken!'); END fac_import_faq; / -- AAIT#25547 - FAQ: Verbeteren kennisbank CREATE OR REPLACE PROCEDURE fac_update_faq (p_import_key IN NUMBER) AS v_errmes VARCHAR2 (900); oracle_err_num NUMBER; oracle_err_var VARCHAR2 (100); v_count NUMBER (10); v_count_tot NUMBER (10); v_count_update NUMBER (10); v_aanduiding VARCHAR2 (1000); ccount NUMBER (10); teller INTEGER; v_fac_faq_level NUMBER (3); v_ins_discipline_key NUMBER (10); v_ins_stdmelding_key NUMBER (10); v_fac_faq_discipline_key NUMBER (10); newkey NUMBER (10); CURSOR c_kennisbankitems IS SELECT * FROM fac_imp_faq; -- MAIN BEGIN v_count_tot := 0; v_count_update := 0; teller := 0; FOR rec_faq IN c_kennisbankitems LOOP BEGIN v_count_tot := v_count_tot + 1; v_aanduiding := rec_faq.fac_faq_question || ' - ' || rec_faq.ins_discipline_key || '-' || rec_faq.mld_stdmelding_key; v_errmes := 'Fout bij het toevoegen van de catalogus (FAQ ins_discipline)'; SELECT COUNT(*) INTO v_count FROM ins_tab_discipline WHERE ins_discipline_verwijder IS NULL AND ins_discipline_module = 'FAQ' AND UPPER(TRIM(ins_discipline_omschrijving)) = UPPER(TRIM(rec_faq.faq_discipline_omschrijving)); IF (v_count = 0) THEN INSERT INTO ins_tab_discipline (ins_discipline_module, ins_discipline_omschrijving ) VALUES ('FAQ', TRIM(rec_faq.faq_discipline_omschrijving) ) RETURNING ins_discipline_key INTO v_fac_faq_discipline_key; ELSE SELECT ins_discipline_key INTO v_fac_faq_discipline_key FROM ins_tab_discipline WHERE ins_discipline_verwijder IS NULL AND ins_discipline_module = 'FAQ' AND UPPER(TRIM(ins_discipline_omschrijving)) = UPPER(TRIM(rec_faq.faq_discipline_omschrijving)); END IF; COMMIT; IF rec_faq.fac_faq_question IS NULL THEN fac.imp_writelog ( p_import_key, 'E', v_aanduiding, 'Vraag mag niet leeg zijn: kennisbankitem wordt niet toegevoegd.'); ELSIF rec_faq.fac_faq_answer IS NULL THEN fac.imp_writelog ( p_import_key, 'E', v_aanduiding, 'Antwoord mag niet leeg zijn: kennisbankitem wordt niet toegevoegd.'); ELSIF rec_faq.fac_faq_level IS NULL THEN fac.imp_writelog ( p_import_key, 'E', v_aanduiding, 'Zichtbaar voor mag niet leeg zijn: kennisbankitem wordt niet toegevoegd.'); ELSIF UPPER(rec_faq.fac_faq_level) NOT IN ('ZELFSERVICE', 'PROFESSIONALS', 'BEIDE') THEN fac.imp_writelog ( p_import_key, 'E', v_aanduiding, 'Zichtbaar voor heeft geen geldige waard: kennisbankitem wordt niet toegevoegd.'); ELSE v_errmes := 'Bepalen zichtbaar voor (level)'; SELECT flevel INTO v_fac_faq_level FROM (SELECT 1 flevel, 'ZELFSERVICE' ftext FROM DUAL UNION ALL SELECT 2 flevel, 'PROFESSIONALS' ftext FROM DUAL UNION ALL SELECT 3 flevel, 'BEIDE' ftext FROM DUAL) WHERE ftext = UPPER(rec_faq.fac_faq_level); v_errmes := 'Bepalen of de vakgroep (MLD ins_discipline) bestaat'; IF rec_faq.ins_discipline_key IS NOT NULL THEN SELECT ins_discipline_key INTO v_ins_discipline_key FROM ins_tab_discipline WHERE ins_discipline_key = rec_faq.ins_discipline_key AND ins_discipline_verwijder IS NULL; END IF; v_errmes := 'Bepalen of de melding (mld_stdmelding) bestaat'; IF rec_faq.mld_stdmelding_key IS NOT NULL THEN SELECT mld_stdmelding_key INTO v_ins_stdmelding_key FROM mld_stdmelding WHERE mld_stdmelding_key = rec_faq.mld_stdmelding_key AND mld_ins_discipline_key = rec_faq.ins_discipline_key AND mld_stdmelding_verwijder IS NULL; END IF; v_errmes := 'Kijken of kennisbankitem bestaat'; SELECT COUNT (*) INTO ccount FROM fac_faq f , mld_stdmeldingfaq m WHERE f.fac_faq_key = m.fac_faq_key(+) AND TRIM (UPPER (f.fac_faq_question)) = TRIM (UPPER (rec_faq.fac_faq_question)) AND ((m.ins_discipline_key = rec_faq.ins_discipline_key) OR ((m.ins_discipline_key IS NULL) AND (rec_faq.ins_discipline_key IS NULL))) AND ((m.mld_stdmelding_key = rec_faq.mld_stdmelding_key) OR ((m.mld_stdmelding_key IS NULL) AND (rec_faq.mld_stdmelding_key IS NULL))); IF ccount = 0 THEN v_errmes := 'Toevoegen kennisbankitem fac_faq' || ' (vraag = ' || SUBSTR(rec_faq.fac_faq_question, 1, 100) || '| antwoord = ' || SUBSTR(rec_faq.fac_faq_answer, 1, 100) || '| regel' || v_count_tot || ')'; INSERT INTO fac_faq (fac_faq_question, fac_faq_answer, fac_faq_answer2, fac_faq_level, fac_faq_source, fac_faq_url, fac_faq_datum, fac_faq_lang, fac_faq_hint, fac_faq_vervaldatum, faq_ins_discipline_key, fac_faq_displaymode ) VALUES (rec_faq.fac_faq_question, rec_faq.fac_faq_answer, rec_faq.fac_faq_answer2, v_fac_faq_level, rec_faq.fac_faq_source, rec_faq.fac_faq_url, rec_faq.fac_faq_datum, rec_faq.fac_faq_lang, rec_faq.fac_faq_hint, rec_faq.fac_faq_vervaldatum, v_fac_faq_discipline_key, rec_faq.fac_faq_displaymode ) RETURNING fac_faq_key INTO newkey; IF rec_faq.ins_discipline_key IS NOT NULL THEN INSERT INTO mld_stdmeldingfaq (ins_discipline_key, mld_stdmelding_key, fac_faq_key ) VALUES (rec_faq.ins_discipline_key, rec_faq.mld_stdmelding_key, newkey ); END IF; v_count_update := v_count_update + 1; END IF; COMMIT; END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_var := SUBSTR (SQLERRM, 1, 100); fac.imp_writelog (p_import_key, 'W', 'Kennisbankitem kan niet worden weggeschreven [' || rec_faq.fac_faq_question || ']', v_errmes || ' Oracle fout: ' || oracle_err_var ); COMMIT; -- tbv logging END; END LOOP; fac.imp_writelog ( p_import_key, 'S', 'Kennisbank/aantal toegevoegde importregels: ' || TO_CHAR (v_count_update), '' ); fac.imp_writelog ( p_import_key, 'S', 'Kennisbank/aantal ongeldige niet toegevoegde importregels: ' || TO_CHAR (v_count_tot - v_count_update), '' ); EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_var := SUBSTR (SQLERRM, 1, 150); v_errmes := v_errmes || 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_var || ')'; fac.imp_writelog (p_import_key, 'E', 'Importproces kennisbank afgebroken!', v_errmes); END fac_update_faq; / -- FSN#25952 Contractenimport CREATE OR REPLACE PROCEDURE fac_import_cnt (p_import_key IN NUMBER) AS CURSOR c1 IS SELECT fac_imp_csv_index , fac_imp_csv_col01 CONTRACTNR , fac_imp_csv_col02 VERSIE , fac_imp_csv_col03 EXTERNNR , fac_imp_csv_col04 CONTRACTSOORT , fac_imp_csv_col05 BESCHRIJVING , fac_imp_csv_col06 MANTELNR , fac_imp_csv_col07 MANTELNR_VERSIE , fac_imp_csv_col08 OMSCHRIJVING , fac_imp_csv_col09 DIENST , fac_imp_csv_col10 EIGENAAR_AFD , fac_imp_csv_col11 EIGENAAR_EMAIL , fac_imp_csv_col12 BEHEERDER_EMAIL , fac_imp_csv_col13 OPMERKING , fac_imp_csv_col14 INGANGSDATUM , fac_imp_csv_col15 RAPPELDATUM , fac_imp_csv_col16 OPZEGDATUM , fac_imp_csv_col17 EINDDATUM , fac_imp_csv_col18 SOORT_CONTACTPARTIJ , fac_imp_csv_col19 BEDRIJFNAAM , fac_imp_csv_col20 CONTACTNAAM , fac_imp_csv_col21 KOSTENPLAATSCODE , fac_imp_csv_col22 KOSTENSOORTCODE , fac_imp_csv_col23 CONTRACTBEDRAG , fac_imp_csv_col24 TERMIJNBEDRAG , fac_imp_csv_col25 UURTARIEF , fac_imp_csv_col26 KORTING , fac_imp_csv_col27 LOCATIECODE , fac_imp_csv_col28 TERREINCODE , fac_imp_csv_col29 GEBOUWCODE , fac_imp_csv_col30 VERDIEPINGCODE , fac_imp_csv_col31 RUIMTECODE , fac_imp_csv_col32 VERLENGEN , fac_imp_csv_col33 flex_01 , fac_imp_csv_col34 flex_02 , fac_imp_csv_col35 flex_03 , fac_imp_csv_col36 flex_04 , fac_imp_csv_col37 flex_05 , fac_imp_csv_col38 flex_06 , fac_imp_csv_col39 flex_07 , fac_imp_csv_col40 flex_08 , fac_imp_csv_col41 flex_09 , fac_imp_csv_col42 flex_10 , fac_imp_csv_col43 flex_11 , fac_imp_csv_col44 flex_12 , fac_imp_csv_col45 flex_13 , fac_imp_csv_col46 flex_14 , fac_imp_csv_col47 flex_15 , fac_imp_csv_col48 flex_16 , fac_imp_csv_col49 flex_17 , fac_imp_csv_col50 flex_18 , fac_imp_csv_col51 flex_19 , fac_imp_csv_col52 flex_20 , fac_imp_csv_col53 flex_21 , fac_imp_csv_col54 flex_22 , fac_imp_csv_col55 flex_23 , fac_imp_csv_col56 flex_24 , fac_imp_csv_col57 flex_25 FROM fac_imp_csv WHERE fac_imp_csv_index > 1 AND fac_import_key = p_import_key; v_errormsg VARCHAR2(1000); v_errorhint VARCHAR2(1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2(200); v_aanduiding VARCHAR2(200); v_header_is_valid NUMBER(1) := 0; v_ongeldig NUMBER(1) := 0; v_count_rec NUMBER(10) := 0; v_count_imp NUMBER(10) := 0; v_ref_key NUMBER(10); -- De importvelden v_nummer_intern cnt_contract.cnt_contract_nummer_intern%TYPE; --VARCHAR2(30) v_versie cnt_contract.cnt_contract_versie%TYPE; --VARCHAR2(10) v_nummer_extern cnt_contract.cnt_contract_nummer%TYPE; --VARCHAR2(30) v_cnt_soort ins_tab_discipline.ins_discipline_omschrijving%TYPE; --VARCHAR2(60) --> cnt_contract.ins_discipline_key v_beschrijving cnt_contract.cnt_contract_omschrijving%TYPE; --VARCHAR2(50) v_mantel_nr cnt_contract.cnt_contract_nummer_intern%TYPE; --VARCHAR2(30) |-> cnt_contract.cnt_contract_mantel_key v_mantel_nr_versie cnt_contract.cnt_contract_versie%TYPE; --VARCHAR2(10) | v_omschrijving cnt_contract.cnt_contract_document%TYPE; --VARCHAR2(2048) v_dienst prs_dienst.prs_dienst_omschrijving%TYPE; --VARCHAR2(60) --> cnt_contract.prs_dienst_key v_afdeling prs_afdeling.prs_afdeling_naam%TYPE; --VARCHAR2(15) --> cnt_contract.prs_afdeling_key_eig v_perslid_eig prs_perslid.prs_perslid_email%TYPE; --VARCHAR2(200) --> cnt_contract.prs_perslid_key_eig v_perslid_beh prs_perslid.prs_perslid_email%TYPE; --VARCHAR2(200) --> cnt_contract.prs_perslid_key_beh v_opmerking cnt_contract.cnt_contract_opmerking%TYPE; --VARCHAR2(4000) v_ingangsdatum cnt_contract.cnt_contract_looptijd_van%TYPE; --DATE v_rappeldatum cnt_contract.cnt_contract_aanmaak%TYPE; --DATE --> cnt_contact.cnt_contract_rappeltermijn v_opzegdatum cnt_contract.cnt_contract_aanmaak%TYPE; --DATE --> cnt_contract.cnt_contract_opzegtermijn v_einddatum cnt_contract.cnt_contract_looptijd_tot%TYPE; --DATE v_srtcontact VARCHAR2 (1); --P of B v_bedrijfnaam prs_perslid.prs_perslid_email%TYPE; --VARCHAR (200) --> cnt_contract.cnt_prs_bedrijf_key v_contactnaam prs_contactpersoon.prs_contactpersoon_email%TYPE; --VARCHAR2(200) --> cnt_contract.prs_contactpersoon_key v_kpn_code prs_kostenplaats.prs_kostenplaats_nr%TYPE; --VARCHAR2(30) --> cnt_contract.prs_kostenplaats_key v_kostensoort_code prs_kostensoort.prs_kostensoort_oms%TYPE; --VARCHAR2(60) --> cnt_contract.prs_kostensoort_key v_bedrag cnt_contract.cnt_contract_kosten%TYPE; --NUMBER(11,2) v_bedrag_termijn cnt_contract.cnt_contract_termijnkosten%TYPE; --NUMBER(11,2) v_uurtarief cnt_contract.cnt_contract_uurloon%TYPE; --NUMBER(6,2) v_korting cnt_contract.cnt_contract_korting%TYPE; --NUMBER(5,2) v_locatiecode alg_locatie.alg_locatie_code%TYPE; --VARCHAR2(10) v_terreincode alg_terreinsector.alg_terreinsector_code%TYPE; --VARCHAR2(12) v_gebouwcode alg_gebouw.alg_gebouw_code%TYPE; --VARCHAR2(12) v_verdiepingcode alg_verdieping.alg_verdieping_volgnr%TYPE; --NUMBER(3) v_ruimtecode alg_ruimte.alg_ruimte_nr%TYPE; --VARCHAR2(20) v_verlengen cnt_contract.cnt_contract_verlenging%TYPE; --NUMBER(1) v_cnt_kenmerk_01 fac_imp_cnt.flex1%TYPE; --VARCHAR2(255); v_cnt_kenmerk_02 fac_imp_cnt.flex2%TYPE; --VARCHAR2(255); v_cnt_kenmerk_03 fac_imp_cnt.flex3%TYPE; --VARCHAR2(255); v_cnt_kenmerk_04 fac_imp_cnt.flex4%TYPE; --VARCHAR2(255); v_cnt_kenmerk_05 fac_imp_cnt.flex5%TYPE; --VARCHAR2(255); v_cnt_kenmerk_06 fac_imp_cnt.flex6%TYPE; --VARCHAR2(255); v_cnt_kenmerk_07 fac_imp_cnt.flex7%TYPE; --VARCHAR2(255); v_cnt_kenmerk_08 fac_imp_cnt.flex8%TYPE; --VARCHAR2(255); v_cnt_kenmerk_09 fac_imp_cnt.flex9%TYPE; --VARCHAR2(255); v_cnt_kenmerk_10 fac_imp_cnt.flex10%TYPE; --VARCHAR2(255); v_cnt_kenmerk_11 fac_imp_cnt.flex11%TYPE; --VARCHAR2(255); v_cnt_kenmerk_12 fac_imp_cnt.flex12%TYPE; --VARCHAR2(255); v_cnt_kenmerk_13 fac_imp_cnt.flex13%TYPE; --VARCHAR2(255); v_cnt_kenmerk_14 fac_imp_cnt.flex14%TYPE; --VARCHAR2(255); v_cnt_kenmerk_15 fac_imp_cnt.flex15%TYPE; --VARCHAR2(255); v_cnt_kenmerk_16 fac_imp_cnt.flex16%TYPE; --VARCHAR2(255); v_cnt_kenmerk_17 fac_imp_cnt.flex17%TYPE; --VARCHAR2(255); v_cnt_kenmerk_18 fac_imp_cnt.flex18%TYPE; --VARCHAR2(255); v_cnt_kenmerk_19 fac_imp_cnt.flex19%TYPE; --VARCHAR2(255); v_cnt_kenmerk_20 fac_imp_cnt.flex20%TYPE; --VARCHAR2(255); v_cnt_kenmerk_21 fac_imp_cnt.flex21%TYPE; --VARCHAR2(255); v_cnt_kenmerk_22 fac_imp_cnt.flex22%TYPE; --VARCHAR2(255); v_cnt_kenmerk_23 fac_imp_cnt.flex23%TYPE; --VARCHAR2(255); v_cnt_kenmerk_24 fac_imp_cnt.flex24%TYPE; --VARCHAR2(255); v_cnt_kenmerk_25 fac_imp_cnt.flex25%TYPE; --VARCHAR2(255); v_header VARCHAR2(500) := 'CONTRACTNR;VERSIE;EXTERNNR;CONTRACTSOORT;BESCHRIJVING;' || 'MANTELNR;MANTELNR_VERSIE;OMSCHRIJVING;DIENST;EIGENAAR_AFD;' || 'EIGENAAR_EMAIL;BEHEERDER_EMAIL;OPMERKING;INGANGSDATUM;RAPPELDATUM;' || 'OPZEGDATUM;EINDDATUM;SOORT_CONTACTPARTIJ;BEDRIJFSNAAM;CONTACTNAAM;' || 'KOSTENPLAATSCODE;KOSTENSOORTCODE;CONTRACTBEDRAG;TERMIJNBEDRAG;UURTARIEF;' || 'KORTING;LOCATIECODE;TERREINCODE;GEBOUWCODE;VERDIEPINGCODE;' || 'RUIMTECODE;VERLENGEN'; v_header_csv VARCHAR2(500); v_flex_naam_01 fac_imp_cnt.flex1%TYPE; v_flex_naam_02 fac_imp_cnt.flex2%TYPE; v_flex_naam_03 fac_imp_cnt.flex3%TYPE; v_flex_naam_04 fac_imp_cnt.flex4%TYPE; v_flex_naam_05 fac_imp_cnt.flex5%TYPE; v_flex_naam_06 fac_imp_cnt.flex6%TYPE; v_flex_naam_07 fac_imp_cnt.flex7%TYPE; v_flex_naam_08 fac_imp_cnt.flex8%TYPE; v_flex_naam_09 fac_imp_cnt.flex9%TYPE; v_flex_naam_10 fac_imp_cnt.flex10%TYPE; v_flex_naam_11 fac_imp_cnt.flex11%TYPE; v_flex_naam_12 fac_imp_cnt.flex12%TYPE; v_flex_naam_13 fac_imp_cnt.flex13%TYPE; v_flex_naam_14 fac_imp_cnt.flex14%TYPE; v_flex_naam_15 fac_imp_cnt.flex15%TYPE; v_flex_naam_16 fac_imp_cnt.flex16%TYPE; v_flex_naam_17 fac_imp_cnt.flex17%TYPE; v_flex_naam_18 fac_imp_cnt.flex18%TYPE; v_flex_naam_19 fac_imp_cnt.flex19%TYPE; v_flex_naam_20 fac_imp_cnt.flex20%TYPE; v_flex_naam_21 fac_imp_cnt.flex21%TYPE; v_flex_naam_22 fac_imp_cnt.flex22%TYPE; v_flex_naam_23 fac_imp_cnt.flex23%TYPE; v_flex_naam_24 fac_imp_cnt.flex24%TYPE; v_flex_naam_25 fac_imp_cnt.flex25%TYPE; -- 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 'Looptijd Maximaal', 'Looptijd Maximaal|3', 1049 of 1049|3 waarbij de tweede en laatste in groep 3 zitten -- het resultaat is NULL (als niet gevonden) of Looptijd Maximaal|3 of 1049|3 voor kenmer_key 1049 in groep 3 -- Als geen groep is meegegeven dan wordt 'Looptijd Maximaal|0' opgeleverd (de default groep) FUNCTION bepaal_kenmerk (p_kw IN VARCHAR2) 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.cnt_kenmerk_key) INTO v_kenmerk_key FROM cnt_kenmerk k, cnt_srtkenmerk sk WHERE k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key AND k.cnt_kenmerk_groep = v_kenmerk_groep AND COALESCE(UPPER(k.cnt_kenmerk_omschrijving), sk.cnt_srtkenmerk_upper) = UPPER(v_kw) AND sk.cnt_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'r', 'S', 'X', 'V') AND k.cnt_kenmerk_verwijder IS NULL AND sk.cnt_srtkenmerk_verwijder IS NULL; ELSE -- kenmerkwaarde is numeriek (dus key)! SELECT k.cnt_kenmerk_key INTO v_kenmerk_key FROM cnt_kenmerk k, cnt_srtkenmerk sk WHERE k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key AND k.cnt_kenmerk_groep = v_kenmerk_groep AND k.cnt_kenmerk_key = fac.safe_to_number(v_kw) AND sk.cnt_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'r', 'S', 'X', 'V') AND k.cnt_kenmerk_verwijder IS NULL AND sk.cnt_srtkenmerk_verwijder IS NULL; 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; -- bepaal_kenmerk FUNCTION kenmerk_waarde( p_import_key IN NUMBER , p_import_index IN NUMBER , p_aanduiding IN VARCHAR2 , p_flex_naam IN VARCHAR2 , p_flex_waarde IN VARCHAR2) RETURN VARCHAR IS v_flexval VARCHAR2(200); v_flx VARCHAR2(255); BEGIN v_flx := bepaal_kenmerk(p_flex_naam); IF v_flx IS NULL THEN v_flexval := SUBSTR(TRIM(p_flex_waarde), 1, 255); ELSE v_flexval := SUBSTR(TRIM(p_flex_waarde), 1, 200); IF LENGTH(TRIM(p_flex_waarde)) > 200 THEN fac.imp_writelog( p_import_key, 'W' , p_aanduiding || p_flex_naam || ' - Aangepast ivm lengte groter dan 255' , p_import_index ); END IF; v_flexval := TO_CHAR(v_flx) || '=' || v_flexval; END IF; RETURN v_flexval; END; -- kenmerk_waarde BEGIN v_errormsg := 'Fout inlezen header '; SELECT REPLACE(UPPER(fac_imp_csv_col01 ||';'|| fac_imp_csv_col02 ||';'|| fac_imp_csv_col03 ||';'|| fac_imp_csv_col04 ||';'|| fac_imp_csv_col05 ||';'|| fac_imp_csv_col06 ||';'|| fac_imp_csv_col07 ||';'|| fac_imp_csv_col08 ||';'|| fac_imp_csv_col09 ||';'|| fac_imp_csv_col10 ||';'|| fac_imp_csv_col11 ||';'|| fac_imp_csv_col12 ||';'|| fac_imp_csv_col13 ||';'|| fac_imp_csv_col14 ||';'|| fac_imp_csv_col15 ||';'|| fac_imp_csv_col16 ||';'|| fac_imp_csv_col17 ||';'|| fac_imp_csv_col18 ||';'|| fac_imp_csv_col19 ||';'|| fac_imp_csv_col20 ||';'|| fac_imp_csv_col21 ||';'|| fac_imp_csv_col22 ||';'|| fac_imp_csv_col23 ||';'|| fac_imp_csv_col24 ||';'|| fac_imp_csv_col25 ||';'|| fac_imp_csv_col26 ||';'|| fac_imp_csv_col27 ||';'|| fac_imp_csv_col28 ||';'|| fac_imp_csv_col29 ||';'|| fac_imp_csv_col30 ||';'|| fac_imp_csv_col31 ||';'|| fac_imp_csv_col32 ), ' ', '') , fac_imp_csv_col33, fac_imp_csv_col34, fac_imp_csv_col35, fac_imp_csv_col36, fac_imp_csv_col37 , fac_imp_csv_col38, fac_imp_csv_col39, fac_imp_csv_col40, fac_imp_csv_col41, fac_imp_csv_col42 , fac_imp_csv_col43, fac_imp_csv_col44, fac_imp_csv_col45, fac_imp_csv_col46, fac_imp_csv_col47 , fac_imp_csv_col48, fac_imp_csv_col49, fac_imp_csv_col50, fac_imp_csv_col51, fac_imp_csv_col52 , fac_imp_csv_col53, fac_imp_csv_col54, fac_imp_csv_col55, fac_imp_csv_col56, fac_imp_csv_col57 INTO v_header_csv -- standaard header , v_flex_naam_01, v_flex_naam_02, v_flex_naam_03, v_flex_naam_04, v_flex_naam_05 -- kenmerk kolom namen , v_flex_naam_06, v_flex_naam_07, v_flex_naam_08, v_flex_naam_09, v_flex_naam_10 , v_flex_naam_11, v_flex_naam_12, v_flex_naam_13, v_flex_naam_14, v_flex_naam_15 , v_flex_naam_16, v_flex_naam_17, v_flex_naam_18, v_flex_naam_19, v_flex_naam_20 , v_flex_naam_21, v_flex_naam_22, v_flex_naam_23, v_flex_naam_24, v_flex_naam_25 FROM fac_imp_csv WHERE fac_imp_csv_index = 1 AND fac_import_key = p_import_key; -- Eerst opruiming DELETE FROM fac_imp_cnt; IF (v_header LIKE v_header_csv || '%') THEN v_header_is_valid := 1; FOR rec IN c1 LOOP BEGIN v_count_rec := v_count_rec + 1; v_aanduiding := '[' || rec.contractnr || '|' || rec.versie || '] '; -- CSV-kolom A: Controleer het contractnummer op lengte v_nummer_intern := SUBSTR(TRIM(rec.contractnr), 1, 30); IF LENGTH(TRIM(rec.contractnr)) > 30 THEN fac.imp_writelog( p_import_key, 'W', v_aanduiding || 'ContractRr - Aangepast ivm lengte groter dan 30' , rec.fac_imp_csv_index || ' - ' || rec.contractnr || ' wordt: ' || v_nummer_intern ); END IF; -- CSV-kolom B: Controleer de versie op lengte v_versie := SUBSTR(TRIM(rec.versie), 1, 10); IF LENGTH(TRIM(rec.versie)) > 10 THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Versie - Aangepast ivm lengte groter dan 10' , rec.fac_imp_csv_index || ' - ' || rec.versie || ' wordt: ' || v_versie ); END IF; -- CSV-kolom C: Controleer het extern contractnummer op lengte v_nummer_extern := SUBSTR(TRIM(rec.externnr), 1, 30); IF LENGTH(TRIM(rec.externnr)) > 30 THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'ExternNr - Aangepast ivm lengte groter dan 30' , rec.fac_imp_csv_index || ' - ' || rec.externnr || ' wordt: ' || v_nummer_extern ); END IF; -- CSV-kolom D: Controleer de lengte van het contractsoort en of het ingevuld is v_cnt_soort := SUBSTR(TRIM(rec.contractsoort), 1, 60); BEGIN SELECT ins_discipline_key INTO v_ref_key FROM cnt_discipline WHERE ins_discipline_omschrijving = v_cnt_soort AND ins_discipline_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Contractsoort - Is onbekend' , rec.fac_imp_csv_index || ' - ' || v_cnt_soort || ', Regel wordt overgeslagen' ); v_ongeldig := 1; END; -- CSV-kolom E: Controleer de lengte van de contract beschrijving v_beschrijving := SUBSTR(TRIM(rec.beschrijving),1,50); IF LENGTH(TRIM(rec.beschrijving)) > 50 THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Beschrijving - Aangepast ivm lengte groter dan 50' , rec.fac_imp_csv_index || ' - ' || rec.beschrijving || ' wordt: ' || v_beschrijving ); ELSE IF v_beschrijving IS NULL THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Beschrijving - Is niet ingevuld' , rec.fac_imp_csv_index || ' - Regel wordt overgeslagen' ); v_ongeldig := 1; END IF; END IF; -- CSV-kolom F: Controleer de lengte van het mantelcontract nummer v_mantel_nr := SUBSTR(TRIM(rec.mantelnr), 1, 30); IF LENGTH(TRIM(rec.mantelnr)) > 30 THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'MantelNr - Aangepast ivm lengte groter dan 30' , rec.fac_imp_csv_index || ' - ' || rec.mantelnr || ' wordt: ' || v_mantel_nr ); END IF; -- CSV-kolom G: Controleer de lengte van het mantelcontract versie v_mantel_nr_versie := SUBSTR(TRIM(v_mantel_nr_versie), 1, 10); IF LENGTH(TRIM(rec.mantelnr_versie)) > 10 THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'MantelNr_versie - Aangepast ivm lengte groter dan 10' , rec.fac_imp_csv_index || ' - ' || rec.mantelnr_versie || ' wordt: ' || v_mantel_nr_versie ); END IF; -- CSV-kolom H: Controleer de lengte van contract omschrijving v_omschrijving := SUBSTR(TRIM(rec.omschrijving), 1, 1000); IF LENGTH(TRIM(rec.omschrijving)) > 1000 THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Omschrijving - Lengte (' || TO_CHAR(LENGTH(TRIM(rec.omschrijving))) || ') aangepast tot 1000' , rec.fac_imp_csv_index ); END IF; -- CSV-kolom I: Controleer of er een geldige dienst is ingevuld (geen dienst is ook goed) v_dienst := SUBSTR(TRIM(rec.dienst), 1, 60); IF v_dienst IS NOT NULL THEN BEGIN SELECT prs_dienst_key INTO v_ref_key FROM prs_dienst WHERE prs_dienst_omschrijving = v_dienst; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Dienst - Is onbekend' , rec.fac_imp_csv_index || ' - ' || v_dienst || ', Regel wordt overgeslagen' ); v_ongeldig := 1; END; END IF; -- CSV-kolom J: Controleer of de afdelingscode bestaat v_afdeling := SUBSTR(TRIM(rec.eigenaar_afd), 1, 15); BEGIN SELECT prs_afdeling_key INTO v_ref_key FROM prs_afdeling WHERE prs_afdeling_upper = UPPER(v_afdeling) AND prs_afdeling_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Eigenaar_afd - Is onbekend' , rec.fac_imp_csv_index || ' - ' || v_afdeling || ', Regel wordt overgeslagen' ); v_ongeldig := 1; END; -- CSV-kolom K: Controleer of er een geldig eigenaar mailadres is ingevuld (mag leeg zijn) v_perslid_eig := SUBSTR(TRIM(rec.eigenaar_email), 1, 200); IF v_perslid_eig IS NOT NULL THEN BEGIN SELECT prs_perslid_key INTO v_ref_key FROM prs_perslid WHERE prs_perslid_email = v_perslid_eig; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Eigenaar_email - Is onbekend' , rec.fac_imp_csv_index || ' - ' || v_perslid_eig || ', Regel wordt overgeslagen' ); v_ongeldig := 1; END; END IF; -- CSV-kolom L: Controleer of er een geldig beheerder mailadres is ingevuld (mag niet leeg zijn) v_perslid_beh := SUBSTR(TRIM(rec.beheerder_email), 1, 200); IF v_perslid_beh IS NULL THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Beheerder_email - Is niet ingevuld' , rec.fac_imp_csv_index || ', Regel wordt overgeslagen' ); v_ongeldig := 1; ELSE BEGIN SELECT prs_perslid_key INTO v_ref_key FROM prs_perslid WHERE prs_perslid_email = v_perslid_beh; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Beheerder_email - Is onbekend' , rec.fac_imp_csv_index || ' - ' || v_perslid_beh || ', Regel wordt overgeslagen' ); v_ongeldig := 1; END; END IF; -- CSV-kolom M: Controleeer de lengte van contract opmerking v_opmerking := SUBSTR(TRIM(rec.opmerking), 1, 1000); IF LENGTH(TRIM(rec.opmerking)) > 1000 THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Opmerking - Lengte (' || TO_CHAR(LENGTH(TRIM(rec.opmerking))) || ') aangepast tot 1000' , rec.fac_imp_csv_index ); END IF; -- CSV-kolom N: Controleer ingangsdatum op geldig format en aanwezigheid v_ingangsdatum := fac.safe_to_date(TRIM(rec.ingangsdatum), 'dd-mm-yyyy'); IF v_ingangsdatum IS NULL THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Ingangsdatum - Is niet aanwezig of ongeldig' , rec.fac_imp_csv_index || ' - ' || rec.ingangsdatum || ', Regel wordt overgeslagen' ); v_ongeldig := 1; END IF; -- CSV-kolom O: Controleer rappeldatum op geldig format v_rappeldatum := fac.safe_to_date(TRIM(rec.rappeldatum), 'dd-mm-yyyy'); IF v_rappeldatum IS NULL AND rec.rappeldatum IS NOT NULL THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Rappeldatum - Is ongeldig' , rec.fac_imp_csv_index || ' - ' || rec.rappeldatum || ', Regel wordt overgeslagen' ); v_ongeldig := 1; END IF; -- CSV-kolom P: Controleer opzegdatum op geldig format v_opzegdatum := fac.safe_to_date(TRIM(rec.opzegdatum), 'dd-mm-yyyy'); IF v_opzegdatum IS NULL AND rec.opzegdatum IS NOT NULL THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Opzegdatum - Is ongeldig' , rec.fac_imp_csv_index || ' - ' || rec.opzegdatum || ', Regel wordt overgeslagen' ); v_ongeldig := 1; END IF; -- CSV-kolom Q: Controleer einddatum op geldig format en aanwezigheid v_einddatum := fac.safe_to_date(TRIM(rec.einddatum), 'dd-mm-yyyy'); IF v_einddatum IS NULL THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Einddatum - Is niet aanwezig of ongeldig' , rec.fac_imp_csv_index || ' - ' || rec.einddatum || ', Regel wordt overgeslagen' ); v_ongeldig := 1; END IF; -- CSV-kolom R: Controle soort contractpartij v_srtcontact := SUBSTR(TRIM(rec.soort_contactpartij), 1, 1); IF v_srtcontact IS NULL OR v_srtcontact NOT IN ('B','P') THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Soort_contactpartij - Is niet aanwezig of ongeldig' , rec.fac_imp_csv_index || ' - ' || rec.soort_contactpartij || ', Regel wordt overgeslagen' ); v_ongeldig := 1; END IF; -- CSV-kolom S: Controle lengte bedrijfsnaam IF v_srtcontact = 'B' THEN v_bedrijfnaam := SUBSTR(TRIM(rec.bedrijfnaam), 1, 60); -- naam van bedrijf: prs_bedrijf.prs_bedrijf_naam IF LENGTH(TRIM(rec.bedrijfnaam)) > 60 THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Bedrijfnaam - Aangepast ivm lengte groter dan 60' , rec.fac_imp_csv_index || ' - ' || rec.bedrijfnaam || ' wordt: ' || v_bedrijfnaam ); END IF; ELSE v_bedrijfnaam := SUBSTR(TRIM(rec.bedrijfnaam), 1, 200); -- emailadres van persoon: prs_perslid.prs_perslid_email IF LENGTH(TRIM(rec.bedrijfnaam)) > 200 THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Bedrijfnaam - Aangepast ivm lengte groter dan 200' , rec.fac_imp_csv_index || ' - ' || rec.bedrijfnaam ); END IF; END IF; IF v_bedrijfnaam IS NULL THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Bedrijfnaam - Is niet aanwezig' , rec.fac_imp_csv_index ); v_ongeldig := 1; END IF; -- CSV-kolom T: Controle contact mailadres v_contactnaam := SUBSTR(TRIM(rec.contactnaam), 1, 200); IF LENGTH(TRIM(rec.contactnaam)) > 200 THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Contactnaam - Aangepast ivm lengte groter dan 200' , rec.fac_imp_csv_index ); END IF; -- CSV-kolom U: Controle Kostenplaatscode v_kpn_code := SUBSTR(TRIM(rec.kostenplaatscode), 1, 30); BEGIN SELECT prs_kostenplaats_key INTO v_ref_key FROM prs_kostenplaats WHERE prs_kostenplaats_nr = v_kpn_code AND prs_kostenplaats_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'KostenplaatsCode - Is onbekend of niet ingevuld' , rec.fac_imp_csv_index || ' - ' || v_kpn_code || ', Regel wordt overgeslagen' ); v_ongeldig := 1; END; -- CSV-kolom V: Controle Kostensoortcode v_kostensoort_code := SUBSTR(TRIM(rec.kostensoortcode), 1, 60); IF LENGTH(TRIM(rec.kostensoortcode)) IS NOT NULL THEN BEGIN SELECT prs_kostensoort_key INTO v_ref_key FROM prs_kostensoort WHERE prs_kostensoort_upper = UPPER(v_kostensoort_code) AND prs_kostensoort_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'KostensoortCode - Is onbekend of niet ingevuld' , rec.fac_imp_csv_index || ' - ' || v_kostensoort_code || ', Regel wordt overgeslagen' ); v_ongeldig := 1; END; END IF; -- CSV-kolom W: Controle of contractbedrag geldig is v_bedrag := fac.safe_to_number(rec.contractbedrag); IF v_bedrag IS NULL AND rec.contractbedrag IS NOT NULL THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Contractbedrag - Wordt genegeerd' , rec.fac_imp_csv_index || ' - ' || rec.contractbedrag ); END IF; -- CSV-kolom X: Controle of termijnbedrag geldig is v_bedrag_termijn := fac.safe_to_number(rec.termijnbedrag); IF v_bedrag_termijn IS NULL AND rec.termijnbedrag IS NOT NULL THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Termijnbedrag - Wordt genegeerd' , rec.fac_imp_csv_index || ' - ' || rec.termijnbedrag ); END IF; -- CSV-kolom Y: Controle of uurtarief geldig is v_uurtarief := fac.safe_to_number(rec.uurtarief); IF v_uurtarief IS NULL AND rec.uurtarief IS NOT NULL THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Uurtrief - Wordt genegeerd' , rec.fac_imp_csv_index || ' - ' || rec.uurtarief ); END IF; -- CSV-kolom Z: Controle of korting geldig is v_korting := fac.safe_to_number(rec.korting); IF v_korting IS NULL AND rec.korting IS NOT NULL THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Korting - Wordt genegeerd' , rec.fac_imp_csv_index || ' - ' || rec.korting ); END IF; -- CSV-kolom AA: Controle Locatiecode v_locatiecode := SUBSTR(TRIM(rec.locatiecode), 1, 10); IF LENGTH(TRIM(rec.locatiecode)) > 10 THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Locatiecode - Aangepast ivm lengte groter dan 10 voor locatie' , rec.fac_imp_csv_index || ' - ' || rec.locatiecode || ' wordt: ' || v_locatiecode ); END IF; -- CSV-kolom AB: Controle Terreincode v_terreincode := SUBSTR(TRIM(rec.terreincode), 1, 12); IF LENGTH(TRIM(rec.terreincode)) > 12 THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Terreincode - Aangepast ivm lengte groter dan 12 voor terrein' , rec.fac_imp_csv_index || ' - ' || rec.terreincode || ' wordt: ' || v_terreincode ); END IF; -- CSV-kolom AC: Controle Gebouwcode v_gebouwcode := SUBSTR(TRIM(rec.gebouwcode), 1, 12); IF LENGTH(TRIM(rec.gebouwcode)) > 12 THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Gebouwcode - Aangepast ivm lengte groter dan 12 voor gebouw' , rec.fac_imp_csv_index || ' - ' || rec.gebouwcode || ' wordt: ' || v_gebouwcode ); END IF; -- CSV-kolom AD: Controle Verdiepingcode BEGIN v_verdiepingcode := fac.safe_to_number(rec.verdiepingcode); EXCEPTION WHEN OTHERS THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Verdiepingcode - Aangepast ivm lengte groter dan 3 voor verdieping' , rec.fac_imp_csv_index || ' - ' || rec.verdiepingcode || ' wordt: ' || v_verdiepingcode ); END; -- CSV-kolom AE: Controle Ruimtecode v_ruimtecode := SUBSTR(TRIM(rec.ruimtecode), 1, 20); IF LENGTH(TRIM(rec.ruimtecode)) > 20 THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Ruimtecode - Aangepast ivm lengte groter dan 20 voor ruimte' , rec.fac_imp_csv_index || ' - ' || rec.ruimtecode || ' wordt: ' || v_ruimtecode ); END IF; -- CSV-kolom AF: Controle op geldige waarde voor verlengen v_verlengen := fac.safe_to_number(rec.verlengen); IF v_verlengen NOT IN (0,1,2,3,5) THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || 'Verlengen - Ongeldige waarde' , rec.fac_imp_csv_index || ' - ' || rec.verlengen || ', Regel wordt overgeslagen' ); v_ongeldig := 1; END IF; -- De flexkenmerkwaarden v_cnt_kenmerk_01 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_01, rec.flex_01); v_cnt_kenmerk_02 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_02, rec.flex_02); v_cnt_kenmerk_03 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_03, rec.flex_03); v_cnt_kenmerk_04 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_04, rec.flex_04); v_cnt_kenmerk_05 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_05, rec.flex_05); v_cnt_kenmerk_06 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_06, rec.flex_06); v_cnt_kenmerk_07 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_07, rec.flex_07); v_cnt_kenmerk_08 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_08, rec.flex_08); v_cnt_kenmerk_09 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_09, rec.flex_09); v_cnt_kenmerk_10 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_10, rec.flex_10); v_cnt_kenmerk_11 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_11, rec.flex_11); v_cnt_kenmerk_12 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_12, rec.flex_12); v_cnt_kenmerk_13 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_13, rec.flex_13); v_cnt_kenmerk_14 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_14, rec.flex_14); v_cnt_kenmerk_15 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_15, rec.flex_15); v_cnt_kenmerk_16 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_16, rec.flex_16); v_cnt_kenmerk_17 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_17, rec.flex_17); v_cnt_kenmerk_18 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_18, rec.flex_18); v_cnt_kenmerk_19 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_19, rec.flex_19); v_cnt_kenmerk_20 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_20, rec.flex_20); v_cnt_kenmerk_21 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_21, rec.flex_21); v_cnt_kenmerk_22 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_22, rec.flex_22); v_cnt_kenmerk_23 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_23, rec.flex_23); v_cnt_kenmerk_24 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_24, rec.flex_24); v_cnt_kenmerk_25 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_25, rec.flex_25); -- 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 flex gevuld met =; zoniet, dan is -- flex 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_cnt ( nummer_intern , versie , nummer_extern , cnt_soort , beschrijving , mantel_nr , mantel_nr_versie , omschrijving , dienst , afdeling , perslid_eig , perslid_beh , opmerking , datum_ingang , datum_rappel , datum_opzeg , datum_eind , soortcontact , bedrijf_naam , contact_naam , kpn_code , kostensoort , bedrag , bedrag_termijn , uurtarief , korting , locatiecode , terreincode , gebouwcode , verdiepingcode , ruimtecode , verlengen , flex1, flex2, flex3, flex4, flex5 , flex6, flex7, flex8, flex9, flex10 , flex11, flex12, flex13, flex14, flex15 , flex16, flex17, flex18, flex19, flex20 , flex21, flex22, flex23, flex24, flex25 ) VALUES ( v_nummer_intern , v_versie , v_nummer_extern , v_cnt_soort , v_beschrijving , v_mantel_nr , v_mantel_nr_versie , v_omschrijving , v_dienst , v_afdeling , v_perslid_eig , v_perslid_beh , v_opmerking , v_ingangsdatum , v_rappeldatum , v_opzegdatum , v_einddatum , v_srtcontact , v_bedrijfnaam , v_contactnaam , v_kpn_code , v_kostensoort_code , v_bedrag , v_bedrag_termijn , v_uurtarief , v_korting , v_locatiecode , v_terreincode , v_gebouwcode , v_verdiepingcode , v_ruimtecode , v_verlengen , v_cnt_kenmerk_01, v_cnt_kenmerk_02, v_cnt_kenmerk_03, v_cnt_kenmerk_04, v_cnt_kenmerk_05 , v_cnt_kenmerk_06, v_cnt_kenmerk_07, v_cnt_kenmerk_08, v_cnt_kenmerk_09, v_cnt_kenmerk_10 , v_cnt_kenmerk_11, v_cnt_kenmerk_12, v_cnt_kenmerk_13, v_cnt_kenmerk_14, v_cnt_kenmerk_15 , v_cnt_kenmerk_16, v_cnt_kenmerk_17, v_cnt_kenmerk_18, v_cnt_kenmerk_19, v_cnt_kenmerk_20 , v_cnt_kenmerk_21, v_cnt_kenmerk_22, v_cnt_kenmerk_23, v_cnt_kenmerk_24, v_cnt_kenmerk_25 ); COMMIT; v_count_imp := v_count_imp + 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; END LOOP; END IF; IF (v_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' , 'Contracten/#ingelezen importregels: ' || TO_CHAR (v_count_rec) , ''); fac.imp_writelog ( p_import_key, 'S' , 'Contracten/#ongeldige niet ingelezen importregels: ' || TO_CHAR (v_count_rec - v_count_imp) , ''); 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 contracten afgebroken!'); END fac_import_cnt; / CREATE OR REPLACE PROCEDURE fac_update_cnt (p_import_key IN NUMBER) AS -- Cursor zoekt direct alle afgeleide gegevens. -- Een leeg veld betekent dus: óf deze regel overslaan, óf nieuwe data toevoegen. CURSOR c1 IS WITH imp_cnt AS ( SELECT i.nummer_intern , i.versie , i.nummer_extern , i.cnt_soort , i.beschrijving , i.mantel_nr , i.mantel_nr_versie , i.omschrijving , i.dienst , i.afdeling , i.perslid_eig , i.perslid_beh , i.opmerking , i.datum_ingang , i.datum_rappel , i.datum_opzeg , i.datum_eind , i.soortcontact , i.bedrijf_naam , i.contact_naam , i.kpn_code , i.kostensoort , i.bedrag , i.bedrag_termijn , i.uurtarief , i.korting , i.locatiecode , i.terreincode , i.gebouwcode , i.verdiepingcode , i.ruimtecode , i.verlengen , disc.ins_discipline_key , mntl.cnt_contract_key mantel_key , d.prs_dienst_key , afd.prs_afdeling_key , eig.prs_afdeling_key prs_afdeling_key_eig , eig.prs_perslid_key prs_perslid_key_eig , beh.prs_perslid_key prs_perslid_key_beh , CASE WHEN i.soortcontact = 'P' THEN (SELECT prs_perslid_key FROM prs_perslid WHERE LOWER(TRIM(prs_perslid_email)) = LOWER(i.bedrijf_naam) ) ELSE (SELECT MIN (prs_bedrijf_key) FROM prs_bedrijf WHERE (1=1) --prs_bedrijf_contract IS NOT NULL AND ( TRIM(prs_bedrijf_naam_upper) = UPPER (i.bedrijf_naam) OR UPPER(TRIM(prs_leverancier_nr)) = UPPER (i.bedrijf_naam) ) ) END prs_bedrijf_key , kpn.prs_kostenplaats_key , ksr.prs_kostensoort_key , i.flex1, i.flex2, i.flex3, i.flex4, i.flex5 , i.flex6, i.flex7, i.flex8, i.flex9, i.flex10 , i.flex11, i.flex12, i.flex13, i.flex14, i.flex15 , i.flex16, i.flex17, i.flex18, i.flex19, i.flex20 , i.flex21, i.flex22, i.flex23, i.flex24, i.flex25 FROM fac_imp_cnt i , (SELECT * FROM cnt_discipline WHERE ins_discipline_verwijder IS NULL ) disc , (SELECT c.* FROM cnt_v_aanwezigcontract c , cnt_disc_params dp WHERE c.ins_discipline_key = dp.cnt_ins_discipline_key AND dp.cnt_srtcontract_type = 6 ) mntl , prs_dienst d , (SELECT * FROM prs_afdeling WHERE prs_afdeling_verwijder IS NULL ) afd , prs_v_aanwezigperslid eig , prs_v_aanwezigperslid beh , prs_v_aanwezigkostenplaats kpn , prs_kostensoort ksr WHERE UPPER(i.cnt_soort) = UPPER(TRIM(disc.ins_discipline_omschrijving(+))) AND UPPER(i.mantel_nr) = UPPER(TRIM(mntl.cnt_contract_nummer_intern(+))) AND UPPER(i.dienst) = UPPER(TRIM(d.prs_dienst_omschrijving(+))) AND UPPER(i.afdeling) = TRIM(afd.prs_afdeling_upper(+)) AND UPPER(i.perslid_eig) = UPPER(TRIM(eig.prs_perslid_email(+))) AND UPPER(i.perslid_beh) = UPPER(TRIM(beh.prs_perslid_email(+))) AND UPPER(i.kpn_code) = TRIM(kpn.prs_kostenplaats_upper(+)) AND UPPER(i.kostensoort) = TRIM(ksr.prs_kostensoort_upper(+)) ) SELECT a.nummer_intern , a.nummer_extern , a.cnt_soort , dp.cnt_srtcontract_type , a.ins_discipline_key , a.beschrijving , a.mantel_nr , a.mantel_nr_versie , a.mantel_key , a.omschrijving , a.versie , a.dienst , a.prs_dienst_key , a.afdeling , a.prs_afdeling_key , a.perslid_eig , a.prs_perslid_key_eig , a.prs_afdeling_key_eig , a.perslid_beh , a.prs_perslid_key_beh , a.opmerking , a.datum_ingang , a.datum_eind , a.datum_opzeg , a.datum_rappel , a.soortcontact , a.bedrijf_naam , a.prs_bedrijf_key , a.contact_naam , cp.prs_contactpersoon_key , a.kpn_code , a.prs_kostenplaats_key , a.kostensoort , a.prs_kostensoort_key , a.bedrag , a.bedrag_termijn , a.uurtarief , a.korting , a.locatiecode , a.terreincode , a.gebouwcode , a.verdiepingcode , a.ruimtecode , a.verlengen , a.flex1 cnt_kenmerkwaarde1 , a.flex2 cnt_kenmerkwaarde2 , a.flex3 cnt_kenmerkwaarde3 , a.flex4 cnt_kenmerkwaarde4 , a.flex5 cnt_kenmerkwaarde5 , a.flex6 cnt_kenmerkwaarde6 , a.flex7 cnt_kenmerkwaarde7 , a.flex8 cnt_kenmerkwaarde8 , a.flex9 cnt_kenmerkwaarde9 , a.flex10 cnt_kenmerkwaarde10 , a.flex11 cnt_kenmerkwaarde11 , a.flex12 cnt_kenmerkwaarde12 , a.flex13 cnt_kenmerkwaarde13 , a.flex14 cnt_kenmerkwaarde14 , a.flex15 cnt_kenmerkwaarde15 , a.flex16 cnt_kenmerkwaarde16 , a.flex17 cnt_kenmerkwaarde17 , a.flex18 cnt_kenmerkwaarde18 , a.flex19 cnt_kenmerkwaarde19 , a.flex20 cnt_kenmerkwaarde20 , a.flex21 cnt_kenmerkwaarde21 , a.flex22 cnt_kenmerkwaarde22 , a.flex23 cnt_kenmerkwaarde23 , a.flex24 cnt_kenmerkwaarde24 , a.flex25 cnt_kenmerkwaarde25 FROM imp_cnt a , cnt_disc_params dp , prs_contactpersoon cp WHERE a.ins_discipline_key = dp.cnt_ins_discipline_key AND UPPER(a.contact_naam) = UPPER(TRIM(cp.prs_contactpersoon_email(+))) AND a.prs_bedrijf_key = cp.prs_bedrijf_key(+); -- Constanten c_contract_type NUMBER := 5; -- Leverancier (met scope) v_errormsg VARCHAR2(1000) := '-'; oracle_err_num NUMBER; oracle_err_mes VARCHAR2(200); v_aanduiding VARCHAR2(200); v_geldig NUMBER(1); v_facilitor_key NUMBER; v_perslid_key_eig NUMBER; v_perslid_key_beh NUMBER; v_typecontract_key NUMBER; v_cnt_discipline_key NUMBER; v_contactpersoon_key NUMBER; v_cnt_status NUMBER; v_termijn_type VARCHAR2(1); v_termijn_aantal NUMBER; v_termijn_key_opzeg NUMBER; v_termijn_key_rappel NUMBER; v_contract_key NUMBER; v_count NUMBER; v_count_tot NUMBER; v_count_cntnew NUMBER; v_count_cntupd NUMBER; v_srtnoti_code VARCHAR2(6); v_scope_code VARCHAR2(1); v_scope_key NUMBER(10); v_scope_err VARCHAR2(100); -- SUBPROC PROCEDURE bepaal_termijn( p_start IN DATE , p_eind IN DATE , p_termijn_type OUT VARCHAR2 , p_termijn_aantal OUT NUMBER , p_afronden IN BOOLEAN ) AS v_type VARCHAR2(1) := 'W'; v_aantal NUMBER := 0; v_zelfde_dag BOOLEAN; v_zelfde_weekdag BOOLEAN; v_zelfde_maand BOOLEAN; min_jaar NUMBER := 3; -- Afronden op jaren als het aantal dagen groter is dan dit aantal jaren min_maand NUMBER := 3; -- Afronden op maanden als het aantal dagen groter is dan dit aantal maanden. min_week NUMBER := 4; -- Afronden op weken als het aantal dagen groter is dan dit aantal weken. BEGIN IF p_start IS NOT NULL AND p_eind > p_start THEN v_zelfde_weekdag := (TO_CHAR(p_start, 'D') = TO_CHAR(p_eind, 'D')); v_zelfde_dag := (TO_CHAR(p_start, 'dd') = TO_CHAR(p_eind, 'dd')); v_zelfde_maand := (TO_CHAR(p_start, 'mm') = TO_CHAR(p_eind, 'mm')); CASE WHEN (v_zelfde_dag AND v_zelfde_maand) THEN v_type := 'Y'; v_aantal := TO_NUMBER(TO_CHAR(p_eind, 'yyyy')) - TO_NUMBER(TO_CHAR(p_start, 'yyyy')); WHEN (v_zelfde_dag AND NOT v_zelfde_maand) THEN v_type := 'M'; v_aantal := ROUND(MONTHS_BETWEEN(p_eind, p_start)); WHEN (v_zelfde_weekdag) THEN v_type := 'W'; v_aantal := ROUND((p_eind - p_start) / 7); ELSE v_type := 'D'; v_aantal := p_eind - p_start; IF p_afronden THEN CASE WHEN v_aantal > (365 * min_jaar) THEN -- afronden op jaren v_type := 'Y'; v_aantal := ROUND(v_aantal / 365); WHEN v_aantal > (30 * min_maand) THEN -- afronden op maanden v_type := 'M'; v_aantal := ROUND(v_aantal / 30); WHEN v_aantal > (7 * min_week) THEN -- afronden op weken v_type := 'W'; v_aantal := ROUND(v_aantal / 7); END CASE; END IF; END CASE; END IF; -- v_aantal := LEAST(v_aantal, 999); IF v_aantal < 0 THEN v_aantal := 0; v_type := 'W'; END IF; -- p_termijn_type := v_type; p_termijn_aantal := v_aantal; END; -- SUBPROC bepaal_termijn -- SUBPROC -- p_kenmerkwaarde = 'Looptijd Maximaal|1=24'. Ofwel: kenmerk_omschrijving|groep=waarde. -- p_kenmerkwaarde = '1049|1=24'. Ofwel: kenmerk_key|groep=waarde. PROCEDURE upsert_cntkenmerk( p_cnt_key IN NUMBER , p_kenmerkwaarde IN VARCHAR2) AS v_kenmerk_key NUMBER; v_srtkenmerk_type cnt_srtkenmerk.cnt_srtkenmerk_kenmerktype%TYPE; ccount NUMBER; v_srtkenmerk_key NUMBER; v_groep NUMBER; v_kenmerk VARCHAR2 (50); v_waarde VARCHAR2 (255); v_objectnaam fac_kenmerkdomein.fac_kenmerkdomein_objectnaam%TYPE; v_kolomnaam fac_kenmerkdomein.fac_kenmerkdomein_kolomnaam%TYPE; v_kolomtxt fac_kenmerkdomein.fac_kenmerkdomein_kolomtxt%TYPE; sql_stmt VARCHAR2 (1000); v_kenmerkdeel_key NUMBER; l_cursor_1 INTEGER; l_rowsprocessed NUMBER DEFAULT 0; BEGIN IF p_kenmerkwaarde IS NOT NULL THEN v_errormsg := 'Fout bij bepalen kenmerk [' || SUBSTR(p_kenmerkwaarde, 1, 200) || ']'; v_kenmerk := SUBSTR (p_kenmerkwaarde, 1, INSTR (p_kenmerkwaarde, '|') - 1); v_groep := fac.safe_to_number(SUBSTR( p_kenmerkwaarde , INSTR(p_kenmerkwaarde, '|') + 1 , INSTR(p_kenmerkwaarde, '=') - 1 - INSTR(p_kenmerkwaarde, '|') ) ); v_waarde := SUBSTR(p_kenmerkwaarde, INSTR(p_kenmerkwaarde, '=') + 1); IF fac.safe_to_number(v_kenmerk) IS NULL THEN -- Er kunnen drie kenmerken met dezelfde omschrijving gedefinieerd worden voor een object, -- namenlijk op drie niveaus discipline (D), 0bjectgroep (G) en objectsoort (S). -- Bij meerdere dezelfde kenmerken nemen we het kenmerk met de laagste volgnummer. SELECT cnt_kenmerk_key , cnt_srtkenmerk_key , cnt_srtkenmerk_kenmerktype INTO v_kenmerk_key , v_srtkenmerk_key , v_srtkenmerk_type FROM ( SELECT k.cnt_kenmerk_key , sk.cnt_srtkenmerk_key , sk.cnt_srtkenmerk_kenmerktype , k.cnt_kenmerk_volgnummer FROM cnt_v_aanwezigcontract c , cnt_kenmerk k , cnt_srtkenmerk sk WHERE ( c.ins_discipline_key = k.cnt_srtcontract_key or k.cnt_srtcontract_key IS NULL ) AND k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key AND c.cnt_contract_key = p_cnt_key AND k.cnt_kenmerk_groep = v_groep AND COALESCE(UPPER(k.cnt_kenmerk_omschrijving), sk.cnt_srtkenmerk_upper) = UPPER(v_kenmerk) AND k.cnt_kenmerk_verwijder IS NULL AND sk.cnt_srtkenmerk_verwijder IS NULL ORDER BY k.cnt_kenmerk_volgnummer ) WHERE ROWNUM = 1; ELSE SELECT k.cnt_kenmerk_key , sk.cnt_srtkenmerk_key , sk.cnt_srtkenmerk_kenmerktype INTO v_kenmerk_key , v_srtkenmerk_key , v_srtkenmerk_type FROM cnt_kenmerk k , cnt_srtkenmerk sk WHERE k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key AND k.cnt_kenmerk_groep = v_groep AND k.cnt_kenmerk_key = v_kenmerk ORDER BY k.cnt_kenmerk_volgnummer; END IF; IF v_waarde IS NOT NULL THEN IF v_srtkenmerk_type IN ('R', 'r', 'S') THEN v_errormsg := 'Fout bij bepalen eigen tabel'; SELECT COUNT (*) INTO ccount FROM cnt_srtkenmerk sk , fac_kenmerkdomein d WHERE sk.cnt_srtkenmerk_key = v_srtkenmerk_key AND sk.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key AND d.fac_usrtab_key IS NOT NULL; v_errormsg := 'Fout bij bepalen nieuwe waarde [' || SUBSTR(v_waarde, 1, 200) || ']'; IF ccount = 1 THEN -- Eigen tabel SELECT TO_CHAR (ud.fac_usrdata_key) INTO v_waarde FROM cnt_srtkenmerk sk , fac_kenmerkdomein d , fac_v_aanwezigusrdata ud WHERE sk.cnt_srtkenmerk_key = v_srtkenmerk_key AND sk.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key AND d.fac_usrtab_key = ud.fac_usrtab_key AND UPPER(TRIM(ud.fac_usrdata_omschr)) = UPPER(v_waarde); ELSE -- FACILITOR view/tabel SELECT d.fac_kenmerkdomein_objectnaam , d.fac_kenmerkdomein_kolomnaam , d.fac_kenmerkdomein_kolomtxt INTO v_objectnaam , v_kolomnaam , v_kolomtxt FROM cnt_srtkenmerk sk , fac_kenmerkdomein d WHERE sk.cnt_srtkenmerk_key = v_srtkenmerk_key AND sk.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key AND d.fac_usrtab_key IS NULL; sql_stmt := 'SELECT MAX (' || v_kolomnaam || ')' || ' FROM ' || v_objectnaam || ' WHERE UPPER (TRIM (' || v_kolomtxt || ')) = UPPER (:pwaarde)'; l_cursor_1 := DBMS_SQL.open_cursor; DBMS_SQL.parse(l_cursor_1, sql_stmt, DBMS_SQL.native); DBMS_SQL.BIND_VARIABLE(l_cursor_1,':pwaarde', v_waarde); DBMS_SQL.define_column(l_cursor_1, 1, v_waarde, 255); l_rowsprocessed := DBMS_SQL.execute_and_fetch(l_cursor_1); DBMS_SQL.column_value(l_cursor_1, 1, v_waarde); DBMS_SQL.close_cursor(l_cursor_1); END IF; ELSE -- C(Karakter)/D(Datum)/N(Numeriek)/X(Bestandsnaam) NULL; -- v_waarde := p_waarde; END IF; v_errormsg := 'Fout bij bepalen huidige waarde'; SELECT COUNT(*) , MAX(cnt_kenmerkcontract_key) INTO ccount , v_kenmerkdeel_key FROM cnt_kenmerkcontract WHERE cnt_contract_key = p_cnt_key AND cnt_kenmerk_key = v_kenmerk_key; IF v_srtkenmerk_type = 'N' -- Alleen voor numerieke waarden de decimale komma vervangen door punt. THEN v_waarde := REPLACE(v_waarde, ',', '.'); END IF; IF ccount = 0 THEN v_errormsg := 'Fout bij toevoegen waarde [' || SUBSTR(v_waarde, 1, 200) || ']'; INSERT INTO cnt_kenmerkcontract ( cnt_contract_key , cnt_kenmerk_key , cnt_kenmerkcontract_waarde ) VALUES ( p_cnt_key , v_kenmerk_key , v_waarde ); ELSE v_errormsg := 'Fout bij bijwerken waarde [' || SUBSTR(v_waarde, 1, 200) || ']'; UPDATE cnt_kenmerkcontract SET cnt_kenmerkcontract_waarde = v_waarde WHERE cnt_kenmerkcontract_key = v_kenmerkdeel_key; END IF; ELSE -- Verwijder kenmerken die al bestaan maar met de nieuwe import leeg zijn. DELETE cnt_kenmerkcontract WHERE cnt_kenmerk_key = v_kenmerk_key AND cnt_contract_key = p_cnt_key; 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 , 'upsert_cntkenmerk' ); END; -- SUBPROC upsert_cntkenmerk -- SUBPROC PROCEDURE onroerendgoed_to_scope( loc IN VARCHAR2 DEFAULT NULL , ter IN VARCHAR2 DEFAULT NULL , bld IN VARCHAR2 DEFAULT NULL , flr IN NUMBER DEFAULT NULL , room IN VARCHAR2 DEFAULT NULL , scope_typ OUT VARCHAR2 , scope_key OUT NUMBER , scope_err OUT VARCHAR2 ) AS BEGIN IF loc IS NOT NULL THEN BEGIN SELECT alg_locatie_key INTO scope_key FROM alg_v_aanweziglocatie WHERE alg_locatie_code = loc; scope_typ := 'L'; IF ter IS NOT NULL THEN BEGIN SELECT alg_terreinsector_key INTO scope_key FROM alg_v_aanwezigterreinsector WHERE alg_locatie_key = scope_key AND alg_terreinsector_code = ter; scope_typ := 'T'; EXCEPTION WHEN NO_DATA_FOUND THEN scope_err := 'Onbekende terreinsector: ' || ter || ' in ' || loc; END; ELSE BEGIN IF bld IS NOT NULL THEN BEGIN SELECT alg_gebouw_key INTO scope_key FROM alg_v_aanweziggebouw WHERE alg_locatie_key = scope_key AND alg_gebouw_code = bld; scope_typ := 'G'; IF flr IS NOT NULL THEN BEGIN SELECT alg_verdieping_key INTO scope_key FROM alg_v_aanwezigverdieping WHERE alg_gebouw_key = scope_key AND alg_verdieping_volgnr = flr; scope_typ := 'V'; IF room IS NOT NULL THEN BEGIN SELECT alg_ruimte_key INTO scope_key FROM alg_v_aanwezigruimte WHERE alg_verdieping_key = scope_key AND alg_ruimte_nr = room; scope_typ := 'R'; EXCEPTION WHEN NO_DATA_FOUND THEN scope_err := 'Onbekende ruimte: ' || room || ' in ' || loc ||'-'|| bld ||'-'|| TO_CHAR(flr); END; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN scope_err := 'Onbekende verdieping: ' || TO_CHAR(flr) || ' in ' || loc ||'-'|| bld; END; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN scope_err := 'Onbekend gebouw: ' || bld || ' in ' || loc; END; END IF; END; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN scope_err := 'Onbekende locatie: ' || loc; END; END IF; END; -- SUBPROC onroerendgoed_to_scope BEGIN v_count_tot := 0; v_count_cntnew := 0; v_count_cntupd := 0; v_aanduiding := ''; v_errormsg := 'Fout bij bepalen user: _FACILITOR'; SELECT prs_perslid_key INTO v_facilitor_key FROM prs_perslid WHERE prs_perslid_oslogin = '_FACILITOR'; FOR rec IN c1 LOOP BEGIN v_geldig := 1; v_count_tot := v_count_tot + 1; v_aanduiding := '['|| rec.cnt_soort ||'|'|| rec.nummer_intern ||'|'|| rec.nummer_extern ||'|'|| rec.beschrijving ||'] '; -- Eerst controleren of de ingevulde gegevens wel zinning/geldig zijn. -- Voor -ontbrekende- verplichte gegevens proberen we wat zinnigs (en -- geldigs!) te bedenken. -- Toevoegen/bijwerken wordt pas gedaan als alles zinnig is bevonden. -- Verplichte velden (via interface) zijn bij import al gecontroleerd! -- Afdeling: moet geldig zijn! v_errormsg := 'Fout bij bepalen afdeling: ' || rec.afdeling; IF (rec.prs_afdeling_key IS NULL) THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || v_errormsg , 'Contract wordt overgeslagen' ); v_geldig := 0; END IF; -- Eigenaar (als meegegeven) -- In geval van abonnement verplicht. IF (rec.perslid_eig IS NOT NULL AND rec.prs_perslid_key_eig IS NULL) THEN -- *niet gevonden, wel meegegeven v_errormsg := 'Fout bij bepalen eigenaar: ' || rec.perslid_eig; fac.imp_writelog( p_import_key, 'W' , v_aanduiding || v_errormsg , 'leeg gelaten' ); ELSIF (rec.prs_perslid_key_eig IS NOT NULL) THEN -- *wel gevonden (impliceert meegegeven) v_perslid_key_eig := rec.prs_perslid_key_eig; ELSE -- *niet meegegeven, dus niet gevonden IF (rec.ins_discipline_key IS NOT NULL) THEN -- Speciaal geval abonnementen: abonnee (eigenaar) is dan verplicht. -- Contract is een abonnement, als de contractsoort aan een catalogus -- gekoppeld is. -- Is er een (actuele) catalogus aan deze contractsoort gekoppeld? SELECT COUNT(*) INTO v_count FROM bes_disc_params p , bes_discipline b WHERE p.bes_disc_params_cnt_disckey = rec.ins_discipline_key AND p.bes_ins_discipline_key = b.ins_discipline_key AND b.ins_discipline_verwijder IS NULL; IF (v_count > 0) THEN -- dit is een abonnement, dus de eigenaar is verplicht v_errormsg := 'Fout bij bepalen eigenaar-abonnee'; fac.imp_writelog( p_import_key, 'W' , v_aanduiding || v_errormsg , 'Contract wordt overgeslagen' ); v_geldig := 0; END IF; END IF; END IF; -- Beheerder: backup _FACILITOR. v_errormsg := 'Fout bij bepalen beheerder: ' || rec.perslid_beh; IF (rec.prs_perslid_key_beh IS NULL) THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || v_errormsg , '_FACILITOR gebruikt' ); v_perslid_key_beh := v_facilitor_key; ELSE v_perslid_key_beh := rec.prs_perslid_key_beh; END IF; -- Bedrijf: moet geldig zijn! v_errormsg := 'Fout bij bepalen bedrijf: ' || rec.bedrijf_naam; IF (rec.prs_bedrijf_key IS NULL) THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || v_errormsg , 'Contract wordt overgeslagen' ); v_geldig := 0; END IF; -- Kostenplaats: moet bestaan. v_errormsg := 'Fout bij bepalen kostenplaats: ' || rec.kpn_code; IF (rec.prs_kostenplaats_key IS NULL) THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || v_errormsg , 'Contract wordt overgeslagen' ); v_geldig := 0; END IF; onroerendgoed_to_scope( rec.locatiecode, rec.terreincode, rec.gebouwcode, rec.verdiepingcode, rec.ruimtecode , v_scope_code, v_scope_key, v_scope_err); -- Locatie/gebouw (als meegegeven): moet bestaan en ook passen bij de -- contractsoort (type_key 3=Ondersteuning of 5=Leverancier). IF (v_scope_code IS NOT NULL) THEN IF v_scope_err IS NOT NULL THEN v_errormsg := 'Fout bij bepalen scope: ' || v_scope_err; fac.imp_writelog( p_import_key, 'W' , v_aanduiding || v_errormsg , 'Contract/scope wordt overgeslagen' ); v_geldig := 0; END IF; v_errormsg := 'Fout bij matchen contractsoort-scope'; IF (rec.cnt_srtcontract_type NOT IN (3, 5)) THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || v_errormsg , 'Contract/scope wordt overgeslagen' ); v_geldig := 0; END IF; END IF; -- Mantel: niet verplicht, wel rapporteren als niets gevonden. v_errormsg := 'Fout bij bepalen mantel: ' || rec.mantel_nr; IF (rec.mantel_nr IS NOT NULL AND rec.mantel_key IS NULL) THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || v_errormsg , 'Contract niet aan mantel gekoppeld' ); END IF; -- Dienst: niet verplicht, wel rapporteren als niets gevonden. v_errormsg := 'Fout bij bepalen dienst: ' || rec.dienst; IF (rec.dienst IS NOT NULL AND rec.prs_dienst_key IS NULL) THEN fac.imp_writelog( p_import_key, 'W' , v_aanduiding || v_errormsg , 'Contract niet aan dienst gekoppeld' ); END IF; -- Alleen verder gaan als alles zinnig bevonden is. IF (v_geldig = 1) THEN -- Contractsoort: toevoegen (type Leverancier). IF (rec.ins_discipline_key IS NULL) THEN -- Misschien is de contractsoort tijdens import al toegevoegd? -- (dan was 'ie er voor de cursor nog niet.) BEGIN v_errormsg := 'Fout bij bepalen contractsoort'; SELECT ins_discipline_key INTO v_cnt_discipline_key FROM cnt_discipline WHERE ins_discipline_verwijder IS NULL AND UPPER(ins_discipline_omschrijving) = UPPER(rec.cnt_soort); EXCEPTION WHEN NO_DATA_FOUND THEN -- Contractsoort bestaat gewoon niet; toevoegen. v_errormsg := 'Fout bij toevoegen contractsoort:' || rec.cnt_soort; INSERT INTO ins_tab_discipline ( ins_discipline_module , ins_discipline_omschrijving ) VALUES ( 'CNT' , rec.cnt_soort ) RETURNING ins_discipline_key INTO v_cnt_discipline_key; -- Type Leverancier, geen kostensoort, geen factuurmarges. INSERT INTO cnt_disc_params ( cnt_ins_discipline_key , cnt_srtcontract_type ) VALUES ( v_cnt_discipline_key , c_contract_type ); fac.imp_writelog( p_import_key, 'I' , v_aanduiding || 'Contractsoort "' || rec.cnt_soort || '" aangemaakt' , 'Nieuwe contractsoort' ); END; ELSE v_cnt_discipline_key := rec.ins_discipline_key; END IF; -- Contactpersoon (als meegegeven): bepalen/toevoegen bij bedrijf. IF (rec.contact_naam IS NOT NULL AND rec.prs_contactpersoon_key IS NULL) THEN -- Misschien is de contractsoort tijdens import al toegevoegd? -- (dan was 'ie er voor de cursor nog niet.) BEGIN v_errormsg := 'Fout bij bepalen contactpersoon'; SELECT prs_contactpersoon_key INTO v_contactpersoon_key FROM prs_contactpersoon WHERE prs_contactpersoon_verwijder IS NULL AND prs_bedrijf_key = rec.prs_bedrijf_key AND UPPER(prs_contactpersoon_naam) = UPPER(rec.contact_naam); EXCEPTION WHEN NO_DATA_FOUND THEN -- Contactpersoon bestaat gewoon niet; toevoegen. v_errormsg := 'Fout bij toevoegen contactpersoon:' || rec.contact_naam; INSERT INTO prs_contactpersoon ( prs_contactpersoon_naam , prs_bedrijf_key ) VALUES ( rec.contact_naam , rec.prs_bedrijf_key ) RETURNING prs_contactpersoon_key INTO v_contactpersoon_key; fac.imp_writelog( p_import_key, 'I' , v_aanduiding || 'Contactpersoon "' || rec.contact_naam || '" aangemaakt' , 'Nieuwe contactpersoon' ); END; ELSE v_contactpersoon_key := rec.prs_contactpersoon_key; END IF; -- Opzegtermijn: bepalen/toevoegen. -- Als geen opzegtermijn ingevuld, dan is er geen opzegtermijn: 'Geen' = 0 weken. v_errormsg := 'Fout bij bepalen opzegtermijn'; bepaal_termijn(rec.datum_opzeg, rec.datum_eind, v_termijn_type, v_termijn_aantal, true); -- Bestaat de termijn al? BEGIN v_errormsg := 'Fout bij bepalen opzegtermijn'; SELECT cnt_termijn_key INTO v_termijn_key_opzeg FROM cnt_termijn WHERE cnt_termijn_type = v_termijn_type AND cnt_termijn_aantal = v_termijn_aantal; EXCEPTION WHEN NO_DATA_FOUND THEN v_errormsg := 'Fout bij toevoegen opzegtermijn'; INSERT INTO cnt_termijn ( cnt_termijn_omschrijving , cnt_termijn_type , cnt_termijn_aantal ) VALUES ( TO_CHAR(v_termijn_aantal) || CASE WHEN v_termijn_type = 'Y' THEN 'Jaar' WHEN v_termijn_type = 'M' THEN 'Maand(en)' WHEN v_termijn_type = 'D' THEN 'Dage(en)' END , v_termijn_type , v_termijn_aantal ) RETURNING cnt_termijn_key INTO v_termijn_key_opzeg; END; -- Rappeltermijn: bepalen/toevoegen. -- Als geen rappeltermijn ingevuld, dan is er geen rappeltermijn: 'Geen' = 0 weken. v_errormsg := 'Fout bij bepalen rappeltermijn'; -- Als geen opzegdatum, dan einddatum. bepaal_termijn(rec.datum_rappel, COALESCE(rec.datum_opzeg, rec.datum_eind), v_termijn_type, v_termijn_aantal, true); -- Bestaat de termijn al? BEGIN v_errormsg := 'Bepalen rappeltermijn'; SELECT cnt_termijn_key INTO v_termijn_key_rappel FROM cnt_termijn WHERE cnt_termijn_type = v_termijn_type AND cnt_termijn_aantal = v_termijn_aantal; EXCEPTION WHEN NO_DATA_FOUND THEN v_errormsg := 'Toevoegen rappeltermijn'; INSERT INTO cnt_termijn ( cnt_termijn_omschrijving , cnt_termijn_type , cnt_termijn_aantal ) VALUES ( TO_CHAR(v_termijn_aantal) || CASE WHEN v_termijn_type = 'Y' THEN 'Jaar' WHEN v_termijn_type = 'M' THEN 'Maand(en)' WHEN v_termijn_type = 'D' THEN 'Dage(en)' END , v_termijn_type , v_termijn_aantal ) RETURNING cnt_termijn_key INTO v_termijn_key_rappel; END; -- Controleren of er al een contract met hetzelfde nummer en versie; -- bestaat; toevoegen vs. bijwerken. v_errormsg := 'Fout bij bepalen contract'; SELECT COUNT(*) INTO v_count FROM cnt_v_aanwezigcontract WHERE TRIM(cnt_contract_nummer_intern) = rec.nummer_intern AND COALESCE(cnt_contract_versie, '0') = COALESCE(rec.versie, '0'); IF (v_count = 0) -- Contract bestaat nog niet --> toevoegen. THEN -- Als rec.nummer_intern is NULL, dan wordt door FACILITOR een -- nummer bepaald (= cnt_contract_key)! v_errormsg := 'Fout bij toevoegen contract.'; -- Status van nieuwe melding is afhankelijk van of het contract approval mechanisme actief is en -- het bedrag moet groter zijn als limiet 1 anders hoeft er überhaupt niet gefiatteerd te worden en kan het contract direct actief (0) worden. IF fac.getSetting('cnt_contract_approval') = 1 AND rec.bedrag > fac.getSetting('cnt_contract_limit1') THEN v_cnt_status := 2; ELSE v_cnt_status := 0; END IF; INSERT INTO cnt_contract ( cnt_contract_nummer , cnt_contract_omschrijving , cnt_contract_looptijd_tot , cnt_contract_kosten , cnt_contract_uurloon , cnt_prs_bedrijf_key , cnt_contract_nummer_intern , cnt_contract_korting , prs_contactpersoon_key , ins_discipline_key , cnt_contract_document , prs_perslid_key_eig , prs_perslid_key_beh , prs_afdeling_key_eig , cnt_contract_status , cnt_contract_looptijd_van , prs_kostenplaats_key , prs_kostensoort_key , cnt_contract_termijnkosten , cnt_contract_opmerking , cnt_contract_mantel_key , cnt_contract_opzegtermijn , cnt_contract_rappeltermijn , cnt_contract_versie , prs_dienst_key , cnt_contract_verlenging ) VALUES ( rec.nummer_extern , rec.beschrijving , rec.datum_eind , rec.bedrag , rec.uurtarief , rec.prs_bedrijf_key , rec.nummer_intern , rec.korting , v_contactpersoon_key , v_cnt_discipline_key , rec.omschrijving , v_perslid_key_eig , v_perslid_key_beh , rec.prs_afdeling_key , v_cnt_status , rec.datum_ingang , rec.prs_kostenplaats_key , rec.prs_kostensoort_key , rec.bedrag_termijn , rec.opmerking , rec.mantel_key , v_termijn_key_opzeg , v_termijn_key_rappel , rec.versie , rec.prs_dienst_key , rec.verlengen ) RETURNING cnt_contract_key INTO v_contract_key; v_srtnoti_code := 'CNTNEW'; v_count_cntnew := v_count_cntnew + 1; ELSE -- Contract bestaat al --> bijwerken. SELECT c.cnt_contract_key INTO v_contract_key FROM cnt_contract c WHERE TRIM(c.cnt_contract_nummer_intern) = rec.nummer_intern AND COALESCE(c.cnt_contract_versie, '0') = COALESCE(rec.versie, '0') AND c.cnt_contract_verwijder IS NULL AND c.cnt_contract_looptijd_tot = (SELECT MAX(d.cnt_contract_looptijd_tot) FROM cnt_contract d WHERE d.cnt_contract_nummer_intern = c.cnt_contract_nummer_intern AND COALESCE(d.cnt_contract_versie, '0') = COALESCE(c.cnt_contract_versie, '0') ); v_errormsg := 'Fout bij bijwerken contract.'; UPDATE cnt_contract SET cnt_contract_nummer = rec.nummer_extern , cnt_contract_omschrijving = rec.beschrijving , cnt_contract_looptijd_tot = rec.datum_eind , cnt_contract_kosten = rec.bedrag , cnt_contract_uurloon = rec.uurtarief , cnt_prs_bedrijf_key = rec.prs_bedrijf_key , cnt_contract_korting = rec.korting , prs_contactpersoon_key = v_contactpersoon_key , ins_discipline_key = v_cnt_discipline_key , cnt_contract_document = rec.omschrijving , prs_perslid_key_eig = v_perslid_key_eig , prs_perslid_key_beh = v_perslid_key_beh , prs_afdeling_key_eig = rec.prs_afdeling_key , cnt_contract_looptijd_van = rec.datum_ingang , prs_kostenplaats_key = rec.prs_kostenplaats_key , prs_kostensoort_key = rec.prs_kostensoort_key , cnt_contract_termijnkosten = rec.bedrag_termijn , cnt_contract_opmerking = rec.opmerking , cnt_contract_mantel_key = rec.mantel_key , cnt_contract_opzegtermijn = v_termijn_key_opzeg , cnt_contract_rappeltermijn = v_termijn_key_rappel , cnt_contract_versie = rec.versie , prs_dienst_key = rec.prs_dienst_key , cnt_contract_verlenging = rec.verlengen WHERE cnt_contract_key = v_contract_key; v_srtnoti_code := 'CNTUPD'; v_count_cntupd := v_count_cntupd + 1; END IF; -- Upsert gebouwscope: bij UPDATE eerst kijken of scope al bestaat. -- Zo niet, dan toevoegen (bij INSERT altijd toevoegen). -- NB. Op deze manier kan een contract meerdere keren voorkomen in -- het importbestand, met verschillende gebouwen. IF (v_scope_code IS NOT NULL) THEN -- Komt deze scope al voor? SELECT COUNT(*) INTO v_count FROM cnt_contract_plaats WHERE cnt_contract_key = v_contract_key AND cnt_alg_plaats_key = v_scope_key AND cnt_alg_plaats_code = v_scope_code; IF (v_count = 0) -- Scope komt nog niet voor, dus toevoegen. THEN v_errormsg := 'Fout bij toevoegen scope'; INSERT INTO cnt_contract_plaats ( cnt_contract_key , cnt_alg_plaats_key , cnt_alg_plaats_code ) VALUES ( v_contract_key , v_scope_key , v_scope_code ); END IF; END IF; -- NULL-waarden resulteren NIET in het wissen van kenmerkvelden -- (bijwerken kan wel, maar wissen dus niet)! upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde1); upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde2); upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde3); upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde4); upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde5); upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde6); upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde7); upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde8); upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde9); upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde10); upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde11); upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde12); upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde13); upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde14); upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde15); upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde16); upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde17); upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde18); upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde19); upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde20); upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde21); upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde22); upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde23); upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde24); upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde25); fac.trackaction(v_srtnoti_code, v_contract_key, NULL, NULL, NULL); COMMIT; 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 || ')'; COMMIT; END; END LOOP; fac.imp_writelog( p_import_key, 'S', 'CNT-contracten/#ingelezen: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog( p_import_key, 'S', 'CNT-contracten/#toegevoegd: ' || TO_CHAR (v_count_cntnew), ''); fac.imp_writelog( p_import_key, 'S', 'CNT-contracten/#bijgewerkt: ' || TO_CHAR (v_count_cntupd), ''); 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_errormsg , 'Importproces contracten afgebroken!' ); END fac_update_cnt; / -------------------------------- Standaard Export Procedures ----------------------------------- -- JGL: Overigens is bij een ORDER BY DBMS_RANDOM.VALUE niet gegarandeerd dat die voor -- elke regel een unieke waarde heeft! Vergelijk 'ORDER BY SYSDATE': dit zou ook niet sorteren. -- http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:3181424400346795479 CREATE OR REPLACE PROCEDURE fac_select_kto_kandidaten ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2 ) AS -- NIET via de koninklijke route fac.gettrackingdate vanwege enorme performance-killer! -- Alle reserveringscatalogi met hun percentage, drempel en het aantal afgemelde reserveringen van de afgelopen periode -- tot en met 'gisteren' (dus nog niet die van vandaag), of de afgelopen week als het de eerste keer is -- NOOT: Alleen ruimte-reserveringen vooralsnog! CURSOR c_cluster_r IS SELECT d.ins_discipline_key, d.ins_discipline_ktopercentage perc, COALESCE (d.ins_discipline_ktodrempel, 0) drempel, COUNT (res_rsv_ruimte_key) aantal FROM res_rsv_ruimte rrr, res_ruimte_opstelling ro, res_ruimte rr, ins_tab_discipline d WHERE rrr.res_rsv_ruimte_verwijder IS NULL AND rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key AND ro.res_ruimte_key = rr.res_ruimte_key AND rr.res_discipline_key = d.ins_discipline_key AND rrr.res_rsv_ruimte_tot > (SELECT GREATEST(COALESCE(MAX(res_rsv_ruimte_kto_verstuurd), SYSDATE-7), SYSDATE-7) FROM res_rsv_ruimte irrr, res_ruimte_opstelling iro, res_ruimte irr WHERE irrr.res_ruimte_opstel_key = iro.res_ruimte_opstel_key AND iro.res_ruimte_key = irr.res_ruimte_key AND irr.res_discipline_key = d.ins_discipline_key) AND rrr.res_rsv_ruimte_tot < SYSDATE AND res_rsv_ruimte_kto_verstuurd IS NULL AND ins_discipline_ktopercentage > 0 GROUP BY d.ins_discipline_key, d.ins_discipline_ktopercentage, d.ins_discipline_ktodrempel; CURSOR c_lijst_r ( p_ins_discipline_key NUMBER ) IS SELECT rrr.res_rsv_ruimte_key, SYSDATE ts FROM res_rsv_ruimte rrr, res_ruimte_opstelling ro, res_ruimte rr, res_discipline d, prs_perslid p WHERE rrr.res_rsv_ruimte_verwijder IS NULL AND rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key AND ro.res_ruimte_key = rr.res_ruimte_key AND rr.res_discipline_key = d.ins_discipline_key AND d.ins_discipline_key = p_ins_discipline_key -- Contactpersoon van reservering heeft mail-adres AND rrr.res_rsv_ruimte_contact_key = p.prs_perslid_key AND p.prs_perslid_email IS NOT NULL AND rrr.res_rsv_ruimte_tot > (SELECT GREATEST(COALESCE(MAX(res_rsv_ruimte_kto_verstuurd), SYSDATE-7), SYSDATE-7) FROM res_rsv_ruimte irrr, res_ruimte_opstelling iro, res_ruimte irr WHERE irrr.res_ruimte_opstel_key = iro.res_ruimte_opstel_key AND iro.res_ruimte_key = irr.res_ruimte_key AND irr.res_discipline_key = d.ins_discipline_key) AND rrr.res_rsv_ruimte_tot < SYSDATE AND res_rsv_ruimte_kto_verstuurd IS NULL ORDER BY DBMS_RANDOM.VALUE; -- NIET via de koninklijke route fac.gettrackingdate vanwege enorme performance-killer! -- Alle vakgroepen met hun percentage, drempel en het aantal afgemelde meldingen van de afgelopen periode CURSOR c_cluster_m IS SELECT d.ins_discipline_key, d.ins_discipline_ktopercentage perc, COALESCE (d.ins_discipline_ktodrempel, 0) drempel, COUNT (mld_melding_key) aantal FROM mld_melding m, mld_stdmelding std, mld_discipline d, fac_tracking t, fac_srtnotificatie sn WHERE m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key -- Afgemelde meldingen van afgelopen periode AND m.mld_melding_key = t.fac_tracking_refkey AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND sn.fac_srtnotificatie_code = 'MLDAFM' AND t.fac_tracking_datum > (SELECT GREATEST(COALESCE(MAX(mld_melding_kto_verstuurd), SYSDATE-7), SYSDATE-7) FROM mld_melding im, mld_stdmelding istd WHERE im.mld_stdmelding_key = istd.mld_stdmelding_key AND istd.mld_ins_discipline_key = d.ins_discipline_key) AND mld_melding_kto_verstuurd IS NULL AND ins_discipline_ktopercentage > 0 GROUP BY d.ins_discipline_key, d.ins_discipline_ktopercentage, d.ins_discipline_ktodrempel; CURSOR c_lijst_m ( p_ins_discipline_key NUMBER ) IS SELECT m.mld_melding_key, SYSDATE ts FROM mld_melding m, mld_stdmelding std, mld_discipline d, prs_perslid p, fac_tracking t, fac_srtnotificatie sn WHERE m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_discipline_key = p_ins_discipline_key -- Persoon van melding heeft mail-adres AND m.prs_perslid_key = p.prs_perslid_key AND p.prs_perslid_email IS NOT NULL AND m.mld_melding_kto = 1 -- Afgemelde meldingen van afgelopen periode AND m.mld_melding_key = t.fac_tracking_refkey AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND sn.fac_srtnotificatie_code = 'MLDAFM' AND t.fac_tracking_datum > (SELECT GREATEST(COALESCE(MAX(mld_melding_kto_verstuurd), SYSDATE-7), SYSDATE-7) FROM mld_melding im, mld_stdmelding istd WHERE im.mld_stdmelding_key = istd.mld_stdmelding_key AND istd.mld_ins_discipline_key = d.ins_discipline_key) AND mld_melding_kto_verstuurd IS NULL ORDER BY DBMS_RANDOM.VALUE; -- NIET via de koninklijke route fac.gettrackingdate vanwege enorme performance-killer! -- Alle bestelcatalogi met hun percentage, drempel en het aantal afgemelde bestellingen van de afgelopen periode CURSOR c_cluster_b IS SELECT d.ins_discipline_key, d.ins_discipline_ktopercentage perc, COALESCE (d.ins_discipline_ktodrempel, 0) drempel, COUNT (b.bes_bestelling_key) aantal FROM bes_bestelling b, bes_bestelling_item bi, bes_srtdeel sd, bes_srtgroep sg, bes_discipline d, fac_tracking t, fac_srtnotificatie sn WHERE b.bes_bestelling_key = bi.bes_bestelling_key AND bi.bes_srtdeel_key = sd.bes_srtdeel_key AND sd.bes_srtgroep_key = sg.bes_srtgroep_key AND sg.ins_discipline_key = d.ins_discipline_key -- Afgemelde bestellingen van afgelopen periode AND b.bes_bestelling_key = t.fac_tracking_refkey AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND sn.fac_srtnotificatie_code = 'BESOTV' AND t.fac_tracking_datum > (SELECT GREATEST(COALESCE(MAX(bes_bestelling_kto_verstuurd), SYSDATE-7), SYSDATE-7) FROM bes_bestelling ib, bes_bestelling_item ibi, bes_srtdeel isd, bes_srtgroep isg WHERE ib.bes_bestelling_key = ibi.bes_bestelling_key AND ibi.bes_srtdeel_key = isd.bes_srtdeel_key AND isd.bes_srtgroep_key = isg.bes_srtgroep_key AND isg.ins_discipline_key = d.ins_discipline_key) AND bes_bestelling_kto_verstuurd IS NULL AND ins_discipline_ktopercentage > 0 GROUP BY d.ins_discipline_key, d.ins_discipline_ktopercentage, d.ins_discipline_ktodrempel; CURSOR c_lijst_b ( p_ins_discipline_key NUMBER ) IS SELECT DISTINCT b.bes_bestelling_key, SYSDATE ts FROM bes_bestelling b, bes_bestelling_item bi, bes_srtdeel sd, bes_srtgroep sg, bes_discipline d, prs_perslid p, fac_tracking t, fac_srtnotificatie sn WHERE b.bes_bestelling_key = bi.bes_bestelling_key AND bi.bes_srtdeel_key = sd.bes_srtdeel_key AND sd.bes_srtgroep_key = sg.bes_srtgroep_key AND sg.ins_discipline_key = d.ins_discipline_key AND d.ins_discipline_key = p_ins_discipline_key -- Persoon van melding heeft mail-adres AND b.prs_perslid_key = p.prs_perslid_key AND p.prs_perslid_email IS NOT NULL -- Afgemelde bestellingen van afgelopen periode AND b.bes_bestelling_key = t.fac_tracking_refkey AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND sn.fac_srtnotificatie_code = 'BESOTV' AND t.fac_tracking_datum > (SELECT GREATEST(COALESCE(MAX(bes_bestelling_kto_verstuurd), SYSDATE-7), SYSDATE-7) FROM bes_bestelling ib, bes_bestelling_item ibi, bes_srtdeel isd, bes_srtgroep isg WHERE ib.bes_bestelling_key = ibi.bes_bestelling_key AND ibi.bes_srtdeel_key = isd.bes_srtdeel_key AND isd.bes_srtgroep_key = isg.bes_srtgroep_key AND isg.ins_discipline_key = d.ins_discipline_key) AND bes_bestelling_kto_verstuurd IS NULL ORDER BY DBMS_RANDOM.VALUE; v_aantal_kto NUMBER; v_count_upd NUMBER; v_count NUMBER; v_errorhint VARCHAR2(200); v_omschrijving VARCHAR2(4000); v_errormsg VARCHAR (200); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN -- KTO's op meldingen v_errorhint := 'Doorloop de vakgroepen'; FOR rec1 IN c_cluster_m LOOP BEGIN IF (rec1.perc <> 0 OR rec1.drempel <> 0) AND rec1.aantal > 0 THEN -- Vakgroep heeft afgemelde meldingen in de voorgaande periode, -- en het is een vakgroep waarop KTO van toepassing is (volgens ingesteld percentage en/of een drempel) v_aantal_kto := TRUNC ( (rec1.perc * rec1.aantal) / 100); IF v_aantal_kto < rec1.drempel THEN v_aantal_kto := rec1.drempel; END IF; v_count_upd := 1; FOR rec2 IN c_lijst_m (rec1.ins_discipline_key) LOOP BEGIN IF v_count_upd <= v_aantal_kto THEN v_errorhint := 'Toevoegen meldingen kto-notificatie'; UPDATE mld_melding SET mld_melding_kto_verstuurd = rec2.ts WHERE mld_melding_key = rec2.mld_melding_key; fac.trackaction('MLDKTO', rec2.mld_melding_key, NULL, rec2.ts, NULL); END IF; v_count_upd := v_count_upd + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'Exception ' || oracle_err_mes; fac.writelog ( p_applname, 'W', v_errormsg, 'Aanmaken Melding KTO: ' || rec2.mld_melding_key ); COMMIT; END; END LOOP; END IF; END; END LOOP; -- KTO's op reserveringen v_errorhint := 'Doorloop de reserveerbare ruimtecatalogi'; FOR rec1 IN c_cluster_r LOOP BEGIN IF (rec1.perc <> 0 OR rec1.drempel <> 0) AND rec1.aantal > 0 THEN -- Ruimtecatalogus heeft reserveringen die in de voorgaande periode zijn beeindigd -- en het is een catalogus waarop KTO van toepassing is (volgens ingesteld percentage en/of een drempel) v_aantal_kto := TRUNC ( (rec1.perc * rec1.aantal) / 100); IF v_aantal_kto < rec1.drempel THEN v_aantal_kto := rec1.drempel; END IF; v_count_upd := 1; FOR rec2 IN c_lijst_r (rec1.ins_discipline_key) LOOP BEGIN IF v_count_upd <= v_aantal_kto THEN v_errorhint := 'Toevoegen reserveringen kto-notificatie'; UPDATE res_rsv_ruimte SET res_rsv_ruimte_kto_verstuurd = rec2.ts WHERE res_rsv_ruimte_key = rec2.res_rsv_ruimte_key; fac.trackaction('RESKTO', rec2.res_rsv_ruimte_key, NULL, rec2.ts, NULL); END IF; v_count_upd := v_count_upd + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'Exception ' || oracle_err_mes; fac.writelog ( p_applname, 'W', v_errormsg, 'Aanmaken Reservering KTO: ' || rec2.res_rsv_ruimte_key ); COMMIT; END; END LOOP; END IF; END; END LOOP; -- KTO's op bestellingen v_errorhint := 'Doorloop de bestelcatalogi'; FOR rec1 IN c_cluster_b LOOP BEGIN IF (rec1.perc <> 0 OR rec1.drempel <> 0) AND rec1.aantal > 0 THEN -- Bestelcatalogus heeft geleverde bestellingen in de voorgaande periode, -- en het is een catalogus waarop KTO van toepassing is (volgens ingesteld percentage en/of een drempel) v_aantal_kto := TRUNC ( (rec1.perc * rec1.aantal) / 100); IF v_aantal_kto < rec1.drempel THEN v_aantal_kto := rec1.drempel; END IF; v_count_upd := 1; FOR rec2 IN c_lijst_b (rec1.ins_discipline_key) LOOP BEGIN IF v_count_upd <= v_aantal_kto THEN v_errorhint := 'Toevoegen bestellingen kto-notificatie'; UPDATE bes_bestelling SET bes_bestelling_kto_verstuurd = rec2.ts WHERE bes_bestelling_key = rec2.bes_bestelling_key; fac.trackaction('BESKTO', rec2.bes_bestelling_key, NULL, rec2.ts, NULL); END IF; v_count_upd := v_count_upd + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'Exception ' || oracle_err_mes; fac.writelog ( p_applname, 'W', v_errormsg, 'Aanmaken Bestelling KTO: ' || rec2.bes_bestelling_key ); COMMIT; END; END LOOP; END IF; END; END LOOP; END; / -- Procedure om aan te geven voor welke meldingen een kto verzonden moet worden. CREATE OR REPLACE PROCEDURE fac_export_kto_kandidaten ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2 ) AS v_errormsg VARCHAR (200); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN v_errormsg := 'Geen akties'; END; / -- MS-Exchange sync-import: onthoudt de laatste syncstate van een reserveerbare ruimte -- met betekenis: tot die markering ben ik bij. -- versie met een CLOB voor de syncstate, omdat die in de praktijk langer -- dan 4000 karakters blijkt te kunnen zijn. De XSL-stylesheet knipt de syncstate uit -- de XML op in stukken van max 4000 karakters -- deze import plakt die weer aan elkaar. CREATE OR REPLACE PROCEDURE fac_import_exchsync (p_import_key IN NUMBER) AS v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line v_fielddelimitor VARCHAR2 (2); v_errormsg VARCHAR2 (200); oracle_err_mes VARCHAR2 (200); header_is_valid NUMBER; -- v_res_ruimte_key res_ruimte.res_ruimte_key%TYPE; v_syncstate VARCHAR2(4000); v_len NUMBER; v_sync NUMBER; CURSOR c1 IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; rec1 c1%ROWTYPE; BEGIN v_fielddelimitor := fac.import_delimiter(p_import_key); header_is_valid := 0; v_len := 0; -- De res_ruimte_key waar we het over hebben zit in de refkey van de import SELECT fac_import_refkey INTO v_res_ruimte_key FROM fac_import WHERE fac_import_key = p_import_key; SELECT r.res_ruimte_key - COALESCE(s.res_ruimte_key, 0) INTO v_sync FROM res_ruimte r , res_ruimte_sync s WHERE r.res_ruimte_key = s.res_ruimte_key(+) AND r.res_ruimte_extern_id IS NOT NULL AND r.res_ruimte_key = v_res_ruimte_key; -- -- v_sync: no_data_found --> niet gevonden, niets doen. -- 0 --> bestaat in res_ruimte en res_ruimte_sync. -- >0 --> bestaat alleen in res_ruimte. IF (v_sync = 0) THEN -- Syncstate leegmaken, zodat we 'n append kunnen doen. UPDATE res_ruimte_sync SET res_ruimte_syncstate = NULL WHERE res_ruimte_key = v_res_ruimte_key; ELSE -- Voeg een res_ruimte_sync record toe. INSERT INTO res_ruimte_sync (res_ruimte_key) VALUES (v_res_ruimte_key); END IF; FOR rec1 IN c1 LOOP BEGIN v_newline := rec1.fac_imp_file_line; fac.imp_getfield (v_newline, v_fielddelimitor, v_syncstate); IF header_is_valid = 0 THEN IF UPPER (TRIM (v_syncstate)) LIKE '%SYNCSTATE%' THEN header_is_valid := 1; DBMS_OUTPUT.put_line ('goeie header'); END IF; ELSE v_errormsg := 'Fout bij update van syncstate'; DBMS_OUTPUT.put_line ('echte data'); -- Stylesheet knipt syncstates langer dan 4000 karakters op in meerdere delen -- Hier weer aan elkaar plakken. UPDATE res_ruimte_sync SET res_ruimte_syncstate = res_ruimte_syncstate || TRIM(v_syncstate), res_ruimte_syncdate = SYSDATE WHERE res_ruimte_key = v_res_ruimte_key; END IF; END; END LOOP; -- Lange syncstate? (>4000) Dat even loggen. v_errormsg := 'Fout bij bepalen lengte syncstate'; SELECT LENGTH(res_ruimte_syncstate) INTO v_len FROM res_ruimte_sync WHERE res_ruimte_key = v_res_ruimte_key; IF (v_len > 4000) THEN fac.imp_writelog (p_import_key, 'I', 'Lange syncstate, ' || v_len || ' karakters', 'res_ruimte_key: ' || v_res_ruimte_key); END IF; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN OTHERS THEN oracle_err_mes := SUBSTR (SQLERRM, 1, 1000); v_errormsg := oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, 'res_ruimte_key: ' || v_res_ruimte_key); END; / CREATE OR REPLACE PROCEDURE fac_update_exchsync (p_import_key IN NUMBER) AS BEGIN NULL; END; / CREATE OR REPLACE PROCEDURE fac_import_translation (p_import_key IN NUMBER) AS 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_imp NUMBER (10); v_ongeldig NUMBER (1); v_aanduiding VARCHAR2 (4000); -- De importvelden v_label VARCHAR2 (100); v_module VARCHAR2 (100); v_lang VARCHAR2 (100); v_tekst VARCHAR2 (4000); CURSOR c1 IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; BEGIN DELETE FROM fac_imp_translation; COMMIT; v_count_tot := 0; v_count_imp := 0; header_is_valid := 0; FOR rec1 IN c1 LOOP BEGIN v_errormsg := 'Error fetching record'; v_newline := rec1.fac_imp_file_line; v_aanduiding := ''; v_ongeldig := 0; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_delim, v_label); fac.imp_getfield (v_newline, c_delim, v_module); fac.imp_getfield (v_newline, c_delim, v_lang); fac.imp_getfield (v_newline, c_delim, v_tekst); v_aanduiding := '[' || v_label || '|' || v_lang || '|' || v_tekst || '] '; -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen -- de juiste kolomkop. -- Ik negeer alles totdat ik een geldige header ben gepasseerd. IF (header_is_valid = 0) THEN IF ( UPPER (v_label) = 'LABEL' AND UPPER (v_module) = 'MODULE' AND UPPER (SUBSTR(v_lang,1,8)) = 'LANGUAGE' -- er mag best nog wat achter staan AND UPPER (SUBSTR(v_tekst,1,11)) = 'TRANSLATION') -- er mag best nog wat achter staan THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden v_errormsg := 'Label invalid'; v_label := SUBSTR (TRIM (v_label), 1, 60); v_errormsg := 'Module invalid'; v_module := UPPER (SUBSTR (TRIM (v_module), 1, 3)); --Opportunity: sanitize the module, currently valid are -- ASP, BES, BEZ, CNT,FAC, FIN, INS, MLD, MSG, PRJ, PRS, RES v_errormsg := 'Language invalid'; v_lang := SUBSTR (TRIM (v_lang), 1, 3); IF (v_lang IS NULL) THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Record ignored'); v_ongeldig := 1; END IF; -- v_errormsg := 'Translation invalid'; -- Assume that spaces are relevant so do not trim here v_tekst := SUBSTR (v_tekst, 1, 2000); -- -- Insert geformatteerde import record IF (v_ongeldig = 0) THEN BEGIN v_errormsg := 'Error inserting record'; INSERT INTO fac_imp_translation (locale_label, locale_module, locale_lang, locale_tekst) VALUES (v_label, v_module, v_lang, v_tekst); COMMIT; v_count_imp := v_count_imp + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || 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', 'Invalid FACILITOR translation file', 'No valid header [LABEL|MODULE|LANGUAGE|TRANSLATION] found!'); ELSE fac.imp_writelog (p_import_key, 'S', 'Translation/#valid lines: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog (p_import_key, 'S', 'Translation/#invalid lines: ' || TO_CHAR (v_count_tot - v_count_imp), ''); END IF; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Import of translation aborted!'); END; / CREATE OR REPLACE PROCEDURE fac_update_translation (p_import_key IN NUMBER) AS CURSOR c1 IS SELECT * FROM fac_imp_translation; v_errormsg VARCHAR2 (1000) := '-'; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_aanduiding VARCHAR2 (4000); v_geldig NUMBER (1); v_count_new NUMBER; v_count_upd NUMBER; v_count_tot NUMBER; v_count_skipped NUMBER; v_existingkey fac_locale_xsl.fac_locale_xsl_key%TYPE; BEGIN v_count_tot := 0; v_count_new := 0; v_count_upd := 0; v_count_skipped := 0; v_aanduiding := ''; FOR rec IN c1 LOOP BEGIN v_geldig := 1; v_aanduiding := '[' || rec.locale_label || '|' || rec.locale_module || '|' || rec.locale_lang || '|' || rec.locale_tekst || '] '; v_existingkey := 0; -- Valid label? Prevent injection of non-standard labels BEGIN SELECT 1 INTO v_geldig FROM fac_locale_xsl WHERE fac_locale_xsl_module = rec.locale_module AND fac_locale_xsl_label = rec.locale_label; EXCEPTION WHEN NO_DATA_FOUND THEN v_geldig := 0; v_count_skipped := v_count_skipped + 1; WHEN TOO_MANY_ROWS THEN v_geldig := 1; -- ongewijzigd END; IF v_geldig = 1 THEN v_count_tot := v_count_tot + 1; --existing translation ? SELECT MAX (fac_locale_xsl_key) INTO v_existingkey FROM fac_locale_xsl WHERE fac_locale_xsl_module = rec.locale_module AND fac_locale_xsl_label = rec.locale_label AND fac_locale_xsl_lang = rec.locale_lang; IF v_existingkey IS NULL THEN INSERT INTO fac_locale_xsl (fac_locale_xsl_module, fac_locale_xsl_label, fac_locale_xsl_lang, fac_locale_xsl_tekst) VALUES (rec.locale_module, rec.locale_label, rec.locale_lang, rec.locale_tekst); v_count_new := v_count_new + 1; ELSE UPDATE fac_locale_xsl SET fac_locale_xsl_tekst = rec.locale_tekst, fac_locale_xsl_isvalid = 1 WHERE fac_locale_xsl_key = v_existingkey; v_count_upd := v_count_upd + 1; END IF; END IF; END; END LOOP; -- Fallback maar weer bijwerken. lcl.fallback_languages; fac.imp_writelog (p_import_key, 'S', '#imported: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog (p_import_key, 'S', '#added: ' || TO_CHAR (v_count_new), ''); fac.imp_writelog (p_import_key, 'S', '#updated: ' || TO_CHAR (v_count_upd), ''); fac.imp_writelog (p_import_key, 'S', '#ignored: ' || TO_CHAR (v_count_skipped), ''); COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Import of translation aborted!'); END; / CREATE OR REPLACE PROCEDURE fac_update_vrijedagen(p_import_key IN NUMBER) IS CURSOR c1 IS SELECT fac_imp_csv_col01 datum , fac_imp_csv_col02 calendarid FROM fac_imp_csv WHERE fac_import_key = p_import_key; v_errormsg VARCHAR2 (1000) := '-'; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count_new NUMBER := 0; v_datum DATE; v_calendar_id VARCHAR2 (50); BEGIN FOR vrije_dag in c1 LOOP BEGIN v_datum := TO_DATE(vrije_dag.datum, 'dd-mm-yyyy'); INSERT INTO mld_vrije_dagen ( mld_vrije_dagen_datum , mld_vrije_dagen_id ) VALUES (v_datum, COALESCE(vrije_dag.calendarid, 'Default')); v_count_new := v_count_new + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := vrije_dag.calendarid ||' - '|| vrije_dag.datum || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, ''); END; END LOOP; fac.imp_writelog (p_import_key, 'S', '#added: ' || TO_CHAR(v_count_new), ''); COMMIT; END fac_update_vrijedagen; / CREATE OR REPLACE PROCEDURE fac_import_taak_mjob(p_import_key IN NUMBER) IS CURSOR c1 IS SELECT fac_imp_csv_index , fac_imp_csv_col01 objectidentificatie , fac_imp_csv_col02 objectaanteh , fac_imp_csv_col03 objectaantal , fac_imp_csv_col04 taakcategorie , fac_imp_csv_col05 taakomschrijving , fac_imp_csv_col06 taakopmerking , fac_imp_csv_col07 taakgroep , fac_imp_csv_col08 taakprioriteit , fac_imp_csv_col09 taakbtw , fac_imp_csv_col10 taakkostenplaatsnr , fac_imp_csv_col11 taakkostenplaatsomschrijving , fac_imp_csv_col12 taakobjectpercentage , fac_imp_csv_col13 taakobjectopmerking , fac_imp_csv_col14 taakobjecteenheid , fac_imp_csv_col15 taakobjectperiode , fac_imp_csv_col16 taakobjectstartjaar , fac_imp_csv_col17 taakobjecteindjaar , fac_imp_csv_col18 taakobjectmateriaal , fac_imp_csv_col19 taakdienst FROM fac_imp_csv WHERE fac_imp_csv_index > 1 AND fac_import_key = p_import_key; v_errormsg VARCHAR2(1000) := '-'; oracle_err_num NUMBER; oracle_err_mes VARCHAR2(200); v_header_is_valid NUMBER(1) := 0; v_ongeldig NUMBER(1) := 0; v_count_rec NUMBER := 0; v_count_verwerk NUMBER; v_count_n_taak NUMBER; v_count_n_taakobject NUMBER; v_count_w_taak NUMBER; v_deel_key ins_deel.ins_deel_key%TYPE; --NUMBER(10); v_ins_srtdeel_key ins_srtdeel.ins_srtdeel_key%TYPE; --NUMBER(10); v_ins_srtdeel_code ins_srtdeel.ins_srtdeel_code%TYPE; --VARCHAR2(10) v_discipline_key ins_tab_discipline.ins_discipline_key%TYPE; --NUMBER(10) v_ismjob ctr_disc_params.ctr_disc_params_ismjob%TYPE; --NUMBER(1) v_taakomschrijving ins_srtcontrole.ins_srtcontrole_omschrijving%TYPE; --VARCHAR2(60) v_srtcontrole_key ins_srtcontrole.ins_srtcontrole_key%TYPE; --NUMBER(10) v_taakopmerking ins_srtcontrole.ins_srtcontrole_opmerking%TYPE; --VARCHAR2(320) v_taakgroep ins_srtcontrole.ins_srtcontrole_groep%TYPE; --VARCHAR2(60) v_taakprioriteit ins_srtcontrole.ins_srtcontrole_level%TYPE; --NUMBER(3) v_taakbtw_str VARCHAR2(10); v_btwtabelwaarde_key fin_btwtabelwaarde.fin_btwtabelwaarde_key%TYPE; --NUMBER(10) v_kostenplaats_key prs_kostenplaats.prs_kostenplaats_key%TYPE; --NUMBER(10) v_taakobjectaantal ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_aantal%TYPE; --NUMBER(8,2) v_taakobjectaanteh ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_aanteh%TYPE; --VARCHAR2(30) v_taakobjectpercentage ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_perc%TYPE; --NUMBER(3) v_taakobjectopmerking ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_opmerk%TYPE; --VARCHAR2(320) v_taakobjecteenheid ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_eenheid%TYPE; --NUMBER(3) v_taakobjectperiode ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_periode%TYPE; --NUMBER(6,2) v_taakobjectstartjaar_str VARCHAR2(10); v_taakobjecteindjaar_str VARCHAR2(10); v_taakobjectstartjaar_d ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_startdat%TYPE; --DATE v_taakobjecteindjaar_d ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_eind%TYPE; --DATE v_taakobjectmateriaal ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_materia%TYPE; --NUMBER(9,2) v_taakdienst prs_dienst.prs_dienst_omschrijving%TYPE; --VARCHAR2(60) v_ins_srtcontroledl_xcp_key ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_key%TYPE; --NUMBER(10); v_taakobject_startjaar_d ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_startdat%TYPE; --DATE; v_taak_geschiedenis NUMBER; v_header VARCHAR2(500) := 'OBJECTIDENTIFICATIE;OBJECTAANTEH;OBJECTAANTAL;TAAKCATEGORIE;TAAKOMSCHRIJVING;TAAKOPMERKING;TAAKGROEP;' || 'TAAKPRIORITEIT;TAAKBTW;TAAKKOSTENPLAATSNR;TAAKKOSTENPLAATSOMSCHRIJVING;TAAKOBJECTPERCENTAGE;' || 'TAAKOBJECTOPMERKING;TAAKOBJECTEENHEID;TAAKOBJECTPERIODE;TAAKOBJECTSTARTJAAR;TAAKOBJECTEINDJAAR;' || 'TAAKOBJECTKOSTEN;DIENST'; v_header_csv VARCHAR2(500); BEGIN v_errormsg := 'Fout inlezen header '; SELECT REPLACE(UPPER(fac_imp_csv_col01 ||';'|| fac_imp_csv_col02 ||';'|| fac_imp_csv_col03 ||';'|| fac_imp_csv_col04 ||';'|| fac_imp_csv_col05 ||';'|| fac_imp_csv_col06 ||';'|| fac_imp_csv_col07 ||';'|| fac_imp_csv_col08 ||';'|| fac_imp_csv_col09 ||';'|| fac_imp_csv_col10 ||';'|| fac_imp_csv_col11 ||';'|| fac_imp_csv_col12 ||';'|| fac_imp_csv_col13 ||';'|| fac_imp_csv_col14 ||';'|| fac_imp_csv_col15 ||';'|| fac_imp_csv_col16 ||';'|| fac_imp_csv_col17 ||';'|| fac_imp_csv_col18 ||';'|| fac_imp_csv_col19 ), ' ', '') INTO v_header_csv FROM fac_imp_csv WHERE fac_imp_csv_index = 1 AND fac_import_key = p_import_key; -- Eerst opruimen DELETE FROM fac_imp_taak_mjob; IF (v_header LIKE v_header_csv || '%') THEN v_header_is_valid := 1; FOR rec IN c1 LOOP BEGIN v_count_rec := v_count_rec + 1; -- CSV-kolom A: Controleer of het object bestaat -- Controleer of object er meerdere keren in staat (valt terug naar OTHERS, regel 300) BEGIN v_errormsg := 'Fout bij opzoeken object: ' || rec.objectidentificatie ||' komt vaker dan 1 keer voor'; SELECT d.ins_deel_key , d.ins_srtdeel_key , s.ins_srtdeel_code INTO v_deel_key , v_ins_srtdeel_key , v_ins_srtdeel_code FROM ins_deel d , ins_srtdeel s WHERE d.ins_srtdeel_key = s.ins_srtdeel_key AND UPPER(d.ins_deel_omschrijving) = UPPER(rec.objectidentificatie) AND d.ins_deel_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog( p_import_key, 'E', 'Object bestaat niet - Regel wordt niet verwerkt ' , rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie); v_ongeldig := 1; END; -- CSV-kolom B: Controleer de taakobject eenheid op lengte v_taakobjectaanteh := SUBSTR(TRIM(rec.objectaanteh), 1, 30); IF LENGTH(TRIM(rec.objectaanteh)) > 30 THEN fac.imp_writelog( p_import_key, 'W', 'taak aantal eenheid - Aangepast ivm lengte groter dan 30 ' , rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - ' || rec.objectaanteh || ' wordt: ' ||v_taakobjectaanteh); END IF; -- CSV-kolom C: Controleer de taakobject aantal v_errormsg := 'Fout controleren objectaantal '; v_taakobjectaantal := fac.safe_to_number(REPLACE(rec.objectaantal, ',', '.')); IF rec.objectaantal IS NOT NULL AND v_taakobjectaantal IS NULL THEN fac.imp_writelog( p_import_key, 'E', 'Object aantal niet goed ingevuld - Regel wordt niet verwerkt.. ' , rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || 'ObjectAantal csv: ' || rec.objectaantal); v_ongeldig := 1; END IF; -- CSV-kolom D: Controleer de taakcategorie BEGIN v_errormsg := 'Fout bij controleren taakcategorie ' ; SELECT d.ins_discipline_key , dp.ctr_disc_params_ismjob INTO v_discipline_key , v_ismjob FROM ins_tab_discipline d , ctr_disc_params dp WHERE dp.ctr_ins_discipline_key = d.ins_discipline_key AND UPPER(d.ins_discipline_omschrijving) = TRIM(UPPER(rec.taakcategorie)); EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog( p_import_key, 'E', 'Inspectie discipline niet gevonden - Regel wordt niet verwerkt ' , rec.fac_imp_csv_index || ' - ' || rec.taakcategorie); v_ongeldig := 1; END; -- CSV-kolom E: Controleer of taak bestaat v_errormsg := 'Fout controleren nieuwe of bestaande taak ' || rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - ' || rec.taakomschrijving; v_taakomschrijving := SUBSTR(v_ins_srtdeel_code || ' - ' || TRIM(rec.taakomschrijving), 1, 60); IF (LENGTH(v_ins_srtdeel_code) + 3 + LENGTH(TRIM(rec.taakomschrijving))) > 60 THEN fac.imp_writelog( p_import_key, 'W', 'Nieuwe taak - Aangepast ivm lengte groter dan 60 ' , rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - ' || rec.taakomschrijving || ' wordt: ' || v_taakomschrijving); END IF; SELECT MAX(ins_srtcontrole_key) INTO v_srtcontrole_key FROM ins_srtcontrole WHERE LOWER(ins_srtcontrole_omschrijving) = LOWER(v_taakomschrijving); -- v_srtcontrole_key = null als de taak nog niet bestaat. -- CSV-kolom F: Controleer taak opmerking v_errormsg := 'Fout controleren taak opmerking '; v_taakopmerking := SUBSTR(TRIM(rec.taakopmerking), 1, 60); IF LENGTH(TRIM(rec.taakopmerking)) > 320 THEN fac.imp_writelog( p_import_key, 'W', 'taak opmerking - Aangepast ivm lengte groter dan 320 ' , rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - ' || rec.taakopmerking || ' wordt: ' || v_taakopmerking); END IF; -- CSV-kolom G: Controleer taakgroep v_errormsg := 'Fout controleren taakgroep '; v_taakgroep := SUBSTR(TRIM(rec.taakgroep), 1, 60); IF LENGTH(TRIM(rec.taakgroep)) > 60 THEN fac.imp_writelog( p_import_key, 'W', 'taakgroep - Aangepast ivm lengte groter dan 60 ' , rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - ' || rec.taakgroep || ' wordt: ' || v_taakgroep); END IF; -- CSV-kolom H: Controleer de taakprioriteit - Leeg of numeriek v_errormsg := 'Fout controleren taakprioriteit '; IF rec.taakprioriteit IS NOT NULL AND fac.safe_to_number(rec.taakprioriteit) IS NULL THEN fac.imp_writelog( p_import_key, 'E', 'Prioriteit taak niet goed ingevuld - Regel wordt niet verwerkt.. ' , rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || 'Kosten csv: ' || rec.taakprioriteit); v_ongeldig := 1; ELSE v_taakprioriteit := rec.taakprioriteit; END IF; -- CSV-kolom I: Controleer btwtarief v_errormsg := 'Fout controleren btw-tarief '; v_taakbtw_str := LOWER(TRIM(rec.taakbtw)); IF v_taakbtw_str IS NOT NULL AND v_taakbtw_str NOT IN ('hoog','laag','nul') THEN fac.imp_writelog( p_import_key, 'E', 'BTW-tarief taak niet goed ingevuld - Regel wordt niet verwerkt.. ' , rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || 'Kosten csv: ' || rec.taakbtw); v_ongeldig := 1; ELSE IF v_taakbtw_str IS NOT NULL THEN BEGIN SELECT w.fin_btwtabelwaarde_key INTO v_btwtabelwaarde_key FROM fin_btwtabel t , fin_btwtabelwaarde w WHERE t.fin_btwtabel_key = w.fin_btwtabel_key AND t.fin_btwtabel_default = 1 AND t.fin_btwtabel_verwijder is null AND w.fin_btwtabelwaarde_verwijder is null AND LOWER(w.fin_btwtabelwaarde_oms) = v_taakbtw_str; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog( p_import_key, 'E', 'BTW-tarief taak niet gevonden - Regel wordt niet verwerkt.. ' , rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || 'Kosten csv: ' || rec.taakbtw); v_ongeldig := 1; END; ELSE -- geen btw-tarief ingevuld: ok v_btwtabelwaarde_key := NULL; END IF; END IF; -- CSV-kolom J, K: Controleer kostenplaats v_errormsg := 'Fout controleren kostenplaats'; IF TRIM(rec.taakkostenplaatsnr) IS NOT NULL OR TRIM(rec.taakkostenplaatsomschrijving) IS NOT NULL THEN BEGIN SELECT MAX(prs_kostenplaats_key) INTO v_kostenplaats_key FROM prs_kostenplaats WHERE prs_kostenplaats_verwijder IS NULL AND UPPER(prs_kostenplaats_nr) = UPPER(TRIM(rec.taakkostenplaatsnr)) AND UPPER(prs_kostenplaats_omschrijving) = UPPER(TRIM(rec.taakkostenplaatsomschrijving)); EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog( p_import_key, 'E', 'Kostenplaats bestaat niet - Regel wordt niet verwerkt ' , rec.fac_imp_csv_index || ' - ' || rec.taakkostenplaatsnr || '- ' || rec.taakkostenplaatsomschrijving); v_ongeldig := 1; END; END IF; -- CSV-kolom L: Controleer Percentage v_errormsg := 'Fout controleren percentage '; v_taakobjectpercentage := ROUND(fac.safe_to_number(REPLACE(rec.taakobjectpercentage, ',','.'))); IF ((rec.taakobjectpercentage IS NOT NULL AND v_taakobjectpercentage IS NULL) OR (v_taakobjectpercentage IS NOT NULL AND v_taakobjectpercentage NOT BETWEEN 0 AND 100)) THEN fac.imp_writelog( p_import_key, 'E', 'Percentage taak niet goed ingevuld - Regel wordt niet verwerkt.. ' , rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || 'Kosten csv: ' || rec.taakobjectpercentage); v_ongeldig := 1; ELSE IF v_taakobjectpercentage IS NULL THEN v_taakobjectpercentage := 100; -- Default 100 procent. END IF; END IF; -- CSV-kolom M: Controleer lengte opmerking v_errormsg := 'Fout controleren opmerking '; v_taakobjectopmerking := SUBSTR(TRIM(rec.taakobjectopmerking), 1, 320); IF LENGTH(TRIM(rec.taakobjectopmerking)) > 320 THEN fac.imp_writelog( p_import_key, 'W', 'taakobject opmerking - Aangepast ivm lengte groter dan 320 ' , rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - ' || rec.taakobjectopmerking || ' wordt: ' || v_taakobjectopmerking); END IF; -- CSV-kolom N: Controleer de eenheid v_errormsg := 'Fout controleren taakeenheid '; IF ((rec.taakobjecteenheid IS NOT NULL AND rec.taakobjecteenheid NOT IN ('1', '2', '3', '4')) OR (rec.taakobjecteenheid IS NULL)) THEN fac.imp_writelog( p_import_key, 'E', 'Eenheid is niet correct gevuld (1,2,3,4) - Regel wordt niet verwerkt ' , rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - ' || rec.taakobjecteenheid); v_ongeldig := 1; ELSE v_taakobjecteenheid := fac.safe_to_number(rec.taakobjecteenheid); IF v_ismjob = 1 THEN v_taakobjecteenheid := 4; END IF; END IF; -- CSV-kolom O: Controleer de periode v_errormsg := 'Fout controleren taakperiode '; IF ((rec.taakobjectperiode IS NOT NULL AND fac.safe_to_number(rec.taakobjectperiode) IS NULL) OR (rec.taakobjectperiode IS NULL)) THEN fac.imp_writelog( p_import_key, 'E', 'Ongeldige taakobjectperiode - Regel wordt niet verwerkt ' , rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - ' || rec.taakobjectperiode); v_ongeldig := 1; ELSE v_taakobjectperiode := fac.safe_to_number(rec.taakobjectperiode); END IF; -- CSV-kolom P: Controleer de startdatum; deze is verplicht v_errormsg := 'Fout bij controle startdatum '; v_taakobjectstartjaar_str := TRIM(rec.taakobjectstartjaar); IF LENGTH (v_taakobjectstartjaar_str) = 4 THEN -- In geval jaar-invoer op datum zetten.. v_taakobjectstartjaar_str := '01-01-' || v_taakobjectstartjaar_str; END IF; v_taakobjectstartjaar_d := fac.safe_to_date(v_taakobjectstartjaar_str, 'dd-mm-yyyy'); IF v_taakobjectstartjaar_d IS NULL THEN fac.imp_writelog( p_import_key, 'E', 'Startdatum leeg of ongeldige invoer - Regel wordt niet verwerkt.. ' , rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - Datum csv: ' || rec.taakobjectstartjaar); v_ongeldig := 1; END IF; -- CSV-kolom Q: Controleer de einddatum v_errormsg := 'Fout bij controle einddatum '; v_taakobjecteindjaar_str := TRIM(rec.taakobjecteindjaar); IF LENGTH (v_taakobjecteindjaar_str) = 4 THEN -- In geval jaar-invoer op datum zetten.. v_taakobjecteindjaar_str := '31-12-' || v_taakobjecteindjaar_str; END IF; v_taakobjecteindjaar_d := fac.safe_to_date(v_taakobjecteindjaar_str, 'dd-mm-yyyy'); IF v_taakobjecteindjaar_str IS NOT NULL AND v_taakobjecteindjaar_d IS NULL THEN fac.imp_writelog( p_import_key, 'E', 'Einddatum ongeldige invoer - Regel wordt niet verwerkt.. ' , rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - Datum csv: ' || rec.taakobjecteindjaar); v_ongeldig := 1; END IF; -- CSV-kolom R: Controleer de materiaalkosten - leeg of numeriek v_errormsg := 'Fout controleren materiaalkosten '; v_taakobjectmateriaal := fac.safe_to_number(REPLACE(rec.taakobjectmateriaal, ',', '.')); IF rec.taakobjectmateriaal IS NOT NULL AND v_taakobjectmateriaal IS NULL THEN fac.imp_writelog( p_import_key, 'E', 'Kosten taakobject niet goed ingevuld - Regel wordt niet verwerkt.. ' , rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || 'Kosten csv: ' || rec.taakobjectmateriaal); v_ongeldig := 1; END IF; -- CSV-kolom S: Controleer dienst v_errormsg := 'Fout controleren dienst '; v_taakdienst := SUBSTR(TRIM(rec.taakdienst), 1, 60); IF LENGTH(TRIM(rec.taakdienst)) > 60 THEN fac.imp_writelog( p_import_key, 'W', 'dienst - Aangepast ivm lengte groter dan 60 ' , rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - ' || rec.taakdienst || ' wordt: ' || v_taakdienst); END IF; -- IF v_ongeldig = 0 THEN -- Controleren of voor de bestaande taak ook de objecttaak al bestaat... IF v_deel_key IS NOT NULL AND v_srtcontrole_key IS NOT NULL THEN v_errormsg := 'Fout controleren nieuwe of bestaande objecttaak ' || rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - ' || v_taakomschrijving ; SELECT MAX(t.ins_srtcontroledl_xcp_key) , MAX(t.ins_srtcontroledl_xcp_startdat) INTO v_ins_srtcontroledl_xcp_key , v_taakobject_startjaar_d FROM ins_srtcontroledl_xcp t WHERE t.ins_srtcontrole_key = v_srtcontrole_key AND t.ins_deel_key = v_deel_key; -- Controleren of er al geschiedenis op de objecttaak zit en de startdatum afwijkt van degene meegegeven in csv v_errormsg := 'Fout controleren geschiedenis op objecttaak '; IF v_ins_srtcontroledl_xcp_key IS NOT NULL THEN SELECT COUNT(*) INTO v_taak_geschiedenis FROM ins_deelsrtcontrole WHERE ins_deel_key = v_deel_key AND ins_srtcontrole_key = v_srtcontrole_key; IF v_taak_geschiedenis > 0 AND v_taakobjectstartjaar_str IS NOT NULL AND v_taakobjectstartjaar_d <> v_taakobject_startjaar_d THEN fac.imp_writelog( p_import_key, 'W', 'Op deze objecttaak zit al geschiedenis - afwijkende startdatum zal niet aangepast worden.. ' , rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - ' || v_taakomschrijving || ' - ' || v_taakobjectstartjaar_d || ' vs. ' || v_taakobject_startjaar_d); END IF; END IF; END IF; v_errormsg := 'Fout opslaan in fac_imp_taak_mjob ' || rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - ' || v_taakomschrijving ; INSERT INTO fac_imp_taak_mjob ( ins_deel_key , ctr_discipline_key , ismjob , ins_srtcontrole_omschrijving , ins_srtcontrole_key , ins_srtcontrole_opmerking , ins_srtcontrole_groep , ins_srtcontrole_prioriteit , fin_btwtabelwaarde_key , prs_kostenplaats_key , ins_srtcontroledl_xcp_aantal , ins_srtcontroledl_xcp_aanteh , ins_srtcontroledl_xcp_perc , ins_srtcontroledl_xcp_opmerk , ins_srtcontroledl_xcp_eenheid , ins_srtcontroledl_xcp_periode , ins_srtcontroledl_xcp_start , ins_srtcontroledl_xcp_eind , ins_srtcontroledl_xcp_materia , prs_dienst_omschrijving , ins_srtcontroledl_xcp_key ) VALUES ( v_deel_key , v_discipline_key , v_ismjob , v_taakomschrijving , v_srtcontrole_key , v_taakopmerking , v_taakgroep , v_taakprioriteit , v_btwtabelwaarde_key , v_kostenplaats_key , v_taakobjectaantal , v_taakobjectaanteh , v_taakobjectpercentage , v_taakobjectopmerking , v_taakobjecteenheid , v_taakobjectperiode , v_taakobjectstartjaar_d , v_taakobjecteindjaar_d , v_taakobjectmateriaal , v_taakdienst , v_ins_srtcontroledl_xcp_key ); END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); fac.imp_writelog(p_import_key, 'E', 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')', v_errormsg); END; END LOOP; END IF; -- Aantallen tellen voor logging v_errormsg := 'Fout bij tellen aantallen voor logging ' ; v_count_verwerk := 0 ; -- aantal te verwerken regels v_count_n_taak := 0 ; -- aantal nieuw aan te maken basistaken v_count_n_taakobject := 0 ; -- aantal nieuw aan te maken objecttaken v_count_w_taak := 0 ; -- aantal bestaande (object)taken te wijzigen SELECT count(*) INTO v_count_verwerk FROM fac_imp_taak_mjob ; SELECT count(*) INTO v_count_n_taak FROM (SELECT DISTINCT(ins_srtcontrole_omschrijving) FROM fac_imp_taak_mjob WHERE ins_srtcontrole_key IS NULL); SELECT count(*) INTO v_count_n_taakobject FROM fac_imp_taak_mjob WHERE ins_srtcontroledl_xcp_key IS NULL ; SELECT count(*) INTO v_count_w_taak FROM fac_imp_taak_mjob WHERE ins_srtcontrole_key IS NOT NULL AND ins_srtcontroledl_xcp_key IS NOT NULL ; IF v_header_is_valid = 0 THEN fac.imp_writelog(p_import_key, 'E', 'Ongeldig importbestand', 'Toelichting: Verkeerde header. Niet conform specs. '); ELSE fac.imp_writelog(p_import_key, 'S', 'IMPORT TAKEN: import' || CHR(13) || CHR(10) || 'Aantal te verwerken regels: ' || TO_CHAR (v_count_verwerk) || ' (van de ' || TO_CHAR (v_count_rec) || ' records in csv)' || CHR(13) || CHR(10) || 'Aantal nieuwe taken: ' || TO_CHAR (v_count_n_taak) || CHR(13) || CHR(10) || 'Aantal nieuwe objecttaken: ' || TO_CHAR (v_count_n_taakobject) || CHR(13) || CHR(10) || 'Aantal bestaande, te wijzigen (object)taken: ' || TO_CHAR (v_count_w_taak) , ''); END IF; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); fac.imp_writelog (p_import_key, 'E', 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')', v_errormsg); END fac_import_taak_mjob; / CREATE OR REPLACE PROCEDURE fac_update_taak_mjob (p_import_key IN NUMBER) AS CURSOR c_n -- nieuwe taken en objecttaken aanmaken.. IS SELECT i.* FROM fac_imp_taak_mjob i WHERE (i.ins_srtcontrole_key IS NULL OR i.ins_srtcontrole_key = -1); CURSOR c_no -- nieuwe objecttaken aanmaken.. IS SELECT i.* FROM fac_imp_taak_mjob i WHERE (i.ins_srtcontrole_key IS NOT NULL OR i.ins_srtcontrole_key > -1) AND i.ins_srtcontroledl_xcp_key IS NULL; CURSOR c_m -- bestaande taak en/of objecttaak wijzigen IS SELECT i.* FROM fac_imp_taak_mjob i WHERE (i.ins_srtcontrole_key IS NOT NULL OR i.ins_srtcontrole_key > -1) AND i.ins_srtcontroledl_xcp_key IS NOT NULL; v_errormsg VARCHAR2(1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2(200); v_ongeldig NUMBER(1) := 0; v_count_rec NUMBER := 0; v_count_taak NUMBER := 0 ; v_count_taakobject NUMBER := 0 ; v_count_verwerk NUMBER := 0; -- aantal verwerkte records v_count_n_taak NUMBER := 0; -- aantal nieuw aangemaakte basistaken v_count_n_taakobject NUMBER := 0; -- aantal nieuw aangemaakte objecttaken v_count_w_taak NUMBER := 0; -- aantal bestaande basistaken gewijzigd v_count_w_taakobject NUMBER := 0; -- aantal bestaande object-taken gewijzigd v_aanduiding VARCHAR2 (1000); v_aanduiding_objecttaak VARCHAR2 (1000); -- Velden v_objectidentificatie ins_deel.ins_deel_omschrijving%TYPE; v_srtdeel_key ins_deel.ins_srtdeel_key%TYPE; v_ctr_discipline_omschrijving ins_tab_discipline.ins_discipline_omschrijving%TYPE; v_dienst_key prs_dienst.prs_dienst_key%TYPE; v_taakdienst_key prs_dienst.prs_dienst_key%TYPE; v_taakdienst_oms prs_dienst.prs_dienst_omschrijving%TYPE; v_ins_srtcontrole_key ins_srtcontrole.ins_srtcontrole_key%TYPE; v_taakopmerking ins_srtcontrole.ins_srtcontrole_opmerking%TYPE; v_taakgroep ins_srtcontrole.ins_srtcontrole_groep%TYPE; v_taakprioriteit ins_srtcontrole.ins_srtcontrole_level%TYPE; v_percentage ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_perc%TYPE; v_objecttaakopmerking ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_opmerk%TYPE; v_eenheid ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_eenheid%TYPE; v_periode ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_periode%TYPE; v_eindjaar ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_eind%TYPE; v_materiaalkosten ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_materia%TYPE; v_aantal ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_aantal%TYPE; v_aantaleh ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_aanteh%TYPE; FUNCTION maakAanduiding_taak(p_deel_key IN NUMBER, p_disc_key IN NUMBER, p_oms IN VARCHAR2, o_srtdeel_key OUT NUMBER) RETURN VARCHAR2 IS v_deel_oms ins_deel.ins_deel_omschrijving%TYPE; v_disc_oms ins_tab_discipline.ins_discipline_omschrijving%TYPE; v_omschrijving VARCHAR2(1000); BEGIN SELECT ins_deel_omschrijving , ins_srtdeel_key INTO v_deel_oms , o_srtdeel_key FROM ins_deel WHERE ins_deel_key = p_deel_key; SELECT ins_discipline_omschrijving INTO v_disc_oms FROM ctr_discipline WHERE ins_discipline_key = p_disc_key; v_omschrijving := v_deel_oms || ' / ' || v_disc_oms || ' - ' || p_oms; RETURN v_omschrijving; END; FUNCTION maakAanduiding_taakobject(p_deel_key IN NUMBER, p_disc_key IN NUMBER, p_srtcontrole_oms IN VARCHAR2) RETURN VARCHAR2 IS v_srtdeel_code ins_srtdeel.ins_srtdeel_code%TYPE; v_disc_oms ins_tab_discipline.ins_discipline_omschrijving%TYPE; v_omschrijving VARCHAR2(1000); BEGIN SELECT s.ins_srtdeel_code INTO v_srtdeel_code FROM ins_deel d , ins_srtdeel s WHERE d.ins_srtdeel_key = s.ins_srtdeel_key AND d.ins_deel_key = p_deel_key; SELECT ins_discipline_omschrijving INTO v_disc_oms FROM ctr_discipline WHERE ins_discipline_key = p_disc_key; v_omschrijving := v_disc_oms || ' - ' || v_srtdeel_code || p_srtcontrole_oms || CHR(13) || CHR(10); RETURN v_omschrijving; END; PROCEDURE zetDeelStartdatum(p_deel_key IN NUMBER, p_startjaar IN DATE) AS BEGIN -- Aangezien de taken altijd een startdatum hebben, en objecten niet altijd een aanmaakdatum, gaan we die hier gelijk trekken. -- Daarna maken we de taak startdatum leeg, zodat de cyclus gaat lopen vanaf de bijgewerkte ins_deel_aanmaak. -- Zo blijft het mogelijk om taken in de MJOB console te verslepen naar jaartallen eerder dan het aangegeven startjaar. IF p_startjaar < SYSDATE THEN UPDATE ins_deel SET ins_deel_aanmaak = p_startjaar WHERE ins_deel_key = p_deel_key; END IF; END; FUNCTION trackTaak(p_srtcontrole_key IN NUMBER, p_label IN VARCHAR2, p_old IN VARCHAR2, p_new IN VARCHAR2) RETURN NUMBER IS BEGIN fac.trackaction('CTRSUP', p_srtcontrole_key, 4, NULL, p_label || ': ' || p_old || '-->' || p_new); RETURN 1; END; FUNCTION trackTaakobject(p_deel_key IN NUMBER, p_aanduiding IN VARCHAR2, p_label IN VARCHAR2, p_old IN VARCHAR2, p_new IN VARCHAR2) RETURN NUMBER IS BEGIN fac.trackaction('INSUPD', p_deel_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, p_aanduiding || ' ' || p_label || ': ' || p_old || '-->' || p_new); RETURN 1; END; BEGIN BEGIN FOR rec IN c_n LOOP BEGIN v_count_verwerk := v_count_verwerk + 1; v_aanduiding := maakAanduiding_taak(rec.ins_deel_key, rec.ctr_discipline_key, rec.ins_srtcontrole_omschrijving, v_srtdeel_key); -- Eenzelfde basistaak kan meerdere keren in CSV zitten. -- Daarom gaan we in deze cursor eerst kijken of de basistaak er in deze LOOP al ingezet is. -- Zo ja, dan kunnen we door naar de Objecttaak. Zo niet, dan gaan we eerst de basis v_errormsg := 'Opzoeken basistaak ' || v_aanduiding; SELECT MAX(ins_srtcontrole_key) INTO v_ins_srtcontrole_key FROM ins_srtcontrole WHERE ins_srtcontrole_omschrijving = rec.ins_srtcontrole_omschrijving; -- Basistaak aanmaken: geen ins_srtcontrole_key gevonden. IF v_ins_srtcontrole_key IS NULL THEN -- We gaan we eerst op zoek naar de dienst. v_errormsg := 'Aanmaken/opzoeken dienst ' || v_aanduiding; v_dienst_key := NULL; IF rec.prs_dienst_omschrijving IS NOT NULL THEN BEGIN SELECT prs_dienst_key INTO v_dienst_key FROM prs_dienst WHERE UPPER(prs_dienst_omschrijving) = UPPER(rec.prs_dienst_omschrijving); EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO prs_dienst (prs_dienst_omschrijving) VALUES (rec.prs_dienst_omschrijving) RETURNING prs_dienst_key INTO v_dienst_key; END; END IF; v_errormsg := 'Aanmaken taak: ' || v_aanduiding; INSERT INTO ins_srtcontrole ( ins_srtinstallatie_key , ins_srtcontrole_niveau , ins_srtcontrole_omschrijving , ctr_discipline_key , ins_srtcontrole_info , ins_srtcontrole_periode , ins_srtcontrole_eenheid , ins_srtcontrole_mode , ins_srtcontrole_level , ins_srtcontrole_opmerking , prs_dienst_key ) VALUES ( v_srtdeel_key , 'S' , rec.ins_srtcontrole_omschrijving , rec.ctr_discipline_key , NULL , 0 , rec.ins_srtcontroledl_xcp_eenheid , 1 , COALESCE(rec.ins_srtcontrole_prioriteit, 0) , rec.ins_srtcontrole_opmerking , v_dienst_key ) RETURNING ins_srtcontrole_key INTO v_ins_srtcontrole_key; fac.trackaction('CTRSUP', v_ins_srtcontrole_key, 4, NULL, 'Periodieke taak toegevoegd - Via taakimport '); v_count_n_taak := v_count_n_taak + 1; END IF; -- Nu kunnen we de objectaak aanmaken v_errormsg := 'Aanmaken taak object: ' || v_aanduiding || ' [' || rec.ins_deel_key || '|' || v_ins_srtcontrole_key || '|' || rec.ins_srtcontroledl_xcp_periode || '|' || rec.ins_srtcontroledl_xcp_eenheid || '|' || rec.ins_srtcontroledl_xcp_materia || '|' || rec.ins_srtcontroledl_xcp_perc || '|' || rec.ins_srtcontrole_groep || '|' || rec.ins_srtcontroledl_xcp_opmerk || '|' || rec.ins_srtcontroledl_xcp_aantal || '|' || rec.ins_srtcontroledl_xcp_aanteh || ']'; INSERT INTO ins_srtcontroledl_xcp ( ins_deel_key , ins_srtcontrole_key , ins_srtcontroledl_xcp_periode , ins_srtcontroledl_xcp_eenheid , ins_srtcontroledl_xcp_materia , ins_srtcontroledl_xcp_perc , ins_srtcontroledl_xcp_groep , ins_srtcontroledl_xcp_opmerk , ins_srtcontroledl_xcp_aantal , ins_srtcontroledl_xcp_aanteh ) VALUES ( rec.ins_deel_key , v_ins_srtcontrole_key , rec.ins_srtcontroledl_xcp_periode , rec.ins_srtcontroledl_xcp_eenheid , rec.ins_srtcontroledl_xcp_materia , rec.ins_srtcontroledl_xcp_perc , rec.ins_srtcontrole_groep , rec.ins_srtcontroledl_xcp_opmerk , rec.ins_srtcontroledl_xcp_aantal , rec.ins_srtcontroledl_xcp_aanteh ); zetDeelStartdatum(rec.ins_deel_key, rec.ins_srtcontroledl_xcp_start); v_count_n_taakobject := v_count_n_taakobject + 1; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); fac.imp_writelog (p_import_key, 'E', v_errormsg || 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')', v_aanduiding); END; v_aanduiding := 'Einde loop ' || v_aanduiding; END LOOP; FOR rec IN c_no LOOP BEGIN v_count_verwerk := v_count_verwerk + 1; v_aanduiding := maakAanduiding_taak(rec.ins_deel_key, rec.ctr_discipline_key, rec.ins_srtcontrole_omschrijving, v_srtdeel_key); -- We kunnen direct objectaak aanmaken v_errormsg := 'Aanmaken taak object bij taak: ' || v_aanduiding || ' [' || rec.ins_deel_key || '|' || rec.ins_srtcontrole_key || '|' || rec.ins_srtcontroledl_xcp_periode || '|' || rec.ins_srtcontroledl_xcp_eenheid || '|' || rec.ins_srtcontroledl_xcp_materia || '|' || rec.ins_srtcontroledl_xcp_perc || '|' || rec.ins_srtcontrole_groep || '|' || rec.ins_srtcontroledl_xcp_opmerk || '|' || rec.ins_srtcontroledl_xcp_aantal || '|' || rec.ins_srtcontroledl_xcp_aanteh || ']'; INSERT INTO ins_srtcontroledl_xcp ( ins_deel_key , ins_srtcontrole_key , ins_srtcontroledl_xcp_periode , ins_srtcontroledl_xcp_eenheid , ins_srtcontroledl_xcp_materia , ins_srtcontroledl_xcp_perc , ins_srtcontroledl_xcp_groep , ins_srtcontroledl_xcp_opmerk , ins_srtcontroledl_xcp_aantal , ins_srtcontroledl_xcp_aanteh ) VALUES ( rec.ins_deel_key , rec.ins_srtcontrole_key , rec.ins_srtcontroledl_xcp_periode , rec.ins_srtcontroledl_xcp_eenheid , rec.ins_srtcontroledl_xcp_materia , rec.ins_srtcontroledl_xcp_perc , rec.ins_srtcontrole_groep , rec.ins_srtcontroledl_xcp_opmerk , rec.ins_srtcontroledl_xcp_aantal , rec.ins_srtcontroledl_xcp_aanteh ); zetDeelStartdatum(rec.ins_deel_key, rec.ins_srtcontroledl_xcp_start); v_count_n_taakobject := v_count_n_taakobject + 1; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); fac.imp_writelog (p_import_key, 'E', v_errormsg || 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')', v_aanduiding); END; v_aanduiding := 'Einde loop ' || v_aanduiding; END LOOP; FOR rec IN c_m LOOP BEGIN v_count_verwerk := v_count_verwerk + 1 ; v_aanduiding := maakAanduiding_taak(rec.ins_deel_key, rec.ctr_discipline_key, rec.ins_srtcontrole_omschrijving, v_srtdeel_key); SELECT COALESCE(t.ins_srtcontrole_opmerking, '') , t.ins_srtcontrole_level , COALESCE(MAX(t.prs_dienst_key), -1) , COALESCE(MAX(d.prs_dienst_omschrijving), '') INTO v_taakopmerking , v_taakprioriteit , v_taakdienst_key , v_taakdienst_oms FROM ins_srtcontrole t , prs_dienst d WHERE t.prs_dienst_key = d.prs_dienst_key(+) AND t.ins_srtcontrole_key = rec.ins_srtcontrole_key GROUP BY t.ins_srtcontrole_opmerking , t.ins_srtcontrole_level; -- Basis-taak - Taakopmerking v_errormsg := 'Fout taakopmerking wijzigen '; IF rec.ins_srtcontrole_opmerking IS NOT NULL AND v_taakopmerking <> rec.ins_srtcontrole_opmerking THEN UPDATE ins_srtcontrole SET ins_srtcontrole_opmerking = rec.ins_srtcontrole_opmerking WHERE ins_srtcontrole_key = rec.ins_srtcontrole_key; v_count_taak := trackTaak(rec.ins_srtcontrole_key, 'Gewijzigd Taakopmerking', v_taakopmerking, rec.ins_srtcontrole_opmerking); END IF; -- Basis-taak - Taakprioriteit v_errormsg := 'Fout prioriteit wijzigen '; IF rec.ins_srtcontrole_prioriteit IS NOT NULL AND v_taakprioriteit <> rec.ins_srtcontrole_prioriteit THEN UPDATE ins_srtcontrole SET ins_srtcontrole_level = rec.ins_srtcontrole_prioriteit WHERE ins_srtcontrole_key = rec.ins_srtcontrole_key; v_count_taak := trackTaak(rec.ins_srtcontrole_key, 'Gewijzigd Prioriteit', v_taakprioriteit, rec.ins_srtcontrole_prioriteit); END IF; -- Basis-taak - Dienst v_errormsg := 'Fout dienst wijzigen ' || v_aanduiding; -- Dan gaan we kijken of de dienst meegegeven in csv al bestaat IF rec.prs_dienst_omschrijving IS NOT NULL THEN BEGIN SELECT prs_dienst_key INTO v_dienst_key FROM prs_dienst WHERE UPPER(prs_dienst_omschrijving) = UPPER(rec.prs_dienst_omschrijving); EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO prs_dienst (prs_dienst_omschrijving) VALUES (rec.prs_dienst_omschrijving) RETURNING prs_dienst_key INTO v_dienst_key; END; IF v_taakdienst_key <> v_dienst_key THEN UPDATE ins_srtcontrole SET prs_dienst_key = v_dienst_key WHERE ins_srtcontrole_key = rec.ins_srtcontrole_key; v_count_taak := trackTaak(rec.ins_srtcontrole_key, 'Gewijzigd taakdienst', v_taakdienst_oms, rec.prs_dienst_omschrijving); END IF; END IF; IF v_count_taak = 1 THEN v_count_w_taak := v_count_w_taak + 1; END IF; -- Gaan nu de object-taken aanpassen v_aanduiding_objecttaak := maakAanduiding_taakobject(rec.ins_deel_key, rec.ctr_discipline_key, rec.ins_srtcontrole_omschrijving); SELECT COALESCE(ins_srtcontroledl_xcp_perc, 0) , COALESCE(ins_srtcontroledl_xcp_opmerk, '') , COALESCE(ins_srtcontroledl_xcp_eenheid, 0) , COALESCE(ins_srtcontroledl_xcp_periode, 0) , COALESCE(ins_srtcontroledl_xcp_groep, '') , ins_srtcontroledl_xcp_eind , COALESCE(max(ins_srtcontroledl_xcp_materia), 0) INTO v_percentage , v_objecttaakopmerking , v_eenheid , v_periode , v_taakgroep , v_eindjaar , v_materiaalkosten FROM ins_srtcontroledl_xcp WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key GROUP BY ins_srtcontroledl_xcp_perc , ins_srtcontroledl_xcp_opmerk , ins_srtcontroledl_xcp_eenheid , ins_srtcontroledl_xcp_periode , ins_srtcontroledl_xcp_groep , ins_srtcontroledl_xcp_eind; -- Object-taak - Percentage v_errormsg := 'Fout percentage wijzigen '; IF rec.ins_srtcontroledl_xcp_perc IS NOT NULL AND rec.ins_srtcontroledl_xcp_perc <> v_percentage THEN UPDATE ins_srtcontroledl_xcp SET ins_srtcontroledl_xcp_perc = rec.ins_srtcontroledl_xcp_perc WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key; v_count_taakobject := trackTaakobject(rec.ins_deel_key, v_aanduiding_objecttaak, 'Percentage', v_percentage, rec.ins_srtcontroledl_xcp_perc); END IF; -- Object-taak - Opmerking v_errormsg := 'Fout opmerking objecttaak wijzigen '; IF rec.ins_srtcontroledl_xcp_opmerk IS NOT NULL AND rec.ins_srtcontroledl_xcp_opmerk <> v_objecttaakopmerking THEN UPDATE ins_srtcontroledl_xcp SET ins_srtcontroledl_xcp_opmerk = rec.ins_srtcontroledl_xcp_opmerk WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key; v_count_taakobject := trackTaakobject(rec.ins_deel_key, v_aanduiding_objecttaak, 'Taakopmerking', v_objecttaakopmerking, rec.ins_srtcontroledl_xcp_opmerk); END IF; -- Object-taak - Eenheid v_errormsg := 'Fout eenheid wijzigen '; IF rec.ins_srtcontroledl_xcp_eenheid IS NOT NULL AND rec.ins_srtcontroledl_xcp_eenheid <> v_eenheid AND rec.ismjob = 0 THEN UPDATE ins_srtcontroledl_xcp SET ins_srtcontroledl_xcp_eenheid = rec.ins_srtcontroledl_xcp_eenheid WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key; v_count_taakobject := trackTaakobject(rec.ins_deel_key, v_aanduiding_objecttaak, 'Eenheid', v_eenheid, rec.ins_srtcontroledl_xcp_eenheid); END IF; -- Object-taak - Periode v_errormsg := 'Fout periode wijzigen '; IF rec.ins_srtcontroledl_xcp_periode IS NOT NULL AND rec.ins_srtcontroledl_xcp_periode <> v_periode THEN UPDATE ins_srtcontroledl_xcp SET ins_srtcontroledl_xcp_periode = rec.ins_srtcontroledl_xcp_periode WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key; v_count_taakobject := trackTaakobject(rec.ins_deel_key, v_aanduiding_objecttaak, 'Periode', v_periode, rec.ins_srtcontroledl_xcp_periode); END IF; -- Object-taak - Taakgroep v_errormsg := 'Fout taakgroep wijzigen '; IF rec.ins_srtcontrole_groep IS NOT NULL AND rec.ins_srtcontrole_groep <> v_taakgroep THEN UPDATE ins_srtcontroledl_xcp SET ins_srtcontroledl_xcp_groep = rec.ins_srtcontrole_groep WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key; v_count_taakobject := trackTaakobject(rec.ins_deel_key, v_aanduiding_objecttaak, 'Taakgroep', v_taakgroep, rec.ins_srtcontrole_groep); END IF; -- Object-taak - Eindjaar v_errormsg := 'Fout eindjaar wijzigen '; IF ( (rec.ins_srtcontroledl_xcp_eind IS NOT NULL AND v_eindjaar <> rec.ins_srtcontroledl_xcp_eind AND v_eindjaar IS NOT NULL) OR (rec.ins_srtcontroledl_xcp_eind IS NOT NULL AND v_eindjaar IS NULL) ) THEN UPDATE ins_srtcontroledl_xcp SET ins_srtcontroledl_xcp_eind = rec.ins_srtcontroledl_xcp_eind WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key; v_count_taakobject := trackTaakobject(rec.ins_deel_key, v_aanduiding_objecttaak, 'Eindjaar', v_eindjaar, rec.ins_srtcontroledl_xcp_eind); END IF; -- Object-taak - Kosten v_errormsg := 'Fout kosten wijzigen '; IF rec.ins_srtcontroledl_xcp_materia IS NOT NULL AND rec.ins_srtcontroledl_xcp_materia <> v_materiaalkosten THEN UPDATE ins_srtcontroledl_xcp SET ins_srtcontroledl_xcp_materia = rec.ins_srtcontroledl_xcp_materia WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key; v_count_taakobject := trackTaakobject(rec.ins_deel_key, v_aanduiding_objecttaak, 'Kosten', v_materiaalkosten, rec.ins_srtcontroledl_xcp_materia); END IF; -- Object-taak - aantal v_errormsg := 'Fout aantal wijzigen '; IF ( (rec.ins_srtcontroledl_xcp_aantal IS NOT NULL AND v_aantal IS NOT NULL AND rec.ins_srtcontroledl_xcp_aantal <> v_aantal) OR (rec.ins_srtcontroledl_xcp_aantal IS NOT NULL AND v_aantal IS NULL) ) THEN UPDATE ins_srtcontroledl_xcp SET ins_srtcontroledl_xcp_aantal = rec.ins_srtcontroledl_xcp_aantal WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key; v_count_taakobject := trackTaakobject(rec.ins_deel_key, v_aanduiding_objecttaak, 'Aantal', v_aantal, rec.ins_srtcontroledl_xcp_aantal); END IF; -- Object-taal - aantaleh v_errormsg := 'fout aanteh wijzigen '; IF ( (rec.ins_srtcontroledl_xcp_aanteh IS NOT NULL AND v_aantaleh IS NOT NULL AND rec.ins_srtcontroledl_xcp_aanteh <> v_aantaleh) OR (rec.ins_srtcontroledl_xcp_aanteh IS NOT NULL AND v_aantaleh IS NULL) ) THEN UPDATE ins_srtcontroledl_xcp SET ins_srtcontroledl_xcp_aanteh = rec.ins_srtcontroledl_xcp_aanteh WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key; v_count_taakobject := trackTaakobject(rec.ins_deel_key, v_aanduiding_objecttaak, 'Aanteh', v_aantaleh, rec.ins_srtcontroledl_xcp_aanteh); END IF; IF v_count_taakobject = 1 THEN v_count_w_taakobject := v_count_w_taakobject + 1; END IF; zetDeelStartdatum(rec.ins_deel_key, rec.ins_srtcontroledl_xcp_start); COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); fac.imp_writelog (p_import_key, 'E', v_errormsg || 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')', v_aanduiding); END; v_aanduiding := 'Einde loop ' || v_aanduiding; END LOOP; -- Update zonder fouten. Log verwerkingsoverzicht. fac.imp_writelog(p_import_key, 'S', 'IMPORT TAKEN: update' || CHR(13) || CHR(10) || 'Aantal verwerkte regels: ' || TO_CHAR (v_count_verwerk) || CHR(13) || CHR(10) || 'Aantal nieuwe taken ingelezen: ' || TO_CHAR (v_count_n_taak) || CHR(13) || CHR(10) || 'Aantal nieuwe objecttaken ingelezen: ' || TO_CHAR (v_count_n_taakobject) || CHR(13) || CHR(10) || 'Aantal bestaande basistaken gewijzigd: ' || TO_CHAR (v_count_w_taak) || CHR(13) || CHR(10) || 'Aantal bestaande objecttaken gewijzigd: ' || TO_CHAR (v_count_w_taakobject) , ''); EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); fac.imp_writelog (p_import_key, 'E', v_errormsg || 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')', v_aanduiding_objecttaak); END; END fac_update_taak_mjob; / CREATE OR REPLACE PROCEDURE fac_import_exchange (p_import_key IN NUMBER, p_days_from IN NUMBER DEFAULT 0, p_days_to IN NUMBER DEFAULT 90) IS BEGIN exc.import_exchange (p_import_key, p_days_from, p_days_to); END fac_import_exchange; / CREATE OR REPLACE PROCEDURE fac_update_exchange (p_import_key IN NUMBER, p_days_from IN NUMBER DEFAULT 0, p_days_to IN NUMBER DEFAULT 90) IS BEGIN exc.update_exchange (p_import_key, p_days_from, p_days_to); END fac_update_exchange; / CREATE OR REPLACE PROCEDURE fac_import_exchfull (p_import_key IN NUMBER, p_days_from IN NUMBER DEFAULT 0, p_days_to IN NUMBER DEFAULT 90) IS BEGIN exc.import_exchfull (p_import_key, p_days_from, p_days_to); END fac_import_exchfull; / CREATE OR REPLACE PROCEDURE fac_update_exchfull (p_import_key IN NUMBER, p_days_from IN NUMBER DEFAULT 0, p_days_to IN NUMBER DEFAULT 90) IS BEGIN exc.update_exchfull (p_import_key, p_days_from, p_days_to); END fac_update_exchfull; / REGISTERRUN('$Id$')