diff --git a/SCHG/schg.sql b/SCHG/schg.sql index 625efba3e..e4f299872 100644 --- a/SCHG/schg.sql +++ b/SCHG/schg.sql @@ -1195,1900 +1195,6 @@ END schg_update_perslid; / --- TIJDELIJK CUST op CNT_UPDATE 2025.1 - -CREATE OR REPLACE PROCEDURE schg_import_cnt_schg (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 SCOPETYPE - , fac_imp_csv_col28 LOCATIEGEBOUW_CODE - , fac_imp_csv_col29 VERLENGEN - , fac_imp_csv_col30 flex_01 - , fac_imp_csv_col31 flex_02 - , fac_imp_csv_col32 flex_03 - , fac_imp_csv_col33 flex_04 - , fac_imp_csv_col34 flex_05 - , fac_imp_csv_col35 flex_06 - , fac_imp_csv_col36 flex_07 - , fac_imp_csv_col37 flex_08 - , fac_imp_csv_col38 flex_09 - , fac_imp_csv_col39 flex_10 - , fac_imp_csv_col40 flex_11 - , fac_imp_csv_col41 flex_12 - , fac_imp_csv_col42 flex_13 - , fac_imp_csv_col43 flex_14 - , fac_imp_csv_col44 flex_15 - , fac_imp_csv_col45 flex_16 - , fac_imp_csv_col46 flex_17 - , fac_imp_csv_col47 flex_18 - , fac_imp_csv_col48 flex_19 - , fac_imp_csv_col49 flex_20 - , fac_imp_csv_col50 flex_21 - , fac_imp_csv_col51 flex_22 - , fac_imp_csv_col52 flex_23 - , fac_imp_csv_col53 flex_24 - , fac_imp_csv_col54 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_scope_type cnt_contract_plaats.cnt_alg_plaats_code%TYPE; --VARCHAR2(1) --> cnt_contract_plaats.cnt_alg_plaats_code - v_gebouwcode alg_gebouw.alg_gebouw_code%TYPE; --VARCHAR2(12) --> cnt_contract_plaats.cnt_alg_plaats_key - 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;SCOPETYPE;LOCATIEGEBOUW_CODE;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 - 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_ongeldig := 0; - 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; - - IF v_bedrijfnaam IS NOT NULL AND v_srtcontact = 'B' - THEN - - BEGIN - SELECT prs_bedrijf_key - INTO v_ref_key - FROM prs_bedrijf - WHERE UPPER(prs_bedrijf_naam) = UPPER(v_bedrijfnaam) - AND prs_bedrijf_verwijder IS NULL; - EXCEPTION - WHEN NO_DATA_FOUND THEN - fac.imp_writelog( p_import_key, 'W' - , v_aanduiding || 'Debiteur - Is onbekend' - , rec.fac_imp_csv_index || ' - ' || v_bedrijfnaam || ', Regel wordt overgeslagen' - ); - v_ongeldig := 1; - END; - 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 ScopeType - IF TRIM(rec.locatiegebouw_code) IS NULL - THEN - v_scope_type := NULL; - ELSE - v_scope_type := SUBSTR(TRIM(rec.scopetype), 1, 1); - IF v_scope_type IS NULL OR v_scope_type NOT IN ('L', 'G') - THEN - fac.imp_writelog( p_import_key, 'W' - , v_aanduiding || 'ScopeType - Is niet aanwezig of ongeldig' - , rec.fac_imp_csv_index || ' - ' || v_scope_type || ', Regel wordt overgeslagen' - ); - v_ongeldig := 1; - END IF; - END IF; - - -- CSV-kolom AB: Controle Locatiegebouw_code - IF v_scope_type IS NOT NULL - THEN - IF v_scope_type = 'L' - THEN - v_gebouwcode := SUBSTR(TRIM(rec.locatiegebouw_code), 1, 10); - IF LENGTH(TRIM(rec.locatiegebouw_code)) > 10 - THEN - fac.imp_writelog( p_import_key, 'W' - , v_aanduiding || 'Locatiegebouw_code - Aangepast ivm lengte groter dan 10 voor locatie' - , rec.fac_imp_csv_index || ' - ' || rec.locatiegebouw_code || ' wordt: ' || v_gebouwcode - ); - END IF; - END IF; - IF v_scope_type = 'G' - THEN - v_gebouwcode := SUBSTR(TRIM(rec.locatiegebouw_code), 1, 12); - IF LENGTH(TRIM(rec.locatiegebouw_code)) > 12 - THEN - fac.imp_writelog( p_import_key, 'W' - , v_aanduiding || 'Locatiegebouw_code - Aangepast ivm lengte groter dan 12 voor gebouw' - , rec.fac_imp_csv_index || ' - ' || rec.locatiegebouw_code || ' wordt: ' || v_gebouwcode - ); - END IF; - END IF; - ELSE - v_gebouwcode := NULL; - END IF; - - -- CSV-kolom AC: 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 := v_flex_naam_01 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_01, rec.flex_01); - v_cnt_kenmerk_02 := v_flex_naam_02 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_02, rec.flex_02); - v_cnt_kenmerk_03 := v_flex_naam_03 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_03, rec.flex_03); - v_cnt_kenmerk_04 := v_flex_naam_04 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_04, rec.flex_04); - v_cnt_kenmerk_05 := v_flex_naam_05 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_05, rec.flex_05); - v_cnt_kenmerk_06 := v_flex_naam_06 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_06, rec.flex_06); - v_cnt_kenmerk_07 := v_flex_naam_07 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_07, rec.flex_07); - v_cnt_kenmerk_08 := v_flex_naam_08 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_08, rec.flex_08); - v_cnt_kenmerk_09 := v_flex_naam_09 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_09, rec.flex_09); - v_cnt_kenmerk_10 := v_flex_naam_10 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_10, rec.flex_10); - v_cnt_kenmerk_11 := v_flex_naam_11 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_11, rec.flex_11); - v_cnt_kenmerk_12 := v_flex_naam_12 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_12, rec.flex_12); - v_cnt_kenmerk_13 := v_flex_naam_13 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_13, rec.flex_13); - v_cnt_kenmerk_14 := v_flex_naam_14 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_14, rec.flex_14); - v_cnt_kenmerk_15 := v_flex_naam_15 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_15, rec.flex_15); - v_cnt_kenmerk_16 := v_flex_naam_16 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_16, rec.flex_16); - v_cnt_kenmerk_17 := v_flex_naam_17 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_17, rec.flex_17); - v_cnt_kenmerk_18 := v_flex_naam_18 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_18, rec.flex_18); - v_cnt_kenmerk_19 := v_flex_naam_19 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_19, rec.flex_19); - v_cnt_kenmerk_20 := v_flex_naam_20 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_20, rec.flex_20); - v_cnt_kenmerk_21 := v_flex_naam_21 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_21, rec.flex_21); - v_cnt_kenmerk_22 := v_flex_naam_22 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_22, rec.flex_22); - v_cnt_kenmerk_23 := v_flex_naam_23 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_23, rec.flex_23); - v_cnt_kenmerk_24 := v_flex_naam_24 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_24, rec.flex_24); - v_cnt_kenmerk_25 := v_flex_naam_25 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_25, rec.flex_25); - */ - - 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 - , scope - , gebouwcode - , 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_scope_type - , v_gebouwcode - , 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 schg_import_cnt_schg; -/ - -CREATE OR REPLACE PROCEDURE schg_update_cnt_schg (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.scope - , i.gebouwcode - , 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.scope locgeb_scope - , a.gebouwcode locgeb_code - , gg.plaats_scope - , gg.plaats_key - , 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 - , (SELECT 'L' plaats_scope - , alg_locatie_key plaats_key - , alg_locatie_code plaats_code - FROM alg_v_aanweziglocatie - UNION - SELECT 'G' - , alg_gebouw_key - , alg_gebouw_code - FROM alg_v_aanweziggebouw - ) gg - 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(+) - AND a.scope = gg.plaats_scope(+) - AND a.gebouwcode = gg.plaats_code(+); - - -- 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_fulltext varchar2(2000); - - -- 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 MAX(cnt_kenmerk_key) - , MAX(cnt_srtkenmerk_key) - , MAX(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 AND v_kenmerk_key IS NOT NULL - 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 - -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; - - -- Locatie/gebouw (als meegegeven): moet bestaan en ook passen bij de - -- contractsoort (type_key 3=Ondersteuning of 5=Leverancier). - IF (rec.locgeb_scope IS NOT NULL) - THEN - v_errormsg := 'Fout bij bepalen locatie/gebouw: ' || rec.locgeb_scope ||'|'|| rec.locgeb_code; - IF (rec.plaats_key IS NULL) - THEN -- Geen locatie/gebouw gevonden. - 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 (rec.plaats_key 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 = rec.plaats_key - AND cnt_alg_plaats_code = rec.plaats_scope; - - 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 - , rec.plaats_key - , rec.plaats_scope - ); - 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 schg_update_cnt_schg; -/ - - - ------------------------------- --- NOTI-JOBS --------------- -------------------------------