PCHD#33780 -- Inrichting het Gelders Huis
svn path=/Customer/trunk/; revision=33989
This commit is contained in:
381
PCHA/pcha.sql
381
PCHA/pcha.sql
@@ -1211,7 +1211,8 @@ BEGIN
|
||||
SELECT fac_usrdata_key
|
||||
INTO v_usrdata_key
|
||||
FROM fac_usrdata
|
||||
WHERE fac_usrdata_code = SUBSTR (rec.fac_usrdata_omschrijving, 1, 40);
|
||||
WHERE fac_usrdata_code = SUBSTR (rec.fac_usrdata_omschrijving, 1, 40)
|
||||
AND fac_usrtab_key = v_usrtab_key;
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND
|
||||
THEN
|
||||
@@ -1322,6 +1323,384 @@ EXCEPTION
|
||||
END;
|
||||
/
|
||||
|
||||
-- View om de uitnutting van SVD grafisch weer te geven op de portal
|
||||
CREATE OR REPLACE FORCE VIEW pcha_v_rap_svd_budget (svd_type, omschrijving, bedrag)
|
||||
AS
|
||||
SELECT svd_type, 'Budget' omschrijving, u.fac_usrdata_prijs - SUM (index_totaal) bedrag
|
||||
FROM pchx_v_rap_svd s, fac_usrdata u
|
||||
WHERE s.svd_type = u.fac_usrdata_code AND TRUNC (datum, 'Y') = TRUNC (SYSDATE, 'Y')
|
||||
GROUP BY u.fac_usrdata_prijs, svd_type
|
||||
UNION ALL
|
||||
SELECT svd_type, 'Uitnutting', SUM (index_totaal) bedrag
|
||||
FROM pchx_v_rap_svd s, fac_usrdata u
|
||||
WHERE s.svd_type = u.fac_usrdata_code AND TRUNC (datum, 'Y') = TRUNC (SYSDATE, 'Y')
|
||||
GROUP BY u.fac_usrdata_prijs, svd_type;
|
||||
|
||||
|
||||
CREATE OR REPLACE PROCEDURE pcha_processemail (pfrom IN VARCHAR2,
|
||||
pto IN VARCHAR2,
|
||||
psubject IN VARCHAR2,
|
||||
pbody IN VARCHAR2,
|
||||
psessionid IN VARCHAR2,
|
||||
puserkey IN NUMBER DEFAULT NULL)
|
||||
AS
|
||||
v_sender prs_perslid.prs_perslid_key%TYPE;
|
||||
v_melding_key mld_melding.mld_melding_key%TYPE;
|
||||
v_stdmelding_key mld_stdmelding.mld_stdmelding_key%TYPE;
|
||||
v_stdmelding_omschrijving mld_stdmelding.mld_stdmelding_omschrijving%TYPE;
|
||||
v_discipline_omschrijving ins_tab_discipline.ins_discipline_omschrijving%TYPE;
|
||||
errormsg fac_result.fac_result_waarde%TYPE;
|
||||
v_uitvoertijd mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE;
|
||||
v_srtruimte_key alg_srtruimte.alg_srtruimte_key%TYPE;
|
||||
v_onderwerp mld_melding.mld_melding_onderwerp%TYPE;
|
||||
v_omschrijving mld_melding.mld_melding_omschrijving%TYPE;
|
||||
v_melding_status mld_melding.mld_melding_status%TYPE;
|
||||
v_ruimte alg_ruimte.alg_ruimte_nr%TYPE;
|
||||
v_ruimte_key alg_ruimte.alg_ruimte_key%TYPE;
|
||||
v_locatie_key alg_locatie.alg_locatie_key%TYPE;
|
||||
v_datum VARCHAR2 (100);
|
||||
v_tijdstip VARCHAR2 (100);
|
||||
v_status VARCHAR2 (100);
|
||||
v_installatiecode VARCHAR2 (100);
|
||||
v_date DATE;
|
||||
v_sync_bericht NUMBER;
|
||||
v_count NUMBER;
|
||||
v_error NUMBER;
|
||||
v_errormsg VARCHAR2 (100);
|
||||
v_inuit VARCHAR2 (100);
|
||||
v_newline VARCHAR2 (4000);
|
||||
v_tag VARCHAR2 (4000);
|
||||
v_value VARCHAR2 (4000);
|
||||
v_from VARCHAR2 (4000);
|
||||
v_body VARCHAR2 (4000);
|
||||
v_pos NUMBER;
|
||||
BEGIN
|
||||
errormsg := '(0x143)';
|
||||
v_error := 0;
|
||||
v_errormsg := '';
|
||||
v_sync_bericht := 0;
|
||||
|
||||
-- Verwijder de Bounce Address Tag Validation
|
||||
IF pfrom LIKE 'prvs=%'
|
||||
THEN
|
||||
v_from := SUBSTR (pfrom, INSTR (pfrom, '=', -1) + 1);
|
||||
ELSE
|
||||
v_from := pfrom;
|
||||
END IF;
|
||||
|
||||
v_body := pbody;
|
||||
|
||||
-- DBMS_OUTPUT.PUT_LINE('v_from: '||v_from);
|
||||
|
||||
-- afzender van een gbs bericht is altijd 104 (Key van gebruiker Gebouwbeheersysteem GBS)
|
||||
v_sender := 104;
|
||||
|
||||
CASE
|
||||
WHEN UPPER (pto) LIKE 'GBS@%'
|
||||
THEN
|
||||
errormsg := '(0x145)';
|
||||
|
||||
|
||||
-- filter nu de essentiele velden uit de mailbody
|
||||
-- vervang cr door lf
|
||||
-- MOETEN WE EEN FALLBACK STDMELDING KEY DEFINIEREN??????????????????????
|
||||
v_stdmelding_key := fac.safe_to_number (fac.getsetting ('defaultstdmelding'));
|
||||
|
||||
v_body := REPLACE (v_body, CHR (13), CHR (10));
|
||||
-- verwijder dubbele lf's
|
||||
v_body := REPLACE (v_body, CHR (10) || CHR (10), CHR (10));
|
||||
v_omschrijving := v_body;
|
||||
errormsg := '(0x1451)';
|
||||
|
||||
WHILE LENGTH (v_body) <> 0
|
||||
LOOP
|
||||
fac.imp_getfield (v_body, CHR (10), v_newline);
|
||||
fac.imp_getfield (v_newline, ':', v_tag);
|
||||
--fac.imp_getfield (v_newline, ':', v_value);
|
||||
v_value := v_newline;
|
||||
v_tag := UPPER (TRIM (v_tag));
|
||||
|
||||
-- fac.writelog ('PROCESSEMAIL',
|
||||
-- 'I',
|
||||
-- 'tag: ' || v_tag || ' value: ' || v_value,
|
||||
-- NULL);
|
||||
errormsg := '(0x1452)';
|
||||
|
||||
CASE v_tag
|
||||
WHEN 'MELDINGSTEKST'
|
||||
THEN
|
||||
v_onderwerp := SUBSTR (v_value, 1, 60);
|
||||
errormsg := '(0x1453)';
|
||||
|
||||
CASE TRIM (UPPER (v_value))
|
||||
WHEN 'CO2 TE HOOG'
|
||||
THEN
|
||||
v_stdmelding_omschrijving := 'LUCHTKWALITEIT';
|
||||
v_discipline_omschrijving := 'COMFORT';
|
||||
WHEN 'REL RUIMTEVOCHT TE HOOG'
|
||||
THEN
|
||||
v_stdmelding_omschrijving := 'LUCHTKWALITEIT';
|
||||
v_discipline_omschrijving := 'COMFORT';
|
||||
WHEN 'REL RUIMTEVOCHT TE LAAG'
|
||||
THEN
|
||||
v_stdmelding_omschrijving := 'LUCHTKWALITEIT';
|
||||
v_discipline_omschrijving := 'COMFORT';
|
||||
WHEN 'TEMPERATUUR TE LAAG'
|
||||
THEN
|
||||
v_stdmelding_omschrijving := 'THERMISCH COMFORT';
|
||||
v_discipline_omschrijving := 'COMFORT';
|
||||
WHEN 'TEMPERATUUR TE HOOG'
|
||||
THEN
|
||||
v_stdmelding_omschrijving := 'THERMISCH COMFORT';
|
||||
v_discipline_omschrijving := 'COMFORT';
|
||||
WHEN 'KOUDESTRAAT TE WARM'
|
||||
THEN
|
||||
v_stdmelding_omschrijving := 'THERMISCH COMFORT';
|
||||
v_discipline_omschrijving := 'COMFORT';
|
||||
WHEN 'CRAC UNIT 1'
|
||||
THEN
|
||||
v_stdmelding_omschrijving := 'ELEKTROTECHNIEK';
|
||||
v_discipline_omschrijving := 'FUNCTIONALITEIT';
|
||||
WHEN 'CRAC UNIT 2'
|
||||
THEN
|
||||
v_stdmelding_omschrijving := 'ELEKTROTECHNIEK';
|
||||
v_discipline_omschrijving := 'FUNCTIONALITEIT';
|
||||
WHEN 'WATEROVERLAST'
|
||||
THEN
|
||||
v_stdmelding_omschrijving := 'BOUWKUNDIG';
|
||||
v_discipline_omschrijving := 'FUNCTIONALITEIT';
|
||||
WHEN 'COMMUNICATIE IN ORDE'
|
||||
THEN
|
||||
v_sync_bericht := 1;
|
||||
v_error := 0;
|
||||
EXIT;
|
||||
ELSE
|
||||
v_stdmelding_omschrijving := 'Onbekend';
|
||||
END CASE;
|
||||
|
||||
errormsg := '(0x1454)';
|
||||
|
||||
BEGIN
|
||||
SELECT mld_stdmelding_key
|
||||
INTO v_stdmelding_key
|
||||
FROM mld_stdmelding std, mld_discipline d, ins_srtdiscipline sd
|
||||
WHERE std.mld_ins_discipline_key = d.ins_discipline_key
|
||||
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
|
||||
AND UPPER (std.mld_stdmelding_omschrijving) = v_stdmelding_omschrijving
|
||||
AND UPPER (d.ins_discipline_omschrijving) = v_discipline_omschrijving
|
||||
AND UPPER (sd.ins_srtdiscipline_omschrijving) = 'STORING';
|
||||
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND
|
||||
THEN
|
||||
v_error := 1;
|
||||
v_errormsg :=
|
||||
'Standaard melding kan niet gevonden worden: '
|
||||
|| v_stdmelding_omschrijving;
|
||||
END;
|
||||
WHEN 'INUIT'
|
||||
THEN
|
||||
v_inuit := UPPER (TRIM (v_value));
|
||||
WHEN 'INSTALLATIEDEEL'
|
||||
THEN
|
||||
v_ruimte := UPPER(SUBSTR(TRIM (v_value), 1, INSTR(TRIM(v_value), ' ')-1));
|
||||
errormsg := '(0x1455)';
|
||||
|
||||
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;
|
||||
EXCEPTION
|
||||
WHEN OTHERS
|
||||
THEN
|
||||
v_error := 1;
|
||||
v_errormsg := 'Ruimte kan niet gevonden worden: ' || v_ruimte;
|
||||
END;
|
||||
WHEN 'INSTALLATIECODE'
|
||||
THEN
|
||||
v_installatiecode := TRIM (v_value);
|
||||
WHEN 'STATUS'
|
||||
THEN
|
||||
v_status := TRIM (v_value);
|
||||
WHEN 'ONDERSTATION DATUM'
|
||||
THEN
|
||||
v_datum := TRIM (v_value);
|
||||
WHEN 'ONDERSTATION TIJD'
|
||||
THEN
|
||||
v_tijdstip := TRIM(v_value);
|
||||
ELSE
|
||||
NULL;
|
||||
END CASE;
|
||||
END LOOP;
|
||||
|
||||
IF v_error = 0 AND v_sync_bericht = 0
|
||||
THEN
|
||||
-- bepalen van de timestamp uit het emailbericht
|
||||
v_date := fac.safe_to_date(v_datum || ' ' || v_tijdstip, 'dd-mm-yyyy hh24:mi.ss');
|
||||
|
||||
IF v_date IS NULL
|
||||
THEN
|
||||
v_date := SYSDATE;
|
||||
END IF;
|
||||
-- nu gaan we de hersteltijd bepalen
|
||||
errormsg := '(0x147)';
|
||||
|
||||
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
|
||||
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 = 181
|
||||
AND km.mld_kenmerkmelding_waarde = v_installatiecode || ';' || v_status || ';' || v_onderwerp;
|
||||
|
||||
IF UPPER (v_inuit) = 'IN'
|
||||
THEN
|
||||
IF v_count = 0
|
||||
THEN
|
||||
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;
|
||||
|
||||
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, 181, v_installatiecode || ';' || v_status || ';' || v_onderwerp);
|
||||
|
||||
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
|
||||
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, v_date);
|
||||
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);
|
||||
|
||||
v_error := 1;
|
||||
v_errormsg := 'Melding niet uniek gevonden, aantal gevonden ' || v_count;
|
||||
END IF;
|
||||
END IF;
|
||||
END IF;
|
||||
END CASE;
|
||||
|
||||
IF v_error = 1
|
||||
THEN
|
||||
-- foutafhandeling
|
||||
fac.writelog ('PROCESSEMAIL',
|
||||
'E',
|
||||
v_errormsg,
|
||||
SUBSTR (pbody, 1, 1000));
|
||||
ELSE
|
||||
IF v_sync_bericht = 1
|
||||
THEN
|
||||
UPDATE fac_usrdata
|
||||
SET fac_usrdata_vervaldatum = SYSDATE
|
||||
WHERE fac_usrdata_key = 41;
|
||||
ELSE
|
||||
UPDATE fac_usrdata
|
||||
SET fac_usrdata_vervaldatum = SYSDATE
|
||||
WHERE fac_usrdata_key = 42;
|
||||
END IF;
|
||||
END IF;
|
||||
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)
|
||||
VALUES (psessionid,
|
||||
'maillog',
|
||||
'Database fout - Neem contact op met uw systeembeheerder ' || errormsg);
|
||||
|
||||
fac.writelog ('PROCESSEMAIL',
|
||||
'E',
|
||||
'Mail kon niet ingelezen worden afzender:' || pfrom || '[' || errormsg || ']',
|
||||
'OTHERS (error ' || SQLCODE || '/' || SUBSTR (SQLERRM, 1, 100) || ')');
|
||||
END;
|
||||
/
|
||||
|
||||
|
||||
|
||||
------ payload end ------
|
||||
|
||||
|
||||
Reference in New Issue
Block a user