Files
Customer/PCHA/pcha.sql
Jordy Polman 1e8f6ac7d4 PCHD#41213 View pcha_v_lijst_nieuwe_mld toegevoegd
svn path=/Customer/trunk/; revision=34767
2017-07-28 13:28:27 +00:00

1780 lines
69 KiB
SQL

--
-- $Id$
--
-- Script containing customer specific configuration sql statements for PCHA: PCH Het Gelders Huis Arnhem
DEFINE thisfile = 'PCHA.SQL'
DEFINE dbuser = '^PCHA'
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 ------
-- Importfuncties onroerendgoed vanaf verdieping.
CREATE OR REPLACE PROCEDURE pcha_import_onrgoed2 (p_import_key IN NUMBER)
AS
BEGIN
UPDATE fac_imp_file
SET fac_imp_file_line = REPLACE (fac_imp_file_line, CHR (160), ' ')
WHERE fac_import_key = p_import_key;
fac_import_onrgoed2 (p_import_key);
UPDATE fac_imp_onrgoed2 SET alg_srtruimte_omschrijving = TRIM(alg_srtruimte_omschrijving);
END;
/
CREATE OR REPLACE PROCEDURE pcha_update_onrgoed2 (p_import_key IN NUMBER)
AS
BEGIN
fac_update_onrgoed2 (p_import_key);
-- plaats de ruimte type codering in het code veld.
UPDATE alg_srtruimte
SET alg_srtruimte_code = SUBSTR (alg_srtruimte_omschrijving, 1, 7)
WHERE alg_srtruimte_code IS NULL;
-- pas de openingstijden van de ruimten aan waar een 24/7 regime geldt. Verder geldt voor
-- deze ruimten ook dat de sla in het weekend door telt.
UPDATE alg_ruimte
SET
(alg_ruimte_beginuur,
alg_ruimte_einduur,
alg_ruimte_werkdagen
) =
(SELECT DECODE (SUBSTR (alg_onrgoedkenmerk_waarde, 1, 2), '24', 0, NULL),
DECODE (SUBSTR (alg_onrgoedkenmerk_waarde, 1, 2), '24', 24, NULL),
DECODE (SUBSTR (alg_onrgoedkenmerk_waarde, 1, 2), '24', 0, NULL)
FROM alg_onrgoedkenmerk
WHERE alg_kenmerk_key = 1000 AND alg_onrgoed_key = alg_ruimte_key);
END;
/
-- Importfunctie voor THT waardes bij meldingen
CREATE OR REPLACE PROCEDURE pcha_import_storing_regime (
p_import_key IN NUMBER)
AS
CURSOR c_cursor
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
v_newline VARCHAR2 (1000);
v_aanduiding VARCHAR2 (1000); -- Import line
v_fielddelimitor VARCHAR2 (1); -- Field seperator
v_errormsg VARCHAR (200);
v_errorhint VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_found BOOLEAN;
v_error NUMBER(1);
-- De importvelden
v_r_codering VARCHAR2(100);
v_omschrijving VARCHAR2(100);
v_ruimten VARCHAR2(100);
v_storing_os VARCHAR2(100);
v_stdmelding VARCHAR2(100);
v_vakgroep VARCHAR2(100);
v_vakgroeptype VARCHAR2(100);
v_tht_os VARCHAR2(100);
v_tht VARCHAR2(100);
v_tht_eenheid VARCHAR2(100);
v_bk VARCHAR2(100);
v_vk VARCHAR2(100);
v_srtruimte_key NUMBER;
v_stdmelding_key NUMBER;
v_discipline_key NUMBER;
v_srtdiscipline_key NUMBER;
BEGIN
-- Verwijder nbsp karakters.
UPDATE fac_imp_file
SET fac_imp_file_line = REPLACE (fac_imp_file_line, CHR (160), ' ')
WHERE fac_import_key = p_import_key;
-- Init
header_found := FALSE;
v_fielddelimitor := ';';
-- Clear my previous imported rows
DELETE FROM pcha_imp_storing_regime;
FOR rec1 IN c_cursor
LOOP
BEGIN
v_newline := REPLACE(rec1.fac_imp_file_line, CHR(160), ' ');
v_aanduiding := SUBSTR (v_newline, 1, 200);
v_error := 0;
IF SUBSTR (v_newline, 1, 3) = '?'
THEN
-- EF BB BF aangetroffen
fac.imp_writelog (p_import_key,
'W',
'Byte Order Mark aangetroffen',
'Bestand heeft onbehandeld UTF-8 formaat.');
v_newline := SUBSTR (v_newline, 4);
END IF;
v_errormsg := 'Inlezen velden';
fac.imp_getfield (v_newline, v_fielddelimitor, v_r_codering);
fac.imp_getfield (v_newline, v_fielddelimitor, v_omschrijving);
fac.imp_getfield (v_newline, v_fielddelimitor, v_ruimten);
fac.imp_getfield (v_newline, v_fielddelimitor, v_storing_os);
fac.imp_getfield (v_newline, v_fielddelimitor, v_stdmelding);
fac.imp_getfield (v_newline, v_fielddelimitor, v_vakgroep);
fac.imp_getfield (v_newline, v_fielddelimitor, v_vakgroeptype);
fac.imp_getfield (v_newline, v_fielddelimitor, v_tht_os);
fac.imp_getfield (v_newline, v_fielddelimitor, v_tht);
fac.imp_getfield (v_newline, v_fielddelimitor, v_tht_eenheid);
fac.imp_getfield (v_newline, v_fielddelimitor, v_bk);
fac.imp_getfield (v_newline, v_fielddelimitor, v_vk);
-- Skip until a valid header is found
v_errormsg := 'Controleer de header';
IF UPPER (rec1.fac_imp_file_line) LIKE
'R CODERING;OMSCHRIJVING;RUIMTEN;STORING OS;STANDAARD MELDING;VAKGROEP;VAKGROEPTYPE;THT OS;THT;THT EENHEID;BK;VK%'
THEN
-- Sla de kopregel over.
header_found := TRUE;
ELSIF (header_found AND v_vakgroep IS NOT NULL)
THEN
-- Kennen we de ruimtecodering
v_errormsg := 'Controleer ruimtesoort';
v_r_codering := REPLACE(v_r_codering, CHR(160));
IF v_r_codering IS NOT NULL
THEN
v_r_codering := TRIM(v_r_codering);
BEGIN
SELECT alg_srtruimte_key
INTO v_srtruimte_key
FROM alg_srtruimte sr
WHERE alg_srtruimte_verwijder IS NULL
AND UPPER (sr.alg_srtruimte_code) = UPPER (v_r_codering);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (
p_import_key,
'E',
'Ruimtecodering niet gevonden: ' || v_r_codering,
v_aanduiding);
v_srtruimte_key := NULL;
v_error := 1;
END;
ELSE
v_srtruimte_key := NULL;
END IF;
v_errormsg := 'Controleer vakgroeptype';
BEGIN
v_vakgroeptype := TRIM(v_vakgroeptype);
SELECT ins_srtdiscipline_key
INTO v_srtdiscipline_key
FROM ins_srtdiscipline sd
WHERE sd.ins_srtdiscipline_module = 'MLD'
AND sd.ins_srtdiscipline_verwijder IS NULL
AND UPPER (sd.ins_srtdiscipline_omschrijving) =
UPPER (v_vakgroeptype);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (
p_import_key,
'E',
'Vakgroeptype niet gevonden: ' || v_vakgroeptype,
v_aanduiding);
v_srtdiscipline_key := NULL;
v_error := 1;
END;
v_errormsg := 'Controleer vakgroep';
BEGIN
v_vakgroep := TRIM(v_vakgroep);
SELECT ins_discipline_key
INTO v_discipline_key
FROM ins_tab_discipline d
WHERE d.ins_discipline_module = 'MLD'
AND d.ins_discipline_verwijder IS NULL
AND d.ins_srtdiscipline_key = v_srtdiscipline_key
AND UPPER (d.ins_discipline_omschrijving) =
UPPER (v_vakgroep);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (
p_import_key,
'E',
'Vakgroep niet gevonden: ' || v_vakgroep,
v_aanduiding);
v_discipline_key := NULL;
v_error := 1;
END;
v_errormsg := 'Controleer stdmelding';
IF v_stdmelding IS NOT NULL
THEN
v_stdmelding := SUBSTR(TRIM(v_stdmelding),1,60);
BEGIN
SELECT mld_stdmelding_key
INTO v_stdmelding_key
FROM mld_stdmelding std
WHERE std.mld_stdmelding_verwijder IS NULL
AND std.mld_ins_discipline_key = v_discipline_key
AND UPPER (std.mld_stdmelding_omschrijving) =
UPPER (v_stdmelding);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (
p_import_key,
'E',
'Standaard melding niet gevonden: ' || v_stdmelding,
v_aanduiding);
v_stdmelding_key := NULL;
v_error := 1;
END;
ELSE
v_stdmelding_key := NULL;
END IF;
v_errormsg := 'Controleer THT';
IF fac.safe_to_number (v_tht) IS NULL AND v_tht IS NOT NULL
THEN
fac.imp_writelog (p_import_key,
'E',
'THT niet geldig: ' || v_tht,
v_aanduiding);
v_error := 1;
END IF;
v_errormsg := 'Controleer THT eenheid';
v_tht_eenheid := TRIM(UPPER(v_tht_eenheid));
IF v_tht_eenheid NOT IN ('UUR', 'MIN', 'DAG') AND v_tht_eenheid IS NOT NULL
THEN
fac.imp_writelog (
p_import_key,
'E',
'THT eehheid niet geldig: ' || v_tht_eenheid,
v_aanduiding);
v_error := 1;
END IF;
v_errormsg := 'Controleer basiskorting';
IF fac.safe_to_number (v_bk) IS NULL AND v_bk IS NOT NULL
THEN
fac.imp_writelog (p_import_key,
'E',
'Basiskorting niet geldig: ' || v_bk,
v_aanduiding);
v_error := 1;
END IF;
v_errormsg := 'Controleer variabele korting';
IF fac.safe_to_number (v_vk) IS NULL AND v_vk IS NOT NULL
THEN
fac.imp_writelog (p_import_key,
'E',
'variabele korting niet geldig: ' || v_vk,
v_aanduiding);
v_error := 1;
END IF;
IF v_error = 0
THEN
INSERT INTO pcha_imp_storing_regime (r_codering,
omschrijving,
ruimten,
storing_os,
stdmelding,
vakgroep,
vakgroeptype,
tht_os,
tht,
tht_eenheid,
bk,
vk,
alg_srtruimte_key,
mld_stdmelding_key,
mld_discipline_key,
ins_srtdiscipline_key)
VALUES (v_r_codering,
v_omschrijving,
v_ruimten,
v_storing_os,
v_stdmelding,
v_vakgroep,
v_vakgroeptype,
v_tht_os,
v_tht,
v_tht_eenheid,
v_bk,
v_vk,
v_srtruimte_key,
v_stdmelding_key,
v_discipline_key,
v_srtdiscipline_key);
END IF;
COMMIT;
END IF;
END;
END loop;
IF NOT header_found
THEN
fac.imp_writelog (
p_import_key,
'E',
'Geen geldige header aangetroffen',
'Bestand is geen geldig melding regime importbestand.');
END IF;
EXCEPTION
WHEN OTHERS
THEN
v_aanduiding := v_errormsg || ' - ' || v_aanduiding;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'E', SUBSTR (v_errormsg, 1, 1000), v_aanduiding);
-- maak de importtabel leeg om te voorkomen dat er halve bestanden ingelezen worden.
DELETE FROM pcha_imp_storing_regime;
END;
/
CREATE OR REPLACE PROCEDURE pcha_update_storing_regime (
p_import_key IN NUMBER)
AS
CURSOR c
IS
SELECT sr.r_codering,
stdmelding,
vakgroep,
vakgroeptype,
fac.safe_to_number (bk) bk,
fac.safe_to_number (vk) vk,
alg_srtruimte_key,
mld_stdmelding_key,
mld_discipline_key,
ins_srtdiscipline_key,
DECODE (tht_eenheid, 'UUR', 'U', 'MIN', 'U', 'DAG', 'D') eenheid,
DECODE (tht_eenheid,
'UUR', tht,
'MIN', ROUND (tht / 60, 5),
'DAG', tht)
tijdsduur
FROM pcha_imp_storing_regime sr;
CURSOR c_del
IS
SELECT ssr.mld_stdmsrtruimte_key,
d.ins_discipline_omschrijving,
std.mld_stdmelding_omschrijving,
sr.alg_srtruimte_code
FROM mld_stdmsrtruimte ssr,
mld_stdmelding std,
ins_tab_discipline d,
ins_srtdiscipline sd,
alg_srtruimte sr
WHERE NOT EXISTS
(SELECT mld_stdmelding_key
FROM pcha_imp_storing_regime sm
WHERE sm.mld_stdmelding_key = ssr.mld_stdmelding_key
AND sm.alg_srtruimte_key = ssr.alg_srtruimte_key)
AND NOT EXISTS
(SELECT std.mld_stdmelding_key
FROM pcha_imp_storing_regime sm, mld_stdmelding std
WHERE sm.mld_discipline_key = std.mld_ins_discipline_key
AND std.mld_stdmelding_key = ssr.mld_stdmelding_key
AND sm.alg_srtruimte_key = ssr.alg_srtruimte_key
AND sm.mld_stdmelding_key IS NULL)
AND ssr.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 sd.ins_srtdiscipline_omschrijving IN (SELECT DISTINCT vakgroeptype FROM pcha_imp_storing_regime)
AND ssr.alg_srtruimte_key = sr.alg_srtruimte_key;
CURSOR c_upd_std
IS
SELECT DISTINCT
mld_stdmelding_key,
sr1.mld_stdmsrtruimte_t_uitvtijd.eenheid eenheid,
sr1.mld_stdmsrtruimte_t_uitvtijd.tijdsduur tijdsduur
FROM (SELECT mld_stdmelding_key,
DECODE (sr.mld_stdmsrtruimte_t_uitvtijd.eenheid, 'U', 0, 'D', 100)
+ sr.mld_stdmsrtruimte_t_uitvtijd.tijdsduur
duur,
sr.mld_stdmsrtruimte_t_uitvtijd
FROM mld_stdmsrtruimte sr) sr1
WHERE NOT EXISTS (SELECT *
FROM (SELECT mld_stdmelding_key,
DECODE (sr.mld_stdmsrtruimte_t_uitvtijd.eenheid,
'U', 0,
'D', 100)
+ sr.mld_stdmsrtruimte_t_uitvtijd.tijdsduur
duur
FROM mld_stdmsrtruimte sr) sr2
WHERE sr1.mld_stdmelding_key = sr2.mld_stdmelding_key AND sr1.duur < sr2.duur);
v_newline VARCHAR2 (1000);
v_aanduiding VARCHAR2 (1000); -- Import line
v_fielddelimitor VARCHAR2 (1); -- Field seperator
v_errormsg VARCHAR (200);
v_errorhint VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER;
v_tijdsduur NUMBER (10, 5);
v_eenheid VARCHAR2 (1);
v_basiskorting NUMBER;
v_varkorting NUMBER;
v_stdmsrtruimte_key NUMBER;
v_stdmelding_omschrijving VARCHAR2 (60);
BEGIN
SELECT COUNT ( * ) INTO v_count FROM pcha_imp_storing_regime;
IF v_count < 1000 AND 1=0 -- Toch maar even niet testen. De lijst met Kq meldingen bevat maar 17 records
THEN
fac.imp_writelog (
p_import_key,
'E',
'Aantal ingelezen regels: ' || v_count || ' is te weing.',
NULL);
RETURN;
END IF;
FOR rec IN c
LOOP
v_aanduiding :=
rec.r_codering
|| '-'
|| rec.vakgroep
|| '/'
|| rec.stdmelding
|| ') '
|| v_tijdsduur
|| ' '
|| v_eenheid
|| ' '
|| v_basiskorting
|| '-'
|| v_varkorting;
IF rec.mld_stdmelding_key IS NOT NULL
THEN
-- de hersteltijden gelden niet voor alle meldingen in de vakgroep.
IF rec.alg_srtruimte_key IS NULL
THEN
-- deze melding is gelijk voor alle ruimtesoorten. We gaan dit dus bij de stdmelding aanpassen.
v_errormsg := 'Zoeken stdmelding';
SELECT std.mld_stdmelding_t_uitvoertijd.tijdsduur tijdsduur,
std.mld_stdmelding_t_uitvoertijd.eenheid eenheid,
COALESCE (mld_stdmelding_malusbasis, 0)
mld_stdmelding_malusbasis,
COALESCE (mld_stdmelding_malus, 0) mld_stdmelding_malus
INTO v_tijdsduur,
v_eenheid,
v_basiskorting,
v_varkorting
FROM mld_stdmelding std
WHERE std.mld_stdmelding_key = rec.mld_stdmelding_key
AND std.mld_stdmelding_verwijder IS NULL;
IF v_tijdsduur <> rec.tijdsduur
OR v_eenheid <> rec.eenheid
OR v_basiskorting <> rec.bk
OR v_varkorting <> rec.vk
THEN
fac.imp_writelog (
p_import_key,
'I',
'Gewijzigd stdm1 ('
|| rec.r_codering
|| '-'
|| rec.vakgroep
|| '/'
|| rec.stdmelding
|| ')',
v_tijdsduur
|| ' '
|| v_eenheid
|| ' '
|| v_basiskorting
|| '-'
|| v_varkorting
|| ' -> '
|| rec.tijdsduur
|| ' '
|| rec.eenheid
|| ' '
|| rec.bk
|| '-'
|| rec.vk);
v_errormsg := 'Aanpassen stdmelding';
UPDATE mld_stdmelding
SET mld_stdmelding_t_uitvoertijd =
mld_t_uitvoertijd (rec.tijdsduur, rec.eenheid),
mld_stdmelding_malus = rec.vk,
mld_stdmelding_malusbasis = rec.bk
WHERE mld_stdmelding_key = rec.mld_stdmelding_key;
FOR rec_sr
IN (SELECT *
FROM mld_stdmsrtruimte
WHERE mld_stdmelding_key = rec.mld_stdmelding_key)
LOOP
fac.imp_writelog (
p_import_key,
'I',
'Verwijderd ('
|| rec.r_codering
|| '-'
|| rec.vakgroep
|| '/'
|| rec.stdmelding
|| ')',
NULL);
v_errormsg := 'Verwijderen stdmsrtruimte';
DELETE mld_stdmsrtruimte
WHERE mld_stdmsrtruimte_key = rec_sr.mld_stdmsrtruimte_key;
END LOOP;
END IF;
ELSE
-- Stdmelding en srtruimte zijn ingevuld. Dus een upsert op het mld_stdmsrtruimte record uitvoeren
BEGIN
v_errormsg := 'Zoeken stdmsrtruimte';
SELECT stdsr.mld_stdmsrtruimte_t_uitvtijd.tijdsduur tijdsduur,
stdsr.mld_stdmsrtruimte_t_uitvtijd.eenheid eenheid,
COALESCE (mld_stdmsrtruimte_malusbasis, 0)
mld_stdmsrtruimte_malusbasis,
COALESCE (mld_stdmsrtruimte_malus, 0)
mld_stdmsrtruimte_malus,
mld_stdmsrtruimte_key
INTO v_tijdsduur,
v_eenheid,
v_basiskorting,
v_varkorting,
v_stdmsrtruimte_key
FROM mld_stdmsrtruimte stdsr
WHERE stdsr.mld_stdmelding_key = rec.mld_stdmelding_key
AND stdsr.alg_srtruimte_key = rec.alg_srtruimte_key;
IF v_tijdsduur <> rec.tijdsduur
OR v_eenheid <> rec.eenheid
OR v_basiskorting <> rec.bk
OR v_varkorting <> rec.vk
THEN
fac.imp_writelog (
p_import_key,
'I',
'Gewijzigd stdmsr1 ('
|| rec.r_codering
|| '-'
|| rec.vakgroep
|| '/'
|| rec.stdmelding
|| ')',
v_tijdsduur
|| ' '
|| v_eenheid
|| ' '
|| v_basiskorting
|| '-'
|| v_varkorting
|| ' -> '
|| rec.tijdsduur
|| ' '
|| rec.eenheid
|| ' '
|| rec.bk
|| '-'
|| rec.vk);
v_errormsg := 'Aanpassen stdmsrtruimte';
UPDATE mld_stdmsrtruimte
SET mld_stdmsrtruimte_t_uitvtijd =
mld_t_uitvoertijd (rec.tijdsduur, rec.eenheid),
mld_stdmsrtruimte_malus = rec.vk,
mld_stdmsrtruimte_malusbasis = rec.bk
WHERE mld_stdmsrtruimte_key = v_stdmsrtruimte_key;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (
p_import_key,
'I',
'Toegevoegd ('
|| rec.r_codering
|| '-'
|| rec.vakgroep
|| '/'
|| rec.stdmelding
|| ')',
rec.tijdsduur
|| ' '
|| rec.eenheid
|| ' '
|| rec.bk
|| '-'
|| rec.vk);
v_errormsg := 'Toevoegen stdmsrtruimte';
INSERT INTO mld_stdmsrtruimte (mld_stdmsrtruimte_t_uitvtijd,
mld_stdmsrtruimte_malus,
mld_stdmsrtruimte_malusbasis,
alg_srtruimte_key,
mld_stdmelding_key)
VALUES (mld_t_uitvoertijd (rec.tijdsduur, rec.eenheid),
rec.vk,
rec.bk,
rec.alg_srtruimte_key,
rec.mld_stdmelding_key);
END;
END IF;
ELSE
-- de standaardmelding is null. De aanpassingen gelden dus voor alle meldingen die niet in de lijst voorkomen.
IF rec.alg_srtruimte_key IS NULL
THEN
-- deze melding is gelijk voor alle ruimtesoorten. We gaan dit dus bij de stdmelding aanpassen.
FOR rec_std
IN (SELECT *
FROM mld_stdmelding std
WHERE std.mld_ins_discipline_key = rec.mld_discipline_key
AND std.mld_stdmelding_verwijder IS NULL
AND std.mld_stdmelding_key NOT IN
(SELECT i.mld_stdmelding_key
FROM pcha_imp_storing_regime i
WHERE COALESCE (i.mld_stdmelding_key, -1) =
std.mld_stdmelding_key))
LOOP
v_errormsg := 'Zoeken stdmelding';
SELECT std.mld_stdmelding_t_uitvoertijd.tijdsduur tijdsduur,
std.mld_stdmelding_t_uitvoertijd.eenheid eenheid,
COALESCE (mld_stdmelding_malusbasis, 0)
mld_stdmelding_malusbasis,
COALESCE (mld_stdmelding_malus, 0) mld_stdmelding_malus,
mld_stdmelding_omschrijving
INTO v_tijdsduur,
v_eenheid,
v_basiskorting,
v_varkorting,
v_stdmelding_omschrijving
FROM mld_stdmelding std
WHERE std.mld_stdmelding_key = rec_std.mld_stdmelding_key;
IF v_tijdsduur <> rec.tijdsduur
OR v_eenheid <> rec.eenheid
OR v_basiskorting <> rec.bk
OR v_varkorting <> rec.vk
THEN
fac.imp_writelog (
p_import_key,
'I',
'Gewijzigd stdm2 ('
|| rec.r_codering
|| '-'
|| rec.vakgroep
|| '/'
|| v_stdmelding_omschrijving
|| ')',
v_tijdsduur
|| ' '
|| v_eenheid
|| ' '
|| v_basiskorting
|| '-'
|| v_varkorting
|| ' -> '
|| rec.tijdsduur
|| ' '
|| rec.eenheid
|| ' '
|| rec.bk
|| '-'
|| rec.vk);
v_errormsg := 'Aanpassen stdmelding';
UPDATE mld_stdmelding
SET mld_stdmelding_t_uitvoertijd =
mld_t_uitvoertijd (rec.tijdsduur, rec.eenheid),
mld_stdmelding_malus = rec.vk,
mld_stdmelding_malusbasis = rec.bk
WHERE mld_stdmelding_key = rec_std.mld_stdmelding_key;
END IF;
END LOOP;
ELSE
-- Ruimte is gevuld maar standaardmelding niet. We gaan nu voor alle bestaande standaardmeldingen en ruimtesoorten mld_stdmsrtruimte records aanmaken of bijwerken.
FOR rec_stdsr
IN (SELECT std.mld_stdmelding_key,
std.mld_stdmelding_omschrijving,
stdmsr.mld_stdmsrtruimte_t_uitvtijd.tijdsduur
tijdsduur,
stdmsr.mld_stdmsrtruimte_t_uitvtijd.eenheid eenheid,
COALESCE (mld_stdmsrtruimte_malusbasis, 0)
mld_stdmsrtruimte_malusbasis,
COALESCE (mld_stdmsrtruimte_malus, 0)
mld_stdmsrtruimte_malus,
mld_stdmsrtruimte_key
FROM mld_stdmelding std,
(SELECT *
FROM mld_stdmsrtruimte
WHERE alg_srtruimte_key = rec.alg_srtruimte_key)
stdmsr
WHERE std.mld_ins_discipline_key = rec.mld_discipline_key
AND std.mld_stdmelding_verwijder IS NULL
AND std.mld_stdmelding_key =
stdmsr.mld_stdmelding_key(+))
LOOP
v_tijdsduur := rec_stdsr.tijdsduur;
v_eenheid := rec_stdsr.eenheid;
v_basiskorting := rec_stdsr.mld_stdmsrtruimte_malusbasis;
v_varkorting := rec_stdsr.mld_stdmsrtruimte_malus;
v_stdmelding_omschrijving :=
rec_stdsr.mld_stdmelding_omschrijving;
v_stdmsrtruimte_key := rec_stdsr.mld_stdmsrtruimte_key;
IF rec_stdsr.mld_stdmsrtruimte_key IS NOT NULL
THEN
-- Update
IF v_tijdsduur <> rec.tijdsduur
OR v_eenheid <> rec.eenheid
OR v_basiskorting <> rec.bk
OR v_varkorting <> rec.vk
THEN
fac.imp_writelog (
p_import_key,
'I',
'Gewijzigd stdmsr2(' || v_stdmsrtruimte_key || '*'
|| rec.r_codering
|| '-'
|| rec.vakgroep
|| '/'
|| v_stdmelding_omschrijving
|| ')',
v_tijdsduur
|| ' '
|| v_eenheid
|| ' '
|| v_basiskorting
|| '-'
|| v_varkorting
|| ' -> '
|| rec.tijdsduur
|| ' '
|| rec.eenheid
|| ' '
|| rec.bk
|| '-'
|| rec.vk);
v_errormsg := 'Aanpassen stdmsrtruimte';
UPDATE mld_stdmsrtruimte
SET mld_stdmsrtruimte_t_uitvtijd =
mld_t_uitvoertijd (rec.tijdsduur, rec.eenheid),
mld_stdmsrtruimte_malus = rec.vk,
mld_stdmsrtruimte_malusbasis = rec.bk
WHERE mld_stdmsrtruimte_key = v_stdmsrtruimte_key;
END IF;
ELSE
-- Insert
fac.imp_writelog (
p_import_key,
'I',
'Toegevoegd ('
|| rec.r_codering
|| '-'
|| rec.vakgroep
|| '/'
|| v_stdmelding_omschrijving
|| ')',
rec.tijdsduur
|| ' '
|| rec.eenheid
|| ' '
|| rec.bk
|| '-'
|| rec.vk);
v_errormsg := 'Toevoegen stdmsrtruimte';
INSERT INTO mld_stdmsrtruimte (mld_stdmsrtruimte_t_uitvtijd,
mld_stdmsrtruimte_malus,
mld_stdmsrtruimte_malusbasis,
alg_srtruimte_key,
mld_stdmelding_key)
VALUES (mld_t_uitvoertijd (rec.tijdsduur, rec.eenheid),
rec.vk,
rec.bk,
rec.alg_srtruimte_key,
rec_stdsr.mld_stdmelding_key);
END IF;
END LOOP;
END IF;
END IF;
END LOOP;
FOR rec IN c_del
LOOP
fac.imp_writelog (
p_import_key,
'I',
'Verwijderd ('
|| rec.alg_srtruimte_code
|| '-'
|| rec.ins_discipline_omschrijving
|| '/'
|| rec.mld_stdmelding_omschrijving
|| ')',
NULL);
DELETE mld_stdmsrtruimte WHERE mld_stdmsrtruimte_key = rec. mld_stdmsrtruimte_key;
END LOOP;
-- Als de hersteltijd per ruimtesoort geldt dan moeten we de vlag afhankelijk ook zetten bij de stdmelding.
UPDATE mld_stdmelding std
SET mld_stdmelding_afhankelijk =
(SELECT DECODE (COUNT ( * ), 0, 0, 1)
FROM mld_stdmsrtruimte sr
WHERE sr.mld_stdmelding_key = std.mld_stdmelding_key);
-- Als er een uitsplitsing is naar ruimtesoort dan moeten we toch de default uitvoertijd bij de stdmelding
-- invullen. Anders wordt de verkeerde eenheid bij respijt getoond.
FOR rec IN c_upd_std
LOOP
UPDATE mld_stdmelding
SET mld_stdmelding_t_uitvoertijd = mld_t_uitvoertijd (rec.tijdsduur, rec.eenheid)
WHERE mld_stdmelding_key = rec.mld_stdmelding_key;
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
v_aanduiding := v_errormsg || ' - ' || v_aanduiding;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
SUBSTR (v_errormsg, 1, 1000),
v_aanduiding);
END;
/
CREATE OR REPLACE PROCEDURE pcha_import_kenmerken (
p_import_key IN NUMBER)
AS
CURSOR c_cursor
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
v_newline VARCHAR2(1000);
v_aanduiding VARCHAR2(1000); -- Import line
v_fielddelimitor VARCHAR2(1); -- Field seperator
v_errormsg VARCHAR(200);
v_errorhint VARCHAR(200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2(200);
header_found BOOLEAN;
v_error NUMBER(1);
v_dummy VARCHAR2(100);
-- De importvelden
v_stdmelding VARCHAR2(100);
v_vakgroep VARCHAR2(100);
v_vakgroeptype VARCHAR2(100);
v_kenmerk VARCHAR2(100);
v_usrtab_omschrijving VARCHAR2(30);
v_stdmelding_key NUMBER;
v_discipline_key NUMBER;
v_srtdiscipline_key NUMBER;
BEGIN
-- Init
header_found := FALSE;
v_fielddelimitor := ';';
-- Clear my previous imported rows
DELETE FROM pcha_imp_kenmerken;
FOR rec1 IN c_cursor
LOOP
BEGIN
v_newline := REPLACE(rec1.fac_imp_file_line, CHR(160), ' ');
v_aanduiding := SUBSTR (v_newline, 1, 200);
v_error := 0;
IF SUBSTR (v_newline, 1, 3) = '?'
THEN
-- EF BB BF aangetroffen
fac.imp_writelog (p_import_key,
'W',
'Byte Order Mark aangetroffen',
'Bestand heeft onbehandeld UTF-8 formaat.');
v_newline := SUBSTR (v_newline, 4);
END IF;
v_errormsg := 'Inlezen velden';
fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); -- OS code
fac.imp_getfield (v_newline, v_fielddelimitor, v_vakgroep);
fac.imp_getfield (v_newline, v_fielddelimitor, v_stdmelding);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk);
fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy);
fac.imp_getfield (v_newline, v_fielddelimitor, v_vakgroeptype);
-- Skip until a valid header is found
v_errormsg := 'Controleer de header';
IF UPPER (rec1.fac_imp_file_line) LIKE
'OS_CODE;VAKGROEP;STANDAARDMELDING;ONDERDEEL;GROEP;VAKGROEPTYPE%'
THEN
-- Sla de kopregel over.
header_found := TRUE;
ELSIF (header_found AND v_vakgroep IS NOT NULL)
THEN
v_errormsg := 'Controleer vakgroeptype';
BEGIN
v_vakgroeptype := TRIM(v_vakgroeptype);
SELECT ins_srtdiscipline_key
INTO v_srtdiscipline_key
FROM ins_srtdiscipline sd
WHERE sd.ins_srtdiscipline_module = 'MLD'
AND sd.ins_srtdiscipline_verwijder IS NULL
AND UPPER (sd.ins_srtdiscipline_omschrijving) =
UPPER (v_vakgroeptype);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (
p_import_key,
'E',
'Vakgroeptype niet gevonden: ' || v_vakgroeptype,
v_aanduiding);
v_srtdiscipline_key := NULL;
v_error := 1;
END;
v_errormsg := 'Controleer vakgroep';
BEGIN
v_vakgroep := TRIM(v_vakgroep);
SELECT ins_discipline_key
INTO v_discipline_key
FROM ins_tab_discipline d
WHERE d.ins_discipline_module = 'MLD'
AND d.ins_discipline_verwijder IS NULL
AND d.ins_srtdiscipline_key = v_srtdiscipline_key
AND UPPER (d.ins_discipline_omschrijving) =
UPPER (v_vakgroep);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (
p_import_key,
'E',
'Vakgroep niet gevonden: ' || v_vakgroep,
v_aanduiding);
v_discipline_key := NULL;
v_error := 1;
END;
v_usrtab_omschrijving := SUBSTR(v_vakgroeptype,1,2) || '/' || SUBSTR(v_vakgroep,1,6) || '/' || SUBSTR(v_stdmelding,1,6);
v_errormsg := 'Controleer stdmelding';
IF v_stdmelding IS NOT NULL
THEN
v_stdmelding := SUBSTR(TRIM(v_stdmelding),1,60);
BEGIN
SELECT mld_stdmelding_key
INTO v_stdmelding_key
FROM mld_stdmelding std
WHERE std.mld_stdmelding_verwijder IS NULL
AND std.mld_ins_discipline_key = v_discipline_key
AND UPPER (std.mld_stdmelding_omschrijving) =
UPPER (v_stdmelding);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (
p_import_key,
'E',
'Standaard melding niet gevonden: ' || v_stdmelding,
v_aanduiding);
v_stdmelding_key := NULL;
v_error := 1;
END;
ELSE
v_stdmelding_key := NULL;
END IF;
IF v_error = 0
THEN
INSERT INTO pcha_imp_kenmerken (mld_stdmelding_key,
fac_usrtab_omschrijving,
fac_usrdata_omschrijving)
VALUES (v_stdmelding_key,
v_usrtab_omschrijving,
SUBSTR(v_kenmerk,1,60));
END IF;
COMMIT;
END IF;
END;
END loop;
IF NOT header_found
THEN
fac.imp_writelog (
p_import_key,
'E',
'Geen geldige header aangetroffen',
'Bestand is geen geldig kenmerken importbestand.');
END IF;
EXCEPTION
WHEN OTHERS
THEN
v_aanduiding := v_errormsg || ' - ' || v_aanduiding;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'E', SUBSTR (v_errormsg, 1, 1000), v_aanduiding);
-- maak de importtabel leeg om te voorkomen dat er halve bestanden ingelezen worden.
DELETE FROM pcha_imp_kenmerken;
END;
/
CREATE OR REPLACE PROCEDURE pcha_update_kenmerken (p_import_key IN NUMBER)
AS
CURSOR c
IS
SELECT * FROM pcha_imp_kenmerken;
v_aanduiding VARCHAR2 (1000); -- Import line
v_errormsg VARCHAR (200);
v_errorhint VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_usrtab_key fac_usrtab.fac_usrtab_key%TYPE;
v_usrdata_key fac_usrdata.fac_usrdata_key%TYPE;
v_kenmerkdomein_key fac_kenmerkdomein.fac_kenmerkdomein_key%TYPE;
v_srtkenmerk_key mld_srtkenmerk.mld_srtkenmerk_key%TYPE;
v_kenmerk_key mld_kenmerk.mld_kenmerk_key%TYPE;
v_srtkenmerk_omschrijving mld_srtkenmerk.mld_srtkenmerk_omschrijving%TYPE;
BEGIN
FOR rec IN c
LOOP
v_aanduiding :=
rec.mld_stdmelding_key
|| '-'
|| rec.fac_usrtab_omschrijving
|| '/'
|| rec.fac_usrdata_omschrijving;
IF rec.mld_stdmelding_key IS NOT NULL
THEN
v_errorhint := 'Toevoegen of bepalen fac_usrtab';
BEGIN
SELECT fac_usrtab_key
INTO v_usrtab_key
FROM fac_usrtab
WHERE fac_usrtab_naam = rec.fac_usrtab_omschrijving;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
INSERT INTO fac_usrtab (fac_usrtab_naam, fac_usrtab_omschrijving)
VALUES (rec.fac_usrtab_omschrijving, rec.fac_usrtab_omschrijving)
RETURNING fac_usrtab_key
INTO v_usrtab_key;
END;
v_errorhint := 'Toevoegen of bepalen fac_kenmerkdomein';
BEGIN
SELECT fac_kenmerkdomein_key
INTO v_kenmerkdomein_key
FROM fac_kenmerkdomein
WHERE fac_kenmerkdomein_verwijder IS NULL
AND fac_kenmerkdomein_module = 'MLD'
AND fac_usrtab_key = v_usrtab_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
INSERT INTO fac_kenmerkdomein (fac_kenmerkdomein_omschrijving,
fac_kenmerkdomein_module,
fac_kenmerkdomein_kolomnaam,
fac_kenmerkdomein_kolomtxt,
fac_kenmerkdomein_objectnaam,
fac_usrtab_key)
VALUES (rec.fac_usrtab_omschrijving,
'MLD',
'FAC_USRDATA_KEY',
'FAC_USRDATA_OMSCHR',
'FAC_USRDATA',
v_usrtab_key)
RETURNING fac_kenmerkdomein_key
INTO v_kenmerkdomein_key;
END;
v_errorhint := 'Toevoegen of bepalen srtkenmerk_omschrijving';
SELECT SUBSTR('Type ' || ins_discipline_omschrijving || '/' || mld_stdmelding_omschrijving, 1, 50)
INTO v_srtkenmerk_omschrijving
FROM mld_discipline d, mld_stdmelding std
WHERE d.ins_discipline_key = std.mld_ins_discipline_key
AND std.mld_stdmelding_key = rec.mld_stdmelding_key;
v_errorhint := 'Toevoegen of bepalen mld_srtkenmerk';
BEGIN
SELECT mld_srtkenmerk_key
INTO v_srtkenmerk_key
FROM mld_srtkenmerk
WHERE mld_srtkenmerk_verwijder IS NULL
AND fac_kenmerkdomein_key = v_kenmerkdomein_key
AND mld_srtkenmerk_omschrijving = v_srtkenmerk_omschrijving;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
INSERT INTO mld_srtkenmerk (mld_srtkenmerk_omschrijving,
mld_srtkenmerk_kenmerktype,
fac_kenmerkdomein_key)
VALUES (v_srtkenmerk_omschrijving, 'R', v_kenmerkdomein_key)
RETURNING mld_srtkenmerk_key
INTO v_srtkenmerk_key;
END;
v_errorhint := 'Toevoegen of bepalen mld_kenmerk';
BEGIN
SELECT mld_kenmerk_key
INTO v_kenmerk_key
FROM mld_kenmerk
WHERE mld_kenmerk_verwijder IS NULL AND mld_srtkenmerk_key = v_srtkenmerk_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
INSERT INTO mld_kenmerk (mld_srtkenmerk_key,
mld_stdmelding_key,
mld_kenmerk_niveau,
mld_kenmerk_volgnummer)
VALUES (v_srtkenmerk_key,
rec.mld_stdmelding_key,
'S',
400)
RETURNING mld_kenmerk_key
INTO v_kenmerk_key;
END;
v_errorhint := 'Toevoegen of bepalen fac_usrdata';
BEGIN
SELECT fac_usrdata_key
INTO v_usrdata_key
FROM fac_usrdata
WHERE fac_usrdata_code = SUBSTR (rec.fac_usrdata_omschrijving, 1, 40)
AND fac_usrtab_key = v_usrtab_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
INSERT INTO fac_usrdata (fac_usrtab_key, fac_usrdata_code, fac_usrdata_omschr)
VALUES (v_usrtab_key, SUBSTR (rec.fac_usrdata_omschrijving, 1, 40), rec.fac_usrdata_omschrijving)
RETURNING fac_usrdata_key
INTO v_usrdata_key;
END;
--------------------------- Kenmerk toevoegen aan stdmelding ---------------------------
END IF;
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
v_aanduiding := v_errormsg || ' - ' || v_aanduiding;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
SUBSTR (v_errormsg, 1, 1000),
v_aanduiding || ' - ' || v_errorhint);
END;
/
CREATE OR REPLACE PROCEDURE pcha_import_mld (p_import_key IN NUMBER)
AS
BEGIN
-- Verwijder nbsp karakters.
UPDATE fac_imp_file
SET fac_imp_file_line = REPLACE (fac_imp_file_line, CHR (160), ' ')
WHERE fac_import_key = p_import_key;
fac_import_mld (p_import_key);
UPDATE fac_imp_mld SET mld_stdmelding_groep = TRIM(mld_stdmelding_groep);
END;
/
CREATE OR REPLACE PROCEDURE pcha_update_mld (p_import_key IN NUMBER)
AS
CURSOR c
IS
SELECT i.*,
sd.ins_srtdiscipline_key,
d.ins_discipline_key,
std.mld_stdmelding_key
FROM fac_imp_file i,
ins_tab_discipline d,
ins_srtdiscipline sd,
mld_stdmelding std
WHERE sd.ins_srtdiscipline_key = d.ins_srtdiscipline_key
AND d.ins_discipline_key = std.mld_ins_discipline_key
AND i.fac_imp_file_line LIKE
ins_srtdiscipline_omschrijving
|| ';%;'
|| ins_discipline_omschrijving
|| ';'
|| mld_stdmelding_omschrijving
|| ';%'
AND mld_stdmelding_verwijder IS NULL
AND ins_discipline_verwijder IS NULL
AND sd.ins_srtdiscipline_verwijder IS NULL
AND fac_import_key = p_import_key;
v_aanduiding VARCHAR2 (400);
v_errormsg VARCHAR (200);
v_errorhint VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_regime VARCHAR2 (40);
BEGIN
fac_update_mld (p_import_key);
FOR rec IN c
LOOP
BEGIN
fac.imp_getfield_nr (rec.fac_imp_file_line, ';', 20, v_regime);
DBMS_OUTPUT.put_line (v_regime);
IF v_regime LIKE '%24%'
THEN
-- 24/7
UPDATE mld_stdmelding SET mld_stdmelding_regime = 3 WHERE mld_stdmelding_key = rec.mld_stdmelding_key;
ELSE
-- Openingstijden
UPDATE mld_stdmelding SET mld_stdmelding_regime = 2 WHERE mld_stdmelding_key = rec.mld_stdmelding_key;
END IF;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line ('Fout bij bepalen regime uit melding: ' || rec.fac_imp_file_line);
END;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
v_aanduiding := v_errormsg || ' - ' || v_aanduiding;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
SUBSTR (v_errormsg, 1, 1000),
v_aanduiding);
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;
-- Rapport met de diverse indexeringen
CREATE OR REPLACE VIEW pcha_v_rap_indexering
(
omschrijving,
jaar,
jaar_1,
jaar_2
)
AS
SELECT omschrijving,
ROUND (pchx_mon.get_index_value (SYSDATE, module), 7) jaar,
ROUND (pchx_mon.get_index_value (ADD_MONTHS (SYSDATE, -12), module), 7) jaar_1,
ROUND (pchx_mon.get_index_value (ADD_MONTHS (SYSDATE, -24), module), 7) jaar_2
FROM (SELECT 'MON' module, 'Monitoring' omschrijving FROM DUAL
UNION ALL
SELECT 'SCH', 'Schoonmaak' FROM DUAL
UNION ALL
SELECT 'BEV', 'Beveiliging' FROM DUAL
UNION ALL
SELECT 'GLA', 'Gladheidsbestrijding' FROM DUAL);
-- Rapportage om de releatie tussen het bericht uit het GBS en de standaardmelding
-- in Facilitor zichtbaar te maken.
CREATE OR REPLACE VIEW pcha_v_rap_gbs_storing_def
(
gbs_melding,
vakgroeptype,
vakgroep,
melding
)
AS
SELECT fac_usrdata_code,
sd.ins_srtdiscipline_omschrijving,
d.ins_discipline_omschrijving,
mld_stdmelding_omschrijving
FROM fac_usrdata ud,
mld_stdmelding std,
mld_discipline d,
ins_srtdiscipline sd
WHERE ud.fac_usrdata_verwijder IS NULL
AND ud.fac_usrtab_key = 221
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;
-- Koppeling met Gebouw beheer systeem (GBS). Storingen komen via de mail binnen volgens
-- vastgesteld formaat.
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_bericht6 NUMBER;
v_sync_bericht8 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_bericht6 := 0;
v_sync_bericht8 := 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)';
-- Eerst even kijken naar de sync berichten
CASE TRIM (UPPER (v_value))
WHEN 'TESTFMISTC8'
THEN
v_sync_bericht8 := 1;
v_error := 0;
EXIT;
WHEN 'TESTFMISTC6'
THEN
v_sync_bericht6 := 1;
v_error := 0;
EXIT;
ELSE
v_stdmelding_omschrijving := 'Onbekend';
END CASE;
errormsg := '(0x1454)';
BEGIN
-- Zoek omschrijving op in eigen tabel met key 221
SELECT fac_usrdata_prijs
INTO v_stdmelding_key
FROM fac_usrdata
WHERE fac_usrdata_verwijder IS NULL
AND fac_usrdata_upper = TRIM (UPPER (v_value))
AND fac_usrtab_key = 221;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_error := 1;
v_errormsg :=
'Standaard melding kan niet gevonden worden: '
|| v_value;
END;
WHEN 'INUIT'
THEN
v_inuit := UPPER (TRIM (v_value));
WHEN 'INSTALLATIEDEEL'
THEN
-- plak er ' x' achter om er zeker van te zijn dat er een spatie in staat.
v_ruimte := UPPER(SUBSTR(TRIM (v_value), 1, INSTR(TRIM(v_value || ' x'), ' ')-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_bericht6 = 0 AND v_sync_bericht8 = 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 || ' Details: ' || v_installatiecode || ';' || v_status || ';' || v_onderwerp);
v_error := 1;
v_errormsg := 'Melding niet uniek gevonden, aantal gevonden ' || v_count || ' Details: ' || v_installatiecode || ';' || v_status || ';' || v_onderwerp;
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_bericht6 = 1
THEN
UPDATE fac_usrdata
SET fac_usrdata_vervaldatum = SYSDATE
WHERE fac_usrdata_key = 41;
ELSIF v_sync_bericht8 = 1
THEN
UPDATE fac_usrdata
SET fac_usrdata_vervaldatum = SYSDATE
WHERE fac_usrdata_key = 561;
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;
/
--Klant specifieke view voor het tonen van alle nieuwe meldingen gesorteerd op THT
CREATE OR REPLACE VIEW pcha_v_lijst_nieuwe_mld
AS
SELECT meldingnummer,
productgroep,
melding_ruimte,
onderwerp,
melding_status,
ROUND (
mld_t_uitvoertijd (
m.min_t_sla.tijdsduur + m.max_t_respijt.tijdsduur,
m.min_t_sla.eenheid).tijdsduur,
2)
tht
FROM mld_v_udr_melding mu, pchx_v_startmelding_geg m
WHERE MELDING_STATUS IN ('Nieuw', 'Te accepteren')
AND mu.melding_key = m_start
ORDER BY tht;
--Klant specifieke view voor het tonen van het totaal korting per kwartaal per onderwerp
CREATE OR REPLACE VIEW pcha_v_totaal_korting_ond
AS
SELECT ins_discipline_omschrijving,
DECODE (
UPPER (ins_discipline_omschrijving),
'COMFORT', 'FTRC',
'FUNCTIONALITEIT', 'FTRC',
'TOEGANKELIJKHEID', 'FTRC',
'REPRESENTATIVITEIT', 'FTRC',
'VEILIGHEID ' || CHR (38) || ' GEZONDHEID', 'V' || CHR (38) || 'G',
'WET ' || CHR (38) || ' REGELGEVING', 'W' || CHR (38) || 'R',
'Dienst')
onderwerp, totaal
FROM pchx_v_monitoring m, mld_discipline d, mld_melding
where m.discipline_key = d.ins_discipline_key
AND totaal is not null
AND mld_melding_datum > ADD_MONTHS (SYSDATE, -3);
------ 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