diff --git a/KW1C/KW1C.sql b/KW1C/KW1C.sql index 722083dd5..c06cce770 100644 --- a/KW1C/KW1C.sql +++ b/KW1C/KW1C.sql @@ -47,7 +47,6 @@ IS oracle_err_mes VARCHAR2 (200); -- stap 1: bepalen of er per vandaag een mutatie is voor cat/type - -- nog te doen: wat als er nog geen categorie en type is? CURSOR CAT IS SELECT r.alg_ruimte_key, r.alg_ruimte_nr, @@ -60,11 +59,15 @@ IS categorie.huidige_categorie, --> ter info de oude waarde categorie.new_categorie_kenmerkwaarde, ---> dit is de key van nieuwe waarde categorie.nieuwe_categorie_omschrijving, ---> dit is de nieuwe waarde + aantal_wp.aant_wp_huidig, + aantal_wp.aant_wp_nieuw, ruimtetype.onrgoedkenmerk_to_delete_type, --> deze mag weg als alles is opgeschoond ruimtetype.onrgoedkenmerk_to_archive_type, --> deze mag een einddatum krijgen vandaag - 1 mutatiedatum.onrgoedkenmerk_to_delete_mutatiedat, --> deze mag weg als alles is opgeschoond categorie.onrgoedkenmerk_to_archive_categorie, --> deze mag een einddatum krijgen vandaag - 1 - categorie.onrgoedkenmerk_to_delete_categorie --> deze mag weg als alles is opgeschoond + categorie.onrgoedkenmerk_to_delete_categorie, --> deze mag weg als alles is opgeschoond + aantal_wp.onrgoedkenmerk_to_archive_wp, --> deze mag een einddatum krijgen vandaag - 1 + aantal_wp.onrgoedkenmerk_to_delete_wp --> deze mag weg als alles is opgeschoond FROM alg_ruimte r, (SELECT fac.safe_to_date (kw.alg_onrgoedkenmerk_waarde, 'dd-mm-yyyy') mutatiedatum, @@ -76,6 +79,33 @@ IS WHERE k.alg_kenmerk_key = 1082 AND kw.alg_kenmerk_key = k.alg_kenmerk_key AND kw.alg_onrgoed_niveau = 'R') mutatiedatum, + (SELECT r.alg_ruimte_key ruimte_key, + huidig.aant_wp_huidig, + nieuw.aant_wp_nieuw, + huidig.alg_kenmerk_key, + huidig.alg_onrgoedkenmerk_key onrgoedkenmerk_to_archive_wp, + nieuw.alg_onrgoedkenmerk_key onrgoedkenmerk_to_delete_wp + FROM (SELECT kw.alg_onrgoedkenmerk_key, + kw.alg_onrgoed_key, + k.alg_kenmerk_key, + kw.alg_onrgoedkenmerk_waarde aant_wp_nieuw + FROM alg_kenmerk k, alg_onrgoedkenmerk kw + WHERE k.alg_kenmerk_key = 1240 + AND kw.alg_kenmerk_key = k.alg_kenmerk_key + AND kw.alg_onrgoedkenmerk_verwijder IS NULL + AND kw.alg_onrgoed_niveau = 'R') nieuw, + (SELECT kw.alg_onrgoedkenmerk_key, + kw.alg_onrgoed_key, + k.alg_kenmerk_key, + kw.alg_onrgoedkenmerk_waarde aant_wp_huidig + FROM alg_kenmerk k, alg_onrgoedkenmerk kw + WHERE k.alg_kenmerk_key = 1006 + AND kw.alg_kenmerk_key = k.alg_kenmerk_key + AND kw.alg_onrgoedkenmerk_verwijder IS NULL + AND kw.alg_onrgoed_niveau = 'R') huidig, + alg_ruimte r + WHERE r.alg_ruimte_key = nieuw.alg_onrgoed_key + AND r.alg_ruimte_key = huidig.alg_onrgoed_key(+)) aantal_wp, (SELECT r.alg_ruimte_key ruimte_key, huidig.omschrijving huidig_type, nieuw.omschrijving nieuw_type_omschrijving, @@ -153,9 +183,10 @@ IS WHERE mutatiedatum.ruimte_key = r.alg_ruimte_key AND ruimtetype.ruimte_key(+) = r.alg_ruimte_key AND categorie.ruimte_key(+) = r.alg_ruimte_key + AND aantal_wp.ruimte_key(+) = r.alg_ruimte_key AND mutatiedatum.mutatiedatum < TRUNC (SYSDATE + 1); - -- stap 1: bepalen of er per vandaag een mutatie is voor vloer + -- stap 2: bepalen of er per vandaag een mutatie is voor vloer CURSOR VLOER IS SELECT r.alg_ruimte_key, r.alg_ruimte_nr, @@ -204,13 +235,44 @@ IS AND r.alg_ruimte_key = vloer_new.ruimte_key AND r.alg_ruimte_key = mutatiedatum.ruimte_key AND mutatiedatum.mutatiedatum < TRUNC (SYSDATE + 1); + + -- stap 3: bepalen of er per vandaag een mutatie is voor de ruimteomschrijving + CURSOR OMSCHRIJVING IS + SELECT r.alg_ruimte_key, + r.alg_ruimte_nr, + mutatiedatum.mutatiedatum, + mutatiedatum.onrgoedkenmerk_to_delete_mutatiedat, --> deze mag weg als alles is opgeschoond + r.alg_ruimte_omschrijving, ---> ter info de oude waarde + omschr_nieuw.omschrijving_nieuw, ---> dit is de nieuwe waarde + omschr_nieuw.to_delete_omschr --> deze mag weg als alles is opgeschoond + FROM alg_ruimte r, + (SELECT fac.safe_to_date (kw.alg_onrgoedkenmerk_waarde, 'dd-mm-yyyy') + mutatiedatum, + kw.alg_onrgoedkenmerk_key + onrgoedkenmerk_to_delete_mutatiedat, + kw.alg_onrgoed_key + ruimte_key + FROM alg_kenmerk k, alg_onrgoedkenmerk kw + WHERE k.alg_kenmerk_key = 1262 + AND kw.alg_kenmerk_key = k.alg_kenmerk_key + AND kw.alg_onrgoed_niveau = 'R') mutatiedatum, + (SELECT kw.alg_onrgoed_key ruimte_key, + kw.alg_onrgoedkenmerk_key to_delete_omschr, + kw.alg_onrgoedkenmerk_waarde omschrijving_nieuw + FROM alg_kenmerk k, alg_onrgoedkenmerk kw + WHERE k.alg_kenmerk_key = 1261 + AND k.alg_kenmerk_key = kw.alg_kenmerk_key + AND kw.alg_onrgoed_niveau = 'R' + AND kw.alg_onrgoedkenmerk_verwijder IS NULL) omschr_nieuw + WHERE r.alg_ruimte_key = omschr_nieuw.ruimte_key + AND r.alg_ruimte_key = mutatiedatum.ruimte_key + AND mutatiedatum.mutatiedatum < TRUNC (SYSDATE + 1); BEGIN -- kenmerken die zijn leeggehaald krijgen geen einddatum maar een NULL waarde -- om problemen te voorkomen met dubbele waarden geven we die eerst een einddatum UPDATE alg_onrgoedkenmerk ok SET ok.alg_onrgoedkenmerk_verwijder = SYSDATE - WHERE ok.alg_onrgoedkenmerk_waarde IS NULL - AND ok.alg_onrgoedkenmerk_verwijder IS NULL; + WHERE ok.alg_onrgoedkenmerk_waarde IS NULL AND ok.alg_onrgoedkenmerk_verwijder IS NULL; FOR rec IN CAT LOOP @@ -227,9 +289,8 @@ IS 3, SYSDATE, 'Categorie ' || rec.huidige_categorie || ' gearchiveerd'); - + COMMIT; - END IF; IF rec.onrgoedkenmerk_to_archive_type IS NOT NULL @@ -245,9 +306,25 @@ IS 3, SYSDATE, 'Type ' || rec.huidig_type || ' gearchiveerd'); - + + COMMIT; + END IF; + + IF rec.onrgoedkenmerk_to_archive_wp IS NOT NULL + THEN + -- de oude waarden (type archiveren) geven we een verwijderdatum vandaag-1 + UPDATE alg_onrgoedkenmerk ok + SET ok.alg_onrgoedkenmerk_verwijder = SYSDATE - 1 + WHERE ok.alg_onrgoedkenmerk_key = + fac.safe_to_number (rec.onrgoedkenmerk_to_archive_wp); + + fac.trackaction ('ALGRUP', + rec.alg_ruimte_key, + 3, + SYSDATE, + 'Aantal werkplekken ' || rec.aant_wp_huidig || ' gearchiveerd'); + COMMIT; - END IF; IF rec.new_categorie_kenmerkwaarde IS NOT NULL @@ -299,6 +376,37 @@ IS 'Mutatievelden categorie en type opgeschoond'); COMMIT; END IF; + + IF rec.aant_wp_nieuw IS NOT NULL + THEN + -- de nieuwe waarde voor aantal werkplekken voegen we toe + INSERT INTO alg_onrgoedkenmerk (alg_onrgoed_key, + alg_onrgoed_niveau, + alg_kenmerk_key, + alg_onrgoedkenmerk_waarde) + VALUES (rec.alg_ruimte_key, + 'R', + 1006, + fac.safe_to_number (rec.aant_wp_nieuw)); + + fac.trackaction ('ALGRUP', + rec.alg_ruimte_key, + 3, + SYSDATE, + 'Aantal werkplekken omgezet naar : ' || rec.aant_wp_nieuw); + + -- de mutatie velden --> die moeten weer leeggemaakt worden voor een volgende mutatie + DELETE alg_onrgoedkenmerk ok + WHERE ok.alg_onrgoedkenmerk_key = + fac.safe_to_number (rec.onrgoedkenmerk_to_delete_wp); + + fac.trackaction ('ALGRUP', + rec.alg_ruimte_key, + 3, + SYSDATE, + 'Mutatieveld aantal werkplekken opgeschoond'); + COMMIT; + END IF; END LOOP; FOR rec IN VLOER @@ -315,9 +423,8 @@ IS 3, SYSDATE, 'Vloerafwerking ' || rec.huidige_vloer || ' gearchiveerd'); - + COMMIT; - END IF; -- de nieuwe waarde voor categorie voegen we toe @@ -352,7 +459,36 @@ IS COMMIT; END IF; END LOOP; - + + FOR rec IN OMSCHRIJVING + LOOP + UPDATE alg_ruimte r + SET r.alg_ruimte_omschrijving = rec.omschrijving_nieuw + WHERE r.alg_ruimte_key = rec.alg_ruimte_key; + + fac.trackaction ( + 'ALGRUP', + rec.alg_ruimte_key, + 3, + SYSDATE, + 'Ruimteomschrijving omgezet van ' + || rec.alg_ruimte_omschrijving + || ' naar ' + || rec.omschrijving_nieuw); + + -- de mutatie velden --> die moeten weer leeggemaakt worden voor een volgende mutatie + DELETE alg_onrgoedkenmerk ok + WHERE ok.alg_onrgoedkenmerk_key = fac.safe_to_number (rec.to_delete_omschr) + OR ok.alg_onrgoedkenmerk_key = + fac.safe_to_number (rec.onrgoedkenmerk_to_delete_mutatiedat); + + fac.trackaction ('ALGRUP', + rec.alg_ruimte_key, + 3, + SYSDATE, + 'Mutatievelden ruimteomschrijving opgeschoond'); + COMMIT; + END LOOP; END VERWERKEN_RUIMTEKAART; END; / @@ -392,8 +528,7 @@ AS WHERE r.alg_verdieping_key = v.alg_verdieping_key AND v.alg_gebouw_key = g.alg_gebouw_key AND g.alg_locatie_key = l.alg_locatie_key - AND (r.alg_srtruimte_key NOT IN (81) - OR r.alg_srtruimte_key IS NULL); + AND (r.alg_srtruimte_key NOT IN (81) OR r.alg_srtruimte_key IS NULL); -- Sleepbaar thema vloerafwerking @@ -420,9 +555,8 @@ AS AND ok.alg_onrgoedkenmerk_verwijder IS NULL AND k.alg_kenmerk_key = 1009 AND rr.alg_ruimte_key = ok.alg_onrgoed_key) gf - WHERE gf.alg_ruimte_key(+) = r.alg_ruimte_key - AND (r.alg_srtruimte_key NOT IN (81) - OR r.alg_srtruimte_key IS NULL); + WHERE gf.alg_ruimte_key(+) = r.alg_ruimte_key + AND (r.alg_srtruimte_key NOT IN (81) OR r.alg_srtruimte_key IS NULL); CREATE OR REPLACE TRIGGER kw1c_t_thema_vloerafw_i_iu INSTEAD OF INSERT OR UPDATE @@ -744,10 +878,10 @@ BEGIN END; END LOOP; - -- we ruimen de import tabel direct weer netjes op aangezien dit een generieke importtabel is DELETE FAC_IMP_CSV i WHERE i.fac_import_key = p_import_key; + END kw1c_update_historie; / @@ -849,7 +983,7 @@ AS WHERE t.fac_usrtab_key = 21 AND t.fac_usrtab_key = d.fac_usrtab_key AND d.fac_usrdata_verwijder IS NULL - AND (d.fac_usrdata_vervaldatum IS NULL OR d.fac_usrdata_vervaldatum > TRUNC(SYSDATE)); + AND (d.fac_usrdata_vervaldatum IS NULL OR d.fac_usrdata_vervaldatum > TRUNC (SYSDATE)); CREATE OR REPLACE VIEW kw1c_export_ruimtedetails ( @@ -884,7 +1018,7 @@ AS WHERE k.alg_kenmerk_key = ok.alg_kenmerk_key AND ok.alg_onrgoed_niveau = 'R' AND k.alg_kenmerk_key = 1060 - AND d.fac_usrdata_key = ok.alg_onrgoedkenmerk_waarde + AND d.fac_usrdata_key = ok.alg_onrgoedkenmerk_waarde AND t.fac_usrtab_key = d.fac_usrtab_key AND ok.alg_onrgoedkenmerk_verwijder IS NULL AND t.fac_usrtab_key = 21) cat, @@ -907,8 +1041,8 @@ AS AND cat.alg_onrgoed_key = r.alg_ruimte_key AND t.alg_onrgoed_key = r.alg_ruimte_key AND cat.fac_usrdata_key = t.fac_usrdata_parentkey - AND (r.alg_srtruimte_key NOT IN (81) - OR r.alg_srtruimte_key IS NULL); + AND r.alg_ruimte_verwijder IS NULL + AND (r.alg_srtruimte_key NOT IN (81) OR r.alg_srtruimte_key IS NULL); CREATE OR REPLACE VIEW kw1c_export_ruimtegebruik ( @@ -930,10 +1064,10 @@ AS ra.prs_ruimteafdeling_ingangsdatum, ra.prs_ruimteafdeling_einddatum FROM prs_afdeling a, prs_ruimteafdeling ra - WHERE a.prs_afdeling_key = ra.prs_afdeling_key) rg - WHERE rg.alg_ruimte_key = r.alg_ruimte_key - AND (r.alg_srtruimte_key NOT IN (81) - OR r.alg_srtruimte_key IS NULL); + WHERE a.prs_afdeling_key = ra.prs_afdeling_key) rg + WHERE rg.alg_ruimte_key = r.alg_ruimte_key + AND r.alg_ruimte_verwijder IS NULL + AND (r.alg_srtruimte_key NOT IN (81) OR r.alg_srtruimte_key IS NULL); CREATE OR REPLACE VIEW kw1c_export_ruimtes ( @@ -976,22 +1110,22 @@ AS (SELECT fac.safe_to_date (ok.alg_onrgoedkenmerk_waarde, 'dd-mm-yyyy') ingangsdatum, ok.alg_onrgoed_key ruimte_key FROM alg_kenmerk k, alg_onrgoedkenmerk ok - WHERE k.alg_kenmerk_key = ok.alg_kenmerk_key - AND ok.alg_onrgoedkenmerk_verwijder IS NULL - AND k.alg_kenmerk_key = 1220) ind, + WHERE k.alg_kenmerk_key = ok.alg_kenmerk_key + AND ok.alg_onrgoedkenmerk_verwijder IS NULL + AND k.alg_kenmerk_key = 1220) ind, (SELECT fac.safe_to_date (ok.alg_onrgoedkenmerk_waarde, 'dd-mm-yyyy') einddatum, ok.alg_onrgoed_key ruimte_key FROM alg_kenmerk k, alg_onrgoedkenmerk ok - WHERE k.alg_kenmerk_key = ok.alg_kenmerk_key - AND ok.alg_onrgoedkenmerk_verwijder IS NULL - AND k.alg_kenmerk_key = 1221) uitd + WHERE k.alg_kenmerk_key = ok.alg_kenmerk_key + AND ok.alg_onrgoedkenmerk_verwijder IS NULL + AND k.alg_kenmerk_key = 1221) uitd WHERE r.alg_verdieping_key = v.alg_verdieping_key AND v.alg_gebouw_key = g.alg_gebouw_key AND g.alg_locatie_key = l.alg_locatie_key AND ind.ruimte_key(+) = r.alg_ruimte_key AND uitd.ruimte_key(+) = r.alg_ruimte_key - AND (r.alg_srtruimte_key NOT IN (81) - OR r.alg_srtruimte_key IS NULL); + AND r.alg_ruimte_verwijder IS NULL + AND (r.alg_srtruimte_key NOT IN (81) OR r.alg_srtruimte_key IS NULL); CREATE OR REPLACE VIEW kw1c_export_ruimtetype ( @@ -1001,9 +1135,10 @@ CREATE OR REPLACE VIEW kw1c_export_ruimtetype AS SELECT ud.fac_usrdata_code, ud.fac_usrdata_omschr FROM fac_usrdata ud, fac_usrtab ut - WHERE ut.fac_usrtab_key = ud.fac_usrtab_key AND ut.fac_usrtab_key = 3 - AND ud.fac_usrdata_verwijder IS NULL - AND (ud.fac_usrdata_vervaldatum IS NULL OR ud.fac_usrdata_vervaldatum > TRUNC(SYSDATE)); + WHERE ut.fac_usrtab_key = ud.fac_usrtab_key + AND ut.fac_usrtab_key = 3 + AND ud.fac_usrdata_verwijder IS NULL + AND (ud.fac_usrdata_vervaldatum IS NULL OR ud.fac_usrdata_vervaldatum > TRUNC (SYSDATE)); CREATE OR REPLACE VIEW kw1c_export_vloerafw ( @@ -1030,9 +1165,9 @@ AS AND k.alg_kenmerk_key = 1009 AND ok.alg_onrgoed_niveau = 'R' AND ok.alg_onrgoed_key = r.alg_ruimte_key + AND r.alg_ruimte_verwijder IS NULL AND fac.safe_to_number (ok.alg_onrgoedkenmerk_waarde) = ud.fac_usrdata_key - AND (r.alg_srtruimte_key NOT IN (81) - OR r.alg_srtruimte_key IS NULL); + AND (r.alg_srtruimte_key NOT IN (81) OR r.alg_srtruimte_key IS NULL); CREATE OR REPLACE VIEW kw1c_export_vloerafw_types ( @@ -1047,9 +1182,10 @@ AS NULL, ud.fac_usrdata_omschr2 FROM fac_usrdata ud, fac_usrtab ut - WHERE ut.fac_usrtab_key = ud.fac_usrtab_key AND ut.fac_usrtab_key = 4 - AND ud.fac_usrdata_verwijder IS NULL - AND (ud.fac_usrdata_vervaldatum IS NULL OR ud.fac_usrdata_vervaldatum > TRUNC(SYSDATE)); + WHERE ut.fac_usrtab_key = ud.fac_usrtab_key + AND ut.fac_usrtab_key = 4 + AND ud.fac_usrdata_verwijder IS NULL + AND (ud.fac_usrdata_vervaldatum IS NULL OR ud.fac_usrdata_vervaldatum > TRUNC (SYSDATE)); CREATE OR REPLACE PROCEDURE kw1c_export_mail_acp (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, @@ -1107,6 +1243,1324 @@ BEGIN END kw1c_export_mail_acp; / +CREATE OR REPLACE PROCEDURE kw1c_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 KW1C_TEST.kw1c_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; +/ + +CREATE OR REPLACE PROCEDURE kw1c_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_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); + + v_aanduiding := + '[' + || v_alg_gebouw_code + || '|' + || v_oprognose_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' + 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 (REPLACE (v_oprognose_gebouw_code, '"', '')); + + v_aanduiding := + '[' + || v_alg_gebouw_code + || '|' + || v_oprognose_gebouw_code + || '|' + || v_ins_deel_externnr + || '|' + || v_ins_deel_omschrijving + || '|' + || v_ins_srtcontrole_omschrijving + || '] '; + + + 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 := 'Objectid kan niet gevonden worden'; + v_ins_deel_omschrijving := TRIM (v_ins_deel_omschrijving); + IF v_ins_deel_omschrijving IS NOT NULL + THEN + BEGIN + SELECT 1 + INTO v_dummy + FROM ins_v_deel_gegevens + WHERE UPPER(ins_deel_omschrijving) = UPPER(v_ins_deel_omschrijving) + AND 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 id ' + ); + v_ongeldig := 1; + END; + END IF; + + 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(SUBSTR(d.ins_deel_externnr, 1, 6)) = 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) + 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)); + + 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 kw1c_import_mjobtaken; +/ + +CREATE OR REPLACE PROCEDURE kw1c_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_org, + i.ins_deel_externnr, + i.ins_deel_key, + 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_aantal_org, + i.ins_deel_aantal 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 + FROM fac_imp_csv, ins_deel i + WHERE fac_imp_csv_col02 = substr (i.ins_deel_externnr, 1, 6) + AND ins_deel_verwijder IS NULL + 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_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_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; + + -- 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) + 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) + 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 := kw1c.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 = FAC.safe_to_number(rec.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; +/ + + ------ payload end ------ SET DEFINE OFF