HGCU#90592 Opzetten koppeling met GBS (mail2melding)

svn path=/Customer/trunk/; revision=70258
This commit is contained in:
Arthur Egberink
2025-09-09 17:48:28 +00:00
parent eebd7a0ca5
commit 3ec1d63fd8

View File

@@ -298,14 +298,19 @@ AS
v_ruimte_key alg_ruimte.alg_ruimte_key%TYPE;
v_locatie_key alg_locatie.alg_locatie_key%TYPE;
v_tijdstip VARCHAR2 (100);
v_datum VARCHAR2 (100);
v_date DATE;
v_gbs_melding VARCHAR2 (1000);
v_meldingstekst VARCHAR2 (1000);
v_cabinet VARCHAR2 (1000);
v_count NUMBER;
v_error NUMBER;
v_newline VARCHAR2 (4000);
v_tag VARCHAR2 (4000);
v_value VARCHAR2 (4000);
v_from VARCHAR2 (4000);
v_body VARCHAR2 (4000);
v_state VARCHAR2 (4000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
@@ -321,16 +326,20 @@ AS
v_from := pfrom;
END IF;
SELECT prs_perslid_key
INTO v_sender
FROM prs_perslid
WHERE prs_perslid_oslogin = '_GBS_KOPPELING';
IF psubject = 'Watchdog Alarm'
THEN
UPDATE fac_usrdata
SET fac_usrdata_vervaldatum = SYSDATE
WHERE fac_usrdata_key = 181; -- Watchdog
WHERE fac_usrdata_key = 62; -- Watchdog
ELSE
UPDATE fac_usrdata
SET fac_usrdata_vervaldatum = SYSDATE
WHERE fac_usrdata_key = 60; -- Laatst ontvangen bericht
WHERE fac_usrdata_key = 61; -- Laatst ontvangen bericht
-- filter nu de essentiele velden uit de mailbody
-- vervang cr door lf
@@ -357,10 +366,249 @@ AS
VALUES ('GBS_MELDING',
v_volgnr + 1,
SUBSTR (pfrom || CHR (10) || psubject || CHR (10) || v_omschrijving, 1, 2000));
END IF;
INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
VALUES (psessionid, 'maillog', 'Geregistreerd onder melding xxx');
WHILE LENGTH (v_body) <> 0
LOOP
fac.imp_getfield (v_body, CHR (10), v_newline);
fac.imp_getfield (v_newline, ':', v_tag);
v_value := v_newline;
v_tag := UPPER (TRIM (v_tag));
v_errormsg := '(0x1452)';
CASE v_tag
WHEN 'ERRORNAME'
THEN
v_onderwerp := SUBSTR (v_value, 1, 60);
v_meldingstekst := TRIM (v_value);
v_errormsg := '(0x1453)';
WHEN 'STATE'
THEN
v_state := TRIM (v_value);
WHEN 'ALARMDATE'
THEN
v_datum := TRIM (v_value);
WHEN 'ALARMTIME'
THEN
v_tijdstip := TRIM (v_value);
WHEN 'CABINETNAME'
THEN
v_cabinet := TRIM (v_value);
ELSE
NULL;
END CASE;
END LOOP;
BEGIN
SELECT fac_usrdata_prijs, fac_usrdata_omschr
INTO v_stdmelding_key, v_ruimte_nr
FROM fac_usrdata
WHERE fac_usrdata_verwijder IS NULL
AND fac_usrdata_upper = TRIM (UPPER (v_meldingstekst))
AND fac_usrtab_key = 81; -- Hier staat de verwijzing naar de Stdmeldingen
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_error := 1;
v_errormsg :=
'Standaard melding kan niet gevonden worden: '
|| v_meldingstekst;
END;
BEGIN
SELECT alg_ruimte_key,
alg_locatie_key,
alg_srtruimte_key
INTO v_ruimte_key, v_locatie_key, v_srtruimte_key
FROM alg_v_ruimte_gegevens
WHERE UPPER (alg_ruimte_nr) = v_ruimte_nr;
EXCEPTION
WHEN OTHERS
THEN
v_error := 1;
v_errormsg :=
'Ruimte kan niet gevonden worden: ' || v_ruimte_nr;
END;
v_date :=
fac.safe_to_date (v_datum || ' ' || v_tijdstip, 'yyyy-mm-dd hh24:mi.ss');
IF v_date IS NULL
THEN
v_date := SYSDATE;
END IF;
-- nu gaan we de hersteltijd bepalen
v_errormsg := '(0x147) hersteltijd bepalen uit MELDINGSTEKST ' || v_meldingstekst;
BEGIN
-- vind de uitvoertijd bij de ruimte specifieke sla
SELECT mld_stdmsrtruimte_t_uitvtijd
INTO v_uitvoertijd
FROM mld_stdmsrtruimte
WHERE alg_srtruimte_key = v_srtruimte_key
AND mld_stdmelding_key = v_stdmelding_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
-- vind de uitvoertijd bij de stdmelding
SELECT mld_stdmelding_t_uitvoertijd
INTO v_uitvoertijd
FROM mld_stdmelding
WHERE mld_stdmelding_key = v_stdmelding_key;
END;
-- suggested extensions:
-- check for MLDUSE-write autorisations
-- parse the subject to find an appropriate stdmelding, if uniquely possible
v_errormsg := '(0x148)';
SELECT MIN (m.mld_melding_key), COUNT (m.mld_melding_key)
INTO v_melding_key, v_count
FROM mld_melding m, mld_kenmerkmelding km
WHERE mld_stdmelding_key = v_stdmelding_key
AND mld_alg_onroerendgoed_keys = v_ruimte_key
AND mld_melding_status IN (0, 2, 3, 4, 7, 99) -- alles behalve 1=Afgewezen, 5= afgemeld, 6= historie
AND km.mld_melding_key = m.mld_melding_key
AND km.mld_kenmerk_key = 201
AND km.mld_kenmerkmelding_waarde =
v_cabinet
|| ';'
|| v_meldingstekst;
IF UPPER (v_state) = 'ALARM ON'
THEN
IF v_count = 0
THEN
v_errormsg := 'Melding kan niet aangemaakt worden (0x1481)';
INSERT INTO mld_melding (mld_melding_module,
mld_meldbron_key,
mld_melding_datum,
mld_melding_onderwerp,
mld_melding_omschrijving,
mld_melding_status,
mld_melding_t_uitvoertijd,
mld_stdmelding_key,
prs_perslid_key,
prs_perslid_key_voor,
prs_kostenplaats_key,
mld_melding_spoed,
mld_alg_locatie_key,
mld_alg_onroerendgoed_keys)
VALUES ('MLD',
4, -- email
v_date,
v_onderwerp,
v_omschrijving,
NULL,
v_uitvoertijd,
v_stdmelding_key,
v_sender,
v_sender,
NULL,
3,
v_locatie_key,
v_ruimte_key)
RETURNING mld_melding_key
INTO v_melding_key;
v_errormsg := '(0x165)';
mld.setmeldingstatus (v_melding_key, 2, v_sender);
INSERT INTO mld_kenmerkmelding (mld_melding_key,
mld_kenmerk_key,
mld_kenmerkmelding_waarde)
VALUES (v_melding_key,
201,
v_cabinet
|| ';'
|| v_meldingstekst);
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid,
'maillog',
'Geregistreerd onder melding ' || v_melding_key);
ELSE
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid,
'maillog',
'Melding bestaat al ' || v_melding_key);
v_error := 1;
v_errormsg := 'Melding bestaat al ' || v_melding_key;
END IF;
ELSE
IF v_count = 1
THEN
v_errormsg := '(0x1482)';
SELECT mld_melding_status
INTO v_melding_status
FROM mld_melding
WHERE mld_melding_key = v_melding_key;
-- Als status is nieuw of te accepteren dan eerst op geaccepteerd zetten.
IF v_melding_status = 2 OR v_melding_status = 3
THEN
-- melding op geaccepteerd zetten.
mld.setmeldingstatus (v_melding_key, 4, v_sender);
END IF;
-- nu de status op afgemeld zetten.
mld.setmeldingstatus (v_melding_key, 5, v_sender);
fac.backtrackaction ('MLDAFM',
v_melding_key,
v_sender,
SYSDATE); -- Aangepast in #86889. Dit was eerst v_date, maar daarmee werd in de tracking eerst afgemeld en pas dan MLDNEW/MLDACP
-- Vul het kenmerk Bedrijf (malus) met de waarde van Homij uit de eigen tabel
mld.upsertmeldingkenmerk (61, v_melding_key, 182);
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid,
'maillog',
'Melding '
|| v_melding_key
|| ' is afgemeld, aantal gevonden '
|| v_count
|| ' Details: '
|| v_cabinet
|| ';'
|| v_meldingstekst);
ELSE
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid,
'maillog',
'Melding niet uniek gevonden, aantal gevonden '
|| v_count
|| ' Details: '
|| v_cabinet
|| ';'
|| v_meldingstekst);
v_error := 1;
v_errormsg :=
'Melding niet uniek gevonden, aantal gevonden '
|| v_count
|| ' Details: '
|| v_cabinet
|| ';'
|| v_meldingstekst;
END IF;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
@@ -778,7 +1026,7 @@ AS
-- in periode 2024Q4 vallen
CREATE OR REPLACE VIEW hgcu_v_monitoring_history
AS
SELECT REPLACE(TO_CHAR(TRUNC(DECODE(TRUNC(export_datum), TO_DATE('20250611','yyyymmdd'), TO_DATE('20250101','yyyymmdd'), export_datum), 'Q')-1, 'yyyy-q'), '-', 'Q') periode,
SELECT periode,
export_datum,
melding_key,
afw,
@@ -968,7 +1216,9 @@ BEGIN
prs_bedrijf_naam,
bedrijf_malus,
klant_melding,
export_datum)
export_datum,
prefix,
periode)
VALUES (rec.mld_melding_key,
rec.afw,
rec.indult,
@@ -1006,20 +1256,47 @@ BEGIN
rec.bedrijf_naam,
rec.bedrijf_malus,
rec.klant_melding,
v_exportdate);
v_exportdate,
rec.prefix,
REPLACE(TO_CHAR(TRUNC (SYSDATE, 'Q') -1, 'YYYY-Q'), '-', 'Q'));
END;
END;
END LOOP;
INSERT INTO hgcu_monitoring (melding_key, indult, export_datum)
SELECT mld_melding_key, DECODE(mld_melding_indult, 1, 'Ja', 'Nee'), v_exportdate
FROM mld_melding m
WHERE m.mld_melding_status = 6 -- Historie
AND fac.gettrackingdate ('MLDAFM', m.mld_melding_key) < TRUNC (SYSDATE, 'Q')
-- AND fac.gettrackingdate ('MLDAFM', m.mld_melding_key) < TO_DATE('20250401', 'YYYYMMDD') *******
AND m.mld_melding_key NOT IN (SELECT nm.melding_key
FROM hgcu_monitoring nm
WHERE nm.melding_key IS NOT NULL);
INSERT INTO hgcu_monitoring (melding_key, indult, export_datum, prefix, periode, klant_melding, tht, wht, bedrijf_malus )
SELECT mld_melding_key,
DECODE(mld_melding_indult, 1, 'Ja', 'Nee'),
v_exportdate,
sd.ins_srtdiscipline_prefix prefix,
REPLACE(TO_CHAR(TRUNC (SYSDATE, 'Q') -1, 'YYYY-Q'), '-', 'Q') periode,
hgcu.klant_melding (m.mld_melding_key),
m.mld_melding_t_uitvoertijd.tijdsduur tht,
(mld.getactualuitvoer ( -- verschil tussen t_van en gereed/SYSDATE is de maximale - actuele - doorlooptijd!
m.mld_melding_datum,
fac.gettrackingdate ('MLDAFM', m.mld_melding_key),
m.mld_stdmelding_key,
m.mld_melding_spoed,
m.mld_alg_onroerendgoed_keys,
NULL)).tijdsduur wht,
(SELECT ud.fac_usrdata_omschr bedrijf_malus
FROM fac_usrdata ud, mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = 1 -- bedrijf_malus
AND FAC.safe_to_number (km.mld_kenmerkmelding_waarde) = ud.fac_usrdata_key
AND km.mld_melding_key = m.mld_melding_key) bedrijf_malus
FROM mld_melding m,
mld_stdmelding std,
ins_tab_discipline d,
ins_srtdiscipline sd
WHERE m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
AND m.mld_melding_status = 6 -- Historie
AND fac.gettrackingdate ('MLDAFM', m.mld_melding_key) < TRUNC (SYSDATE, 'Q')
-- AND fac.gettrackingdate ('MLDAFM', m.mld_melding_key) < TO_DATE('20250401', 'YYYYMMDD') *******
AND m.mld_melding_key NOT IN (SELECT nm.melding_key
FROM hgcu_monitoring nm
WHERE nm.melding_key IS NOT NULL);
COMMIT;
@@ -1319,6 +1596,38 @@ AS
NULL opdrachtgever
FROM hgcu_monitoring;
CREATE OR REPLACE VIEW hgcu_v_rap_gbs_storing_def
AS
SELECT fac_usrdata_code gbs_melding,
sd.ins_srtdiscipline_omschrijving vakgroeptype,
d.ins_discipline_omschrijving vakgroep,
mld_stdmelding_omschrijving melding,
alg_ruimte_nr ruimte
FROM fac_usrdata ud,
mld_stdmelding std,
mld_discipline d,
ins_srtdiscipline sd,
alg_v_aanwezigruimte r
WHERE ud.fac_usrdata_verwijder IS NULL
AND ud.fac_usrtab_key = 81
AND TRUNC (ud.fac_usrdata_prijs) = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
AND ud.fac_usrdata_omschr = r.alg_ruimte_nr(+);
-- Rapport om de sychronisatie status van de koppeling op de portal te tonen.
CREATE OR REPLACE VIEW hgcu_v_rap_gbs_status_info
(
item_key,
item,
datum
)
AS
SELECT fac_usrdata_key, fac_usrdata_code, fac_usrdata_vervaldatum
FROM fac_usrdata
WHERE fac_usrtab_key = 61;
CREATE OR REPLACE PROCEDURE hgcu_daily
AUTHID CURRENT_USER -- ivm create table rechten voor tabelizer
AS