-- -- $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 = 'STER.SQL' DEFINE dbuser = 'STER' 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 STER AS FUNCTION getfirststartdate(p_startdatum IN DATE, p_refdatum IN DATE, p_cyclus IN NUMBER) RETURN DATE; END; / CREATE OR REPLACE PACKAGE BODY STER AS FUNCTION getfirststartdate(p_startdatum IN DATE, p_refdatum IN DATE, p_cyclus IN NUMBER) RETURN DATE AS v_startdatum DATE; BEGIN IF (p_startdatum0) THEN v_startdatum := ADD_MONTHS(p_startdatum, p_cyclus*12); IF (v_startdatum 'PERSOONSNUMMER' AND UPPER(rec.prs_kostenplaats_code) <> 'KOSTENPLAATS' THEN v_file_index:=rec.file_index; v_aanduiding := 'Persoon kan niet gevonden worden op basis van personeels nr'|| rec.prs_perslid_nr; BEGIN SELECT p.prs_perslid_key, COALESCE((SELECT pkl.prs_kenmerklink_waarde from prs_kenmerklink pkl, prs_kenmerk pk WHERE pk.prs_kenmerk_code='YOUFORCE_EXCLUDE' AND pkl.prs_kenmerk_key=pkl.prs_kenmerk_key AND pkl.prs_link_key=p.prs_perslid_key AND pk.prs_kenmerk_niveau='P' AND pk.prs_kenmerk_verwijder IS NULL),'0') youforce_excl INTO v_perslid_key, v_youforce_excl FROM prs_perslid p WHERE p.PRS_perslid_NR=rec.prs_perslid_nr AND p.prs_perslid_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN v_perslid_key:=-1; END; IF v_perslid_key=-1 THEN BEGIN v_aanduiding := 'Persoon kan niet gevonden worden op basis van personeels nr'|| rec.prs_perslid_nr||' of email '||rec.prs_perslid_email; SELECT p.prs_perslid_key, COALESCE((SELECT pkl.prs_kenmerklink_waarde from prs_kenmerklink pkl, prs_kenmerk pk WHERE pk.prs_kenmerk_code='YOUFORCE_EXCLUDE' AND pkl.prs_kenmerk_key=pkl.prs_kenmerk_key AND pkl.prs_link_key=p.prs_perslid_key AND pk.prs_kenmerk_niveau='P' AND pk.prs_kenmerk_verwijder IS NULL),'0') youforce_excl INTO v_perslid_key, v_youforce_excl FROM prs_perslid p WHERE UPPER(p.prs_perslid_email)=UPPER(rec.prs_perslid_email) AND p.prs_perslid_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Persoon niet gevonden'); END; END IF; -- Maar nu moeten we de afdeling hebben met het maximaal aantal uren BEGIN v_primary_kostcode:=NULL; v_aanduiding := 'Max aantal uren ophalen gaat fout bij personeels nr'|| rec.prs_perslid_nr; SELECT fac_imp_csv_col03 INTO v_primary_kostcode from ( SELECT fac_imp_csv_col03 FROM fac_imp_csv WHERE fac_import_key=p_import_key AND fac_imp_csv_col01=rec.prs_perslid_nr ORDER BY fac_imp_csv_col07 DESC ) WHERE rownum=1; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Persoon niet gevonden'); END; -- als niet dan fout loggen -- chcek of afdeling kolom2 bestaat via de kostenplaats BEGIN v_aanduiding := 'Kostenplaats/Afdeling kan niet gevonden worden op basis van kostenplaats code'|| rec.prs_kostenplaats_code; SELECT a.prs_afdeling_key, a.prs_perslid_key_verantw, COALESCE(k.prs_perslid_key,-1), k.prs_kostenplaats_key INTO v_afdeling_key, v_afd_verantw_key, v_kpn_budgethouder_key, v_prs_kostenplaats_key FROM prs_kostenplaats k, prs_afdeling a WHERE k.prs_kostenplaats_nr=COALESCE(v_primary_kostcode,rec.prs_kostenplaats_code) AND k.prs_kostenplaats_verwijder IS NULL AND a.prs_kostenplaats_key = k.prs_kostenplaats_key AND a.prs_afdeling_verwijder IS NULL; IF (rec.budgethouder_nr IS NOT NULL) THEN BEGIN v_aanduiding := 'Budgethouder kan niet gevonden worden op basis van budgethouder personeelssnr : '|| rec.budgethouder_nr; SELECT p.prs_perslid_key INTO v_budgethouder_key FROM prs_perslid p where p.prs_perslid_nr=rec.budgethouder_nr AND p.prs_perslid_verwijder IS NULL AND p.prs_perslid_inactief IS NULL OR TRUNC(p.prs_perslid_inactief) > TRUNC(SYSDATE); EXCEPTION WHEN NO_DATA_FOUND THEN v_budgethouder_key:=-1; END; IF v_budgethouder_key=-1 THEN BEGIN v_aanduiding := 'Budgethouder kan niet gevonden worden op basis van budgethouder personeelssnr : '|| rec.budgethouder_nr ||' en email adres '||rec.budgethouder_email; SELECT p.prs_perslid_key INTO v_budgethouder_key FROM prs_perslid p where UPPER(p.prs_perslid_email)=UPPER(rec.budgethouder_email) AND p.prs_perslid_verwijder IS NULL AND p.prs_perslid_inactief IS NULL OR TRUNC(p.prs_perslid_inactief) > TRUNC(SYSDATE); EXCEPTION WHEN NO_DATA_FOUND THEN v_budgethouder_key:=-1; fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Budgethouder niet gevonden'); END; END IF; IF v_budgethouder_key <> -1 AND (v_kpn_budgethouder_key=-1 OR v_budgethouder_key<>v_kpn_budgethouder_key) THEN UPDATE prs_kostenplaats SET prs_perslid_key=v_budgethouder_key WHERE prs_kostenplaats_key= v_prs_kostenplaats_key; END IF; IF v_budgethouder_key<>-1 AND v_budgethouder_key<>v_afd_verantw_key THEN UPDATE prs_afdeling SET prs_perslid_key_verantw=v_budgethouder_key WHERE prs_afdeling_key= v_afdeling_key; END IF; END IF; -- -- Moeten we de persoon ook nog een werkplek geven op de locatei vnd e afdelingen waar ze ondervalt EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Kostenplaats/afdeling niet gevonden'); END; -- ALs ik v_perslid_key heb en een v_afdeling_key en youforce_excl =0 update dan prs_perslid met de afdeling_key, IF v_perslid_key>0 AND v_afdeling_key>0 AND v_youforce_excl='0' THEN v_count:=v_count+1; UPDATE prs_perslid set prs_afdeling_key=v_afdeling_key WHERE prs_perslid_key=v_perslid_key; END IF; FOR rec_aut IN aut(v_primary_kostcode) LOOP SELECT COUNT(*) INTO v_count FROM fac_gebruikersgroep WHERE fac_groep_key = rec_aut.fac_groep_key AND prs_perslid_key = v_perslid_key; IF v_count=0 AND v_perslid_key >0 THEN v_aanduiding := 'Fout bij toevoegen persoon '||v_perslid_key||' aan autorisatiegroep'|| rec_aut.fac_groep_key; INSERT INTO fac_gebruikersgroep(fac_groep_key, prs_perslid_key) VALUES(rec_aut.fac_groep_key, v_perslid_key); END IF; END LOOP; END IF; END LOOP; fac.imp_writelog (p_import_key, 'I', 'Er zijn '||v_count||' personen geupdate', 'Update info'); 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; / -- MJOB elementen import van O-Prognose XML Object export CREATE OR REPLACE PROCEDURE ster_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); 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' 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_alg_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)); 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 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 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 = v_ins_srtdeel_code; 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 := v_ins_srtdeel_code || '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, v_ins_srtdeel_code, 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; -- We gaan nu de nummering van de objecten aanpassen. Ze hebben allemaal het hoogste bestaande nummer + 1 meegekregen. --v_alg_gebouw_code := 'Leeg'; Niet gebruiken bij STER want we lezen 1 gebouw per keer in. -- v_ins_srtdeel_code := 'Leeg'; -- -- FOR rec IN c -- LOOP -- BEGIN -- IF rec.alg_gebouw_code <> v_alg_gebouw_code -- OR rec.ins_srtdeel_code <> v_ins_srtdeel_code -- THEN -- v_ins_deel_volgnr := -- FAC.safe_to_number ( -- SUBSTR (rec.ins_deel_omschrijving, INSTR (rec.ins_deel_omschrijving, '-', 1) + 1, 100)); -- v_alg_gebouw_code := rec.alg_gebouw_code; -- v_ins_srtdeel_code := rec.ins_srtdeel_code; -- ELSE -- v_ins_deel_volgnr := v_ins_deel_volgnr + 1; -- -- UPDATE fac_imp_ins -- SET ins_deel_omschrijving = -- rec.ins_srtdeel_code -- || LPAD (v_ins_deel_volgnr, 3, '0') -- WHERE ins_deel_externnr = rec.ins_deel_externnr -- AND alg_gebouw_code = v_alg_gebouw_code; -- END IF; -- 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 ster_import_mjobelementen; / CREATE OR REPLACE PROCEDURE ster_update_mjobelementen ( p_import_key IN NUMBER) IS BEGIN fac_update_ins (p_import_key); END; / -- EINE MJOB Elementen Import CREATE OR REPLACE PROCEDURE ster_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_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_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); v_aanduiding := '[' || v_alg_gebouw_code || '|' || v_ins_deel_externnr || '|' || v_ins_deel_omschrijving || '|' || v_ins_srtcontrole_omschrijving || '] '; -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen -- de juiste kolomkop. Ik controleer daarbij alle NIET-kenmerk kolommen! -- Ik negeer alles totdat ik een geldige header ben gepasseerd. IF (header_is_valid = 0) THEN IF UPPER (v_oprognose_gebouw_code) = 'GEBOUW_CODE' AND UPPER (v_ins_deel_externnr) = 'DEEL_EXTERNNR' AND UPPER (v_ins_deel_omschrijving) = 'DEEL_OMSCHRIJVING' AND UPPER (v_ins_srtcontrole_omschrijving) = 'SRTCONTROLE_OMSCHRIJVING' AND UPPER (v_ins_srtcontroledl_xcp_materia) = 'SRTCONTROLEDL_XCP_MATERIA' AND UPPER (v_ins_srtcontroledl_xcp_aantal) = 'SRTCONTROLEDL_XCP_AANTAL' AND UPPER (v_ins_srtcontrole_level) = 'SRTCONTROLE_LEVEL' AND UPPER (v_ins_srtcontroledl_xcp_startdat) = 'SRTCONTROLE_STARTJAAR' AND UPPER (v_ins_srtcontroledl_xcp_periode) = 'SRTCONTROLE_PERIODE' AND UPPER (v_ins_srtcontroledl_xcp_perc) = 'SRTCONTROLE_PERCENTAGE' THEN header_is_valid := 1; ELSE IF rec1.fac_imp_file_index = 1 THEN fac.imp_writelog (p_import_key, 'E', 'Ongeldige header aangetroffen:', 'GEBOUW_CODE: ' || UPPER (v_oprognose_gebouw_code) || CHR(10) || 'DEEL_EXTERNNR: ' || UPPER (v_ins_deel_externnr) || CHR(10) || 'DEEL_OMSCHRIJVING: ' || UPPER (v_ins_deel_omschrijving) || CHR(10) || 'SRTCONTROLE_OMSCHRIJVING: ' || UPPER (v_ins_srtcontrole_omschrijving) || CHR(10) || 'SRTCONTROLEDL_XCP_MATERIA: ' || UPPER (v_ins_srtcontroledl_xcp_materia) || CHR(10) || 'SRTCONTROLEDL_XCP_AANTAL: ' || UPPER (v_ins_srtcontroledl_xcp_aantal) || CHR(10) || 'SRTCONTROLE_LEVEL: ' || UPPER (v_ins_srtcontrole_level) || CHR(10) || 'SRTCONTROLE_STARTJAAR: ' || UPPER (v_ins_srtcontroledl_xcp_startdat) || CHR(10) || 'SRTCONTROLE_PERIODE: ' || UPPER (v_ins_srtcontroledl_xcp_periode) || CHR(10) || 'SRTCONTROLE_PERCENTAGE: ' || UPPER (v_ins_srtcontroledl_xcp_perc)); END IF; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden v_errormsg := 'Gebouwcode kan niet gevonden worden'; v_oprognose_gebouw_code := TRIM (v_oprognose_gebouw_code); BEGIN SELECT g.alg_gebouw_code INTO v_alg_gebouw_code FROM alg_gebouw g, alg_onrgoedkenmerk aok WHERE g.alg_gebouw_verwijder IS NULL AND aok.alg_onrgoed_key = g.alg_gebouw_key AND aok.alg_onrgoed_niveau='G' AND UPPER(aok.alg_onrgoedkenmerk_waarde) = UPPER(v_oprognose_gebouw_code); 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(d.ins_deel_externnr) = UPPER(v_ins_deel_externnr) AND dg.alg_gebouw_upper = UPPER(v_alg_gebouw_code); EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog ( p_import_key, 'E', v_aanduiding || v_errormsg, 'Object is niet gevonden op extern id ' ); v_ongeldig := 1; END; END IF; v_errormsg := 'Controle op kosten'; IF FAC.safe_to_number(v_ins_srtcontroledl_xcp_materia) IS NULL THEN fac.imp_writelog ( p_import_key, 'E', v_aanduiding || v_errormsg,'' ); v_ongeldig := 1; END IF; v_errormsg := 'Controle op aantal'; IF v_ins_srtcontroledl_xcp_aantal IS NOT NULL AND FAC.safe_to_number(v_ins_srtcontroledl_xcp_aantal) IS NULL THEN fac.imp_writelog ( p_import_key, 'E', v_aanduiding || v_errormsg,'' ); v_ongeldig := 1; END IF; v_errormsg := 'Controle op startjaar'; IF v_ins_srtcontroledl_xcp_startdat IS NOT NULL AND FAC.safe_to_date('01-01-' || v_ins_srtcontroledl_xcp_startdat, 'dd-mm-yyyy') IS NULL THEN fac.imp_writelog ( p_import_key, 'E', v_aanduiding || v_errormsg,'' ); v_ongeldig := 1; END IF; v_errormsg := 'Controle op periode'; IF v_ins_srtcontroledl_xcp_periode IS NOT NULL AND FAC.safe_to_number(v_ins_srtcontroledl_xcp_periode) IS NULL THEN fac.imp_writelog ( p_import_key, 'E', v_aanduiding || v_errormsg,'' ); v_ongeldig := 1; END IF; v_errormsg := 'Controle op percentage'; IF v_ins_srtcontroledl_xcp_perc IS NOT NULL AND FAC.safe_to_number(v_ins_srtcontroledl_xcp_perc) IS NULL THEN fac.imp_writelog ( p_import_key, 'E', v_aanduiding || v_errormsg,'' ); v_ongeldig := 1; END IF; -- Insert geformatteerde import record IF v_ongeldig = 0 THEN BEGIN v_errormsg := 'Fout bij wegschrijven importregel'; -- Als uit kenmerkheader een geldige kenmerksoort-key volgt, -- dan is kenmerkwaarde gevuld met =; zoniet, -- dan is kenmerkwaarde gevuld met ! -- NB. Een NULL-waarde resulteert NIET in het wissen van een -- kenmerkveld (bijwerken kan wel, maar wissen dus niet)! INSERT INTO fac_imp_csv (FAC_IMPORT_KEY, fac_imp_csv_index, fac_imp_csv_col01, fac_imp_csv_col02, fac_imp_csv_col03, fac_imp_csv_col04, fac_imp_csv_col05, fac_imp_csv_col06, fac_imp_csv_col07, fac_imp_csv_col08, fac_imp_csv_col09, fac_imp_csv_col10) 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)); 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 ster_import_mjobtaken; / CREATE OR REPLACE PROCEDURE ster_update_mjobtaken ( p_import_key IN NUMBER) IS CURSOR c IS SELECT fac_imp_csv_col01 alg_gebouw_code, fac_imp_csv_col02 ins_deel_externnr, fac_imp_csv_col03 ins_deel_omschrijving, fac_imp_csv_col04 ins_srtcontrole_omschrijving, fac_imp_csv_col05 ins_srtcontrole_level, fac_imp_csv_col06 ins_srtcontroledl_xcp_materia, fac_imp_csv_col07 ins_srtcontroledl_xcp_aantal, fac_imp_csv_col08 ins_srtcontroledl_xcp_startdat, fac_imp_csv_col09 ins_srtcontroledl_xcp_periode, fac_imp_csv_col10 ins_srtcontroledl_xcp_perc FROM fac_imp_csv WHERE fac_import_key=p_import_key; v_errormsg VARCHAR2 (1000); v_errorhint VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count_tot NUMBER (10); v_count_import NUMBER (10); v_ongeldig NUMBER (1); v_aanduiding VARCHAR (400); v_ins_deel_key NUMBER; v_ins_deel_aantal NUMBER; v_ins_srtdeel_key NUMBER; v_ins_srtcontrole_key NUMBER; v_ins_srtcontroledl_xcp_key NUMBER; v_ctr_discipline_key NUMBER; v_alg_gebouw_key NUMBER; v_ins_srtdeel_code INS_SRTDEEL.INS_SRTDEEL_CODE%TYPE; v_ins_srtcontroledl_xcp_startdat DATE; v_ins_srtcontroledl_xcp_aantal 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 alg_gebouw_key INTO v_alg_gebouw_key FROM alg_gebouw g WHERE alg_gebouw_verwijder IS NULL AND UPPER(alg_gebouw_code) = rec.alg_gebouw_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 INTO v_ins_deel_key, v_ins_srtdeel_key, v_ins_srtdeel_code, v_ins_deel_aantal FROM ins_v_deel_gegevens dg, ins_srtdeel sd WHERE dg.ins_srtdeel_key = sd.ins_srtdeel_key AND UPPER(dg.ins_deel_omschrijving) = UPPER(rec.ins_deel_omschrijving) AND dg.alg_gebouw_upper = UPPER(rec.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'; 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_upper = UPPER(rec.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; -- 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; -- 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 := ster.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) 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), FAC.safe_to_number(rec.ins_srtcontroledl_xcp_perc), v_ins_srtcontroledl_xcp_startdat) RETURNING ins_srtcontroledl_xcp_key INTO v_ins_srtcontroledl_xcp_key; END; -- Moeten we nu kijken welke XCP taken er zijn aangemaakt en of deze al afgerond hadden moeten zijn zodat ze niet worden doorgeschoven naar het volgene jaar ? fac.imp_writelog (p_import_key, 'I', v_aanduiding || 'Taak is aangemaakt: ' || v_aanduiding, ''); COMMIT; -- TODO moeten we ook taken gaan verwijderen? EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, ''); COMMIT; END; END LOOP; END; / -- EIND MJOB Taken -- Rapportage Views CREATE OR REPLACE VIEW STER_V_MOB_MLD_NOTES AS SELECT distinct m.mld_melding_key, COALESCE(m.mld_melding_onderwerp, (SELECT msm.mld_stdmelding_omschrijving FROM mld_stdmelding msm WHERE msm.mld_stdmelding_key=m.mld_stdmelding_key)) onderwerp, ms.mld_statuses_omschrijving status, (SELECT TO_CHAR(MAX(mld_melding_note_aanmaak),'DD-MM-YYYY HH24:MI') FROM mld_melding_note where mld_melding_key=m.mld_melding_key GROUP BY mld_melding_key)||'-'|| (SELECT * FROM (SELECT mn.mld_melding_note_omschrijving||' ('||p.prs_perslid_naam_friendly||')' FROM mld_melding_note mn , prs_v_perslid_fullnames p WHERE mn.mld_melding_key=m.mld_melding_key AND p.PRS_PERSLID_KEY = mn.PRS_PERSLID_KEY ORDER BY mn.mld_melding_note_aanmaak desc) WHERE ROWNUM = 1) laatste_notitie FROM mld_melding m, mld_melding_note mo, mld_statuses ms WHERE m.mld_melding_key = mo.mld_melding_key(+) AND ms.mld_statuses_key=m.mld_melding_status AND m.mld_melding_status IN (2,3,4,7) ORDER BY mld_melding_key; -- Lijst met meerdaagse uitleenbare objecten en status CREATE OR REPLACE VIEW STER_V_UITLEENLIJST ( ins_deel_key, discipline, groep, soort, omschrijving, opmerking, uitgeleend, status, mld_url ) AS SELECT i.ins_deel_key, id.ins_discipline_omschrijving, ig.ins_srtgroep_omschrijving, isd.ins_srtdeel_omschrijving, i.ins_deel_omschrijving, i.ins_deel_opmerking, DECODE (i.ins_alg_ruimte_key_org, NULL, 'Nee', 'Ja') uigeleend, DECODE ((SELECT COUNT (*) FROM mld_melding m, mld_melding_object mmo WHERE m.mld_stdmelding_key = msm.mld_stdmelding_key AND mmo.mld_melding_key = m.mld_melding_key AND mmo.ins_deel_key = i.ins_deel_key AND m.mld_melding_status in (2,3,4)),1,'Gereserveerd', 'Beschikbaar') status, 'appl/mld/mld_melding.asp?urole=fe'||CHR(38)||'mld_defaultstdmelding='||msm.mld_stdmelding_key||CHR(38)||'ins_key='||i.INS_DEEL_KEY mld_url FROM ins_deel i, ins_discipline id, ins_srtgroep ig, ins_srtdeel isd, mld_stdmelding msm WHERE isd.ins_srtdeel_uitleenbaar = 1 AND isd.ins_srtdeel_key = i.ins_srtdeel_key AND id.ins_discipline_key = ig.ins_discipline_key AND ig.ins_srtgroep_key = isd.ins_srtgroep_key AND msm.mld_stdmelding_code='RESERVEER'; -- -- Looplijst Cateraar -- CREATE OR REPLACE VIEW ster_v_cat_reserveringincl ( key, nummer, res_omschrijving, invoerdatum, datum, gastheer, contact, gastheer_email, gastheer_telefoon, contact_email, contact_telefoon, invoerder, kostensoortgroep, kostensoort, kpn, kpn_omschrijving, kpn_extern, fclt_3d_divisie_key, divisie_naam, divisie_omschrijving, fclt_3d_afdeling_key, afdeling_code, afdeling_omschrijving, regio_omschrijving, district_omschijving, fclt_3d_locatie_key, locatie, locatie_omschrijving, locatie_plaats, gebouw, verdieping, ruimte, opstelling, capaciteit, no_show, mandaat, personeelsnr, fclt_3d_discipline_key, catalogus_key, catalogus, reserveerbare_ruimte, bezoekers, van, tot, duur, status, bostatus, activiteit, srtactiviteit_key, activiteitsoort, opmerking, voorziening_discipline_key, voorziening_type, voorziening_catalogus, leverancier, voorziening_product_key, voorziening_product, voorziening_totaalprijs, voorziening_totaalprijsex, voorziening_van, voorziening_tot, voorziening_aantal, voorziening_prijs, voorziening_opmerking, res_notitie ) AS SELECT rrr.res_rsv_ruimte_key, res.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr, rrr.res_rsv_ruimte_omschrijving, COALESCE (rrr.res_rsv_ruimte_aanmaak, voorz.van), rrr.res_rsv_ruimte_van, (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all pf WHERE pf.prs_perslid_key = rrr.res_rsv_ruimte_host_key), (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all pf WHERE pf.prs_perslid_key = rrr.res_rsv_ruimte_contact_key), (SELECT ph.prs_perslid_email FROM prs_perslid ph WHERE ph.prs_perslid_key = rrr.res_rsv_ruimte_host_key), (SELECT ph.prs_perslid_telefoonnr FROM prs_perslid ph WHERE ph.prs_perslid_key = rrr.res_rsv_ruimte_host_key), (SELECT pc.prs_perslid_email FROM prs_perslid pc WHERE pc.prs_perslid_key = rrr.res_rsv_ruimte_contact_key), (SELECT pc.prs_perslid_telefoonnr FROM prs_perslid pc WHERE pc.prs_perslid_key = rrr.res_rsv_ruimte_contact_key), (SELECT pf.prs_perslid_naam_full FROM fac_tracking tr, fac_srtnotificatie str, prs_v_perslid_fullnames_all pf WHERE tr.prs_perslid_key = pf.prs_perslid_key AND str.fac_srtnotificatie_code = 'RESNEW' AND tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key AND tr.fac_tracking_refkey = rrr.res_rsv_ruimte_key), (SELECT ksg.prs_kostensoortgrp_oms FROM prs_kostensoortgrp ksg, prs_kostensoort ks WHERE ksg.prs_kostensoortgrp_key = ks.prs_kostensoortgrp_key AND ks.prs_kostensoort_key = (SELECT disc.prs_kostensoort_key FROM res_discipline disc WHERE disc.ins_discipline_key = COALESCE ( voorz.ins_discipline_key, (SELECT ins_discipline_key FROM ins_tab_discipline d, res_ruimte_opstelling ro, res_ruimte rr WHERE rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key AND ro.res_ruimte_key = rr.res_ruimte_key AND rr.res_discipline_key = d.ins_discipline_key)))) kostensoortgroep, (SELECT ks.prs_kostensoort_oms FROM prs_kostensoort ks WHERE ks.prs_kostensoort_key = (SELECT disc.prs_kostensoort_key FROM res_discipline disc WHERE disc.ins_discipline_key = COALESCE ( voorz.ins_discipline_key, (SELECT ins_discipline_key FROM ins_tab_discipline d, res_ruimte_opstelling ro, res_ruimte rr WHERE rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key AND ro.res_ruimte_key = rr.res_ruimte_key AND rr.res_discipline_key = d.ins_discipline_key)))) kostensoort, k.prs_kostenplaats_nr, k.prs_kostenplaats_omschrijving, k.prs_kostenplaats_extern, an.prs_afdeling_key, an.prs_afdeling_naam, an.prs_afdeling_omschrijving, a.prs_afdeling_key, a.prs_afdeling_naam, a.prs_afdeling_omschrijving, (SELECT rg.alg_regio_omschrijving FROM alg_regio rg, alg_district d, alg_locatie l, alg_gebouw g, alg_verdieping v, alg_ruimte r WHERE rg.alg_regio_key = d.alg_regio_key AND d.alg_district_key = l.alg_district_key AND l.alg_locatie_key = g.alg_locatie_key AND g.alg_gebouw_key = v.alg_gebouw_key AND v.alg_verdieping_key = r.alg_verdieping_key AND r.alg_ruimte_key = r2a.alg_ruimte_key), (SELECT d.alg_district_omschrijving FROM alg_district d, alg_locatie l, alg_gebouw g, alg_verdieping v, alg_ruimte r WHERE d.alg_district_key = l.alg_district_key AND l.alg_locatie_key = g.alg_locatie_key AND g.alg_gebouw_key = v.alg_gebouw_key AND v.alg_verdieping_key = r.alg_verdieping_key AND r.alg_ruimte_key = r2a.alg_ruimte_key), (SELECT l.alg_locatie_key FROM alg_locatie l, alg_gebouw g, alg_verdieping v, alg_ruimte r WHERE l.alg_locatie_key = g.alg_locatie_key AND g.alg_gebouw_key = v.alg_gebouw_key AND v.alg_verdieping_key = r.alg_verdieping_key AND r.alg_ruimte_key = r2a.alg_ruimte_key), (SELECT alg_locatie_code FROM alg_locatie l, alg_gebouw g, alg_verdieping v, alg_ruimte r WHERE l.alg_locatie_key = g.alg_locatie_key AND g.alg_gebouw_key = v.alg_gebouw_key AND v.alg_verdieping_key = r.alg_verdieping_key AND r.alg_ruimte_key = r2a.alg_ruimte_key), (SELECT alg_locatie_omschrijving FROM alg_locatie l, alg_gebouw g, alg_verdieping v, alg_ruimte r WHERE l.alg_locatie_key = g.alg_locatie_key AND g.alg_gebouw_key = v.alg_gebouw_key AND v.alg_verdieping_key = r.alg_verdieping_key AND r.alg_ruimte_key = r2a.alg_ruimte_key), (SELECT alg_locatie_plaats FROM alg_locatie l, alg_gebouw g, alg_verdieping v, alg_ruimte r WHERE l.alg_locatie_key = g.alg_locatie_key AND g.alg_gebouw_key = v.alg_gebouw_key AND v.alg_verdieping_key = r.alg_verdieping_key AND r.alg_ruimte_key = r2a.alg_ruimte_key), (SELECT alg_gebouw_naam FROM alg_gebouw g, alg_verdieping v, alg_ruimte r WHERE g.alg_gebouw_key = v.alg_gebouw_key AND v.alg_verdieping_key = r.alg_verdieping_key AND r.alg_ruimte_key = r2a.alg_ruimte_key), (SELECT alg_verdieping_code FROM alg_verdieping v, alg_ruimte r WHERE v.alg_verdieping_key = r.alg_verdieping_key AND r.alg_ruimte_key = r2a.alg_ruimte_key), r2a.ruimte_nr, r2a.opstelling, r2a.capaciteit, rrr.res_rsv_ruimte_noshow, NVL ( (SELECT pr.fac_profiel_limiet FROM fac_profiel pr WHERE p.fac_profiel_key = pr.fac_profiel_key), 0), prs_perslid_nr, COALESCE ( voorz.ins_discipline_key, (SELECT ins_discipline_key FROM ins_tab_discipline d, res_ruimte_opstelling ro, res_ruimte rr WHERE rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key AND ro.res_ruimte_key = rr.res_ruimte_key AND rr.res_discipline_key = d.ins_discipline_key)), (SELECT ins_discipline_key FROM ins_tab_discipline d, res_ruimte_opstelling ro, res_ruimte rr WHERE rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key AND ro.res_ruimte_key = rr.res_ruimte_key AND rr.res_discipline_key = d.ins_discipline_key), (SELECT ins_discipline_omschrijving FROM ins_tab_discipline d, res_ruimte_opstelling ro, res_ruimte rr WHERE rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key AND ro.res_ruimte_key = rr.res_ruimte_key AND rr.res_discipline_key = d.ins_discipline_key), DECODE (rrr.alg_ruimte_key, NULL, 'Ja', 'Nee'), rrr.res_rsv_ruimte_bezoekers, rrr.res_rsv_ruimte_van, rrr.res_rsv_ruimte_tot, COALESCE ( (rrr.res_rsv_ruimte_tot - rrr.res_rsv_ruimte_van) * 24, 0), (SELECT res_status_fo_omschrijving FROM res_status_fo rs WHERE rs.res_status_fo_key = rrr.res_status_fo_key), (SELECT res_status_bo_omschrijving FROM res_status_bo rs WHERE rs.res_status_bo_key = rrr.res_status_bo_key), ra.res_activiteit_omschrijving, rsa.res_srtactiviteit_key, rsa.res_srtactiviteit_omschrijving, rrr.res_rsv_ruimte_opmerking, voorz.ins_discipline_key, voorz.vtype, voorz.catalogus, (SELECT prs_bedrijf_naam FROM res_disc_params rdp, prs_bedrijf b WHERE rdp.prs_bedrijf_key = b.prs_bedrijf_key AND rdp.res_ins_discipline_key = voorz.ins_discipline_key), voorz.product_key, voorz.product, voorz.totaalprijs, voorz.totaalprijs_ex, TO_CHAR (voorz.van, 'hh24:mi'), TO_CHAR (voorz.tot, 'hh24:mi'), voorz.aantal, ROUND(voorz.prijs,2), (SELECT rk.res_kenmerkartikel_waarde FROM res_kenmerkartikel rk WHERE rk.res_rsv_artikel_key=voorz.rrr_dl_art_key AND rk.res_kenmerkartikel_verwijder IS NULL) voorz_opm, (SELECT rkw.res_kenmerkreservering_waarde FROM res_kenmerk rk, res_srtkenmerk rsk, res_kenmerkwaarde rkw WHERE rk.res_srtkenmerk_key = rsk.res_srtkenmerk_key and rsk.res_srtkenmerk_code='NOTES' AND rk.res_activiteit_key=ra.res_activiteit_key AND rkw.res_kenmerk_key = rk.res_kenmerk_key AND rkw.res_rsv_ruimte_key=rrr.res_rsv_ruimte_key AND rk.res_kenmerk_verwijder IS NULL) res_notitie FROM res_v_aanwezigrsv_ruimte rrr, res_activiteit ra, res_srtactiviteit rsa, res_reservering res, prs_kostenplaats k, prs_perslid p, prs_afdeling a, prs_afdeling an, prs_v_afdeling_boom ab, ( SELECT res_rsv_ruimte_key, MAX (o.res_opstelling_omschrijving) opstelling, MAX (ro.res_ruimte_opstel_bezoekers) capaciteit, MAX (ra.alg_ruimte_key) alg_ruimte_key, MAX (rr.res_ruimte_nr) ruimte_nr FROM res_rsv_ruimte r, res_ruimte_opstelling ro, res_opstelling o, res_ruimte rr, res_alg_ruimte ra WHERE r.res_rsv_ruimte_verwijder IS NULL AND r.res_ruimte_opstel_key = ro.res_ruimte_opstel_key AND ro.res_ruimte_key = rr.res_ruimte_key AND ro.res_opstelling_key = o.res_opstelling_key AND rr.res_ruimte_key = ra.res_ruimte_key GROUP BY res_rsv_ruimte_key UNION ALL SELECT res_rsv_ruimte_key, '' opstelling, NULL capaciteit, rrr.alg_ruimte_key, r.alg_ruimte_nr FROM res_rsv_ruimte rrr, alg_ruimte r WHERE rrr.alg_ruimte_key IS NOT NULL AND r.alg_ruimte_key = rrr.alg_ruimte_key) r2a, (SELECT rrd.res_rsv_ruimte_key res_rsv_ruimte_key, null rrr_dl_art_key, rd.res_deel_key product_key, rd.res_deel_omschrijving product, DECODE ( rd.res_deel_prijs_vast, 1, NVL (rrd.res_rsv_deel_prijs, rd.res_deel_prijs), (rrd.res_rsv_deel_tot - rrd.res_rsv_deel_van) * 24 * NVL (rrd.res_rsv_deel_prijs, rd.res_deel_prijs)) totaalprijs, NULL totaalprijs_ex, rrd.res_rsv_deel_van van, rrd.res_rsv_deel_tot tot, (rrd.res_rsv_deel_tot - rrd.res_rsv_deel_van) * 24 aantal, NVL (rrd.res_rsv_deel_prijs, rd.res_deel_prijs) prijs, c.ins_discipline_key ins_discipline_key, c.ins_discipline_omschrijving catalogus, 'object' vtype FROM res_v_aanwezigrsv_deel rrd, res_deel rd, ins_deel d, ins_tab_discipline c WHERE rrd.res_deel_key = rd.res_deel_key AND d.ins_deel_key = rd.res_ins_deel_key AND rrd.res_rsv_ruimte_key IS NOT NULL AND c.ins_discipline_key = rd.res_discipline_key UNION ALL SELECT rra.res_rsv_ruimte_key res_rsv_ruimte_key, rra.res_rsv_artikel_key rrr_dl_art_key, ra.res_artikel_key product_key, COALESCE(rra.res_rsv_artikel_omschrijving,ra.res_artikel_omschrijving) product, NVL (rra.res_rsv_artikel_prijs, rra.res_rsv_artikel_aantal * res_artikel_prijs) totaalprijs, NVL (rra.res_rsv_artikel_prijs/(1+NVL(res_artikel_btw/100,0)), rra.res_rsv_artikel_aantal * res_artikel_prijs/(1+NVL(res_artikel_btw/100,0))) totaalprijs_ex, rra.res_rsv_artikel_levering van, NULL tot, rra.res_rsv_artikel_aantal aantal, NVL (rra.res_rsv_artikel_prijs / rra.res_rsv_artikel_aantal, res_artikel_prijs) prijs, c.ins_discipline_key ins_discipline_key, c.ins_discipline_omschrijving catalogus, 'consumable' vtype FROM res_v_aanwezigrsv_artikel rra, res_artikel ra, ins_tab_discipline c WHERE rra.res_artikel_key = ra.res_artikel_key AND ra.res_discipline_key = c.ins_discipline_key) voorz WHERE rrr.res_reservering_key = res.res_reservering_key AND rrr.res_rsv_ruimte_key = r2a.res_rsv_ruimte_key(+) AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+) AND rrr.res_rsv_ruimte_key = voorz.res_rsv_ruimte_key AND rrr.res_activiteit_key = ra.res_activiteit_key AND ra.res_srtactiviteit_key = rsa.res_srtactiviteit_key AND rrr.res_rsv_ruimte_host_key = p.prs_perslid_key AND p.prs_afdeling_key = a.prs_afdeling_key AND p.prs_afdeling_key = ab.prs_afdeling_key AND ab.prs_afdeling_key1 = an.prs_afdeling_key AND (rrr.res_ruimte_opstel_key IS NOT NULL OR voorz.res_rsv_ruimte_key IS NOT NULL) AND rrr.res_rsv_ruimte_van >= TO_DATE ('01-01-2010', 'DD-MM-YYYY'); CREATE OR REPLACE VIEW STER_V_MELDING_BEHANDELTEAM AS SELECT m.mld_melding_key, l.alg_locatie_omschrijving || '-' || a.alg_gebouw_naam || ' ' || a.alg_ruimte_nr locatie, m.mld_melding_onderwerp onderwerp, TO_CHAR (SUBSTR (m.mld_melding_omschrijving, 1, 50)) omschrijving, vg.ins_discipline_omschrijving behandelteam, p.prs_perslid_naam_friendly aanvrager, ms.mld_statuses_omschrijving status FROM mld_melding m, mld_discipline vg, alg_v_onroerendgoed_gegevens a, alg_locatie l, prs_v_perslid_fullnames p, mld_statuses ms WHERE m.mld_melding_status = ms.mld_statuses_key AND ms.mld_statuses_omschrijving IN ('Nieuw', 'In behandeling') AND vg.ins_discipline_key(+) = m.mld_ins_discipline_key AND a.alg_onroerendgoed_keys(+) = m.mld_alg_onroerendgoed_keys AND l.alg_locatie_key = a.alg_locatie_key AND p.prs_perslid_key = m.prs_perslid_key; CREATE OR REPLACE VIEW STER_V_NOTI_RES_REMINDER ( key, code, sender, receiver, text, xkey, xemail, xmobile ) AS SELECT rrr.res_rsv_ruimte_key key, 'CUST01' code, NULL sender, rrr.res_rsv_ruimte_contact_key receiver, 'Herinnering van je reservering '||rrr.res_reservering_key||'/'||rrr.RES_RSV_RUIMTE_VOLGNR||' op '||TO_CHAR(rrr.res_rsv_ruimte_van,'DD-MM-YYYY')||' om '||TO_CHAR(rrr.res_rsv_ruimte_van,'HH24:MI') text, NULL xkey, NULL xemail, NULL xmobile FROM res_rsv_ruimte rrr WHERE FAC.count_Work_Days (SYSDATE, rrr.res_rsv_ruimte_van) = 2 AND FAC.count_Work_Days (rrr.res_rsv_ruimte_aanmaak, SYSDATE) >= 0 -- als kort van te voren (2 dagen) aangemaakt dan sturen we geen noti AND rrr.res_activiteit_key IN (170,171) -- Alleen reservering uit Outlook AND rrr.res_rsv_ruimte_verwijder IS NULL AND NOT EXISTS (SELECT 1 FROM fac_tracking t WHERE t.fac_srtnotificatie_key = 228 AND t.fac_tracking_refkey = rrr.res_rsv_ruimte_key AND t.fac_tracking_oms LIKE '%CUST01%'); CREATE OR REPLACE VIEW STER_V_CATERING_NOTI ( xkey, key, code, sender, receiver, text, xemail, xmobile ) AS SELECT distinct rrr.res_rsv_ruimte_key xkey, rrr.res_reservering_key key, 'CUST03' code, NULL sender, NULL receiver, 'Catering voor reservering '||res_reservering_key||'/'||rrr.res_rsv_ruimte_volgnr||' is nieuw of gewijzigd.' text, 'catering@sterkhuis.nl' xemail, NULL xmobile FROM res_rsv_ruimte rrr, res_rsv_artikel rra, res_artikel ra, fac_notificatie_job fnj WHERE rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key AND ra.res_artikel_key = rra.res_artikel_key AND rrr.res_status_fo_key=2 AND rrr.res_rsv_ruimte_verwijder IS NULL AND rrr.res_rsv_ruimte_dirtlevel=0 AND fnj.fac_notificatie_job_view='STER_V_CATERING_NOTI' AND COALESCE(rra.res_rsv_artikel_mutatie, rra.res_rsv_artikel_aanmaak) > COALESCE(fnj.fac_notificatie_job_lastrun, SYSDATE) UNION SELECT distinct rrr.res_rsv_ruimte_key xkey, rrr.res_reservering_key key, 'CUST03' code, NULL sender, NULL receiver, 'Reservering '||res_reservering_key||'/'||rrr.res_rsv_ruimte_volgnr||' met catering is verwijderd.' text, 'catering@sterkhuis.nl' xemail, NULL xmobile FROM res_rsv_ruimte rrr, res_rsv_artikel rra, res_artikel ra, fac_notificatie_job fnj WHERE rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key AND ra.res_artikel_key = rra.res_artikel_key AND rrr.res_rsv_ruimte_verwijder IS NOT NULL AND rrr.res_rsv_ruimte_dirtlevel=0 AND fnj.fac_notificatie_job_view='STER_V_CATERING_NOTI' AND rrr.res_rsv_ruimte_verwijder > COALESCE(fnj.fac_notificatie_job_lastrun, SYSDATE) UNION SELECT distinct rrr.res_rsv_ruimte_key xkey, rrr.res_reservering_key key, 'CUST03' code, NULL sender, NULL receiver, 'Catering artikel bij '||res_reservering_key||'/'||rrr.res_rsv_ruimte_volgnr||' is verwijderd.' text, 'catering@sterkhuis.nl' xemail, NULL xmobile FROM res_rsv_ruimte rrr, res_rsv_artikel rra, res_artikel ra, fac_notificatie_job fnj WHERE rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key AND ra.res_artikel_key = rra.res_artikel_key AND rrr.res_status_fo_key=2 AND rrr.res_rsv_ruimte_verwijder IS NULL AND rrr.res_rsv_ruimte_dirtlevel=0 AND fnj.fac_notificatie_job_view='STER_V_CATERING_NOTI' AND COALESCE(fnj.fac_notificatie_job_lastrun, SYSDATE) < (SELECT MIN(fac_tracking_datum) FROM fac_tracking WHERE fac_tracking_refkey=rrr.res_rsv_ruimte_key AND UPPER(fac_tracking_oms) like '%ARTIKEL%VERWIJDERD'); ------ 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