-- -- $Id$ -- -- Script containing customer specific sql statements for the FACILITOR database DEFINE thisfile = 'AAGB.SQL' DEFINE dbuser = 'AAGB' 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 AAGB AS PROCEDURE tsk_ins_index (p_applname IN VARCHAR2, p_applrun IN VARCHAR2); END; / CREATE OR REPLACE PACKAGE BODY AAGB AS PROCEDURE tsk_ins_index (p_applname IN VARCHAR2, p_applrun IN VARCHAR2) AS CURSOR c IS SELECT d.ins_deel_key, kbedrag.ins_kenmerkdeel_key, kbedrag.ins_kenmerk_key, kbedrag.waarde bedrag, kindex.waarde indexatie FROM ins_deel d, (SELECT kd.ins_kenmerkdeel_waarde waarde, kd.ins_kenmerkdeel_key, kd.ins_deel_key FROM ins_kenmerk k, ins_kenmerkdeel kd WHERE k.ins_kenmerk_key = kd.ins_kenmerk_key AND k.ins_srtkenmerk_key = 224 -- indexatiedatum ) kdatum, (SELECT kd.ins_kenmerkdeel_waarde waarde, kd.ins_kenmerkdeel_key, kd.ins_deel_key FROM ins_kenmerk k, ins_kenmerkdeel kd WHERE k.ins_kenmerk_key = kd.ins_kenmerk_key AND k.ins_srtkenmerk_key = 223 -- indexatie ) kindex, (SELECT kd.ins_kenmerkdeel_waarde waarde, k.ins_kenmerk_key, kd.ins_kenmerkdeel_key, kd.ins_deel_key FROM ins_kenmerk k, ins_kenmerkdeel kd WHERE k.ins_kenmerk_key = kd.ins_kenmerk_key AND k.ins_srtkenmerk_key = 226 -- bedrag ) kbedrag WHERE d.ins_deel_key = kdatum.ins_deel_key AND d.ins_deel_key = kindex.ins_deel_key AND d.ins_deel_key = kbedrag.ins_deel_key AND FAC.SAFE_TO_DATE(kdatum.waarde, 'dd-mm-yyyy') = TRUNC(SYSDATE) AND FAC.SAFE_TO_NUMBER(kbedrag.waarde) <> 0 ORDER BY ins_deel_key; v_deel_key_prev NUMBER; BEGIN v_deel_key_prev := -1; FOR rec IN c LOOP FLX.setflex ('INS', rec.ins_kenmerk_key, rec.ins_deel_key, rec.bedrag * (1 + rec.indexatie/100)); IF v_deel_key_prev <> rec.ins_deel_key THEN fac.trackaction ('INSUPD', rec.ins_deel_key, 3, SYSDATE, 'Object geïndexeerd met ' || rec.indexatie || '%'); v_deel_key_prev := rec.ins_deel_key; END IF; END LOOP; END; END; / -- Tijdelijke importroutine voor contactpersonen CREATE OR REPLACE PROCEDURE aagb_import_contactpersoon ( 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 (200); -- De importvelden v_prs_bedrijf_naam VARCHAR2 (255); -- VARCHAR2(60), v_prs_leverancier_nr VARCHAR2 (255); -- VARCHAR2(50), v_prs_bedrijf_key NUMBER (10); v_prs_bedrijfadres_type VARCHAR2 (255); -- VARCHAR2(1), v_mld_typeopdr_omschrijving VARCHAR2 (255); -- NUMBER(10), v_mld_typeopdr_key NUMBER (10); v_prs_bedrijfadres_url VARCHAR2 (1000); -- VARCHAR2(512), v_prs_bedrijfadres_ordermode VARCHAR2 (255); -- NUMBER(3), v_prs_bedrijfadres_certificate VARCHAR2 (1000); -- VARCHAR2(255), v_prs_bedrijfadres_xsl VARCHAR2 (1000); -- VARCHAR2(256), v_prs_bedrijfadres_ext VARCHAR2 (255); -- VARCHAR2(10), v_prs_bedrijfadres_attachfile VARCHAR2 (1000); -- VARCHAR2(256), v_prs_bedrijfadres_username VARCHAR2 (255); -- VARCHAR2(32), v_prs_bedrijfadres_password VARCHAR2 (1000); -- VARCHAR2(320)), v_prs_bedrijfadres_sender VARCHAR2 (1000); -- VARCHAR2(512), v_prs_bedrijfadres_lockuser VARCHAR2 (255); -- NUMBER(10), v_lockuser_key NUMBER (10); v_prs_bedrijfadres_lockexpire VARCHAR2 (255); CURSOR c1 IS SELECT fac_imp_csv_col01 prs_bedrijf_naam, fac_imp_csv_col02 prs_leverancier_nr, fac_imp_csv_col03 prs_persoonmatch_code, fac_imp_csv_col04 prs_persoonmatch_waarde, fac_imp_csv_col05 prs_achternaam, fac_imp_csv_col06 prs_tussenvoegsel, fac_imp_csv_col07 prs_voorletters, fac_imp_csv_col08 prs_voornaam, fac_imp_csv_col09 prs_titel, fac_imp_csv_col10 prs_aanhef, fac_imp_csv_col11 prs_telefoonnummer, fac_imp_csv_col12 prs_mobiel, fac_imp_csv_col13 prs_email, fac_imp_csv_col14 prs_functie, fac_imp_csv_col15 prs_opmerking, fac_imp_csv_col16 prs_link_portal, fac_imp_csv_col17 prs_locatie_code, fac_imp_csv_key FROM fac_imp_csv WHERE fac_import_key = p_import_key ORDER BY fac_imp_csv_key; BEGIN -- fac_import_genericcsv (p_import_key); -- Eerst opruiming v_count_tot := 0; v_count_import := 0; header_is_valid := 0; FOR rec1 IN c1 LOOP BEGIN v_aanduiding := '[' || rec1.prs_bedrijf_naam -- bedrijfsnaam || '|' || rec1.prs_achternaam -- achternaam || '] '; -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen -- de juiste kolomkop -- Ik negeer alles totdat ik een geldige header ben gepasseerd. IF (header_is_valid = 0) THEN IF UPPER (rec1.prs_bedrijf_naam) = 'BEDRIJFSNAAM' THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden v_errormsg := 'Bedrijf niet gevonden'; BEGIN SELECT prs_bedrijf_key INTO v_prs_bedrijf_key FROM prs_bedrijf WHERE COALESCE (prs_bedrijf_intern, 0) <> 1 AND prs_bedrijf_verwijder IS NULL AND UPPER (prs_leverancier_nr) = UPPER (TRIM (rec1.prs_leverancier_nr)); EXCEPTION WHEN NO_DATA_FOUND THEN BEGIN SELECT prs_bedrijf_key INTO v_prs_bedrijf_key FROM prs_bedrijf WHERE COALESCE (prs_bedrijf_intern, 0) <> 1 AND prs_bedrijf_verwijder IS NULL AND UPPER (prs_bedrijf_naam) = UPPER (TRIM (rec1.prs_bedrijf_naam)); EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen'); v_ongeldig := 1; END; END; v_errormsg := 'Achternaam niet ingevuld'; IF rec1.prs_achternaam IS NULL THEN fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen'); v_ongeldig := 1; END IF; IF v_ongeldig = 0 THEN UPDATE fac_imp_csv SET fac_imp_csv_col18 = v_prs_bedrijf_key WHERE fac_imp_csv_key = rec1.fac_imp_csv_key; COMMIT; v_count_import := v_count_import + 1; 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, 'E', v_aanduiding || v_errormsg, ''); COMMIT; 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', 'Adressen/aantal ingelezen importregels: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog ( p_import_key, 'S', 'Adressen/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 adressen afgebroken!'); END aagb_import_contactpersoon; / -- Notificatie om een mail te versturen als de einddatum van een locatie bereikt is. CREATE OR REPLACE VIEW aagb_v_noti_loc_einddatum ( sender, receiver, text, code, key, xkey, xsender, xemail, xmobile, attachments ) AS SELECT NULL, NULL, 'Locatie ' || alg_locatie_code || ' - ' || alg_locatie_omschrijving || ' heeft de einddatum bereikt', 'CUST01', l.alg_locatie_key, NULL, NULL, 'inkoopfacility@allianceautomotive.nl', NULL, NULL FROM alg_locatie l, alg_onrgoedkenmerk aogk WHERE l.alg_locatie_key = aogk.alg_onrgoed_key AND aogk.alg_kenmerk_key = 1160 -- einddatum AND fac.safe_to_date (aogk.alg_onrgoedkenmerk_waarde, 'dd-mm-yyyy') = TRUNC (SYSDATE); CREATE OR REPLACE VIEW aagb_v_locatie_gegevens AS SELECT k.alg_locatie_key, k.alg_locatie_code, k.alg_district_omschrijving, k.alg_regio_omschrijving, DECODE(SIGN(COALESCE(k.alg_locatie_vervaldatum, SYSDATE + 10) - SYSDATE), -1, 'Niet actief', 'Actief') status, k.vm_email, k.vm_telefoonnr, k.rm_email, k.rm_telefoonnr, k.alg_locatie_omschrijving, k.alg_locatie_adres, k.alg_locatie_postcode, k.alg_locatie_plaats, k.alg_locatie_verantw_tel, k.alg_kenmerk_key, k.alg_kenmerk_omschrijving, k.alg_kenmerk_volgnr, k.alg_kenmerk_kenmerktype, aog.alg_onrgoedkenmerk_waarde FROM (SELECT l.*, d.alg_district_omschrijving, r.alg_regio_omschrijving, k.alg_kenmerk_key, k.alg_kenmerk_omschrijving, k.alg_kenmerk_volgnr, k.alg_kenmerk_kenmerktype, vm.prs_perslid_email vm_email, vm.prs_perslid_telefoonnr vm_telefoonnr, rm.prs_perslid_email rm_email, rm.prs_perslid_telefoonnr rm_telefoonnr FROM alg_kenmerk k, alg_locatie l, alg_district d, alg_regio r, (SELECT prs_perslid_email, prs_perslid_telefoonnr, vmk.alg_onrgoed_key alg_locatie_key FROM prs_perslid p, alg_onrgoedkenmerk vmk WHERE vmk.alg_kenmerk_key = 1141 AND FAC.safe_to_number (vmk.alg_onrgoedkenmerk_waarde) = p.prs_perslid_key) vm, (SELECT prs_perslid_email, prs_perslid_telefoonnr, rmk.alg_onrgoed_key alg_locatie_key FROM prs_perslid p, alg_onrgoedkenmerk rmk WHERE rmk.alg_kenmerk_key = 1142 AND FAC.safe_to_number (rmk.alg_onrgoedkenmerk_waarde) = p.prs_perslid_key) rm WHERE alg_locatie_verwijder IS NULL AND COALESCE(l.alg_locatie_vervaldatum, SYSDATE+1) > SYSDATE AND l.alg_district_key = d.alg_district_key AND d.alg_regio_key = r.alg_regio_key AND k.alg_kenmerk_niveau = 'L' AND k.alg_kenmerk_kenmerktype NOT IN ('M', 'l', 'Q') AND k.alg_kenmerk_verwijder IS NULL AND l.alg_locatie_key = vm.alg_locatie_key(+) AND l.alg_locatie_key = rm.alg_locatie_key(+)) k LEFT JOIN (SELECT aog.alg_kenmerk_key, aog.alg_onrgoed_key, DECODE (ak.alg_kenmerk_kenmerktype, 'R', FLX.getdomeinwaarde (ak.fac_kenmerkdomein_key, alg_onrgoedkenmerk_waarde), 'S', FLX.getdomeinwaarde (ak.fac_kenmerkdomein_key, alg_onrgoedkenmerk_waarde), alg_onrgoedkenmerk_waarde) alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk aog, alg_kenmerk ak WHERE aog.alg_kenmerk_key = ak.alg_kenmerk_key) aog ON k.alg_kenmerk_key = aog.alg_kenmerk_key AND k.alg_locatie_key = aog.alg_onrgoed_key; -- Gestyled rapport met locatiegegevens. De kenmerken worden er bij gejoined zodat er per kenmerk een regel komt. -- In de stylesheet kunnen we dan kiezen welke kenmerken er getoond worden. CREATE OR REPLACE view aagb_v_deel_gegevens AS SELECT k.ins_srtdeel_omschrijving, k.ins_srtgroep_omschrijving, k.ins_discipline_omschrijving, k.ins_deel_key, 'O-' || k.ins_kenmerk_omschrijving ins_kenmerk_omschrijving, k.ins_kenmerk_volgnummer, k.ins_srtkenmerk_kenmerktype, ikd.ins_kenmerkdeel_waarde FROM (SELECT d.ins_deel_omschrijving, sd.ins_srtdeel_omschrijving, sg.ins_srtgroep_omschrijving, di.ins_discipline_omschrijving, d.ins_deel_key, k.ins_kenmerk_key, k.ins_kenmerk_omschrijving, 1000 + k.ins_kenmerk_volgnummer ins_kenmerk_volgnummer, sk.ins_srtkenmerk_kenmerktype FROM ins_srtkenmerk sk, ins_kenmerk k, ins_deel d, ins_srtdeel sd, ins_srtgroep sg, ins_discipline di WHERE ins_deel_verwijder IS NULL AND sk.ins_srtkenmerk_key = k.ins_srtkenmerk_key AND k.ins_srtinstallatie_key = d.ins_srtdeel_key -- AND k.ins_kenmerk_niveau = 'D' AND sk.ins_srtkenmerk_kenmerktype NOT IN ('M', 'l') AND k.ins_kenmerk_verwijder IS NULL AND d.ins_srtdeel_key = sd.ins_srtdeel_key AND sd.ins_srtgroep_key = sg.ins_srtgroep_key AND sg.ins_discipline_key = di.ins_discipline_key) k LEFT JOIN (SELECT ikd.ins_kenmerk_key, ikd.ins_deel_key, DECODE (sk.ins_srtkenmerk_kenmerktype, 'R', FLX.getdomeinwaarde (sk.fac_kenmerkdomein_key, ins_kenmerkdeel_waarde), 'S', FLX.getdomeinwaarde (sk.fac_kenmerkdomein_key, ins_kenmerkdeel_waarde), ins_kenmerkdeel_waarde) ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd, ins_kenmerk ik, ins_srtkenmerk sk WHERE ikd.ins_kenmerk_key = ik.ins_kenmerk_key AND ik.ins_srtkenmerk_key = sk.ins_srtkenmerk_key) ikd ON k.ins_kenmerk_key = ikd.ins_kenmerk_key AND k.ins_deel_key = ikd.ins_deel_key UNION ALL SELECT sd.ins_srtdeel_omschrijving, sg.ins_srtgroep_omschrijving, di.ins_discipline_omschrijving, d.ins_deel_key, 'O-' || 'Omschrijving' ins_kenmerk_omschrijving, 1000, 'K', d.ins_deel_omschrijving FROM ins_deel d, ins_srtdeel sd, ins_srtgroep sg, ins_discipline di WHERE ins_deel_verwijder IS NULL AND d.ins_srtdeel_key = sd.ins_srtdeel_key AND sd.ins_srtgroep_key = sg.ins_srtgroep_key AND sg.ins_discipline_key = di.ins_discipline_key UNION ALL SELECT sd.ins_srtdeel_omschrijving, sg.ins_srtgroep_omschrijving, di.ins_discipline_omschrijving, d.ins_deel_key, 'L-' || l.omschrijving alg_kenmerk_omschrijving, l.volgnr alg_kenmerk_volgnr, 'C' alg_kenmerk_kenmerktype, l.waarde alg_onrgoedkenmerk_waarde FROM ( SELECT alg_locatie_key, 1 volgnr, 'Locatie email' omschrijving, alg_locatie_email waarde FROM alg_locatie) l, ins_deel d, ins_srtdeel sd, ins_srtgroep sg, ins_discipline di WHERE d.ins_deel_verwijder IS NULL AND l.alg_locatie_key = d.ins_alg_locatie_key AND d.ins_srtdeel_key = sd.ins_srtdeel_key AND sd.ins_srtgroep_key = sg.ins_srtgroep_key AND sg.ins_discipline_key = di.ins_discipline_key UNION ALL SELECT ins_srtdeel_omschrijving, ins_srtgroep_omschrijving, ins_discipline_omschrijving, ins_deel_key, 'L-' || k.alg_kenmerk_omschrijving, k.alg_kenmerk_volgnr, k.alg_kenmerk_kenmerktype, aog.alg_onrgoedkenmerk_waarde FROM (SELECT l.alg_locatie_key, d.ins_deel_omschrijving, sd.ins_srtdeel_omschrijving, sg.ins_srtgroep_omschrijving, di.ins_discipline_omschrijving, d.ins_deel_key, k.alg_kenmerk_key, k.alg_kenmerk_omschrijving, k.alg_kenmerk_volgnr, k.alg_kenmerk_kenmerktype FROM alg_kenmerk k, alg_locatie l, ins_deel d, ins_srtdeel sd, ins_srtgroep sg, ins_discipline di WHERE alg_locatie_verwijder IS NULL AND d.ins_deel_verwijder IS NULL AND k.alg_kenmerk_niveau = 'L' AND k.alg_kenmerk_kenmerktype NOT IN ('M', 'l') AND k.alg_kenmerk_verwijder IS NULL AND l.alg_locatie_key = d.ins_alg_locatie_key AND d.ins_srtdeel_key = sd.ins_srtdeel_key AND sd.ins_srtgroep_key = sg.ins_srtgroep_key AND sg.ins_discipline_key = di.ins_discipline_key) k LEFT JOIN (SELECT aog.alg_kenmerk_key, aog.alg_onrgoed_key, DECODE (ak.alg_kenmerk_kenmerktype, 'R', FLX.getdomeinwaarde (ak.fac_kenmerkdomein_key, alg_onrgoedkenmerk_waarde), 'S', FLX.getdomeinwaarde (ak.fac_kenmerkdomein_key, alg_onrgoedkenmerk_waarde), alg_onrgoedkenmerk_waarde) alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk aog, alg_kenmerk ak WHERE aog.alg_kenmerk_key = ak.alg_kenmerk_key) aog ON k.alg_kenmerk_key = aog.alg_kenmerk_key AND k.alg_locatie_key = aog.alg_onrgoed_key; CREATE OR REPLACE PROCEDURE aagb_daily AS BEGIN -- indexering van de objecten AAGB.tsk_ins_index('INS_INDEXERING', 'SYSDATE'); END; / ------ payload end ------ SET DEFINE OFF BEGIN adm.systrackscriptId ('$Id$', 0); END; / COMMIT; SET ECHO OFF SPOOL OFF SET DEFINE ON PROMPT Logfile of this upgrade is: &fcltlogfile