VLKC#65151 Rap/Uitrijkaarten

svn path=/Customer/trunk/; revision=49292
This commit is contained in:
Maarten van der Heide
2020-12-24 15:35:30 +00:00
parent 3fd7738948
commit 44b537aae4

View File

@@ -5373,6 +5373,363 @@ AS
AND ba.alg_district_key = d.alg_district_key(+)
AND ba.alg_locatie_key = l.alg_locatie_key(+);
-- VLKC#74776: Mail2Melding + Mail2Opdracht. Twee stromen:
-- - NIEUWEMELDING -: Registreren nieuwe melding van Soortmelding=1401
-- (Mailmelding) onder Vakgroep=306 (Algemeen) onder
-- Vakgroeptype=23 (Melding)!
-- - OPDRACHTNOTITIE -: Toevoegen opdrachtnotitie!
CREATE OR REPLACE PROCEDURE VLKC_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) := 34940; -- Facilitydesk
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_melding_key NUMBER (10);
v_folder_kkey NUMBER (10);
v_opdracht_id VARCHAR2 (255);
v_opdracht_key NUMBER (10);
v_typeopdr_key NUMBER (10);
v_count NUMBER (10);
BEGIN
CASE
--WHEN INSTR (UPPER (pfrom), 'FACILITYDESK@VANLANSCHOTKEMPEN.COM') > 0 AND UPPER (pto) LIKE 'NIEUWEMELDING@%'
WHEN UPPER (pto) LIKE 'NIEUWEMELDING@%'
THEN
-- Probeer melder te bepalen op basis van e-mail adres tussen '<>' na eerste voorkomen 'Van:'!
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;
END IF;
SELECT COUNT (*)
INTO v_count
FROM prs_v_aanwezigperslid
WHERE UPPER (prs_perslid_email) LIKE UPPER (v_van_email) || '%';
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 (v_van_email) || '%'
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 1=AMS-WTC!
SELECT p.prs_perslid_key, a.prs_kostenplaats_key, 1
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=1401=Mailmelding!
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 = 1401;
-- 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, 1), -- Fallback op 1=AMS-WTC
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) -- 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.
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;
-- 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 INSTR (UPPER (pfrom), 'FACILITYDESK@VANLANSCHOTKEMPEN.COM') > 0 AND UPPER (pto) LIKE 'OPDRACHTNOTITIE@%'
WHEN UPPER (pto) LIKE 'OPDRACHTNOTITIE@%'
THEN
-- Probeer noteur te bepalen op basis van e-mail adres tussen '<>' na eerste voorkomen 'Van:'!
v_errormsg := 'Fout bepalen noteur';
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;
END IF;
SELECT COUNT (*)
INTO v_count
FROM prs_contactpersoon
WHERE prs_contactpersoon_email IS NULL
AND prs_perslid_key IS NOT NULL
AND UPPER (prs_contactpersoon_email) LIKE UPPER (v_van_email) || '%';
IF v_count = 1
THEN
SELECT prs_perslid_key
INTO v_perslid_key
FROM prs_contactpersoon
WHERE prs_contactpersoon_email IS NULL
AND prs_perslid_key IS NOT NULL
AND UPPER (prs_contactpersoon_email) LIKE UPPER (v_van_email) || '%';
ELSE -- Noteur kan niet 1-duidig worden bepaald, dus Onbekend!
SELECT prs_perslid_key
INTO v_perslid_key
FROM prs_v_aanwezigperslid
WHERE prs_perslid_key = c_onbekend_key;
END IF;
v_errormsg := 'Fout bepalen opdracht';
v_opdracht_id := psubject;
IF REGEXP_INSTR (v_opdracht_id, '\d') > 0
THEN
v_opdracht_id := SUBSTR (v_opdracht_id, REGEXP_INSTR (v_opdracht_id, '\d')) || ' '; -- Gedeelte vanaf eerste cijfer in v_exist_ticket plus ' '!
v_opdracht_id := SUBSTR (v_opdracht_id, 1, REGEXP_INSTR (v_opdracht_id, '\s') - 1); -- Gedeelte tot eerste white space in v_exist_ticket!
END IF;
v_errormsg := 'Fout bepalen opdracht ' || v_opdracht_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_opdracht_id, REGEXP_INSTR (v_opdracht_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;
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', 'VLKC_processemail afgebroken!', '[' || v_van_email || '] ' || 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;
/
-- VLKC#65151: Uitrijkaarten
CREATE OR REPLACE VIEW vlkc_v_rap_uitrijkaarten
(
afspraakmaand,
afspraakdatum,
afspraakdatum_van,
afspraakdatum_tot,
afspraaknr, -- Niet gevraagd
parkeerpasnummer, -- 23-cijferig
uitrijkaart,
uitrijkaartprijs,
contactpersoon, -- Niet gevraagd
gastheer, -- Niet gevraagd
bezoeker,
opmerking, -- Niet gevraagd
kostenplaats,
kostenplaats_bezoeker,
kostenplaats_gastheer,
locatie,
bez_afspraak_key
)
AS
SELECT TO_CHAR (x.bez_afspraak_datum, 'yyyy-mm') maand,
x.bez_afspraak_datum,
x.bez_afspraak_datum van,
x.bez_afspraak_eind tot,
TO_CHAR (x.bez_afspraak_key) afspraaknr,
pp.bez_kenmerkwaarde_waarde parkeerpasnummer,
uk_ud.fac_usrdata_omschr uitrijkaart,
uk_ud.fac_usrdata_prijs uitrijkaartprijs,
x.contactpersoon,
x.gastheer,
x.bez_afspraak_naam,
x.bez_afspraak_opmerking,
COALESCE (kpb.prs_kostenplaats_nr, kph.prs_kostenplaats_nr) kp,
kpb.prs_kostenplaats_nr kp_bezoeker,
DECODE (pb.prs_perslid_key, NULL, kph.prs_kostenplaats_nr, NULL) kp_gastheer,
l.alg_locatie_omschrijving || ' (' || l.alg_locatie_code || ')',
x.bez_afspraak_key
FROM (SELECT a.bez_afspraak_key,
a.bez_afspraak_datum,
a.bez_afspraak_eind,
a.bez_afspraak_opmerking,
a.bez_afspraak_host_key,
a.alg_locatie_key,
b.bez_bezoekers_key,
b.bez_afspraak_naam,
b.prs_perslid_key,
pc.prs_perslid_naam_full contactpersoon,
ph.prs_perslid_naam_full gastheer
FROM bez_afspraak a,
bez_bezoekers b,
prs_v_perslid_fullnames_all pc,
prs_v_perslid_fullnames_all ph
WHERE a.bez_afspraak_key = b.bez_afspraak_key
AND a.bez_afspraak_contact_key = pc.prs_perslid_key
AND a.bez_afspraak_host_key = ph.prs_perslid_key) x
LEFT JOIN prs_perslid pb
ON x.prs_perslid_key = pb.prs_perslid_key
LEFT JOIN prs_afdeling ab
ON pb.prs_afdeling_key = ab.prs_afdeling_key
LEFT JOIN prs_kostenplaats kpb
ON ab.prs_kostenplaats_key = kpb.prs_kostenplaats_key
LEFT JOIN prs_perslid ph
ON x.bez_afspraak_host_key = ph.prs_perslid_key
LEFT JOIN prs_afdeling ah
ON ph.prs_afdeling_key = ah.prs_afdeling_key
LEFT JOIN prs_kostenplaats kph
ON ah.prs_kostenplaats_key = kph.prs_kostenplaats_key
LEFT JOIN bez_kenmerkwaarde pp
ON x.bez_bezoekers_key = pp.bez_bezoekers_key
AND pp.bez_kenmerkwaarde_verwijder IS NULL
AND pp.bez_kenmerk_key = 1040 -- Parkeerpasnummer
LEFT JOIN bez_kenmerkwaarde uk
ON x.bez_bezoekers_key = uk.bez_bezoekers_key
AND uk.bez_kenmerkwaarde_verwijder IS NULL
AND uk.bez_kenmerk_key = 1060 -- Uitrijkaart
LEFT JOIN fac_v_aanwezigusrdata uk_ud
ON fac.safe_to_number (uk.bez_kenmerkwaarde_waarde) = uk_ud.fac_usrdata_key
LEFT JOIN alg_locatie l
ON x.alg_locatie_key = l.alg_locatie_key
WHERE x.bez_afspraak_datum > TO_DATE ('01-01-2020', 'dd-mm-yyyy')
AND x.bez_afspraak_datum > TRUNC (ADD_MONTHS (SYSDATE, -12), 'yyyy');
------ payload end ------
SET DEFINE OFF