CSUN#25916 -- Mail reply linken aan bestaande melding

svn path=/Customer/trunk/; revision=17709
This commit is contained in:
Arthur Egberink
2013-04-22 15:12:00 +00:00
parent 6e7a3f96c7
commit 7acabe923e

View File

@@ -9,9 +9,9 @@ SET ECHO ON
--------------
CREATE OR REPLACE PROCEDURE csun_imp_writelog (
p_import_key IN NUMBER,
p_severity IN VARCHAR2,
p_errormsg IN VARCHAR2,
p_errorhint IN VARCHAR2)
p_severity IN VARCHAR2,
p_errormsg IN VARCHAR2,
p_errorhint IN VARCHAR2)
AS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
@@ -322,10 +322,14 @@ CREATE OR REPLACE PROCEDURE CSUN_processemail (pfrom IN VARCHAR2,
AS
sender prs_perslid.prs_perslid_key%TYPE;
kostenplaats prs_afdeling.prs_kostenplaats_key%TYPE;
newkey mld_melding.mld_melding_key%TYPE;
defaultstdmelding fac_setting.fac_setting_default%TYPE;
mldkey mld_melding.mld_melding_key%TYPE;
stdmelding mld_stdmelding.mld_stdmelding_key%TYPE;
subject_regexp fac_setting.fac_setting_default%TYPE;
kkey mld_kenmerk.mld_kenmerk_key%TYPE;
errormsg fac_result.fac_result_waarde%TYPE;
mldnum VARCHAR2(4000);
srtdisc VARCHAR2(4000);
cnt NUMBER(10);
BEGIN
errormsg := '(0x143)';
@@ -348,46 +352,91 @@ BEGIN
WHEN UPPER (pto) LIKE 'SERVICEDESK@%'
THEN
errormsg := '(0x145)';
defaultstdmelding := fac.getsetting ('defaultstdmelding');
-- suggested extensions:
-- check for MLDUSE-write autorisations
-- parse the subject to find an appropriate stdmelding, if uniquely possible
-- append (as a note?) to an existing melding if #key is found in the subject
errormsg := '(0x148)';
BEGIN
INSERT INTO mld_melding (mld_melding_module,
mld_meldbron_key,
mld_melding_datum,
mld_melding_omschrijving,
mld_melding_status,
mld_melding_uitvoertijd,
mld_stdmelding_key,
prs_perslid_key,
prs_perslid_key_voor,
prs_kostenplaats_key,
mld_melding_spoed)
VALUES ('MLD',
4, -- email
SYSDATE,
SUBSTR (
psubject || CHR (13)
|| REPLACE (
SUBSTR(pbody, 1, 4000 - (LENGTH(psubject)+1)),
CHR (13) || CHR (10) || CHR (13) || CHR (10),
CHR (13) || CHR (10)),
1,
4000), -- verwijder onnodige witregels
NULL,
2,
defaultstdmelding,
sender,
sender,
kostenplaats,
3)
RETURNING mld_melding_key
INTO newkey;
-- Alternatief was: scannen van fac_srtnotificatie_oms maar dat voelt ook niet echt lekker
-- subject_regexp := fac.getsetting ('mld_reply_subject_regexp'); -- [[:alpha:]]*[[:digit:]]{3,}
subject_regexp := '[[:alpha:]]*[[:digit:]]{3,}';
mldnum := REGEXP_SUBSTR(psubject, subject_regexp, 1, 1, 'i'); -- MA12345
srtdisc := REGEXP_SUBSTR(mldnum, '[[:alpha:]]', 1, 1, 'i'); -- MA
mldkey := fac.safe_to_number(substr(mldnum, length(srtdisc) + 1));
DBMS_OUTPUT.PUT_LINE('mldnum: ' || mldnum);
DBMS_OUTPUT.PUT_LINE('srtdisc: ' || srtdisc);
DBMS_OUTPUT.PUT_LINE('mldkey: ' || mldkey);
-- We eisen
-- - Goed meldingnummer
-- - Goede srtdiscipline
-- - Afzender is degene voor wie de melding was
-- suggested extensions: ook collega's toestaan?
SELECT MIN(mm.mld_stdmelding_key)
INTO stdmelding
FROM mld_melding mm, mld_stdmelding msm, ins_tab_discipline insd, ins_srtdiscipline isd
WHERE mm.mld_melding_key = mldkey
AND mm.mld_stdmelding_key = msm.mld_stdmelding_key
AND msm.mld_ins_discipline_key = insd.ins_discipline_key
AND insd.ins_srtdiscipline_key = isd.ins_srtdiscipline_key
-- Controle op srtdisc werkt niet goed. Mails worden na binnenkomst namelijk doorgezet
-- naar de definitieve stdmelding(/discipline/srtdiscpline) en daarmee verandert de
-- prefix letter
--AND isd.ins_srtdiscipline_prefix = srtdisc
AND mm.prs_perslid_key_voor = sender;
DBMS_OUTPUT.PUT_LINE('mld_stdmelding_key: ' || TO_CHAR(stdmelding));
IF (stdmelding IS NOT NULL) THEN -- Bestaande melding
INSERT INTO mld_melding_note (mld_melding_key,
mld_melding_note_omschrijving,
prs_perslid_key,
mld_melding_note_flag)
VALUES(mldkey, pbody, sender, 1); -- 1 is zichtbaar FE want zelf ingevoerd.
-- Default tracking is even goed genoeg
fac.trackaction('MLDNOT', mldkey, sender, NULL, '#Notitie toegevoegd vanuit e-mail'); -- # voorkomt notificatie
-- suggested extensions:
-- Vlaggetjes zetten zoals mld_edit_note.asp dat doet?
DBMS_OUTPUT.PUT_LINE('Notitie toegevoegd.');
ELSE
-- suggested extensions:
-- check for MLDUSE-write autorisations
-- parse the subject to find an appropriate stdmelding, if uniquely possible
errormsg := '(0x148)';
BEGIN
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_uitvoertijd,
mld_stdmelding_key,
prs_perslid_key,
prs_perslid_key_voor,
prs_kostenplaats_key,
mld_melding_spoed)
VALUES ('MLD',
4, -- email
SYSDATE,
SUBSTR (
psubject || CHR (13)
|| REPLACE (
SUBSTR(pbody, 1, 4000 - (LENGTH(psubject)+1)),
CHR (13) || CHR (10) || CHR (13) || CHR (10),
CHR (13) || CHR (10)),
1,
4000), -- verwijder onnodige witregels
NULL,
2,
stdmelding,
sender,
sender,
kostenplaats,
3)
RETURNING mld_melding_key
INTO mldkey;
DBMS_OUTPUT.PUT_LINE('Melding toegevoegd: ' || mldkey);
errormsg := '(0x165)';
mld.setmeldingstatus (mldkey, 2, sender);
END;
-- Zoek het laagste bijlagen kenmerk om de bijlagen onder te stoppen
errormsg := '(0x151)';
SELECT MIN (mld_kenmerk_key)
INTO kkey
@@ -397,7 +446,7 @@ BEGIN
ins_tab_discipline d
WHERE mld_srtkenmerk_kenmerktype = 'M'
AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
AND std.mld_stdmelding_key = defaultstdmelding
AND std.mld_stdmelding_key = stdmelding
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND ( (k.mld_stdmelding_key = std.mld_stdmelding_key
AND k.mld_kenmerk_niveau = 'S')
@@ -416,7 +465,7 @@ BEGIN
AND sk1.mld_srtkenmerk_key =
k1.mld_srtkenmerk_key
AND std1.mld_stdmelding_key =
defaultstdmelding
stdmelding
AND std1.mld_ins_discipline_key =
d1.ins_discipline_key
AND ( (k1.mld_stdmelding_key =
@@ -435,18 +484,16 @@ BEGIN
errormsg := '(0x153)';
IF kkey IS NOT NULL
THEN
DBMS_OUTPUT.PUT_LINE('Bijlagen kenmerk: ' || kkey);
errormsg := '(0x157)';
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES ('hMailServer',
'kenmerkpath',
'MLD\M' || to_char(TRUNC(newkey/1000), 'FM0000') || '___\M' || newkey || '\' || kkey || '\');
'MLD\M' || to_char(TRUNC(mldkey/1000), 'FM0000') || '___\M' || mldkey || '\' || kkey || '\');
END IF;
errormsg := '(0x165)';
mld.setmeldingstatus (newkey, 2, sender);
END;
END IF;
ELSE
errormsg := '(0x187)';
INSERT INTO fac_result (fac_result_sessionid,
@@ -458,6 +505,7 @@ BEGIN
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE('Mail niet geaccepteerd: ' || 'OTHERS (error ' || SQLCODE || '/' || SUBSTR (SQLERRM, 1, 100) || ')');
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
@@ -469,8 +517,6 @@ EXCEPTION
'E',
'OTHERS (error ' || SQLCODE || '/' || SUBSTR (SQLERRM, 1, 100) || ')',
errormsg || ' afzender:' || pfrom);
END;
/
@@ -489,8 +535,8 @@ AS
FROM imp_log
WHERE imp_log_applicatie = 'PROCESSEMAIL'
AND imp_log_datum > SYSDATE - 30;
CREATE OR REPLACE VIEW csun_v_rap_melding
(
@@ -684,6 +730,7 @@ AS
CREATE OR REPLACE VIEW csun_v_rap_locatiegegevens
(
prjnr,
fclt_f_regioomschrijving,
fclt_f_districtomschrijving,
locatiecode,
@@ -696,7 +743,12 @@ CREATE OR REPLACE VIEW csun_v_rap_locatiegegevens
bb
)
AS
SELECT alg_regio_omschrijving,
SELECT (SELECT alg_onrgoedkenmerk_waarde
FROM alg_onrgoedkenmerk ogk
WHERE alg_kenmerk_key = 1040
AND ogk.alg_onrgoed_key = l.alg_locatie_key)
prjnr,
alg_regio_omschrijving,
alg_district_omschrijving,
l.alg_locatie_code,
l.alg_locatie_omschrijving,
@@ -829,7 +881,7 @@ BEGIN
p_kenmerk_waarde);
END IF;
END IF;
WHEN 'MLD'
THEN
-- melding- of opdrachtkenmerk?
@@ -915,7 +967,7 @@ END;
/
-- TODO: Projectnummer toevoegen aan import en imp tabel. !!!!!!!!!!!!!!!!!!!!!!!!!!
CREATE OR REPLACE PROCEDURE csun_import_onrgoed (p_import_key IN NUMBER)
AS
c_fielddelimitor VARCHAR2 (1) := ';';
@@ -928,6 +980,7 @@ AS
v_error NUMBER (1);
v_aanduiding VARCHAR2 (200);
-- De importvelden:
v_prjnr VARCHAR2 (10);
v_regio_omschrijving VARCHAR2 (255); -- 30
v_regio_key NUMBER (10);
v_district_omschrijving VARCHAR2 (255); -- 30
@@ -976,6 +1029,7 @@ BEGIN
v_aanduiding := '';
v_error := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_fielddelimitor, v_prjnr);
fac.imp_getfield (v_newline, c_fielddelimitor, v_regio_omschrijving);
fac.imp_getfield (v_newline,
c_fielddelimitor,
@@ -1161,7 +1215,7 @@ BEGIN
'Aanduiding wordt afgebroken tot <' || v_client || '>');
END IF;
IF v_client IS NOT NULL
IF v_client IS NOT NULL
THEN
BEGIN
SELECT fac_usrdata_key
@@ -1173,8 +1227,8 @@ BEGIN
EXCEPTION
WHEN NO_DATA_FOUND
THEN
INSERT INTO fac_usrdata (fac_usrtab_key,
fac_usrdata_code,
INSERT INTO fac_usrdata (fac_usrtab_key,
fac_usrdata_code,
fac_usrdata_omschr)
VALUES (1,
SUBSTR (v_client, 1, 40),
@@ -1187,7 +1241,7 @@ BEGIN
'<' || v_client || '>');
END;
END IF;
--
IF v_bud IS NOT NULL
THEN
@@ -1252,14 +1306,14 @@ BEGIN
--
-- Insert geformatteerde import record
IF v_error = 0
IF v_error = 0
THEN
v_errormsg :=
'Fout bij toevoegen te impoteren locatie ['
|| v_locatie_code
|| ']';
INSERT INTO csun_imp_onrgoed (alg_regio_omschrijving,
alg_regio_key,
alg_district_omschrijving,
@@ -1675,7 +1729,7 @@ INSERT INTO alg_ruimte (alg_verdieping_key,
FROM alg_ruimte r
WHERE r.alg_verdieping_key = v.alg_verdieping_key);
-- toevoegen werkplekken
-- toevoegen werkplekken
INSERT INTO prs_werkplek (prs_werkplek_volgnr, prs_werkplek_virtueel, prs_alg_ruimte_key)
SELECT 1, 0, alg_ruimte_key
FROM alg_v_aanwezigruimte r
@@ -1684,7 +1738,7 @@ INSERT INTO prs_werkplek (prs_werkplek_volgnr, prs_werkplek_virtueel, prs_alg_ru
FROM prs_v_aanwezigwerkplek wp
WHERE r.alg_ruimte_key = wp.prs_alg_ruimte_key
AND prs_werkplek_volgnr = 1);
-- toevoegen prs_perslidwerkplekken
INSERT INTO prs_perslidwerkplek (prs_perslid_key, prs_perslidwerkplek_bezetting, prs_werkplek_key)
SELECT prs_perslid_key, 100, prs_werkplek_key
@@ -1724,7 +1778,7 @@ END;
BEGIN adm.systrackscript('$Workfile: csun.sql $', '$Revision$', 0); END;
/
BEGIN fac.registercustversion('CSUN', 6); END;
BEGIN fac.registercustversion('CSUN', 7); END;
/
COMMIT;
spool off