diff --git a/ALLI/alli.sql b/ALLI/alli.sql index 5e6271ec0..f073789fe 100644 --- a/ALLI/alli.sql +++ b/ALLI/alli.sql @@ -2993,6 +2993,257 @@ AS insbes.ins_kenmerkdeel_waarde(+) AND ( (bes_srtgroep_key != 1623 AND d.ins_srtdeel_key = 9202) OR (bes_srtgroep_key = 1623 AND d.ins_srtdeel_key = 9201)); + + +/* Formatted on 17/6/2022 23:57:31 (QP5 v5.371) */ +CREATE OR REPLACE PROCEDURE alli_processemail (pfrom IN VARCHAR2, + pto IN VARCHAR2, + psubject IN VARCHAR2, + pbody IN VARCHAR2, + psessionid IN VARCHAR2, + pemailkey IN NUMBER) +AS + v_sender prs_perslid.prs_perslid_key%TYPE; + v_kostenplaats prs_afdeling.prs_kostenplaats_key%TYPE; + v_mldstat mld_melding.mld_melding_status%TYPE; + v_stdmelding mld_stdmelding.mld_stdmelding_key%TYPE; + v_errormsg fac_result.fac_result_waarde%TYPE; + v_from VARCHAR2 (4000); + v_body VARCHAR2 (4000); + m_body VARCHAR2 (4000); + v_actie VARCHAR2 (4000); + v_mldkey mld_melding.mld_melding_key%TYPE; + v_mailorigin mld_kenmerk.mld_kenmerk_key%TYPE; + v_attachorigin mld_kenmerk.mld_kenmerk_key%TYPE; +BEGIN + v_sender := 4; --Standaard de persoon Facilitor + v_errormsg := '(0x143)'; + v_mailorigin := 462; --Kenmerk_key originele mail-bijlage + v_attachorigin := 461; --Kenmerk_key bijlage uit email + + -- Verwijder de Bounce Address Tag Validation + IF pfrom LIKE 'prvs=%' + THEN + v_from := SUBSTR (pfrom, INSTR (pfrom, '=', -1) + 1); + ELSE + v_from := pfrom; + END IF; + + v_body := pbody; + m_body := pbody; + + -- DBMS_OUTPUT.PUT_LINE('v_from: '||v_from); + + -- Valideer de sender in pfrom: kennen we deze? + SELECT MIN (p.prs_perslid_key), MIN (d.prs_kostenplaats_key) + INTO v_sender, v_kostenplaats + FROM prs_perslid p, prs_afdeling d + WHERE p.prs_afdeling_key = d.prs_afdeling_key + AND p.prs_perslid_verwijder IS NULL + AND UPPER (prs_perslid_email) = UPPER (v_from); + + CASE + WHEN UPPER (pto) LIKE 'FACILITAIR@%' + THEN + BEGIN + v_errormsg := '(0x245)' || v_mldkey || psubject || v_actie; + v_stdmelding := + fac.safe_to_number (fac.getsetting ('defaultstdmelding')); + v_mldstat := 2; + -- Standaard de status in Nieuw (2). + + -- pas de omschrijving van de melding aan. Verwijder onnodige html ballast. + v_body := REPLACE (v_body, ' ', ' '); -- spatie + v_body := REPLACE (v_body, '!', '!'); + v_body := REPLACE (v_body, '"', CHR (34)); -- double quote + v_body := REPLACE (v_body, '#', '#'); + v_body := REPLACE (v_body, '$', '$'); + v_body := REPLACE (v_body, '%', '%'); + v_body := REPLACE (v_body, '&', '&'); + v_body := REPLACE (v_body, ''', CHR (39)); -- single quote + v_body := REPLACE (v_body, '(', '('); + v_body := REPLACE (v_body, ')', ')'); + v_body := REPLACE (v_body, '*', '*'); + v_body := REPLACE (v_body, '+', '+'); + v_body := REPLACE (v_body, ',', ','); -- komma + v_body := REPLACE (v_body, '-', '-'); -- min teken + v_body := REPLACE (v_body, '.', '.'); -- punt + v_body := REPLACE (v_body, '/', '/'); + v_body := REPLACE (v_body, ':', ':'); -- dubbele punt + v_body := REPLACE (v_body, ';', ';'); -- punt komma + v_body := REPLACE (v_body, '<', '<'); + v_body := REPLACE (v_body, '=', '='); + v_body := REPLACE (v_body, '>', '>'); + v_body := REPLACE (v_body, '?', '?'); + v_body := REPLACE (v_body, '@', '@'); + v_body := + REPLACE (v_body, + ' ' || CHR (10) || CHR (13), + CHR (10) || CHR (13)); -- soms komt er ineens een een spatie achter de tag. + EXCEPTION + WHEN OTHERS + THEN + fac.writelog ( + 'PROCESSEMAIL', + 'W', + 'Mail kon niet geformateerd worden afzender:' + || pfrom + || '[' + || v_errormsg + || ']', + 'OTHERS (error ' + || SQLCODE + || '/' + || SUBSTR (SQLERRM, 1, 100) + || ')'); + END; + + --Hieronder de acties die gedaan moeten worden. + + BEGIN + v_stdmelding := + fac.safe_to_number (fac.getsetting ('defaultstdmelding')); + + INSERT INTO mld_melding (mld_melding_module, + mld_meldbron_key, + mld_melding_datum, + mld_melding_omschrijving, + mld_melding_status, + mld_melding_t_uitvoertijd, + mld_stdmelding_key, + mld_alg_locatie_key, + mld_melding_externnr, + prs_perslid_key, + prs_perslid_key_voor, + prs_kostenplaats_key, + mld_melding_spoed) + VALUES ( + 'MLD', + 4, -- email + SYSDATE, + SUBSTR ( + psubject + || CHR (13) + || REPLACE ( + SUBSTR ( + v_body, + 1, + 4000 - (LENGTH (psubject) + 1)), + CHR (13) + || CHR (10) + || CHR (13) + || CHR (10), + CHR (13) || CHR (10)), + 1, + 4000), -- verwijder onnodige witregels + NULL, + MLD_T_UITVOERTIJD (5, 'D'), + v_stdmelding, + 121, -- Locatie onbekend. + NULL, + v_sender, + v_sender, + v_kostenplaats, + 3) + RETURNING mld_melding_key + INTO v_mldkey; + + -- DBMS_OUTPUT.PUT_LINE('Melding toegevoegd: ' || v_mldkey); + v_errormsg := '(0x165)'; + mld.setmeldingstatus (v_mldkey, 2, v_sender); + + INSERT INTO fac_result (fac_result_sessionid, + fac_result_naam, + fac_result_waarde) + VALUES (psessionid, + 'maillog', + 'Geregistreerd onder melding ' || v_mldkey); + END; + + IF v_mldkey IS NOT NULL + THEN + BEGIN + -- Bijlagen toevoegen uit email + v_errormsg := + '(0x601)' || v_mldkey || psubject || v_actie; + + 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_attachorigin + || '\'); + + + + -- Originele email wordt opgeslagen bij de opdracht + v_errormsg := + '(0x602`)' || v_mldkey || psubject || v_actie; + + 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_mailorigin + || '\'); + END; + END IF; + ELSE + v_errormsg := + '(0x900)' + || v_mldkey + || psubject + || v_actie + || ' - geen pto herkend'; + + INSERT INTO fac_result (fac_result_sessionid, + fac_result_naam, + fac_result_waarde) + VALUES (psessionid, 'maillog', v_errormsg); + END CASE; +EXCEPTION + WHEN OTHERS + THEN + INSERT INTO fac_result (fac_result_sessionid, + fac_result_naam, + fac_result_waarde) + VALUES (psessionid, 'maillog', v_errormsg); + + fac.writelog ( + 'PROCESSEMAIL', + 'E', + 'Mail kon niet ingelezen worden afzender:' + || pfrom + || '[' + || v_errormsg + || v_mldkey + || psubject + || v_actie + || ']', + 'OTHERS (error ' + || SQLCODE + || '/' + || SUBSTR (SQLERRM, 1, 100) + || ')'); +END; +/ + ------ payload end ------