BLOS#61496 -- Implementatie Facilitor bij BLOS Kinderopvang
svn path=/Customer/trunk/; revision=45958
This commit is contained in:
396
BLOS/blos.sql
Normal file
396
BLOS/blos.sql
Normal file
@@ -0,0 +1,396 @@
|
||||
--
|
||||
-- $Id$
|
||||
--
|
||||
-- Script containing customer specific db-configuration for BLOS.
|
||||
DEFINE thisfile = 'BLOS.SQL'
|
||||
DEFINE dbuser = '^BLOS'
|
||||
|
||||
SET ECHO ON
|
||||
SET DEFINE ON
|
||||
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
|
||||
WHENEVER SQLERROR EXIT;
|
||||
SELECT adm.scriptspoolfile('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL;
|
||||
WHENEVER SQLERROR CONTINUE;
|
||||
SPOOL &fcltlogfile
|
||||
SET DEFINE OFF
|
||||
|
||||
------ payload begin ------
|
||||
|
||||
-- SVRZ#55239: Mail2Melding bij migratie Topdesk naar FACILITOR. Twee stromen:
|
||||
-- - HELPDESK -: Soortmelding 1691 (Hardware/Computer) onder Vakgroep 3038
|
||||
-- (Helpdesk I+A) onder Vakgroeptype 161!
|
||||
-- - CLIENTPORTAAL -: Soortmelding 1697 (Clientportaal) onder Vakgroep 3042
|
||||
-- (Servicedesk MijnCaress) onder Vakgroeptype 161!
|
||||
CREATE OR REPLACE PROCEDURE SVRZ_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) := 36281; -- Onbekende gebruiker
|
||||
v_errormsg VARCHAR2 (1000);
|
||||
oracle_err_num NUMBER;
|
||||
oracle_err_mes VARCHAR2 (200);
|
||||
v_exist_ticket 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_melding_key NUMBER (10);
|
||||
v_folder_kkey NUMBER (10);
|
||||
v_count NUMBER (10);
|
||||
BEGIN
|
||||
CASE
|
||||
WHEN UPPER (pto) LIKE 'HELPDESK@%'
|
||||
THEN
|
||||
-- Bepaal de melder/noteur op basis van e-mail adres zoals in pfrom?
|
||||
v_errormsg := 'Fout bepalen melder ' || COALESCE (pfrom, '???');
|
||||
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 61=Servicecentrum!
|
||||
SELECT p.prs_perslid_key, a.prs_kostenplaats_key, 61
|
||||
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;
|
||||
|
||||
v_errormsg := 'Fout bepalen bestaande melding';
|
||||
v_exist_ticket := psubject;
|
||||
IF REGEXP_INSTR (v_exist_ticket, '\d') > 0
|
||||
THEN
|
||||
v_exist_ticket := SUBSTR (v_exist_ticket, REGEXP_INSTR (v_exist_ticket, '\d')) || 'x'; -- Gedeelte vanaf eerste cijfer in v_exist_ticket plus 'x'!
|
||||
v_exist_ticket := SUBSTR (v_exist_ticket, 1, REGEXP_INSTR (v_exist_ticket, '\D') - 1); -- Gedeelte tot eerste niet-cijfer in v_exist_ticket!
|
||||
ELSE
|
||||
v_exist_ticket := 'x';
|
||||
END IF;
|
||||
|
||||
SELECT COUNT (*)
|
||||
INTO v_count
|
||||
FROM mld_melding
|
||||
WHERE mld_melding_key = fac.safe_to_number (v_exist_ticket);
|
||||
|
||||
-- Om te voorkomen dat huisnummers in het Onderwerp resulteren in het
|
||||
-- toevoegen van Notities, dit alleen doen voor nummers > 16000!
|
||||
IF v_count = 1 AND fac.safe_to_number (v_exist_ticket) > 16000
|
||||
THEN -- Notitie bij bestaande melding!
|
||||
SELECT mld_stdmelding_key, mld_melding_key
|
||||
INTO v_stdmelding_key, v_melding_key
|
||||
FROM mld_melding
|
||||
WHERE mld_melding_key = fac.safe_to_number (v_exist_ticket);
|
||||
|
||||
v_errormsg := 'Fout toevoegen notitie';
|
||||
INSERT INTO mld_melding_note (mld_melding_key,
|
||||
prs_perslid_key,
|
||||
mld_melding_note_omschrijving,
|
||||
mld_melding_note_flag)
|
||||
VALUES (v_melding_key,
|
||||
v_perslid_key,
|
||||
pfrom || CHR (13) || CHR (10) || psubject || CHR (13) || CHR (10) || SUBSTR (pbody, 1, 2000),
|
||||
0);
|
||||
|
||||
INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
|
||||
VALUES (psessionid, 'maillog', 'Notitie onder exist-melding ' || v_melding_key);
|
||||
|
||||
-- Vlaggetjes zetten zoals mld_edit_note.asp dat doet!
|
||||
IF fac.getsetting ('mld_melding_actiecode') = 1
|
||||
THEN
|
||||
UPDATE mld_melding
|
||||
SET mld_melding_actiecode = 1 + 128 -- BO + Attentie
|
||||
WHERE mld_melding_key = v_melding_key;
|
||||
END IF;
|
||||
ELSE -- Nieuwe melding!
|
||||
-- Bepaal de afgesproken soortmelding met key=1691=Harware/Computer!
|
||||
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 = 1691;
|
||||
|
||||
-- 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
|
||||
v_locatie_key,
|
||||
NULL, --v_onrgoed_keys,
|
||||
SYSDATE,
|
||||
pfrom || CHR (13) || CHR (10) || 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,
|
||||
3141) -- BT Helpdesk I+A
|
||||
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);
|
||||
END IF;
|
||||
|
||||
-- Find the lowest volgnummer of the Folder-flexfield.
|
||||
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;
|
||||
|
||||
-- Handle workflow actions for completion (in case of new melding).
|
||||
IF v_count = 0
|
||||
THEN
|
||||
MLD.mld_nextworkflowstep (v_melding_key, -1); -- -1=Initial
|
||||
END IF;
|
||||
WHEN UPPER (pto) LIKE 'CLIENTPORTAAL@%'
|
||||
THEN
|
||||
-- Melder/noteur per definitie Onbekend en 61=Servicecentrum!
|
||||
v_errormsg := 'Fout bepalen melder ' || COALESCE (pfrom, '???');
|
||||
SELECT p.prs_perslid_key, a.prs_kostenplaats_key, 61
|
||||
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;
|
||||
|
||||
v_errormsg := 'Fout bepalen bestaande melding';
|
||||
v_exist_ticket := psubject;
|
||||
IF REGEXP_INSTR (v_exist_ticket, '\d') > 0
|
||||
THEN
|
||||
v_exist_ticket := SUBSTR (v_exist_ticket, REGEXP_INSTR (v_exist_ticket, '\d')) || 'x'; -- Gedeelte vanaf eerste cijfer in v_exist_ticket plus 'x'!
|
||||
v_exist_ticket := SUBSTR (v_exist_ticket, 1, REGEXP_INSTR (v_exist_ticket, '\D') - 1); -- Gedeelte tot eerste niet-cijfer in v_exist_ticket!
|
||||
ELSE
|
||||
v_exist_ticket := 'x';
|
||||
END IF;
|
||||
|
||||
SELECT COUNT (*)
|
||||
INTO v_count
|
||||
FROM mld_melding
|
||||
WHERE mld_melding_key = fac.safe_to_number (v_exist_ticket);
|
||||
|
||||
-- Om te voorkomen dat huisnummers in het Onderwerp resulteren in het
|
||||
-- toevoegen van Notities, dit alleen doen voor nummers > 16000!
|
||||
IF v_count = 1 AND fac.safe_to_number (v_exist_ticket) > 16000
|
||||
THEN -- Notitie bij bestaande melding!
|
||||
SELECT mld_stdmelding_key, mld_melding_key
|
||||
INTO v_stdmelding_key, v_melding_key
|
||||
FROM mld_melding
|
||||
WHERE mld_melding_key = fac.safe_to_number (v_exist_ticket);
|
||||
|
||||
v_errormsg := 'Fout toevoegen notitie';
|
||||
INSERT INTO mld_melding_note (mld_melding_key,
|
||||
prs_perslid_key,
|
||||
mld_melding_note_omschrijving,
|
||||
mld_melding_note_flag)
|
||||
VALUES (v_melding_key,
|
||||
v_perslid_key,
|
||||
pfrom || CHR (13) || CHR (10) || psubject || CHR (13) || CHR (10) || SUBSTR (pbody, 1, 2000),
|
||||
0);
|
||||
|
||||
INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
|
||||
VALUES (psessionid, 'maillog', 'Notitie onder exist-melding ' || v_melding_key);
|
||||
|
||||
-- Vlaggetjes zetten zoals mld_edit_note.asp dat doet!
|
||||
IF fac.getsetting ('mld_melding_actiecode') = 1
|
||||
THEN
|
||||
UPDATE mld_melding
|
||||
SET mld_melding_actiecode = 1 + 128 -- BO + Attentie
|
||||
WHERE mld_melding_key = v_melding_key;
|
||||
END IF;
|
||||
ELSE -- Nieuwe melding!
|
||||
-- Bepaal de afgesproken soortmelding met key=1697=Clientportaal!
|
||||
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 = 1697;
|
||||
|
||||
-- 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
|
||||
v_locatie_key,
|
||||
NULL, --v_onrgoed_keys,
|
||||
SYSDATE,
|
||||
pfrom || CHR (13) || CHR (10) || 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,
|
||||
3061) -- BT Medewerkers Cli<6C>ntportaal
|
||||
RETURNING mld_melding_key
|
||||
INTO v_melding_key;
|
||||
|
||||
v_errormsg := 'Fout toevoegen Emailadres';
|
||||
INSERT INTO mld_kenmerkmelding (mld_melding_key,
|
||||
mld_kenmerk_key,
|
||||
mld_kenmerkmelding_waarde)
|
||||
VALUES (v_melding_key,
|
||||
1101, -- Emailadres
|
||||
SUBSTR (pfrom, 1, 50));
|
||||
|
||||
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);
|
||||
END IF;
|
||||
|
||||
-- Find the lowest volgnummer of the Folder-flexfield.
|
||||
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;
|
||||
|
||||
-- Handle workflow actions for completion (in case of new melding).
|
||||
IF v_count = 0
|
||||
THEN
|
||||
MLD.mld_nextworkflowstep (v_melding_key, -1); -- -1=Initial
|
||||
END IF;
|
||||
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', 'SVRZ_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
|
||||
Reference in New Issue
Block a user