318 lines
16 KiB
SQL
318 lines
16 KiB
SQL
--
|
|
-- $Id$
|
|
--
|
|
-- Script containing customer specific db-configuration for WRTH.
|
|
DEFINE thisfile = 'WRTH.SQL'
|
|
DEFINE dbuser = '^WRTH'
|
|
|
|
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 wrth_v_rap_opdrkalender
|
|
AS
|
|
SELECT o.mld_opdr_key opdrkey,
|
|
COALESCE (mld_opdr_plandatum, mld_opdr_einddatum)
|
|
plan_einddatum,
|
|
so.mld_statusopdr_omschrijving
|
|
status,
|
|
p.prs_perslid_naam_friendly
|
|
uitvoerder,
|
|
o.mld_opdr_omschrijving
|
|
omschrijving,
|
|
m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr
|
|
opdrachtnummer,
|
|
m.mld_melding_key
|
|
|| '/'
|
|
|| o.mld_opdr_bedrijfopdr_volgnr
|
|
|| ' - '
|
|
|| so.mld_statusopdr_omschrijving
|
|
|| ' - '
|
|
|| p.prs_perslid_naam_friendly
|
|
|| ' - '
|
|
|| substr (o.mld_opdr_omschrijving, 1, 60) || '...'
|
|
kalenderinhoud
|
|
FROM mld_opdr o,
|
|
mld_melding m,
|
|
prs_v_perslid_fullnames p,
|
|
mld_statusopdr so
|
|
WHERE o.mld_uitvoerende_keys = p.prs_perslid_key
|
|
AND o.mld_melding_key = m.mld_melding_key
|
|
AND o.mld_statusopdr_key = so.mld_statusopdr_key;
|
|
|
|
--Mail2Melding procedure
|
|
CREATE OR REPLACE PROCEDURE WRTH_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_perslid_key NUMBER (10);
|
|
v_kostenplaats_key NUMBER (10);
|
|
v_locatie_key NUMBER (10);
|
|
v_exists_id VARCHAR2 (255);
|
|
v_melding_key NUMBER (10);
|
|
v_melder_key NUMBER (10);
|
|
v_opdracht_key NUMBER (10);
|
|
v_typeopdr_key NUMBER (10);
|
|
v_discipline_key NUMBER (10);
|
|
v_stdmelding_key NUMBER (10);
|
|
v_folder_kkey NUMBER (10);
|
|
subject_regexp VARCHAR2 (1000);
|
|
v_mldnum VARCHAR2 (1000);
|
|
v_count NUMBER (10);
|
|
BEGIN
|
|
CASE
|
|
WHEN UPPER (pto) LIKE 'SERVICEDESK@%' OR UPPER (pto) LIKE 'MELDING@WURTH.NL'
|
|
THEN
|
|
-- Bepaal de mailer op basis van e-mail adres zoals in pfrom?
|
|
v_errormsg := 'Fout bepalen mailer';
|
|
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
|
|
INTO v_perslid_key, v_kostenplaats_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 (hmailuser)
|
|
SELECT p.prs_perslid_key, a.prs_kostenplaats_key
|
|
INTO v_perslid_key, v_kostenplaats_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;
|
|
|
|
-- 1) Eerst meldingnr 123 of opdrachtnr 123/1 gevolgd door spatie uit
|
|
-- onderwerp proberen te bepalen.
|
|
-- 2) Het eerste voorkomen beginnend met een cijfer wordt gezien als
|
|
-- meldingnr of opdrachtnr en evt. andere voorkomens (verder naar
|
|
-- rechts) worden genegeerd.
|
|
v_errormsg := 'Fout bepalen melding/opdracht';
|
|
v_exists_id := psubject;
|
|
IF REGEXP_INSTR (v_exists_id, '\d') > 0
|
|
THEN
|
|
v_exists_id := SUBSTR (v_exists_id, REGEXP_INSTR (v_exists_id, '\d')) || ' '; -- Gedeelte vanaf eerste cijfer in v_exists_id plus ' '!
|
|
v_exists_id := SUBSTR (v_exists_id, 1, REGEXP_INSTR (v_exists_id, '\s') - 1); -- Gedeelte tot eerste white space in v_exists_id!
|
|
END IF;
|
|
|
|
IF INSTR (v_exists_id, '/') = 0 -- Slash in eerste voorkomen beginnend met een cijfer?
|
|
THEN -- Melding
|
|
v_errormsg := 'Fout bepalen melding ' || v_exists_id;
|
|
SELECT MAX (mld_melding_key), MAX (prs_perslid_key) -- MAX() om te zorgen dat v_melding_key=NULL als meldingnr niet bestaat!
|
|
INTO v_melding_key, v_melder_key
|
|
FROM mld_melding
|
|
WHERE mld_melding_key = fac.safe_to_number (v_exists_id);
|
|
|
|
IF v_melding_key IS NOT NULL
|
|
THEN
|
|
v_errormsg := 'Fout toevoegen notitie';
|
|
INSERT INTO mld_melding_note (mld_melding_key,
|
|
mld_melding_note_omschrijving,
|
|
prs_perslid_key,
|
|
mld_melding_note_flag)
|
|
VALUES (v_melding_key,
|
|
SUBSTR (psubject || CHR (13) || CHR (10) || SUBSTR (pbody, 1, 4000 - (LENGTH (psubject) + 2)), 1, 4000),
|
|
v_perslid_key,
|
|
DECODE (v_perslid_key, -- Notitie open=1 als mailer=melder, anders gesloten=0!
|
|
v_melder_key, 1,
|
|
0));
|
|
|
|
-- Default tracking is even goed genoeg.
|
|
fac.trackaction ('MLDNOT', v_melding_key, v_perslid_key, NULL, '#Notitie toegevoegd vanuit e-mail'); -- # voorkomt notificatie
|
|
|
|
INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
|
|
VALUES (psessionid, 'maillog', 'Als notitie toegevoegd aan melding ' || TO_CHAR (v_melding_key));
|
|
ELSE
|
|
-- Bepaal de afgesproken soortmelding met key=281=intake melding
|
|
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 = 281;
|
|
|
|
-- 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, 49), -- Fallback op 49 HQ Den Bosch
|
|
NULL, --v_onrgoed_keys,
|
|
SYSDATE,
|
|
SUBSTR (pbody, 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)
|
|
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 ' || TO_CHAR (v_melding_key));
|
|
END IF;
|
|
|
|
-- 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_kenmerk_niveau = 'A'
|
|
OR (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_kenmerk_niveau = 'A'
|
|
OR (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;
|
|
ELSE -- Opdracht
|
|
v_errormsg := 'Fout bepalen opdracht ' || v_exists_id;
|
|
SELECT mld_opdr_key, mld_typeopdr_key
|
|
INTO v_opdracht_key, v_typeopdr_key
|
|
FROM mld_opdr
|
|
WHERE TO_CHAR (mld_melding_key) || '/' || TO_CHAR (mld_opdr_bedrijfopdr_volgnr) = SUBSTR (v_exists_id, REGEXP_INSTR (v_exists_id, '\d'));
|
|
|
|
v_errormsg := 'Fout toevoegen opdracht-notitie';
|
|
INSERT INTO mld_opdr_note (mld_opdr_key,
|
|
prs_perslid_key,
|
|
mld_opdr_note_omschrijving)
|
|
VALUES (v_opdracht_key,
|
|
v_perslid_key,
|
|
pfrom || CHR (13) || CHR (10) || psubject || CHR (13) || CHR (10) || SUBSTR (pbody, 1, 2000));
|
|
|
|
v_errormsg := 'Fout bijwerken opdracht-kleurbolletje';
|
|
UPDATE mld_opdr
|
|
SET mld_opdr_flag = 1 -- Zwart
|
|
WHERE mld_opdr_key = v_opdracht_key;
|
|
|
|
-- Find the lowest volgnummer of the Folder-flexfield.
|
|
v_errormsg := 'Fout toevoegen opdracht-bijlage';
|
|
SELECT MIN (k1.mld_kenmerk_key)
|
|
INTO v_folder_kkey
|
|
FROM mld_kenmerk k1, mld_srtkenmerk sk1
|
|
WHERE k1.mld_typeopdr_key = v_typeopdr_key
|
|
AND k1.mld_kenmerk_verwijder IS NULL
|
|
AND k1.mld_kenmerk_niveau = 'O'
|
|
AND k1.mld_srtkenmerk_key = sk1.mld_srtkenmerk_key
|
|
AND sk1.mld_srtkenmerk_kenmerktype = 'M'
|
|
AND NOT EXISTS
|
|
(SELECT 1
|
|
FROM mld_kenmerk k2, mld_srtkenmerk sk2
|
|
WHERE k2.mld_typeopdr_key = v_typeopdr_key
|
|
AND k2.mld_kenmerk_verwijder IS NULL
|
|
AND k2.mld_kenmerk_niveau = 'O'
|
|
AND k2.mld_srtkenmerk_key = sk2.mld_srtkenmerk_key
|
|
AND sk2.mld_srtkenmerk_kenmerktype = 'M'
|
|
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\O' || TO_CHAR (TRUNC (v_opdracht_key / 1000), 'FM0000') || '___\O' || v_opdracht_key || '\' || v_folder_kkey || '\');
|
|
END IF;
|
|
END IF;
|
|
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', 'WRTH_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;
|
|
/
|
|
|
|
------ 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 |