-- -- $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 = 'BAUS.SQL' DEFINE dbuser = 'BAUS' 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 baus_processemail (pfrom IN VARCHAR2, pto IN VARCHAR2, psubject IN VARCHAR2, pbody IN VARCHAR2, psessionid IN VARCHAR2, pemailkey IN NUMBER) AS v_count NUMBER; defaultstdmelding fac_setting.fac_setting_default%TYPE; subject_regexp fac_setting.fac_setting_default%TYPE; v_newkey mld_melding.mld_melding_key%TYPE; v_mldnum VARCHAR2 (4000); v_mldkey mld_melding.mld_melding_key%TYPE; v_email fac_notificatie.fac_notificatie_receiver_email%TYPE; v_check NUMBER; v_pbody VARCHAR2 (4000); v_folder_kkey mld_kenmerk.mld_kenmerk_key%TYPE; -- kkey mld_kenmerk.mld_kenmerk_key%TYPE; errormsg fac_result.fac_result_waarde%TYPE; BEGIN -- Check of de afzender een reply op een bestaande melding doet, in dat geval wordt dat in notities genoteerd. -- 1) Eerst uit het onderwerp het meldingnummer proberen te onderscheppen, uitgangspunt dat in het onderwerp het meldingnummer '1234' kan worden opgevist, met ervoor en erna een spatie -- 2) Het 1e nummer dat in het onderwerp staat wordt gezien als meldingnummer, eventuele andere nummers later in het onderwerp worden genegeerd. subject_regexp := '[[:digit:]]{1,}'; v_pbody := pbody; v_mldnum := REGEXP_SUBSTR (psubject, subject_regexp, 1, 1, 'i'); v_mldkey := fac.safe_to_number (v_mldnum); --- kijken of er inderdaad een melding bestaat met het gevonden nummer SELECT COUNT (m.mld_melding_key) INTO v_check FROM mld_melding m WHERE m.mld_melding_key = v_mldkey; IF v_check = 1 THEN -- Bestaande melding gevonden dus we zetten de mail als notitie bij deze melding BEGIN INSERT INTO mld_melding_note (mld_melding_key, mld_melding_note_omschrijving, mld_melding_note_flag, prs_perslid_key) VALUES ( v_mldkey, SUBSTR ( psubject || CHR (13) || CHR (10) || REPLACE ( SUBSTR (v_pbody, 1, 4000 - (LENGTH (v_pbody) + 2)), CHR (13) || CHR (10) || CHR (13) || CHR (10), CHR (13) || CHR (10)), 1, 4000), -- verwijder onnodige witregels 1, 3); --- belletje bij de melding zetten UPDATE mld_melding SET mld_melding_actiecode = 129 WHERE mld_melding_key = v_mldkey; --- de huidige behandelaar krijgt een notificatie SELECT mld_melding_behandelaar_key INTO v_email FROM mld_melding WHERE mld_melding_key = v_mldkey; IF v_email IS NOT NULL THEN INSERT INTO fac_notificatie (fac_srtnotificatie_key, fac_notificatie_status, prs_perslid_key_receiver, fac_notificatie_receiver_email, fac_notificatie_oms, fac_notificatie_refkey, fac_notificatie_prioriteit) VALUES ( 70, --- mldnob 2, v_email, NULL, 'Er is een opmerking geplaatst bij melding ' || TO_CHAR (v_mldkey), v_mldkey, 2); END IF; -- Find the lowest volgnummer of the Folder-flexfield. SELECT MIN (k1.mld_kenmerk_key) INTO v_folder_kkey FROM mld_stdmelding sm1, ins_tab_discipline td1, mld_kenmerk k1, mld_srtkenmerk sk1, mld_melding m WHERE m.mld_stdmelding_key = sm1.mld_stdmelding_key AND m.mld_melding_key = v_mldkey AND sm1.mld_ins_discipline_key = td1.ins_discipline_key AND k1.mld_kenmerk_verwijder IS NULL AND k1.mld_srtkenmerk_key = sk1.mld_srtkenmerk_key AND sk1.mld_srtkenmerk_kenmerktype = 'M' AND ( ( k1.mld_stdmelding_key = sm1.mld_stdmelding_key AND k1.mld_kenmerk_niveau = 'S') OR ( k1.mld_stdmelding_key = td1.ins_discipline_key AND k1.mld_kenmerk_niveau = 'D') OR ( k1.mld_stdmelding_key = td1.ins_srtdiscipline_key AND k1.mld_kenmerk_niveau = 'T') OR (k1.mld_kenmerk_niveau = 'A')); IF v_folder_kkey IS NOT NULL THEN INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES ( psessionid, 'kenmerkpath', 'MLD\M' || TO_CHAR (TRUNC (v_mldkey / 1000), 'FM0000') || '___\M' || v_mldkey || '\' || v_folder_kkey || '\'); END IF; fac.trackaction ('MLDTRK', v_mldkey, NULL, NULL, 'Nieuwe notitie via Mail2melding'); END; ELSE --- geen bestaande melding kunnen vinden dus dan een nieuwe aanmaken BEGIN INSERT INTO mld_melding (mld_melding_module, mld_meldbron_key, mld_melding_datum, mld_melding_onderwerp, mld_melding_omschrijving, mld_melding_status, mld_stdmelding_key, prs_perslid_key, prs_perslid_key_voor, mld_melding_email_ext, mld_melding_spoed) VALUES ( 'MLD', 4, -- email SYSDATE, SUBSTR (psubject, 1, 60), SUBSTR ( REPLACE ( SUBSTR (pbody, 1, 4000), CHR (13) || CHR (10) || CHR (13) || CHR (10), CHR (13) || CHR (10)), 1, 4000), -- verwijder onnodige witregels 2, 1, 3, 3, pfrom, 3) RETURNING mld_melding_key INTO v_newkey; INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || v_newkey); END; IF errormsg IS NOT NULL THEN INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'errormsg', errormsg); END IF; END IF; EXCEPTION WHEN OTHERS THEN fac.writelog ( 'PROCESSEMAIL', 'W', 'Mail kon niet verwerkt worden afzender: ' || pfrom || '[' || errormsg || ']', 'OTHERS (error ' || SQLCODE || '/' || SUBSTR (SQLERRM, 1, 100) || ')'); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES ( psessionid, 'errormsg', 'Database fout - Neem contact op met uw systeembeheerder'); END baus_processemail; / CREATE OR REPLACE VIEW BAUS_V_RAP_TAKEN ( ins_deel_key, ins_deel_omschrijving, ins_deel_opmerking, laatste_controle, volgende_controle, status ) AS SELECT ctr.ins_deel_key, ctr.ins_deel_omschrijving, ctr.ins_deel_opmerking, TRUNC (last_insp.ins_deelsrtcontrole_datum) laatste_insp, TRUNC (ctr.ins_deelsrtcontrole_datum) volgende_insp, ctr.status FROM (SELECT d.ins_deel_key, d.ins_srtdeel_omschrijving || ' ' || d.ins_deel_omschrijving ins_deel_omschrijving, d.ins_deel_opmerking, fac.nextcyclusdatedeel (d.ins_deel_key, d.ins_srtcontrole_key, 1) ins_deelsrtcontrole_datum, '' AS ctrmode, prs_perslid_naam_full perslid, '' AS status FROM (SELECT sc.ins_srtcontrole_key, d.ins_deel_key, d.ins_deel_omschrijving, d.ins_deel_opmerking, sc.ins_srtcontrole_periode, sd.ins_srtdeel_omschrijving, pfa.prs_perslid_key, pfa.prs_perslid_naam_full FROM ins_srtcontrole sc, ins_discipline di, ins_v_aanwezigsrtgroep sg, ins_v_aanwezigsrtdeel sd, ins_v_aanwezigdeel d, prs_perslid p, prs_v_perslid_fullnames_all pfa WHERE sd.ins_srtdeel_key = d.ins_srtdeel_key AND sg.ins_srtgroep_key = sd.ins_srtgroep_key AND di.ins_discipline_key = sg.ins_discipline_key AND COALESCE (d.ins_deel_vervaldatum, SYSDATE + 1) >= SYSDATE AND p.prs_perslid_key = 101 AND pfa.prs_perslid_key = 101) d LEFT OUTER JOIN ins_srtcontroledl_xcp xcp ON xcp.ins_deel_key = d.ins_deel_key AND xcp.ins_srtcontrole_key = d.ins_srtcontrole_key WHERE COALESCE (xcp.ins_srtcontroledl_xcp_periode, d.ins_srtcontrole_periode) > 0 AND fac.nextcyclusdatedeel (d.ins_deel_key, d.ins_srtcontrole_key, 1) <= (SYSDATE + 42) AND d.ins_deel_key NOT IN --- als een inspectie al is ingepland weegt dat zwaarder dan de oorspronkelijke datum, object komt op de lijst als plandatum komende maand is (SELECT ins_deel_key FROM ins_v_udr_deelinspect ins, ins_deel d WHERE ins_deelsrtcontrole_plandatum IS NOT NULL AND ins_deelsrtcontrole_datum IS NULL AND d.ins_deel_key = ins.deel_key AND d.ins_deel_verwijder IS NULL) UNION ALL SELECT d.ins_deel_key, sd.ins_srtdeel_omschrijving || ' ' || d.ins_deel_omschrijving ins_deel_omschrijving, d.ins_deel_opmerking, ins_deelsrtcontrole_plandatum, '' ctrmode, perslid, deelsrtcontrole_status FROM ins_v_udr_deelinspect ins, ins_deel d, ins_srtdeel sd WHERE ins_deelsrtcontrole_plandatum IS NOT NULL AND ins_deelsrtcontrole_datum IS NULL AND d.ins_deel_key = ins.deel_key AND d.ins_deel_verwijder IS NULL AND sd.ins_srtdeel_key = d.ins_srtdeel_key AND actief = 'ja' AND ins_deelsrtcontrole_plandatum <= (SYSDATE + 42) -- AND ins_deelsrtcontrole_plandatum >= SYSDATE ) ctr, ( SELECT MAX (sc.ins_deelsrtcontrole_datum) ins_deelsrtcontrole_datum, sc.ins_deel_key, MAX (sc.ins_deelsrtcontrole_key) ins_deelsrtcontrole_key FROM ins_deelsrtcontrole sc WHERE sc.ins_deelsrtcontrole_status = 6 GROUP BY sc.ins_deel_key) last_insp WHERE ctr.ins_deel_key = last_insp.ins_deel_key(+) AND TRUNC (ctr.ins_deelsrtcontrole_datum) < TRUNC (SYSDATE + 42); CREATE OR REPLACE PROCEDURE baus_import_taak_km (p_import_key IN NUMBER) AS BEGIN fac_import_genericcsv (p_import_key); END baus_import_taak_km; / CREATE OR REPLACE PROCEDURE baus_update_taak_km (p_import_key IN NUMBER) IS v_aanduiding VARCHAR2 (200); v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count NUMBER; CURSOR c IS SELECT i.fac_import_key, fac.safe_to_number (i.fac_imp_csv_col01) ins_srtkenmerk_key, fac.safe_to_number (i.fac_imp_csv_col02) ins_srtinstallatie_key, i.fac_imp_csv_col03 ins_kenmerk_niveau, -- is altijd C i.fac_imp_csv_col04 ins_kenmerk_bewerkniveau, -- is altijd D fac.safe_to_number (i.fac_imp_csv_col05) ins_kenmerkvolgnummer, i.fac_imp_csv_col06 ins_kenmerk_omschrijving, i.fac_imp_csv_col07 ins_kenmerk_regexp, i.fac_imp_csv_col08 ins_kenmerk_default FROM fac_imp_csv i WHERE i.fac_import_key = p_import_key; BEGIN FOR rec IN c LOOP BEGIN v_count := 0; SELECT COUNT (*) INTO v_count FROM INS_KENMERK k WHERE k.ins_srtkenmerk_key = rec.ins_srtkenmerk_key AND k.ins_srtinstallatie_key = rec.ins_srtinstallatie_key AND ( k.ins_kenmerk_omschrijving = rec.ins_kenmerk_omschrijving -- als er een alternatieve omschrijving is OR ( k.ins_kenmerk_omschrijving IS NULL AND rec.ins_kenmerk_omschrijving IS NULL)) -- of juist niet AND k.ins_kenmerk_niveau = 'C' AND k.ins_kenmerk_bewerkniveau = 'D'; IF v_count = 0 AND UPPER (rec.ins_srtkenmerk_key) <> 'INS_SRTKENMERK_KEY' THEN BEGIN v_errorhint := 'Fout bij kenmerk voor taak ' || rec.ins_srtinstallatie_key; INSERT INTO ins_kenmerk (ins_srtkenmerk_key, ins_srtinstallatie_key, ins_kenmerk_niveau, ins_kenmerk_bewerkniveau, ins_kenmerk_volgnummer, ins_kenmerk_omschrijving, ins_kenmerk_regexp, ins_kenmerk_default) VALUES (rec.ins_srtkenmerk_key, rec.ins_srtinstallatie_key, 'C', 'D', rec.ins_kenmerkvolgnummer, rec.ins_kenmerk_omschrijving, rec.ins_kenmerk_regexp, rec.ins_kenmerk_default); EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := v_errorhint || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Kenmerk kan niet worden aangemaakt'); COMMIT; END; END IF; END; END LOOP; -- we ruimen de import tabel direct weer netjes op aangezien dit een generieke importtabel is DELETE FAC_IMP_CSV i WHERE i.fac_import_key = p_import_key; END baus_update_taak_km; / CREATE OR REPLACE VIEW BAUS_V_RAP_GEPLANDE_TAKEN ( DEEL_KEY, DISCIPLINE, SOORT, GROEP, SOORTCODE, OMSCHRIJVING, PLAATSEIGENAAR, PLAATSEIGENAARTYPE, PLAATSAANDUIDING, EIGENAAR, EIGENAAR_KEY, OPMERKING, REGIO, DISTRICT, LOCATIE_CODE, LOCATIE_OMSCHRIJVING, LOCATIE_PLAATS, GEBOUWCODE, GEBOUW, TERREINSECTORCODE, TERREINSECTOR, VERDIEPINGCODE, RUIMTENR, WERKPLEKVOLGNR, WERKPLEK, UITLEENBAAR, UITGELEEND, RES_OPMERKING, BEHEERDER, VERVALDATUM, ACTIEF, AANTAL, FCLT_3D_DISCIPLINE_KEY, FCLT_3D_AFDELING_KEY, FCLT_3D_LOCATIE_KEY, INS_DEELSRTCONTROLE_KEY, INS_SRTCONTROLE_KEY, CTR_DISCIPLINE_OMSCHRIJVING, SRTCONTROLE_OMSCHRIJVING, INS_DEELSRTCONTROLE_DATUM, CONTROLEMODE_OMSCHRIJVING, INS_DEELSRTCONTROLE_OPMERKING, PERSLID, INS_DEELSRTCONTROLE_DATUM_ORG, INS_DEELSRTCONTROLE_PLANDATUM, DEELSRTCONTROLE_STATUS, INS_DEELSRTCONTROLE_STATUS, DOCUMENT_VEREIST, DOCUMENT_BIJGESLOTEN, BEDRIJF, INSTRUCTIES ) AS SELECT udr.deel_key, udr.discipline, udr.soort, udr.groep, udr.soortcode, udr.omschrijving, udr.plaatseigenaar, udr.plaatseigenaartype, udr.plaatsaanduiding, udr.eigenaar, udr.eigenaar_key, udr.opmerking, udr.regio, udr.district, udr.locatie_code, udr.locatie_omschrijving, udr.locatie_plaats, udr.gebouwcode, udr.gebouw, udr.terreinsectorcode, udr.terreinsector, udr.verdiepingcode, udr.ruimtenr, udr.werkplekvolgnr, udr.werkplek, udr.uitleenbaar, udr.uitgeleend, udr.res_opmerking, udr.beheerder, udr.vervaldatum, udr.actief, udr.aantal, udr.fclt_3d_discipline_key, udr.fclt_3d_afdeling_key, udr.fclt_3d_locatie_key, udr.ins_deelsrtcontrole_key, udr.ins_srtcontrole_key, udr.ctr_discipline_omschrijving, udr.srtcontrole_omschrijving, udr.ins_deelsrtcontrole_datum, udr.controlemode_omschrijving, udr.ins_deelsrtcontrole_opmerking, udr.perslid, udr.ins_deelsrtcontrole_datum_org, udr.ins_deelsrtcontrole_plandatum, udr.deelsrtcontrole_status, udr.ins_deelsrtcontrole_status, COALESCE (doc.document_vereist, 'Nee') document_vereist, COALESCE (doc.document_ontvangen, 'N.v.t.') document_bijgesloten, bedrijf.bedrijf, instructie.instructies FROM ins_v_udr_deelinspect udr, (SELECT sc.ins_srtcontrole_key, 'Ja' document_vereist, COALESCE (DECODE (kw.ins_kmdeelsrtcontr_waarde, 1, 'Ja'), 'Nee') AS document_ontvangen FROM ins_srtkenmerk sk, ins_kenmerk k, ins_srtcontrole sc, ins_kmdeelsrtcontr kw WHERE k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key AND k.ins_kenmerk_bewerkniveau = 'D' AND k.ins_kenmerk_niveau = 'C' AND sc.ins_srtcontrole_key = k.ins_srtinstallatie_key AND k.ins_kenmerk_verwijder IS NULL AND sk.ins_srtkenmerk_key = 161 AND kw.ins_kenmerk_key(+) = k.ins_kenmerk_key AND UPPER (k.ins_kenmerk_omschrijving) = 'DOCUMENT ONTVANGEN') doc, ( SELECT d.ins_deel_key, LISTAGG (b.prs_bedrijf_naam, CHR (10)) ---- scheidingsteken een enter WITHIN GROUP (ORDER BY d.ins_deel_key) bedrijf FROM ins_srtkenmerk sk, ins_kenmerk k, ins_kenmerkdeel kd, ins_deel d, prs_bedrijf b WHERE sk.ins_srtkenmerk_key = 41 AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key AND k.ins_kenmerk_bewerkniveau = 'D' AND k.ins_kenmerk_verwijder IS NULL AND d.ins_deel_key = kd.ins_deel_key AND b.prs_bedrijf_key = fac.safe_to_number (kd.ins_kenmerkdeel_waarde) GROUP BY d.ins_deel_key) bedrijf, ( SELECT sc.ins_srtcontrole_key, LISTAGG ( k.ins_kenmerk_omschrijving || ' ' || REPLACE (k.ins_kenmerk_default, '
', CHR (10)), CHR (10) || CHR (10)) WITHIN GROUP (ORDER BY sc.ins_srtcontrole_key) instructies FROM ins_srtkenmerk sk, ins_kenmerk k, ins_srtcontrole sc WHERE k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key AND k.ins_kenmerk_bewerkniveau = 'D' AND k.ins_kenmerk_niveau = 'C' AND sc.ins_srtcontrole_key = k.ins_srtinstallatie_key AND k.ins_kenmerk_verwijder IS NULL AND sk.ins_srtkenmerk_key = 61 GROUP BY sc.ins_srtcontrole_key) instructie WHERE bedrijf.ins_deel_key(+) = udr.deel_key AND instructie.ins_srtcontrole_key(+) = udr.ins_srtcontrole_key AND doc.ins_srtcontrole_key(+) = udr.ins_srtcontrole_key; ------ 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