-- -- $Id$ -- -- Script containing customer specific sql statements for the FACILITOR database -- -- -- -- -- DEFINE thisfile = 'ZLMV.SQL' DEFINE dbuser = 'ZLMV' SET ECHO ON SET DEFINE ON COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT; COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT; WHENEVER SQLERROR CONTINUE; SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL; SPOOL &fcltlogfile WHENEVER SQLERROR EXIT; SELECT adm.checkscriptcust('&dbuser') AS fcltcusttxt FROM DUAL; WHENEVER SQLERROR CONTINUE; --------------------------------------- PROMPT &fcltcusttxt --------------------------------------- SET DEFINE OFF ------ payload begin ------ CREATE OR REPLACE PACKAGE ZLMV AS FUNCTION getfirststartdate(p_startdatum IN DATE, p_refdatum IN DATE, p_cyclus IN NUMBER) RETURN DATE; PROCEDURE inactivate_prs; PROCEDURE anonimiseer_bezoeker; END; / CREATE OR REPLACE PACKAGE BODY ZLMV AS FUNCTION getfirststartdate(p_startdatum IN DATE, p_refdatum IN DATE, p_cyclus IN NUMBER) RETURN DATE AS v_startdatum DATE; BEGIN IF (p_startdatum0) THEN v_startdatum := ADD_MONTHS(p_startdatum, p_cyclus*12); IF (v_startdatum 0) THEN UPDATE prs_kostenplaats SET prs_perslid_key = NULL WHERE prs_perslid_key = rec.prs_perslid_key; fac.writelog ( 'inact_prs', 'I', 'Budgethouderschap van te verwijderen persoon (' || v_count || ' stuks) vervallen.', 'Naam/persoonsnr: ' || v_perslid_naam || '/' || v_perslid_nr); END IF; -- *** Vervangers *** -- koppelingen met vervangers dienen ook verwijderd te worden SELECT COUNT (*) INTO v_count FROM prs_collega WHERE prs_perslid_key = rec.prs_perslid_key OR prs_perslid_key_alt = rec.prs_perslid_key; IF (v_count > 0) THEN DELETE FROM prs_collega WHERE prs_perslid_key = rec.prs_perslid_key OR prs_perslid_key_alt = rec.prs_perslid_key; fac.writelog ( 'inact_prs', 'I', 'Te verwijderen persoon heeft vervanger(s). Koppeling(en) verwijderd.', 'Naam/persoonsnr: ' || v_perslid_naam || '/' || v_perslid_nr); END IF; -- *** werkplekken *** DELETE prs_perslidwerkplek WHERE prs_perslid_key = rec.prs_perslid_key; -- *** Verplichtingen *** SELECT COUNT (*) INTO v_count FROM prs_v_verplichting_refcheck vp WHERE vp.prs_perslid_key = rec.prs_perslid_key; IF v_count = 0 THEN -- Persoon heeft geen enkele (actuele of historische) verplichting v_errorhint := 'Verwijderen van persoon met key ' || TO_CHAR (rec.prs_perslid_key); -- Referenties in tabellen naar deze pers_perslid_key moeten eerst verwijderd worden. -- Door cascade verwijderen van deze record onstaan audits op die tabellen die audit tracking hebben. -- Daardoor onstaan "ORxA-04091:table VLKC.FAC_AUDIT is mutating, trigger/function may not see it" foutmeldingen -- op de delete van de prs_perslid_key uit de prs_perslid tabel. -- De tabellen prs_kostenplaats, prs_kostenplaatsgrp, prs_perslidkostenplaats en fac_gebruikersgroep hebben een prs_perslid_key referentie en audit tracking. DELETE FROM prs_kostenplaats WHERE prs_perslid_key = rec.prs_perslid_key; DELETE FROM prs_kostenplaatsgrp WHERE prs_perslid_key = rec.prs_perslid_key; DELETE FROM prs_perslidkostenplaats WHERE prs_perslid_key = rec.prs_perslid_key; DELETE FROM fac_gebruikersgroep WHERE prs_perslid_key = rec.prs_perslid_key; DELETE FROM prs_perslid WHERE prs_perslid_key = rec.prs_perslid_key; fac.writelog ( 'inact_prs', 'I', 'Persoon verwijderd.', 'Achternaam/persoonsnr: ' || v_perslid_naam || '/' || v_perslid_nr); ELSE -- Controleer of er ACTUELE verplichtingen zijn SELECT COUNT (*) INTO v_count FROM prs_v_verplichting_keys vp WHERE vp.prs_perslid_key = rec.prs_perslid_key; IF v_count > 0 THEN UPDATE prs_perslid SET prs_perslid_naam = SUBSTR ('INACTIEF:' || prs_perslid_naam, 1, 60), prs_perslid_oslogin = NULL, prs_perslid_oslogin2 = NULL WHERE prs_perslid_key = rec.prs_perslid_key AND prs_perslid_naam NOT LIKE 'INACTIEF:%'; fac.writelog ( 'inact_prs', 'I', 'Persoon als INACTIEF gemarkeerd of was al INACTIEF gemarkeerd.', 'Achternaam/persoonsnr: ' || v_perslid_naam || '/' || v_perslid_nr); ELSE BEGIN UPDATE prs_perslid SET prs_perslid_verwijder = SYSDATE WHERE prs_perslid_key = rec.prs_perslid_key; fac.writelog ( 'inact_prs', 'I', 'Persoon ge?ctiveerd.', 'Achternaam/persoonsnr: ' || v_perslid_naam || '/' || v_perslid_nr); EXCEPTION WHEN OTHERS THEN -- Kennelijk heeft de persoon toch ernstige verplichtingen v_errorhint := 'Persoon heeft nog (max. ' || TO_CHAR (v_count) || ') verplichtingen. Naam/persoonsnr: ' || v_perslid_naam || '/' || v_perslid_nr; fac.writelog ( 'inact_prs', 'I', 'Inactiveren persoon is niet gelukt', v_errorhint); END; END IF; 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.writelog ('inact_prs', 'E', v_errormsg, v_errorhint); END; END LOOP; END; PROCEDURE anonimiseer_bezoeker AS anonymize_period NUMBER := 42; bez_generic_visitor VARCHAR2 (2001) := lcl.l ('lcl_bez_generic_visitor'); v_count NUMBER; CURSOR c_afspraak IS SELECT a.bez_afspraak_key FROM bez_afspraak a, (SELECT datum_van FROM (SELECT TRUNC (MIN (bez_afspraak_datum)) datum_van FROM bez_afspraak a WHERE bez_afspraak_datum < (SYSDATE - anonymize_period) AND NOT EXISTS (SELECT ft.fac_tracking_key FROM fac_tracking ft WHERE ft.fac_tracking_refkey = bez_afspraak_key AND ft.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key FROM fac_srtnotificatie WHERE fac_srtnotificatie_code = 'BEZANO')))) van, (SELECT TRUNC (SYSDATE - anonymize_period) --- 6 weken dus 6*7 datum_tot FROM DUAL) tot WHERE a.bez_afspraak_datum BETWEEN van.datum_van AND tot.datum_tot AND NOT EXISTS (SELECT ft.fac_tracking_key FROM fac_tracking ft WHERE ft.fac_tracking_refkey = a.bez_afspraak_key AND ft.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key FROM fac_srtnotificatie WHERE fac_srtnotificatie_code = 'BEZANO')) ORDER BY a.bez_afspraak_key; BEGIN FOR rec IN c_afspraak LOOP -- Verwijder alle kenmerkwaarden van bezoekers van de afspraak waarvan het ampersand 8 (BITAND) bit van het bez_kenmerk.bez_kenmerk_systeem veld is gezet. DELETE FROM bez_kenmerkwaarde bkw WHERE bkw.bez_bezoekers_key IN (SELECT b.bez_bezoekers_key FROM bez_bezoekers b WHERE b.bez_afspraak_key = rec.bez_afspraak_key) AND bkw.bez_kenmerk_key IN (SELECT bk.bez_kenmerk_key FROM bez_kenmerk bk WHERE bk.bez_kenmerk_key = bkw.bez_kenmerk_key AND BITAND (bk.bez_kenmerk_systeem, 8) = 8); -- Anonimiseer alle bezoekers. UPDATE bez_bezoekers SET bez_afspraak_naam = bez_generic_visitor, -- bez_afspraak_bedrijf = NULL, bez_afspraak_opmerking = NULL, bez_bezoekers_telefoon = NULL, bez_bezoekers_email = NULL, bez_bezoekers_kenteken = NULL WHERE bez_afspraak_key = rec.bez_afspraak_key; -- Anonimiseer alle afspraken. -- Door de trigger in de update wordt automatische de naam van de host in de gastheer geplakt. -- Daardoor wordt de lcl "Ganonimiseerd" in vele gevallen niet blijvend in de gasheer gezet. -- De persoon (prs record) moet daarom eerst aangepast worden. -- Tijdens het anonimiseren van de persoon wordt daarom de bez_afspraak_gastheer ook geanonimiseerd. -- In de gevallen dat er geen host wordt gebruikt en alleen tekst voor de persoon (gastheer) wordt ingevuld wordt het veld wel blijvend gezet. UPDATE bez_afspraak SET bez_afspraak_gastheer = bez_generic_visitor, bez_afspraak_telefoonnr = NULL, bez_afspraak_opmerking = NULL WHERE bez_afspraak_key = rec.bez_afspraak_key; -- Alle BEZ tracking anonimiseren m.b.t. de afspraak. UPDATE fac_tracking SET fac_tracking_oms = NULL WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key FROM fac_srtnotificatie WHERE fac_srtnotificatie_xmlnode = 'afspraak' AND fac_srtnotificatie_code != 'BEZANO') AND fac_tracking_refkey = rec.bez_afspraak_key AND fac_tracking_oms IS NOT NULL; -- Alle BEZ tracking anonimiseren m.b.t. de bezoekers van de afspraak. UPDATE fac_tracking SET fac_tracking_oms = NULL WHERE fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key FROM fac_srtnotificatie WHERE fac_srtnotificatie_xmlnode = 'bezoeker') AND fac_tracking_refkey IN (SELECT bb.bez_bezoekers_key FROM bez_bezoekers bb WHERE bb.bez_afspraak_key = rec.bez_afspraak_key) AND fac_tracking_oms IS NOT NULL; -- Anonimiseren van de afspraak tracken. fac.trackaction ('BEZANO', rec.bez_afspraak_key, NULL, NULL, NULL); IF v_count >= 1000 THEN COMMIT; v_count := 0; ELSE v_count := v_count + 1; END IF; END LOOP; END; END; / CREATE OR REPLACE PROCEDURE ZLMV_IMPORT_IMPPERSLID(p_import_key IN NUMBER) AS CURSOR c1 is SELECT fac_imp_csv_col01 prs_voornaam, fac_imp_csv_col02 prs_tussenvoegsel, fac_imp_csv_col03 prs_achternaam, fac_imp_csv_col04 prs_email, fac_imp_csv_col05 prs_titel, fac_imp_csv_col06 prs_afdeling FROM fac_imp_csv WHERE fac_import_key=p_import_key ORDER BY fac_imp_csv_key; v_header NUMBER:=0; v_afdeling_code VARCHAR2(15); v_functie VARCHAR2(60); BEGIN v_header :=0; DELETE FROM fac_imp_perslid; DELETE FROM fac_imp_organisatie; FOR rec in C1 LOOP IF rec.prs_voornaam='GivenName' AND v_header=0 THEN v_header:=1; ELSE BEGIN SELECT prs_afdeling_naam INTO v_afdeling_code FROM prs_afdeling WHERE UPPER(prs_afdeling_omschrijving)=UPPER(rec.prs_afdeling); EXCEPTION WHEN NO_DATA_FOUND THEN v_afdeling_code:='Onbekend'; END; IF length(rec.prs_titel)>1 THEN v_functie:=rec.prs_titel; ELSE v_functie:='Onbekend'; END IF; INSERT INTO fac_imp_perslid(fac_import_key, prs_afdeling_naam, prs_perslid_voornaam, prs_perslid_tussenvoegsel, prs_perslid_naam, prs_perslid_email, prs_srtperslid_omschrijving) VALUES(p_import_key, v_afdeling_code, rec.prs_voornaam, rec.prs_tussenvoegsel, rec.prs_achternaam, rec.prs_email, v_functie); END IF; END LOOP; END; / CREATE OR REPLACE PROCEDURE ZLMV_UPDATE_IMPPERSLID(p_import_key IN NUMBER) AS CURSOR p_del IS SELECT * FROM prs_perslid p WHERE p.prs_perslid_verwijder IS NULL AND p.prs_perslid_email NOT IN (SELECT prs_perslid_email FROM fac_imp_perslid); CURSOR p_wrkplk IS SELECT p.prs_perslid_key, a.alg_ruimte_key FROM prs_perslid p, prs_afdeling pa, ALG_V_AANWEZIGRUIMTE a WHERE p.PRS_AFDELING_KEY=pa.prs_afdeling_key AND UPPER(pa.prs_afdeling_omschrijving)='FACILITAIR' AND pa.prs_afdeling_verwijder IS NULL AND p.prs_perslid_verwijder IS NULL AND UPPER(a.alg_ruimte_omschrijving)='FACILITAIR' AND a.alg_ruimte_nr='0.31'; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_errormsg VARCHAR2 (200); v_aanduiding VARCHAR2 (200); v_errorhint VARCHAR2 (200); BEGIN prs.update_perslid (p_import_key, 'EMAIL', 'A', 1); -- Opschonen van personen die niet meer in de import zitten FOR rec IN p_del LOOP prs.delete_perslid (p_import_key, rec.prs_perslid_key); END LOOP; -- Alle medewerkers Fcailitrair krijgen werkplek in Ruimte Facilitair gebouw C2 FOR rec IN p_wrkplk LOOP v_aanduiding := 'Perslidkey: ' || rec.prs_perslid_key; v_errorhint := 'Specifieke werkplek koppelen voor perslid: ' || rec.prs_perslid_key; BEGIN prs.movetoruimte (rec.prs_perslid_key, rec.alg_ruimte_key, ''); EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); fac.writelog ( 'Toewijzen Facilitair specifieke werkplek', 'E', 'Error ' || v_aanduiding || oracle_err_num || '/' || oracle_err_mes, v_errorhint); END; END LOOP; END; / CREATE OR REPLACE PROCEDURE zlmv_import_mjobelementen (p_import_key IN NUMBER) IS c_delim VARCHAR2 (2) := fac.import_delimiter(p_import_key); v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line v_errormsg VARCHAR2 (1000); v_errorhint VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); header_is_valid NUMBER; v_count_tot NUMBER (10); v_count_import NUMBER (10); v_ongeldig NUMBER (1); v_aanduiding VARCHAR (400); v_dummy VARCHAR (255); v_ins_kenmerk_key1 VARCHAR2 (255); v_ins_kenmerk_key2 VARCHAR2 (255); v_ins_kenmerk_key3 VARCHAR2 (255); v_ins_kenmerk_key4 VARCHAR2 (255); v_ins_kenmerk_key5 VARCHAR2 (255); v_ins_kenmerk_key6 VARCHAR2 (255); v_ins_kenmerk_key7 VARCHAR2 (255); v_ins_kenmerk_key8 VARCHAR2 (255); v_ins_kenmerk_key9 VARCHAR2 (255); v_ins_kenmerk_key10 VARCHAR2 (255); v_ins_kenmerk_key11 VARCHAR2 (255); v_ins_kenmerk_key12 VARCHAR2 (255); v_ins_kenmerk_key13 VARCHAR2 (255); v_ins_kenmerk_key14 VARCHAR2 (255); v_ins_kenmerk_key15 VARCHAR2 (255); v_ins_kenmerk_key16 VARCHAR2 (255); v_ins_kenmerk_key17 VARCHAR2 (255); v_ins_kenmerk_key18 VARCHAR2 (255); v_ins_kenmerk_key19 VARCHAR2 (255); v_ins_kenmerk_key20 VARCHAR2 (255); -- De importvelden v_ins_discipline_omschrijving VARCHAR2 (255); -- C60 v_ins_discipline_kostensoort VARCHAR2 (255); --C60 v_ins_srtgroep_omschrijving VARCHAR2 (255); -- C60 v_ins_srtdeel_code VARCHAR2 (255); -- C10 v_ins_srtdeel_omschrijving VARCHAR2 (255); -- C100 v_ins_deel_omschrijving VARCHAR2 (255); -- C60 v_ins_deel_opmerking VARCHAR2 (1000); -- C320 v_ins_deel_externnr VARCHAR2 (255); -- C60 v_alg_locatie_code VARCHAR2 (255); -- C10 v_alg_gebouw_code VARCHAR2 (255); -- C12 v_oprognose_gebouw_code VARCHAR2 (255); v_alg_verdieping_volgnr VARCHAR2 (255); -- N3 v_alg_ruimte_nr VARCHAR2 (255); -- C20 v_ins_kenmerkwaarde1 VARCHAR2 (4053); v_ins_kenmerkwaarde2 VARCHAR2 (4053); v_ins_kenmerkwaarde3 VARCHAR2 (4053); v_ins_kenmerkwaarde4 VARCHAR2 (4053); v_ins_kenmerkwaarde5 VARCHAR2 (4053); v_ins_kenmerkwaarde6 VARCHAR2 (4053); v_ins_kenmerkwaarde7 VARCHAR2 (4053); v_ins_kenmerkwaarde8 VARCHAR2 (4053); v_ins_kenmerkwaarde9 VARCHAR2 (4053); v_ins_kenmerkwaarde10 VARCHAR2 (4053); v_ins_kenmerkwaarde11 VARCHAR2 (4053); v_ins_kenmerkwaarde12 VARCHAR2 (4053); v_ins_kenmerkwaarde13 VARCHAR2 (4053); v_ins_kenmerkwaarde14 VARCHAR2 (4053); v_ins_kenmerkwaarde15 VARCHAR2 (4053); v_ins_kenmerkwaarde16 VARCHAR2 (4053); v_ins_kenmerkwaarde17 VARCHAR2 (4053); v_ins_kenmerkwaarde18 VARCHAR2 (4053); v_ins_kenmerkwaarde19 VARCHAR2 (4053); v_ins_kenmerkwaarde20 VARCHAR2 (4053); v_ins_deel_aanmaak VARCHAR2 (255); -- DATE v_ins_deel_aanmaak_d DATE; v_ins_deel_vervaldatum VARCHAR2 (255); -- DATE v_ins_deel_vervaldatum_d DATE; v_ins_deel_aantal VARCHAR2 (255); -- N8,2 v_ins_deel_aantal_n NUMBER(8, 2); v_file_index NUMBER; v_alg_gebouw_key NUMBER; v_alg_verdieping_key NUMBER; v_alg_ruimte_key NUMBER; v_ins_deel_key NUMBER; v_ins_srtdeel_key NUMBER; v_ins_srtgroep_key NUMBER; v_ins_discipline_key NUMBER; v_ins_deel_volgnr NUMBER; -- Overige velden: CURSOR c1 IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; CURSOR c IS SELECT * FROM fac_imp_ins ORDER BY alg_gebouw_code, ins_deel_omschrijving; -- Controleer tijdens import-fase alleen op het bestaan van een kenmerk met de meegegeven omschrijving of kenmerk key. -- De omschrijving (header van kolom) kan de omschrijving zijn van het kenmerksoort of het kenmerk. -- De omschrijving van het kenmerksoort kan namelijk overruled worden door de omschrijving van het kenmerk. -- Daarnaast kan hetzelfde kenmerk vaker voorkomen voor verschillende groepen. -- Of het kenmerksoort/kenmerk wel is gedefinieerd voor de betreffende -- object-discipline/groep/soort, volgt pas tijdens de update-fase)! -- -- p_kw is bijvoorbeeld 'Parkeercode', 'Parkeercode|3', 234 of 234|3 waarbij de tweede en laatste in groep 3 zitten -- het resultaat is NULL (als niet gevonden) of Parkeercode|3 of 234|3 voor kenmer_key 234 in groep 3 -- Als geen groep is meegegeven dan wordt 'Parkeercode|0' opgeleverd (de default groep) FUNCTION bepaal_kenmerk (p_kw IN VARCHAR) RETURN VARCHAR IS v_kenmerk_key NUMBER; v_kenmerk_groep NUMBER; v_kw VARCHAR(250); BEGIN v_kenmerk_groep := 0; v_kw := p_kw; IF INSTR (v_kw, '|') > 1 THEN v_kenmerk_groep := SUBSTR (v_kw, INSTR (v_kw, '|') + 1); v_kw := SUBSTR (v_kw, 1, INSTR (v_kw, '|') - 1); END IF; IF fac.safe_to_number (v_kw) IS NULL THEN -- kenmerkwaarde is alfanumeriek (dus omschrijving)! SELECT MIN(k.ins_kenmerk_key) INTO v_kenmerk_key FROM ins_v_aanwezigkenmerk k, ins_v_aanwezigsrtkenmerk sk WHERE k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key AND k.ins_kenmerk_groep = v_kenmerk_groep AND COALESCE(UPPER(k.ins_kenmerk_omschrijving), sk.ins_srtkenmerk_upper) = UPPER(v_kw) AND sk.ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B', 'V'); ELSE -- kenmerkwaarde is numeriek (dus key)! SELECT k.ins_kenmerk_key INTO v_kenmerk_key FROM ins_v_aanwezigkenmerk k, ins_v_aanwezigsrtkenmerk sk WHERE k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key AND k.ins_kenmerk_groep = v_kenmerk_groep AND k.ins_kenmerk_key = fac.safe_to_number (v_kw) AND sk.ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B', 'V'); END IF; IF v_kenmerk_key IS NULL THEN RETURN NULL; ELSE -- Er is een kenmerksoort of kenmerk aanwezig met de omschrijving/kenmerk_key (v_kw) RETURN v_kw || '|' || TO_CHAR(v_kenmerk_groep); END IF; EXCEPTION WHEN NO_DATA_FOUND THEN IF p_kw IS NULL OR UPPER (p_kw) LIKE 'KENMERK%' THEN RETURN NULL; ELSE fac.imp_writelog (p_import_key, 'W', 'Fout bij bepalen kenmerk [' || p_kw || ']', 'Bestaat niet of type ongeldig'); COMMIT; RETURN NULL; END IF; END; BEGIN -- Eerst opruiming DELETE FROM fac_imp_ins; COMMIT; v_count_tot := 0; v_count_import := 0; header_is_valid := 0; FOR rec1 IN c1 LOOP BEGIN v_newline := rec1.fac_imp_file_line; v_file_index := rec1.fac_imp_file_index; v_errormsg := 'Fout bij opvragen importregel'; v_aanduiding := ''; v_ongeldig := 0; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_delim, v_oprognose_gebouw_code); -- Objectcode fac.imp_getfield (v_newline, c_delim, v_ins_srtdeel_code); -- Componentcode fac.imp_getfield (v_newline, c_delim, v_ins_deel_externnr); -- Element-ID fac.imp_getfield (v_newline, c_delim, v_ins_deel_opmerking); -- Component omschrijving -- fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde1); -- Opmerkingen// fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde2); -- Fabrikant fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde3); -- Kenmerken fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde4); -- Type fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde5); -- Cap fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde6); -- Eenheid Cap fac.imp_getfield (v_newline, c_delim, v_ins_deel_aantal); -- Aantal fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde7); -- Eenheid aantal fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde8); -- Bouwjaar fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde9); -- Foto fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde10); fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde11); fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde12); fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde13); fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde14); fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde15); fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde16); fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde17); fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde18); fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde19); fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde20); v_aanduiding := '[' || v_alg_gebouw_code || '|' || v_ins_deel_externnr || '|' || v_ins_srtdeel_code || '] '; -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen -- de juiste kolomkop. Ik controleer daarbij alle NIET-kenmerk kolommen! -- Ik negeer alles totdat ik een geldige header ben gepasseerd. IF (header_is_valid = 0) THEN IF UPPER (v_oprognose_gebouw_code) = 'GEBOUW_CODE' AND UPPER (v_ins_srtdeel_code) = 'SRTDEEL_CODE' AND UPPER (v_ins_deel_externnr) = 'DEEL_EXTERNNR' AND UPPER (v_ins_deel_opmerking) = 'DEEL_OPMERKING' AND UPPER (v_ins_kenmerkwaarde2) = 'FABRIKANT' AND UPPER (v_ins_kenmerkwaarde3) = 'OPMERKINGEN' AND UPPER (v_ins_kenmerkwaarde4) = 'TYPE' AND UPPER (v_ins_kenmerkwaarde5) = 'CAP' AND UPPER (v_ins_kenmerkwaarde6) = 'EENHEID CAP' AND UPPER (v_ins_deel_aantal) = 'DEEL_AANTAL' AND UPPER (v_ins_kenmerkwaarde7) = 'EENHEID AANTAL' AND UPPER (v_ins_kenmerkwaarde8) = 'BOUWJAAR' AND UPPER (v_ins_kenmerkwaarde9) = 'FOTO' THEN v_ins_kenmerk_key1 := bepaal_kenmerk (v_ins_kenmerkwaarde1); v_ins_kenmerk_key2 := bepaal_kenmerk (v_ins_kenmerkwaarde2); v_ins_kenmerk_key3 := bepaal_kenmerk (v_ins_kenmerkwaarde3); v_ins_kenmerk_key4 := bepaal_kenmerk (v_ins_kenmerkwaarde4); v_ins_kenmerk_key5 := bepaal_kenmerk (v_ins_kenmerkwaarde5); v_ins_kenmerk_key6 := bepaal_kenmerk (v_ins_kenmerkwaarde6); v_ins_kenmerk_key7 := bepaal_kenmerk (v_ins_kenmerkwaarde7); v_ins_kenmerk_key8 := bepaal_kenmerk (v_ins_kenmerkwaarde8); v_ins_kenmerk_key9 := bepaal_kenmerk (v_ins_kenmerkwaarde9); v_ins_kenmerk_key10 := bepaal_kenmerk (v_ins_kenmerkwaarde10); v_ins_kenmerk_key11 := bepaal_kenmerk (v_ins_kenmerkwaarde11); v_ins_kenmerk_key12 := bepaal_kenmerk (v_ins_kenmerkwaarde12); v_ins_kenmerk_key13 := bepaal_kenmerk (v_ins_kenmerkwaarde13); v_ins_kenmerk_key14 := bepaal_kenmerk (v_ins_kenmerkwaarde14); v_ins_kenmerk_key15 := bepaal_kenmerk (v_ins_kenmerkwaarde15); v_ins_kenmerk_key16 := bepaal_kenmerk (v_ins_kenmerkwaarde16); v_ins_kenmerk_key17 := bepaal_kenmerk (v_ins_kenmerkwaarde17); v_ins_kenmerk_key18 := bepaal_kenmerk (v_ins_kenmerkwaarde18); v_ins_kenmerk_key19 := bepaal_kenmerk (v_ins_kenmerkwaarde19); v_ins_kenmerk_key20 := bepaal_kenmerk (v_ins_kenmerkwaarde20); header_is_valid := 1; ELSE IF rec1.fac_imp_file_index = 1 THEN fac.imp_writelog (p_import_key, 'E', 'Ongeldige header aangetroffen:', 'GEBOUW_CODE: ' || UPPER (v_oprognose_gebouw_code) || CHR(10) || 'SRTDEEL_CODE: ' || UPPER (v_ins_srtdeel_code) || CHR(10) || 'DEEL_EXTERNNR: ' || UPPER (v_ins_deel_externnr) || CHR(10) || 'DEEL_OPMERKING: ' || UPPER (v_ins_deel_opmerking) || CHR(10) || 'FABRIKANT: ' || UPPER (v_ins_kenmerkwaarde2) || CHR(10) || 'OPMERKINGEN: ' || UPPER (v_ins_kenmerkwaarde3) || CHR(10) || 'TYPE: ' || UPPER (v_ins_kenmerkwaarde4) || CHR(10) || 'CAP: ' || UPPER (v_ins_kenmerkwaarde5) || CHR(10) || 'EENHEID CAP: ' || UPPER (v_ins_kenmerkwaarde6) || CHR(10) || 'DEEL_AANTAL: ' || UPPER (v_ins_deel_aantal) || CHR(10) || 'EENHEID AANTAL: ' || UPPER (v_ins_kenmerkwaarde7) || CHR(10) || 'BOUWJAAR: ' || UPPER (v_ins_kenmerkwaarde8) || CHR(10) || 'FOTO: ' || UPPER (v_ins_kenmerkwaarde9)); END IF; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden v_errormsg := 'Gebouwcode kan niet gevonden worden'; v_oprognose_gebouw_code := TRIM (v_oprognose_gebouw_code); SELECT alg_gebouw_key, alg_gebouw_code, alg_locatie_code INTO v_alg_gebouw_key, v_alg_gebouw_code, v_alg_locatie_code FROM alg_gebouw g, alg_locatie l, alg_onrgoedkenmerk aok, alg_kenmerk ak WHERE g.alg_locatie_key = l.alg_locatie_key AND alg_gebouw_verwijder IS NULL AND aok.alg_onrgoed_key = g.alg_gebouw_key AND aok.alg_onrgoed_niveau='G' AND ak.alg_kenmerk_key = aok.alg_kenmerk_key AND ak.alg_kenmerk_code='OPROGNOSE_CODE' AND UPPER(aok.alg_onrgoedkenmerk_waarde) = UPPER(v_oprognose_gebouw_code); v_alg_verdieping_volgnr := 0; BEGIN SELECT alg_verdieping_key INTO v_alg_verdieping_key FROM alg_verdieping WHERE alg_verdieping_verwijder IS NULL AND alg_gebouw_key = v_alg_gebouw_key AND alg_verdieping_volgnr = 0; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO alg_verdieping (alg_gebouw_key, alg_verdieping_volgnr, alg_verdieping_omschrijving, alg_verdieping_code) VALUES (v_alg_gebouw_key, 0, 'Begane grond', '0') RETURNING alg_verdieping_key INTO v_alg_verdieping_key; fac.imp_writelog (p_import_key, 'I', v_aanduiding, 'Verdieping aangemaakt'); END; v_alg_ruimte_nr := '_'; BEGIN SELECT alg_ruimte_key INTO v_alg_ruimte_key FROM alg_ruimte WHERE alg_ruimte_verwijder IS NULL AND alg_verdieping_key = v_alg_verdieping_key AND alg_ruimte_nr = '_'; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO alg_ruimte (alg_verdieping_key, alg_ruimte_nr, alg_ruimte_omschrijving) VALUES (v_alg_verdieping_key, '_', 'MJOP ruimte') RETURNING alg_ruimte_key INTO v_alg_ruimte_key; fac.imp_writelog (p_import_key, 'I', v_aanduiding, 'Ruimte aangemaakt'); END; -- v_errormsg := 'Bepaal objectsoort'; BEGIN v_ins_srtdeel_code := TRIM(v_ins_srtdeel_code); SELECT ins_srtdeel_omschrijving, ins_srtdeel_key, ins_srtgroep_key INTO v_ins_srtdeel_omschrijving, v_ins_srtdeel_key, v_ins_srtgroep_key FROM ins_srtdeel WHERE ins_srtdeel_verwijder IS NULL AND ins_srtdeel_code = SUBSTR(v_ins_srtdeel_code,1,4); v_errormsg := 'Bepaal objectgroep'; SELECT ins_srtgroep_omschrijving, ins_discipline_key INTO v_ins_srtgroep_omschrijving, v_ins_discipline_key FROM ins_srtgroep WHERE ins_srtgroep_key = v_ins_srtgroep_key; v_errormsg := 'Bepaal discipline'; SELECT ins_discipline_omschrijving INTO v_ins_discipline_omschrijving FROM ins_discipline WHERE ins_discipline_key = v_ins_discipline_key; EXCEPTION WHEN NO_DATA_FOUND THEN v_errormsg := 'Nieuwe NL/SfB code'; v_ins_discipline_omschrijving := 'MJOB'; v_ins_srtdeel_omschrijving := SUBSTR(v_ins_srtdeel_code,1,4) || '-Onbekend'; BEGIN SELECT ins_srtgroep_omschrijving INTO v_ins_srtgroep_omschrijving FROM ins_v_srtgroep_gegevens WHERE ins_discipline_omschrijving = 'MJOB' AND SUBSTR(v_ins_srtdeel_code, 1, 2) = SUBSTR(ins_srtgroep_omschrijving, 1,2); EXCEPTION WHEN NO_DATA_FOUND THEN v_ins_srtgroep_omschrijving := SUBSTR(v_ins_srtdeel_code, 1, 2) || '-Onbekend'; END; END; BEGIN v_errormsg := 'Bepaal object id - Kijk of het externnr bestaat'; SELECT d.ins_deel_omschrijving INTO v_ins_deel_omschrijving FROM ins_v_deel_gegevens dg, ins_deel d WHERE dg.ins_deel_key = d.ins_deel_key AND dg.alg_gebouw_upper = v_alg_gebouw_code AND d.ins_deel_externnr = v_ins_deel_externnr; EXCEPTION WHEN NO_DATA_FOUND THEN v_ins_deel_omschrijving := NULL; END; IF v_ins_deel_omschrijving IS NULL THEN v_errormsg := 'Bepaal object id - maak een nieuw nummer aan'; SELECT MAX(FAC.safe_to_number(SUBSTR(ins_deel_omschrijving, INSTR(ins_deel_omschrijving, '-')+1, 100))) INTO v_ins_deel_volgnr FROM ins_v_deel_gegevens WHERE ins_discipline_omschrijving = 'MJOB' AND ins_deel_omschrijving LIKE v_ins_srtdeel_code || '%'; IF v_ins_deel_volgnr IS NULL THEN v_ins_deel_volgnr := 0; END IF; -- v_ins_deel_omschrijving := v_ins_srtdeel_code || LPAD(v_ins_deel_volgnr + 1, 3, '0'); v_ins_deel_omschrijving := v_ins_srtdeel_code||'-'||v_ins_deel_externnr; END IF; v_errormsg := 'Objectopmerking ongeldig'; v_ins_deel_opmerking := TRIM (v_ins_deel_opmerking); IF LENGTH (v_ins_deel_opmerking) > 320 THEN v_ins_deel_opmerking := SUBSTR (v_ins_deel_opmerking, 1, 320); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Objectopmerking wordt afgebroken tot [' || v_ins_deel_opmerking || ']' ); END IF; -- v_errormsg := 'Aantal ongeldig; maximale grootte 999999.99'; v_ins_deel_aantal := TRIM (v_ins_deel_aantal); v_ins_deel_aantal := REPLACE (v_ins_deel_aantal, ',', '.'); v_ins_deel_aantal_n := NULL; IF (v_ins_deel_aantal IS NOT NULL AND fac.getSetting('ins_explode_objects') = 0) THEN IF (fac.safe_to_number (v_ins_deel_aantal) IS NULL) THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); ELSE v_ins_deel_aantal_n := fac.safe_to_number (v_ins_deel_aantal); END IF; ELSE v_ins_deel_aantal_n := 1; END IF; -- v_errorhint := 'Bepaling registratiedatum'; v_ins_kenmerkwaarde8 := TRIM(v_ins_kenmerkwaarde8); IF v_ins_kenmerkwaarde8 IS NOT NULL AND LENGTH(v_ins_kenmerkwaarde8) = 4 THEN v_ins_deel_aanmaak := '01-01-' || TRIM(v_ins_kenmerkwaarde8); v_ins_deel_aanmaak_d := TO_DATE(v_ins_deel_aanmaak, 'dd-mm-yyyy'); END IF; -- De rest alleen ff trimmen. v_ins_kenmerkwaarde1 := TRIM (v_ins_kenmerkwaarde1); v_ins_kenmerkwaarde2 := TRIM (v_ins_kenmerkwaarde2); v_ins_kenmerkwaarde3 := TRIM (v_ins_kenmerkwaarde3); v_ins_kenmerkwaarde4 := TRIM (v_ins_kenmerkwaarde4); v_ins_kenmerkwaarde5 := TRIM (v_ins_kenmerkwaarde5); v_ins_kenmerkwaarde6 := TRIM (v_ins_kenmerkwaarde6); v_ins_kenmerkwaarde7 := TRIM (v_ins_kenmerkwaarde7); v_ins_kenmerkwaarde8 := TRIM (v_ins_kenmerkwaarde8); v_ins_kenmerkwaarde9 := TRIM (v_ins_kenmerkwaarde9); v_ins_kenmerkwaarde10 := TRIM (v_ins_kenmerkwaarde10); v_ins_kenmerkwaarde11 := TRIM (v_ins_kenmerkwaarde11); v_ins_kenmerkwaarde12 := TRIM (v_ins_kenmerkwaarde12); v_ins_kenmerkwaarde13 := TRIM (v_ins_kenmerkwaarde13); v_ins_kenmerkwaarde14 := TRIM (v_ins_kenmerkwaarde14); v_ins_kenmerkwaarde15 := TRIM (v_ins_kenmerkwaarde15); v_ins_kenmerkwaarde16 := TRIM (v_ins_kenmerkwaarde16); v_ins_kenmerkwaarde17 := TRIM (v_ins_kenmerkwaarde17); v_ins_kenmerkwaarde18 := TRIM (v_ins_kenmerkwaarde18); v_ins_kenmerkwaarde19 := TRIM (v_ins_kenmerkwaarde19); v_ins_kenmerkwaarde20 := TRIM (v_ins_kenmerkwaarde20); -- Insert geformatteerde import record IF v_ongeldig = 0 THEN BEGIN v_errormsg := 'Fout bij wegschrijven importregel'; -- Als uit kenmerkheader een geldige kenmerksoort-key volgt, -- dan is kenmerkwaarde gevuld met =; zoniet, -- dan is kenmerkwaarde gevuld met ! -- NB. Een NULL-waarde resulteert NIET in het wissen van een -- kenmerkveld (bijwerken kan wel, maar wissen dus niet)! INSERT INTO fac_imp_ins ( ins_discipline_omschrijving, ins_discipline_kostensoort, ins_srtgroep_omschrijving, ins_srtdeel_code, ins_srtdeel_omschrijving, ins_deel_omschrijving, ins_deel_opmerking, alg_locatie_code, alg_gebouw_code, alg_verdieping_volgnr, alg_ruimte_nr, ins_kenmerkwaarde1, ins_kenmerkwaarde2, ins_kenmerkwaarde3, ins_kenmerkwaarde4, ins_kenmerkwaarde5, ins_kenmerkwaarde6, ins_kenmerkwaarde7, ins_kenmerkwaarde8, ins_kenmerkwaarde9, ins_kenmerkwaarde10, ins_kenmerkwaarde11, ins_kenmerkwaarde12, ins_kenmerkwaarde13, ins_kenmerkwaarde14, ins_kenmerkwaarde15, ins_kenmerkwaarde16, ins_kenmerkwaarde17, ins_kenmerkwaarde18, ins_kenmerkwaarde19, ins_kenmerkwaarde20, ins_deel_aanmaak, ins_deel_aantal, ins_deel_externnr ) VALUES ( v_ins_discipline_omschrijving, v_ins_discipline_kostensoort, v_ins_srtgroep_omschrijving, SUBSTR(v_ins_srtdeel_code,1,4), v_ins_srtdeel_omschrijving, v_ins_deel_omschrijving, v_ins_deel_opmerking, v_alg_locatie_code, v_alg_gebouw_code, v_alg_verdieping_volgnr, v_alg_ruimte_nr, DECODE (v_ins_kenmerk_key1, NULL, v_ins_kenmerkwaarde1, DECODE(v_ins_kenmerk_key1, NULL, NULL, TO_CHAR (v_ins_kenmerk_key1) || '=' || SUBSTR (v_ins_kenmerkwaarde1, 1, 3900))), DECODE (v_ins_kenmerk_key2, NULL, v_ins_kenmerkwaarde2, DECODE(v_ins_kenmerk_key2, NULL, NULL, TO_CHAR (v_ins_kenmerk_key2) || '=' || SUBSTR (v_ins_kenmerkwaarde2, 1, 3900))), DECODE (v_ins_kenmerk_key3, NULL, v_ins_kenmerkwaarde3, DECODE(v_ins_kenmerk_key3, NULL, NULL, TO_CHAR (v_ins_kenmerk_key3) || '=' || SUBSTR (v_ins_kenmerkwaarde3, 1, 3900))), DECODE (v_ins_kenmerk_key4, NULL, v_ins_kenmerkwaarde4, DECODE(v_ins_kenmerk_key4, NULL, NULL, TO_CHAR (v_ins_kenmerk_key4) || '=' || SUBSTR (v_ins_kenmerkwaarde4, 1, 3900))), DECODE (v_ins_kenmerk_key5, NULL, v_ins_kenmerkwaarde5, DECODE(v_ins_kenmerk_key5, NULL, NULL, TO_CHAR (v_ins_kenmerk_key5) || '=' || SUBSTR (v_ins_kenmerkwaarde5, 1, 3900))), DECODE (v_ins_kenmerk_key6, NULL, v_ins_kenmerkwaarde6, DECODE(v_ins_kenmerk_key6, NULL, NULL, TO_CHAR (v_ins_kenmerk_key6) || '=' || SUBSTR (v_ins_kenmerkwaarde6, 1, 3900))), DECODE (v_ins_kenmerk_key7, NULL, v_ins_kenmerkwaarde7, DECODE(v_ins_kenmerk_key7, NULL, NULL, TO_CHAR (v_ins_kenmerk_key7) || '=' || SUBSTR (v_ins_kenmerkwaarde7, 1, 3900))), DECODE (v_ins_kenmerk_key8, NULL, v_ins_kenmerkwaarde8, DECODE(v_ins_kenmerk_key8, NULL, NULL, TO_CHAR (v_ins_kenmerk_key8) || '=' || SUBSTR (v_ins_kenmerkwaarde8, 1, 3900))), DECODE (v_ins_kenmerk_key9, NULL, v_ins_kenmerkwaarde9, DECODE(v_ins_kenmerk_key9, NULL, NULL, TO_CHAR (v_ins_kenmerk_key9) || '=' || SUBSTR (v_ins_kenmerkwaarde9, 1, 3900))), DECODE (v_ins_kenmerk_key10, NULL, v_ins_kenmerkwaarde10, DECODE(v_ins_kenmerk_key10, NULL, NULL, TO_CHAR (v_ins_kenmerk_key10) || '=' || SUBSTR (v_ins_kenmerkwaarde10, 1, 3900))), DECODE (v_ins_kenmerk_key11, NULL, v_ins_kenmerkwaarde11, DECODE(v_ins_kenmerk_key11, NULL, NULL, TO_CHAR (v_ins_kenmerk_key11) || '=' || SUBSTR (v_ins_kenmerkwaarde11, 1, 3900))), DECODE (v_ins_kenmerk_key12, NULL, v_ins_kenmerkwaarde12, DECODE(v_ins_kenmerk_key12, NULL, NULL, TO_CHAR (v_ins_kenmerk_key12) || '=' || SUBSTR (v_ins_kenmerkwaarde12, 1, 3900))), DECODE (v_ins_kenmerk_key13, NULL, v_ins_kenmerkwaarde13, DECODE(v_ins_kenmerk_key13, NULL, NULL, TO_CHAR (v_ins_kenmerk_key13) || '=' || SUBSTR (v_ins_kenmerkwaarde13, 1, 3900))), DECODE (v_ins_kenmerk_key14, NULL, v_ins_kenmerkwaarde14, DECODE(v_ins_kenmerk_key14, NULL, NULL, TO_CHAR (v_ins_kenmerk_key14) || '=' || SUBSTR (v_ins_kenmerkwaarde14, 1, 3900))), DECODE (v_ins_kenmerk_key15, NULL, v_ins_kenmerkwaarde15, DECODE(v_ins_kenmerk_key15, NULL, NULL, TO_CHAR (v_ins_kenmerk_key15) || '=' || SUBSTR (v_ins_kenmerkwaarde15, 1, 3900))), DECODE (v_ins_kenmerk_key16, NULL, v_ins_kenmerkwaarde16, DECODE(v_ins_kenmerk_key16, NULL, NULL, TO_CHAR (v_ins_kenmerk_key16) || '=' || SUBSTR (v_ins_kenmerkwaarde16, 1, 3900))), DECODE (v_ins_kenmerk_key17, NULL, v_ins_kenmerkwaarde17, DECODE(v_ins_kenmerk_key17, NULL, NULL, TO_CHAR (v_ins_kenmerk_key17) || '=' || SUBSTR (v_ins_kenmerkwaarde17, 1, 3900))), DECODE (v_ins_kenmerk_key18, NULL, v_ins_kenmerkwaarde18, DECODE(v_ins_kenmerk_key18, NULL, NULL, TO_CHAR (v_ins_kenmerk_key18) || '=' || SUBSTR (v_ins_kenmerkwaarde18, 1, 3900))), DECODE (v_ins_kenmerk_key19, NULL, v_ins_kenmerkwaarde19, DECODE(v_ins_kenmerk_key19, NULL, NULL, TO_CHAR (v_ins_kenmerk_key19) || '=' || SUBSTR (v_ins_kenmerkwaarde19, 1, 3900))), DECODE (v_ins_kenmerk_key20, NULL, v_ins_kenmerkwaarde20, DECODE(v_ins_kenmerk_key20, NULL, NULL, TO_CHAR (v_ins_kenmerk_key20) || '=' || SUBSTR (v_ins_kenmerkwaarde20, 1, 3900))), v_ins_deel_aanmaak_d, v_ins_deel_aantal_n, v_ins_deel_externnr ); COMMIT; v_count_import := v_count_import + 1; END; END IF; END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, ''); COMMIT; END; END LOOP; IF (header_is_valid = 1) THEN fac.imp_writelog ( p_import_key, 'S', 'Objecten/aantal ingelezen importregels: ' || TO_CHAR (v_count_tot), '' ); fac.imp_writelog ( p_import_key, 'S', 'Objecten/aantal ongeldige niet ingelezen importregels: ' || TO_CHAR (v_count_tot - v_count_import), '' ); END IF; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Inleesproces objecten afgebroken! regel:' || v_file_index); END; / CREATE OR REPLACE PROCEDURE zlmv_update_mjobelementen ( p_import_key IN NUMBER) IS v_aanduiding VARCHAR (400); v_kenmerk_foto NUMBER; BEGIN fac_update_ins (p_import_key); BEGIN v_aanduiding:='Ophalen oprognose kenmerk key is mislukt'; SELECT i.ins_kenmerk_key INTO v_kenmerk_foto FROM ins_kenmerk i where i.ins_kenmerk_code='OPROGNOSE_FOTO' AND i.ins_kenmerk_verwijder IS NULL; UPDATE ins_deel i SET i.ins_deel_image = (SELECT ins_kenmerkdeel_waarde FROM ins_kenmerkdeel WHERE ins_deel_key=i.ins_deel_key AND ins_kenmerk_key=v_kenmerk_foto) WHERE i.ins_deel_key IN (SELECT ins_deel_key FROM ins_kenmerkdeel WHERE ins_kenmerk_key=v_kenmerk_foto); EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Afbeelding objecten updaten !'); END; END; / -- EINE MJOB Elementen Import CREATE OR REPLACE PROCEDURE zlmv_import_mjobtaken (p_import_key IN NUMBER) IS c_delim VARCHAR2 (2) := fac.import_delimiter(p_import_key); v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line v_errormsg VARCHAR2 (1000); v_errorhint VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); header_is_valid NUMBER; v_count_tot NUMBER (10); v_count_import NUMBER (10); v_ongeldig NUMBER (1); v_aanduiding VARCHAR (400); v_dummy VARCHAR (255); v_oprognose_gebouw_code VARCHAR2 (255); v_alg_gebouw_code VARCHAR2 (255); --VARCHAR2(12), v_alg_locatie_code VARCHAR2 (255); --VARCHAR2(12), v_ins_deel_externnr VARCHAR2 (255); --VARCHAR2(256), v_ins_deel_omschrijving VARCHAR2 (255); --VARCHAR2(60), v_ins_srtcontrole_omschrijving VARCHAR2 (255); --VARCHAR2(60), v_ins_srtcontrole_level VARCHAR2 (255); --NUMBER(3), v_ins_srtcontroledl_xcp_materia VARCHAR2 (255); --NUMBER(9,2), v_ins_srtcontroledl_xcp_aantal VARCHAR2 (255); --NUMBER(8,2), v_ins_srtcontroledl_xcp_startdat VARCHAR2 (255); --DATE, v_ins_srtcontroledl_xcp_periode VARCHAR2 (255); --NUMBER(6,2) v_ins_srtcontroledl_xcp_perc VARCHAR2 (255); --NUMBER(3) v_ins_srtcontroledl_xcp_eenh VARCHAR2 (255); v_ins_srtcontrole_btw VARCHAR2 (255); v_file_index 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 v_count_tot := 0; v_count_import := 0; header_is_valid := 0; FOR rec1 IN c1 LOOP BEGIN v_newline := rec1.fac_imp_file_line; v_file_index := rec1.fac_imp_file_index; v_errormsg := 'Fout bij opvragen importregel'; v_aanduiding := ''; v_ongeldig := 0; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_delim, v_oprognose_gebouw_code); fac.imp_getfield (v_newline, c_delim, v_ins_deel_externnr); fac.imp_getfield (v_newline, c_delim, v_ins_deel_omschrijving); fac.imp_getfield (v_newline, c_delim, v_ins_srtcontrole_omschrijving); fac.imp_getfield (v_newline, c_delim, v_ins_srtcontroledl_xcp_materia); fac.imp_getfield (v_newline, c_delim, v_ins_srtcontroledl_xcp_aantal); fac.imp_getfield (v_newline, c_delim, v_ins_srtcontrole_level); fac.imp_getfield (v_newline, c_delim, v_ins_srtcontroledl_xcp_startdat); fac.imp_getfield (v_newline, c_delim, v_ins_srtcontroledl_xcp_periode); fac.imp_getfield (v_newline, c_delim, v_ins_srtcontroledl_xcp_perc); fac.imp_getfield (v_newline, c_delim, v_ins_srtcontroledl_xcp_eenh); fac.imp_getfield (v_newline, c_delim, v_ins_srtcontrole_btw); v_aanduiding := '[' || v_alg_gebouw_code || '|' || v_ins_deel_externnr || '|' || v_ins_deel_omschrijving || '|' || v_ins_srtcontrole_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_oprognose_gebouw_code) = 'GEBOUW_CODE' AND UPPER (v_ins_deel_externnr) = 'DEEL_EXTERNNR' AND UPPER (v_ins_deel_omschrijving) = 'DEEL_OMSCHRIJVING' AND UPPER (v_ins_srtcontrole_omschrijving) = 'SRTCONTROLE_OMSCHRIJVING' AND UPPER (v_ins_srtcontroledl_xcp_materia) = 'SRTCONTROLEDL_XCP_MATERIA' AND UPPER (v_ins_srtcontroledl_xcp_aantal) = 'SRTCONTROLEDL_XCP_AANTAL' AND UPPER (v_ins_srtcontrole_level) = 'SRTCONTROLE_LEVEL' AND UPPER (v_ins_srtcontroledl_xcp_startdat) = 'SRTCONTROLE_STARTJAAR' AND UPPER (v_ins_srtcontroledl_xcp_periode) = 'SRTCONTROLE_PERIODE' AND UPPER (v_ins_srtcontroledl_xcp_perc) = 'SRTCONTROLE_PERCENTAGE' AND UPPER (v_ins_srtcontroledl_xcp_eenh) = 'SRTCONTROLE_EENHEID' AND UPPER (v_ins_srtcontrole_btw) = 'SRTCONTROLE_BTW' THEN header_is_valid := 1; ELSE IF rec1.fac_imp_file_index = 1 THEN fac.imp_writelog (p_import_key, 'E', 'Ongeldige header aangetroffen:', 'GEBOUW_CODE: ' || UPPER (v_oprognose_gebouw_code) || CHR(10) || 'DEEL_EXTERNNR: ' || UPPER (v_ins_deel_externnr) || CHR(10) || 'DEEL_OMSCHRIJVING: ' || UPPER (v_ins_deel_omschrijving) || CHR(10) || 'SRTCONTROLE_OMSCHRIJVING: ' || UPPER (v_ins_srtcontrole_omschrijving) || CHR(10) || 'SRTCONTROLEDL_XCP_MATERIA: ' || UPPER (v_ins_srtcontroledl_xcp_materia) || CHR(10) || 'SRTCONTROLEDL_XCP_AANTAL: ' || UPPER (v_ins_srtcontroledl_xcp_aantal) || CHR(10) || 'SRTCONTROLE_LEVEL: ' || UPPER (v_ins_srtcontrole_level) || CHR(10) || 'SRTCONTROLE_STARTJAAR: ' || UPPER (v_ins_srtcontroledl_xcp_startdat) || CHR(10) || 'SRTCONTROLE_PERIODE: ' || UPPER (v_ins_srtcontroledl_xcp_periode) || CHR(10) || 'SRTCONTROLE_PERCENTAGE: ' || UPPER (v_ins_srtcontroledl_xcp_perc)); END IF; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden v_errormsg := 'Gebouwcode kan niet gevonden worden'; v_oprognose_gebouw_code := TRIM (v_oprognose_gebouw_code); BEGIN SELECT g.alg_gebouw_code, l.alg_locatie_code INTO v_alg_gebouw_code, v_alg_locatie_code FROM alg_gebouw g, alg_onrgoedkenmerk aok, alg_kenmerk ak, alg_locatie l WHERE g.alg_gebouw_verwijder IS NULL AND aok.alg_onrgoed_key = g.alg_gebouw_key AND aok.alg_onrgoed_niveau='G' AND ak.alg_kenmerk_key = aok.alg_kenmerk_key AND ak.alg_kenmerk_code='OPROGNOSE_CODE' AND UPPER(aok.alg_onrgoedkenmerk_waarde) = UPPER(v_oprognose_gebouw_code) AND l.alg_locatie_key=g.alg_locatie_key; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog ( p_import_key, 'E', v_aanduiding || v_errormsg, 'Gebouw is niet gevonden' ); v_ongeldig := 1; END; v_errormsg := 'Object externnr kan niet gevonden worden'; v_ins_deel_externnr := TRIM (v_ins_deel_externnr); IF v_ins_deel_externnr IS NOT NULL THEN BEGIN SELECT 1 INTO v_dummy FROM ins_v_deel_gegevens dg, ins_deel d WHERE dg.ins_deel_key = d.ins_deel_key AND UPPER(d.ins_deel_externnr) = UPPER(v_ins_deel_externnr) AND dg.alg_gebouw_upper = UPPER(v_alg_gebouw_code); EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog ( p_import_key, 'E', v_aanduiding || v_errormsg, 'Object is niet gevonden op extern id ' ); v_ongeldig := 1; END; END IF; v_errormsg := 'Controle op kosten'; IF FAC.safe_to_number(v_ins_srtcontroledl_xcp_materia) IS NULL THEN fac.imp_writelog ( p_import_key, 'E', v_aanduiding || v_errormsg,'' ); v_ongeldig := 1; END IF; v_errormsg := 'Controle op aantal'; IF v_ins_srtcontroledl_xcp_aantal IS NOT NULL AND FAC.safe_to_number(v_ins_srtcontroledl_xcp_aantal) IS NULL THEN fac.imp_writelog ( p_import_key, 'E', v_aanduiding || v_errormsg,'' ); v_ongeldig := 1; END IF; v_errormsg := 'Controle op startjaar'; IF v_ins_srtcontroledl_xcp_startdat IS NOT NULL AND FAC.safe_to_date('01-01-' || v_ins_srtcontroledl_xcp_startdat, 'dd-mm-yyyy') IS NULL THEN fac.imp_writelog ( p_import_key, 'E', v_aanduiding || v_errormsg,'' ); v_ongeldig := 1; END IF; v_errormsg := 'Controle op periode'; IF v_ins_srtcontroledl_xcp_periode IS NOT NULL AND FAC.safe_to_number(v_ins_srtcontroledl_xcp_periode) IS NULL THEN fac.imp_writelog ( p_import_key, 'E', v_aanduiding || v_errormsg,'' ); v_ongeldig := 1; END IF; v_errormsg := 'Controle op percentage'; IF v_ins_srtcontroledl_xcp_perc IS NOT NULL AND FAC.safe_to_number(v_ins_srtcontroledl_xcp_perc) IS NULL THEN fac.imp_writelog ( p_import_key, 'E', v_aanduiding || v_errormsg,'' ); v_ongeldig := 1; END IF; -- 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_csv (FAC_IMPORT_KEY, fac_imp_csv_index, 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) VALUES ( p_import_key, v_file_index, SUBSTR(v_alg_gebouw_code,1,12), SUBSTR(v_ins_deel_externnr,1,256), SUBSTR(v_ins_deel_omschrijving,1,60), SUBSTR(v_ins_srtcontrole_omschrijving,1,60), FAC.safe_to_number(v_ins_srtcontrole_level), FAC.safe_to_number(v_ins_srtcontroledl_xcp_materia), -- de prijs m,oet per stuk zijn. FAC.safe_to_number(v_ins_srtcontroledl_xcp_aantal), '01-01-' || v_ins_srtcontroledl_xcp_startdat, v_ins_srtcontroledl_xcp_periode, FAC.safe_to_number(v_ins_srtcontroledl_xcp_perc), v_ins_srtcontroledl_xcp_eenh, SUBSTR(v_alg_locatie_code,1,12), v_ins_srtcontrole_btw); COMMIT; v_count_import := v_count_import + 1; END; END IF; END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, ''); COMMIT; END; END LOOP; IF (header_is_valid = 1) THEN fac.imp_writelog ( p_import_key, 'S', 'Taken/aantal ingelezen importregels: ' || TO_CHAR (v_count_tot), '' ); fac.imp_writelog ( p_import_key, 'S', 'Taken/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 taken afgebroken! regel:' || v_file_index); END zlmv_import_mjobtaken; / CREATE OR REPLACE PROCEDURE zlmv_update_mjobtaken ( p_import_key IN NUMBER) IS CURSOR c IS SELECT fac_imp_csv_col01 alg_gebouw_code, fac_imp_csv_col02 ins_deel_externnr, fac_imp_csv_col03 ins_deel_omschrijving, fac_imp_csv_col04 ins_srtcontrole_omschrijving, fac_imp_csv_col05 ins_srtcontrole_level, fac_imp_csv_col06 ins_srtcontroledl_xcp_materia, fac_imp_csv_col07 ins_srtcontroledl_xcp_aantal, fac_imp_csv_col08 ins_srtcontroledl_xcp_startdat, fac_imp_csv_col09 ins_srtcontroledl_xcp_periode, fac_imp_csv_col10 ins_srtcontroledl_xcp_perc, fac_imp_csv_col11 ins_srtcontroledl_xcp_eenh, fac_imp_csv_col12 alg_locatie_code, fac_imp_csv_col13 ins_srtcontrole_btw FROM fac_imp_csv WHERE fac_import_key=p_import_key; v_errormsg VARCHAR2 (1000); v_errorhint VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count_tot NUMBER (10); v_count_import NUMBER (10); v_ongeldig NUMBER (1); v_aanduiding VARCHAR (400); v_ins_deel_key NUMBER; v_ins_deel_aantal NUMBER; v_ins_srtdeel_key NUMBER; v_ins_srtcontrole_key NUMBER; v_ins_srtcontroledl_xcp_key NUMBER; v_ctr_discipline_key NUMBER; v_alg_gebouw_key NUMBER; v_ins_srtdeel_code INS_SRTDEEL.INS_SRTDEEL_CODE%TYPE; v_ins_deel_eenheid VARCHAR2(30); v_ins_srtcontroledl_xcp_startdat DATE; v_ins_srtcontroledl_xcp_aantal NUMBER; v_ins_srtcontroledl_xcp_perc NUMBER; v_srtcontrole_btw_key NUMBER; v_refdate DATE; BEGIN SELECT MIN(ctr_ins_discipline_key) INTO v_ctr_discipline_key FROM ctr_disc_params WHERE ctr_disc_params_ismjob = 1; -- controleer op verwijderde records FOR rec IN c LOOP BEGIN v_ins_deel_key := NULL; v_aanduiding := rec.alg_gebouw_code || '|' || rec.ins_deel_omschrijving || '|' || rec.ins_deel_externnr || '|' || rec.ins_srtcontrole_omschrijving; v_errormsg := 'Gebouwcode kan niet gevonden worden'; BEGIN SELECT g.alg_gebouw_key INTO v_alg_gebouw_key FROM alg_gebouw g, alg_locatie l WHERE alg_gebouw_verwijder IS NULL AND UPPER(alg_gebouw_code) = rec.alg_gebouw_code AND l.alg_locatie_key=g.alg_locatie_key AND l.alg_locatie_code=rec.alg_locatie_code; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog ( p_import_key, 'E', v_aanduiding || v_errormsg, 'Gebouw is niet gevonden' ); END; v_errormsg := 'Objectid kan niet gevonden worden'; IF rec.ins_deel_omschrijving IS NOT NULL THEN BEGIN SELECT dg.ins_deel_key, sd.ins_srtdeel_key, sd.ins_srtdeel_code, dg.ins_deel_aantal, ken.ins_kenmerkdeel_waarde INTO v_ins_deel_key, v_ins_srtdeel_key, v_ins_srtdeel_code, v_ins_deel_aantal, v_ins_deel_eenheid FROM ins_v_deel_gegevens dg, ins_srtdeel sd, (SELECT ikd.ins_deel_key, ikd.ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd, ins_kenmerk ik WHERE ikd.ins_kenmerk_key = ik.ins_kenmerk_key AND ik.ins_kenmerk_code = 'MJOB_EENHEID_AANTAL' AND ikd.ins_kenmerkdeel_verwijder IS NULL) ken WHERE dg.ins_srtdeel_key = sd.ins_srtdeel_key AND UPPER(dg.ins_deel_omschrijving) = UPPER(rec.ins_deel_omschrijving) AND ken.ins_deel_key(+) = dg.ins_deel_key AND dg.alg_gebouw_key = v_alg_gebouw_key; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog ( p_import_key, 'E', v_aanduiding || v_errormsg, 'Object is niet gevonden op id ' ); v_ongeldig := 1; END; END IF; v_errormsg := 'Object externnr kan niet gevonden worden'; IF rec.ins_deel_externnr IS NOT NULL AND v_ins_deel_key IS NULL THEN BEGIN SELECT d.ins_deel_key, sd.ins_srtdeel_key, sd.ins_srtdeel_code, d.ins_deel_aantal INTO v_ins_deel_key, v_ins_srtdeel_key, v_ins_srtdeel_code, v_ins_deel_aantal FROM ins_v_deel_gegevens dg, ins_deel d, ins_srtdeel sd WHERE dg.ins_deel_key = d.ins_deel_key AND d.ins_srtdeel_key = sd.ins_srtdeel_key AND UPPER(d.ins_deel_externnr) = UPPER(rec.ins_deel_externnr) AND dg.alg_gebouw_key = v_alg_gebouw_key; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog ( p_import_key, 'E', v_aanduiding || v_errormsg, 'Object is niet gevonden op extern id ' ); v_ongeldig := 1; END; END IF; BEGIN SELECT btw.fin_btwtabelwaarde_key INTO v_srtcontrole_btw_key FROM fin_btwtabel bt, fin_btwtabelwaarde btw WHERE bt.fin_btwtabel_omschrijving='NL standaard' AND btw.fin_btwtabel_key = bt.fin_btwtabel_key AND btw.fin_btwtabelwaarde_code=rec.ins_srtcontrole_btw AND btw.fin_btwtabelwaarde_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN v_srtcontrole_btw_key:=NULL; END; -- kijk of de srtcontrole al bestaat v_errormsg := 'Kijk of de taak al bestaat'; BEGIN SELECT ins_srtcontrole_key INTO v_ins_srtcontrole_key FROM ins_srtcontrole WHERE ins_srtinstallatie_key = v_ins_srtdeel_key AND ins_srtcontrole_niveau = 'S' AND ins_srtcontrole_omschrijving = SUBSTR(v_ins_srtdeel_code || ' - ' || rec.ins_srtcontrole_omschrijving, 1, 60) AND ctr_discipline_key = v_ctr_discipline_key; UPDATE ins_srtcontrole SET ins_srtcontrole_level = rec.ins_srtcontrole_level WHERE ins_srtcontrole_key = v_ins_srtcontrole_key; EXCEPTION WHEN NO_DATA_FOUND THEN v_errormsg := 'Aanmaken nieuwe taak'; INSERT INTO ins_srtcontrole (ins_srtinstallatie_key, ins_srtcontrole_niveau, ins_srtcontrole_omschrijving, ctr_discipline_key, ins_srtcontrole_periode, ins_srtcontrole_eenheid, ins_srtcontrole_level, ins_srtcontrole_materiaal, ins_srtcontrole_percentage, fin_btwtabelwaarde_key) VALUES (v_ins_srtdeel_key, 'S', SUBSTR(v_ins_srtdeel_code || ' - ' || rec.ins_srtcontrole_omschrijving, 1, 60), v_ctr_discipline_key, 0, -- periode wordt in het xcp record opgegeven 4, -- standaard jaar voor MJOB rec.ins_srtcontrole_level, 0, -- kosten worden in het xcp record vermeld. 100, v_srtcontrole_btw_key) -- BTW tarief zoals vermeld op de oPrognose taak. RETURNING ins_srtcontrole_key INTO v_ins_srtcontrole_key; END; v_ins_srtcontroledl_xcp_perc:=FAC.safe_to_number(rec.ins_srtcontroledl_xcp_perc)*100; IF v_ins_srtcontroledl_xcp_perc>100 THEN v_ins_srtcontroledl_xcp_perc:=100; END IF; IF v_ins_srtcontroledl_xcp_perc < 100 THEN v_ins_srtcontroledl_xcp_aantal:=NULL; ELSE IF rec.ins_srtcontroledl_xcp_aantal <> v_ins_deel_aantal THEN v_ins_srtcontroledl_xcp_aantal:=FAC.safe_to_number(rec.ins_srtcontroledl_xcp_aantal); ELSE v_ins_srtcontroledl_xcp_aantal:=NULL; END IF; END IF; -- wat is het aantal op de taak (in de oprognose staat een hvh_reken die we hier gebruiken ipv de ins_deel_aantal) -- v_ins_srtcontroledl_xcp_aantal := FAC.safe_to_number(rec.ins_srtcontroledl_xcp_aantal); -- IF (v_ins_srtcontroledl_xcp_aantal=1 AND v_ins_deel_aantal>1) -- THEN -- v_ins_srtcontroledl_xcp_aantal:= v_ins_deel_aantal; -- END IF; -- Ophalen freeze jaar en eerst stardatum v_ins_srtcontroledl_xcp_startdat:=FAC.safe_to_date(rec.ins_srtcontroledl_xcp_startdat, 'dd-mm-yyyy'); v_refdate := FAC.safe_to_date('01-01-'||fac.getsetting('mjb_start_year'),'DD-MM-YYYY'); IF (v_ins_srtcontroledl_xcp_startdat<=v_refdate) THEN v_ins_srtcontroledl_xcp_startdat := zlmv.getfirststartdate(v_ins_srtcontroledl_xcp_startdat, v_refdate,rec.ins_srtcontroledl_xcp_periode); END IF; -- kijk of de taak uitzondering al bestaat v_errormsg := 'Kijk of de XCP taak al bestaat'; BEGIN SELECT ins_srtcontroledl_xcp_key INTO v_ins_srtcontroledl_xcp_key FROM ins_srtcontroledl_xcp WHERE ins_deel_key = v_ins_deel_key AND ins_srtcontrole_key = v_ins_srtcontrole_key; UPDATE ins_srtcontroledl_xcp SET ins_srtcontroledl_xcp_periode = FAC.safe_to_number(rec.ins_srtcontroledl_xcp_periode), ins_srtcontroledl_xcp_aantal = v_ins_srtcontroledl_xcp_aantal, ins_srtcontroledl_xcp_materia = FAC.safe_to_number(rec.ins_srtcontroledl_xcp_materia), ins_srtcontroledl_xcp_perc = v_ins_srtcontroledl_xcp_perc, ins_srtcontroledl_xcp_startdat = v_ins_srtcontroledl_xcp_startdat WHERE ins_srtcontroledl_xcp_key = v_ins_srtcontroledl_xcp_key; EXCEPTION WHEN NO_DATA_FOUND THEN v_errormsg := 'Aanmaken nieuwe taak uitzondering '; INSERT INTO ins_srtcontroledl_xcp (ins_deel_key, ins_srtcontrole_key, ins_srtcontroledl_xcp_periode, ins_srtcontroledl_xcp_aantal, ins_srtcontroledl_xcp_materia, ins_srtcontroledl_xcp_perc, ins_srtcontroledl_xcp_startdat, ins_srtcontroledl_xcp_aanteh) VALUES (v_ins_deel_key, v_ins_srtcontrole_key, FAC.safe_to_number(rec.ins_srtcontroledl_xcp_periode), v_ins_srtcontroledl_xcp_aantal, FAC.safe_to_number(rec.ins_srtcontroledl_xcp_materia), v_ins_srtcontroledl_xcp_perc, v_ins_srtcontroledl_xcp_startdat, rec.ins_srtcontroledl_xcp_eenh) RETURNING ins_srtcontroledl_xcp_key INTO v_ins_srtcontroledl_xcp_key; END; -- Moeten we nu kijken welke XCP taken er zijn aangemaakt en of deze al afgerond hadden moeten zijn zodat ze niet worden doorgeschoven naar het volgene jaar ? fac.imp_writelog (p_import_key, 'I', v_aanduiding || 'Taak is aangemaakt: ' || v_aanduiding, ''); COMMIT; -- TODO moeten we ook taken gaan verwijderen? 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; END; / -- EIND MJOB Taken CREATE OR REPLACE PROCEDURE ZLMV_DAILY AS BEGIN -- inactiveren personen die 12 maanden niet hebben ingelogd -- zlmv.inactivate_prs (); moet nu via de scim koppeling worden geregeld. -- anonimiseer bezoekers to 42 dagen terug zlmv.anonimiseer_bezoeker (); END; / ------ payload end ------ SET DEFINE OFF BEGIN adm.systrackscriptId ('$Id$', 0); END; / COMMIT; SET ECHO OFF SPOOL OFF SET DEFINE ON PROMPT Logfile of this upgrade is: &fcltlogfile