-- Script containing customer specific configuration sql statements for Provalu (voorheen De Maregroep) -- $Revision$ -- $Id$ DEFINE thisfile = 'MARE.SQL' DEFINE dbuser = 'MARE' 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 PROCEDURE mare_import_perslid (p_import_key IN NUMBER) AS oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_errormsg VARCHAR2 (400); v_errorhint VARCHAR2 (400); v_aantal_in_fclt NUMBER; BEGIN -- Het aangeleverde bestand heeft de gegevens komma gescheiden ipv ; v_errorhint := 'Delimiter goed zetten'; UPDATE fac_imp_file SET fac_imp_file_line = REPLACE (fac_imp_file_line, ',', ';') WHERE fac_import_key = p_import_key; v_errorhint := 'Generieke update'; -- de sequence array staat beschreven in PRS_PAC.SRC bij de prs.import_perslid procedure -- Afdeling (nr7) tijdelijk gevuld met achternaam (wordt later altijd Provalu) -- Login (nr 22) wordt bij de import nog wel uit het bestand gehaald 3e kolom, maar later omgezet naar emailadres. -- Let op, tov het daadwerkelijke bestand staat hieronder ; ipv , prs.import_perslid ( p_import_key, '0;0;0;0;0;0;2;2;0;1;' || '0;0;0;0;0;0;0;5;0;0;' || '2;3;0;0;0;0;0;0;0;4;' || '0;0;0;0;0;0;0;0;0;0;' || '0;0;0;0;0;0', ';;;;;"Firstname;LastName;Login;JobTitle;EmailAdress;"'); -- Afdeling bepalen UPDATE fac_imp_perslid SET prs_afdeling_naam = 'Provalu'; -- Loginnaam afleiden van emailadres UPDATE fac_imp_perslid SET prs_perslid_oslogin = (SUBSTR (prs_perslid_email, 0, INSTR (prs_perslid_email, '@') - 1)) WHERE UPPER (prs_perslid_email) LIKE '%PROVALU.NL%'; -- Loginnaam afleiden van emailadres UPDATE fac_imp_perslid SET prs_perslid_oslogin = (SUBSTR (prs_perslid_email, 0, INSTR (prs_perslid_email, '@') - 1)) WHERE UPPER (prs_perslid_email) LIKE '%SERVICEPUNT-WERK.NL%'; -- Functie is niet altijd gevuld, functie eerst gevuld met achternaam, nu vullen met kenmerk (of 'Onbekend'). UPDATE fac_imp_perslid SET prs_srtperslid_omschrijving = DECODE (prs_kenmerk4, NULL, 'Onbekend', prs_kenmerk4); COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint); END mare_import_perslid; / CREATE OR REPLACE PROCEDURE mare_update_perslid (p_import_key IN NUMBER) IS -- Alle personen verwijderen die niet meer in het import import bestand voorkomen -- Personen in de juiste autorisatiegroep zetten. -- Match bij Provalu is Email. -- Geen acties tenzij het aantal records in de importtabel meer dan 50 medewerkers betreft. CURSOR c_del IS SELECT p.prs_perslid_key, p.prs_perslid_nr, pf.prs_perslid_naam_full FROM prs_perslid p, prs_v_perslid_fullnames pf WHERE (UPPER (p.prs_perslid_email) LIKE '%PROVALU.NL%' OR UPPER (p.prs_perslid_email) LIKE '%SERVICEPUNT-WERK.NL%') AND UPPER (p.prs_perslid_email) NOT IN (SELECT UPPER (prs_perslid_email) FROM fac_imp_perslid) AND pf.prs_perslid_key = p.prs_perslid_key; v_count NUMBER; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_errormsg VARCHAR2 (400); v_errorhint VARCHAR2 (400); BEGIN v_errorhint := 'Niet genoeg personen in bestand, import afgebroken'; SELECT COUNT ( * ) INTO v_count FROM fac_imp_perslid; IF v_count >= 50 THEN v_errorhint := 'Verwerken persoonsgegevens'; -- Geldig importbestand wat betreft aantal personen COMMIT; -- Eerst de functie omzetten. UPDATE fac_imp_perslid SET prs_srtperslid_omschrijving = COALESCE (prs_kenmerk4, 'Onbekend'); -- generic update -- 'EMAIL' betekent dat op basis van Email wordt gematched. -- 'NULL' betekent altijd geen werkplekken verwijderen prs.update_perslid (p_import_key, 'EMAIL', NULL); v_errorhint := 'Verwijderen persoonsgegevens'; -- Verwijder personen die niet meer in de import voorkomen. FOR rec IN c_del LOOP BEGIN prs.delete_perslid (p_import_key, rec.prs_perslid_key); END; END LOOP; ELSE fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint); COMMIT; END IF; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint); END mare_update_perslid; / CREATE OR REPLACE VIEW mare_v_objectnummers ( ins_deel_key, ins_deel_module, ins_srtdeel_key, ins_alg_ruimte_key, ins_alg_ruimte_type, ins_deel_aantal, ins_deel_omschrijving, ins_deel_opmerking, ins_deel_upper, ins_deel_aanmaak, ins_deel_vervaldatum, ins_deel_verwijder, ins_deel_getekend, ins_discipline_key, ins_alg_locatie_key, ins_deel_parent_key, ins_deel_omtrek, ins_deel_oppervlak, ins_deel_dwgx, ins_deel_dwgy, ins_deel_dwgz, ins_deel_dwgrotatie, ins_deel_dwgschaal, ins_deel_x, ins_deel_y, ins_alg_ruimte_key_org, ins_alg_ruimte_type_org, ins_deel_state, ins_deel_statedate, ins_deel_t_uitvoertijd, ins_deel_actief, ins_deel_image, ins_deel_mjb_score1, ins_deel_mjb_score2, prs_perslid_key_beh, res_rsv_deel_key, bes_bestelopdr_key, ultimonummer, uniek_nummer ) AS SELECT ins_deel_key, ins_deel_module, ins_srtdeel_key, ins_alg_ruimte_key, ins_alg_ruimte_type, ins_deel_aantal, ins_deel_omschrijving, ins_deel_opmerking, ins_deel_upper, ins_deel_aanmaak, ins_deel_vervaldatum, ins_deel_verwijder, ins_deel_getekend, ins_discipline_key, ins_alg_locatie_key, ins_deel_parent_key, ins_deel_omtrek, ins_deel_oppervlak, ins_deel_dwgx, ins_deel_dwgy, ins_deel_dwgz, ins_deel_dwgrotatie, ins_deel_dwgschaal, ins_deel_x, ins_deel_y, ins_alg_ruimte_key_org, ins_alg_ruimte_type_org, ins_deel_state, ins_deel_statedate, ins_deel_t_uitvoertijd, ins_deel_actief, ins_deel_image, ins_deel_mjb_score1, ins_deel_mjb_score2, prs_perslid_key_beh, res_rsv_deel_key, bes_bestelopdr_key, (SELECT fac.safe_to_number (kmd.ins_kenmerkdeel_waarde) FROM ins_kenmerkdeel kmd, ins_kenmerk km, ins_srtkenmerk skm WHERE kmd.ins_deel_key = d.ins_deel_key AND kmd.ins_kenmerk_key = km.ins_kenmerk_key AND km.ins_srtkenmerk_key = skm.ins_srtkenmerk_key AND skm.ins_srtkenmerk_key = 9), -- Kenmerksoort Ultimonummer COALESCE ( (SELECT fac.safe_to_number (kmd.ins_kenmerkdeel_waarde) FROM ins_kenmerkdeel kmd, ins_kenmerk km, ins_srtkenmerk skm WHERE kmd.ins_deel_key = d.ins_deel_key AND kmd.ins_kenmerk_key = km.ins_kenmerk_key AND km.ins_srtkenmerk_key = skm.ins_srtkenmerk_key AND skm.ins_srtkenmerk_key = 9), -- Kenmerksoort Ultimonummer d.ins_deel_key + 100000) FROM ins_v_aanwezigdeel d; CREATE OR REPLACE PROCEDURE mare_import_insp_metrel (p_import_key IN NUMBER) IS c_delim VARCHAR2 (1) := ';'; v_newline VARCHAR2 (1000); -- Input line v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_errorhint VARCHAR2 (400); header_is_valid NUMBER; v_count_tot NUMBER (10); v_count_import NUMBER (10); v_ongeldig NUMBER (1); v_aanduiding VARCHAR (200); -- De importvelden: v_projekt VARCHAR2 (60); v_ruimte VARCHAR2 (60); v_apparaat_nummer VARCHAR2 (60); v_apparaat_naam VARCHAR2 (60); v_status VARCHAR2 (60); v_gebruiker VARCHAR2 (60); v_testdatum VARCHAR2 (60); v_geldig_tot VARCHAR2 (60); v_locatie VARCHAR2 (60); v_activiteit VARCHAR2 (60); v_commentaar VARCHAR2 (60); v_reparatie_code VARCHAR2 (60); v_visuele_test VARCHAR2 (60); v_isolatie_sonde VARCHAR2 (60); v_vermogen VARCHAR2 (60); v_beschermingsleiding VARCHAR2 (60); v_isolatie VARCHAR2 (60); -- Overig: v_ins_controle_datum_d DATE; -- DATE CURSOR c1 IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; BEGIN DELETE FROM mare_imp_insp_metrel; COMMIT; -- Het aangeleverde bestand heeft de gegevens komma gescheiden ipv ; v_errorhint := 'Delimiter goed zetten'; UPDATE fac_imp_file SET fac_imp_file_line = REPLACE (fac_imp_file_line, '","', ';') WHERE fac_import_key = p_import_key; -- Ook heeft het aangeleverde bestand "" om de string staan, na bovenstaand om de gehele string zelfs. v_errorhint := 'Delimiter goed zetten'; UPDATE fac_imp_file SET fac_imp_file_line = REPLACE (fac_imp_file_line, '"', '') WHERE fac_import_key = p_import_key; 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_errormsg := 'Fout bij opvragen importregel'; v_aanduiding := ''; v_ongeldig := 0; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_delim, v_projekt); fac.imp_getfield (v_newline, c_delim, v_ruimte); fac.imp_getfield (v_newline, c_delim, v_apparaat_nummer); fac.imp_getfield (v_newline, c_delim, v_apparaat_naam); fac.imp_getfield (v_newline, c_delim, v_status); fac.imp_getfield (v_newline, c_delim, v_gebruiker); fac.imp_getfield (v_newline, c_delim, v_testdatum); fac.imp_getfield (v_newline, c_delim, v_geldig_tot); fac.imp_getfield (v_newline, c_delim, v_locatie); fac.imp_getfield (v_newline, c_delim, v_activiteit); fac.imp_getfield (v_newline, c_delim, v_commentaar); fac.imp_getfield (v_newline, c_delim, v_reparatie_code); fac.imp_getfield (v_newline, c_delim, v_visuele_test); fac.imp_getfield (v_newline, c_delim, v_isolatie_sonde); fac.imp_getfield (v_newline, c_delim, v_vermogen); fac.imp_getfield (v_newline, c_delim, v_beschermingsleiding); fac.imp_getfield (v_newline, c_delim, v_isolatie); v_aanduiding := '[' || v_apparaat_nummer || ' (' || v_apparaat_naam || ')] '; -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen -- de juiste kolomkop. Ik controleer daarbij ALLE kolommen! -- Ik negeer alles totdat ik een geldige header ben gepasseerd. IF (header_is_valid = 0) THEN IF UPPER (v_projekt) = 'PROJEKT' AND UPPER (v_ruimte) = 'RUIMTE' AND UPPER (v_apparaat_nummer) = 'APPARAAT/PROJECT' --Deze header is de enige die qua naam afwijkt van naam variabele AND UPPER (v_apparaat_naam) = 'APPARAAT NAAM' AND UPPER (v_status) = 'STATUS' AND UPPER (v_gebruiker) = 'GEBRUIKER' AND UPPER (v_testdatum) = 'TESTDATUM' AND UPPER (v_geldig_tot) = 'GELDIG TOT' AND UPPER (v_locatie) = 'LOCATIE' AND UPPER (v_activiteit) = 'ACTIVITEIT' AND UPPER (v_commentaar) = 'COMMENTAAR' AND UPPER (v_reparatie_code) = 'REPARATIE CODE' AND UPPER (v_visuele_test) = 'VISUELE TEST' AND UPPER (v_isolatie_sonde) = 'ISOLATIE SONDE' AND UPPER (v_vermogen) = 'VERMOGEN' AND UPPER (v_beschermingsleiding) = 'BESCHERMINGSLEIDING' AND UPPER (v_isolatie) = 'ISOLATIE' THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden v_errormsg := 'Locatiecode ongeldig'; v_projekt := TRIM (v_projekt); IF LENGTH (v_projekt) > 60 THEN v_projekt := SUBSTR (v_projekt, 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Projekt wordt afgebroken tot [' || v_projekt || ']'); END IF; v_ruimte := TRIM (v_ruimte); IF LENGTH (v_ruimte) > 60 THEN v_ruimte := SUBSTR (v_ruimte, 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Ruimte wordt afgebroken tot [' || v_ruimte || ']'); END IF; v_apparaat_nummer := TRIM (v_apparaat_nummer); IF LENGTH (v_apparaat_nummer) > 60 THEN v_apparaat_nummer := SUBSTR (v_apparaat_nummer, 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Apparaat nummer wordt afgebroken tot [' || v_apparaat_nummer || ']'); END IF; v_apparaat_naam := TRIM (v_apparaat_naam); IF LENGTH (v_apparaat_naam) > 60 THEN v_apparaat_naam := SUBSTR (v_apparaat_naam, 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Apparaat naam wordt afgebroken tot [' || v_apparaat_naam || ']'); END IF; v_status := TRIM (v_status); IF LENGTH (v_status) > 60 THEN v_status := SUBSTR (v_status, 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Status wordt afgebroken tot [' || v_status || ']'); END IF; v_gebruiker := TRIM (v_gebruiker); IF LENGTH (v_gebruiker) > 60 THEN v_gebruiker := SUBSTR (v_gebruiker, 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Gebruiker wordt afgebroken tot [' || v_gebruiker || ']'); END IF; v_testdatum := TRIM (v_testdatum); IF LENGTH (v_testdatum) > 60 THEN v_testdatum := SUBSTR (v_testdatum, 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Testdatum wordt afgebroken tot [' || v_testdatum || ']'); END IF; v_geldig_tot := TRIM (v_geldig_tot); IF LENGTH (v_geldig_tot) > 60 THEN v_geldig_tot := SUBSTR (v_geldig_tot, 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Geldig tot wordt afgebroken tot [' || v_geldig_tot || ']'); END IF; v_locatie := TRIM (v_locatie); IF LENGTH (v_locatie) > 60 THEN v_locatie := SUBSTR (v_locatie, 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Locatie wordt afgebroken tot [' || v_locatie || ']'); END IF; v_activiteit := TRIM (v_activiteit); IF LENGTH (v_activiteit) > 60 THEN v_activiteit := SUBSTR (v_activiteit, 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Activiteit wordt afgebroken tot [' || v_activiteit || ']'); END IF; v_commentaar := TRIM (v_commentaar); IF LENGTH (v_commentaar) > 60 THEN v_commentaar := SUBSTR (v_commentaar, 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Commentaar wordt afgebroken tot [' || v_commentaar || ']'); END IF; v_reparatie_code := TRIM (v_reparatie_code); IF LENGTH (v_reparatie_code) > 60 THEN v_reparatie_code := SUBSTR (v_reparatie_code, 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Reparatiecode wordt afgebroken tot [' || v_reparatie_code || ']'); END IF; v_visuele_test := TRIM (v_visuele_test); IF LENGTH (v_visuele_test) > 60 THEN v_visuele_test := SUBSTR (v_visuele_test, 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Visuele test wordt afgebroken tot [' || v_visuele_test || ']'); END IF; v_isolatie_sonde := TRIM (v_isolatie_sonde); IF LENGTH (v_isolatie_sonde) > 60 THEN v_isolatie_sonde := SUBSTR (v_isolatie_sonde, 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Isolatie sonde wordt afgebroken tot [' || v_isolatie_sonde || ']'); END IF; v_vermogen := TRIM (v_vermogen); IF LENGTH (v_vermogen) > 60 THEN v_vermogen := SUBSTR (v_vermogen, 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Vermogen wordt afgebroken tot [' || v_vermogen || ']'); END IF; v_beschermingsleiding := TRIM (v_beschermingsleiding); IF LENGTH (v_beschermingsleiding) > 60 THEN v_beschermingsleiding := SUBSTR (v_beschermingsleiding, 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Beschermingsgeleiding wordt afgebroken tot [' || v_beschermingsleiding || ']'); END IF; v_isolatie := TRIM (v_isolatie); IF LENGTH (v_isolatie) > 60 THEN v_isolatie := SUBSTR (v_isolatie, 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Isolatie wordt afgebroken tot [' || v_isolatie || ']'); END IF; -- Insert geformatteerde import record IF v_ongeldig = 0 THEN BEGIN v_errormsg := 'Fout bij wegschrijven importregel'; INSERT INTO mare_imp_insp_metrel (alg_locatie_code, ins_deel_omschrijving, ins_srtcontrole_omschrijving, ins_deelsrtcontrole_datum, ins_deelsrtcontrole_opmerking, apparaatnummer, gebruiker, status, visuele_test, isolatie_sonde, vermogen, beschermingsleiding, isolatie) VALUES (v_locatie, v_apparaat_naam, 'Metrel', v_testdatum, v_commentaar, v_apparaat_nummer, v_gebruiker, v_status, v_visuele_test, v_isolatie_sonde, v_vermogen, v_beschermingsleiding, v_isolatie); COMMIT; v_count_import := v_count_import + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, ''); COMMIT; END; END IF; END IF; END; END LOOP; IF (header_is_valid = 0) THEN fac.imp_writelog (p_import_key, 'E', 'Ongeldig importbestand', 'Geen header of header niet volgens specificatie!'); ELSE fac.imp_writelog ( p_import_key, 'S', 'Inspectieobjecten/aantal ingelezen importregels: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog ( p_import_key, 'S', 'Inspectieobjecten/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 inspectieobjecten afgebroken!' || v_errorhint); END mare_import_insp_metrel; / CREATE OR REPLACE PROCEDURE mare_update_insp_metrel (p_import_key IN NUMBER) AS v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count NUMBER (10); v_count_tot NUMBER (10); v_count_cupdate NUMBER (10); v_aanduiding VARCHAR (200); CURSOR c1 IS SELECT i.alg_locatie_code, i.ins_deel_omschrijving, i.ins_srtcontrole_omschrijving, i.ins_deelsrtcontrole_datum, i.ins_deelsrtcontrole_opmerking, i.apparaatnummer, i.gebruiker, i.status, i.visuele_test, i.isolatie_sonde, i.vermogen, i.beschermingsleiding, i.isolatie, ad.ins_srtdeel_key, g.ins_srtgroep_key, ad.ins_discipline_key, al.alg_locatie_key, sc.ins_srtcontrole_key, sc.ins_srtinstallatie_key, ad.ins_deel_key, u.ultimonummer, u.uniek_nummer FROM mare_imp_insp_metrel i, ins_srtcontrole sc, ins_v_aanwezigdeel ad, ins_srtdeel sd, ins_srtgroep g, alg_v_aanweziglocatie al, mare_v_objectnummers u WHERE fac.safe_to_number (i.apparaatnummer) = u.uniek_nummer AND ad.ins_deel_key = u.ins_deel_key(+) AND sd.ins_srtdeel_key(+) = ad.ins_srtdeel_key AND g.ins_srtgroep_key(+) = sd.ins_srtgroep_key AND al.alg_locatie_key(+) = ad.ins_alg_locatie_key AND sd.ins_srtdeel_key = sc.ins_srtinstallatie_key AND sc.ins_srtcontrole_niveau = 'S' AND UPPER (sc.ins_srtcontrole_omschrijving) LIKE '%METREL%'; v_deel_key NUMBER (10); v_kenmerk_key NUMBER (10); v_kenmerkdeel_key NUMBER (10); v_srtcontrole_id VARCHAR2 (20); v_controlemode_succes_key NUMBER (10); v_controlemode_afkeur_key NUMBER (10); v_deelsrtcontrole_key NUMBER (10); BEGIN v_count := 0; v_count_tot := 0; v_count_cupdate := 0; v_aanduiding := ''; -- FOR rec IN c1 LOOP BEGIN v_count_tot := v_count_tot + 1; v_aanduiding := '[' || rec.ins_deel_omschrijving || '|' || rec.alg_locatie_code || '|' || rec.ins_srtcontrole_omschrijving || '|' || rec.ins_deelsrtcontrole_datum || '] '; -- We kunnen alleen iets met objecten die we kennen! IF (rec.ins_deel_key IS NULL OR rec.alg_locatie_key IS NULL) THEN fac.imp_writelog ( p_import_key, 'E', 'Objectcode onbekend (binnen locatie); regel wordt overgeslagen', v_aanduiding); CONTINUE; END IF; -- Zonder datum doen we niks IF (rec.ins_deelsrtcontrole_datum IS NULL) THEN fac.imp_writelog ( p_import_key, 'E', 'Geen datum ingevuld; regel wordt overgeslagen', v_aanduiding); CONTINUE; END IF; -- Kennen we de srtcontrole uberhaupt? IF (rec.ins_srtcontrole_key IS NULL) THEN fac.imp_writelog ( p_import_key, 'E', 'Soort taak onbekend; regel wordt overgeslagen', v_aanduiding); CONTINUE; END IF; -- En hoort die srtcontrole ook bij deze objectsoort/-groep/discipline? v_errormsg := 'srtcontrole bij objectsoort'; SELECT COUNT ( * ) INTO v_count FROM ins_srtcontrole sc WHERE sc.ins_srtcontrole_key = rec.ins_srtcontrole_key AND sc.ins_srtinstallatie_key = DECODE (sc.ins_srtcontrole_niveau, 'S', rec.ins_srtdeel_key, 'G', rec.ins_srtgroep_key, 'D', rec.ins_discipline_key); -- Nee --> overslaan IF (v_count = 0) THEN fac.imp_writelog ( p_import_key, 'E', 'Soort taak hoort niet bij object; regel wordt overgeslagen', v_aanduiding); CONTINUE; END IF; -- TODO: kan een srtcontrole meerdere malen aan een object gekoppeld zijn? Dan dat nog specifieker bepalen? IF (rec.ins_deelsrtcontrole_datum IS NULL) THEN fac.imp_writelog ( p_import_key, 'E', 'Geen datum opgegeven; regel wordt overgeslagen', v_aanduiding); CONTINUE; END IF; v_errormsg := 'Fout bij bepalen controlemethode succes'; SELECT MIN (cm.ins_controlemode_key) INTO v_controlemode_succes_key FROM ins_controlemode cm, ctr_disc_params dp, ins_srtcontrole sc WHERE cm.ins_controlemode_success = 1 AND cm.ins_srtcontrole_type = dp.ctr_disc_params_controle_type AND dp.ctr_ins_discipline_key = sc.ctr_discipline_key AND sc.ins_srtcontrole_key = rec.ins_srtcontrole_key; v_errormsg := 'Fout bij bepalen controlemethode afgekeurd'; SELECT MIN (cm.ins_controlemode_key) INTO v_controlemode_afkeur_key FROM ins_controlemode cm, ctr_disc_params dp, ins_srtcontrole sc WHERE cm.ins_controlemode_success = 0 AND cm.ins_srtcontrole_type = dp.ctr_disc_params_controle_type AND dp.ctr_ins_discipline_key = sc.ctr_discipline_key AND sc.ins_srtcontrole_key = rec.ins_srtcontrole_key; -- TODO: ins_deelsrtcontrole_datum_org is de datum waarop de taak eigenlijk gedaan had -- moeten worden. Die staat bij taken met standaardperiode 0 in ins_srtcontroledl_xcp en -- zal doorgaans afwijken van de datum in het importbestand. v_errormsg := 'Fout bij toevoegen controle'; INSERT INTO ins_deelsrtcontrole (ins_deel_key, ins_srtcontrole_key, ins_deelsrtcontrole_datum, ins_deelsrtcontrole_datum_org, ins_controlemode_key, ins_deelsrtcontrole_opmerking) VALUES (rec.ins_deel_key, rec.ins_srtcontrole_key, SYSDATE, SYSDATE, DECODE (NULL, --rec.afgekeurd NULL, v_controlemode_succes_key, v_controlemode_afkeur_key), rec.ins_deelsrtcontrole_opmerking) RETURNING ins_deelsrtcontrole_key INTO v_deelsrtcontrole_key; IF (rec.status IS NOT NULL) THEN BEGIN v_errormsg := 'Fout bij bepalen kenmerk Status'; SELECT MIN (ins_kenmerk_key) INTO v_kenmerk_key FROM ins_kenmerk k, ins_srtkenmerk sk, ins_srtcontrole sc WHERE k.ins_kenmerk_niveau = 'C' AND k.ins_srtinstallatie_key = sc.ins_srtcontrole_key AND k.ins_kenmerk_verwijder IS NULL AND k.ins_srtinstallatie_key = rec.ins_srtcontrole_key AND k.ins_srtkenmerk_key = 41; --Taakkenmerk 'Status' v_errormsg := 'Kenmerk Status vastleggen'; INSERT INTO ins_kmdeelsrtcontr (ins_deelsrtcontrole_key, ins_kenmerk_key, ins_kmdeelsrtcontr_waarde) VALUES (v_deelsrtcontrole_key, v_kenmerk_key, rec.status); EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_aanduiding); END; END IF; IF (rec.visuele_test IS NOT NULL) THEN BEGIN v_errormsg := 'Fout bij bepalen kenmerk Visuele test'; SELECT MIN (ins_kenmerk_key) INTO v_kenmerk_key FROM ins_kenmerk k, ins_srtkenmerk sk, ins_srtcontrole sc WHERE k.ins_kenmerk_niveau = 'C' AND k.ins_srtinstallatie_key = sc.ins_srtcontrole_key AND k.ins_kenmerk_verwijder IS NULL AND k.ins_srtinstallatie_key = rec.ins_srtcontrole_key AND k.ins_srtkenmerk_key = 42; --Taakkenmerk 'Visuele test' v_errormsg := 'Kenmerk Visuele test vastleggen'; INSERT INTO ins_kmdeelsrtcontr (ins_deelsrtcontrole_key, ins_kenmerk_key, ins_kmdeelsrtcontr_waarde) VALUES (v_deelsrtcontrole_key, v_kenmerk_key, rec.visuele_test); EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_aanduiding); END; END IF; IF (rec.isolatie_sonde IS NOT NULL) THEN BEGIN v_errormsg := 'Fout bij bepalen kenmerk Isolatie sonde'; SELECT MIN (ins_kenmerk_key) INTO v_kenmerk_key FROM ins_kenmerk k, ins_srtkenmerk sk, ins_srtcontrole sc WHERE k.ins_kenmerk_niveau = 'C' AND k.ins_srtinstallatie_key = sc.ins_srtcontrole_key AND k.ins_kenmerk_verwijder IS NULL AND k.ins_srtinstallatie_key = rec.ins_srtcontrole_key AND k.ins_srtkenmerk_key = 43; --Taakkenmerk 'Isolatie sonde' v_errormsg := 'Kenmerk Isolatie sonde vastleggen'; INSERT INTO ins_kmdeelsrtcontr (ins_deelsrtcontrole_key, ins_kenmerk_key, ins_kmdeelsrtcontr_waarde) VALUES (v_deelsrtcontrole_key, v_kenmerk_key, rec.isolatie_sonde); EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_aanduiding); END; END IF; IF (rec.vermogen IS NOT NULL) THEN BEGIN v_errormsg := 'Fout bij bepalen kenmerk Vermogen'; SELECT MIN (ins_kenmerk_key) INTO v_kenmerk_key FROM ins_kenmerk k, ins_srtkenmerk sk, ins_srtcontrole sc WHERE k.ins_kenmerk_niveau = 'C' AND k.ins_srtinstallatie_key = sc.ins_srtcontrole_key AND k.ins_kenmerk_verwijder IS NULL AND k.ins_srtinstallatie_key = rec.ins_srtcontrole_key AND k.ins_srtkenmerk_key = 44; --Taakkenmerk 'Vermogen' v_errormsg := 'Kenmerk Vermogen vastleggen'; INSERT INTO ins_kmdeelsrtcontr (ins_deelsrtcontrole_key, ins_kenmerk_key, ins_kmdeelsrtcontr_waarde) VALUES (v_deelsrtcontrole_key, v_kenmerk_key, rec.vermogen); EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_aanduiding); END; END IF; IF (rec.beschermingsleiding IS NOT NULL) THEN BEGIN v_errormsg := 'Fout bij bepalen kenmerk Beschermingsleiding'; SELECT MIN (ins_kenmerk_key) INTO v_kenmerk_key FROM ins_kenmerk k, ins_srtkenmerk sk, ins_srtcontrole sc WHERE k.ins_kenmerk_niveau = 'C' AND k.ins_srtinstallatie_key = sc.ins_srtcontrole_key AND k.ins_kenmerk_verwijder IS NULL AND k.ins_srtinstallatie_key = rec.ins_srtcontrole_key AND k.ins_srtkenmerk_key = 45; --Taakkenmerk 'Beschermingsleiding' v_errormsg := 'Kenmerk Beschermingsleiding vastleggen'; INSERT INTO ins_kmdeelsrtcontr (ins_deelsrtcontrole_key, ins_kenmerk_key, ins_kmdeelsrtcontr_waarde) VALUES (v_deelsrtcontrole_key, v_kenmerk_key, rec.beschermingsleiding); EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_aanduiding); END; END IF; IF (rec.isolatie IS NOT NULL) THEN BEGIN v_errormsg := 'Fout bij bepalen kenmerk Isolatie'; SELECT MIN (ins_kenmerk_key) INTO v_kenmerk_key FROM ins_kenmerk k, ins_srtkenmerk sk, ins_srtcontrole sc WHERE k.ins_kenmerk_niveau = 'C' AND k.ins_srtinstallatie_key = sc.ins_srtcontrole_key AND k.ins_kenmerk_verwijder IS NULL AND k.ins_srtinstallatie_key = rec.ins_srtcontrole_key AND k.ins_srtkenmerk_key = 46; --Taakkenmerk 'Isolatie' v_errormsg := 'Kenmerk Isolatie vastleggen'; INSERT INTO ins_kmdeelsrtcontr (ins_deelsrtcontrole_key, ins_kenmerk_key, ins_kmdeelsrtcontr_waarde) VALUES (v_deelsrtcontrole_key, v_kenmerk_key, rec.isolatie); EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_aanduiding); END; END IF; v_count_cupdate := v_count_cupdate + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_aanduiding); END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'Aantal ingelezen taken: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog (p_import_key, 'S', 'Aantal verwerkte taken: ' || TO_CHAR (v_count_cupdate), ''); COMMIT; END mare_update_insp_metrel; / CREATE OR REPLACE VIEW MARE_V_NOTI_CNTREMINDER ( CODE, SENDER, RECEIVER, TEXT, KEY, PAR1, PAR2, XKEY, XEMAIL, XMOBILE, FAC_SRTNOTIFICATIE_KEY, ATTACHMENTS, XSENDER, PRS_BEDRIJFADRES_KEY ) AS SELECT '', '', c.prs_perslid_key_beh, -- Contractbeheerder --beh.prs_perslid_key, -- Contractbeheerders 'Rappel: Contract ' || c.cnt_contract_nummer_intern || DECODE (cnt_contract_versie, NULL, '', '.' || cnt_contract_versie) || ' (' || c.cnt_contract_omschrijving || ' ' || b.prs_bedrijf_naam || ')' || ' moet uiterlijk per ' || TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key), 'DD-MM-YYYY') || ' worden verlengd of opgezegd.', c.cnt_contract_key, c.cnt_contract_nummer_intern, cnt.cnt_getopzegdatum (c.cnt_contract_key), NULL, NULL xemail, NULL xmobile, NULL fac_srtnotificatie_key, NULL attachments, NULL xsender, NULL prs_bedrijfadres_key FROM cnt_v_aanwezigcontract c, prs_bedrijf b--, fac_gebruikersgroep beh WHERE b.prs_bedrijf_key = c.cnt_prs_bedrijf_key AND cnt_contract_verwijder IS NULL AND cnt_contract_status = 0 --AND beh.fac_groep_key = 81 -- Autorisatiegroep Contractbeheerders AND (SYSDATE BETWEEN cnt.cnt_getrappeldatum (c.cnt_contract_key) AND cnt.cnt_getopzegdatum (c.cnt_contract_key)) UNION ALL SELECT '', '', c.prs_perslid_key_eig, -- Eigenaar / verantwoordelijk manager 'Rappel: Contract ' || c.cnt_contract_nummer_intern || DECODE (cnt_contract_versie, NULL, '', '.' || cnt_contract_versie) || ' (' || c.cnt_contract_omschrijving || ' ' || b.prs_bedrijf_naam || ')' || ' moet uiterlijk per ' || TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key), 'DD-MM-YYYY') || ' worden verlengd of opgezegd.', c.cnt_contract_key, c.cnt_contract_nummer_intern, cnt.cnt_getopzegdatum (c.cnt_contract_key), NULL, NULL xemail, NULL xmobile, NULL fac_srtnotificatie_key, NULL attachments, NULL xsender, NULL prs_bedrijfadres_key FROM cnt_v_aanwezigcontract c, prs_bedrijf b WHERE b.prs_bedrijf_key = c.cnt_prs_bedrijf_key AND cnt_contract_verwijder IS NULL AND cnt_contract_status = 0 AND c.prs_perslid_key_eig IS NOT NULL AND (SYSDATE BETWEEN cnt.cnt_getrappeldatum (c.cnt_contract_key) AND cnt.cnt_getopzegdatum (c.cnt_contract_key)) UNION ALL SELECT '', '', mt.prs_perslid_key, 'Rappel: Contract ' || c.cnt_contract_nummer_intern || DECODE (cnt_contract_versie, NULL, '', '.' || cnt_contract_versie) || ' (' || c.cnt_contract_omschrijving || ' ' || b.prs_bedrijf_naam || ')' || ' moet uiterlijk per ' || TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key), 'DD-MM-YYYY') || ' worden verlengd of opgezegd.', c.cnt_contract_key, c.cnt_contract_nummer_intern, cnt.cnt_getopzegdatum (c.cnt_contract_key), NULL, NULL xemail, NULL xmobile, NULL fac_srtnotificatie_key, NULL attachments, NULL xsender, NULL prs_bedrijfadres_key FROM cnt_v_aanwezigcontract c, prs_bedrijf b, fac_gebruikersgroep mt WHERE b.prs_bedrijf_key = c.cnt_prs_bedrijf_key AND cnt_contract_verwijder IS NULL AND cnt_contract_status = 0 AND c.cnt_contract_kosten >= 25000 -- MT leden enkel bij contractwaarde > €25000,- AND mt.fac_groep_key = 181 -- Autorisatiegroep Contractinzage MT AND (SYSDATE BETWEEN cnt.cnt_getrappeldatum (c.cnt_contract_key) AND cnt.cnt_getopzegdatum (c.cnt_contract_key)); CREATE OR REPLACE VIEW mare_v_noti_restaurant ( code, sender, receiver, text, key, xkey, xemail, xmobile ) AS SELECT DISTINCT 'CUST01' AS code, NULL, NULL, 'Notificatie melding ' || m.mld_melding_key || ' ' || m.mld_melding_onderwerp || ' (' || b.prs_bedrijf_naam || ')', mo.mld_opdr_key, NULL, 'reserveringen.bedrijfsrestaurant@provalu.nl', NULL FROM mld_melding M, mld_opdr mo, fac_tracking t, prs_bedrijf b, prs_bedrijfdienstlocatie bd WHERE mo.mld_melding_key = m.mld_melding_key AND mo.mld_opdr_key = t.fac_tracking_refkey AND mo.mld_uitvoerende_keys = b.prs_bedrijf_key AND t.fac_srtnotificatie_key = 75 -- ORDNEW AND b.prs_bedrijf_key = bd.prs_bedrijf_key AND bd.prs_dienst_key = 2 -- Dienst Bakker AND mo.mld_opdr_key NOT IN (SELECT n.fac_tracking_refkey FROM fac_tracking n, fac_srtnotificatie sn WHERE n.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND n.fac_tracking_refkey = mo.mld_opdr_key AND UPPER (sn.fac_srtnotificatie_code) LIKE '%CUST01%') AND t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_lastrun FROM fac_notificatie_job WHERE fac_notificatie_job_view = 'MARE_V_NOTI_RESTAURANT') AND (SELECT fac_notificatie_job_nextrun FROM fac_notificatie_job WHERE fac_notificatie_job_view = 'MARE_V_NOTI_RESTAURANT'); ------ 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