-- -- $Id$ -- -- Script containing customer specific sql statements for the FACILITOR database -- Voor dbuser invullen: - indien script voor 1 klant is: 'AADS' (de klantcode, zoals vermeld in fac_version_cust) -- - script is voor meerdere klanten: 'AAXX' (de groepcode, zoals vermeld in fac_version_group) -- - script is voor meerdere klanten met naam volgens een bepaald patroon: '^AA|^ASMS|^GULU|^NMMS|^RABO|^ZKHM' -- Ook als het script gedraaid wordt voor de verkeerde cust wordt er een logfile gemaakt. -- (dit in tegenstelling tot sample_xxxx.sql) DEFINE thisfile = 'KW1C.SQL' DEFINE dbuser = 'KW1C' 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 KW1C IS PROCEDURE VERWERKEN_RUIMTEKAART; END; / CREATE OR REPLACE PACKAGE BODY KW1C IS PROCEDURE VERWERKEN_RUIMTEKAART AS v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); -- stap 1: bepalen of er per vandaag een mutatie is voor cat/type CURSOR CAT IS SELECT r.alg_ruimte_key, r.alg_ruimte_nr, mutatiedatum.mutatiedatum, ruimtetype.alg_kenmerk_key_type, ---> dit is de kenmerkkey voor deze nieuwe waarde ruimtetype.huidig_type, --> ter info de oude waarde ruimtetype.new_type_kenmerkwaarde, ---> dit is de key van nieuwe waarde ruimtetype.nieuw_type_omschrijving, ---> dit is de nieuwe waarde categorie.alg_kenmerk_key_categorie, ---> dit is de kenmerkkey voor deze nieuwe waarde 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 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, 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 = 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, huidig.alg_kenmerk_key alg_kenmerk_key_type, typen.fac_usrdata_key new_type_kenmerkwaarde, huidig.alg_onrgoedkenmerk_key onrgoedkenmerk_to_archive_type, nieuw.alg_onrgoedkenmerk_key onrgoedkenmerk_to_delete_type FROM (SELECT kw.alg_onrgoedkenmerk_key, kw.alg_onrgoed_key, k.alg_kenmerk_key, type_new.fac_usrdata_omschr omschrijving FROM alg_kenmerk k, alg_onrgoedkenmerk kw, fac_usrdata type_new WHERE k.alg_kenmerk_key = 1081 AND kw.alg_kenmerk_key = k.alg_kenmerk_key AND fac.safe_to_number (kw.alg_onrgoedkenmerk_waarde) = type_new.fac_usrdata_key AND type_new.fac_usrtab_key = 41 -- keuzelijst nieuwe type 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, type_new.fac_usrdata_omschr omschrijving FROM alg_kenmerk k, alg_onrgoedkenmerk kw, fac_usrdata type_new WHERE k.alg_kenmerk_key = 1008 AND kw.alg_kenmerk_key = k.alg_kenmerk_key AND fac.safe_to_number (kw.alg_onrgoedkenmerk_waarde) = type_new.fac_usrdata_key AND type_new.fac_usrtab_key = 3 -- keuzelijst type AND kw.alg_onrgoedkenmerk_verwijder IS NULL AND kw.alg_onrgoed_niveau = 'R') huidig, alg_ruimte r, fac_usrdata typen WHERE typen.fac_usrtab_key = 3 -- keuzelijst typen AND UPPER (nieuw.omschrijving) = UPPER (typen.fac_usrdata_omschr) --- op basis van de omschrijvingen kan de juiste key bepaald worden AND r.alg_ruimte_key = nieuw.alg_onrgoed_key AND r.alg_ruimte_key = huidig.alg_onrgoed_key(+)) ruimtetype, (SELECT r.alg_ruimte_key ruimte_key, huidig.omschrijving huidige_categorie, nieuw.omschrijving nieuwe_categorie_omschrijving, huidig.alg_kenmerk_key alg_kenmerk_key_categorie, categorie.fac_usrdata_key new_categorie_kenmerkwaarde, huidig.alg_onrgoedkenmerk_key onrgoedkenmerk_to_archive_categorie, nieuw.alg_onrgoedkenmerk_key onrgoedkenmerk_to_delete_categorie FROM (SELECT kw.alg_onrgoedkenmerk_key, kw.alg_onrgoed_key, k.alg_kenmerk_key, categorie_new.fac_usrdata_omschr omschrijving FROM alg_kenmerk k, alg_onrgoedkenmerk kw, fac_usrdata categorie_new WHERE k.alg_kenmerk_key = 1080 AND kw.alg_kenmerk_key = k.alg_kenmerk_key AND fac.safe_to_number (kw.alg_onrgoedkenmerk_waarde) = categorie_new.fac_usrdata_key AND categorie_new.fac_usrtab_key = 42 -- keuzelijst nieuwe categorieen 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, categorie.fac_usrdata_omschr omschrijving FROM alg_kenmerk k, alg_onrgoedkenmerk kw, fac_usrdata categorie WHERE k.alg_kenmerk_key = 1060 AND kw.alg_kenmerk_key = k.alg_kenmerk_key AND fac.safe_to_number (kw.alg_onrgoedkenmerk_waarde) = categorie.fac_usrdata_key AND categorie.fac_usrtab_key = 21 -- keuzelijst categorie AND kw.alg_onrgoedkenmerk_verwijder IS NULL AND kw.alg_onrgoed_niveau = 'R') huidig, alg_ruimte r, fac_usrdata categorie WHERE categorie.fac_usrtab_key = 21 -- keuzelijst categorie AND UPPER (nieuw.omschrijving) = UPPER (categorie.fac_usrdata_omschr) --- op basis van de omschrijvingen kan de juiste key bepaald worden AND r.alg_ruimte_key = nieuw.alg_onrgoed_key AND r.alg_ruimte_key = huidig.alg_onrgoed_key(+)) categorie 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 2: bepalen of er per vandaag een mutatie is voor vloer CURSOR VLOER IS SELECT r.alg_ruimte_key, r.alg_ruimte_nr, mutatiedatum.mutatiedatum, mutatiedatum.onrgoedkenmerk_to_delete_mutatiedat, --> deze mag weg als alles is opgeschoond vloer.alg_kenmerk_key_vloer, ---> dit is de kenmerkkey voor de nieuwe waarde vloer.huidige_vloer, ---> ter info de oude waarde vloer.to_archive_vloer, ---> deze mag een einddatum krijgen vandaag - 1, vloer_new.nieuwe_vloer_key, ---> dit is de key van nieuwe waarde vloer_new.nieuwe_vloer_omschr, ---> dit is de nieuwe waarde vloer_new.to_delete_vloer --> 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 = 1084 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_kenmerk_key alg_kenmerk_key_vloer, kw.alg_onrgoedkenmerk_key to_archive_vloer, ud.fac_usrdata_omschr huidige_vloer FROM alg_kenmerk k, alg_onrgoedkenmerk kw, fac_usrdata ud WHERE k.alg_kenmerk_key = 1009 AND k.alg_kenmerk_key = kw.alg_kenmerk_key AND fac.safe_to_number (kw.alg_onrgoedkenmerk_waarde) = ud.fac_usrdata_key AND kw.alg_onrgoed_niveau = 'R' AND kw.alg_onrgoedkenmerk_verwijder IS NULL) vloer, (SELECT kw.alg_onrgoed_key ruimte_key, kw.alg_onrgoedkenmerk_key to_delete_vloer, ud.fac_usrdata_key nieuwe_vloer_key, ud.fac_usrdata_omschr nieuwe_vloer_omschr FROM alg_kenmerk k, alg_onrgoedkenmerk kw, fac_usrdata ud WHERE k.alg_kenmerk_key = 1083 AND k.alg_kenmerk_key = kw.alg_kenmerk_key AND fac.safe_to_number (kw.alg_onrgoedkenmerk_waarde) = ud.fac_usrdata_key AND kw.alg_onrgoed_niveau = 'R' AND kw.alg_onrgoedkenmerk_verwijder IS NULL) vloer_new WHERE r.alg_ruimte_key = vloer.ruimte_key(+) --- (+) outer join, voor als er nog geen waarde 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; FOR rec IN CAT LOOP IF rec.onrgoedkenmerk_to_archive_categorie IS NOT NULL THEN -- de oude waarden (categorie 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_categorie); fac.trackaction ('ALGRUP', rec.alg_ruimte_key, 3, SYSDATE, 'Categorie ' || rec.huidige_categorie || ' gearchiveerd'); COMMIT; END IF; IF rec.onrgoedkenmerk_to_archive_type 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_type); fac.trackaction ('ALGRUP', rec.alg_ruimte_key, 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 AND rec.new_type_kenmerkwaarde IS NOT NULL THEN -- de nieuwe waarde voor categorie 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', 1060, fac.safe_to_number (rec.new_categorie_kenmerkwaarde)); -- de nieuwe waarde voor type 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', 1008, fac.safe_to_number (rec.new_type_kenmerkwaarde)); fac.trackaction ( 'ALGRUP', rec.alg_ruimte_key, 3, SYSDATE, 'Categorie en type omgezet naar : ' || rec.nieuwe_categorie_omschrijving || ' - ' || rec.nieuw_type_omschrijving); -- 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_type) OR ok.alg_onrgoedkenmerk_key = fac.safe_to_number (rec.onrgoedkenmerk_to_delete_mutatiedat) OR ok.alg_onrgoedkenmerk_key = fac.safe_to_number (rec.onrgoedkenmerk_to_delete_categorie); fac.trackaction ('ALGRUP', rec.alg_ruimte_key, 3, SYSDATE, '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 LOOP -- de oude waarden (categorie en type archiveren) geven we een verwijderdatum vandaag-1 IF rec.huidige_vloer IS NOT NULL THEN UPDATE alg_onrgoedkenmerk ok SET ok.alg_onrgoedkenmerk_verwijder = SYSDATE - 1 WHERE ok.alg_onrgoedkenmerk_key = fac.safe_to_number (rec.to_archive_vloer); fac.trackaction ('ALGRUP', rec.alg_ruimte_key, 3, SYSDATE, 'Vloerafwerking ' || rec.huidige_vloer || ' gearchiveerd'); COMMIT; END IF; -- de nieuwe waarde voor categorie voegen we toe IF rec.nieuwe_vloer_key IS NOT NULL THEN INSERT INTO alg_onrgoedkenmerk (alg_onrgoed_key, alg_onrgoed_niveau, alg_kenmerk_key, alg_onrgoedkenmerk_waarde) VALUES (rec.alg_ruimte_key, 'R', 1009, fac.safe_to_number (rec.nieuwe_vloer_key)); fac.trackaction ('ALGRUP', rec.alg_ruimte_key, 3, SYSDATE, 'Vloerafwerking omgezet naar : ' || rec.nieuwe_vloer_omschr); -- 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_vloer) OR ok.alg_onrgoedkenmerk_key = fac.safe_to_number (rec.onrgoedkenmerk_to_delete_mutatiedat); fac.trackaction ('ALGRUP', rec.alg_ruimte_key, 3, SYSDATE, 'Mutatievelden vloerafwerking opgeschoond'); 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; / CREATE OR REPLACE PROCEDURE KW1C_DAILY AS v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN KW1C.VERWERKEN_RUIMTEKAART; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.writelog ('DAILY', 'E', 'Proces afgebroken!', v_errormsg); END KW1C_DAILY; / CREATE OR REPLACE VIEW KW1C_V_SYNC_ALG_RUIMTE ( ALG_RUIMTE_KEY, ALG_VERDIEPING_KEY, CADLABEL ) AS SELECT r.alg_ruimte_key, v.alg_verdieping_key, LOWER (r.alg_ruimte_nr) cadlabel FROM alg_ruimte r, alg_verdieping v, alg_gebouw g, alg_locatie l 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); -- Sleepbaar thema vloerafwerking CREATE OR REPLACE VIEW KW1C_V_CAD_THEMA_VLOERAFW ( ALG_RUIMTE_KEY, WAARDE, WAARDE_KEY ) AS SELECT r.alg_ruimte_key, COALESCE (gf.fac_usrdata_omschr, 'Onbekend'), COALESCE (gf.fac_usrdata_key, 161) FROM alg_ruimte r, (SELECT rr.alg_ruimte_key, ud.fac_usrdata_omschr, ud.fac_usrdata_key FROM alg_onrgoedkenmerk ok, fac_usrdata ud, fac_kenmerkdomein rk, alg_kenmerk k, alg_v_aanwezigruimte rr WHERE rk.fac_usrtab_key = ud.fac_usrtab_key AND k.fac_kenmerkdomein_key = rk.fac_kenmerkdomein_key AND TO_CHAR (ud.fac_usrdata_key) = ok.alg_onrgoedkenmerk_waarde 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); CREATE OR REPLACE TRIGGER kw1c_t_thema_vloerafw_i_iu INSTEAD OF INSERT OR UPDATE ON KW1C_V_CAD_THEMA_VLOERAFW FOR EACH ROW BEGIN --- kenmerk bijwerken, let op: de nieuwe waarde is de key en dus niet de omschrijving alg.upsertkenmerk (1009, :new.alg_ruimte_key, :new.waarde_key); END; / CREATE OR REPLACE VIEW KW1C_V_CAD_THEMA_RUIMTEGEBR ( ALG_RUIMTE_KEY, WAARDE, WAARDE_KEY ) AS SELECT r.alg_ruimte_key, a.prs_afdeling_naam || ' - ' || a.prs_afdeling_omschrijving waarde, a.prs_afdeling_key afdeling_key FROM alg_ruimte r, prs_ruimteafdeling ra, prs_afdeling a WHERE r.alg_ruimte_key = ra.alg_ruimte_key AND a.prs_afdeling_key = ra.prs_afdeling_key AND ra.prs_ruimteafdeling_verwijder IS NULL AND SYSDATE BETWEEN ra.prs_ruimteafdeling_ingangsdatum AND COALESCE (ra.prs_ruimteafdeling_einddatum, TRUNC (SYSDATE) + 1); CREATE OR REPLACE PROCEDURE kw1c_import_historie (p_import_key IN NUMBER) AS BEGIN NULL; END kw1c_import_historie; / CREATE OR REPLACE PROCEDURE kw1c_update_historie (p_import_key IN NUMBER) IS v_aanduiding VARCHAR2 (200); v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count NUMBER; CURSOR vloer IS SELECT UPPER (i.fac_imp_csv_col02) ruimtenr_oud, i.fac_imp_csv_col03 vloertypecode, i.fac_imp_csv_col04 vloertypenaam, fac.safe_to_date (i.fac_imp_csv_col05, 'dd-mm-yyyy') begindatum, fac.safe_to_date (i.fac_imp_csv_col06, 'dd-mm-yyyy') einddatum, v.fac_usrdata_key vloertype_key, rn.alg_ruimte_key, rn.alg_ruimte_nr FROM fac_imp_csv i, (SELECT r.alg_ruimte_key, UPPER (rk.alg_onrgoedkenmerk_waarde) ruimte_nr_oud, r.alg_ruimte_nr FROM alg_kenmerk k, alg_onrgoedkenmerk rk, alg_ruimte r WHERE k.alg_kenmerk_key = rk.alg_kenmerk_key AND k.alg_kenmerk_key = 1062 AND rk.alg_onrgoed_niveau = 'R' AND r.alg_ruimte_key = rk.alg_onrgoed_key) rn, (SELECT d.fac_usrdata_key, d.fac_usrdata_code, d.fac_usrdata_upper FROM fac_usrtab t, fac_usrdata d WHERE t.fac_usrtab_key = 4 AND d.fac_usrtab_key = t.fac_usrtab_key) v WHERE UPPER (i.fac_imp_csv_col01) = 'VLOERAFWERKING' AND v.fac_usrdata_code = i.fac_imp_csv_col03 AND rn.ruimte_nr_oud = UPPER (i.fac_imp_csv_col02) --- AND i.fac_imp_csv_col06 IS NOT NULL hiermee nemen we alleen verwijderde datums op, maar kunnen we verschillen in de huidige situatie niet vinden AND NOT EXISTS --- het huidige vloertype laten we buiten beschouwing (SELECT r.alg_ruimte_key, rk.alg_onrgoedkenmerk_waarde vloerafwerking_key FROM alg_kenmerk k, alg_onrgoedkenmerk rk, alg_ruimte r WHERE k.alg_kenmerk_key = rk.alg_kenmerk_key AND k.alg_kenmerk_key = 1009 AND rk.alg_onrgoed_niveau = 'R' AND r.alg_ruimte_key = rk.alg_onrgoed_key AND rk.alg_onrgoedkenmerk_verwijder IS NULL AND r.alg_ruimte_key = rn.alg_ruimte_key AND rk.alg_onrgoedkenmerk_waarde = v.fac_usrdata_key); CURSOR org IS SELECT UPPER (i.fac_imp_csv_col02) ruimtenr_oud, i.fac_imp_csv_col03 oe, fac.safe_to_date (SUBSTR (i.fac_imp_csv_col04, 1, 10), 'dd-mm-yyyy') begindatum, fac.safe_to_date (SUBSTR (i.fac_imp_csv_col05, 1, 10), 'dd-mm-yyyy') einddatum, rn.alg_ruimte_key, rn.alg_ruimte_nr, a.prs_afdeling_key, a.prs_afdeling_naam FROM fac_imp_csv i, prs_afdeling a, (SELECT r.alg_ruimte_key, UPPER (rk.alg_onrgoedkenmerk_waarde) ruimte_nr_oud, r.alg_ruimte_nr FROM alg_kenmerk k, alg_onrgoedkenmerk rk, alg_ruimte r WHERE k.alg_kenmerk_key = rk.alg_kenmerk_key AND k.alg_kenmerk_key = 1062 AND rk.alg_onrgoed_niveau = 'R' AND r.alg_ruimte_key = rk.alg_onrgoed_key) rn WHERE UPPER (i.fac_imp_csv_col01) = 'ORGANISATIE' AND rn.ruimte_nr_oud = UPPER (i.fac_imp_csv_col02) AND a.prs_afdeling_naam = i.fac_imp_csv_col03 AND a.prs_afdeling_verwijder IS NULL; CURSOR ruimtedetails IS SELECT UPPER (i.fac_imp_csv_col02) ruimtenr_oud, i.fac_imp_csv_col03 ruimtecategorie, c.categorie categorie_omschrijving, i.fac_imp_csv_col04 ruimtetype, t.ruimtetype ruimtetype_omschrijving, fac.safe_to_date (i.fac_imp_csv_col05, 'dd-mm-yyyy') begindatum, fac.safe_to_date (i.fac_imp_csv_col06, 'dd-mm-yyyy') einddatum, c.fac_usrdata_key categorie_key, t.fac_usrdata_key type_key, rn.alg_ruimte_key, rn.alg_ruimte_nr FROM fac_imp_csv i, (SELECT r.alg_ruimte_key, UPPER (rk.alg_onrgoedkenmerk_waarde) ruimte_nr_oud, r.alg_ruimte_nr FROM alg_kenmerk k, alg_onrgoedkenmerk rk, alg_ruimte r WHERE k.alg_kenmerk_key = rk.alg_kenmerk_key AND k.alg_kenmerk_key = 1062 AND rk.alg_onrgoed_niveau = 'R' AND r.alg_ruimte_key = rk.alg_onrgoed_key) rn, (SELECT d.fac_usrdata_key, d.fac_usrdata_code, d.fac_usrdata_upper || ' ' || d.fac_usrdata_omschr categorie FROM fac_usrtab t, fac_usrdata d WHERE t.fac_usrtab_key = 21 AND d.fac_usrtab_key = t.fac_usrtab_key) c, (SELECT d.fac_usrdata_key, d.fac_usrdata_code, fac_usrdata_upper || ' ' || d.fac_usrdata_omschr ruimtetype FROM fac_usrtab t, fac_usrdata d WHERE t.fac_usrtab_key = 3 AND d.fac_usrtab_key = t.fac_usrtab_key) t WHERE UPPER (i.fac_imp_csv_col01) = 'TYPE' AND TO_CHAR (c.fac_usrdata_code) = TO_CHAR (i.fac_imp_csv_col03) AND t.fac_usrdata_code = i.fac_imp_csv_col04 AND rn.ruimte_nr_oud = UPPER (i.fac_imp_csv_col02) AND NOT EXISTS --- de huidge ruimtecategorie laten we buiten beschouwing (SELECT r.alg_ruimte_key, rk.alg_onrgoedkenmerk_waarde ruimtecategorie FROM alg_kenmerk k, alg_onrgoedkenmerk rk, alg_ruimte r WHERE k.alg_kenmerk_key = rk.alg_kenmerk_key AND k.alg_kenmerk_key = 1060 AND rk.alg_onrgoed_niveau = 'R' AND r.alg_ruimte_key = rk.alg_onrgoed_key AND rk.alg_onrgoedkenmerk_verwijder IS NULL AND r.alg_ruimte_key = rn.alg_ruimte_key AND rk.alg_onrgoedkenmerk_waarde = c.fac_usrdata_key) AND NOT EXISTS --- het huidige ruimtetype laten we buiten beschouwing (SELECT r.alg_ruimte_key, rk.alg_onrgoedkenmerk_waarde ruimtetype FROM alg_kenmerk k, alg_onrgoedkenmerk rk, alg_ruimte r WHERE k.alg_kenmerk_key = rk.alg_kenmerk_key AND k.alg_kenmerk_key = 1008 AND rk.alg_onrgoed_niveau = 'R' AND r.alg_ruimte_key = rk.alg_onrgoed_key AND rk.alg_onrgoedkenmerk_verwijder IS NULL AND r.alg_ruimte_key = rn.alg_ruimte_key AND rk.alg_onrgoedkenmerk_waarde = t.fac_usrdata_key); BEGIN FOR rec IN vloer LOOP BEGIN --- om de historie te vullen vullen we de tabel alg_onrgoedkenmerk met 'vervallen' waarden INSERT INTO alg_onrgoedkenmerk (alg_onrgoed_key, alg_onrgoed_niveau, alg_kenmerk_key, alg_onrgoedkenmerk_waarde, alg_onrgoedkenmerk_aanmaak, alg_onrgoedkenmerk_verwijder) VALUES (rec.alg_ruimte_key, 'R', 1009, rec.vloertype_key, rec.begindatum, rec.einddatum); IF (rec.einddatum IS NOT NULL) THEN fac.trackaction ( 'ALGRUP', rec.alg_ruimte_key, 3, rec.einddatum, 'Vloerafwerking ' || rec.vloertypenaam || ' opgenomen in het archief'); END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := v_errorhint || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Historie ruimte ' || rec.alg_ruimte_nr || ' kan niet worden gevuld'); COMMIT; END; END LOOP; FOR rec IN org LOOP BEGIN INSERT INTO prs_ruimteafdeling (prs_afdeling_key, alg_ruimte_key, prs_ruimteafdeling_bezetting, prs_ruimteafdeling_ingangsdatum, prs_ruimteafdeling_einddatum) VALUES (rec.prs_afdeling_key, rec.alg_ruimte_key, '100', rec.begindatum, rec.einddatum); IF (rec.einddatum IS NOT NULL) THEN fac.trackaction ( 'ALGRUP', rec.alg_ruimte_key, 3, rec.einddatum, 'Ruimtegebruiker ' || rec.prs_afdeling_naam || ' opgenomen in het archief'); END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := v_errorhint || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Historie ruimte ' || rec.alg_ruimte_nr || ' kan niet worden gevuld'); COMMIT; END; END LOOP; FOR rec IN ruimtedetails LOOP BEGIN --- om de historie te vullen vullen we de tabel alg_onrgoedkenmerk met 'vervallen' waarden INSERT INTO alg_onrgoedkenmerk (alg_onrgoed_key, alg_onrgoed_niveau, alg_kenmerk_key, alg_onrgoedkenmerk_waarde, alg_onrgoedkenmerk_aanmaak, alg_onrgoedkenmerk_verwijder) VALUES (rec.alg_ruimte_key, 'R', 1060, rec.categorie_key, rec.begindatum, rec.einddatum); IF (rec.einddatum IS NOT NULL) THEN fac.trackaction ( 'ALGRUP', rec.alg_ruimte_key, 3, rec.einddatum, 'Categorie ' || rec.categorie_omschrijving || ' opgenomen in het archief'); END IF; INSERT INTO alg_onrgoedkenmerk (alg_onrgoed_key, alg_onrgoed_niveau, alg_kenmerk_key, alg_onrgoedkenmerk_waarde, alg_onrgoedkenmerk_aanmaak, alg_onrgoedkenmerk_verwijder) VALUES (rec.alg_ruimte_key, 'R', 1008, rec.type_key, rec.begindatum, rec.einddatum); IF (rec.einddatum IS NOT NULL) THEN fac.trackaction ( 'ALGRUP', rec.alg_ruimte_key, 3, rec.einddatum, 'Ruimtetype ' || rec.ruimtetype_omschrijving || ' opgenomen in het archief'); END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := v_errorhint || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Historie ruimte ' || rec.alg_ruimte_nr || ' kan niet worden gevuld'); COMMIT; 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; / CREATE OR REPLACE VIEW kw1c_export_gebouw ( LocatieCode, GebouwCode, GebouwNaam, Adres, Postcode, Plaats, Begindatum, Einddatum, Breedtegraad, Lengtegraad ) AS SELECT l.alg_locatie_code, g.alg_gebouw_code, g.alg_gebouw_naam, l.alg_locatie_adres, l.alg_locatie_postcode, l.alg_locatie_plaats, ind.ingangsdatum, uitd.einddatum, g.alg_gebouw_x, g.alg_gebouw_y FROM alg_locatie l, alg_gebouw g, (SELECT ok.alg_onrgoed_key, fac.safe_to_date (ok.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY') ingangsdatum FROM alg_onrgoedkenmerk ok, alg_kenmerk k WHERE k.alg_kenmerk_key = ok.alg_kenmerk_key AND ok.alg_onrgoed_niveau = 'G' AND k.alg_kenmerk_key = 1001 AND ok.alg_onrgoedkenmerk_verwijder IS NULL) ind, (SELECT ok.alg_onrgoed_key, fac.safe_to_date (ok.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY') einddatum FROM alg_onrgoedkenmerk ok, alg_kenmerk k WHERE k.alg_kenmerk_key = ok.alg_kenmerk_key AND ok.alg_onrgoed_niveau = 'G' AND k.alg_kenmerk_key = 1160 AND ok.alg_onrgoedkenmerk_verwijder IS NULL) uitd WHERE l.alg_locatie_key = g.alg_locatie_key AND ind.alg_onrgoed_key(+) = g.alg_gebouw_key AND uitd.alg_onrgoed_key(+) = g.alg_gebouw_key AND g.alg_srtgebouw_key NOT IN (61); CREATE OR REPLACE VIEW kw1c_export_locatie ( Code, Naam, NaamVolledig, Adres, Postcode, Plaats, Breedtegraad, Lengtegraad, Begindatum, Einddatum ) AS SELECT l.alg_locatie_code, l.alg_locatie_omschrijving, NULL, l.alg_locatie_adres, l.alg_locatie_postcode, l.alg_locatie_plaats, l.alg_locatie_x, l.alg_locatie_y, ind.ingangsdatum, uitd.einddatum FROM alg_locatie l, (SELECT ok.alg_onrgoed_key, fac.safe_to_date (ok.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY') ingangsdatum FROM alg_onrgoedkenmerk ok, alg_kenmerk k WHERE k.alg_kenmerk_key = ok.alg_kenmerk_key AND ok.alg_onrgoed_niveau = 'L' AND k.alg_kenmerk_key = 1120 AND ok.alg_onrgoedkenmerk_verwijder IS NULL) ind, (SELECT ok.alg_onrgoed_key, fac.safe_to_date (ok.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY') einddatum FROM alg_onrgoedkenmerk ok, alg_kenmerk k WHERE k.alg_kenmerk_key = ok.alg_kenmerk_key AND ok.alg_onrgoed_niveau = 'L' AND k.alg_kenmerk_key = 1200 AND ok.alg_onrgoedkenmerk_verwijder IS NULL) uitd WHERE l.alg_locatie_key = ind.alg_onrgoed_key(+) AND l.alg_locatie_key = uitd.alg_onrgoed_key(+); CREATE OR REPLACE VIEW kw1c_export_ruimtecategorien ( RuimteCategorieCode, RuimteCategorieNaam ) AS SELECT d.fac_usrdata_code, d.fac_usrdata_omschr FROM fac_usrtab t, fac_usrdata d 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)); CREATE OR REPLACE VIEW kw1c_export_ruimtedetails ( ruimtecode, oppervlakte, aantalwerkplekken, ruimtecategoriecode, ruimtetypecode, begindatum, einddatum ) AS SELECT r.alg_ruimte_nr, r.alg_ruimte_bruto_vloeropp, wp.aantal_wp, cat.cat_code, t.type_code, t.startdatum begindatum, t.vervaldatum einddatum FROM alg_ruimte r, (SELECT ok.alg_onrgoed_key, fac.safe_to_number (ok.alg_onrgoedkenmerk_waarde) aantal_wp FROM alg_onrgoedkenmerk ok, alg_kenmerk k WHERE k.alg_kenmerk_key = ok.alg_kenmerk_key AND ok.alg_onrgoed_niveau = 'R' AND k.alg_kenmerk_key = 1006 AND ok.alg_onrgoedkenmerk_verwijder IS NULL) wp, (SELECT ok.alg_onrgoed_key, d.fac_usrdata_code cat_code, d.fac_usrdata_key FROM alg_onrgoedkenmerk ok, alg_kenmerk k, fac_usrdata d, fac_usrtab t 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 t.fac_usrtab_key = d.fac_usrtab_key AND ok.alg_onrgoedkenmerk_verwijder IS NULL AND t.fac_usrtab_key = 21) cat, (SELECT ok.alg_onrgoed_key, d.fac_usrdata_code type_code, ok.alg_onrgoedkenmerk_verwijder vervaldatum, ok.alg_onrgoedkenmerk_aanmaak startdatum, d.fac_usrdata_parentkey FROM alg_onrgoedkenmerk ok, alg_kenmerk k, fac_usrdata d, fac_usrtab t WHERE k.alg_kenmerk_key = ok.alg_kenmerk_key AND ok.alg_onrgoed_niveau = 'R' AND k.alg_kenmerk_key = 1008 AND d.fac_usrdata_key = ok.alg_onrgoedkenmerk_waarde AND t.fac_usrtab_key = d.fac_usrtab_key AND t.fac_usrtab_key = 3) t WHERE wp.alg_onrgoed_key(+) = r.alg_ruimte_key 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_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 ( RuimteCode, OrganisatieEenheidCode, Begindatum, Einddatum, Status ) AS SELECT r.alg_ruimte_nr, rg.prs_afdeling_naam, rg.prs_ruimteafdeling_ingangsdatum, rg.prs_ruimteafdeling_einddatum, CASE WHEN rg.prs_afdeling_naam = '002' THEN 'Buiten gebruik' ELSE 'In gebruik' END status FROM alg_ruimte r, (SELECT ra.alg_ruimte_key, a.prs_afdeling_naam, 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_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 ( Code, Naam, GebouwCode, LocatieCode, Actief, VerdiepingCode, VerdiepingNaam, Virtueel ) AS SELECT r.alg_ruimte_nr, r.alg_ruimte_omschrijving, g.alg_gebouw_code, l.alg_locatie_code, CASE WHEN (ind.ingangsdatum < SYSDATE OR ind.ingangsdatum IS NULL) AND (uitd.einddatum > SYSDATE OR uitd.einddatum IS NULL) THEN 'Ja' ELSE 'Nee' END actief, v.alg_verdieping_code, v.alg_verdieping_omschrijving, CASE WHEN l.alg_locatie_upper LIKE '%EXTERN%' OR UPPER (v.alg_verdieping_omschrijving) LIKE '%TERREIN%' THEN 'Ja' ELSE 'Nee' END virtueel FROM alg_ruimte r, alg_verdieping v, alg_gebouw g, alg_locatie l, (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, (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 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_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 ( RuimtetypeCode, RuimtetypeNaam ) 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)); CREATE OR REPLACE VIEW kw1c_export_vloerafw ( ruimtecode, vloertypecode, vloertypenaam, begindatum, einddatum ) AS SELECT r.alg_ruimte_nr, ud.fac_usrdata_code, ud.fac_usrdata_omschr, ok.alg_onrgoedkenmerk_aanmaak, ok.alg_onrgoedkenmerk_verwijder FROM fac_usrdata ud, fac_usrtab ut, alg_onrgoedkenmerk ok, alg_kenmerk k, alg_ruimte r WHERE ut.fac_usrtab_key = ud.fac_usrtab_key AND ut.fac_usrtab_key = 4 AND k.alg_kenmerk_key = ok.alg_kenmerk_key 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); CREATE OR REPLACE VIEW kw1c_export_vloerafw_types ( referentie, naam, omschrijving, hardheid ) AS SELECT ud.fac_usrdata_code, ud.fac_usrdata_omschr, 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)); CREATE OR REPLACE PROCEDURE kw1c_export_mail_acp (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2) AS v_aanduiding VARCHAR2 (200); v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); CURSOR mail IS SELECT p.prs_perslid_email, p.prs_perslid_key FROM prs_perslid p WHERE p.prs_perslid_verwijder IS NULL AND p.prs_perslid_inactief IS NULL AND UPPER (p.prs_perslid_email) LIKE '%@KW1C.NL'; BEGIN v_aanduiding := 'Init'; v_errormsg := 'Init'; FOR rec IN mail LOOP BEGIN UPDATE prs_perslid p SET p.prs_perslid_email = REPLACE (UPPER (p.prs_perslid_email), '@KW1C.NL', '@takw1c.nl') WHERE p.prs_perslid_key = rec.prs_perslid_key; fac.trackaction ('PRSUPD', rec.prs_perslid_key, 3, SYSDATE, 'Mailadres omgezet naar @takw1c.nl'); EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := v_errorhint || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.writelog (p_applname, 'E', v_aanduiding || v_errormsg, 'Onbekende fout!'); END; END LOOP; 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 BEGIN adm.systrackscriptId ('$Id$', 0); END; / COMMIT; SET ECHO OFF SPOOL OFF SET DEFINE ON PROMPT Logfile of this upgrade is: &fcltlogfile