-- -- $Id$ -- -- Script containing customer specific db-configuration for VVGR. DEFINE thisfile = 'VVGR.SQL' DEFINE dbuser = '^VVGR' 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 VIEW vvgr_v_rap_import_log ( fclt_f_applicatie, datum, fclt_f_status, omschrijving, hint ) AS SELECT COALESCE (fac_import_app_code, imp_log_applicatie), TO_CHAR (imp_log_datum, 'dd-mm-yyyy hh24:mi'), imp_log_status, imp_log_omschrijving, imp_log_hint FROM imp_log il1, fac_import fi1, fac_import_app fia1 WHERE il1.fac_import_key = fi1.fac_import_key(+) AND fi1.fac_import_app_key = fia1.fac_import_app_key(+) AND NOT EXISTS (SELECT 1 FROM imp_log il2, fac_import fi2 WHERE il2.fac_import_key = fi2.fac_import_key AND fi2.fac_import_app_key = fi1.fac_import_app_key AND il2.fac_import_key > il1.fac_import_key); CREATE OR REPLACE PROCEDURE vvgr_import_prs (p_import_key IN NUMBER) AS v_errormsg VARCHAR2 (1000) := '-'; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN -- Funtie-kolom kopieren naar extra kolom 18 (= kenmerk6)! UPDATE fac_imp_file i SET i.fac_imp_file_line = i.fac_imp_file_line || ';' || SUBSTR (fac_imp_file_line, INSTR (fac_imp_file_line, ';', 1, 9) + 1, INSTR (fac_imp_file_line, ';', 1, 10) - INSTR (fac_imp_file_line, ';', 1, 9) - 1) WHERE fac_import_key = p_import_key AND fac_imp_file_index > 1; -- Functie-kolom=10 resetten (op 'XXX' want verplicht)! UPDATE fac_imp_file i SET i.fac_imp_file_line = SUBSTR (fac_imp_file_line, 1, INSTR (fac_imp_file_line, ';', 1, 9)) || '"XXX"' || SUBSTR (fac_imp_file_line, INSTR (fac_imp_file_line, ';', 1, 10)) WHERE fac_import_key = p_import_key AND fac_imp_file_index > 1; COMMIT; /* -- Afdelingscode-kolom kopieren naar extra kolom 19 (= kenmerk7)! UPDATE fac_imp_file i SET i.fac_imp_file_line = i.fac_imp_file_line || ';' || SUBSTR (fac_imp_file_line, INSTR (fac_imp_file_line, ';', 1, 14) + 1, INSTR (fac_imp_file_line, ';', 1, 15) - INSTR (fac_imp_file_line, ';', 1, 14) - 1) WHERE fac_import_key = p_import_key AND fac_imp_file_index > 1; -- Afdelingscode-kolom=15 resetten (op 'XXX' want verplicht)! UPDATE fac_imp_file i SET i.fac_imp_file_line = SUBSTR (fac_imp_file_line, 1, INSTR (fac_imp_file_line, ';', 1, 14)) || '"XXX"' || SUBSTR (fac_imp_file_line, INSTR (fac_imp_file_line, ';', 1, 15)) WHERE fac_import_key = p_import_key AND fac_imp_file_index > 1; COMMIT; */ -- Generieke import. -- De sequence array staat beschreven in PRS_PAC.SRC bij de import_perslid-PROCEDURE. -- Met Stamplaats wordt nog niets gedaan! --'%ID;Kantoornummer;Achternaam;AchternaamVoorvoegsel;Voorletters;Voornaam;Emailadres;MobielZakelijk;Geboortedatum;Functie;InternTelefoonnummer;;Geslacht;Naam;Afdeling;Functie;Uren%'); prs.import_perslid ( p_import_key, '0;0;0;0;0;0;2;3;4;6;' || '5;0;0;0;13;11;8;7;0;1;' || '10;0;0;0;0;0;9;14;15;16;' || '17;18;0;0;0;0;0;0;0;0;' || '0;0;0;0;0;0', '%ID;Kantoornummer;Achternaam;AchternaamVoorvoegsel;Voorletters;Voornaam;Emailadres;MobielZakelijk;Geboortedatum;Functie;InternTelefoonnummer;;Geslacht;Naam;Afdeling;Functie;Uren%'); -- Klantspecifieke aanpassingen. /* -- Afdeling-kolom altijd op 'VVGR' (en kenmerk7 negeren)! UPDATE fac_imp_perslid i SET i.prs_afdeling_naam = 'VVGR'; */ -- Functie-kolom volgens kenmerk6 of anders op Onbekend! UPDATE fac_imp_perslid i SET i.prs_srtperslid_omschrijving = COALESCE (SUBSTR (i.prs_kenmerk6, 1, 60), 'Onbekend') WHERE i.prs_perslid_naam IS NOT NULL; /* -- Login-kolom volgens e-mail (en eventueel niet gevuld)! UPDATE fac_imp_perslid i SET i.prs_perslid_oslogin = SUBSTR (i.prs_perslid_email, 1, 30) WHERE i.prs_perslid_naam IS NOT NULL; -- Als geen Voornaam aangeleverd, dan handmatig toegekende niet wissen. UPDATE fac_imp_perslid i SET i.prs_perslid_voornaam = (SELECT MAX (prs_perslid_voornaam) FROM prs_v_aanwezigperslid WHERE prs_perslid_nr = i.prs_perslid_nr) WHERE i.prs_perslid_voornaam IS NULL -- Aangeleverde Voornaam wint! AND EXISTS (SELECT 1 FROM prs_v_aanwezigperslid WHERE prs_perslid_voornaam IS NOT NULL AND prs_perslid_nr = i.prs_perslid_nr); -- Als geen Email aangeleverd, dan handmatig toegekende niet wissen. UPDATE fac_imp_perslid i SET i.prs_perslid_email = (SELECT MAX (prs_perslid_email) FROM prs_v_aanwezigperslid WHERE prs_perslid_nr = i.prs_perslid_nr) WHERE i.prs_perslid_email IS NULL -- Aangeleverde Email wint! AND EXISTS (SELECT 1 FROM prs_v_aanwezigperslid WHERE prs_perslid_email IS NOT NULL AND prs_perslid_nr = i.prs_perslid_nr); -- Als geen Telefoonnr aangeleverd, dan handmatig toegekende niet wissen. UPDATE fac_imp_perslid i SET i.prs_perslid_telefoonnr = (SELECT MAX (prs_perslid_telefoonnr) FROM prs_v_aanwezigperslid WHERE prs_perslid_nr = i.prs_perslid_nr) WHERE i.prs_perslid_telefoonnr IS NULL -- Aangeleverde Telefoonnr wint! AND EXISTS (SELECT 1 FROM prs_v_aanwezigperslid WHERE prs_perslid_telefoonnr IS NOT NULL AND prs_perslid_nr = i.prs_perslid_nr); -- Als geen Mobiel aangeleverd, dan handmatig toegekende niet wissen. UPDATE fac_imp_perslid i SET i.prs_perslid_mobiel = (SELECT MAX (prs_perslid_mobiel) FROM prs_v_aanwezigperslid WHERE prs_perslid_nr = i.prs_perslid_nr) WHERE i.prs_perslid_mobiel IS NULL -- Aangeleverde Mobiel wint! AND EXISTS (SELECT 1 FROM prs_v_aanwezigperslid WHERE prs_perslid_mobiel IS NOT NULL AND prs_perslid_nr = i.prs_perslid_nr); -- Klantspecifieke aanpassingen. -- Locatie/Gebouw/Verdieping/Ruimte bepalen via Kenmerk1-kolom -> Eigen tabel (key = 1) -> -- Gebouw en daaronder Ruimte '_' op de verdieping met het laagste volgnummer! -- Als persoon al een WP heeft op import-locatie, dan is dat de juiste en blijft deze -- (handmatig gecorrigeerde WP) ongewijzigd. In alle andere gevallen verhuist persoon naar -- '_' op de meegegeven locatie. -- Eventuele WPs onder andere locaties dan import-locatie blijven ook ongewijzigd! UPDATE fac_imp_perslid i SET i.alg_locatie_code = (SELECT il.alg_locatie_code FROM fac_v_aanwezigusrdata ud, -- Mapping Kenmerk1-code -> Gebouwcode alg_v_aanweziggebouw ig, alg_locatie il WHERE ud.fac_usrtab_key = -1 AND UPPER (ud.fac_usrdata_code) = UPPER (i.prs_kenmerk1) AND UPPER (ud.fac_usrdata_omschr) = UPPER (ig.alg_gebouw_code) AND ig.alg_locatie_key = il.alg_locatie_key AND NOT EXISTS (SELECT 1 FROM alg_v_aanweziggebouw WHERE UPPER (alg_gebouw_code) = UPPER (ud.fac_usrdata_omschr) AND alg_locatie_key < il.alg_locatie_key)), i.alg_gebouw_code = (SELECT ig.alg_gebouw_code FROM fac_v_aanwezigusrdata ud, -- Mapping Kenmerk1-code -> Gebouwcode alg_v_aanweziggebouw ig, alg_locatie il WHERE ud.fac_usrtab_key = -1 AND UPPER (ud.fac_usrdata_code) = UPPER (i.prs_kenmerk1) AND UPPER (ud.fac_usrdata_omschr) = UPPER (ig.alg_gebouw_code) AND ig.alg_locatie_key = il.alg_locatie_key AND NOT EXISTS (SELECT 1 FROM alg_v_aanweziggebouw WHERE UPPER (alg_gebouw_code) = UPPER (ud.fac_usrdata_omschr) AND alg_locatie_key < il.alg_locatie_key)), i.alg_verdieping_volgnr = (SELECT iv.alg_verdieping_volgnr FROM fac_v_aanwezigusrdata ud, -- Mapping Kenmerk1-code -> Gebouwcode alg_v_aanweziggebouw ig, alg_locatie il, alg_verdieping iv, alg_ruimte ir WHERE ud.fac_usrtab_key = -1 AND UPPER (ud.fac_usrdata_code) = UPPER (i.prs_kenmerk1) AND UPPER (ud.fac_usrdata_omschr) = UPPER (ig.alg_gebouw_code) AND ig.alg_locatie_key = il.alg_locatie_key AND NOT EXISTS (SELECT 1 FROM alg_v_aanweziggebouw WHERE UPPER (alg_gebouw_code) = UPPER (ud.fac_usrdata_omschr) AND alg_locatie_key < il.alg_locatie_key) AND ig.alg_gebouw_key = iv.alg_gebouw_key AND iv.alg_verdieping_key = ir.alg_verdieping_key AND ir.alg_ruimte_nr = '_000' AND NOT EXISTS (SELECT 1 FROM alg_v_aanwezigruimte r, alg_verdieping v WHERE r.alg_ruimte_nr = '_000' AND r.alg_verdieping_key = v.alg_verdieping_key AND v.alg_verdieping_volgnr < iv.alg_verdieping_volgnr)), i.alg_ruimte_nr = (SELECT '_000' FROM fac_v_aanwezigusrdata ud, -- Mapping Kenmerk1-code -> Gebouwcode alg_v_aanweziggebouw ig, alg_locatie il WHERE ud.fac_usrtab_key = -1 AND UPPER (ud.fac_usrdata_code) = UPPER (i.prs_kenmerk1) AND UPPER (ud.fac_usrdata_omschr) = UPPER (ig.alg_gebouw_code) AND ig.alg_locatie_key = il.alg_locatie_key AND NOT EXISTS (SELECT 1 FROM alg_v_aanweziggebouw WHERE UPPER (alg_gebouw_code) = UPPER (ud.fac_usrdata_omschr) AND alg_locatie_key < il.alg_locatie_key)) WHERE NOT EXISTS -- Nog geen werkplek op Locatie! (SELECT 1 FROM fac_v_aanwezigusrdata ud, -- Mapping Kenmerk1-code -> Gebouwcode alg_v_aanweziggebouw ig, alg_locatie il, prs_v_aanwezigperslid p, prs_perslidwerkplek pw, prs_werkplek cw, alg_v_aanwezigruimte cr, alg_verdieping cv, alg_gebouw cg WHERE ud.fac_usrtab_key = -1 AND UPPER (ud.fac_usrdata_code) = UPPER (i.prs_kenmerk1) AND UPPER (ud.fac_usrdata_omschr) = UPPER (ig.alg_gebouw_code) AND ig.alg_locatie_key = il.alg_locatie_key AND NOT EXISTS (SELECT 1 FROM alg_v_aanweziggebouw WHERE UPPER (alg_gebouw_code) = UPPER (ud.fac_usrdata_omschr) AND alg_locatie_key < il.alg_locatie_key) AND p.prs_perslid_nr = i.prs_perslid_nr AND p.prs_perslid_key = pw.prs_perslid_key AND pw.prs_werkplek_key = cw.prs_werkplek_key AND cw.prs_alg_ruimte_key = cr.alg_ruimte_key AND cr.alg_verdieping_key = cv.alg_verdieping_key AND cv.alg_gebouw_key = cg.alg_gebouw_key AND cg.alg_locatie_key = il.alg_locatie_key); -- Resulteert in nette foutmelding als ruimte niet kan worden bepaald. UPDATE fac_imp_perslid SET alg_verdieping_volgnr = 0 WHERE alg_gebouw_code IS NOT NULL AND alg_verdieping_volgnr IS NULL; */ EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Inleesproces personen afgebroken!'); END vvgr_import_prs; / CREATE OR REPLACE PROCEDURE vvgr_update_prs (p_import_key IN NUMBER) AS -- Toevoegen afdelingen die nog niet voorkomen in Facilitor en verwijderen -- voorlopig handmatig (ipv. automatisch). CURSOR c_afd IS SELECT i.prs_afdeling_naam, MAX (COALESCE (SUBSTR (i.prs_kenmerk3, 1, 60), i.prs_afdeling_naam)) prs_afdeling_omschrijving, COUNT (*) aant FROM fac_imp_perslid i WHERE LENGTH (i.prs_afdeling_naam) BETWEEN 1 AND 15 -- Gevuld en niet te lang! AND EXISTS (SELECT 1 FROM prs_v_aanwezigbedrijf WHERE prs_bedrijf_key = 2) -- VVGR! AND NOT EXISTS (SELECT 1 FROM prs_afdeling WHERE prs_afdeling_verwijder IS NULL AND prs_bedrijf_key = 2 -- VVGR! AND prs_afdeling_parentkey IS NULL -- Afdeling-1! AND UPPER (TRIM (prs_afdeling_naam)) = UPPER (TRIM (i.prs_afdeling_naam))) GROUP BY i.prs_afdeling_naam ORDER BY 1; -- Verwijderen personen die niet meer in importbestand voorkomen. -- Dubbele nummers? Dan wordt iemand mogelijk niet verwijderd/INACTIEF! CURSOR c_del IS SELECT p.prs_perslid_key FROM prs_v_aanwezigperslid p WHERE p.prs_perslid_key > 10 -- Voor de zekerheid! AND p.prs_perslid_apikey IS NULL --AND prs_perslid_oslogin2 IS NULL -- Zonder alternatieve login! AND prs_perslid_nr IS NOT NULL -- Met personeelsnummer! --AND NOT EXISTS -- (SELECT 1 -- FROM fac_imp_perslid -- WHERE LOWER (prs_perslid_email) = LOWER (p.prs_perslid_email)) AND NOT EXISTS (SELECT 1 FROM fac_imp_perslid WHERE UPPER (prs_perslid_nr) = UPPER (p.prs_perslid_nr)) ORDER BY 1; v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count NUMBER; BEGIN -- Toevoegen niet bestaande afdelingen. FOR rec IN c_afd LOOP BEGIN INSERT INTO prs_afdeling (prs_bedrijf_key, prs_afdeling_naam, prs_afdeling_omschrijving) VALUES (2, rec.prs_afdeling_naam, rec.prs_afdeling_omschrijving); END; END LOOP; COMMIT; -- Generic update. SELECT COUNT(*) INTO v_count FROM fac_imp_perslid; IF v_count < 100 THEN fac.imp_writelog (p_import_key, 'E', 'Het aantal te importeren personen is te klein (' || TO_CHAR (v_count) || ')', 'Zie specificatie'); RETURN; END IF; -- Generieke update (op e-mail adres). prs.update_perslid (p_import_key, 'NR', 'L'); -- Verwijderen personen *binnen VVGR* niet meer in importbestand. FOR rec IN c_del LOOP BEGIN prs.delete_perslid (p_import_key, rec.prs_perslid_key); END; END LOOP; /* -- Verwijder ongebruikte functies; deze import bepaalt de functies! v_errormsg := 'Fout verwijderen functies'; DELETE FROM prs_srtperslid sp WHERE NOT EXISTS (SELECT 1 FROM prs_perslid WHERE prs_srtperslid_key = sp.prs_srtperslid_key); COMMIT; */ -- Toekennen _Default aan alle personen in import-scope! v_errormsg := 'Fout toekennen _Default'; INSERT INTO fac_gebruikersgroep (prs_perslid_key, fac_groep_key) SELECT prs_perslid_key, 1 FROM prs_v_aanwezigperslid p WHERE p.prs_perslid_key > 10 -- Voor de zekerheid! AND p.prs_perslid_apikey IS NULL --AND prs_perslid_oslogin2 IS NULL -- Zonder alternatieve login! AND prs_perslid_nr IS NOT NULL -- Met personeelsnummer! AND NOT EXISTS -- Nog niet toegekend aan _Default! (SELECT 1 FROM fac_gebruikersgroep WHERE fac_groep_key = 1 -- _Default AND prs_perslid_key = p.prs_perslid_key); 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_errormsg, 'Importproces PRS afgebroken!'); END vvgr_update_prs; / -- Mail2Melding. Twee stromen: -- - HELPDESK -: Registreren melding van Soortmelding=161 (Mailmelding ICT)! -- - SERVICE -: Registreren melding van Soortmelding=162 (Mailmelding FAC)! CREATE OR REPLACE PROCEDURE VVGR_processemail ( pfrom IN VARCHAR2, pto IN VARCHAR2, psubject IN VARCHAR2, pbody IN VARCHAR2, psessionid IN VARCHAR2, pemailkey IN NUMBER) AS c_onbekend_key NUMBER (10) := 4; -- TODO:API-user tbv. hMail-koppeling? v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_van_regel VARCHAR2 (255) := ''; --v_van_email VARCHAR2 (255) := ''; v_perslid_key NUMBER (10); v_kostenplaats_key NUMBER (10); v_locatie_key NUMBER (10); v_discipline_key NUMBER (10); v_stdmelding_key NUMBER (10); v_body VARCHAR2 (4000); v_melding_key NUMBER (10); v_folder_kkey NUMBER (10); v_count NUMBER (10); BEGIN CASE --WHEN INSTR (UPPER (pfrom), '???') > 0 AND UPPER (pto) LIKE 'HELPDESK@%' WHEN UPPER (pto) LIKE 'HELPDESK@%' THEN /* -- Probeer melder te bepalen op basis van e-mail adres tussen '<>' na eerste voorkomen 'Van:' of 'From: '! v_errormsg := 'Fout bepalen melder'; IF INSTR (UPPER (pbody), 'VAN:') > 0 THEN v_van_regel := TRIM (SUBSTR (pbody, INSTR (UPPER (pbody), 'VAN:') + 4, INSTR (SUBSTR (REPLACE (REPLACE (pbody, CHR (13), '#'), CHR (10), '#') || '#', INSTR (pbody, 'VAN:') + 4), '#') - 1)); IF INSTR (v_van_regel, '<') > 0 AND INSTR (v_van_regel, '<') < INSTR (v_van_regel, '>') THEN v_van_email := SUBSTR (v_van_regel, INSTR (v_van_regel, '<') + 1, INSTR (v_van_regel, '>') - INSTR (v_van_regel, '<') - 1); END IF; ELSIF INSTR (UPPER (pbody), 'FROM: ') > 0 THEN v_van_regel := TRIM (SUBSTR (pbody, INSTR (UPPER (pbody), 'FROM: ') + 6, INSTR (SUBSTR (REPLACE (REPLACE (pbody, CHR (13), '#'), CHR (10), '#') || '#', INSTR (pbody, 'FROM:') + 6), '#') - 1)); IF INSTR (v_van_regel, '<') > 0 AND INSTR (v_van_regel, '<') < INSTR (v_van_regel, '>') THEN v_van_email := SUBSTR (v_van_regel, INSTR (v_van_regel, '<') + 1, INSTR (v_van_regel, '>') - INSTR (v_van_regel, '<') - 1); END IF; END IF; SELECT COUNT (*) INTO v_count FROM prs_v_aanwezigperslid WHERE UPPER (prs_perslid_email) LIKE UPPER (v_van_email) || '%'; */ -- Bepaal de melder op basis van e-mail adres zoals in pfrom? v_errormsg := 'Fout bepalen melder'; SELECT COUNT (*) INTO v_count FROM prs_v_aanwezigperslid WHERE UPPER (prs_perslid_email) LIKE UPPER (pfrom) || '%'; IF v_count = 1 THEN SELECT p.prs_perslid_key, a.prs_kostenplaats_key, MIN (wpg.alg_locatie_key) INTO v_perslid_key, v_kostenplaats_key, v_locatie_key FROM prs_v_aanwezigperslid p, prs_afdeling a, (SELECT pw.prs_perslid_key, pw.prs_werkplek_key FROM prs_perslidwerkplek pw WHERE NOT EXISTS (SELECT 1 FROM prs_perslidwerkplek WHERE prs_perslid_key = pw.prs_perslid_key AND prs_perslidwerkplek_key > pw.prs_perslidwerkplek_key)) pw, prs_v_werkplekperslid_gegevens wpg WHERE p.prs_afdeling_key = a.prs_afdeling_key AND UPPER (p.prs_perslid_email) LIKE UPPER (pfrom) || '%' AND p.prs_perslid_key = pw.prs_perslid_key(+) AND pw.prs_werkplek_key = wpg.prs_werkplek_key(+) GROUP BY p.prs_perslid_key, a.prs_kostenplaats_key; ELSE -- Melder kan niet 1-duidig worden bepaald, dus Onbekend en 15=1441RG-44/Purmerend Gorslaan 44-45 Hoofdkantoor SELECT p.prs_perslid_key, a.prs_kostenplaats_key, 15 INTO v_perslid_key, v_kostenplaats_key, v_locatie_key FROM prs_v_aanwezigperslid p, prs_afdeling a WHERE p.prs_afdeling_key = a.prs_afdeling_key AND p.prs_perslid_key = c_onbekend_key; END IF; -- Bepaal de afgesproken soortmelding met key=161=Mailmelding ICT! v_errormsg := 'Fout bepalen soortmelding'; SELECT mld_ins_discipline_key, mld_stdmelding_key INTO v_discipline_key, v_stdmelding_key FROM mld_stdmelding WHERE mld_stdmelding_key = 181; -- Body overnemen tot 1e voorkomen van hard afgesproken start DISCLAIMER! --v_errormsg := 'Fout strippen disclaimer'; --IF INSTR (UPPER (pbody), 'DISCLAIMER') > 0 --AND INSTR (UPPER (pbody), 'DE INFORMATIE IN DIT BERICHT') > 0 --THEN --v_body := TRIM (SUBSTR (pbody, 1, INSTR (UPPER (pbody), 'DE INFORMATIE IN DIT BERICHT') - 12)); -- v_body := TRIM (SUBSTR (pbody, 1, INSTR (UPPER (pbody), 'DISCLAIMER') - 1)); --ELSE -- v_body := pbody; --END IF; v_body := pbody; -- Suggested extensions: -- - Check for MLDUSE-write autorisations -- - Parse the subject to find the appropriate stdmelding, if uniquely possible -- - Append (as a note?) to an existing melding if #key is found in the subject v_errormsg := 'Fout toevoegen melding'; INSERT INTO mld_melding (mld_melding_module, mld_meldbron_key, mld_alg_locatie_key, mld_alg_onroerendgoed_keys, mld_melding_datum, mld_melding_omschrijving, mld_stdmelding_key, mld_melding_t_uitvoertijd, prs_kostenplaats_key, prs_perslid_key, prs_perslid_key_voor, mld_melding_status, mld_melding_spoed, mld_melding_onderwerp, mld_melding_behandelaar2_key, mld_ins_discipline_key) VALUES ('MLD', 4, -- Email COALESCE (v_locatie_key, 15), -- Fallback op 15=1441RG-44/Purmerend Gorslaan 44-45 Hoofdkantoor NULL, --v_onrgoed_keys, SYSDATE, SUBSTR (v_body, 1, 2000), v_stdmelding_key, NULL, v_kostenplaats_key, v_perslid_key, v_perslid_key, NULL, 3, -- Prio normaal SUBSTR (psubject, 1, 80), NULL, NULL) -- BT? RETURNING mld_melding_key INTO v_melding_key; mld.setmeldingstatus (v_melding_key, 2, v_perslid_key); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || v_melding_key); -- Find the lowest volgnummer of the Folder-flexfield. -- PAS OP: 'Alle vakgroeptypen'-kenmerken hier niet beschouwd en dat bijt -- dus nooit met kenmerk hieronder tbv. Originele mail! v_errormsg := 'Fout toevoegen melding-bijlage'; SELECT MIN (k1.mld_kenmerk_key) INTO v_folder_kkey FROM mld_stdmelding sm1, ins_tab_discipline td1, mld_kenmerk k1, mld_srtkenmerk sk1 WHERE sm1.mld_stdmelding_key = v_stdmelding_key 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')) AND NOT EXISTS (SELECT 1 FROM mld_stdmelding sm2, ins_tab_discipline td2, mld_kenmerk k2, mld_srtkenmerk sk2 WHERE sm2.mld_stdmelding_key = v_stdmelding_key AND sm2.mld_ins_discipline_key = td2.ins_discipline_key AND k2.mld_kenmerk_verwijder IS NULL AND k2.mld_srtkenmerk_key = sk2.mld_srtkenmerk_key AND sk2.mld_srtkenmerk_kenmerktype = 'M' AND ((k2.mld_stdmelding_key = sm2.mld_stdmelding_key AND k2.mld_kenmerk_niveau = 'S') OR (k2.mld_stdmelding_key = td2.ins_discipline_key AND k2.mld_kenmerk_niveau = 'D') OR (k2.mld_stdmelding_key = td2.ins_srtdiscipline_key AND k2.mld_kenmerk_niveau = 'T')) AND k2.mld_kenmerk_volgnummer < k1.mld_kenmerk_volgnummer); 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_melding_key / 1000), 'FM0000') || '___\M' || v_melding_key || '\' || v_folder_kkey || '\'); END IF; -- Per 2021.1 mogelijk dat originele mail ook wordt opgeslagen! -- PAS OP: Voorkennis dat dit een 'Alle vakgroeptypen'-kenmerk is en -- dus nooit bijt met Bijlage(n)-kenmerk hierboven! v_errormsg := 'Fout toevoegen originele mail'; INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'kenmerkorgmailpath', 'MLD\M' || TO_CHAR (TRUNC (v_melding_key / 1000), 'FM0000') || '___\M' || v_melding_key || '\' || 1021 || '\'); /* -- Handle workflow actions for completion (in case of new melding). MLD.mld_nextworkflowstep (v_melding_key, -1); -- -1=Initial */ fac.writelog ('PROCESSEMAIL', 'I', 'Helpdesk-pfrom: ' || pfrom, 'Testje'); WHEN UPPER (pto) LIKE 'SERVICE@%' THEN /* -- Probeer melder te bepalen op basis van e-mail adres tussen '<>' na eerste voorkomen 'Van:' of 'From: '! v_errormsg := 'Fout bepalen melder'; IF INSTR (UPPER (pbody), 'VAN:') > 0 THEN v_van_regel := TRIM (SUBSTR (pbody, INSTR (UPPER (pbody), 'VAN:') + 4, INSTR (SUBSTR (REPLACE (REPLACE (pbody, CHR (13), '#'), CHR (10), '#') || '#', INSTR (pbody, 'VAN:') + 4), '#') - 1)); IF INSTR (v_van_regel, '<') > 0 AND INSTR (v_van_regel, '<') < INSTR (v_van_regel, '>') THEN v_van_email := SUBSTR (v_van_regel, INSTR (v_van_regel, '<') + 1, INSTR (v_van_regel, '>') - INSTR (v_van_regel, '<') - 1); END IF; ELSIF INSTR (UPPER (pbody), 'FROM: ') > 0 THEN v_van_regel := TRIM (SUBSTR (pbody, INSTR (UPPER (pbody), 'FROM: ') + 6, INSTR (SUBSTR (REPLACE (REPLACE (pbody, CHR (13), '#'), CHR (10), '#') || '#', INSTR (pbody, 'FROM:') + 6), '#') - 1)); IF INSTR (v_van_regel, '<') > 0 AND INSTR (v_van_regel, '<') < INSTR (v_van_regel, '>') THEN v_van_email := SUBSTR (v_van_regel, INSTR (v_van_regel, '<') + 1, INSTR (v_van_regel, '>') - INSTR (v_van_regel, '<') - 1); END IF; END IF; SELECT COUNT (*) INTO v_count FROM prs_v_aanwezigperslid WHERE UPPER (prs_perslid_email) LIKE UPPER (v_van_email) || '%'; */ -- Bepaal de melder op basis van e-mail adres zoals in pfrom? v_errormsg := 'Fout bepalen melder'; SELECT COUNT (*) INTO v_count FROM prs_v_aanwezigperslid WHERE UPPER (prs_perslid_email) LIKE UPPER (pfrom) || '%'; IF v_count = 1 THEN SELECT p.prs_perslid_key, a.prs_kostenplaats_key, MIN (wpg.alg_locatie_key) INTO v_perslid_key, v_kostenplaats_key, v_locatie_key FROM prs_v_aanwezigperslid p, prs_afdeling a, (SELECT pw.prs_perslid_key, pw.prs_werkplek_key FROM prs_perslidwerkplek pw WHERE NOT EXISTS (SELECT 1 FROM prs_perslidwerkplek WHERE prs_perslid_key = pw.prs_perslid_key AND prs_perslidwerkplek_key > pw.prs_perslidwerkplek_key)) pw, prs_v_werkplekperslid_gegevens wpg WHERE p.prs_afdeling_key = a.prs_afdeling_key AND UPPER (p.prs_perslid_email) LIKE UPPER (pfrom) || '%' AND p.prs_perslid_key = pw.prs_perslid_key(+) AND pw.prs_werkplek_key = wpg.prs_werkplek_key(+) GROUP BY p.prs_perslid_key, a.prs_kostenplaats_key; ELSE -- Melder kan niet 1-duidig worden bepaald, dus Onbekend en 15=1441RG-44/Purmerend Gorslaan 44-45 Hoofdkantoor SELECT p.prs_perslid_key, a.prs_kostenplaats_key, 15 INTO v_perslid_key, v_kostenplaats_key, v_locatie_key FROM prs_v_aanwezigperslid p, prs_afdeling a WHERE p.prs_afdeling_key = a.prs_afdeling_key AND p.prs_perslid_key = c_onbekend_key; END IF; -- Bepaal de afgesproken soortmelding met key=161=Mailmelding FAC! v_errormsg := 'Fout bepalen soortmelding'; SELECT mld_ins_discipline_key, mld_stdmelding_key INTO v_discipline_key, v_stdmelding_key FROM mld_stdmelding WHERE mld_stdmelding_key = 182; -- Body overnemen tot 1e voorkomen van hard afgesproken start DISCLAIMER! --v_errormsg := 'Fout strippen disclaimer'; --IF INSTR (UPPER (pbody), 'DISCLAIMER') > 0 --AND INSTR (UPPER (pbody), 'DE INFORMATIE IN DIT BERICHT') > 0 --THEN --v_body := TRIM (SUBSTR (pbody, 1, INSTR (UPPER (pbody), 'DE INFORMATIE IN DIT BERICHT') - 12)); -- v_body := TRIM (SUBSTR (pbody, 1, INSTR (UPPER (pbody), 'DISCLAIMER') - 1)); --ELSE -- v_body := pbody; --END IF; v_body := pbody; -- Suggested extensions: -- - Check for MLDUSE-write autorisations -- - Parse the subject to find the appropriate stdmelding, if uniquely possible -- - Append (as a note?) to an existing melding if #key is found in the subject v_errormsg := 'Fout toevoegen melding'; INSERT INTO mld_melding (mld_melding_module, mld_meldbron_key, mld_alg_locatie_key, mld_alg_onroerendgoed_keys, mld_melding_datum, mld_melding_omschrijving, mld_stdmelding_key, mld_melding_t_uitvoertijd, prs_kostenplaats_key, prs_perslid_key, prs_perslid_key_voor, mld_melding_status, mld_melding_spoed, mld_melding_onderwerp, mld_melding_behandelaar2_key, mld_ins_discipline_key) VALUES ('MLD', 4, -- Email COALESCE (v_locatie_key, 15), -- Fallback op 15=1441RG-44/Purmerend Gorslaan 44-45 Hoofdkantoor NULL, --v_onrgoed_keys, SYSDATE, SUBSTR (v_body, 1, 2000), v_stdmelding_key, NULL, v_kostenplaats_key, v_perslid_key, v_perslid_key, NULL, 3, -- Prio normaal SUBSTR (psubject, 1, 80), NULL, NULL) -- BT? RETURNING mld_melding_key INTO v_melding_key; mld.setmeldingstatus (v_melding_key, 2, v_perslid_key); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || v_melding_key); -- Find the lowest volgnummer of the Folder-flexfield. -- PAS OP: 'Alle vakgroeptypen'-kenmerken hier niet beschouwd en dat bijt -- dus nooit met kenmerk hieronder tbv. Originele mail! v_errormsg := 'Fout toevoegen melding-bijlage'; SELECT MIN (k1.mld_kenmerk_key) INTO v_folder_kkey FROM mld_stdmelding sm1, ins_tab_discipline td1, mld_kenmerk k1, mld_srtkenmerk sk1 WHERE sm1.mld_stdmelding_key = v_stdmelding_key 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')) AND NOT EXISTS (SELECT 1 FROM mld_stdmelding sm2, ins_tab_discipline td2, mld_kenmerk k2, mld_srtkenmerk sk2 WHERE sm2.mld_stdmelding_key = v_stdmelding_key AND sm2.mld_ins_discipline_key = td2.ins_discipline_key AND k2.mld_kenmerk_verwijder IS NULL AND k2.mld_srtkenmerk_key = sk2.mld_srtkenmerk_key AND sk2.mld_srtkenmerk_kenmerktype = 'M' AND ((k2.mld_stdmelding_key = sm2.mld_stdmelding_key AND k2.mld_kenmerk_niveau = 'S') OR (k2.mld_stdmelding_key = td2.ins_discipline_key AND k2.mld_kenmerk_niveau = 'D') OR (k2.mld_stdmelding_key = td2.ins_srtdiscipline_key AND k2.mld_kenmerk_niveau = 'T')) AND k2.mld_kenmerk_volgnummer < k1.mld_kenmerk_volgnummer); 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_melding_key / 1000), 'FM0000') || '___\M' || v_melding_key || '\' || v_folder_kkey || '\'); END IF; -- Per 2021.1 mogelijk dat originele mail ook wordt opgeslagen! -- PAS OP: Voorkennis dat dit een 'Alle vakgroeptypen'-kenmerk is en -- dus nooit bijt met Bijlage(n)-kenmerk hierboven! v_errormsg := 'Fout toevoegen originele mail'; INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'kenmerkorgmailpath', 'MLD\M' || TO_CHAR (TRUNC (v_melding_key / 1000), 'FM0000') || '___\M' || v_melding_key || '\' || 1021 || '\'); /* -- Handle workflow actions for completion (in case of new melding). MLD.mld_nextworkflowstep (v_melding_key, -1); -- -1=Initial */ fac.writelog ('PROCESSEMAIL', 'I', 'Service-pfrom: ' || pfrom, 'Testje'); ELSE INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'errormsg', 'Ontvanger ongeldig - Neem contact op met uw systeembeheerder '); END CASE; 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.writelog ('PROCESSEMAIL', 'E', 'VVGR_processemail afgebroken!', '[' || pfrom || '] ' || v_errormsg); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'errormsg', 'Database fout - Neem contact op met uw systeembeheerder '); COMMIT; END; / CREATE OR REPLACE VIEW VVGR_V_RAP_QRC AS SELECT d.ins_deel_omschrijving hide_f_sort, dd.ins_discipline_omschrijving || ' / ' || sm.mld_stdmelding_omschrijving fclt_f_melding, 'Plaats' gekoppeld_aan, l.alg_locatie_code || ' ' || l.alg_locatie_omschrijving fclt_f_locatie, --o.alg_gebouw_omschrijving fclt_f_gebouw, o.alg_plaatsaanduiding fclt_f_plaats, NULL fclt_f_persoon, dd.ins_discipline_omschrijving fclt_f_discipline, sg.ins_srtgroep_omschrijving fclt_f_objectgroep, sd.ins_srtdeel_omschrijving fclt_f_objectsoort, d.ins_deel_omschrijving fclt_f_identificatie, --b.fac_bookmark_naam fclt_f_bookmark, dd.ins_discipline_key fclt_3d_discipline_key, sd.ins_srtdeel_key, d.ins_deel_key, d.ins_alg_locatie_key fclt_3d_locatie_key, d.ins_alg_ruimte_type, d.ins_alg_ruimte_key, --o.alg_gebouw_code, --o.alg_verdieping_code, b.fac_bookmark_id hide_f_bookmark_id FROM --fac_bookmark b, (SELECT SUBSTR (SUBSTR (UPPER (fac_bookmark_query), INSTR (UPPER (fac_bookmark_query), 'STDMKINA=') + 9), 1, INSTR (SUBSTR (UPPER (fac_bookmark_query), INSTR (UPPER (fac_bookmark_query), 'STDMKINA=') + 9) || '&', '&') - 1) stdmkina, --fac_bookmark_naam, fac_bookmark_id FROM fac_bookmark WHERE (fac_bookmark_expire IS NULL OR fac_bookmark_expire > SYSDATE) AND UPPER (TRIM (fac_bookmark_path)) = 'APPL/PDA/INS_DEEL.ASP' AND INSTR (UPPER (fac_bookmark_query), 'STDMKINA=') > 0) b, -- STDMKINA-bookmarks ins_v_aanwezigdeel d, ins_srtdeel sd, ins_srtgroep sg, ins_discipline dd, alg_locatie l, ins_v_alg_overzicht o, mld_stdmelding sm, mld_stdmelding_srtinst smsd WHERE --(b.fac_bookmark_expire IS NULL OR b.fac_bookmark_expire > SYSDATE) --AND b.fac_bookmark_naam = 'QRC_MELDING' --AND d.ins_deel_module = 'INS' d.ins_srtdeel_key = sd.ins_srtdeel_key AND sd.ins_srtgroep_key = sg.ins_srtgroep_key AND sg.ins_discipline_key = dd.ins_discipline_key AND d.ins_deel_parent_key IS NULL AND d.ins_alg_ruimte_type IN ('T', 'R', 'W') AND d.ins_alg_locatie_key = l.alg_locatie_key --AND d.ins_alg_locatie_key = o.alg_locatie_key AND d.ins_alg_ruimte_type = o.alg_onroerendgoed_type AND d.ins_alg_ruimte_key = o.alg_onroerendgoed_keys AND fac.safe_to_number (b.stdmkina) = sm.mld_stdmelding_key AND sm.mld_stdmelding_key = smsd.mld_stdmelding_key AND smsd.ins_srtinstallatie_key = DECODE (smsd.ins_srtinstallatie_niveau, 'S', sd.ins_srtdeel_key, 'G', sg.ins_srtgroep_key, 'D', dd.ins_discipline_key) UNION ALL SELECT d.ins_deel_omschrijving hide_f_sort, dd.ins_discipline_omschrijving || ' / ' || sm.mld_stdmelding_omschrijving fclt_f_melding, 'Persoon' gekoppeld_aan, NULL fclt_f_locatie, --NULL fclt_f_gebouw, NULL fclt_f_plaats, pf.prs_perslid_naam_full fclt_f_persoon, dd.ins_discipline_omschrijving fclt_f_discipline, sg.ins_srtgroep_omschrijving fclt_f_objectgroep, sd.ins_srtdeel_omschrijving fclt_f_objectsoort, d.ins_deel_omschrijving fclt_f_identificatie, --b.fac_bookmark_naam fclt_f_bookmark, dd.ins_discipline_key fclt_3d_discipline_key, sd.ins_srtdeel_key, d.ins_deel_key, d.ins_alg_locatie_key fclt_3d_locatie_key, d.ins_alg_ruimte_type, d.ins_alg_ruimte_key, --NULL alg_gebouw_code, --NULL alg_verdieping_code, b.fac_bookmark_id hide_f_bookmark_id FROM --fac_bookmark b, (SELECT SUBSTR (SUBSTR (UPPER (fac_bookmark_query), INSTR (UPPER (fac_bookmark_query), 'STDMKINA=') + 9), 1, INSTR (SUBSTR (UPPER (fac_bookmark_query), INSTR (UPPER (fac_bookmark_query), 'STDMKINA=') + 9) || '&', '&') - 1) stdmkina, --fac_bookmark_naam, fac_bookmark_id FROM fac_bookmark WHERE (fac_bookmark_expire IS NULL OR fac_bookmark_expire > SYSDATE) AND UPPER (TRIM (fac_bookmark_path)) = 'APPL/PDA/INS_DEEL.ASP' AND INSTR (UPPER (fac_bookmark_query), 'STDMKINA=') > 0) b, -- STDMKINA-bookmarks ins_v_aanwezigdeel d, ins_srtdeel sd, ins_srtgroep sg, ins_discipline dd, prs_v_perslid_fullnames pf, mld_stdmelding sm, mld_stdmelding_srtinst smsd WHERE --(b.fac_bookmark_expire IS NULL OR b.fac_bookmark_expire > SYSDATE) --AND b.fac_bookmark_naam = 'QRC_MELDING' --AND d.ins_deel_module = 'INS' d.ins_srtdeel_key = sd.ins_srtdeel_key AND d.ins_srtdeel_key = sd.ins_srtdeel_key AND sd.ins_srtgroep_key = sg.ins_srtgroep_key AND sg.ins_discipline_key = dd.ins_discipline_key AND d.ins_deel_parent_key IS NULL AND d.ins_alg_ruimte_type IN ('P') AND d.ins_alg_ruimte_key = pf.prs_perslid_key AND fac.safe_to_number (b.stdmkina) = sm.mld_stdmelding_key AND sm.mld_stdmelding_key = smsd.mld_stdmelding_key AND smsd.ins_srtinstallatie_key = DECODE (smsd.ins_srtinstallatie_niveau, 'S', sd.ins_srtdeel_key, 'G', sg.ins_srtgroep_key, 'D', dd.ins_discipline_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