1540 lines
61 KiB
PL/PgSQL
1540 lines
61 KiB
PL/PgSQL
--
|
|
-- $Id$
|
|
--
|
|
-- Script containing customer specific sql statements for the FACILITOR database
|
|
|
|
|
|
DEFINE thisfile = 'pghe.sql'
|
|
DEFINE dbuser = 'PGHE'
|
|
|
|
SET ECHO ON
|
|
SET DEFINE ON
|
|
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
|
|
COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT;
|
|
WHENEVER SQLERROR CONTINUE;
|
|
SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL;
|
|
SPOOL &fcltlogfile
|
|
WHENEVER SQLERROR EXIT;
|
|
SELECT adm.checkscriptcust('&dbuser') AS fcltcusttxt FROM DUAL;
|
|
WHENEVER SQLERROR CONTINUE;
|
|
---------------------------------------
|
|
PROMPT &fcltcusttxt
|
|
---------------------------------------
|
|
SET DEFINE OFF
|
|
|
|
------ payload begin ------
|
|
|
|
CREATE OR REPLACE PACKAGE PGHE
|
|
AS
|
|
PROCEDURE mail_gbs_melding(pfrom IN VARCHAR2,
|
|
pto IN VARCHAR2,
|
|
psubject IN VARCHAR2,
|
|
pbody IN VARCHAR2,
|
|
psessionid IN VARCHAR2,
|
|
pemailkey IN NUMBER);
|
|
|
|
END;
|
|
/
|
|
|
|
CREATE OR REPLACE PACKAGE BODY PGHE
|
|
AS
|
|
|
|
PROCEDURE mail_gbs_melding(pfrom IN VARCHAR2,
|
|
pto IN VARCHAR2,
|
|
psubject IN VARCHAR2,
|
|
pbody IN VARCHAR2,
|
|
psessionid IN VARCHAR2,
|
|
pemailkey IN NUMBER)
|
|
|
|
AS
|
|
|
|
CURSOR c IS
|
|
SELECT *
|
|
FROM mld_melding m
|
|
WHERE mld_meldbron_key = 6 -- System GBS
|
|
AND mld_melding_status IN (0, 2, 3, 4, 7, 99); -- alles behalve 1=Afgewezen, 5= afgemeld, 6= historie
|
|
|
|
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_errormsg fac_result.fac_result_waarde%TYPE;
|
|
v_uitvoertijd mld_stdmelding.mld_stdmelding_t_uitvoertijd%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_srtruimte_key alg_srtruimte.alg_srtruimte_key%TYPE;
|
|
v_ruimte_nr alg_ruimte.alg_ruimte_nr%TYPE;
|
|
v_std_ruimte_nr 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_tijdstip VARCHAR2 (100);
|
|
v_date DATE;
|
|
v_gbs_melding VARCHAR2 (1000);
|
|
v_count NUMBER;
|
|
v_error NUMBER;
|
|
v_newline VARCHAR2 (4000);
|
|
v_tag VARCHAR2 (4000);
|
|
v_from VARCHAR2 (4000);
|
|
v_body VARCHAR2 (4000);
|
|
|
|
v_errorhint VARCHAR2 (1000);
|
|
oracle_err_num NUMBER;
|
|
oracle_err_mes VARCHAR2 (200);
|
|
|
|
v_volgnr NUMBER;
|
|
BEGIN
|
|
|
|
-- 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;
|
|
|
|
|
|
IF psubject = 'Watchdog Alarm'
|
|
THEN
|
|
UPDATE fac_usrdata
|
|
SET fac_usrdata_vervaldatum = SYSDATE
|
|
WHERE fac_usrdata_key = 181; -- Watchdog
|
|
ELSE
|
|
UPDATE fac_usrdata
|
|
SET fac_usrdata_vervaldatum = SYSDATE
|
|
WHERE fac_usrdata_key = 60; -- Laatst ontvangen bericht
|
|
|
|
-- filter nu de essentiele velden uit de mailbody
|
|
-- vervang cr door lf
|
|
-- TO DO: MOETEN WE EEN FALLBACK STDMELDING KEY DEFINIEREN??????????????????????
|
|
v_stdmelding_key := fac.safe_to_number (fac.getsetting ('defaultstdmelding'));
|
|
|
|
v_body := pbody;
|
|
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;
|
|
v_onderwerp := psubject;
|
|
|
|
v_errorhint := 'Bepaal volgnummer';
|
|
SELECT MAX(fac_rapport_volgnr)
|
|
INTO v_volgnr
|
|
FROM fac_rapport
|
|
WHERE fac_rapport_node = 'GBS_MELDING';
|
|
|
|
DELETE fac_rapport WHERE fac_rapport_node = 'GBS_MELDING' AND fac_rapport_volgnr IS NULL;
|
|
|
|
IF v_volgnr IS NULL
|
|
THEN
|
|
v_volgnr := 1;
|
|
END IF;
|
|
|
|
v_errorhint := 'Bewaar mail ' || v_volgnr;
|
|
INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel)
|
|
VALUES ('GBS_MELDING', v_volgnr + 1, pfrom || CHR (10) || psubject || CHR (10) || v_omschrijving);
|
|
|
|
-- afzender van een gbs bericht is altijd 1881 (Key van gebruiker Gebouwbeheersysteem GBS)
|
|
v_sender := 1881; --1881 prod
|
|
|
|
-- Eerste 5 regels bevatten geen relevante informatie
|
|
fac.imp_getfield (v_body, CHR (10), v_newline);
|
|
v_errorhint := 'Ophalen 1e regel: ' || v_newline;
|
|
fac.imp_getfield (v_body, CHR (10), v_newline);
|
|
v_errorhint := 'Ophalen 2e regel: ' || v_newline;
|
|
fac.imp_getfield (v_body, CHR (10), v_newline);
|
|
v_errorhint := 'Ophalen 3e regel: ' || v_newline;
|
|
fac.imp_getfield (v_body, CHR (10), v_newline);
|
|
v_errorhint := 'Ophalen 4e regel: ' || v_newline;
|
|
fac.imp_getfield (v_body, CHR (10), v_newline);
|
|
v_errorhint := 'Ophalen 5e regel: ' || v_newline;
|
|
fac.imp_getfield (v_body, CHR (10), v_newline);
|
|
v_errorhint := 'Ophalen 6e regel: ' || v_newline;
|
|
|
|
-- De zesde regel moet allemaal sterren bevatten. Laten we dit maar even checken
|
|
IF v_newline = '********************************'
|
|
THEN
|
|
fac.imp_getfield (v_body, CHR (10), v_gbs_melding);
|
|
v_errorhint := 'Ophalen GBS melding: ' || v_gbs_melding;
|
|
fac.imp_getfield (v_body, CHR (10), v_tijdstip);
|
|
v_errorhint := 'Ophalen tijdstip: ' || v_tijdstip;
|
|
v_date := TO_DATE(v_tijdstip, 'dd-mm-yyyy hh24:mi:ss');
|
|
v_errorhint := 'Tijdstip: ' || v_date;
|
|
|
|
v_ruimte_nr := SUBSTR(v_gbs_melding, 2, INSTR(v_gbs_melding, ']')-2);
|
|
v_errorhint := 'Ruimte: ' || v_ruimte_nr;
|
|
v_tag := SUBSTR(v_gbs_melding, INSTR(v_gbs_melding, ']')+2, 100);
|
|
|
|
v_errorhint := 'Tag: ' || v_tag;
|
|
IF v_tag = 'GbsMeldingUit'
|
|
THEN
|
|
-- Afmeldingen worden handmatig uitgevoerd omdat het GBS alleen maar een algemen afmelding kan sturen
|
|
-- als alle storing verholpen zijn.
|
|
NULL;
|
|
ELSE
|
|
BEGIN
|
|
SELECT fac_usrdata_prijs, fac_usrdata_omschr
|
|
INTO v_stdmelding_key, v_std_ruimte_nr
|
|
FROM fac_usrdata ud
|
|
WHERE fac_usrtab_key = 20
|
|
AND UPPER(fac_usrdata_omschr2) = UPPER(TRIM(v_gbs_melding));
|
|
|
|
-- Zoek het ruimtenummer nav het nummer dat in de eigentabel staat.
|
|
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 alg_ruimte_nr = v_std_ruimte_nr;
|
|
EXCEPTION WHEN NO_DATA_FOUND
|
|
THEN
|
|
v_stdmelding_key := 727; -- Onbekend bericht
|
|
v_ruimte_key := 924; -- RH0.99
|
|
END;
|
|
|
|
-- Kijk of er al een melding actief is met dezelfde stdmelding_key en meldbron 6 (System)
|
|
SELECT MIN (m.mld_melding_key), COUNT (m.mld_melding_key)
|
|
INTO v_melding_key, v_count
|
|
FROM mld_melding m
|
|
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
|
|
|
|
IF v_count = 0
|
|
THEN
|
|
|
|
/* IS DIT NODIG???????????????????
|
|
-- nu gaan we de hersteltijd bepalen
|
|
v_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;
|
|
*/
|
|
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_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',
|
|
6, -- system
|
|
v_date,
|
|
v_onderwerp,
|
|
v_omschrijving,
|
|
NULL,
|
|
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 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;
|
|
END IF;
|
|
ELSE
|
|
INSERT INTO fac_result (fac_result_sessionid,
|
|
fac_result_naam,
|
|
fac_result_waarde)
|
|
VALUES (psessionid,
|
|
'errormsg',
|
|
'Berichtopbouw verkeerd gevonden regel: ' || v_newline);
|
|
-- 'Fout bij verwerken GBS bericht: ' || psubject);
|
|
END IF;
|
|
END IF;
|
|
|
|
IF v_error = 1
|
|
THEN
|
|
-- foutafhandeling
|
|
fac.writelog ('PROCESSEMAIL',
|
|
'E',
|
|
v_errormsg,
|
|
SUBSTR (pbody, 1, 1000));
|
|
END IF;
|
|
|
|
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 ('GBS_MELDING', 'E', v_errormsg, v_errorhint);
|
|
|
|
INSERT INTO fac_result (fac_result_sessionid,
|
|
fac_result_naam,
|
|
fac_result_waarde)
|
|
VALUES (psessionid,
|
|
'errormsg',
|
|
'Fout bij verwerken GBS bericht: ' || psubject);
|
|
END;
|
|
|
|
END;
|
|
/
|
|
|
|
CREATE OR REPLACE PROCEDURE pghe_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 pghe_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, ';', 25, 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;
|
|
/
|
|
|
|
|
|
-- Importfunctie voor THT waardes bij meldingen
|
|
CREATE OR REPLACE PROCEDURE pghe_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 pghe_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_omschrijving) = 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 pghe_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 pghe_imp_storing_regime;
|
|
END;
|
|
/
|
|
|
|
CREATE OR REPLACE PROCEDURE pghe_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 pghe_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 pghe_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 pghe_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 pghe_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 pghe_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 pghe_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;
|
|
/
|
|
|
|
|
|
-- Rapportage om de releatie tussen het bericht uit het GBS en de standaardmelding
|
|
-- in Facilitor zichtbaar te maken.
|
|
CREATE OR REPLACE VIEW pghe_v_rap_gbs_storing_def
|
|
(
|
|
gbs_melding,
|
|
standaard_ruimte,
|
|
vakgroeptype,
|
|
vakgroep,
|
|
melding
|
|
)
|
|
AS
|
|
SELECT fac_usrdata_code,
|
|
fac_usrdata_omschr,
|
|
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 = 20
|
|
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;
|
|
|
|
-- Rapport om de sychronisatie status van de koppeling op de portal te tonen.
|
|
CREATE OR REPLACE VIEW pghe_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 = 60;
|
|
|
|
CREATE OR REPLACE VIEW pghe_melding_optijd
|
|
AS
|
|
SELECT gereed,
|
|
gbs,
|
|
DECODE (SIGN (mld_melding_einddatum_std - gereed), -1, 0, 100)
|
|
optijd
|
|
FROM (SELECT m.*,
|
|
DECODE (prs_perslid_key, 1881, 1, 0) gbs,
|
|
fac.gettrackingdate ('MLDAFM', m.mld_melding_key) gereed
|
|
FROM mld_melding m)
|
|
WHERE gereed IS NOT NULL
|
|
AND ADD_MONTHS(TRUNC(gereed, 'MONTH'),6) > SYSDATE;
|
|
|
|
-- Dashboard rapport voor nieuwe meldingen.
|
|
CREATE OR REPLACE VIEW pghe_v_dashboard_new
|
|
AS
|
|
SELECT m.mld_melding_key,
|
|
pf.prs_perslid_naam_full,
|
|
mld_melding_datum,
|
|
std.mld_stdmelding_omschrijving,
|
|
d.ins_discipline_omschrijving
|
|
FROM mld_melding m,
|
|
prs_perslid p,
|
|
prs_v_perslid_fullnames pf,
|
|
prs_afdeling a,
|
|
mld_stdmelding std,
|
|
ins_tab_discipline d
|
|
WHERE m.prs_perslid_key = p.prs_perslid_key
|
|
AND p.prs_perslid_naam <> 'Gebouwbeheersysteem GBS'
|
|
AND p.prs_perslid_key = pf.prs_perslid_key
|
|
AND p.prs_afdeling_key = a.prs_afdeling_key
|
|
AND prs_afdeling_naam = 'RHHR'
|
|
AND m.mld_stdmelding_key = std.mld_stdmelding_key
|
|
AND std.mld_ins_discipline_key = d.ins_discipline_key
|
|
AND d.ins_srtdiscipline_key = 4 -- Storing
|
|
AND mld_melding_status IN (2, 3);
|
|
|
|
|
|
CREATE OR REPLACE VIEW pghe_v_goedkeuring_svd
|
|
AS
|
|
SELECT pf.prs_perslid_naam_full,
|
|
m.prs_perslid_key,
|
|
o.mld_melding_key,
|
|
o.mld_opdr_key,
|
|
o.mld_opdr_bedrijfopdr_volgnr,
|
|
m.mld_melding_onderwerp,
|
|
sd.ins_srtdiscipline_prefix
|
|
|| m.mld_melding_key
|
|
|| '/'
|
|
|| o.mld_opdr_bedrijfopdr_volgnr
|
|
id,
|
|
so.mld_statusopdr_omschrijving,
|
|
ud.fac_usrdata_omschr,
|
|
(SELECT mld_kenmerkopdr_waarde
|
|
FROM mld_kenmerkopdr ko
|
|
WHERE ko.mld_kenmerk_key = 201 -- goedgekeurd door aanvrager
|
|
AND ko.mld_opdr_key = o.mld_opdr_key) goedgekeurd,
|
|
om.mld_opdr_materiaal_aantal aantaltikken,
|
|
(SELECT mld_kenmerkopdr_waarde
|
|
FROM mld_kenmerkopdr ko
|
|
WHERE ko.mld_kenmerk_key = 181 -- maand
|
|
AND ko.mld_opdr_key = o.mld_opdr_key) maand
|
|
FROM mld_opdr o,
|
|
mld_melding m,
|
|
prs_v_perslid_fullnames_all pf,
|
|
mld_stdmelding std,
|
|
mld_discipline d,
|
|
ins_srtdiscipline sd,
|
|
mld_statusopdr so,
|
|
mld_opdr_materiaal om,
|
|
fac_usrdata ud
|
|
WHERE o.mld_typeopdr_key = 261 -- SVD
|
|
AND o.mld_statusopdr_key = so.mld_statusopdr_key
|
|
AND m.mld_melding_key = o.mld_melding_key
|
|
AND m.prs_perslid_key = pf.prs_perslid_key
|
|
AND 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 o.mld_opdr_key = om.mld_opdr_key
|
|
AND om.fac_usrdata_key = ud.fac_usrdata_key;
|
|
|
|
-- View om de beschikbaarheid van de koffieautomaten inzichtelijke te krijgen. De meetperiode is 2 maanden.
|
|
-- De tijd dat het apparaat in storing is wordt vergelijken met de beschikbaarheid
|
|
-- Hiermee wordt rekening gehouden met indult en overlappende meldingen. Ook overlap met andere maanden.
|
|
-- Er wordt geen rekening gehouden met respijt dat gegeven wordt op een melding omdat je dan bij meldingen die
|
|
-- een maandgrens overschrijden niet weet in welke periode de respijt valt.
|
|
|
|
CREATE OR REPLACE VIEW pghe_v_koffie_storingen
|
|
AS
|
|
SELECT pchx_mon.get_first_melding (mld_melding_key, 1) m_start,
|
|
mld_melding_datum,
|
|
COALESCE (fac.gettrackingdate ('MLDAFM', mld_melding_key),
|
|
SYSDATE) afgemeld,
|
|
mld_alg_onroerendgoed_keys,
|
|
alg_ruimte_nr
|
|
FROM mld_melding m, alg_ruimte r
|
|
WHERE mld_stdmelding_key = 91 -- beschikbaarheid warme dranken
|
|
AND pchx_mon.klant_melding (mld_melding_key) = 1
|
|
AND mld_melding_indult = 0
|
|
AND m.mld_alg_onroerendgoed_keys = r.alg_ruimte_key;
|
|
|
|
CREATE OR REPLACE VIEW pghe_v_rap_beschikb_koffie1
|
|
AS
|
|
SELECT mnth_begin mnth_begin,
|
|
mnth_einde-1 mnth_einde,
|
|
alg_ruimte_nr,
|
|
beschikbaar,
|
|
storing,
|
|
ROUND ((beschikbaar - COALESCE (storing, 0)) * 100 / beschikbaar, 2) beschikbaarheid
|
|
FROM ( SELECT mnth_begin,
|
|
mnth_einde,
|
|
alg_ruimte_key,
|
|
SUM (FAC.datumtijdnaaruitvoertijd (m_begin_cor, m_einde_cor, 'U', 8, 18, 1).tijdsduur) storing,
|
|
FAC.datumtijdnaaruitvoertijd (mnth_begin, mnth_einde, 'U', 8, 18, 1).tijdsduur beschikbaar
|
|
FROM (WITH
|
|
months
|
|
AS
|
|
(SELECT *
|
|
FROM ( SELECT TRUNC (ADD_MONTHS (SYSDATE, (-1 * LEVEL) + 1), 'MM') month
|
|
FROM DUAL
|
|
CONNECT BY LEVEL <= 4),
|
|
(SELECT alg_ruimte_key
|
|
FROM ins_v_deel_gegevens
|
|
WHERE ins_srtdeel_key = 1))
|
|
SELECT mnth_begin,
|
|
mnth_einde,
|
|
m_start,
|
|
m_begin,
|
|
m_einde,
|
|
DECODE (SIGN (m_begin - mnth_begin),
|
|
-1, mnth_begin,
|
|
m_begin) m_begin_cor,
|
|
DECODE (SIGN (m_einde - mnth_einde),
|
|
1, mnth_einde,
|
|
m_einde) m_einde_cor,
|
|
alg_ruimte_key
|
|
FROM (SELECT months.month mnth_begin,
|
|
ADD_MONTHS (months.month, 2) mnth_einde,
|
|
m.mld_alg_onroerendgoed_keys,
|
|
alg_ruimte_key,
|
|
m_start,
|
|
m_begin,
|
|
m_einde
|
|
FROM months
|
|
LEFT JOIN
|
|
( SELECT m_start,
|
|
MIN (mld_melding_datum) m_begin,
|
|
MAX (afgemeld) m_einde,
|
|
mld_alg_onroerendgoed_keys --,
|
|
FROM pghe_v_koffie_storingen
|
|
GROUP BY m_start, mld_alg_onroerendgoed_keys) m
|
|
ON months.month < m_einde AND ADD_MONTHS (months.month, 2) > m_begin
|
|
AND months.alg_ruimte_key =
|
|
m.mld_alg_onroerendgoed_keys))
|
|
GROUP BY mnth_begin, mnth_einde, alg_ruimte_key) mg,
|
|
alg_ruimte r
|
|
WHERE r.alg_ruimte_key = mg.alg_ruimte_key
|
|
ORDER BY alg_ruimte_nr, mnth_begin;
|
|
|
|
CREATE OR REPLACE VIEW pghe_v_rap_beschikb_koffie
|
|
AS
|
|
SELECT mnth_begin,
|
|
mnth_einde,
|
|
alg_ruimte_nr,
|
|
beschikbaar,
|
|
storing,
|
|
beschikbaarheid
|
|
FROM pghe_v_rap_beschikb_koffie1
|
|
UNION ALL
|
|
SELECT mnth_begin,
|
|
mnth_einde,
|
|
'Totaal' alg_ruimte_nr,
|
|
SUM (beschikbaar) beschikbaar,
|
|
SUM (storing) storing,
|
|
ROUND (
|
|
(SUM (beschikbaar) - COALESCE (SUM (storing), 0))
|
|
* 100
|
|
/ SUM (beschikbaar),
|
|
2) beschikbaarheid
|
|
FROM pghe_v_rap_beschikb_koffie1
|
|
GROUP BY mnth_begin, mnth_einde;
|
|
|
|
|
|
CREATE OR REPLACE VIEW PGHE_V_NOTI_SVD_GOEDKEURING
|
|
(
|
|
SENDER,
|
|
RECEIVER,
|
|
TEXT,
|
|
CODE,
|
|
KEY,
|
|
XKEY
|
|
)
|
|
AS
|
|
SELECT DISTINCT
|
|
NULL
|
|
sender,
|
|
gg.prs_perslid_key
|
|
receiver,
|
|
'Facilitor: opdracht '
|
|
|| m.mld_melding_key
|
|
|| '/'
|
|
|| m.mld_opdr_bedrijfopdr_volgnr
|
|
|| ' moet goedgekeurd worden in '
|
|
|| pchx.get_user,
|
|
'CUST14'
|
|
code,
|
|
m.mld_opdr_key
|
|
key,
|
|
NULL
|
|
xkey
|
|
FROM PGHE_V_GOEDKEURING_SVD m,
|
|
fac_srtnotificatie sn,
|
|
fac_tracking t,
|
|
fac_gebruikersgroep gg
|
|
WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
|
|
AND sn.fac_srtnotificatie_code = 'ORDAFR'
|
|
AND t.fac_tracking_refkey = m.mld_opdr_key
|
|
AND m.goedgekeurd IS NULL
|
|
AND t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun
|
|
- fac_notificatie_job_interval
|
|
/ 24
|
|
FROM fac_notificatie_job
|
|
WHERE UPPER (
|
|
fac_notificatie_job_view) =
|
|
'PGHE_V_NOTI_SVD_GOEDKEURING')
|
|
AND (SELECT fac_notificatie_job_nextrun
|
|
FROM fac_notificatie_job
|
|
WHERE UPPER (
|
|
fac_notificatie_job_view) =
|
|
'PGHE_V_NOTI_SVD_GOEDKEURING')
|
|
--Notificatie wordt gestuurd naar de contractbeheerders
|
|
AND gg.fac_groep_key =
|
|
DECODE (pchx.get_user, 'PGHE', 181);
|
|
|
|
CREATE OR REPLACE VIEW pghe_v_noti_bes_delivery
|
|
AS
|
|
SELECT DISTINCT 'CUST16' code,
|
|
NULL sender,
|
|
b.prs_perslid_key_voor receiver,
|
|
'Is jouw bestelling ' || b.bes_bestelling_key || ' al geleverd?' text,
|
|
b.bes_bestelling_key key,
|
|
NULL xkey
|
|
FROM bes_disc_params dp,
|
|
bes_bestelling b,
|
|
bes_bestelling_item bi,
|
|
bes_srtdeel sd,
|
|
bes_srtgroep sg
|
|
WHERE sg.ins_discipline_key = dp.bes_ins_discipline_key
|
|
AND sg.bes_srtgroep_key = sd.bes_srtgroep_key
|
|
AND sd.bes_srtdeel_key = bi.bes_srtdeel_key
|
|
AND bi.bes_bestelling_key = b.bes_bestelling_key
|
|
AND bes_disc_params_deliver_fe = 1
|
|
AND b.bes_bestelling_status = 5 -- besteld
|
|
AND dp.bes_disc_params_noti_dagen IS NOT NULL
|
|
AND b.bes_bestelling_leverdatum + dp.bes_disc_params_noti_dagen = TRUNC (SYSDATE)
|
|
GROUP BY b.bes_bestelling_key, b.prs_perslid_key_voor;
|
|
|
|
------ 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
|