Files
Customer/ARAI/arai.sql
Ruud Lipper 14ccba997c ARAI#37083 QR code rapport
svn path=/Customer/trunk/; revision=31285
2016-10-31 08:15:28 +00:00

10405 lines
442 KiB
MySQL
Raw Blame History

-- Script containing customer specific configuration sql statements for ARAI
-- (c) 2012 SG|facilitor bv
-- $Revision$
-- $Id$
--
-- Support: +31 53 4800700
set echo on
spool ARAI.lst
CREATE OR REPLACE VIEW arai_v_import_log
AS
SELECT imp_log_status fclt_f_status,
imp_log_omschrijving omschrijving,
imp_log_hint opmerking
FROM imp_log
WHERE imp_log_applicatie = 'PRS';
CREATE OR REPLACE PROCEDURE arai_import_prs (
p_import_key IN NUMBER
)
IS
c_fielddelimitor VARCHAR2 (1) := ';';
-- LET OP: moet idem zijn als declaratie bij arai_UPDATE_PRS
v_newline VARCHAR2 (1000); -- Input line
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER := 0;
v_ongeldig NUMBER (1);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_count NUMBER;
-- De importvelden:
v_prs_perslid_nr VARCHAR2 (256);
v_prs_perslid_naam VARCHAR2 (256);
v_prs_perslid_tussenvoegsel VARCHAR2 (256);
v_prs_perslid_voorletters VARCHAR2 (256);
v_prs_perslid_voornaam VARCHAR2 (256);
v_prs_afdeling_naam VARCHAR2 (256);
v_prs_srtperslid_omschrijving VARCHAR2 (256);
v_prs_perslid_telefoonnr VARCHAR2 (256);
v_prs_perslid_email VARCHAR2 (256);
v_prs_perslid_oslogin VARCHAR2 (256);
-- Overig:
v_alg_locatie_code VARCHAR2 (256);
v_alg_gebouw_code VARCHAR2 (256);
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
DELETE FROM arai_imp_prs;
COMMIT;
v_count_tot := 0;
v_count_import := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_aanduiding := '';
v_errorhint := 'Fout bij opvragen te importeren rij';
v_ongeldig := 0;
-- Lees alle veldwaarden
-- 01 - Usernaam/login
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_oslogin);
-- 02 - Afdelingsnaam (niet de code!)
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_afdeling_naam);
-- 03 - Voornaam van medewerker
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_voornaam);
-- 04 - Tussenvoegsels van medewerker
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_tussenvoegsel);
-- 05 - Naam van medewerkers = voornaam, tussenvoegsels en achternaam
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_naam);
-- 06 - Email adres van medewerker
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_email);
-- Verplicht
-- fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_srtperslid_omschrijving);
v_prs_srtperslid_omschrijving := 'Onbekend';
--fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_locatie_code);
v_alg_locatie_code := NULL;
--fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_gebouw_code);
v_alg_gebouw_code := NULL;
-- fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_voorletters);
v_prs_perslid_voorletters := NULL;
-- fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_telefoonnr);
v_prs_perslid_telefoonnr := NULL;
-- fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_nr);
v_prs_perslid_nr := NULL;
--
v_aanduiding :=
'['
|| v_prs_perslid_oslogin
|| '|'
|| v_prs_perslid_naam
|| '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (v_prs_perslid_oslogin) = 'USERNAAM'
AND UPPER (v_prs_afdeling_naam) = 'AFDELING'
AND UPPER (v_prs_perslid_voornaam) = 'VOORNAAM'
AND UPPER (v_prs_perslid_tussenvoegsel) = 'TUSSENVOEGSELS'
AND UPPER (v_prs_perslid_naam) = 'ACHTERNAAM'
AND UPPER (v_prs_perslid_email) = 'E-MAIL'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
--
v_errorhint := 'Ongeldig loginnaam';
v_prs_perslid_oslogin := TRIM (v_prs_perslid_oslogin);
IF LENGTH (v_prs_perslid_oslogin) > 30
THEN
v_prs_perslid_oslogin := SUBSTR (v_prs_perslid_oslogin, 1, 30);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Loginnaam te lang',
'Loginnaam wordt afgebroken tot ['
|| v_prs_perslid_oslogin
|| ']'
);
ELSE
IF (v_prs_perslid_oslogin IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog
(p_import_key,
'E',
v_aanduiding || 'Usernaam/login onbekend',
'Usernaam/login is verplicht; regel wordt overgeslagen!'
);
END IF;
END IF;
COMMIT;
--
v_errorhint := 'Ongeldig e-mailadres';
v_prs_perslid_email := TRIM (v_prs_perslid_email);
IF LENGTH (v_prs_perslid_email) > 200
THEN
v_prs_perslid_email := SUBSTR (v_prs_perslid_email, 1, 200);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'E-mailadres te lang',
'E-mailadres wordt afgebroken tot ['
|| v_prs_perslid_email
|| ']'
);
COMMIT;
END IF;
v_errorhint := 'Ongeldig personeelsnummer';
v_prs_perslid_nr := TRIM (v_prs_perslid_nr);
IF LENGTH (v_prs_perslid_nr) > 16
THEN
v_prs_perslid_nr := SUBSTR (v_prs_perslid_nr, 1, 16);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Personeelsnummer te lang',
'Personeelsnummer wordt afgebroken tot ['
|| v_prs_perslid_nr
|| ']'
);
END IF;
COMMIT;
--
v_errorhint := 'Ongeldige naam';
v_prs_perslid_naam := TRIM (v_prs_perslid_naam);
IF LENGTH (v_prs_perslid_naam) > 30
THEN
v_prs_perslid_naam := SUBSTR (v_prs_perslid_naam, 1, 30);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Naam te lang',
'Naam wordt afgebroken tot ['
|| v_prs_perslid_naam
|| ']'
);
ELSE
IF (v_prs_perslid_naam IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog
(p_import_key,
'E',
v_aanduiding || 'Naam onbekend',
'Naam is verplicht; regel wordt overgeslagen!'
);
END IF;
END IF;
COMMIT;
--
v_errorhint := 'Ongeldig tussenvoegsel';
v_prs_perslid_tussenvoegsel := TRIM (v_prs_perslid_tussenvoegsel);
IF LENGTH (v_prs_perslid_tussenvoegsel) > 15
THEN
v_prs_perslid_tussenvoegsel :=
SUBSTR (v_prs_perslid_tussenvoegsel, 1, 15);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Tussenvoegsel te lang',
'Tussenvoegsel wordt afgebroken tot ['
|| v_prs_perslid_tussenvoegsel
|| ']'
);
COMMIT;
END IF;
--
v_errorhint := 'Ongeldige voorletters';
v_prs_perslid_voorletters := TRIM (v_prs_perslid_voorletters);
IF LENGTH (v_prs_perslid_voorletters) > 10
THEN
v_prs_perslid_voorletters :=
SUBSTR (v_prs_perslid_voorletters, 1, 10);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Voorletters te lang',
'Voorletters worden afgebroken tot ['
|| v_prs_perslid_voorletters
|| ']'
);
COMMIT;
END IF;
--
v_errorhint := 'Ongeldige voornaam';
v_prs_perslid_voornaam := TRIM (v_prs_perslid_voornaam);
IF LENGTH (v_prs_perslid_voornaam) > 30
THEN
v_prs_perslid_voornaam :=
SUBSTR (v_prs_perslid_voornaam, 1, 30);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Voornaam is te lang',
'Voornaam wordt afgebroken tot ['
|| v_prs_perslid_voornaam
|| ']'
);
END IF;
COMMIT;
-- Let op: bij ARAI zijn er geen afdelingscodes, zij gebruiken de hele afdelingnaam cq. omschrijving als unieke ID voor afdeling
v_errorhint := 'Ongeldige afdeling';
v_prs_afdeling_naam := TRIM (v_prs_afdeling_naam);
IF LENGTH (v_prs_afdeling_naam) > 60
THEN
v_prs_afdeling_naam := SUBSTR (v_prs_afdeling_naam, 1, 60);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Afdelingsnaam te lang',
'Afdelingsnaam wordt afgebroken tot ['
|| v_prs_afdeling_naam
|| ']'
);
ELSE
IF (v_prs_afdeling_naam IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog
(p_import_key,
'E',
v_aanduiding || 'Afdelingsnaam onbekend',
'Afdelingsnaam is verplicht; regel wordt overgeslagen!'
);
END IF;
END IF;
COMMIT;
--
v_errorhint := 'Ongeldige functie';
v_prs_srtperslid_omschrijving := TRIM (v_prs_srtperslid_omschrijving);
IF LENGTH (v_prs_srtperslid_omschrijving) > 30
THEN
v_prs_srtperslid_omschrijving :=
SUBSTR (v_prs_srtperslid_omschrijving, 1, 30);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Functie te lang',
'Functie wordt afgebroken tot ['
|| v_prs_srtperslid_omschrijving
|| ']'
);
ELSE
IF (v_prs_srtperslid_omschrijving IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog
(p_import_key,
'E',
v_aanduiding || 'Functie onbekend',
'Functie is verplicht; regel wordt overgeslagen!'
);
END IF;
END IF;
COMMIT;
--
v_errorhint := 'Ongeldige plaats/locatiecode';
v_alg_locatie_code := TRIM(v_alg_locatie_code);
IF LENGTH (v_alg_locatie_code) > 5
THEN
v_alg_locatie_code := SUBSTR (v_alg_locatie_code, 1, 5);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Locatiecode te lang',
'Locatiecode wordt afgebroken tot ['
|| v_alg_locatie_code
|| ']'
);
COMMIT;
END IF;
--
v_errorhint := 'Ongeldige plaats/gebouwcode';
v_alg_gebouw_code := TRIM(v_alg_gebouw_code);
IF LENGTH (v_alg_gebouw_code) > 10
THEN
v_alg_gebouw_code := SUBSTR (v_alg_gebouw_code, 1, 10);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Gebouwcode te lang',
'Gebouwcode wordt afgebroken tot ['
|| v_alg_gebouw_code
|| ']'
);
COMMIT;
END IF;
--
v_errorhint := 'Ongeldig telefoonnummer';
v_prs_perslid_telefoonnr := TRIM (v_prs_perslid_telefoonnr);
IF LENGTH (v_prs_perslid_telefoonnr) > 15
THEN
v_prs_perslid_telefoonnr :=
SUBSTR (v_prs_perslid_telefoonnr, 1, 15);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Telefoonnummer te lang',
'Telefoonnummer wordt afgebroken tot ['
|| v_prs_perslid_telefoonnr
|| ']'
);
COMMIT;
END IF;
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errorhint :=
'Fout bij toevoegen regel aan importtabel arai_IMP_PRS';
INSERT INTO arai_imp_prs
(prs_perslid_nr, prs_perslid_naam,
prs_perslid_tussenvoegsel,
prs_perslid_voorletters,
prs_perslid_voornaam, prs_afdeling_naam,
prs_srtperslid_omschrijving,
alg_locatie_code, alg_gebouw_code,
alg_verdieping_volgnr, alg_ruimte_nr,
prs_perslid_telefoonnr,
prs_perslid_email,
prs_perslid_oslogin
)
VALUES (v_prs_perslid_nr, v_prs_perslid_naam,
v_prs_perslid_tussenvoegsel,
v_prs_perslid_voorletters,
v_prs_perslid_voornaam, v_prs_afdeling_naam,
v_prs_srtperslid_omschrijving,
v_alg_locatie_code, v_alg_gebouw_code,
NULL, NULL,
v_prs_perslid_telefoonnr,
v_prs_perslid_email,
v_prs_perslid_oslogin
);
COMMIT;
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog
(p_import_key,
'E',
v_aanduiding || v_errormsg,
'Ingelezen regel kan niet worden weggeschreven!'
);
COMMIT;
END;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
'Ongeldig importbestand',
'Geen header of header niet volgens specificatie!'
);
ELSE
fac.imp_writelog (p_import_key,
'S',
'Persoon: aantal ingelezen regels: '
|| TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (p_import_key,
'S',
'Persoon: aantal ongeldige importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
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',
v_aanduiding || v_errormsg,
v_errorhint
);
COMMIT;
END arai_import_prs;
/
CREATE OR REPLACE PROCEDURE arai_update_prs (
p_import_key IN NUMBER
)
IS
-- LET OP: moet idem zijn als declaratie bij arai_IMPORT_PRS
c_persoon_inactief VARCHAR2 (30) := 'INACTIEF: ';
-- Maximaal percentage aan nieuwe medewerkers tov. actieve medewerkers met een nummer
c_max_delta_percentage NUMBER (10) := 20;
-- Ruimte waar personen in geplaatst worden (indien nog geen ruimte in opgegeven gebouw)
c_ruimte_nr VARCHAR2 (10) := '000';
-- Groep waar personen in geplaatst worden (indien nog geen groep)
c_groep_upper VARCHAR2 (30) := '_DEFAULT';
c_key_default_rol NUMBER(10) := 1;
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count_prs_actual NUMBER (10);
v_count_prs_import NUMBER (10); -- Matching actual persons!
v_count_tot NUMBER (10);
v_count_error NUMBER (10);
v_count NUMBER (10);
--
v_perslid_key NUMBER (10);
v_afdeling_key NUMBER (10);
v_srtperslid_key NUMBER (10);
v_locatie_key NUMBER (10);
v_gebouw_key NUMBER (10);
v_verdieping_key NUMBER (10);
v_ruimte_key NUMBER (10);
v_wp_key NUMBER (10);
v_wp_volgnr NUMBER (3);
v_wp_oms VARCHAR2 (30);
v_groep_defaultnaam VARCHAR2 (30);
-- Alle personen in Facilitor en niet in AD-dump, obv login-naam
CURSOR cdelprs
IS
SELECT p.prs_perslid_key, p.prs_perslid_nr, p.prs_perslid_naam,
p.prs_perslid_voornaam, p.prs_perslid_oslogin, prs_srtperslid_key, prs_perslid_einddatum
FROM prs_v_aanwezigperslid p
WHERE p.prs_perslid_oslogin IS NOT NULL
AND SUBSTR(p.prs_perslid_oslogin,1,1) != '_'
AND NOT EXISTS (
SELECT 1
FROM arai_imp_prs ip
WHERE UPPER(ip.prs_perslid_oslogin) = UPPER(p.prs_perslid_oslogin));
-- Alle functies uit AD-dump.
CURSOR csperslid
IS
SELECT UPPER(prs_srtperslid_omschrijving) prs_srtperslid_omschrijving
FROM arai_imp_prs
GROUP BY UPPER (prs_srtperslid_omschrijving);
-- Alle personen uit AD-dump
CURSOR cperslid
IS
SELECT *
FROM arai_imp_prs;
-- Alle personen uit AD-dump met een locatie en gebouw, deze cursor is nu leeg, want RAI heeft deze locatie/gebouw gegevens niet.
CURSOR cwp
IS
SELECT p.*, ip.alg_locatie_code, ip.alg_gebouw_code
FROM arai_imp_prs ip, prs_v_aanwezigperslid p
WHERE ip.alg_locatie_code IS NOT NULL
AND ip.alg_gebouw_code IS NOT NULL
AND UPPER (ip.prs_perslid_oslogin) = UPPER (p.prs_perslid_oslogin);
-- Alle ACTIEVE personen MET login (ie. de import-doelgroep) ZONDER een werkplek
CURSOR cnowp
IS
SELECT p.prs_perslid_key, p.prs_perslid_nr, p.prs_perslid_naam,
p.prs_perslid_voornaam, p.prs_perslid_oslogin
FROM prs_v_aanwezigperslid p
WHERE p.prs_perslid_oslogin IS NOT NULL
AND p.prs_perslid_naam NOT LIKE c_persoon_inactief || '%'
AND NOT EXISTS (SELECT 1
FROM prs_perslidwerkplek pw
WHERE pw.prs_perslid_key = p.prs_perslid_key);
-- Alle aanwezige personen met login (ie. de import-doelgroep) niet in een autorisatiegroep
CURSOR cnogroup
IS
SELECT p.prs_perslid_key, p.prs_perslid_nr, p.prs_perslid_naam,
p.prs_perslid_voornaam, p.prs_perslid_oslogin
FROM prs_v_aanwezigperslid p
WHERE p.prs_perslid_oslogin IS NOT NULL
AND NOT EXISTS (SELECT 1
FROM fac_gebruikersgroep g
WHERE g.prs_perslid_key = p.prs_perslid_key);
BEGIN
-- Tel aantal personen in Facilitor (zonder verwijder-datum) met een login.
SELECT DECODE (COUNT (*), 0, 1, COUNT (*))
INTO v_count_prs_actual
FROM prs_perslid
WHERE prs_perslid_verwijder IS NULL AND prs_perslid_oslogin IS NOT NULL;
-- Tel aantal personen in AD dump met een os-login.
SELECT DECODE (COUNT (*), 0, 1, COUNT (*))
INTO v_count_prs_import
FROM arai_imp_prs ip
WHERE prs_perslid_oslogin IS NOT NULL;
IF ( (TRUNC ((v_count_prs_import / v_count_prs_actual) * 100) >=
(100 - c_max_delta_percentage
)
)
)
THEN
-- Verschil tussen aantal te importeren personen t.o.v. het aantal bestaande personen ligt boven de 20% veiligheidsgrens (c_max_delta_percentage),
-- om te voorkomen dat er een ongeldige dump wordt geleverd waarin (bijna) alle personen worden verwijderd.
-- M.a.w. Geldig importbestand wat betreft aantal personen
-- Eerst de personen verwijderen...
FOR recdelprs IN cdelprs
LOOP
BEGIN
-- Voor externen, stagiairs etc die NIET in AD-export staan maar handmatig worden toegevoegd, moeten een einddatum krijgen.
-- Als die einddatum niet is ingevuld, dan wordt de persoon als die niet meer uit AD komt, gewoon verwijderd.
-- Als die einddatum wel is ingevuldm dan wordt de persoon pas verwijderd als de einddatum gepasseerd is.
IF (recdelprs.prs_perslid_einddatum IS NULL or recdelprs.prs_perslid_einddatum < TRUNC(SYSDATE))
THEN
--- Als persoon een geen ingevulde einddatum heeft of een einddatum die in het verleden ligt, en NIET in AD-export staat, dan verwijderen.
-- Heeft persoon actuele/toekomstige verplichtingen?
SELECT COUNT (*)
INTO v_count
FROM prs_perslid p, prs_v_verplichting_keys r
WHERE p.prs_perslid_key = r.prs_perslid_key
AND p.prs_perslid_key = recdelprs.prs_perslid_key;
IF (v_count = 0)
THEN
v_errorhint := 'Fout bij verwijderen persoon';
UPDATE prs_perslid
SET prs_perslid_verwijder = SYSDATE
WHERE prs_perslid_key = recdelprs.prs_perslid_key;
fac.imp_writelog (p_import_key,
'I',
'Persoon met login ['
|| recdelprs.prs_perslid_oslogin
|| '] en naam ['
|| recdelprs.prs_perslid_naam
|| ', '
|| recdelprs.prs_perslid_voornaam
|| '] is verwijderd',
'Persoon is verwijderd'
);
COMMIT;
ELSE
-- Staat persoon INACTIEF?
SELECT COUNT (*)
INTO v_count
FROM prs_perslid p
WHERE p.prs_perslid_naam LIKE c_persoon_inactief || '%'
AND p.prs_perslid_key = recdelprs.prs_perslid_key;
IF (v_count = 0)
THEN
v_errorhint := 'Fout bij INACTIEF zetten persoon';
-- Persoon INACTIEF zetten (update naam + reset oslogin)
UPDATE prs_perslid
SET prs_perslid_naam =
SUBSTR (c_persoon_inactief || prs_perslid_naam,
1,
30
),
prs_perslid_oslogin = NULL
WHERE prs_perslid_key = recdelprs.prs_perslid_key;
fac.imp_writelog (p_import_key,
'I',
'Persoon met usernaam ['
|| recdelprs.prs_perslid_oslogin
|| '] en naam ['
|| recdelprs.prs_perslid_naam
|| ', '
|| recdelprs.prs_perslid_voornaam
|| '] is INACTIEF gezet',
'Persoon is INACTIEF gezet'
);
ELSE
v_errorhint := 'Fout bij INACTIEF maken persoon';
-- Persoon INACTIEF maken (reset oslogin; indien handmatig INACTIEF gezet)
UPDATE prs_perslid
SET prs_perslid_oslogin = NULL
WHERE prs_perslid_naam LIKE c_persoon_inactief || '%'
AND prs_perslid_oslogin IS NOT NULL
AND prs_perslid_key = recdelprs.prs_perslid_key;
fac.imp_writelog (p_import_key,
'I',
'Persoon met usernaam ['
|| recdelprs.prs_perslid_oslogin
|| '] en naam ['
|| recdelprs.prs_perslid_naam
|| ', '
|| recdelprs.prs_perslid_voornaam
|| '] is INACTIEF gemaakt',
'Persoon is INACTIEF gemaakt'
);
END IF;
COMMIT;
END IF;
ELSE
fac.imp_writelog (p_import_key,
'I',
'Extern persoon met login ['
|| recdelprs.prs_perslid_oslogin
|| '] en naam ['
|| recdelprs.prs_perslid_naam
|| ', '
|| recdelprs.prs_perslid_voornaam
|| '] is nog NIET verwijderd agv einddatum',
'Extern persoon NIET verwijderd'
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_errorhint
);
COMMIT;
END;
END LOOP;
v_count_tot := 0;
v_count_error := 0;
FOR recsperslid IN csperslid
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding := recsperslid.prs_srtperslid_omschrijving || ' - ';
v_errorhint := 'Fout bij bepalen functie';
SELECT COUNT (*)
INTO v_count
FROM prs_srtperslid
WHERE UPPER (prs_srtperslid_omschrijving) =
UPPER (recsperslid.prs_srtperslid_omschrijving)
AND prs_srtperslid_verwijder IS NULL;
IF (v_count = 0)
THEN
v_errorhint := 'Fout bij toevoegen functie';
INSERT INTO prs_srtperslid
(prs_srtperslid_omschrijving
)
VALUES (recsperslid.prs_srtperslid_omschrijving
);
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint
);
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Functie: verwerkte regels zonder foutmelding: '
|| TO_CHAR (v_count_tot - v_count_error),
''
);
fac.imp_writelog (p_import_key,
'S',
'Functie: verwerkte regels met foutmelding: '
|| TO_CHAR (v_count_error),
''
);
COMMIT;
v_count_tot := 0;
v_count_error := 0;
-- Alle personen uit AD-dump scannen...
FOR recperslid IN cperslid
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding :=
recperslid.prs_perslid_oslogin
|| '|'
|| recperslid.prs_perslid_naam
|| '|'
|| recperslid.prs_perslid_voornaam
|| ' - ';
v_errorhint :=
'Fout bij bepalen functie ['
|| recperslid.prs_srtperslid_omschrijving
|| ']';
SELECT prs_srtperslid_key
INTO v_srtperslid_key
FROM prs_srtperslid
WHERE prs_srtperslid_verwijder IS NULL
AND UPPER (prs_srtperslid_omschrijving) =
UPPER (recperslid.prs_srtperslid_omschrijving);
v_errorhint :=
'Fout bij bepalen afdeling ['
|| recperslid.prs_afdeling_naam
|| ']';
-- Let op: bij de RAI wordt geen afdelingscode(naam) gebruikt, maar zij kennen alleen de afdelings!!OMSCHRIJVING!!!! als unieke naam.
SELECT prs_afdeling_key
INTO v_afdeling_key
FROM prs_afdeling
WHERE prs_afdeling_verwijder IS NULL
AND UPPER (prs_afdeling_omschrijving) =
UPPER (recperslid.prs_afdeling_naam);
v_errorhint := 'Fout bij bepalen persoon';
SELECT COUNT (*), MAX (prs_perslid_key)
INTO v_count, v_perslid_key
FROM prs_perslid
WHERE prs_perslid_verwijder IS NULL
AND UPPER (prs_perslid_oslogin) = UPPER (recperslid.prs_perslid_oslogin);
IF (v_count = 0)
THEN
v_errorhint := 'Fout bij toevoegen persoon';
-- Nieuwe persoon uit AD-dump, wordt toegevoegd in Facilitor.
INSERT INTO prs_perslid
(prs_perslid_module, prs_srtperslid_key,
prs_afdeling_key, prs_perslid_naam,
prs_perslid_voorletters,
prs_perslid_tussenvoegsel,
prs_perslid_voornaam,
prs_perslid_telefoonnr,
prs_perslid_email,
prs_perslid_nr, prs_perslid_oslogin
)
VALUES ('PRS', v_srtperslid_key,
v_afdeling_key, recperslid.prs_perslid_naam,
recperslid.prs_perslid_voorletters,
recperslid.prs_perslid_tussenvoegsel,
recperslid.prs_perslid_voornaam,
recperslid.prs_perslid_telefoonnr,
recperslid.prs_perslid_email,
recperslid.prs_perslid_nr, recperslid.prs_perslid_oslogin
);
COMMIT;
ELSE
v_errorhint := 'Fout bij wijzigen persoon';
-- Functie, Afdeling, Naam, Voorletters, Tuusenvoegsels, Voornaam en Personeelsnummer altijd bijwerken
-- Telefoonnr: alleen bijwerken indien uit AD-dump gevuld, anders niet bijwerken (dus gewoon laten staan zoals in Facilitor was gereigistreerd).
-- E-mail: alleen bijwerken indien uit AD-dump gevuld, anders niet bijwerken (dus gewoon laten staan zoals in Facilitor was gereigistreerd).
-- Personeelsnr: alleen bijwerken indien uit AD-dump gevuld, anders niet bijwerken (dus gewoon laten staan zoals in Facilitor was gereigistreerd).
UPDATE prs_perslid
SET prs_srtperslid_key = v_srtperslid_key,
prs_afdeling_key = v_afdeling_key,
prs_perslid_naam = recperslid.prs_perslid_naam,
prs_perslid_voorletters = recperslid.prs_perslid_voorletters,
prs_perslid_tussenvoegsel = recperslid.prs_perslid_tussenvoegsel,
prs_perslid_voornaam = recperslid.prs_perslid_voornaam,
prs_perslid_telefoonnr = COALESCE (recperslid.prs_perslid_telefoonnr, prs_perslid_telefoonnr),
prs_perslid_email = COALESCE (recperslid.prs_perslid_email, prs_perslid_email),
prs_perslid_nr = COALESCE (recperslid.prs_perslid_nr, prs_perslid_nr)
WHERE prs_perslid_key = v_perslid_key;
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint
);
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Persoon: verwerkte regels zonder foutmelding: '
|| TO_CHAR (v_count_tot - v_count_error),
''
);
fac.imp_writelog (p_import_key,
'S',
'Persoon: verwerkte regels met foutmelding: '
|| TO_CHAR (v_count_error),
''
);
COMMIT;
v_count_tot := 0;
v_count_error := 0;
-- Iedereen krijgt _default-rol die nog geen groep heeft.
FOR recnogroup IN cnogroup
LOOP
BEGIN
v_aanduiding :=
recnogroup.prs_perslid_oslogin
|| '|'
|| recnogroup.prs_perslid_naam
|| '|'
|| recnogroup.prs_perslid_voornaam
|| ' - ';
v_errorhint := 'Fout bij bepalen groep met key [' || c_key_default_rol || ']';
SELECT fac_groep_upper
INTO v_groep_defaultnaam
FROM fac_groep
WHERE fac_groep_key = c_key_default_rol;
v_errorhint :=
'Fout bij koppelen persoon aan groep met key [' || c_key_default_rol || ']';
INSERT INTO fac_gebruikersgroep
(fac_groep_key, prs_perslid_key
)
VALUES (c_key_default_rol, recnogroup.prs_perslid_key
);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_errorhint
);
COMMIT;
END;
END LOOP;
ELSE
fac.imp_writelog
(p_import_key,
'E',
'Verschil tussen het actuele aantal en het te importeren aantal personen te groot; zie specificatie!',
'- max. verschilpercentage = ['
|| TO_CHAR (c_max_delta_percentage)
|| '%] <br> '
|| '- #personen importbestand = ['
|| TO_CHAR (v_count_prs_import)
|| '] <br> '
|| '- #personen Facilitor = ['
|| TO_CHAR (v_count_prs_actual)
|| ']'
);
COMMIT;
END IF; -- Geldig importbestand wat betreft aantal inserts
COMMIT;
END arai_update_prs;
/
CREATE OR REPLACE VIEW arai_v_rap_uitdienst
( Medewerker,
Afdeling,
Login,
Einddatum
)
AS
SELECT pf.prs_perslid_naam_full, a.prs_afdeling_omschrijving, p.prs_perslid_oslogin, TO_CHAR(prs_perslid_einddatum,'YYYY-MM-DD')
FROM prs_v_aanwezigperslid p, prs_afdeling a, prs_v_perslid_fullnames pf
WHERE p.prs_afdeling_key = a.prs_afdeling_key
AND p.prs_perslid_key = pf.prs_perslid_key
AND prs_perslid_einddatum IS NOT NULL
AND SUBSTR(p.prs_perslid_oslogin,1,1) != '_';
-- Alle (potentiele) uitvoerders met de disciplines waarvoor ze uitvoerder kunnen zijn.
CREATE OR REPLACE VIEW arai_v_uitvoerders
AS
SELECT DISTINCT p.prs_perslid_key,
pf.prs_perslid_naam_full,
p.prs_perslid_naam,
p.prs_perslid_voornaam,
p.prs_perslid_voorletters,
p.prs_perslid_dienstverband,
sp.prs_srtperslid_omschrijving,
p.prs_afdeling_key,
a.prs_afdeling_omschrijving,
d.ins_discipline_key,
d.ins_discipline_omschrijving
FROM prs_perslid p, prs_srtperslid sp, prs_afdeling a, mld_discipline d, fac_groeprechten gr, fac_gebruikersgroep gg, fac_functie f, prs_v_perslid_fullnames pf
WHERE p.prs_perslid_key = gg.prs_perslid_key
AND p.prs_perslid_key = pf.prs_perslid_key
AND p.prs_srtperslid_key = sp.prs_srtperslid_key
AND p.prs_afdeling_key = a.prs_afdeling_key
AND gr.fac_groep_key = gg.fac_groep_key
AND gr.ins_discipline_key = d.ins_discipline_key
AND gr.fac_functie_key = f.fac_functie_key
AND f.fac_functie_code = 'WEB_MLDORD';
CREATE OR REPLACE VIEW ARAI_V_UITVOERDERS_FULL
AS SELECT DISTINCT PRS_PERSLID_KEY, PRS_PERSLID_NAAM_FULL FROM arai_v_uitvoerders;
-- Teamlid welke nu (!), op dit moment (!) een (of meer) lopende opdracht(en) heeft.
-- Alle uitvoerders met alle opdrachten in de tijd uitgezet.
CREATE OR REPLACE VIEW arai_v_opdr_uitvoerders
AS
SELECT p.prs_perslid_key,
pf.prs_perslid_naam_full,
p.prs_perslid_naam,
p.prs_perslid_voornaam,
p.prs_perslid_voorletters,
p.prs_perslid_dienstverband,
p.prs_afdeling_key,
a.prs_afdeling_omschrijving,
o.mld_melding_key,
o.mld_opdr_key,
o.mld_opdr_datumbegin,
o.mld_opdr_einddatum,
o.mld_opdr_uren,
o.mld_statusopdr_key,
s.mld_statusopdr_omschrijving
FROM prs_perslid p, mld_opdr o, mld_statusopdr s, prs_afdeling a, prs_v_perslid_fullnames pf
WHERE p.prs_perslid_key = o.mld_uitvoerende_keys
AND p.prs_perslid_key = pf.prs_perslid_key
AND o.mld_statusopdr_key = s.mld_statusopdr_key
AND p.prs_afdeling_key = a.prs_afdeling_key;
CREATE OR REPLACE VIEW arai_v_opdr_uitvoerders_all
AS
SELECT prs_perslid_key,
prs_perslid_naam_full,
prs_perslid_naam,
prs_perslid_voornaam,
prs_perslid_voorletters,
prs_perslid_dienstverband,
prs_afdeling_key,
prs_afdeling_omschrijving,
mld_melding_key,
mld_opdr_key,
MLD_OPDR_DATUMBEGIN,
MLD_OPDR_EINDDATUM,
MLD_OPDR_UREN,
MLD_STATUSOPDR_OMSCHRIJVING
FROM arai_v_opdr_uitvoerders
WHERE MLD_STATUSOPDR_KEY In (5,8)
UNION
SELECT DISTINCT prs_perslid_key,
prs_perslid_naam_full,
prs_perslid_naam,
prs_perslid_voornaam,
prs_perslid_voorletters,
prs_perslid_dienstverband,
prs_afdeling_key,
prs_afdeling_omschrijving,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL
FROM arai_v_uitvoerders p WHERE NOT EXISTS (SELECT 'x' FROM arai_v_opdr_uitvoerders u WHERE u.prs_perslid_key = p.prs_perslid_key);
CREATE OR REPLACE VIEW arai_v_opdr_uitvoerders_grp
( prs_perslid_key,
prs_perslid_naam_full,
prs_perslid_naam,
prs_perslid_voornaam,
prs_perslid_voorletters,
prs_perslid_dienstverband_uren,
prs_afdeling_key,
prs_afdeling_omschrijving,
aantal_opdrachten,
som_MLD_OPDR_UREN,
url)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full,
prs_perslid_naam,
prs_perslid_voornaam,
prs_perslid_voorletters,
coalesce(40*prs_perslid_dienstverband/100,0),
prs_afdeling_key,
prs_afdeling_omschrijving,
count(mld_opdr_key),
coalesce(SUM(MLD_OPDR_UREN),0),
'appl/mld/opdr_search.asp?urole=bo' || '&' || 'autosearch=1' || '&' || 'handler_key=' || prs_perslid_key
FROM arai_v_opdr_uitvoerders_all
GROUP BY prs_perslid_key,
prs_perslid_naam_full,
prs_perslid_naam,
prs_perslid_voornaam,
prs_perslid_voorletters,
prs_perslid_dienstverband,
prs_afdeling_key,
prs_afdeling_omschrijving;
CREATE OR REPLACE VIEW arai_v_opdr_afdeling_grp
( prs_afdeling_key,
prs_afdeling_omschrijving,
aantal_opdrachten,
som_MLD_OPDR_UREN,
url)
AS
SELECT prs_afdeling_key,
prs_afdeling_omschrijving,
count(mld_opdr_key),
coalesce(SUM(MLD_OPDR_UREN),0),
NULL
FROM arai_v_opdr_uitvoerders_all
GROUP BY prs_afdeling_key,
prs_afdeling_omschrijving;
-- Dienstverband uren van medewerkers bij volle week, dus b.v. 40, 32, 30 etc
-- Beschikbare_uren_groen: normaal dienstverband, maar als ergen midden in de week, dan dienstverband - aantal voorbije dagen * # uren bij medewerker - # uren van vandaag gerekend vanaf 9 uur smorgens
-- Opdracht_uren_rood: opdrachturen bij medewerker, maar niet meer dan Beschikbare_uren_groen
CREATE OR REPLACE VIEW arai_v_opdr_uitvoerders_wk0
(
prs_perslid_key,
prs_afdeling_key,
prs_perslid_naam_full,
prs_perslid_dienstverband_uren,
beschikbare_uren_groen,
opdracht_uren_rood,
url
)
AS
SELECT prs_perslid_key,
prs_afdeling_key,
prs_perslid_naam_full,
prs_perslid_dienstverband_uren,
prs_perslid_dienstverband_uren - ( greatest((to_char(sysdate,'D')-2),0)*(prs_perslid_dienstverband_uren/5) + (to_char(sysdate,'HH24') - 9) ) beschikbare_uren_groen,
least(som_MLD_OPDR_UREN, prs_perslid_dienstverband_uren - (greatest((to_char(sysdate,'D')-2),0)*(prs_perslid_dienstverband_uren/5) + (to_char(sysdate,'HH24') - 9) ) ) opdracht_uren_rood,
url
FROM arai_v_opdr_uitvoerders_grp;
CREATE OR REPLACE VIEW arai_v_graph_capac_mdw_week_0
(
prs_perslid_key,
FCLT_XAS_UITVOERDER,
FCLT_YAS_UREN,
FCLT_YAS2_UREN,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full || ' (' || (opdracht_uren_rood) || '/' || beschikbare_uren_groen || ')',
opdracht_uren_rood,
beschikbare_uren_groen - opdracht_uren_rood,
url
FROM arai_v_opdr_uitvoerders_wk0;
CREATE OR REPLACE VIEW arai_v_opdr_uitvoerders_wk1
(
prs_perslid_key,
prs_afdeling_key,
prs_perslid_naam_full,
prs_perslid_dienstverband_uren,
beschikbare_uren_groen,
opdracht_uren_rood,
url
)
AS
SELECT g1.prs_perslid_key,
g1.prs_afdeling_key,
-- g1.prs_perslid_naam_full,
TRIM(SUBSTR(g1.prs_perslid_naam_full, 1, decode (INSTR(g1.prs_perslid_naam_full,' '), 0, LENGTH(g1.prs_perslid_naam_full),INSTR(g1.prs_perslid_naam_full,' ') ))),
g1.prs_perslid_dienstverband_uren,
g1.prs_perslid_dienstverband_uren - least(g1.som_MLD_OPDR_UREN - w0.opdracht_uren_rood , g1.prs_perslid_dienstverband_uren) beschikbare_uren_groen,
least(g1.som_MLD_OPDR_UREN - w0.opdracht_uren_rood , g1.prs_perslid_dienstverband_uren) opdracht_uren_rood,
g1.url
FROM arai_v_opdr_uitvoerders_grp g1, arai_v_opdr_uitvoerders_wk0 w0
WHERE g1.prs_perslid_key = w0.prs_perslid_key;
CREATE OR REPLACE VIEW arai_v_graph_capac_mdw_week_1
(
prs_perslid_key,
FCLT_XAS_UITVOERDER,
FCLT_YAS_UREN,
FCLT_YAS2_UREN,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full || ' (' || (opdracht_uren_rood) || '/' || prs_perslid_dienstverband_uren || ')',
opdracht_uren_rood,
beschikbare_uren_groen,
url
FROM arai_v_opdr_uitvoerders_wk1;
CREATE OR REPLACE VIEW arai_v_opdr_uitvoerders_wk2
(
prs_perslid_key,
prs_afdeling_key,
prs_perslid_naam_full,
prs_perslid_dienstverband_uren,
beschikbare_uren_groen,
opdracht_uren_rood,
url
)
AS
SELECT g1.prs_perslid_key,
g1.prs_afdeling_key,
-- g1.prs_perslid_naam_full,
TRIM(SUBSTR(g1.prs_perslid_naam_full, 1, decode (INSTR(g1.prs_perslid_naam_full,' '), 0, LENGTH(g1.prs_perslid_naam_full),INSTR(g1.prs_perslid_naam_full,' ') ))),
g1.prs_perslid_dienstverband_uren,
g1.prs_perslid_dienstverband_uren - least(g1.som_MLD_OPDR_UREN - w0.opdracht_uren_rood - w1.opdracht_uren_rood, g1.prs_perslid_dienstverband_uren) beschikbare_uren_groen,
least(g1.som_MLD_OPDR_UREN - w0.opdracht_uren_rood - w1.opdracht_uren_rood , g1.prs_perslid_dienstverband_uren) opdracht_uren_rood,
g1.url
FROM arai_v_opdr_uitvoerders_grp g1, arai_v_opdr_uitvoerders_wk0 w0, arai_v_opdr_uitvoerders_wk1 w1
WHERE g1.prs_perslid_key = w0.prs_perslid_key
AND g1.prs_perslid_key = w1.prs_perslid_key;
CREATE OR REPLACE VIEW arai_v_graph_capac_mdw_week_2
(
prs_perslid_key,
FCLT_XAS_UITVOERDER,
FCLT_YAS_UREN,
FCLT_YAS2_UREN,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full || ' (' || (opdracht_uren_rood) || '/' || prs_perslid_dienstverband_uren || ')',
opdracht_uren_rood,
beschikbare_uren_groen,
url
FROM arai_v_opdr_uitvoerders_wk2;
CREATE OR REPLACE VIEW arai_v_graph_capac_TD_week_0
(
prs_perslid_key,
FCLT_XAS_UITVOERDER,
FCLT_YAS_UREN,
FCLT_YAS2_UREN,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full || ' (' || (opdracht_uren_rood) || '/' || beschikbare_uren_groen || ')',
opdracht_uren_rood,
beschikbare_uren_groen - opdracht_uren_rood,
url
FROM arai_v_opdr_uitvoerders_wk0
WHERE prs_afdeling_key = 97;
-- Grafiek van de medewerkers Technische Dienst Electra (key = 98)
CREATE OR REPLACE VIEW arai_v_graph_capac_ELE_week_0
(
prs_perslid_key,
FCLT_XAS_UITVOERDER,
FCLT_YAS_,
FCLT_YAS2_,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full || ' (' || (opdracht_uren_rood) || '/' || beschikbare_uren_groen || ')',
opdracht_uren_rood,
beschikbare_uren_groen - opdracht_uren_rood,
url
FROM arai_v_opdr_uitvoerders_wk0
WHERE prs_afdeling_key = 98;
-- Grafiek van de medewerkers Technische Dienst Werktuigbouw (key = 99)
CREATE OR REPLACE VIEW arai_v_graph_capac_WTB_week_0
(
prs_perslid_key,
FCLT_XAS_UITVOERDER,
FCLT_YAS_,
FCLT_YAS2_,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full || ' (' || (opdracht_uren_rood) || '/' || beschikbare_uren_groen || ')',
opdracht_uren_rood,
beschikbare_uren_groen - opdracht_uren_rood,
url
FROM arai_v_opdr_uitvoerders_wk0
WHERE prs_afdeling_key = 99;
-- Grafiek van de medewerkers Technische Dienst (key = 97)
CREATE OR REPLACE VIEW arai_v_graph_capac_TD_week_1
(
prs_perslid_key,
FCLT_XAS_,
FCLT_YAS_UREN,
FCLT_YAS2_UREN,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full || ' (' || (opdracht_uren_rood) || '/' || prs_perslid_dienstverband_uren || ')',
opdracht_uren_rood,
beschikbare_uren_groen,
url
FROM arai_v_opdr_uitvoerders_wk1
WHERE prs_afdeling_key = 97;
-- Grafiek van de medewerkers Technische Dienst Electra (key = 98)
CREATE OR REPLACE VIEW arai_v_graph_capac_ELE_week_1
(
prs_perslid_key,
FCLT_XAS_,
FCLT_YAS_,
FCLT_YAS2_,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full || ' (' || (opdracht_uren_rood) || '/' || prs_perslid_dienstverband_uren || ')',
opdracht_uren_rood,
beschikbare_uren_groen,
url
FROM arai_v_opdr_uitvoerders_wk1
WHERE prs_afdeling_key = 98;
-- Grafiek van de medewerkers Technische Dienst Werktuigbouw (key = 99)
CREATE OR REPLACE VIEW arai_v_graph_capac_WTB_week_1
(
prs_perslid_key,
FCLT_XAS_,
FCLT_YAS_,
FCLT_YAS2_,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full || ' (' || (opdracht_uren_rood) || '/' || prs_perslid_dienstverband_uren || ')',
opdracht_uren_rood,
beschikbare_uren_groen,
url
FROM arai_v_opdr_uitvoerders_wk1
WHERE prs_afdeling_key = 99;
CREATE OR REPLACE VIEW arai_v_graph_capac_TD_week_2
(
prs_perslid_key,
FCLT_XAS_,
FCLT_YAS_UREN,
FCLT_YAS2_UREN,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full || ' (' || (opdracht_uren_rood) || '/' || prs_perslid_dienstverband_uren || ')',
opdracht_uren_rood,
beschikbare_uren_groen,
url
FROM arai_v_opdr_uitvoerders_wk2
WHERE prs_afdeling_key = 97;
CREATE OR REPLACE VIEW arai_v_graph_capac_ELE_week_2
(
prs_perslid_key,
FCLT_XAS_,
FCLT_YAS_,
FCLT_YAS2_,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full || ' (' || (opdracht_uren_rood) || '/' || prs_perslid_dienstverband_uren || ')',
opdracht_uren_rood,
beschikbare_uren_groen,
url
FROM arai_v_opdr_uitvoerders_wk2
WHERE prs_afdeling_key = 98;
CREATE OR REPLACE VIEW arai_v_graph_capac_WTB_week_2
(
prs_perslid_key,
FCLT_XAS_,
FCLT_YAS_,
FCLT_YAS2_,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full || ' (' || (opdracht_uren_rood) || '/' || prs_perslid_dienstverband_uren || ')',
opdracht_uren_rood,
beschikbare_uren_groen,
url
FROM arai_v_opdr_uitvoerders_wk2
WHERE prs_afdeling_key = 99;
CREATE OR REPLACE VIEW arai_v_capac_mdw_max_weeknr
(max_weeknr)
AS
SELECT ROUND(COALESCE(MAX(som_MLD_OPDR_UREN), 0) / 40 ) + 2
FROM arai_v_opdr_uitvoerders_grp;
CREATE OR REPLACE VIEW arai_v_graph_capac_mdw_all
(
prs_perslid_key,
prs_perslid_naam_full,
prs_perslid_dienstverband_uren,
beschikbare_uren_groen,
opdracht_uren_rood,
url
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full,
prs_perslid_dienstverband_uren,
40 * max_weeknr,
round(som_MLD_OPDR_UREN * (40 / prs_perslid_dienstverband_uren)),
url
FROM arai_v_opdr_uitvoerders_grp, arai_v_capac_mdw_max_weeknr;
CREATE OR REPLACE VIEW arai_v_graph_capac_mdw_totaal
(
prs_perslid_key,
FCLT_XAS_UITVOERDER,
FCLT_YAS_UREN,
-- FCLT_YAS2_WEEKNR,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full || ' (' || prs_perslid_dienstverband_uren || ')',
opdracht_uren_rood,
-- (beschikbare_uren_groen - opdracht_uren_rood),
url
FROM arai_v_graph_capac_mdw_all;
CREATE OR REPLACE VIEW arai_v_graph_aantopdr_mdw_all
(
prs_perslid_key,
FCLT_XAS_UITVOERDER,
FCLT_YAS_AANTAL,
FCLT_URL
)
AS
SELECT prs_perslid_key,
prs_perslid_naam_full,
aantal_opdrachten,
url
FROM arai_v_opdr_uitvoerders_grp;
CREATE OR REPLACE VIEW arai_v_graph_capac_afd_totaal
(
prs_afdeling_key,
FCLT_XAS_AFDELING,
FCLT_YAS_UREN,
-- FCLT_YAS2_WEEKNR,
FCLT_URL
)
AS
SELECT prs_afdeling_key,
prs_afdeling_omschrijving,
som_MLD_OPDR_UREN,
url
FROM arai_v_opdr_afdeling_grp;
CREATE OR REPLACE VIEW arai_v_graph_aantopdr_afd_all
(
prs_afdeling_key,
FCLT_XAS_AFDELING,
FCLT_YAS_AANTAL,
-- FCLT_YAS2_WEEKNR,
FCLT_URL
)
AS
SELECT prs_afdeling_key,
prs_afdeling_omschrijving,
aantal_opdrachten,
url
FROM arai_v_opdr_afdeling_grp;
--CREATE OR REPLACE VIEW arai_v_uren_vd_week
--AS
--SELECT
-- TO_CHAR(SYSDATE, 'YYYY'),
-- TRUNC(TRUNC (SYSDATE, 'IW') + LEVEL),
-- TO_CHAR(TRUNC (SYSDATE, 'IW') + LEVEL/24, 'HH24')
--FROM arai_v_opdr_uitvoerders_grp
--CONNECT BY LEVEL <= (SELECT ROUND(COALESCE(MAX(som_MLD_OPDR_UREN), 0) / 40 ) + 2
-- FROM arai_v_opdr_uitvoerders_grp
-- );
CREATE OR REPLACE VIEW arai_v_sync_alg_ruimte
( alg_ruimte_key,
alg_verdieping_key,
cadlabel
)
AS
SELECT r.alg_ruimte_key,
r.alg_verdieping_key,
coalesce(rk.alg_onrgoedkenmerk_waarde, trim(gk.alg_onrgoedkenmerk_waarde) || ' ' || trim(v.alg_verdieping_code) || ' ' || trim(sr.alg_srtruimte_code) || ' ' || trim(r.alg_ruimte_nr))
FROM alg_v_aanwezigruimte r, alg_verdieping v, alg_gebouw g, alg_onrgoedkenmerk gk, alg_onrgoedkenmerk rk, alg_srtruimte sr
WHERE r.alg_verdieping_key = v.alg_verdieping_key
AND v.alg_gebouw_key = g.alg_gebouw_key
AND sr.alg_srtruimte_key = r.alg_srtruimte_key
AND gk.alg_onrgoed_key= g.alg_gebouw_key
AND gk.alg_kenmerk_key = 1000
AND gk.alg_onrgoed_niveau='G'
AND rk.alg_onrgoed_key (+)= r.alg_ruimte_key
AND rk.alg_kenmerk_key (+) = 1001
AND rk.alg_onrgoed_niveau (+) ='R';
CREATE OR REPLACE VIEW arai_v_rap_urenoverzicht
(fclt_x_meldingnr,
html_meldingnr,
fclt_f_vakgroep,
fclt_f_melding,
fclt_f_gebouw,
fclt_f_verdieping,
fclt_f_ruimte,
opdrachtnr,
uren_gepland,
fclt_f_uitvoerder,
uren_besteed,
fclt_f_jaar,
fclt_f_maand,
fclt_f_weeknr,
fclt_f_datum,
fclt_f_status
)
AS SELECT TO_CHAR(m.mld_melding_key),
'<a onclick=''FcltMgr.openDetail("Appl/MLD/mld_melding.asp?urole=bo&'
|| 'mld_key='
|| m.mld_melding_key
|| '")''>'
|| m.mld_melding_key
|| '</a>'
mld_melding_html,
d.ins_discipline_omschrijving,
sm.mld_stdmelding_omschrijving,
g.alg_gebouw_naam,
to_char(v.alg_verdieping_volgnr),
r.alg_ruimte_nr,
-- o.mld_opdr_key,
-- o.mld_opdr_datumbegin,
-- TRUNC (o.mld_opdr_einddatum) einddatum,
m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr,
o.mld_opdr_uren uren_opdracht,
--p.prs_perslid_key,
--p.prs_perslid_naam,
--p.prs_perslid_tussenvoegsel,
--p.prs_perslid_voorletters,
--p.prs_perslid_voornaam,
pf.prs_perslid_naam_full,
--p.prs_perslid_dienstverband,
--ou.mld_opdr_uren_key,
ou.mld_opdr_uren_besteed,
TO_CHAR (ou.mld_opdr_uren_datum, 'IYYY'),
TO_CHAR (ou.mld_opdr_uren_datum, 'MM'),
TO_CHAR (ou.mld_opdr_uren_datum, 'IW'),
TO_CHAR (ou.mld_opdr_uren_datum, 'IYYY-MM-DD'),
DECODE(ou.mld_opdr_uren_status, 0, coalesce(flx0.fac_locale_xsl_cust, flx0.fac_locale_xsl_tekst),
1, coalesce(flx1.fac_locale_xsl_cust, flx1.fac_locale_xsl_tekst),
2, coalesce(flx2.fac_locale_xsl_cust, flx2.fac_locale_xsl_tekst),
3, coalesce(flx3.fac_locale_xsl_cust, flx3.fac_locale_xsl_tekst),
4, coalesce(flx4.fac_locale_xsl_cust, flx4.fac_locale_xsl_tekst)
)
FROM mld_opdr o, mld_opdr_uren ou, prs_perslid p, prs_v_perslid_fullnames pf, mld_melding m, mld_stdmelding sm, mld_discipline d,
fac_locale_xsl flx0, fac_locale_xsl flx1, fac_locale_xsl flx2, fac_locale_xsl flx3, fac_locale_xsl flx4,
alg_gebouw g, alg_verdieping v, alg_ruimte r
WHERE ou.mld_opdr_key = o.mld_opdr_key
AND ou.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_key = pf.prs_perslid_key
AND m.mld_melding_key = o.mld_melding_key
AND sm.mld_stdmelding_key = m.mld_stdmelding_key
AND sm.mld_ins_discipline_key = d.ins_discipline_key
AND flx0.fac_locale_xsl_label = 'lcl_mld_uren_status_0'
AND flx0.fac_locale_xsl_lang = lcl.getuserlanguage ()
AND flx0.fac_locale_xsl_module = 'ASP'
AND flx1.fac_locale_xsl_label = 'lcl_mld_uren_status_1'
AND flx1.fac_locale_xsl_lang = lcl.getuserlanguage ()
AND flx1.fac_locale_xsl_module = 'ASP'
AND flx2.fac_locale_xsl_label = 'lcl_mld_uren_status_2'
AND flx2.fac_locale_xsl_lang = lcl.getuserlanguage ()
AND flx2.fac_locale_xsl_module = 'ASP'
AND flx3.fac_locale_xsl_label = 'lcl_mld_uren_status_3'
AND flx3.fac_locale_xsl_lang = lcl.getuserlanguage ()
AND flx3.fac_locale_xsl_module = 'ASP'
AND flx4.fac_locale_xsl_label = 'lcl_mld_uren_status_4'
AND flx4.fac_locale_xsl_lang = lcl.getuserlanguage ()
AND flx4.fac_locale_xsl_module = 'ASP'
AND m.mld_alg_onroerendgoed_keys = r.alg_ruimte_key (+)
AND r.alg_verdieping_key = v.alg_verdieping_key (+)
AND v.alg_gebouw_key = g.alg_gebouw_key (+);
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
--- KOPPELING MET EBMS KOPPELING MET EBMS KOPPELING MET EBMS KOPPELING MET EBMS ---
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
--- EBMS EVENT/ORGANISATIE GEGEVENS
---------------------------------------------------------------------------------------------------------------------------------------------
-- call ARAI#33463: via Vervaldatum verleden niet zichtbaar
CREATE OR REPLACE VIEW arai_v_events (
arai_events_key,
arai_events_full,
Evenement,
EventID,
Bedrijfsnaam,
BedrijfsnaamID,
BIllto,
BilltoID,
EventDatumVan,
EventDatumTot,
EventOpbouw,
EventAfbouw,
Vervaldatum
)
AS
SELECT
arai_events_key,
Evenement || '|' || Bedrijfsnaam,
Evenement,
EventID,
Bedrijfsnaam,
BedrijfsnaamID,
BIllto,
BilltoID,
EventDatumVan,
EventDatumTot,
EventOpbouw,
EventAfbouw,
EventDatumTot + COALESCE ((SELECT fac.safe_to_number(ud.fac_usrdata_omschr)
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 201
AND ud.fac_usrdata_code = 'EBMS_EVENTS_DAYS_IN_PAST'
AND ud.fac_usrdata_verwijder IS NULL), 365)
FROM arai_events;
---------------------------------------------------------------------------------------------------------------------------------------------
--- EBMS EXPOSANTEN GEGEVENS
---------------------------------------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE VIEW arai_v_ebms (
arai_ebms_key,
arai_ebms_full,
Evenement,
EventID,
Bedrijfsnaam,
BedrijfsnaamID,
BIllto,
BilltoID,
Lokatie,
Ordernummer,
EventDatumVan,
EventDatumTot,
Vervaldatum
)
AS
SELECT
eb.arai_ebms_key,
eb.Ordernummer || '|' || eb.Evenement || '|' || eb.Bedrijfsnaam || '|' || eb.Lokatie,
eb.Evenement,
eb.EventID,
eb.Bedrijfsnaam,
eb.BedrijfsnaamID,
eb.BIllto,
eb.BilltoID,
eb.Lokatie,
eb.Ordernummer,
ev.EventDatumVan,
ev.EventDatumTot,
ev.Vervaldatum
FROM arai_ebms eb, arai_v_events ev
WHERE eb.eventid=ev.eventid;
CREATE OR REPLACE PROCEDURE arai_import_ebms (
p_import_key IN NUMBER
)
IS
c_fielddelimitor VARCHAR2 (1) := '|';
v_newline VARCHAR2 (1000); -- Input line
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER := 0;
v_ongeldig NUMBER (1);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_count NUMBER;
-- De importvelden:
v_Evenement VARCHAR2 (256);
v_EventID VARCHAR2 (256);
v_Bedrijfsnaam VARCHAR2 (256);
v_BedrijfsnaamID VARCHAR2 (256);
v_BIllto VARCHAR2 (256);
v_BilltoID VARCHAR2 (256);
v_Lokatie VARCHAR2 (256);
v_Ordernummer VARCHAR2 (256);
v_EventDatum1 VARCHAR2 (256);
v_EventDatum2 VARCHAR2 (256);
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
DELETE FROM arai_imp_ebms;
COMMIT;
v_count_tot := 0;
v_count_import := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_aanduiding := '';
v_errorhint := 'Fout bij opvragen te importeren rij';
v_ongeldig := 0;
-- Lees alle veldwaarden
-- EBMS gegevens
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 1, v_Evenement);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 2, v_EventID);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 3, v_Bedrijfsnaam);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 4, v_BedrijfsnaamID);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 5, v_BIllto);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 6, v_BilltoID);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 7, v_Lokatie);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 8, v_Ordernummer);
--fac.imp_getfield_nr (v_newline, c_fielddelimitor, 9, v_EventDatum1);
--fac.imp_getfield_nr (v_newline, c_fielddelimitor, 10, v_EventDatum2);
--
v_aanduiding :=
'['
|| v_Evenement
|| '|'
|| v_BedrijfsnaamID
|| '|'
|| v_Ordernummer
|| '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
-- Header = Evenement|EventID|Bedrijfsnaam|BedrijfsnaamID|BIllto|BilltoID|Lokatie|Ordernummer
IF (header_is_valid = 0)
THEN
IF UPPER (v_Evenement) = 'EVENEMENT'
AND UPPER (v_EventID) = 'EVENTID'
AND UPPER (v_Bedrijfsnaam) = 'BEDRIJFSNAAM'
AND UPPER (v_BedrijfsnaamID) = 'BEDRIJFSNAAMID'
AND UPPER (v_Ordernummer) = 'ORDERNUMMER'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
--
v_errorhint := 'Ongeldige ordernummer';
v_Ordernummer := TRIM (v_Ordernummer);
IF (v_Ordernummer IS NOT NULL)
THEN
IF LENGTH (v_Ordernummer) > 20
THEN
v_Ordernummer := SUBSTR (v_Ordernummer, 1, 20);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Ordernummer te lang', 'Ordernummer wordt afgebroken tot [' || v_Ordernummer || ']' );
END IF;
ELSE
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Record niet ingelezen', 'Ordernummer is leeg');
v_ongeldig := 1;
END IF;
--
v_errorhint := 'Ongeldige lokatie';
v_Lokatie := TRIM (v_Lokatie);
IF (v_Lokatie IS NOT NULL)
THEN
IF LENGTH (v_Lokatie) > 50
THEN
v_Lokatie := SUBSTR (v_Lokatie, 1, 50);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Lokatie te lang', 'Lokatie wordt afgebroken tot [' || v_Lokatie || ']' );
END IF;
--ELSE
--fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Record niet ingelezen', 'Lokatie is leeg');
--v_ongeldig := 1;
END IF;
--
v_errorhint := 'Ongeldige BedrijfsID';
v_BedrijfsnaamID := TRIM (v_BedrijfsnaamID);
IF (v_BedrijfsnaamID IS NOT NULL)
THEN
IF LENGTH (v_BedrijfsnaamID) > 20
THEN
v_BedrijfsnaamID := SUBSTR (v_BedrijfsnaamID, 1, 20);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'BedrijfsnaamID te lang', 'BedrijfsnaamID wordt afgebroken tot [' || v_BedrijfsnaamID || ']' );
END IF;
--ELSE
--fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Record niet ingelezen', 'BedrijfsnaamID is leeg');
--v_ongeldig := 1;
END IF;
--
v_errorhint := 'Ongeldige bedrijfsnaam';
v_Bedrijfsnaam := TRIM (v_Bedrijfsnaam);
IF (v_Bedrijfsnaam IS NOT NULL)
THEN
IF LENGTH (v_Bedrijfsnaam) > 255
THEN
v_Bedrijfsnaam := SUBSTR (v_Bedrijfsnaam, 1, 255);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Bedrijfsnaam te lang', 'Bedrijfsnaam wordt afgebroken tot [' || v_Bedrijfsnaam || ']' );
END IF;
--ELSE
--fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Record niet ingelezen', 'Bedrijfsnaam is leeg');
--v_ongeldig := 1;
END IF;
--
v_errorhint := 'Ongeldige BilltoID';
v_BilltoID := TRIM (v_BilltoID);
IF (v_BilltoID IS NOT NULL)
THEN
IF LENGTH (v_BilltoID) > 20
THEN
v_BilltoID := SUBSTR (v_BilltoID, 1, 20);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'BilltoID te lang', 'BilltoID wordt afgebroken tot [' || v_BilltoID || ']' );
END IF;
--ELSE
--fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Record niet ingelezen', 'BilltoID is leeg');
--v_ongeldig := 1;
END IF;
--
v_errorhint := 'Ongeldige BIllto';
v_BIllto := TRIM (v_BIllto);
IF (v_BIllto IS NOT NULL)
THEN
IF LENGTH (v_BIllto) > 255
THEN
v_BIllto := SUBSTR (v_BIllto, 1, 255);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'BIllto te lang', 'BIllto wordt afgebroken tot [' || v_BIllto || ']' );
END IF;
--ELSE
--fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Record niet ingelezen', 'BIllto is leeg');
--v_ongeldig := 1;
END IF;
--
v_errorhint := 'Ongeldige EventID';
v_EventID := TRIM (v_EventID);
IF (v_EventID IS NOT NULL)
THEN
IF LENGTH (v_EventID) > 20
THEN
v_EventID := SUBSTR (v_EventID, 1, 20);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'EventID te lang', 'EventID wordt afgebroken tot [' || v_EventID || ']' );
END IF;
ELSE
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Record niet ingelezen', 'EventID is leeg');
v_ongeldig := 1;
END IF;
--
v_errorhint := 'Ongeldige Evenement';
v_Evenement := TRIM (v_Evenement);
IF (v_Evenement IS NOT NULL)
THEN
IF LENGTH (v_Evenement) > 255
THEN
v_Evenement := SUBSTR (v_Evenement, 1, 255);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Evenement te lang', 'Evenement wordt afgebroken tot [' || v_Evenement || ']' );
END IF;
ELSE
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Record niet ingelezen', 'Evenement is leeg');
v_ongeldig := 1;
END IF;
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errorhint :=
'Fout bij toevoegen regel aan importtabel arai_imp_ebms';
INSERT INTO arai_imp_ebms (Evenement, EventID, Bedrijfsnaam, BedrijfsnaamID, BIllto, BilltoID, Lokatie, Ordernummer)
VALUES (v_Evenement, v_EventID, v_Bedrijfsnaam, v_BedrijfsnaamID, v_BIllto, v_BilltoID, v_Lokatie, v_Ordernummer);
COMMIT;
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog
(p_import_key,
'E',
v_aanduiding || v_errormsg,
'Ingelezen regel kan niet worden weggeschreven!'
);
COMMIT;
END;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
'Ongeldig importbestand',
'Geen header of header niet volgens specificatie!'
);
ELSE
fac.imp_writelog (p_import_key,
'S',
'EBMS: aantal ingelezen regels: '
|| TO_CHAR (v_count_import),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
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',
v_aanduiding || v_errormsg,
v_errorhint
);
COMMIT;
END arai_import_ebms;
/
CREATE OR REPLACE PROCEDURE arai_update_ebms (
p_import_key IN NUMBER
)
IS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count_tot NUMBER (10);
v_count_error NUMBER (10);
v_count NUMBER (10);
v_ordernummer VARCHAR(20);
-- Alle kpi_wachtijen van Mitel telefooncentrale
CURSOR c_imp_ebms
IS
SELECT *
FROM arai_imp_ebms k;
BEGIN
v_count_tot := 0;
v_count_error := 0;
v_aanduiding := '';
-- Alle kpi-wachtrijen verwerken...
FOR rec_ebms IN c_imp_ebms
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errorhint := 'Fout bij bepalen ordernummer [' || UPPER(rec_ebms.Ordernummer) || ']';
-- Dit zal waarschijnlijk een error opleveren bij 2 inserts van ordernummer.
-- Evenement, EventID, Bedrijfsnaam, BedrijfsnaamID, BIllto, BilltoID, Lokatie, Ordernummer
-- Bepaal het record uit arai_ebms op basis van ordernummer
SELECT COUNT (*)
INTO v_count
FROM arai_ebms
WHERE Ordernummer = UPPER (rec_ebms.Ordernummer);
IF (v_count = 0)
THEN
-- Ordernummer bestaat nog niet, dus toevoegen...
v_errorhint := 'Fout bij toevoegen ordernummer ' || UPPER(rec_ebms.Ordernummer);
INSERT INTO arai_ebms (Evenement, EventID, Bedrijfsnaam, BedrijfsnaamID, BIllto, BilltoID, Lokatie, Ordernummer)
VALUES (rec_ebms.Evenement, rec_ebms.EventID, rec_ebms.Bedrijfsnaam, rec_ebms.BedrijfsnaamID, rec_ebms.BIllto, rec_ebms.BilltoID, rec_ebms.Lokatie, UPPER(rec_ebms.Ordernummer));
COMMIT;
ELSE
-- Ordernummer bestaat al, dus updaten van alle gegevens
v_errorhint := 'Fout bij bijwerken van ordernummer ' || UPPER(rec_ebms.Ordernummer);
UPDATE arai_ebms
SET Evenement= rec_ebms.Evenement,
EventID=rec_ebms.EventID,
Bedrijfsnaam=rec_ebms.Bedrijfsnaam,
BedrijfsnaamID=rec_ebms.BedrijfsnaamID,
BIllto=rec_ebms.BIllto,
BilltoID=rec_ebms.BilltoID,
Lokatie=rec_ebms.Lokatie
WHERE Ordernummer=UPPER(rec_ebms.Ordernummer);
COMMIT;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint
);
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'EBMS: verwerkte regels zonder foutmelding: '
|| TO_CHAR (v_count_tot - v_count_error),
''
);
fac.imp_writelog (p_import_key,
'S',
'KPI: verwerkte regels met foutmelding: '
|| TO_CHAR (v_count_error),
''
);
COMMIT;
END arai_update_ebms;
/
-- mbmb
---------------------------------------------------------------------------------------------------------------------------------------------
--- EBMS EVENTS / ORGANISATIE GEGEVENS
---------------------------------------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE arai_import_events (
p_import_key IN NUMBER
)
IS
c_fielddelimitor VARCHAR2 (1) := '|';
v_newline VARCHAR2 (1000); -- Input line
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER := 0;
v_ongeldig NUMBER (1);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_count NUMBER;
-- De importvelden:
v_Evenement VARCHAR2 (256);
v_EventID VARCHAR2 (256);
v_Bedrijfsnaam VARCHAR2 (256);
v_BedrijfsnaamID VARCHAR2 (256);
v_BIllto VARCHAR2 (256);
v_BilltoID VARCHAR2 (256);
v_EventDatum1 VARCHAR2 (256);
v_EventDatum2 VARCHAR2 (256);
v_EventOpbouw VARCHAR2 (256);
v_EventAfbouw VARCHAR2 (256);
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
DELETE FROM arai_imp_events;
COMMIT;
v_count_tot := 0;
v_count_import := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_aanduiding := '';
v_errorhint := 'Fout bij opvragen te importeren rij';
v_ongeldig := 0;
-- Lees alle veldwaarden
-- EVENTS GEGEVENS UIT EBMS
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 1, v_Evenement);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 2, v_EventID);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 3, v_Bedrijfsnaam);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 4, v_BedrijfsnaamID);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 5, v_BIllto);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 6, v_BilltoID);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 7, v_EventOpbouw);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 8, v_EventDatum1);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 9, v_EventDatum2);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 10, v_EventAfbouw);
--
v_aanduiding :=
'['
|| v_Evenement
|| '|'
|| v_BedrijfsnaamID
|| '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
-- Header = Evenement|EventID|Bedrijfsnaam|BedrijfsnaamID|BIllto|BilltoID
IF (header_is_valid = 0)
THEN
IF UPPER (v_Evenement) = 'EVENEMENT'
AND UPPER (v_EventID) = 'EVENTID'
AND UPPER (v_Bedrijfsnaam) = 'BEDRIJFSNAAM'
AND UPPER (v_BedrijfsnaamID) = 'BEDRIJFSNAAMID'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
--
v_errorhint := 'Ongeldige EventID';
v_EventID := TRIM (v_EventID);
IF (v_EventID IS NOT NULL)
THEN
IF LENGTH (v_EventID) > 20
THEN
v_EventID := SUBSTR (v_EventID, 1, 20);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'EventID te lang', 'EventID wordt afgebroken tot [' || v_EventID || ']' );
END IF;
ELSE
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Record niet ingelezen', 'EventID is leeg');
v_ongeldig := 1;
END IF;
--
v_errorhint := 'Ongeldige Evenement';
v_Evenement := TRIM (v_Evenement);
IF (v_Evenement IS NOT NULL)
THEN
IF LENGTH (v_Evenement) > 255
THEN
v_Evenement := SUBSTR (v_Evenement, 1, 255);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Evenement te lang', 'Evenement wordt afgebroken tot [' || v_Evenement || ']' );
END IF;
ELSE
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Record niet ingelezen', 'Evenement is leeg');
v_ongeldig := 1;
END IF;
--
v_errorhint := 'Ongeldige BedrijfsID';
v_BedrijfsnaamID := TRIM (v_BedrijfsnaamID);
IF (v_BedrijfsnaamID IS NOT NULL)
THEN
IF LENGTH (v_BedrijfsnaamID) > 20
THEN
v_BedrijfsnaamID := SUBSTR (v_BedrijfsnaamID, 1, 20);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'BedrijfsnaamID te lang', 'BedrijfsnaamID wordt afgebroken tot [' || v_BedrijfsnaamID || ']' );
END IF;
END IF;
--
v_errorhint := 'Ongeldige bedrijfsnaam';
v_Bedrijfsnaam := TRIM (v_Bedrijfsnaam);
IF (v_Bedrijfsnaam IS NOT NULL)
THEN
IF LENGTH (v_Bedrijfsnaam) > 255
THEN
v_Bedrijfsnaam := SUBSTR (v_Bedrijfsnaam, 1, 255);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Bedrijfsnaam te lang', 'Bedrijfsnaam wordt afgebroken tot [' || v_Bedrijfsnaam || ']' );
END IF;
END IF;
--
v_errorhint := 'Ongeldige BilltoID';
v_BilltoID := TRIM (v_BilltoID);
IF (v_BilltoID IS NOT NULL)
THEN
IF LENGTH (v_BilltoID) > 20
THEN
v_BilltoID := SUBSTR (v_BilltoID, 1, 20);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'BilltoID te lang', 'BilltoID wordt afgebroken tot [' || v_BilltoID || ']' );
END IF;
END IF;
--
v_errorhint := 'Ongeldige BIllto';
v_BIllto := TRIM (v_BIllto);
IF (v_BIllto IS NOT NULL)
THEN
IF LENGTH (v_BIllto) > 255
THEN
v_BIllto := SUBSTR (v_BIllto, 1, 255);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'BIllto te lang', 'BIllto wordt afgebroken tot [' || v_BIllto || ']' );
END IF;
END IF;
v_errorhint := 'Ongeldige Start Eventdatum ';
v_EventDatum1 := TRIM (v_EventDatum1);
IF (v_EventDatum1 IS NOT NULL)
THEN
IF LENGTH (v_EventDatum1) > 50
THEN
v_EventDatum1 := SUBSTR (v_EventDatum1, 1, 50);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Start Eventdatum te lang', 'Start Eventdatum wordt afgebroken tot [' || v_EventDatum1 || ']' );
END IF;
v_EventDatum1 := REPLACE(REPLACE(v_EventDatum1,' ', ' '),' ', ' ');
END IF;
v_errorhint := 'Ongeldige Einde Eventdatum ';
v_EventDatum2 := TRIM (v_EventDatum2);
IF (v_EventDatum2 IS NOT NULL)
THEN
IF LENGTH (v_EventDatum2) > 50
THEN
v_EventDatum2 := SUBSTR (v_EventDatum2, 1, 50);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Einde Eventdatum te lang', 'Einde Eventdatum wordt afgebroken tot [' || v_EventDatum2 || ']' );
END IF;
v_EventDatum2 := REPLACE(REPLACE(v_EventDatum2,' ', ' '),' ', ' ');
END IF;
v_errorhint := 'Ongeldige Start Opbouwdatum ';
v_EventOpbouw := TRIM (v_EventOpbouw);
IF (v_EventOpbouw IS NOT NULL)
THEN
IF LENGTH (v_EventOpbouw) > 50
THEN
v_EventOpbouw := SUBSTR (v_EventOpbouw, 1, 50);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Start Opbouwdatum te lang', 'Start Opbouwdatum wordt afgebroken tot [' || v_EventOpbouw || ']' );
END IF;
v_EventOpbouw := REPLACE(REPLACE(v_EventOpbouw,' ', ' '),' ', ' ');
END IF;
v_errorhint := 'Ongeldige Einde Afbouwdatum ';
v_EventAfbouw := TRIM (v_EventAfbouw);
IF (v_EventAfbouw IS NOT NULL)
THEN
IF LENGTH (v_EventAfbouw) > 50
THEN
v_EventAfbouw := SUBSTR (v_EventAfbouw, 1, 50);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Einde Afbouwdatum te lang', 'Einde Afbouwdatum wordt afgebroken tot [' || v_EventAfbouw || ']' );
END IF;
v_EventAfbouw := REPLACE(REPLACE(v_EventAfbouw,' ', ' '),' ', ' ');
END IF;
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errorhint :=
'Fout bij toevoegen regel aan importtabel arai_imp_events';
INSERT INTO arai_imp_events (Evenement, EventID, Bedrijfsnaam, BedrijfsnaamID, BIllto, BilltoID, EventDatumVan, EventDatumTot, EventOpbouw, EventAfbouw)
VALUES (v_Evenement, v_EventID, v_Bedrijfsnaam, v_BedrijfsnaamID, v_BIllto, v_BilltoID, v_EventDatum1, v_EventDatum2, v_EventOpbouw, v_EventAfbouw);
COMMIT;
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog
(p_import_key,
'E',
v_aanduiding || v_errormsg,
'Ingelezen regel kan niet worden weggeschreven!'
);
COMMIT;
END;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
'Ongeldig importbestand',
'Geen header of header niet volgens specificatie!'
);
ELSE
fac.imp_writelog (p_import_key,
'S',
'EVENTS: aantal ingelezen regels: '
|| TO_CHAR (v_count_import),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
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',
v_aanduiding || v_errormsg,
v_errorhint
);
COMMIT;
END arai_import_events;
/
CREATE OR REPLACE PROCEDURE arai_update_events (
p_import_key IN NUMBER
)
IS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count_tot NUMBER (10);
v_count_error NUMBER (10);
v_count NUMBER (10);
-- Alle event-regels
CURSOR c_imp_events
IS
SELECT *
FROM arai_imp_events;
BEGIN
v_count_tot := 0;
v_count_error := 0;
v_aanduiding := '';
-- Alle events verwerken...
FOR rec_events IN c_imp_events
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errorhint := 'Fout bij bepalen events-id [' || UPPER(rec_events.EventID) || ']';
-- Evenement, EventID, Bedrijfsnaam, BedrijfsnaamID, BIllto, BilltoID
-- Bepaal het record uit arai_events op basis van event_id
SELECT COUNT (*)
INTO v_count
FROM arai_events
WHERE EventID = UPPER (rec_events.EventID);
IF (v_count = 0)
THEN
-- Event bestaat nog niet, dus toevoegen...
v_errorhint := 'Fout bij toevoegen event ' || UPPER(rec_events.EventID);
INSERT INTO arai_events (Evenement, EventID, Bedrijfsnaam, BedrijfsnaamID, BIllto, BilltoID, EventDatumVan, EventDatumTot, EventOpbouw, EventAfbouw)
SELECT rec_events.Evenement, UPPER(rec_events.EventID), rec_events.Bedrijfsnaam, rec_events.BedrijfsnaamID, rec_events.BIllto, rec_events.BilltoID,
to_date(rec_events.EventDatumVan,'DD-MM-YYYY HH24:MI:SS'),
to_date(rec_events.EventDatumTot,'DD-MM-YYYY HH24:MI:SS'),
to_date(rec_events.EventOpbouw,'DD-MM-YYYY HH24:MI:SS'),
to_date(rec_events.EventAfbouw,'DD-MM-YYYY HH24:MI:SS')
FROM DUAL;
-- VALUES (rec_events.Evenement, rec_events.EventID, rec_events.Bedrijfsnaam, rec_events.BedrijfsnaamID, rec_events.BIllto, rec_events.BilltoID);
COMMIT;
ELSE
-- Event bestaat al, dus updaten van alle gegevens
v_errorhint := 'Fout bij bijwerken van event ' || UPPER(rec_events.EventID);
UPDATE arai_events
SET Evenement= rec_events.Evenement,
Bedrijfsnaam=rec_events.Bedrijfsnaam,
BedrijfsnaamID=rec_events.BedrijfsnaamID,
BIllto=rec_events.BIllto,
BilltoID=rec_events.BilltoID,
EventDatumVan=to_date(rec_events.EventDatumVan,'DD-MM-YYYY HH24:MI:SS'),
EventDatumTot=to_date(rec_events.EventDatumTot,'DD-MM-YYYY HH24:MI:SS'),
EventOpbouw=to_date(rec_events.EventOpbouw,'DD-MM-YYYY HH24:MI:SS'),
EventAfbouw=to_date(rec_events.EventAfbouw,'DD-MM-YYYY HH24:MI:SS')
WHERE EventID=UPPER(rec_events.EventID);
COMMIT;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint
);
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'EVENTS: verwerkte regels zonder foutmelding: '
|| TO_CHAR (v_count_tot - v_count_error),
''
);
fac.imp_writelog (p_import_key,
'S',
'EVENTS: verwerkte regels met foutmelding: '
|| TO_CHAR (v_count_error),
''
);
COMMIT;
END arai_update_events;
/
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
--- KPI TEMPERATUUR KPI TEMPERATUUR KPI TEMPERATUUR ---
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
-- sd.ins_srtgroep_key (+) = 1 is de key van de groep 'Temperatuur' onder de discipline 'Klimaat'
-- kd.ins_kenmerk_key (+) = 1 is de key van het kenmerk Temperatuur.
-- ak.alg_kenmerk_key (+) = 1020 is de key van kenmerk 'Join KPI?'
-- ak1.alg_kenmerk_key (+) = 1021 is de key van kenmerk 'Min. temperatuur'
-- ak2.alg_kenmerk_key (+) = 1022 is de key van kenmerk 'Max. temperatuur'
-- ud1.fac_usrtab_key = 41 is de key van de usertabel '$KPI_SETTINGS'.
-- ud.fac_usrdata_code = KPI_TEMP_GROEN_MIN is de ondergrens voor de grone zone (default 20.0), KPI_TEMP_GROEN_MAX is de bovengrens voor de groene zone (default 24)..
-- KPI_TEMP_ORANJE_MARGE is de marge (default 1.0 graad) die de ondergrens voor de oranje zone (default dus 20-1=19) en de bovengrens voor orane (default dus 24+1=25) aangeeft.
-- join_kpi heeft de volgende (key)waarden (uit eigen tabel Join KPI): 1 = Nee (doet niet mee), 2 = Nu ff niet, 3 = Ja (doet mee).
-- min_waarde_oranje (1e min. grenswaarde, instelbaar per ruimte, als leeg dan eerst uit usrtab $KPI_SETTINGS (KPI_TEMP_GROEN_MIN), anders default 20.0),
-- max_waarde_oranje,(1e max. grenswaarde, instelbaar per ruimte, als leeg dan eerst uit usrtab $KPI_SETTINGS (KPI_TEMP_GROEN_MAX), anders default 24.0),
-- min_waarde, (rode grenswaarde, is gelijk aan min_waarde_oranje - 1.0)
-- max_waarde, (rode grenswaarde, is gelijk aan max_waarde_oranje + 1.0)
CREATE OR REPLACE VIEW arai_v_kpi_temp_per_ruimte
( ins_deel_key,
ins_deel_omschrijving,
alg_ruimte_key,
join_kpi,
alg_gebouw_code,
alg_gebouw_naam,
alg_verdieping_key,
alg_verdieping_volgnr,
alg_ruimte_nr,
alg_ruimte_omschrijving,
ins_kenmerkdeel_waarde,
min_waarde_oranje,
max_waarde_oranje,
min_waarde,
max_waarde,
ins_kenmerkdeel_aanmaak,
ins_kenmerkdeel_verwijder,
url
)
AS
SELECT d.ins_deel_key, d.ins_deel_omschrijving, r.alg_ruimte_key, COALESCE(ak.alg_onrgoedkenmerk_waarde,'1'),
g.alg_gebouw_code, g.alg_gebouw_naam, v.alg_verdieping_key, v.alg_verdieping_volgnr, r.alg_ruimte_nr, r.alg_ruimte_omschrijving, kd.ins_kenmerkdeel_waarde,
COALESCE(ak1.alg_onrgoedkenmerk_waarde,
( SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 41
AND ud.fac_usrdata_code = 'KPI_TEMP_GROEN_MIN'
AND ud.fac_usrdata_verwijder IS NULL
), '20.0'),
COALESCE(ak2.alg_onrgoedkenmerk_waarde,
( SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 41
AND ud.fac_usrdata_code = 'KPI_TEMP_GROEN_MAX'
AND ud.fac_usrdata_verwijder IS NULL
), '24.0'),
COALESCE(ak1.alg_onrgoedkenmerk_waarde,
( SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 41
AND ud.fac_usrdata_code = 'KPI_TEMP_GROEN_MIN'
AND ud.fac_usrdata_verwijder IS NULL
), '20.0') - COALESCE( ( SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 41
AND ud.fac_usrdata_code = 'KPI_TEMP_ORANJE_MARGE'
AND ud.fac_usrdata_verwijder IS NULL
), '1.0'),
COALESCE(ak2.alg_onrgoedkenmerk_waarde,
( SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 41
AND ud.fac_usrdata_code = 'KPI_TEMP_GROEN_MAX'
AND ud.fac_usrdata_verwijder IS NULL
), '24.0') + COALESCE( ( SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 41
AND ud.fac_usrdata_code = 'KPI_TEMP_ORANJE_MARGE'
AND ud.fac_usrdata_verwijder IS NULL
), '1.0'),
kd.ins_kenmerkdeel_aanmaak, kd.ins_kenmerkdeel_verwijder, NULL
FROM ins_deel d, ins_srtdeel sd, alg_ruimte r, alg_verdieping v, alg_gebouw g, ins_kenmerkdeel kd,
alg_onrgoedkenmerk ak, alg_onrgoedkenmerk ak1, alg_onrgoedkenmerk ak2
WHERE d.ins_deel_verwijder IS NULL
AND d.ins_srtdeel_key = sd.ins_srtdeel_key (+)
AND sd.ins_srtgroep_key (+) = 1
AND r.alg_ruimte_key = d.ins_alg_ruimte_key (+)
AND v.alg_verdieping_key = r.alg_verdieping_key
AND g.alg_gebouw_key = v.alg_gebouw_key
AND kd.ins_deel_key (+) = d.ins_deel_key
AND kd.ins_kenmerk_key (+) = 1
AND r.alg_ruimte_key = ak.alg_onrgoed_key
AND ak.alg_onrgoed_niveau = 'R'
AND ak.alg_kenmerk_key (+) = 1020
AND r.alg_ruimte_key = ak1.alg_onrgoed_key (+)
AND ak1.alg_onrgoed_niveau (+) = 'R'
AND ak1.alg_kenmerk_key (+) = 1021
AND r.alg_ruimte_key = ak2.alg_onrgoed_key (+)
AND ak2.alg_onrgoed_niveau (+) = 'R'
AND ak2.alg_kenmerk_key (+) = 1022;
CREATE OR REPLACE VIEW arai_v_rap_kpi_temp_per_ruimte
( alg_ruimte_key,
join_kpi,
alg_gebouw_code,
alg_gebouw_naam,
alg_verdieping_key,
alg_verdieping_volgnr,
alg_ruimte_nr,
alg_ruimte_omschrijving,
avg_temp,
min_temp,
max_temp,
min_waarde_oranje,
max_waarde_oranje,
min_waarde,
max_waarde,
datum,
url
)
AS
SELECT alg_ruimte_key,
MIN(join_kpi),
MIN(alg_gebouw_code),
MIN(alg_gebouw_naam),
MIN(alg_verdieping_key),
MIN(alg_verdieping_volgnr),
MIN(alg_ruimte_nr),
MIN(alg_ruimte_omschrijving),
ROUND(AVG(ins_kenmerkdeel_waarde),1),
ROUND(MIN(ins_kenmerkdeel_waarde),1),
ROUND(MAX(ins_kenmerkdeel_waarde),1),
MIN(min_waarde_oranje),
MIN(max_waarde_oranje),
MIN(min_waarde),
MIN(max_waarde),
MIN(ins_kenmerkdeel_aanmaak),
MIN(url)
FROM arai_v_kpi_temp_per_ruimte
WHERE ins_kenmerkdeel_verwijder IS NULL
AND TRUNC(ins_kenmerkdeel_aanmaak) = TRUNC(SYSDATE)
GROUP BY alg_ruimte_key ;
CREATE OR REPLACE VIEW arai_v_rap_temp_per_datapunt
( fclt_x_jaar,
fclt_x_maand,
fclt_x_dag,
fclt_x_uur,
fclt_x_minuut,
datum,
fclt_f_gebouw,
fclt_f_verdieping,
fclt_f_ruimte,
ruimtetemperatuur,
fclt_f_datapunt,
temperatuur
)
AS SELECT
to_char(ins_kenmerkdeel_aanmaak,'yyyy'),
to_char(ins_kenmerkdeel_aanmaak,'mm'),
to_char(ins_kenmerkdeel_aanmaak,'dd'),
to_char(ins_kenmerkdeel_aanmaak,'hh24'),
to_char(ins_kenmerkdeel_aanmaak,'mi'),
to_char(ins_kenmerkdeel_aanmaak,'dd-mm-yyyy hh24:mi'),
alg_gebouw_code || '-' || alg_gebouw_naam,
to_char(alg_verdieping_volgnr),
alg_ruimte_omschrijving,
to_char((SELECT ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1)
FROM arai_v_kpi_temp_per_ruimte y
WHERE y.alg_ruimte_key = x.alg_ruimte_key
AND y.ins_kenmerkdeel_aanmaak = x.ins_kenmerkdeel_aanmaak
GROUP BY alg_ruimte_key, TO_CHAR(ins_kenmerkdeel_aanmaak,'HH24:MI')
)),
ins_deel_omschrijving,
ins_kenmerkdeel_waarde
FROM arai_v_kpi_temp_per_ruimte x;
CREATE OR REPLACE VIEW arai_v_rap_temp_per_ruimte
( fclt_x_jaar,
fclt_x_maand,
fclt_x_dag,
fclt_x_dagdeel,
fclt_x_uur,
fclt_x_minuut,
fclt_f_gebouw,
fclt_f_verdieping,
fclt_f_ruimte,
ruimtetemperatuur,
kpi_temp
)
AS SELECT
to_char(ins_kenmerkdeel_aanmaak,'yyyy'),
to_char(ins_kenmerkdeel_aanmaak,'mm'),
to_char(ins_kenmerkdeel_aanmaak,'dd'),
CASE
WHEN to_char(ins_kenmerkdeel_aanmaak,'hh24') <= '06' THEN 'nacht'
WHEN to_char(ins_kenmerkdeel_aanmaak,'hh24') <= '11' THEN 'ochtend'
WHEN to_char(ins_kenmerkdeel_aanmaak,'hh24') <= '17' THEN 'middag'
ELSE 'avond'
END dagdeel,
to_char(ins_kenmerkdeel_aanmaak,'hh24'),
to_char(ins_kenmerkdeel_aanmaak,'mi'),
MIN(alg_gebouw_code) || '-' || MIN(alg_gebouw_naam),
to_char(MIN(alg_verdieping_volgnr)),
MIN(alg_ruimte_omschrijving),
to_char(ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1)),
CASE
WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) IS NULL THEN -1
WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) < MIN(min_waarde) THEN 2
WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) > MIN(max_waarde) THEN 2
WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) < MIN(min_waarde_oranje) THEN 1
WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) > MIN(max_waarde_oranje) THEN 1
ELSE 0
END kpi_temp
FROM arai_v_kpi_temp_per_ruimte x
GROUP BY alg_ruimte_key, to_char(ins_kenmerkdeel_aanmaak,'yyyy'), to_char(ins_kenmerkdeel_aanmaak,'mm'),
to_char(ins_kenmerkdeel_aanmaak,'dd'), to_char(ins_kenmerkdeel_aanmaak,'hh24'), to_char(ins_kenmerkdeel_aanmaak,'mi');
----------------------------------- KPI TEMPERATUUR GRAFIEKEN -----------------------------------
-- Grafiek 1: KPI gemiddelde temperatuuur per ruimte van vandaag van max. 4 uur terug in de tijd uitgezet.
CREATE OR REPLACE VIEW arai_v_graph_kpi_temp_vandaag
(
fclt_key,
FCLT_XAS_TIJD,
FCLT_YAS_TEMPERATUUR,
FCLT_URL
)
AS
SELECT alg_ruimte_key,
TO_CHAR(ins_kenmerkdeel_aanmaak,'HH24:MI'),
ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1),
MIN(url)
FROM arai_v_kpi_temp_per_ruimte
WHERE ins_kenmerkdeel_aanmaak >= SYSDATE - 4/24
AND TRUNC(ins_kenmerkdeel_aanmaak) = TRUNC(SYSDATE)
GROUP BY alg_ruimte_key, TO_CHAR(ins_kenmerkdeel_aanmaak,'HH24:MI');
-- Grafiek 2: KPI gemiddelde temperatuuur per ruimte van vandaag van max. 4 uur terug in de tijd uitgezet.
-- FCLT_YAS_TEMPERATUUR is de y-as voor rood
-- FCLT_YAS2_TEMPERATUUR is de y-as voor groen
-- FCLT_YAS3_TEMPERATUUR is de y-as voor oranje
-- Barchart met 3 kleuren: groen (temp = okee), oranje (temp is oranje) en rood (temp is rood)
CREATE OR REPLACE VIEW arai_v_graph_kpi_temp2_vandaag
(
fclt_key,
FCLT_XAS_TIJD,
FCLT_YAS_TEMPERATUUR,
FCLT_YAS2_TEMPERATUUR,
FCLT_YAS3_TEMPERATUUR,
FCLT_URL
)
AS
SELECT alg_ruimte_key,
TO_CHAR(ins_kenmerkdeel_aanmaak,'HH24:MI'),
CASE
WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) IS NULL THEN 0
WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) < MIN(min_waarde) THEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1)
WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) > MIN(max_waarde) THEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1)
ELSE 0
END,
CASE
WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) IS NULL THEN 0
WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) < MIN(min_waarde_oranje) THEN 0
WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) > MIN(max_waarde_oranje) THEN 0
ELSE ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1)
END,
CASE
WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) IS NULL THEN 0
WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) < MIN(min_waarde_oranje) AND
ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) >= MIN(min_waarde) THEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1)
WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) > MAX(max_waarde_oranje) AND
ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) <= MIN(max_waarde) THEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1)
ELSE 0
END,
MIN(url)
FROM arai_v_kpi_temp_per_ruimte
WHERE ins_kenmerkdeel_aanmaak >= SYSDATE - 4/24
AND TRUNC(ins_kenmerkdeel_aanmaak) = TRUNC(SYSDATE)
GROUP BY alg_ruimte_key, TO_CHAR(ins_kenmerkdeel_aanmaak,'HH24:MI');
CREATE OR REPLACE VIEW arai_v_label_ins_temp
(ins_deel_key, waarde)
AS
SELECT ins_deel_key, CHR (10) ||
CASE
WHEN join_kpi = 3 THEN
CASE
WHEN ins_kenmerkdeel_waarde IS NULL THEN '[s750][cff0000]'
WHEN ROUND(to_number(COALESCE(ins_kenmerkdeel_waarde,'0')),1) < min_waarde THEN '[s750][cff0000]'
WHEN ROUND(to_number(COALESCE(ins_kenmerkdeel_waarde,'0')),1) > max_waarde THEN '[s750][cff0000]'
WHEN ROUND(to_number(COALESCE(ins_kenmerkdeel_waarde,'0')),1) < min_waarde_oranje THEN '[s750][cff8800]'
WHEN ROUND(to_number(COALESCE(ins_kenmerkdeel_waarde,'0')),1) > max_waarde_oranje THEN '[s750][cff8800]'
ELSE '[s500][c00c000]'
END
ELSE
'[s500][cc0c0c0]'
END || ins_kenmerkdeel_waarde || ' <20>C'
FROM arai_v_kpi_temp_per_ruimte
WHERE ins_kenmerkdeel_verwijder IS NULL
AND TRUNC(ins_kenmerkdeel_aanmaak) = TRUNC(SYSDATE)
AND ins_deel_key IS NOT NULL;
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
--- KPI TOILET SCHOONMAAK KPI TOILET SCHOONMAAK KPI TOILET SCHOONMAAK ---
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
-- View arai_v_kpi_toilet_scan_ruimte zijn de toilet-inspectiepunten die ooit zijn gescan-d.
-- sd.ins_srtgroep_key (+) = 21 is de key van de groep 'Schoonmaak' onder de discipline 'Inspectiepunten'
-- ak.alg_kenmerk_key (+) = 1020 is de key van kenmerk 'Join KPI?'
-- join_kpi heeft de volgende (key)waarden (uit eigen tabel Join KPI): 1 = Nee (doet niet mee), 2 = Nu ff niet, 3 = Ja (doet mee).
-- ins_srtcontrole_key = 11: dit is de inspectie "Toiletschoonmaak".
-- ins_controlemode_key = 10 (Goed) of 11 (Fout)
-- halveuur_1_of_2, geeft aan of de check in het 1e of 2e halve uur van een heel uur is.
-- datum_laatste_check_in_h_uur geeft per halve uur weer wanneer in dat halve uur de laatste check van dat object was.
-- als deze afwijkt van ins_deelsrtcontrole_datum, dan betekent dat die meting/check niet mee moet worden geteld op de hele halve uren,
-- omdat die dus eerder was en wordt overruled door die latere meting/check
CREATE OR REPLACE VIEW arai_v_kpi_toilet_scan_ruimte
( ins_deel_key,
alg_ruimte_key,
join_kpi,
alg_gebouw_key,
alg_gebouw_code,
alg_gebouw_naam,
alg_verdieping_key,
alg_verdieping_volgnr,
alg_ruimte_nr,
alg_ruimte_omschrijving,
ins_controlemode_key,
goed,
fout,
ins_controlemode_oms,
ins_controlemode_opmerking,
ins_deelsrtcontrole_opmerking,
ins_deelsrtcontrole_datum,
tijd,
halveuur_1_of_2,
datum_laatste_check_in_h_uur,
waarde_oranje,
waarde_rood,
url
)
AS
SELECT d.ins_deel_key, r.alg_ruimte_key, COALESCE(ak.alg_onrgoedkenmerk_waarde,'1'),
g.alg_gebouw_key, g.alg_gebouw_code, g.alg_gebouw_naam, v.alg_verdieping_key, v.alg_verdieping_volgnr, r.alg_ruimte_nr, r.alg_ruimte_omschrijving,
c.ins_controlemode_key,
CASE
WHEN c.ins_controlemode_key = 10 THEN 1
WHEN c.ins_controlemode_key = 11 THEN 0
ELSE 0
END goed,
CASE
WHEN c.ins_controlemode_key = 10 THEN 0
WHEN c.ins_controlemode_key = 11 THEN 1
ELSE 0
END fout,
cm.ins_controlemode_oms, cm.ins_controlemode_opmerking, c.ins_deelsrtcontrole_opmerking, c.ins_deelsrtcontrole_datum,
TO_CHAR(c.ins_deelsrtcontrole_datum, 'HH24:MI'),
DECODE(SUBSTR(TO_CHAR(ins_deelsrtcontrole_datum,'MI'),1,1), 0, 1, 1, 1, 2, 1, 3, 2, 4, 2, 5, 2) halveuur_1_of_2,
(SELECT MAX(c1.ins_deelsrtcontrole_datum)
FROM ins_deelsrtcontrole c1
WHERE c1.ins_deel_key = c.ins_deel_key
AND DECODE(SUBSTR(TO_CHAR(c.ins_deelsrtcontrole_datum,'MI'),1,1), 0, 1, 1, 1, 2, 1, 3, 2, 4, 2, 5, 2) =
DECODE(SUBSTR(TO_CHAR(c1.ins_deelsrtcontrole_datum,'MI'),1,1), 0, 1, 1, 1, 2, 1, 3, 2, 4, 2, 5, 2)
AND TRUNC(c.ins_deelsrtcontrole_datum,'HH24')= TRUNC(c1.ins_deelsrtcontrole_datum, 'HH24')
AND TRUNC(c.ins_deelsrtcontrole_datum)= TRUNC(c1.ins_deelsrtcontrole_datum)
AND c1.ins_srtcontrole_key = 11) datum_laatste_check_in_h_uur,
COALESCE( ( SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 41
AND ud.fac_usrdata_code = 'KPI_SCHONETOILETTEN_GROEN_MIN'
AND ud.fac_usrdata_verwijder IS NULL
), '90'),
COALESCE( ( SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 41
AND ud.fac_usrdata_code = 'KPI_SCHONETOILETTEN_ORANJE_MIN'
AND ud.fac_usrdata_verwijder IS NULL
), '70'),
NULL
FROM ins_deel d, ins_srtdeel sd, alg_ruimte r, alg_verdieping v, alg_gebouw g, alg_onrgoedkenmerk ak, ins_deelsrtcontrole c, ins_controlemode cm
WHERE d.ins_deel_verwijder IS NULL
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtdeel_key = 21
AND r.alg_ruimte_key = d.ins_alg_ruimte_key
AND v.alg_verdieping_key = r.alg_verdieping_key
AND g.alg_gebouw_key = v.alg_gebouw_key
AND r.alg_ruimte_key = ak.alg_onrgoed_key (+)
AND ak.alg_onrgoed_niveau (+) = 'R'
AND ak.alg_kenmerk_key (+) = 1020
AND d.ins_deel_key = c.ins_deel_key
AND c.ins_srtcontrole_key = 11
AND c.ins_controlemode_key = cm.ins_controlemode_key;
----------------------------------- KPI TOILET GRAFIEKEN -----------------------------------
CREATE OR REPLACE VIEW arai_v_graph_kpi_toil_all
(
datum,
fclt_key,
FCLT_XAS_TIJD,
FCLT_YAS_SCHOON,
fout,
FCLT_URL
)
AS
SELECT TRUNC(ins_deelsrtcontrole_datum),
alg_gebouw_key,
DECODE(halveuur_1_of_2, 1, TO_CHAR(ins_deelsrtcontrole_datum,'HH24'), 2, TO_CHAR(ins_deelsrtcontrole_datum+1/24,'HH24')) || ':' || DECODE(halveuur_1_of_2, 1, '30', 2, '00'),
ROUND(SUM(goed)/COUNT(*)*100,1),
ROUND(SUM(fout)/COUNT(*)*100,1),
MIN(url)
FROM arai_v_kpi_toilet_scan_ruimte c
-- WHERE TRUNC(c.ins_deelsrtcontrole_datum) = TRUNC(SYSDATE)
-- AND c.ins_deelsrtcontrole_datum >= SYSDATE - 8/24
WHERE c.ins_deelsrtcontrole_datum = datum_laatste_check_in_h_uur
GROUP BY TRUNC(ins_deelsrtcontrole_datum), alg_gebouw_key,
DECODE(halveuur_1_of_2, 1, TO_CHAR(ins_deelsrtcontrole_datum,'HH24'), 2, TO_CHAR(ins_deelsrtcontrole_datum+1/24,'HH24')) || ':' ||DECODE(halveuur_1_of_2, 1, '30', 2, '00');
-- Grafiek 1 (lijngrafiek): KPI precentage schone toiletten per gebouw, van vandaag van max. 8 uur terug in de tijd uitgezet.
-- Daarbij worden de onregelmatige controle-tijden (naar boven) afgerond op halve uren (dus hh:00 of hh:30),
-- Indien een toilet-object meer dan 1 keer in een half 'heel' half uur is gecontroleerd, telt de laatste daarvan.
-- Dus X-as bestaat uit maximaal 8 uur x 2 (ieder half uur) = 16 waarden, b.v. 10:00, 10:30, 11:00, ... t/m 17:30.
-- De Y-as bestaat uit een percentage van schone toiletten tov. alle gescaned 'laaste' binnen dat halve uur.
-- En dat gegroepeerd op gebouw nivo.
CREATE OR REPLACE VIEW arai_v_graph_kpi_toil_gebouw
(
fclt_key,
FCLT_XAS_TIJD,
FCLT_YAS_SCHOON,
fout,
FCLT_URL
)
AS
SELECT fclt_key,
FCLT_XAS_TIJD,
FCLT_YAS_SCHOON,
fout,
FCLT_URL
FROM arai_v_graph_kpi_toil_all
WHERE datum = TRUNC(SYSDATE);
-- Grafiek 2 (barchart met rood/oranje/groen): KPI precentage schone toiletten per gebouw, van vandaag van max. 8 uur terug in de tijd uitgezet.
-- FCLT_YAS_SCHOON is de y-as voor rood
-- FCLT_YAS2_SCHOON is de y-as voor groen
-- FCLT_YAS3_SCHOON is de y-as voor oranje
-- Barchart met 3 kleuren: groen (temp = okee), oranje (temp is oranje) en rood (temp is rood)
CREATE OR REPLACE VIEW arai_v_graph_kpi_toil2_gebouw
(
fclt_key,
FCLT_XAS_TIJD,
FCLT_YAS_SCHOON,
FCLT_YAS2_SCHOON,
FCLT_YAS3_SCHOON,
FCLT_URL
)
AS
SELECT alg_gebouw_key,
DECODE(halveuur_1_of_2, 1, TO_CHAR(ins_deelsrtcontrole_datum,'HH24'), 2, TO_CHAR(ins_deelsrtcontrole_datum+1/24,'HH24')) || ':' || DECODE(halveuur_1_of_2, 1, '30', 2, '00'),
CASE
WHEN ROUND(SUM(goed)/COUNT(*)*100,1) IS NULL THEN 0
WHEN ROUND(SUM(goed)/COUNT(*)*100,1) < MIN(waarde_rood) THEN ROUND(SUM(goed)/COUNT(*)*100,1)
ELSE 0
END,
CASE
WHEN ROUND(SUM(goed)/COUNT(*)*100,1) IS NULL THEN 0
WHEN ROUND(SUM(goed)/COUNT(*)*100,1) >= MIN(waarde_oranje) THEN ROUND(SUM(goed)/COUNT(*)*100,1)
ELSE 0
END,
CASE
WHEN ROUND(SUM(goed)/COUNT(*)*100,1) IS NULL THEN 0
WHEN ROUND(SUM(goed)/COUNT(*)*100,1) >= MIN(waarde_rood) AND
ROUND(SUM(goed)/COUNT(*)*100,1) < MIN(waarde_oranje) THEN ROUND(SUM(goed)/COUNT(*)*100,1)
ELSE 0
END,
MIN(url)
FROM arai_v_kpi_toilet_scan_ruimte c
WHERE TRUNC(c.ins_deelsrtcontrole_datum) = TRUNC(SYSDATE)
-- AND c.ins_deelsrtcontrole_datum >= SYSDATE - 8/24
AND c.ins_deelsrtcontrole_datum = datum_laatste_check_in_h_uur
GROUP BY alg_gebouw_key,
DECODE(halveuur_1_of_2, 1, TO_CHAR(ins_deelsrtcontrole_datum,'HH24'), 2, TO_CHAR(ins_deelsrtcontrole_datum+1/24,'HH24')) || ':' ||DECODE(halveuur_1_of_2, 1, '30', 2, '00');
-- View arai_v_kpi_toilet_scan_h_uur zijn de toilet-inspectiepunten die het !!VORIGE!! 1/2 uur zijn gescan-d (dus als nu 10:15 is, dan de checks van 9:30-10:00u),
-- Indien meerdere scans van dezelfde toilet, dan telt daarvan de laatste!
-- !!Let op!!: er wordt gegroepeerd op halve uren, dus groep 1 = scans van 8:00-8:30, groep 2 = 8:30-9:00, 3= 9:00-9:30 etc
-- Dit is essentieel zodat de grafiek die op hele halve uren gaat (8:00-8:30-9:00-9:30-10:00-10:30 etc) te laten kloppen met de KPI-kleur.
CREATE OR REPLACE VIEW arai_v_kpi_toilet_scan_h_uur
AS
SELECT * FROM arai_v_kpi_toilet_scan_ruimte c
WHERE TRUNC(c.ins_deelsrtcontrole_datum) = TRUNC(SYSDATE)
AND c.ins_deelsrtcontrole_datum >= SYSDATE - 1/24
AND halveuur_1_of_2 <> DECODE(SUBSTR(TO_CHAR(SYSDATE,'MI'),1,1), 0, 1, 1, 1, 2, 1, 3, 2, 4, 2, 5, 2)
AND c.ins_deelsrtcontrole_datum = datum_laatste_check_in_h_uur;
-- Union van arai_v_kpi_toilet_scan_h_uur (scans van afgelopen 'hele' halve uur) met alle toiletruimten die afgelopen uur niet zijn gescan-d
CREATE OR REPLACE VIEW arai_v_kpi_toilet_ruimte_uur
( ins_deel_key,
alg_ruimte_key,
join_kpi,
alg_gebouw_key,
alg_gebouw_code,
alg_gebouw_naam,
alg_verdieping_key,
alg_verdieping_volgnr,
alg_ruimte_nr,
alg_ruimte_omschrijving,
ins_controlemode_key,
goed,
fout,
ins_controlemode_oms,
ins_controlemode_opmerking,
ins_deelsrtcontrole_opmerking,
ins_deelsrtcontrole_datum,
waarde_oranje,
waarde_rood,
url
)
AS
SELECT ins_deel_key,
alg_ruimte_key,
join_kpi,
alg_gebouw_key,
alg_gebouw_code,
alg_gebouw_naam,
alg_verdieping_key,
alg_verdieping_volgnr,
alg_ruimte_nr,
alg_ruimte_omschrijving,
ins_controlemode_key,
goed,
fout,
ins_controlemode_oms,
ins_controlemode_opmerking,
ins_deelsrtcontrole_opmerking,
ins_deelsrtcontrole_datum,
waarde_oranje,
waarde_rood,
url
FROM arai_v_kpi_toilet_scan_h_uur
UNION ALL
SELECT d.ins_deel_key, r.alg_ruimte_key, COALESCE(ak.alg_onrgoedkenmerk_waarde,'1'),
g.alg_gebouw_key, g.alg_gebouw_code, g.alg_gebouw_naam, v.alg_verdieping_key, v.alg_verdieping_volgnr, r.alg_ruimte_nr, r.alg_ruimte_omschrijving,
NULL, 0, 0, NULL, NULL, NULL, NULL,
COALESCE( ( SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 41
AND ud.fac_usrdata_code = 'KPI_SCHONETOILETTEN_GROEN_MIN'
AND ud.fac_usrdata_verwijder IS NULL
), '90'),
COALESCE( ( SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 41
AND ud.fac_usrdata_code = 'KPI_SCHONETOILETTEN_ORANJE_MIN'
AND ud.fac_usrdata_verwijder IS NULL
), '70'), NULL
FROM ins_deel d, ins_srtdeel sd, alg_ruimte r, alg_verdieping v, alg_gebouw g, alg_onrgoedkenmerk ak
WHERE d.ins_deel_verwijder IS NULL
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtdeel_key = 21
AND r.alg_ruimte_key = d.ins_alg_ruimte_key
AND v.alg_verdieping_key = r.alg_verdieping_key
AND g.alg_gebouw_key = v.alg_gebouw_key
AND r.alg_ruimte_key = ak.alg_onrgoed_key (+)
AND ak.alg_onrgoed_niveau (+) = 'R'
AND ak.alg_kenmerk_key (+) = 1020
AND NOT EXISTS (select 'x' FROM arai_v_kpi_toilet_scan_h_uur tmp WHERE tmp.ins_deel_key = d.ins_deel_key);
-- View arai_v_kpi_toilet_scan_gebouw zijn de toiletscans op gebouwnivo waarvan minimaal 1 toilet-inspectiepunten afgelopen halve uur is gescan-d.
CREATE OR REPLACE VIEW arai_v_kpi_toilet_scan_gebouw
( alg_gebouw_key,
alg_gebouw_code,
alg_gebouw_naam,
goed,
fout,
KPI_STATUS
)
AS SELECT alg_gebouw_key,
alg_gebouw_code,
alg_gebouw_naam,
ROUND(SUM(goed)/COUNT(*)*100,1),
ROUND(SUM(fout)/COUNT(*)*100,1),
CASE
WHEN ROUND(SUM(goed)/COUNT(*)*100,1) < min(waarde_rood) THEN 2
WHEN ROUND(SUM(goed)/COUNT(*)*100,1) < min(waarde_oranje) THEN 1
ELSE 0
END KPI_STATUS
FROM arai_v_kpi_toilet_ruimte_uur
WHERE ins_controlemode_key IS NOT NULL
GROUP BY alg_gebouw_key, alg_gebouw_code, alg_gebouw_naam;
-- UNION van arai_v_kpi_toilet_scan_gebouw (toiletscans op gebouwnivo van afgelopen uur) met de gebouwen waar afgelopen uur niet is gescan-d.
CREATE OR REPLACE VIEW arai_v_kpi_toilet_gebouw
( alg_gebouw_key,
alg_gebouw_code,
alg_gebouw_naam,
goed,
fout,
KPI_STATUS
)
AS
SELECT
alg_gebouw_key,
alg_gebouw_code,
alg_gebouw_naam,
goed,
fout,
KPI_STATUS
FROM arai_v_kpi_toilet_scan_gebouw
UNION ALL
SELECT alg_gebouw_key,
alg_gebouw_code,
alg_gebouw_naam,
NULL,
NULL,
-1
FROM arai_v_kpi_toilet_ruimte_uur tr
WHERE NOT EXISTS (select 'x' FROM arai_v_kpi_toilet_scan_gebouw tmp WHERE tmp.alg_gebouw_key = tr.alg_gebouw_key)
GROUP BY alg_gebouw_key, alg_gebouw_code, alg_gebouw_naam;
-- fclt_key is eigenlijk alg_gebouw_key, dit is tbv filer-mogelijkheid op gebouwnivo in de usrrap.
-- Dit zijn de inspectieresultaten van ooit van alle inspectiepunten
CREATE OR REPLACE VIEW arai_v_rap_kpi_toilet_all
( fclt_x_datum,
fclt_x_gebouw,
ins_deel_key,
alg_ruimte_key,
join_kpi,
fclt_key,
alg_gebouw_code,
alg_gebouw_naam,
alg_verdieping_key,
alg_verdieping_volgnr,
alg_ruimte_nr,
alg_ruimte_omschrijving,
ins_controlemode_key,
goed,
fout,
ins_controlemode_oms,
ins_controlemode_opmerking,
ins_deelsrtcontrole_opmerking,
ins_deelsrtcontrole_datum,
trunc_ins_controle_datum,
tijd,
halveuur_1_of_2,
datum_laatste_check_in_h_uur,
waarde_oranje,
waarde_rood,
url,
afgeronde_tijd,
KPI_toilet_pergebouw
)
AS
SELECT to_char(ins_deelsrtcontrole_datum,'yyyy-mm-dd'),
alg_gebouw_code || '-' || alg_gebouw_naam,
ins_deel_key,
alg_ruimte_key,
join_kpi,
alg_gebouw_key,
alg_gebouw_code,
alg_gebouw_naam,
alg_verdieping_key,
alg_verdieping_volgnr,
alg_ruimte_nr,
alg_ruimte_omschrijving,
ins_controlemode_key,
c.goed,
c.fout,
ins_controlemode_oms,
ins_controlemode_opmerking,
ins_deelsrtcontrole_opmerking,
ins_deelsrtcontrole_datum,
TRUNC(ins_deelsrtcontrole_datum),
tijd,
halveuur_1_of_2,
datum_laatste_check_in_h_uur,
waarde_oranje,
waarde_rood,
url,
DECODE(halveuur_1_of_2, 1, TO_CHAR(ins_deelsrtcontrole_datum,'HH24'), 2, TO_CHAR(ins_deelsrtcontrole_datum+1/24,'HH24')) || ':' || DECODE(halveuur_1_of_2, 1, '30', 2, '00') afgeronde_tijd,
FCLT_YAS_SCHOON
FROM arai_v_kpi_toilet_scan_ruimte c, arai_v_graph_kpi_toil_all g
WHERE c.ins_deelsrtcontrole_datum = datum_laatste_check_in_h_uur
AND c.alg_gebouw_key = g.fclt_key(+)
AND DECODE(halveuur_1_of_2, 1, TO_CHAR(ins_deelsrtcontrole_datum,'HH24'), 2, TO_CHAR(ins_deelsrtcontrole_datum+1/24,'HH24')) || ':' || DECODE(halveuur_1_of_2, 1, '30', 2, '00') = g.FCLT_XAS_TIJD (+);
-- fclt_key is eigenlijk alg_gebouw_key, dit is tbv filer-mogelijkheid op gebouwnivo in de usrrap.
-- Dit zijn de inspectieresultaten van ALLEEN vandaag van alle inspectiepunten
CREATE OR REPLACE VIEW arai_v_rap_kpi_toilet
AS
SELECT *
FROM arai_v_rap_kpi_toilet_all
WHERE TRUNC(ins_deelsrtcontrole_datum) = TRUNC(SYSDATE);
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
--- KPI ICT MITEL KPI ICT MITEL KPI ICT MITEL KPI ICT MITEL ---
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
-- sd.ins_srtgroep_key (+) = 41 is de key van de groep 'Telefonie' onder de discipline 'Telecom'
-- kd.ins_kenmerk_key (+) = 21 is de key van het kenmerk Wachtrij.
-- VERVALLEN: Als aantal wachtenden max. 5 is, dan is dat okee (0 t/m 5 wachtenden, daarna oranje...
-- VERVALLEN: waarde_oranje (grenswaarde voor oranje zone = 6 t/m 10 wachtenden, daarna rood,
-- VERVALLEN: waarde_rood (grenswaarde voor rode zone = 11 en meer wachtenden
-- Als gemiddelde wachttijd max. 60 seconden s, dan is dat okee (0 t/m 60 sec. daarna oranje...
-- waarde_oranje (grenswaarde voor oranje zone is > 60 t/m 180 sec. daarna rood,
-- waarde_rood (grenswaarde voor rode zone is > 180 sec
CREATE OR REPLACE VIEW arai_v_kpi_ict_mitel
( ins_deel_key,
ins_deel_omschrijving,
ins_srtdeel_omschrijving,
alg_ruimte_key,
alg_gebouw_code,
alg_gebouw_naam,
alg_verdieping_key,
alg_verdieping_volgnr,
alg_ruimte_nr,
kpi_color_overrule,
ins_kenmerkdeel_waarde,
waarde_oranje,
waarde_rood,
ins_kenmerkdeel_aanmaak,
trunc_datum,
ins_kenmerkdeel_verwijder,
url
)
AS
SELECT d.ins_deel_key, d.ins_deel_omschrijving, sd.ins_srtdeel_omschrijving, r.alg_ruimte_key,
g.alg_gebouw_code, g.alg_gebouw_naam, v.alg_verdieping_key, v.alg_verdieping_volgnr, r.alg_ruimte_nr,
DECODE(ud_color.fac_usrdata_code, 'KPI_GROEN', 0, 'KPI_ORANJE', 1, 'KPI_ROOD', 2, NULL),
kd.ins_kenmerkdeel_waarde,
COALESCE( ( SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 41
AND ud.fac_usrdata_code = 'KPI_ICT_MITEL_GROEN_MAX'
AND ud.fac_usrdata_verwijder IS NULL
) + 1, 60),
COALESCE( ( SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 41
AND ud.fac_usrdata_code = 'KPI_ICT_MITEL_ORANJE_MAX'
AND ud.fac_usrdata_verwijder IS NULL
) + 1, 180),
kd.ins_kenmerkdeel_aanmaak, TRUNC(kd.ins_kenmerkdeel_aanmaak), kd.ins_kenmerkdeel_verwijder, NULL
FROM ins_deel d, ins_srtdeel sd, alg_ruimte r, alg_verdieping v, alg_gebouw g, ins_kenmerkdeel kd,
ins_kenmerkdeel kd_color, fac_usrdata ud_color
WHERE d.ins_deel_verwijder IS NULL
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = 41
AND r.alg_ruimte_key = d.ins_alg_ruimte_key
AND v.alg_verdieping_key = r.alg_verdieping_key
AND g.alg_gebouw_key = v.alg_gebouw_key
AND kd.ins_deel_key = d.ins_deel_key
AND kd.ins_kenmerk_key = 21
AND kd_color.ins_deel_key (+) = d.ins_deel_key
AND kd_color.ins_kenmerk_key (+) = 41
AND ud_color.fac_usrdata_key(+) = to_number(kd_color.ins_kenmerkdeel_waarde);
CREATE OR REPLACE VIEW arai_v_rap_kpi_ict_mitel
AS
SELECT *
FROM arai_v_kpi_ict_mitel
WHERE ins_kenmerkdeel_verwijder IS NULL
AND trunc_datum = TRUNC(SYSDATE);
----------------------------------- KPI ICT MITEL - GRAFIEKEN -----------------------------------
CREATE OR REPLACE VIEW arai_v_graph_kpi_ict_all
(
datum,
fclt_key,
FCLT_XAS_TIJD,
FCLT_YAS_WACHTTIJD,
KPI_ICT_MITEL,
FCLT_URL
)
AS
SELECT trunc_datum,
ins_deel_key,
TO_CHAR(ins_kenmerkdeel_aanmaak,'HH24:MI'),
MAX(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),
CASE
WHEN MAX(ins_kenmerkdeel_waarde) IS NULL THEN -1
WHEN MAX(ins_kenmerkdeel_waarde) >= MIN(waarde_rood) THEN 2
WHEN MAX(ins_kenmerkdeel_waarde) >= MIN(waarde_oranje) THEN 1
ELSE 0
END kpi_ict_mitel,
MIN(url)
FROM arai_v_kpi_ict_mitel
GROUP BY trunc_datum, ins_deel_key, TO_CHAR(ins_kenmerkdeel_aanmaak,'HH24:MI');
-- Grafiek 1: VERVALLEN: KPI aantal wachtenden van vandaag van max. 2 uur terug in de tijd uitgezet (x-as grafiek wordt bij veel meer niet leesbaar)
-- KPI van gemiddelde wachttijd van vandaag van max. 2 uur terug in de tijd uitgezet (x-as grafiek wordt bij veel meer niet leesbaar)
CREATE OR REPLACE VIEW arai_v_graph_kpi_ict_vandaag
(
fclt_key,
FCLT_XAS_TIJD,
FCLT_YAS_WACHTTIJD,
FCLT_URL
)
AS
SELECT fclt_key,
FCLT_XAS_TIJD,
FCLT_YAS_WACHTTIJD,
FCLT_URL
FROM arai_v_graph_kpi_ict_all
WHERE to_date(to_char(datum, 'dd-mm-yyyy') || ' ' ||FCLT_XAS_TIJD,'dd-mm-yyyy hh24:mi') >= SYSDATE - 2/24
AND datum = TRUNC(SYSDATE);
-- Grafiek 2: KPI van gemiddelde wachttijd van vandaag van max. 2 uur terug in de tijd uitgezet (x-as grafiek wordt bij veel meer niet leesbaar)
-- FCLT_YAS_TEMPERATUUR is de y-as voor rood
-- FCLT_YAS2_TEMPERATUUR is de y-as voor groen
-- FCLT_YAS3_TEMPERATUUR is de y-as voor oranje
-- Barchart met 3 kleuren: groen (temp = okee), oranje (temp is oranje) en rood (temp is rood)
CREATE OR REPLACE VIEW arai_v_graph_kpi_ict2_vandaag
(
fclt_key,
FCLT_XAS_TIJD,
FCLT_YAS_WACHTTIJD,
FCLT_YAS2_WACHTTIJD,
FCLT_YAS3_WACHTTIJD,
FCLT_URL
)
AS
SELECT ins_deel_key,
TO_CHAR(ins_kenmerkdeel_aanmaak,'HH24:MI'),
CASE
WHEN MAX(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))) IS NULL THEN 0
WHEN MAX(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))) >= MIN(waarde_rood) THEN MAX(to_number(COALESCE(ins_kenmerkdeel_waarde,'0')))
ELSE 0
END,
CASE
WHEN MAX(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))) IS NULL THEN 0
WHEN MAX(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))) < MIN(waarde_oranje) THEN MAX(to_number(COALESCE(ins_kenmerkdeel_waarde,'0')))
ELSE 0
END,
CASE
WHEN MAX(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))) IS NULL THEN 0
WHEN MAX(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))) < MIN(waarde_rood) AND
MAX(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))) >= MIN(waarde_oranje) THEN MAX(to_number(COALESCE(ins_kenmerkdeel_waarde,'0')))
ELSE 0
END,
MIN(url)
FROM arai_v_kpi_ict_mitel
WHERE ins_kenmerkdeel_aanmaak >= SYSDATE - 2/24
AND trunc_datum = TRUNC(SYSDATE)
GROUP BY ins_deel_key, TO_CHAR(ins_kenmerkdeel_aanmaak,'HH24:MI');
-- Dagrapportage van ICT Mitel Telefooncentrale
-- fclt_key is vanuit cust.xsl, voor de actuele rapportage van vandaag (=1), alle andere dagen zijn 0.
CREATE OR REPLACE VIEW arai_v_rap_kpi_ict_all
(
fclt_f_jaar,
fclt_f_maand,
fclt_f_datum,
fclt_f_dagdeel,
fclt_f_uur,
fclt_key,
tijd,
wachttijd,
KPI_ICT_MITEL,
FCLT_URL
)
AS SELECT to_char(datum,'yyyy'), to_char(datum,'mm'), to_char(datum,'yyyy-mm-dd'),
CASE
WHEN SUBSTR(FCLT_XAS_TIJD,1,2) <= '06' THEN 'nacht'
WHEN SUBSTR(FCLT_XAS_TIJD,1,2) <= '11' THEN 'ochtend'
WHEN SUBSTR(FCLT_XAS_TIJD,1,2) <= '17' THEN 'middag'
ELSE 'avond'
END dagdeel,
SUBSTR(FCLT_XAS_TIJD,1,2),
CASE
WHEN datum = TRUNC(SYSDATE) THEN 1
ELSE 0
END vandaag,
FCLT_XAS_TIJD,
FCLT_YAS_WACHTTIJD,
KPI_ICT_MITEL,
FCLT_URL
FROM arai_v_graph_kpi_ict_all;
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
--- KLACHTEN EXPOSANTEN KLACHTEN EXPOSANTEN KLACHTEN EXPOSANTEN ---
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
-- km.mld_kenmerk_key (+) = 181 is het EBMS-ordernummer suggest-kenmerk.
-- km1.mld_kenmerk_key (+) = 46 is het mailadres van de contactpersoon bij exposant.
-- km2.mld_kenmerk_key (+) = 45 is het telefoonnummer van de contactpersoon bij exposant.
-- km3.mld_kenmerk_key (+) = 44 is de naam van de contactpersoon bij exposant.
-- sd.ins_srtdiscipline_key = 1 is meldingtype 'Klachten'.
-- Let op: kolom fclt_key (volgend op fclt_lopend) is dezelfde, alleen deze kolomnaam moet zo heten ivm usrrap vanuit cust.xsl.
CREATE OR REPLACE VIEW arai_v_rap_mld_klachten
(
fclt_f_meldingnr,
fclt_f_type,
fclt_3d_discipline_key,
fclt_f_vakgroep,
mld_stdmelding_key,
fclt_f_melding,
mld_melding_omschrijving,
mld_melding_opmerking,
fclt_f_leverancier,
fclt_f_jaar,
fclt_f_kwartaal,
fclt_f_maand,
invoer_datum,
fclt_f_ingevoerd,
invoer_datum_time,
operationele_einddatum,
sla_einddatum,
mld_operationeel_te_laat,
mld_sla_te_laat,
mld_operationeel_dagenuurmin,
fclt_f_lopend,
fclt_key,
fclt_f_status,
status_code,
afmeld_datum,
fclt_f_afgemeld,
afmeld_datum_time,
afgemeld_door,
ingevoerd_door,
invoerder_email,
company_contactpersoon,
company_mailadres,
company_telefoon,
eventid,
fclt_f_evenement,
bedrijfsnaamid,
fclt_f_company,
billtoid,
billto,
fclt_f_lokatie,
ordernummer,
waarde_oranje,
waarde_rood
)
AS SELECT
to_char(m.mld_melding_key),
sd.ins_srtdiscipline_omschrijving,
d.ins_discipline_key,
d.ins_discipline_omschrijving,
std.mld_stdmelding_key,
std.mld_stdmelding_omschrijving,
m.mld_melding_omschrijving,
m.mld_melding_opmerking,
(SELECT prs_bedrijf_naam
FROM prs_bedrijf
WHERE prs_bedrijf_key = (SELECT mld_uitvoerende_keys
FROM mld_opdr
WHERE mld_melding_key = m.mld_melding_key
AND mld_opdr_key = (SELECT min(mld_opdr_key)
FROM mld_opdr
WHERE mld_melding_key = m.mld_melding_key)
)
) leverancier,
to_char(m.mld_melding_datum,'YYYY'),
'Q'|| to_char(m.mld_melding_datum,'Q'),
to_char(m.mld_melding_datum,'MM'),
m.mld_melding_datum,
to_char(m.mld_melding_datum,'YYYY-MM-DD'),
to_char(m.mld_melding_datum,'DD-MM-YYYY HH24:MI'),
m.mld_melding_einddatum,
m.mld_melding_einddatum_std,
CASE
WHEN m.mld_melding_einddatum < COALESCE(fac.gettrackingdate('MLDAFM',m.mld_melding_key),fac.gettrackingdate('MLDREJ',m.mld_melding_key), SYSDATE) THEN 1
ELSE 0
END,
--CASE
-- WHEN mld.getactualuitvoer(m.mld_melding_key) + mld_melding_respijt - m.mld_melding_uitvoertijd > 0 THEN 1
-- ELSE 0
--END,
CASE
WHEN mld.geteinddatum (m.mld_melding_einddatum_std,
m.mld_stdmelding_key,
m.mld_melding_spoed,
m.mld_alg_onroerendgoed_keys,
NULL,
m.mld_melding_t_respijt) <
COALESCE (fac.gettrackingdate('MLDAFM', m.mld_melding_key),fac.gettrackingdate('MLDREJ', m.mld_melding_key), SYSDATE)
THEN 1 -- Te laat volgens SLA als SLA-einddatum + respijt ligt voor gereeddatum/SYSDATE!
ELSE 0
END,
TO_CHAR (FLOOR (COALESCE(fac.gettrackingdate('MLDAFM',m.mld_melding_key),fac.gettrackingdate('MLDREJ',m.mld_melding_key), SYSDATE)- m.mld_melding_datum)) || 'd '
|| TO_CHAR (
MOD (FLOOR ( (COALESCE(fac.gettrackingdate('MLDAFM',m.mld_melding_key),fac.gettrackingdate('MLDREJ',m.mld_melding_key), SYSDATE) - m.mld_melding_datum) * 24), 24)
)
|| 'u '
|| TO_CHAR(MOD (
ROUND ( (COALESCE(fac.gettrackingdate('MLDAFM',m.mld_melding_key),fac.gettrackingdate('MLDREJ',m.mld_melding_key), SYSDATE) - m.mld_melding_datum) * 24 * 60,
0),
60
))
|| 'm' dagenuurmin,
CASE
WHEN ms.mld_statuses_key IN (0, 2, 3, 4, 7, 99) THEN 'Open'
ELSE 'Afgesloten'
END,
CASE
WHEN ms.mld_statuses_key IN (0, 2, 3, 4, 7, 99) THEN 1
ELSE 0
END,
ms.mld_statuses_omschrijving,
ms.mld_statuses_key,
fac.gettrackingdate('MLDAFM',m.mld_melding_key),
COALESCE(to_char(fac.gettrackingdate('MLDAFM',m.mld_melding_key),'YYYY-MM-DD'),'Niet afgemeld'),
to_char(fac.gettrackingdate('MLDAFM',m.mld_melding_key),'DD-MM-YYYY HH24:MI'),
p2.prs_perslid_naam|| NVL2( p2.prs_perslid_voorletters, ', ' || p2.prs_perslid_voorletters, '')|| NVL2( p2.prs_perslid_tussenvoegsel, ' ' || p2.prs_perslid_tussenvoegsel, '')|| NVL2( p2.prs_perslid_voornaam, ' (' || p2.prs_perslid_voornaam || ')', '') afgemeld_door,
p.prs_perslid_naam|| NVL2( p.prs_perslid_voorletters, ', ' || p.prs_perslid_voorletters, '')|| NVL2( p.prs_perslid_tussenvoegsel, ' ' || p.prs_perslid_tussenvoegsel, '')|| NVL2( p.prs_perslid_voornaam, ' (' || p.prs_perslid_voornaam || ')', '') ingevoerd_door,
p.prs_perslid_email,
km3.mld_kenmerkmelding_waarde company_contactpersoon,
km1.mld_kenmerkmelding_waarde company_mailadres, REPLACE(REPLACE(km2.mld_kenmerkmelding_waarde ,' ',''),'-','') company_telefoon,
ebms.eventid, ebms.evenement, ebms.bedrijfsnaamid, ebms.bedrijfsnaam, ebms.billtoid, ebms.billto, ebms.lokatie, ebms.ordernummer,
COALESCE( ( SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 41
AND ud.fac_usrdata_code = 'KPI_STANDSCHOON_GROEN_MIN'
AND ud.fac_usrdata_verwijder IS NULL
), '90'),
COALESCE( ( SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 41
AND ud.fac_usrdata_code = 'KPI_STANDSCHOON_ORANJE_MIN'
AND ud.fac_usrdata_verwijder IS NULL
), '80')
FROM mld_melding m, mld_statuses ms, mld_stdmelding std, ins_tab_discipline d, ins_srtdiscipline sd,
mld_kenmerkmelding km, arai_v_ebms ebms,
mld_kenmerkmelding km1, mld_kenmerkmelding km2, mld_kenmerkmelding km3,
prs_perslid p, prs_perslid p2
WHERE m.prs_perslid_key = p.prs_perslid_key
AND fac.gettrackinguserkey('MLDAFM',m.mld_melding_key) = p2.prs_perslid_key(+)
AND ms.mld_statuses_key = mld_melding_status
AND m.mld_melding_key = km.mld_melding_key (+)
AND km.mld_kenmerk_key (+) = 181
AND km.mld_kenmerkmelding_waarde = ebms.arai_ebms_key(+)
AND m.mld_melding_key = km1.mld_melding_key (+)
AND km1.mld_kenmerk_key (+) = 46
AND m.mld_melding_key = km2.mld_melding_key (+)
AND km2.mld_kenmerk_key (+) = 45
AND m.mld_melding_key = km3.mld_melding_key (+)
AND km3.mld_kenmerk_key (+) = 44
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 sd.ins_srtdiscipline_key = 1;
CREATE OR REPLACE VIEW arai_v_rap_mld_klachten_2
AS SELECT *
FROM arai_v_rap_mld_klachten;
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
--- KLACHTEN ORGANISATOR KLACHTEN ORGANISATOR KLACHTEN ORGANISATOR ---
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
-- sd.ins_srtdiscipline_key = 21 is de meldingtype 'Klachten organisatoren'
-- km.mld_kenmerk_key (+) = 503 is key van kenmerk voor ebms_event
-- km3.mld_kenmerk_key (+) = 501 is key van kenmerk voor contactpersoon
-- km1.mld_kenmerk_key (+) = 502 is key van kenmerk voor mailadres
-- km2.mld_kenmerk_key (+) = 504 is key van kenmerk voor telefoon
CREATE OR REPLACE VIEW arai_v_rap_mld_org_klachten
(
fclt_f_meldingnr,
fclt_f_type,
fclt_3d_discipline_key,
fclt_f_vakgroep,
mld_stdmelding_key,
fclt_f_melding,
mld_melding_omschrijving,
mld_melding_opmerking,
fclt_f_leverancier,
fclt_f_jaar,
fclt_f_kwartaal,
fclt_f_maand,
invoer_datum,
fclt_f_ingevoerd,
invoer_datum_time,
operationele_einddatum,
sla_einddatum,
mld_operationeel_te_laat,
mld_sla_te_laat,
mld_operationeel_dagenuurmin,
fclt_f_lopend,
fclt_key,
fclt_f_status,
status_code,
afmeld_datum,
fclt_f_afgemeld,
afmeld_datum_time,
afgemeld_door,
ingevoerd_door,
invoerder_email,
organisator_contactpersoon,
organisator_mailadres,
organisator_telefoon,
eventid,
fclt_f_evenement,
bedrijfsnaamid,
fclt_f_company,
billtoid,
billto,
fclt_f_lokatie,
ordernummer,
waarde_oranje,
waarde_rood
)
AS SELECT
to_char(m.mld_melding_key),
sd.ins_srtdiscipline_omschrijving,
d.ins_discipline_key,
d.ins_discipline_omschrijving,
std.mld_stdmelding_key,
std.mld_stdmelding_omschrijving,
m.mld_melding_omschrijving,
m.mld_melding_opmerking,
(SELECT prs_bedrijf_naam
FROM prs_bedrijf
WHERE prs_bedrijf_key = (SELECT mld_uitvoerende_keys
FROM mld_opdr
WHERE mld_melding_key = m.mld_melding_key
AND mld_opdr_key = (SELECT min(mld_opdr_key)
FROM mld_opdr
WHERE mld_melding_key = m.mld_melding_key)
)
) leverancier,
to_char(m.mld_melding_datum,'YYYY'),
'Q'|| to_char(m.mld_melding_datum,'Q'),
to_char(m.mld_melding_datum,'MM'),
m.mld_melding_datum,
to_char(m.mld_melding_datum,'YYYY-MM-DD'),
to_char(m.mld_melding_datum,'DD-MM-YYYY HH24:MI'),
m.mld_melding_einddatum,
m.mld_melding_einddatum_std,
CASE
WHEN m.mld_melding_einddatum < COALESCE(fac.gettrackingdate('MLDAFM',m.mld_melding_key),fac.gettrackingdate('MLDREJ',m.mld_melding_key), SYSDATE) THEN 1
ELSE 0
END,
--CASE
-- WHEN mld.getactualuitvoer(m.mld_melding_key) + mld_melding_respijt - m.mld_melding_uitvoertijd > 0 THEN 1
-- ELSE 0
--END,
CASE
WHEN mld.geteinddatum (m.mld_melding_einddatum_std,
m.mld_stdmelding_key,
m.mld_melding_spoed,
m.mld_alg_onroerendgoed_keys,
NULL,
m.mld_melding_t_respijt) <
COALESCE (fac.gettrackingdate('MLDAFM', m.mld_melding_key),fac.gettrackingdate('MLDREJ', m.mld_melding_key), SYSDATE)
THEN 1 -- Te laat volgens SLA als SLA-einddatum + respijt ligt voor gereeddatum/SYSDATE!
ELSE 0
END,
TO_CHAR (FLOOR (COALESCE(fac.gettrackingdate('MLDAFM',m.mld_melding_key),fac.gettrackingdate('MLDREJ',m.mld_melding_key), SYSDATE)- m.mld_melding_datum)) || 'd '
|| TO_CHAR (
MOD (FLOOR ( (COALESCE(fac.gettrackingdate('MLDAFM',m.mld_melding_key),fac.gettrackingdate('MLDREJ',m.mld_melding_key), SYSDATE) - m.mld_melding_datum) * 24), 24)
)
|| 'u '
|| TO_CHAR(MOD (
ROUND ( (COALESCE(fac.gettrackingdate('MLDAFM',m.mld_melding_key),fac.gettrackingdate('MLDREJ',m.mld_melding_key), SYSDATE) - m.mld_melding_datum) * 24 * 60,
0),
60
))
|| 'm' dagenuurmin,
CASE
WHEN ms.mld_statuses_key IN (0, 2, 3, 4, 7, 99) THEN 'Open'
ELSE 'Afgesloten'
END,
CASE
WHEN ms.mld_statuses_key IN (0, 2, 3, 4, 7, 99) THEN 1
ELSE 0
END,
ms.mld_statuses_omschrijving,
ms.mld_statuses_key,
fac.gettrackingdate('MLDAFM',m.mld_melding_key),
COALESCE(to_char(fac.gettrackingdate('MLDAFM',m.mld_melding_key),'YYYY-MM-DD'),'Niet afgemeld'),
to_char(fac.gettrackingdate('MLDAFM',m.mld_melding_key),'DD-MM-YYYY HH24:MI'),
p2.prs_perslid_naam|| NVL2( p2.prs_perslid_voorletters, ', ' || p2.prs_perslid_voorletters, '')|| NVL2( p2.prs_perslid_tussenvoegsel, ' ' || p2.prs_perslid_tussenvoegsel, '')|| NVL2( p2.prs_perslid_voornaam, ' (' || p2.prs_perslid_voornaam || ')', '') afgemeld_door,
p.prs_perslid_naam|| NVL2( p.prs_perslid_voorletters, ', ' || p.prs_perslid_voorletters, '')|| NVL2( p.prs_perslid_tussenvoegsel, ' ' || p.prs_perslid_tussenvoegsel, '')|| NVL2( p.prs_perslid_voornaam, ' (' || p.prs_perslid_voornaam || ')', '') ingevoerd_door,
p.prs_perslid_email,
km3.mld_kenmerkmelding_waarde organisator_contactpersoon,
km1.mld_kenmerkmelding_waarde organisator_mailadres,
REPLACE(REPLACE(km2.mld_kenmerkmelding_waarde ,' ',''),'-','') organisator_telefoon,
ebms.eventid,
ebms.evenement,
ebms.bedrijfsnaamid,
ebms.bedrijfsnaam,
ebms.billtoid,
ebms.billto,
(select alg_onroerendgoed_omschrijving from alg_v_allonrgoed_gegevens where alg_onroerendgoed_keys = m.mld_alg_onroerendgoed_keys),
NULL ebms_ordernummer,
NULL waarde_oranje,
NULL waarde_rood
FROM mld_melding m, mld_statuses ms, mld_stdmelding std, ins_tab_discipline d, ins_srtdiscipline sd,
mld_kenmerkmelding km, arai_v_events ebms,
mld_kenmerkmelding km1, mld_kenmerkmelding km2, mld_kenmerkmelding km3,
prs_perslid p, prs_perslid p2
WHERE m.prs_perslid_key = p.prs_perslid_key
AND fac.gettrackinguserkey('MLDAFM',m.mld_melding_key) = p2.prs_perslid_key(+)
AND ms.mld_statuses_key = mld_melding_status
AND m.mld_melding_key = km.mld_melding_key (+)
AND km.mld_kenmerk_key (+) = 503
AND km.mld_kenmerkmelding_waarde = ebms.arai_events_key(+)
AND m.mld_melding_key = km1.mld_melding_key (+)
AND km1.mld_kenmerk_key (+) = 502
AND m.mld_melding_key = km2.mld_melding_key (+)
AND km2.mld_kenmerk_key (+) = 504
AND m.mld_melding_key = km3.mld_melding_key (+)
AND km3.mld_kenmerk_key (+) = 501
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 sd.ins_srtdiscipline_key = 21;
CREATE OR REPLACE VIEW arai_v_rap_mld_org_klachten_2
AS SELECT *
FROM arai_v_rap_mld_org_klachten;
-----------------------------------------------------------------------------------------------
-- mbmbmb
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
--- KLACHTEN BEZOEKER KLACHTEN BEZOEKER KLACHTEN BEZOEKER ---
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
-- sd.ins_srtdiscipline_key = 22 is de meldingtype 'Klachten BEZOEKERS'
-- km.mld_kenmerk_key (+) = 507 is key van kenmerk voor ebms_event
-- km3.mld_kenmerk_key (+) = 505 is key van kenmerk voor Achternaam (contactpersoon)
-- km1.mld_kenmerk_key (+) = 506 is key van kenmerk voor mailadres
-- km2.mld_kenmerk_key (+) = 508 is key van kenmerk voor telefoon
-- km4.mld_kenmerk_key (+) = 510 is key van kenmerk voor voornaam
-- km5.mld_kenmerk_key (+) = 509 is key van kenmerk voor tussenvoegsel
CREATE OR REPLACE VIEW arai_v_rap_mld_bez_klachten
(
fclt_f_meldingnr,
fclt_f_type,
fclt_3d_discipline_key,
fclt_f_vakgroep,
mld_stdmelding_key,
fclt_f_melding,
mld_melding_omschrijving,
mld_melding_opmerking,
fclt_f_leverancier,
fclt_f_jaar,
fclt_f_kwartaal,
fclt_f_maand,
invoer_datum,
fclt_f_ingevoerd,
invoer_datum_time,
operationele_einddatum,
sla_einddatum,
mld_operationeel_te_laat,
mld_sla_te_laat,
mld_operationeel_dagenuurmin,
fclt_f_lopend,
fclt_key,
fclt_f_status,
status_code,
afmeld_datum,
fclt_f_afgemeld,
afmeld_datum_time,
afgemeld_door,
ingevoerd_door,
invoerder_email,
bezoeker_contactpersoon,
bezoeker_mailadres,
bezoeker_telefoon,
eventid,
fclt_f_evenement,
bedrijfsnaamid,
fclt_f_company,
billtoid,
billto,
fclt_f_lokatie,
ordernummer,
waarde_oranje,
waarde_rood
)
AS SELECT
to_char(m.mld_melding_key),
sd.ins_srtdiscipline_omschrijving,
d.ins_discipline_key,
d.ins_discipline_omschrijving,
std.mld_stdmelding_key,
std.mld_stdmelding_omschrijving,
m.mld_melding_omschrijving,
m.mld_melding_opmerking,
(SELECT prs_bedrijf_naam
FROM prs_bedrijf
WHERE prs_bedrijf_key = (SELECT mld_uitvoerende_keys
FROM mld_opdr
WHERE mld_melding_key = m.mld_melding_key
AND mld_opdr_key = (SELECT min(mld_opdr_key)
FROM mld_opdr
WHERE mld_melding_key = m.mld_melding_key)
)
) leverancier,
to_char(m.mld_melding_datum,'YYYY'),
'Q'|| to_char(m.mld_melding_datum,'Q'),
to_char(m.mld_melding_datum,'MM'),
m.mld_melding_datum,
to_char(m.mld_melding_datum,'YYYY-MM-DD'),
to_char(m.mld_melding_datum,'DD-MM-YYYY HH24:MI'),
m.mld_melding_einddatum,
m.mld_melding_einddatum_std,
CASE
WHEN m.mld_melding_einddatum < COALESCE(fac.gettrackingdate('MLDAFM',m.mld_melding_key),fac.gettrackingdate('MLDREJ',m.mld_melding_key), SYSDATE) THEN 1
ELSE 0
END,
--CASE
-- WHEN mld.getactualuitvoer(m.mld_melding_key) + mld_melding_respijt - m.mld_melding_uitvoertijd > 0 THEN 1
-- ELSE 0
--END,
CASE
WHEN mld.geteinddatum (m.mld_melding_einddatum_std,
m.mld_stdmelding_key,
m.mld_melding_spoed,
m.mld_alg_onroerendgoed_keys,
NULL,
m.mld_melding_t_respijt) <
COALESCE (fac.gettrackingdate('MLDAFM', m.mld_melding_key),fac.gettrackingdate('MLDREJ', m.mld_melding_key), SYSDATE)
THEN 1 -- Te laat volgens SLA als SLA-einddatum + respijt ligt voor gereeddatum/SYSDATE!
ELSE 0
END,
TO_CHAR (FLOOR (COALESCE(fac.gettrackingdate('MLDAFM',m.mld_melding_key),fac.gettrackingdate('MLDREJ',m.mld_melding_key), SYSDATE)- m.mld_melding_datum)) || 'd '
|| TO_CHAR (
MOD (FLOOR ( (COALESCE(fac.gettrackingdate('MLDAFM',m.mld_melding_key),fac.gettrackingdate('MLDREJ',m.mld_melding_key), SYSDATE) - m.mld_melding_datum) * 24), 24)
)
|| 'u '
|| TO_CHAR(MOD (
ROUND ( (COALESCE(fac.gettrackingdate('MLDAFM',m.mld_melding_key),fac.gettrackingdate('MLDREJ',m.mld_melding_key), SYSDATE) - m.mld_melding_datum) * 24 * 60,
0),
60
))
|| 'm' dagenuurmin,
CASE
WHEN ms.mld_statuses_key IN (0, 2, 3, 4, 7, 99) THEN 'Open'
ELSE 'Afgesloten'
END,
CASE
WHEN ms.mld_statuses_key IN (0, 2, 3, 4, 7, 99) THEN 1
ELSE 0
END,
ms.mld_statuses_omschrijving,
ms.mld_statuses_key,
fac.gettrackingdate('MLDAFM',m.mld_melding_key),
COALESCE(to_char(fac.gettrackingdate('MLDAFM',m.mld_melding_key),'YYYY-MM-DD'),'Niet afgemeld'),
to_char(fac.gettrackingdate('MLDAFM',m.mld_melding_key),'DD-MM-YYYY HH24:MI'),
p2.prs_perslid_naam || NVL2( p2.prs_perslid_voorletters, ', ' || p2.prs_perslid_voorletters, '')|| NVL2( p2.prs_perslid_tussenvoegsel, ' ' || p2.prs_perslid_tussenvoegsel, '')|| NVL2( p2.prs_perslid_voornaam, ' (' || p2.prs_perslid_voornaam || ')', '') afgemeld_door,
p.prs_perslid_naam || NVL2( p.prs_perslid_voorletters, ', ' || p.prs_perslid_voorletters, '')|| NVL2( p.prs_perslid_tussenvoegsel, ' ' || p.prs_perslid_tussenvoegsel, '')|| NVL2( p.prs_perslid_voornaam, ' (' || p.prs_perslid_voornaam || ')', '') ingevoerd_door,
p.prs_perslid_email,
km3.mld_kenmerkmelding_waarde || NVL2( km5.mld_kenmerkmelding_waarde, ', ' || km5.mld_kenmerkmelding_waarde, '')|| NVL2( km4.mld_kenmerkmelding_waarde, ' (' || km4.mld_kenmerkmelding_waarde || ')', '') bezoeker_contactpersoon,
km1.mld_kenmerkmelding_waarde bezoeker_mailadres,
REPLACE(REPLACE(km2.mld_kenmerkmelding_waarde ,' ',''),'-','') bezoeker_telefoon,
ebms.eventid,
ebms.evenement,
NULL ebms_bedrijfsnaamid,
NULL ebms_bedrijfsnaam,
NULL ebms_billtoid,
NULL ebms_billto,
NULL lokatie,
NULL ebms_ordernummer,
NULL waarde_oranje,
NULL waarde_rood
FROM mld_melding m, mld_statuses ms, mld_stdmelding std, ins_tab_discipline d, ins_srtdiscipline sd,
mld_kenmerkmelding km, arai_v_events ebms,
mld_kenmerkmelding km1, mld_kenmerkmelding km2, mld_kenmerkmelding km3, mld_kenmerkmelding km4, mld_kenmerkmelding km5,
prs_perslid p, prs_perslid p2
WHERE m.prs_perslid_key = p.prs_perslid_key
AND fac.gettrackinguserkey('MLDAFM',m.mld_melding_key) = p2.prs_perslid_key(+)
AND ms.mld_statuses_key = mld_melding_status
AND m.mld_melding_key = km.mld_melding_key (+)
AND km.mld_kenmerk_key (+) = 507
AND km.mld_kenmerkmelding_waarde = ebms.arai_events_key(+)
AND m.mld_melding_key = km1.mld_melding_key (+)
AND km1.mld_kenmerk_key (+) = 506
AND m.mld_melding_key = km2.mld_melding_key (+)
AND km2.mld_kenmerk_key (+) = 508
AND m.mld_melding_key = km3.mld_melding_key (+)
AND km3.mld_kenmerk_key (+) = 505
AND m.mld_melding_key = km4.mld_melding_key (+)
AND km4.mld_kenmerk_key (+) = 510
AND m.mld_melding_key = km5.mld_melding_key (+)
AND km5.mld_kenmerk_key (+) = 509
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 sd.ins_srtdiscipline_key = 22;
CREATE OR REPLACE VIEW arai_v_rap_mld_bez_klachten_2
AS SELECT *
FROM arai_v_rap_mld_bez_klachten;
CREATE OR REPLACE VIEW arai_v_rap_mld_tot_klachten
AS SELECT *
FROM arai_v_rap_mld_klachten
UNION ALL
SELECT *
FROM arai_v_rap_mld_org_klachten
UNION ALL
SELECT *
FROM arai_v_rap_mld_bez_klachten;
CREATE OR REPLACE VIEW arai_v_rap_mld_tot_klachten_2
AS SELECT *
FROM arai_v_rap_mld_klachten_2
UNION ALL
SELECT *
FROM arai_v_rap_mld_org_klachten_2
UNION ALL
SELECT *
FROM arai_v_rap_mld_bez_klachten_2;
--------------------------------------------------------------------------------------------------------------------------
-- Klachten RTM grafieken
--
-- Alle klachten (exp + org + bez) van de afgelopen 12 maanden.
CREATE OR REPLACE VIEW arai_v_graph_kl_maand
(
fclt_key,
FCLT_XAS_,
FCLT_YAS_OP_TIJD,
FCLT_YAS2_TE_LAAT,
FCLT_YAS3_TOTAAL,
FCLT_URL,
VOLGORDE
)
AS
SELECT NULL, to_char(to_date(fclt_f_maand,'MM'),'mon'), count(*) - SUM(mld_sla_te_laat), SUM(mld_sla_te_laat), count(*),
'appl/fac/fac_usrrap_list.asp?usrrap_key=181' || '&' || 'fclt_f_colname1=fclt_f_jaar' || '&' || 'fclt_f_colvalue1=' || fclt_f_jaar || '&' || 'fclt_f_colname2=fclt_f_maand' || '&' || 'fclt_f_colvalue2=' || fclt_f_maand,
fclt_f_jaar || fclt_f_maand
FROM arai_v_rap_mld_tot_klachten_2
WHERE invoer_datum > SYSDATE - 365
GROUP BY fclt_f_jaar, fclt_f_maand;
--
-- Basisview met de laatste 7 dagen (nodig om 'klachtloze' dagen ook in grafiek te kunnen tonen)
CREATE OR REPLACE VIEW arai_v_7_dagen
(datum, dag)
AS
SELECT TRUNC(SYSDATE - (LEVEL - 1)) datum, substr(to_char(SYSDATE - (LEVEL - 1), 'day'), 1, 2) dag
FROM DUAL
CONNECT BY LEVEL <= 7;
-- Alle klachten (exp + org + bez) van de afgelopen 7 dagen.
CREATE OR REPLACE VIEW arai_v_graph_kl_dag
(
fclt_key,
FCLT_XAS_,
FCLT_YAS_OP_TIJD,
FCLT_YAS2_TE_LAAT,
FCLT_YAS3_TOTAAL,
FCLT_URL,
VOLGORDE
)
AS
SELECT NULL, substr(to_char(to_date(fclt_f_ingevoerd, 'YYYY-MM-DD') ,'day'),1,2), count(*) - SUM(mld_sla_te_laat), SUM(mld_sla_te_laat), count(*),
'appl/fac/fac_usrrap_list.asp?usrrap_key=181' || '&' || 'fclt_f_colname1=fclt_f_ingevoerd' || '&' || 'fclt_f_colvalue1=' || fclt_f_ingevoerd,
fclt_f_ingevoerd
FROM arai_v_rap_mld_tot_klachten_2
WHERE TRUNC(invoer_datum) > TRUNC(SYSDATE - 7)
GROUP BY to_char(to_date(fclt_f_ingevoerd, 'YYYY-MM-DD') ,'day'), fclt_f_ingevoerd
UNION
SELECT NULL, dag, 0, 0, 0, '', to_char(datum, 'yyyy-mm-dd')
FROM arai_v_7_dagen
WHERE NOT EXISTS (select 'x' FROM arai_v_rap_mld_tot_klachten_2
WHERE TRUNC(invoer_datum) > TRUNC(SYSDATE - 7)
AND to_char(datum, 'yyyy-mm-dd') = fclt_f_ingevoerd);
-- Basisview met de laatste x-aantal uren (nodig om 'klachtloze' uurtjes ook in grafiek te kunnen tonen)
CREATE OR REPLACE VIEW arai_v_24_uren
(datum, uur)
AS
SELECT TRUNC(SYSDATE - (LEVEL/24 - 1/24)) datum, to_char(SYSDATE - (LEVEL/24 - 1/24), 'hh24') uur
FROM DUAL
CONNECT BY LEVEL <= 24;
-- Alle klachten (exp + org + bez) van de afgelopen 24 uren.
CREATE OR REPLACE VIEW arai_v_graph_kl_uur
(
fclt_key,
FCLT_XAS_,
FCLT_YAS_OP_TIJD,
FCLT_YAS2_TE_LAAT,
FCLT_YAS3_TOTAAL,
FCLT_URL,
VOLGORDE
)
AS
SELECT NULL, to_char(invoer_datum,'hh24'), count(*) - SUM(mld_sla_te_laat), SUM(mld_sla_te_laat), count(*),
'appl/fac/fac_usrrap_list.asp?usrrap_key=181' || '&' || 'fclt_f_colname1=invoer_datum_time' || '&' || 'fclt_f_colvalue1=' || to_char(invoer_datum,'dd-mm-yyyy') || ' ' || to_char(invoer_datum,'hh24') || ':*',
to_char(invoer_datum,'hh24')
FROM arai_v_rap_mld_tot_klachten_2
WHERE TRUNC(invoer_datum) = TRUNC(SYSDATE)
GROUP BY to_char(invoer_datum,'dd-mm-yyyy'), to_char(invoer_datum,'hh24')
UNION
SELECT NULL, uur, 0, 0 ,0, '', uur
FROM arai_v_24_uren
WHERE datum = TRUNC(SYSDATE)
AND NOT EXISTS (SELECT 'x' FROM arai_v_rap_mld_tot_klachten_2
WHERE TRUNC(invoer_datum)= TRUNC(SYSDATE)
AND to_char(invoer_datum,'hh24') = uur);
-- Alle openstaande klachten per leverancier.
-- FCLT_YAS_ zijn de klachten die nog op tijd zijn, (blauw)
-- FCLT_YAS2_ zijn de klachten die te laat tijd zijn (rood),
CREATE OR REPLACE VIEW arai_v_graph_kl_open_lev
(
fclt_key,
FCLT_XAS_,
FCLT_YAS_,
FCLT_YAS2_,
FCLT_URL,
VOLGORDE
)
AS
SELECT NULL, fclt_f_leverancier, count(*) - SUM(mld_sla_te_laat), SUM(mld_sla_te_laat),
'appl/fac/fac_usrrap_list.asp?usrrap_key=181' || '&' || 'fclt_f_colname1=fclt_f_leverancier' || '&' || 'fclt_f_colvalue1=' || fclt_f_leverancier || '&' || 'fclt_f_colname2=fclt_f_lopend' || '&' || 'fclt_f_colvalue2=' || fclt_f_lopend,
0 - count(*)
FROM arai_v_rap_mld_tot_klachten_2
WHERE UPPER(fclt_f_lopend) = 'OPEN'
GROUP BY fclt_f_leverancier, fclt_f_lopend;
-- Top evenement klachten afgelopen maanden
CREATE OR REPLACE VIEW arai_v_graph_kl_event
(
fclt_key,
FCLT_XAS_,
FCLT_YAS_,
FCLT_YAS2_,
FCLT_URL,
VOLGORDE
)
AS
SELECT NULL, fclt_f_evenement, count(*) - SUM(mld_sla_te_laat), SUM(mld_sla_te_laat),
'appl/fac/fac_usrrap_list.asp?usrrap_key=181' || '&' || 'fclt_f_colname1=fclt_f_evenement' || '&' || 'fclt_f_colvalue1=' || fclt_f_evenement,
0 - count(*)
FROM arai_v_rap_mld_tot_klachten_2
WHERE invoer_datum > SYSDATE - 365
GROUP BY fclt_f_evenement;
-- Top leverancier klachten afgelopen maanden
CREATE OR REPLACE VIEW arai_v_graph_kl_lev
(
fclt_key,
FCLT_XAS_,
FCLT_YAS_,
FCLT_YAS2_,
FCLT_URL,
VOLGORDE
)
AS
SELECT NULL, fclt_f_leverancier, count(*) - SUM(mld_sla_te_laat), SUM(mld_sla_te_laat),
'appl/fac/fac_usrrap_list.asp?usrrap_key=181' || '&' || 'fclt_f_colname1=fclt_f_leverancier' || '&' || 'fclt_f_colvalue1=' || fclt_f_leverancier,
0 - count(*)
FROM arai_v_rap_mld_tot_klachten_2
WHERE invoer_datum > SYSDATE - 365
GROUP BY fclt_f_leverancier;
---------------------------------------------------------------------------------------------------------------------------
-- Bijzonder handige check-rapportage of er wordt voldaan aan het geheel om automatische opdrachten aan te maken bij stdmelding->dienst->bedrijf
CREATE OR REPLACE VIEW arai_v_rap_mlddienstbedrijf
(
fclt_f_meldingtype,
fclt_f_vakgroep,
MLD_STDMELDING_KEY,
MLD_STDMELDING_OMSCHRIJVING,
uitvoertijd_uur,
auto_opdracht,
fclt_f_dienst,
fclt_f_locatie,
fclt_f_gebouw,
fclt_f_bedrijf,
mailadres
)
AS
SELECT SD.INS_SRTDISCIPLINE_OMSCHRIJVING,
DIS.INS_DISCIPLINE_OMSCHRIJVING,
SM.MLD_STDMELDING_KEY,
SM.MLD_STDMELDING_OMSCHRIJVING,
--ROUND (MLD_STDMELDING_UITVOERTIJD * 24, 2),
--TO_CHAR (ROUND (SM.MLD_STDMELDING_T_UITVOERTIJD.tijdsduur, 2)) || SM.MLD_STDMELDING_T_UITVOERTIJD.eenheid,
CASE
WHEN SM.MLD_STDMELDING_T_UITVOERTIJD.eenheid = 'D'
THEN
ROUND (SM.MLD_STDMELDING_T_UITVOERTIJD.tijdsduur * 24, 2)
ELSE
ROUND (SM.MLD_STDMELDING_T_UITVOERTIJD.tijdsduur, 2)
END,
DECODE (
MLD_STDMELDING_autoorder,
1,
'Ja - Opdracht: '
|| COALESCE (top.mld_typeopdr_omschrijving, 'Geen')
|| ' - Dienst vereist:'
|| DECODE (MLD_STDMELDING_vereisdienst, 1, 'Ja', 'Nee'),
'Nee'),
D.PRS_DIENST_OMSCHRIJVING,
COALESCE (L.ALG_LOCATIE_OMSCHRIJVING, '*'),
COALESCE (G.ALG_GEBOUW_NAAM, '*'),
B.PRS_BEDRIJF_NAAM,
B.PRS_BEDRIJF_EMAIL
FROM mld_stdmelding sm,
prs_dienst d,
prs_bedrijf b,
prs_bedrijfdienstlocatie bdl,
mld_discipline dis,
ins_srtdiscipline sd,
alg_locatie l,
alg_gebouw g,
mld_typeopdr top
WHERE SM.PRS_DIENST_KEY = D.PRS_DIENST_KEY
AND d.prs_dienst_key = BDL.PRS_DIENST_KEY
AND BDL.PRS_BEDRIJF_KEY = b.prs_bedrijf_key
AND SM.MLD_INS_DISCIPLINE_KEY = DIS.INS_DISCIPLINE_KEY
AND DIS.INS_SRTDISCIPLINE_KEY = SD.INS_SRTDISCIPLINE_KEY
AND bdl.alg_locatie_key = l.alg_locatie_key(+)
AND bdl.alg_gebouw_key = g.alg_gebouw_key(+)
AND sm.MLD_TYPEOPDR_KEY = top.MLD_TYPEOPDR_KEY(+);
---------------------------------------------------------------------------------------------------------------------------
-- Alle standschoonmaak-klachten
CREATE OR REPLACE VIEW arai_v_standschoonmaak_alle
(
fclt_f_meldingnr,
fclt_f_type,
fclt_discipline_key,
fclt_f_vakgroep,
mld_stdmelding_key,
fclt_f_melding,
mld_melding_omschrijving,
mld_melding_opmerking,
fclt_f_leverancier,
fclt_f_jaar,
fclt_f_kwartaal,
fclt_f_maand,
invoer_datum,
fclt_f_ingevoerd,
invoer_datum_time,
operationele_einddatum,
sla_einddatum,
mld_operationeel_te_laat,
mld_sla_te_laat,
mld_operationeel_dagenuurmin,
fclt_f_lopend,
fclt_key,
fclt_f_status,
status_code,
afmeld_datum,
fclt_f_afgemeld,
afmeld_datum_time,
afgemeld_door,
ingevoerd_door,
invoerder_email,
company_contactpersoon,
company_mailadres,
company_telefoon,
eventid,
fclt_f_evenement,
bedrijfsnaamid,
fclt_f_company,
billtoid,
billto,
fclt_f_lokatie,
ordernummer,
waarde_oranje,
waarde_rood
)
AS SELECT *
FROM arai_v_rap_mld_klachten
WHERE fclt_3d_discipline_key = 221;
CREATE OR REPLACE VIEW arai_v_rap_standschoonmaak_all
AS SELECT *
FROM arai_v_standschoonmaak_alle;
-- Alle standschoonmaak-klachten die VANDAAG zijn AFGEMELD
CREATE OR REPLACE VIEW arai_v_standschoon_afgemeld
AS SELECT *
FROM arai_v_standschoonmaak_alle
WHERE TRUNC(afmeld_datum) = TRUNC(SYSDATE);
-- Alle LOPENDE! (statuscode in 0, 2, 3, 4, 7, 99) klachten over standschoonmaak, van niet alleen vandaag, maar ook die gisteren, eergisteren etc zijn gemaakt.
CREATE OR REPLACE VIEW arai_v_rap_standschoon_lopend
AS SELECT *
FROM arai_v_standschoonmaak_alle
WHERE status_code IN (0, 2, 3, 4, 7, 99);
-- UNION van arai_v_standschoon_afgemeld + arai_v_rap_standschoon_lopend,
-- Dus Alle afgemelde standschoonmaakklachten van vandaag en de nog lopende (actuele).
CREATE OR REPLACE VIEW arai_v_standschoon_today
AS SELECT *
FROM arai_v_standschoon_afgemeld
UNION
SELECT *
FROM arai_v_rap_standschoon_lopend;
-- Deze view gebruiken voor 'random' binnenkomende KPI-metingen als klachten, om een timetable te hebben voor b.v. grafieken
CREATE OR REPLACE VIEW arai_v_timetable_halve_uren (datum, tijd)
AS
SELECT TRUNC(SYSDATE) + (LEVEL-1)/48 datum,
TO_CHAR (TRUNC(SYSDATE) + (LEVEL-1)/48, 'HH24:MI') tijd
FROM DUAL
CONNECT BY LEVEL <= 24*2;
-- Grafiek 1 (lijngrafiek): KPI percentage op tijd afgehandelde klachten schone stands van vandaag van max. 8 uur terug in de tijd uitgezet.
-- Daarbij worden de onregelmatige controle-tijden (naar boven) afgerond op halve uren (dus hh:00 of hh:30),
-- Dus X-as bestaat uit maximaal 8 uur x 2 (ieder half uur) = 16 waarden, b.v. 10:00, 10:30, 11:00, ... t/m 17:30.
-- De Y-as bestaat uit een percentage van op tijd afgehandelde klachten standschoonmaak tov. alle lopende klachten binnen dat tijdstip van het halve uur.
-- Eerst een 1e hulp-tabel (temp-tabel)
CREATE OR REPLACE VIEW arai_v_kpi_schonestand_nu
(
fclt_f_meldingnr,
FCLT_XAS_TIJD,
mld_operationeel_te_laat,
waarde_oranje,
waarde_rood
)
AS SELECT
fclt_f_meldingnr,
TO_CHAR(SYSDATE, 'HH24:MI'),
CASE
WHEN SYSDATE <= kpi.operationele_einddatum THEN 0
ELSE 1
END,
waarde_oranje,
waarde_rood
FROM arai_v_rap_standschoon_lopend kpi;
-- Dan een 2e hulp-tabel (temp-tabel)
CREATE OR REPLACE VIEW arai_v_tmp_graph_schonestand
(
fclt_f_meldingnr,
FCLT_XAS_TIJD,
mld_operationeel_te_laat,
waarde_oranje,
waarde_rood
)
AS
SELECT
fclt_f_meldingnr,
hu.tijd,
CASE
WHEN hu.datum <= kpi.operationele_einddatum THEN 0
ELSE 1
END,
waarde_oranje,
waarde_rood
FROM arai_v_standschoon_today kpi, arai_v_timetable_halve_uren hu
WHERE hu.datum <= SYSDATE
AND hu.datum <= COALESCE(kpi.afmeld_datum, SYSDATE)
AND hu.datum >= kpi.invoer_datum
UNION
SELECT fclt_f_meldingnr,
FCLT_XAS_TIJD,
mld_operationeel_te_laat,
waarde_oranje,
waarde_rood
FROM arai_v_kpi_schonestand_nu;
CREATE OR REPLACE VIEW arai_v_graph_kpi_schonestand
(
FCLT_XAS_TIJD,
FCLT_YAS_PERC,
goed,
fout,
waarde_oranje,
waarde_rood
)
AS
SELECT FCLT_XAS_TIJD,
ROUND(SUM(mld_operationeel_te_laat)/COUNT(*)*100,1),
ROUND(100 - (SUM(mld_operationeel_te_laat)/COUNT(*)*100),1),
ROUND(SUM(mld_operationeel_te_laat)/COUNT(*)*100,1),
MIN(waarde_oranje),
MIN(waarde_rood)
FROM arai_v_tmp_graph_schonestand
GROUP BY FCLT_XAS_TIJD
UNION
SELECT
hu.tijd, 0, 100, 0, '0', '0'
FROM arai_v_timetable_halve_uren hu
WHERE hu.datum < SYSDATE
AND NOT EXISTS
(SELECT 'x'
FROM arai_v_tmp_graph_schonestand t
WHERE t.FCLT_XAS_TIJD = hu.tijd);
CREATE OR REPLACE VIEW arai_v_rap_kpi_standschoon
( FCLT_XAS_TIJD,
goed,
fout,
KPI_STATUS
)
AS
SELECT FCLT_XAS_TIJD, goed, fout,
CASE
WHEN goed >= waarde_oranje THEN 0
WHEN goed >= waarde_rood THEN 1
ELSE 2
END
FROM arai_v_graph_kpi_schonestand
WHERE fclt_xas_tijd = (select max(fclt_xas_tijd) from arai_v_graph_kpi_schonestand);
-- Grafiek 2 (barchart met rood/oranje/groen): KPI precentage schone toiletten per gebouw, van vandaag van max. 8 uur terug in de tijd uitgezet.
-- FCLT_YAS_SCHOON is de y-as voor rood
-- FCLT_YAS2_SCHOON is de y-as voor groen
-- FCLT_YAS3_SCHOON is de y-as voor oranje
-- Barchart met 3 kleuren: groen (temp = okee), oranje (temp is oranje) en rood (temp is rood)
CREATE OR REPLACE VIEW arai_v_graph_kpi_schonestand2
(
FCLT_XAS_TIJD,
FCLT_YAS_PERC,
FCLT_YAS2_PERC,
FCLT_YAS3_PERC
)
AS
SELECT
FCLT_XAS_TIJD,
CASE
WHEN goed IS NULL THEN 0
WHEN goed < waarde_rood THEN fout
ELSE 0
END,
CASE
WHEN goed IS NULL THEN 0
WHEN goed >= waarde_oranje THEN fout
ELSE 0
END,
CASE
WHEN goed IS NULL THEN 0
WHEN goed >= waarde_rood AND
goed < waarde_oranje THEN fout
ELSE 0
END
FROM arai_v_graph_kpi_schonestand;
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
--- KPI OVERALL KPI OVERALL KPI OVERALL KPI OVERALL ---
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
-- STATUS = 0 (is okee), 1 = oranje, 2 = rood, -1 = grijs
CREATE OR REPLACE VIEW arai_v_rap_kpi_all
(
KPI_NAAM,
KPI_STATUS,
FCLT_URL,
USR_RAP_ALL_DETAILS
)
AS
SELECT 'TEMPERATUUR',
(SELECT COALESCE(MAX(kpi_temperatuur),-1) FROM
(SELECT
CASE
WHEN avg_temp IS NULL THEN 2
WHEN avg_temp < min_waarde THEN 2
WHEN avg_temp > max_waarde THEN 2
WHEN avg_temp < min_waarde_oranje THEN 1
WHEN avg_temp > max_waarde_oranje THEN 1
ELSE 0
END kpi_temperatuur
FROM arai_v_rap_kpi_temp_per_ruimte
WHERE join_kpi = 3)
), 'arai_v_rap_kpi_temp_per_ruimte', 'arai_v_rap_temp_per_ruimte'
FROM DUAL
-- UNION ALL
-- SELECT 'ICT',
-- (SELECT COALESCE(MAX(kpi_ict_mitel),-1) FROM
-- (SELECT
-- CASE
-- WHEN kpi_color_overrule IS NOT NULL THEN kpi_color_overrule
-- WHEN ins_kenmerkdeel_waarde IS NULL THEN -1
-- WHEN ins_kenmerkdeel_waarde >= waarde_rood THEN 2
-- WHEN ins_kenmerkdeel_waarde >= waarde_oranje THEN 1
-- ELSE 0
-- END kpi_ict_mitel
-- FROM arai_v_kpi_ict_mitel
-- WHERE ins_kenmerkdeel_verwijder IS NULL
-- AND trunc_datum = TRUNC(SYSDATE))
-- ), 'arai_v_rap_kpi_ict_mitel', ''
-- FROM DUAL
UNION ALL
SELECT 'TOILETSCHOONMAAK',
(SELECT COALESCE(MAX(KPI_STATUS),-1) FROM arai_v_kpi_toilet_gebouw),
'arai_v_kpi_toilet_gebouw', 'arai_v_rap_kpi_toilet_all'
FROM DUAL
UNION ALL
SELECT 'STANDSCHOONMAAK',
(SELECT COALESCE(MAX(KPI_STATUS),-1) FROM arai_v_rap_kpi_standschoon),
'arai_v_rap_kpi_standschoon', 'arai_v_rap_standschoonmaak_all'
FROM DUAL;
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
--- QRC TOILET SCHOONMAAK QRC TOILET SCHOONMAAK QRC TOILET SCHOONMAAK ---
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE VIEW arai_v_ins_qrc_toilet
(fclt_3d_discipline_key, fclt_3d_locatie_key, fclt_f_locatie, fclt_f_gebouw, plaats, soortruimte, ins_srtdeel_code, ins_srtdeel_omschrijving, ins_deel_omschrijving, ins_deel_key, ins_srtdeel_key,
fclt_f_objectsoort, ins_alg_ruimte_type, alg_district_key, ins_deel_upper, alg_ruimte_key, hide_f_bookmark_id
)
AS
SELECT i.ins_discipline_key,
l.alg_locatie_key,
l.alg_locatie_omschrijving,
o.alg_gebouw_omschrijving,
o.alg_plaatsaanduiding plaats,
(SELECT r.alg_ruimte_omschrijving
FROM alg_ruimte r
WHERE r.alg_ruimte_key = i.ins_alg_ruimte_key) soortruimte,
s.ins_srtdeel_code,
s.ins_srtdeel_omschrijving,
i.ins_deel_omschrijving,
i.ins_deel_key,
s.ins_srtdeel_key,
s.ins_srtdeel_upper,
i.ins_alg_ruimte_type,
l.alg_district_key,
ins_deel_upper,
i.ins_alg_ruimte_key,
b.fac_bookmark_id
FROM ins_deel i,
ins_v_alg_overzicht o,
ins_srtdeel s,
alg_locatie l,
alg_district di,
fac_bookmark b
WHERE b.fac_bookmark_naam = 'KPI_TOILETSCHOONMAAK'
AND s.ins_srtdeel_key = 21
AND ins_deel_verwijder IS NULL
AND i.ins_deel_module = 'INS'
AND i.ins_deel_parent_key IS NULL
AND o.alg_onroerendgoed_keys = i.ins_alg_ruimte_key
AND o.alg_onroerendgoed_type = i.ins_alg_ruimte_type
AND i.ins_alg_ruimte_type IN ('T', 'R', 'W')
AND o.alg_locatie_key = i.ins_alg_locatie_key
AND i.ins_alg_locatie_key = l.alg_locatie_key
AND l.alg_district_key = di.alg_district_key
AND s.ins_srtdeel_key = i.ins_srtdeel_key;
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
--- Export URENREGISTRATIE Export URENREGISTRATIE Export URENREGISTRATIE Export URENREGISTRATIE ---
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE VIEW arai_v_export_urenregistratie (
result,
result_order
)
AS
SELECT REPLACE(REPLACE(m.mld_melding_key
|| ';'
|| k.mld_kenmerk_volgnummer
|| ';'
|| sk.mld_srtkenmerk_omschrijving
|| ';'
|| km.mld_kenmerkmelding_waarde
|| ';'
|| sk1.mld_srtkenmerk_omschrijving
|| ';'
|| km1.mld_kenmerkmelding_waarde
|| ';'
|| sk2.mld_srtkenmerk_omschrijving
|| ';'
|| km2.mld_kenmerkmelding_waarde
,CHR (13), ''), CHR (10), '<ret>'), m.mld_melding_key || '-' || k.mld_kenmerk_volgnummer
FROM mld_melding m, mld_kenmerkmelding km, mld_kenmerk k, mld_srtkenmerk sk,
mld_kenmerkmelding km1, mld_kenmerk k1, mld_srtkenmerk sk1,
mld_kenmerkmelding km2, mld_kenmerk k2, mld_srtkenmerk sk2
WHERE m.mld_melding_status = 5
AND km.mld_melding_key = m.mld_melding_key
AND km1.mld_melding_key = m.mld_melding_key
AND km2.mld_melding_key = m.mld_melding_key
AND km.mld_kenmerkmelding_waarde IS NOT NULL
AND km1.mld_kenmerkmelding_waarde IS NOT NULL
AND km2.mld_kenmerkmelding_waarde IS NOT NULL
AND km.mld_kenmerk_key= k.mld_kenmerk_key
AND km1.mld_kenmerk_key= k1.mld_kenmerk_key
AND km2.mld_kenmerk_key= k2.mld_kenmerk_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND k1.mld_srtkenmerk_key = sk1.mld_srtkenmerk_key
AND k2.mld_srtkenmerk_key = sk2.mld_srtkenmerk_key
AND k.mld_kenmerk_volgnummer >= 910
AND k.mld_kenmerk_volgnummer <= 919
AND k1.mld_kenmerk_volgnummer >= 910
AND k1.mld_kenmerk_volgnummer <= 919
AND k2.mld_kenmerk_volgnummer >= 910
AND k2.mld_kenmerk_volgnummer <= 919
AND km.mld_kenmerkmelding_key <> km1.mld_kenmerkmelding_key
AND km1.mld_kenmerkmelding_key <> km2.mld_kenmerkmelding_key
AND km.mld_kenmerkmelding_key <> km2.mld_kenmerkmelding_key
AND sk.mld_srtkenmerk_key <> sk1.mld_srtkenmerk_key
AND sk1.mld_srtkenmerk_key <> sk2.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_key <> sk2.mld_srtkenmerk_key
AND SK.MLD_SRTKENMERK_KENMERKTYPE = 'S'
AND SK1.MLD_SRTKENMERK_KENMERKTYPE = 'D'
AND SK2.MLD_SRTKENMERK_KENMERKTYPE = 'N'
AND k.mld_kenmerk_volgnummer =k1.mld_kenmerk_volgnummer
AND k1.mld_kenmerk_volgnummer =k2.mld_kenmerk_volgnummer
AND k1.mld_kenmerk_volgnummer =k2.mld_kenmerk_volgnummer;
CREATE OR REPLACE PROCEDURE arai_select_urenregistratie (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2
)
AS
v_errormsg VARCHAR (200);
BEGIN
v_errormsg := 'Geen akties';
END;
/
-- Procedure om alle geexporteerde facturen naar status verwerkt te zetten.
CREATE OR REPLACE PROCEDURE arai_export_urenregistratie (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2
)
AS
CURSOR c_uren
IS
--SELECT m.mld_melding_key, k.mld_kenmerk_volgnummer, k.mld_kenmerk_key, km.mld_kenmerkmelding_waarde uitvoerder, sk.mld_srtkenmerk_omschrijving,
-- k1.mld_kenmerk_volgnummer, k1.mld_kenmerk_key, km1.mld_kenmerkmelding_waarde datum, sk1.mld_srtkenmerk_omschrijving,
-- k2.mld_kenmerk_volgnummer, k2.mld_kenmerk_key, km2.mld_kenmerkmelding_waarde uren, sk2.mld_srtkenmerk_omschrijving
SELECT m.mld_melding_key, km.mld_kenmerkmelding_waarde uitvoerder,km.mld_kenmerkmelding_key key_uitvoerder,
km1.mld_kenmerkmelding_waarde datum, km1.mld_kenmerkmelding_key key_datum,
km2.mld_kenmerkmelding_waarde uren, km2.mld_kenmerkmelding_key key_uren
FROM mld_melding m, mld_kenmerkmelding km, mld_kenmerk k, mld_srtkenmerk sk,
mld_kenmerkmelding km1, mld_kenmerk k1, mld_srtkenmerk sk1,
mld_kenmerkmelding km2, mld_kenmerk k2, mld_srtkenmerk sk2
WHERE m.mld_melding_status = 5
AND km.mld_melding_key = m.mld_melding_key
AND km1.mld_melding_key = m.mld_melding_key
AND km2.mld_melding_key = m.mld_melding_key
AND km.mld_kenmerkmelding_waarde IS NOT NULL
AND km1.mld_kenmerkmelding_waarde IS NOT NULL
AND km2.mld_kenmerkmelding_waarde IS NOT NULL
AND km.mld_kenmerk_key= k.mld_kenmerk_key
AND km1.mld_kenmerk_key= k1.mld_kenmerk_key
AND km2.mld_kenmerk_key= k2.mld_kenmerk_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND k1.mld_srtkenmerk_key = sk1.mld_srtkenmerk_key
AND k2.mld_srtkenmerk_key = sk2.mld_srtkenmerk_key
AND k.mld_kenmerk_volgnummer >= 910
AND k.mld_kenmerk_volgnummer <= 919
AND k1.mld_kenmerk_volgnummer >= 910
AND k1.mld_kenmerk_volgnummer <= 919
AND k2.mld_kenmerk_volgnummer >= 910
AND k2.mld_kenmerk_volgnummer <= 919
AND km.mld_kenmerkmelding_key <> km1.mld_kenmerkmelding_key
AND km1.mld_kenmerkmelding_key <> km2.mld_kenmerkmelding_key
AND km.mld_kenmerkmelding_key <> km2.mld_kenmerkmelding_key
AND sk.mld_srtkenmerk_key <> sk1.mld_srtkenmerk_key
AND sk1.mld_srtkenmerk_key <> sk2.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_key <> sk2.mld_srtkenmerk_key
AND SK.MLD_SRTKENMERK_KENMERKTYPE = 'S'
AND SK1.MLD_SRTKENMERK_KENMERKTYPE = 'D'
AND SK2.MLD_SRTKENMERK_KENMERKTYPE = 'N'
AND k.mld_kenmerk_volgnummer =k1.mld_kenmerk_volgnummer
AND k1.mld_kenmerk_volgnummer =k2.mld_kenmerk_volgnummer
AND k1.mld_kenmerk_volgnummer =k2.mld_kenmerk_volgnummer
ORDER BY m.mld_melding_key, k.mld_kenmerk_volgnummer;
v_opdr_volgnr NUMBER;
v_kostenplaats_key NUMBER;
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
BEGIN
v_errormsg := 'Geen akties';
-- Elke record met hetzelfde volgnummer bevat achtereenvolgens:
-- 1. Uitvoerder (prs_perslid_key)
-- 2. Datum (dag waarop gewerkt is)
-- 3. Uren (hoeveel uren er zijn besteed)
FOR c_uur IN c_uren
LOOP
SELECT COALESCE(max(mld_opdr_bedrijfopdr_volgnr),0) + 1
INTO v_opdr_volgnr
FROM mld_opdr
WHERE mld_melding_key = c_uur.mld_melding_key;
SELECT prs_kostenplaats_key
INTO v_kostenplaats_key
FROM mld_melding
WHERE mld_melding_key = c_uur.mld_melding_key;
-- mld_statusopdr_key = 6 betekent 'afgemelde' opdracht.
-- mld_typeopdr_key = 281 betekent 'interne' opdracht (dwz urenregistratie opdrachttype)
INSERT INTO mld_opdr
(mld_opdr_module, mld_melding_key, mld_opdr_bedrijfopdr_volgnr, mld_uitvoerende_keys, mld_typeopdr_key, mld_statusopdr_key,
mld_opdr_datumbegin, mld_opdr_einddatum, mld_opdr_uren, prs_kostenplaats_key)
SELECT 'MLD', c_uur.mld_melding_key, v_opdr_volgnr, to_number(c_uur.uitvoerder), 281, 6 ,
to_date(c_uur.datum,'DD-MM-YYYY'), to_date(c_uur.datum,'DD-MM-YYYY'), to_number(c_uur.uren), v_kostenplaats_key
FROM DUAL;
INSERT INTO mld_opdr_uren
(mld_opdr_key, mld_opdr_uren_datum, prs_perslid_key, mld_opdr_uren_besteed, mld_opdr_uren_status)
SELECT MAX(mld_opdr_key), to_date(c_uur.datum,'DD-MM-YYYY'), to_number(c_uur.uitvoerder), to_number(c_uur.uren), 3 FROM mld_opdr;
DELETE FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_key IN (c_uur.key_uitvoerder, c_uur.key_datum, c_uur.key_uren);
END LOOP;
END;
/
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Import KPI waarden Import KPI waarden Import KPI waarden Import KPI waarden Import KPI waarden ---
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Import KPI temperatuur Import KPI temperatuur Import KPI temperatuur Import KPI temperatuur ---
----------------------------------------------------------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE arai_notify_kpi_temp
(
p_import_key IN NUMBER
)
IS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errorhint2 VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count_tot NUMBER (10);
v_count_error NUMBER (10);
v_count NUMBER (10);
-- fac_usrtab_key = 21 is de tabel '$KPI_NOTIFY': SYSTEM TABEL: KEEP OUT!
-- SYNTAX code = KPI_<kpi-naam>_<mail-of-sms>, dus b.v. 'KPI_TEMP_MAIL', 'KPI_ICT_MITEL_MAIL', 'KPI_TEMP_SMS', 'KPI_ICT_MITEL_SMS',
-- Met volgnr = 1 wordt aangegeven dat het een actieve notificatie is, lege waarde of 0 (of iets anders) is inactief cq. tijdelijk uitgezet.
CURSOR c_kpi_temp_notify_mail_kpi
IS
SELECT fac_usrdata_omschr
FROM fac_usrdata
WHERE fac_usrtab_key = 21
AND fac_usrdata_code like 'KPI_TEMP_MAIL%'
AND fac_usrdata_verwijder IS NULL
AND fac_usrdata_volgnr = 1;
CURSOR c_kpi_temp_notify_mail_evm
IS
SELECT fac_usrdata_omschr
FROM fac_usrdata
WHERE fac_usrtab_key = 21
AND fac_usrdata_code like 'EVM_MAIL%'
AND fac_usrdata_verwijder IS NULL
AND fac_usrdata_volgnr = 1;
CURSOR c_kpi_temp_notify_sms_kpi
IS
SELECT fac_usrdata_omschr
FROM fac_usrdata
WHERE fac_usrtab_key = 21
AND fac_usrdata_code like 'KPI_TEMP_SMS%'
AND fac_usrdata_verwijder IS NULL
AND fac_usrdata_volgnr = 1;
CURSOR c_kpi_temp_notify_sms_evm
IS
SELECT fac_usrdata_omschr
FROM fac_usrdata
WHERE fac_usrtab_key = 21
AND fac_usrdata_code like 'EVM_SMS%'
AND fac_usrdata_verwijder IS NULL
AND fac_usrdata_volgnr = 1;
CURSOR c_kpi_temp_notify_per_ruimte
IS
SELECT alg_ruimte_key, alg_gebouw_naam, alg_ruimte_nr, alg_ruimte_omschrijving, avg_temp,
CASE
WHEN avg_temp IS NULL THEN -1
WHEN avg_temp < min_waarde THEN 2
WHEN avg_temp > max_waarde THEN 2
WHEN avg_temp < min_waarde_oranje THEN 1
WHEN avg_temp > max_waarde_oranje THEN 1
ELSE 0
END kpi_temperatuur
FROM arai_v_rap_kpi_temp_per_ruimte
WHERE join_kpi = 3;
-- Alleen notificeren gedurende de "openingsdatums" en "openingstijden" van de KPI.
-- Openingsdatums worden bepaald door settings KPI_ALL_DATUM1 en KPI_ALL_DATUM2 (b.v. 06-09-2012 en 11-09-2012)
-- Indien deze niet in tabel staan, dan zijn de openingsdatums oneindig (levert altijd OKEE op).
-- Openingstijden worden bepaald door settings KPI_TEMP_TIME1 en KPI_TEMP_TIME2 (b.v. 08:00 en 17:00)
-- Indien deze niet in tabel staan, dan zijn de openingstijden van 0:00 t/m 23:59 (24 uurs)
CURSOR c_kpi_notify_during_opening
IS
SELECT
COALESCE(
(SELECT
CASE WHEN TRUNC(to_date(ud.fac_usrdata_omschr,'DD-MM-YYYY')) <= TRUNC(sysdate)
THEN 1
ELSE 0
END
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 21
AND ud.fac_usrdata_code = 'KPI_ALL_DATUM1'
AND ud.fac_usrdata_verwijder IS NULL
), 1) min_datum,
COALESCE(
(SELECT
CASE WHEN TRUNC(to_date(ud.fac_usrdata_omschr,'DD-MM-YYYY')) >= TRUNC(sysdate)
THEN 1
ELSE 0
END
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 21
AND ud.fac_usrdata_code = 'KPI_ALL_DATUM2'
AND ud.fac_usrdata_verwijder IS NULL
), 1) max_datum,
COALESCE(
(SELECT
CASE WHEN to_date(to_char(sysdate,'DD-MM-YYYY') || ' ' || ud.fac_usrdata_omschr,'DD-MM-YYYY HH24:MI') <= sysdate
THEN 1
ELSE 0
END
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 21
AND ud.fac_usrdata_code = 'KPI_TEMP_TIME1'
AND ud.fac_usrdata_verwijder IS NULL
), 1) min_tijd,
COALESCE(
(SELECT
CASE WHEN to_date(to_char(sysdate,'DD-MM-YYYY') || ' ' || ud.fac_usrdata_omschr,'DD-MM-YYYY HH24:MI') >= sysdate
THEN 1
ELSE 0
END
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 21
AND ud.fac_usrdata_code = 'KPI_TEMP_TIME2'
AND ud.fac_usrdata_verwijder IS NULL
), 1) max_tijd
FROM DUAL;
-- Alleen notificeren na verstrijken van de "freqentie-minuten" van de KPI.
-- Frequentieminuten worden bepaald door setting KPI_TEMP_FREQ_MINUTES (b.v. 30), betekent dat er minimaal 30 minuten zijn verstreken sinds de laatste notificatie is verstuurd.
-- Indien deze niet in tabel staan, is er geen minimum ingestelde "frequentieminuten" en wordt gewoon genotificeerd.
-- Levert waarde 0 op indien er nog niet moet worden genotificeerd (tijd is nog niet verstreken), en de waarde 1 indien wel genotificeerd (tijd verstreken of geen instelling).
CURSOR c_kpi_notify_after_freq_min
IS
SELECT
COALESCE(
(SELECT
CASE
WHEN to_date(fac_usrdata_omschr,'DD-MM-YYYY HH24:MI') + fac_usrdata_volgnr/(60*24) <= SYSDATE THEN 1
ELSE 0
END CASE
FROM fac_usrdata
WHERE fac_usrtab_key = 21
AND fac_usrdata_code = 'KPI_TEMP_FREQ_MINUTES'
AND fac_usrdata_verwijder IS NULL), 1) freq_min_verstreken
FROM DUAL;
BEGIN
FOR rec_open IN c_kpi_notify_during_opening
LOOP
-- Deze loop is precies 1 record (feitelijk een if-statement)
IF rec_open.min_datum = 1 AND rec_open.max_datum = 1 AND rec_open.min_tijd = 1 AND rec_open.max_tijd = 1
THEN
-- De sysdate ligt tussen zowel de openingstijd als sluitingstijd van de KPI, dus we kunnen gaan notificeren...
-- ... Alleen indien de het aantal ingestelde frequentie-minuten sinds de laatste notificatie is verlopen.
FOR rec_freq IN c_kpi_notify_after_freq_min
LOOP
-- Deze loop is precies 1 record (feitelijk een if-statement)
IF rec_freq.freq_min_verstreken = 1
THEN
-- Het aantal ingestelde frequentie-minuten is sinds de laatste notificatie verstreken, dus we kunnen gaan notificeren...
-- Eerst even het notificatie-moment vastleggen voor de volgende keer.
UPDATE fac_usrdata
SET fac_usrdata_omschr = TO_CHAR(SYSDATE,'dd-mm-yyyy hh24:mi')
WHERE fac_usrtab_key = 21
AND fac_usrdata_code = 'KPI_TEMP_FREQ_MINUTES'
AND fac_usrdata_verwijder IS NULL;
COMMIT;
FOR rec_kpi_temp IN c_kpi_temp_notify_per_ruimte
LOOP
BEGIN
-- Als ORANJE (1) of ROOD (2), dan notificeren, anders niet (uiteraard)
IF rec_kpi_temp.kpi_temperatuur = 1 OR rec_kpi_temp.kpi_temperatuur = 2
THEN
IF rec_kpi_temp.kpi_temperatuur = 1
THEN
-- Code ORANJE voor KPI TEMPERATUUR
-- Mailen naar KPI + EVM, en SMS-en naar KPI en EVM
v_errorhint := 'Alarm ORANJE: Gemiddelde temperatuur in ruimte ' || rec_kpi_temp.alg_gebouw_naam || '(' || rec_kpi_temp.alg_ruimte_omschrijving || ') is ' || rec_kpi_temp.avg_temp || ' <20>C';
v_errormsg := '';
-- 1.Eerst mailen naar alle KPI-eigenaren / betrokkenen
FOR rec_kpi_noti IN c_kpi_temp_notify_mail_kpi
LOOP
BEGIN
-- Mailen
fac.putnotificationprio (NULL, NULL, v_errorhint, 2, rec_kpi_noti.fac_usrdata_omschr, NULL, 2);
-- Loggen
v_aanduiding := 'Bestemd voor ' || rec_kpi_noti.fac_usrdata_omschr ;
fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, v_errorhint);
COMMIT;
END;
END LOOP;
-- 2. Dan mailen naar alle eventmanagers
FOR rec_kpi_noti IN c_kpi_temp_notify_mail_evm
LOOP
BEGIN
-- Mailen
fac.putnotificationprio (NULL, NULL, v_errorhint, 2, rec_kpi_noti.fac_usrdata_omschr, NULL, 2);
-- Loggen
v_aanduiding := 'Bestemd voor ' || rec_kpi_noti.fac_usrdata_omschr ;
fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, v_errorhint);
COMMIT;
END;
END LOOP;
-- 3.Eerst sms-en naar alle KPI-eigenaren / betrokkenen
FOR rec_kpi_noti IN c_kpi_temp_notify_sms_kpi
LOOP
BEGIN
-- SMS-en
fac.putnotificationprio (NULL, NULL, v_errorhint, 4, NULL, rec_kpi_noti.fac_usrdata_omschr, 2);
-- Loggen
v_aanduiding := 'Bestemd voor ' || rec_kpi_noti.fac_usrdata_omschr ;
fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, v_errorhint);
COMMIT;
END;
END LOOP;
-- 4. Dan mailen naar alle eventmanagers
FOR rec_kpi_noti IN c_kpi_temp_notify_sms_evm
LOOP
BEGIN
-- SMS-en
fac.putnotificationprio (NULL, NULL, v_errorhint, 4, NULL, rec_kpi_noti.fac_usrdata_omschr, 2);
-- Loggen
v_aanduiding := 'Bestemd voor ' || rec_kpi_noti.fac_usrdata_omschr ;
fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, v_errorhint);
COMMIT;
END;
END LOOP;
ELSE
-- Code ROOD voor KPI TEMPERATUUR
-- Mailen naar KPI + EVM, en SMS-en naar KPI en EVM
v_errorhint := 'Alarm ROOD: Gemiddelde temperatuur in ruimte ' || rec_kpi_temp.alg_gebouw_naam || '(' || rec_kpi_temp.alg_ruimte_omschrijving || ') is ' || rec_kpi_temp.avg_temp || ' <20>C';
v_errormsg := '';
-- 1.Eerst mailen naar alle KPI-eigenaren / betrokkenen
FOR rec_kpi_noti IN c_kpi_temp_notify_mail_kpi
LOOP
BEGIN
-- Mailen
fac.putnotificationprio (NULL, NULL, v_errorhint, 2, rec_kpi_noti.fac_usrdata_omschr, NULL, 2);
-- Loggen
v_aanduiding := 'Bestemd voor ' || rec_kpi_noti.fac_usrdata_omschr ;
fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, v_errorhint);
COMMIT;
END;
END LOOP;
-- 2. Dan mailen naar alle eventmanagers
FOR rec_kpi_noti IN c_kpi_temp_notify_mail_evm
LOOP
BEGIN
-- Mailen
fac.putnotificationprio (NULL, NULL, v_errorhint, 2, rec_kpi_noti.fac_usrdata_omschr, NULL, 2);
-- Loggen
v_aanduiding := 'Bestemd voor ' || rec_kpi_noti.fac_usrdata_omschr ;
fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, v_errorhint);
COMMIT;
END;
END LOOP;
-- 3.Eerst sms-en naar alle KPI-eigenaren / betrokkenen
FOR rec_kpi_noti IN c_kpi_temp_notify_sms_kpi
LOOP
BEGIN
-- SMS-en
fac.putnotificationprio (NULL, NULL, v_errorhint, 4, NULL, rec_kpi_noti.fac_usrdata_omschr, 2);
-- Loggen
v_aanduiding := 'Bestemd voor ' || rec_kpi_noti.fac_usrdata_omschr ;
fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, v_errorhint);
COMMIT;
END;
END LOOP;
-- 4. Dan mailen naar alle eventmanagers
FOR rec_kpi_noti IN c_kpi_temp_notify_sms_evm
LOOP
BEGIN
-- SMS-en
fac.putnotificationprio (NULL, NULL, v_errorhint, 4, NULL, rec_kpi_noti.fac_usrdata_omschr, 2);
-- Loggen
v_aanduiding := 'Bestemd voor ' || rec_kpi_noti.fac_usrdata_omschr ;
fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, v_errorhint);
COMMIT;
END;
END LOOP;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint
);
COMMIT;
END;
END LOOP;
ELSE
-- Het aantal frequentie-minuten is nog niet verstreken, dus GEEN notificeren...
v_errormsg := '';
v_errorhint := '';
v_aanduiding := 'Geen notificatie: frequentie-minuten zijn nog niet voorbij' ;
fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, v_errorhint);
END IF;
-- Deze loop is precies 1 record (feitelijk een if-statement)
END LOOP;
ELSE
-- De sysdate ligt buiten de openingstijd en sluitingstijd van de KPI, dus GEEN notificeren...
v_errormsg := '';
v_errorhint := '';
v_aanduiding := 'Geen notificatie: tijd ligt buiten de KPI tijden' ;
fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, v_errorhint);
END IF;
-- Deze loop is precies 1 record (feitelijk een if-statement)
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (arai_notify_kpi_temp error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint
);
COMMIT;
END arai_notify_kpi_temp;
/
CREATE OR REPLACE PROCEDURE arai_import_kpi_temp (
p_import_key IN NUMBER
)
IS
c_fielddelimitor VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000); -- Input line
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER := 0;
v_ongeldig NUMBER (1);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_count NUMBER;
-- De importvelden:
v_ins_deel_omschrijving VARCHAR2 (256);
v_ins_deel_meetwaarde VARCHAR2 (256);
v_ins_deel_opclabel VARCHAR2 (256);
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
DELETE FROM arai_imp_kpi;
COMMIT;
v_count_tot := 0;
v_count_import := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_aanduiding := '';
v_errorhint := 'Fout bij opvragen te importeren rij';
v_ongeldig := 0;
-- Lees alle veldwaarden
-- 01 - Installatiecode: Kolom M (kolomnr 13) is de installatiecode. Indien leeg, dan deze overslaan.
-- CSV variant: fac.imp_getfield_nr (v_newline, c_fielddelimitor, 13, v_ins_deel_omschrijving);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 1, v_ins_deel_omschrijving);
-- 02 - Meetwaarde: Kolom J (kolomnr 10) is de weergave.
-- CSV variant: fac.imp_getfield_nr (v_newline, c_fielddelimitor, 10, v_ins_deel_meetwaarde);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 2, v_ins_deel_meetwaarde);
-- 03 - OPC label: Kolom A (kolomnr 1), een interne label cq. tag van de OPC-server oid
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 3, v_ins_deel_opclabel);
--
v_aanduiding :=
'['
|| v_ins_deel_omschrijving
|| '|'
|| v_ins_deel_meetwaarde
|| '|'
|| v_ins_deel_opclabel
|| '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (v_ins_deel_omschrijving) = 'INSTALLATIECODE'
AND UPPER (v_ins_deel_meetwaarde) = 'WEERGAVE'
AND UPPER (v_ins_deel_opclabel) = 'OPC LABEL'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
--
v_errorhint := 'Ongeldige objectnaam / installatiecode';
v_ins_deel_omschrijving := TRIM (v_ins_deel_omschrijving);
IF (v_ins_deel_omschrijving IS NOT NULL)
THEN
IF LENGTH (v_ins_deel_omschrijving) > 60
THEN
v_ins_deel_omschrijving := SUBSTR (v_ins_deel_omschrijving, 1, 60);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Objectnaam te lang', 'Objectnaam wordt afgebroken tot [' || v_ins_deel_omschrijving || ']' );
END IF;
ELSE
v_ongeldig := 1;
END IF;
v_errorhint := 'Ongeldige meetwaarde';
v_ins_deel_meetwaarde := TRIM (v_ins_deel_meetwaarde);
IF (v_ins_deel_meetwaarde IS NOT NULL)
THEN
IF LENGTH (v_ins_deel_meetwaarde) > 255
THEN
v_ins_deel_meetwaarde := SUBSTR (v_ins_deel_meetwaarde, 1, 255);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Meetwaarde te lang', 'Meetwaarde wordt afgebroken tot [' || v_ins_deel_meetwaarde || ']' );
END IF;
ELSE
v_ongeldig := 1;
END IF;
v_errorhint := 'Ongeldige OPC label';
v_ins_deel_opclabel := TRIM (v_ins_deel_opclabel);
IF (v_ins_deel_opclabel IS NOT NULL)
THEN
IF LENGTH (v_ins_deel_opclabel) > 255
THEN
v_ins_deel_opclabel := SUBSTR (v_ins_deel_opclabel, 1, 255);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'OPC label te lang', 'Label wordt afgebroken tot [' || v_ins_deel_opclabel || ']' );
END IF;
END IF;
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errorhint :=
'Fout bij toevoegen regel aan importtabel arai_imp_kpi';
INSERT INTO arai_imp_kpi (ins_deel_omschrijving, ins_deel_meetwaarde, ins_deel_opclabel)
VALUES (v_ins_deel_omschrijving, v_ins_deel_meetwaarde, v_ins_deel_opclabel);
COMMIT;
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog
(p_import_key,
'E',
v_aanduiding || v_errormsg,
'Ingelezen regel kan niet worden weggeschreven!'
);
COMMIT;
END;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
'Ongeldig importbestand',
'Geen header of header niet volgens specificatie!'
);
ELSE
fac.imp_writelog (p_import_key,
'S',
'KPI: aantal ingelezen regels: '
|| TO_CHAR (v_count_tot),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
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',
v_aanduiding || v_errormsg,
v_errorhint
);
COMMIT;
END arai_import_kpi_temp;
/
CREATE OR REPLACE PROCEDURE arai_update_kpi_temp (
p_import_key IN NUMBER
)
IS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count_tot NUMBER (10);
v_count_error NUMBER (10);
v_count NUMBER (10);
c_ins_srtgroep_key_temp NUMBER (10) := 1;
c_ins_kenmerk_key_temp NUMBER (10) := 1;
v_ins_deel_key NUMBER (10);
-- Alle kpi_temperatuur meetwaarden: dit zijn de regels waarvan de objectnaam voldoet aan de volgende codering: XX-XXTTXX, met op de X precies 1 karakter.
CURSOR c_kpi_temp
IS
SELECT *
FROM arai_imp_kpi k
WHERE k.ins_deel_omschrijving like '%TT%';
-- AND k.ins_deel_opclabel like '%MET%';
BEGIN
v_count_tot := 0;
v_count_error := 0;
v_aanduiding := '';
-- Alle kpi-temperaturen verwerken...
FOR rec_kpi_temp IN c_kpi_temp
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errorhint := 'Fout bij bepalen object [' || rec_kpi_temp.ins_deel_omschrijving || ']';
-- NB sd.ins_srtgroep_key = 1 is de groep van allemaal temperatuurmeter-objecten;
SELECT d.ins_deel_key
INTO v_ins_deel_key
FROM ins_deel d, ins_srtdeel sd
WHERE d.ins_deel_verwijder IS NULL
AND UPPER (d.ins_deel_omschrijving) = UPPER (rec_kpi_temp.ins_deel_omschrijving)
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = c_ins_srtgroep_key_temp;
-- Max 1 record wordt bijgewerkt, namelijk het kenmerk temperatuur van het betreffende object wordt functioneel verwijderd.
UPDATE ins_kenmerkdeel
SET ins_kenmerkdeel_verwijder = SYSDATE
WHERE ins_kenmerk_key = c_ins_kenmerk_key_temp
AND ins_deel_key = v_ins_deel_key
AND ins_kenmerkdeel_verwijder IS NULL;
v_errorhint := 'Fout bij toevoegen temperatuur bij object [' || rec_kpi_temp.ins_deel_omschrijving || ']';
INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde)
SELECT v_ins_deel_key, c_ins_kenmerk_key_temp, rec_kpi_temp.ins_deel_meetwaarde FROM DUAL;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint
);
COMMIT;
END;
END LOOP;
-- Als alle temperaturen zijn verwerkt, dan checken of er een ruimte een gemiddelde temperatuur heeft die buiten de grenzen valt.
fac.imp_writelog (p_import_key,
'S',
'KPI: verwerkte regels zonder foutmelding: '
|| TO_CHAR (v_count_tot - v_count_error),
''
);
fac.imp_writelog (p_import_key,
'S',
'KPI: verwerkte regels met foutmelding: '
|| TO_CHAR (v_count_error),
''
);
COMMIT;
-- Tenslotte nog de notificaties uitsturen, als STAART van de import.
arai_notify_kpi_temp(p_import_key);
END arai_update_kpi_temp;
/
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Import KPI ENERGIE Import KPI ENERGIE Import KPI ENERGIE Import KPI ENERGIE Import KPI ENERGIE Import KPI ENERGIE Import KPI ENERGIE --
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE arai_import_kpi_energie (
p_import_key IN NUMBER
)
IS
c_fielddelimitor VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000); -- Input line
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER := 0;
v_ongeldig NUMBER (1);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_count NUMBER;
-- De importvelden:
v_ins_deel_omschrijving VARCHAR2 (256);
v_ins_deel_meetwaarde VARCHAR2 (256);
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
DELETE FROM arai_imp_kpi_energie;
COMMIT;
v_count_tot := 0;
v_count_import := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_aanduiding := '';
v_errorhint := 'Fout bij opvragen te importeren rij';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 1, v_ins_deel_omschrijving);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 2, v_ins_deel_meetwaarde);
--
v_aanduiding :=
'['
|| v_ins_deel_omschrijving
|| '|'
|| v_ins_deel_meetwaarde
|| '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (v_ins_deel_omschrijving) = 'INSTALLATIECODE'
AND UPPER (v_ins_deel_meetwaarde) = 'WEERGAVE'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
--
v_errorhint := 'Ongeldige objectnaam / installatiecode';
v_ins_deel_omschrijving := TRIM (v_ins_deel_omschrijving);
IF (v_ins_deel_omschrijving IS NOT NULL)
THEN
IF LENGTH (v_ins_deel_omschrijving) > 60
THEN
v_ins_deel_omschrijving := SUBSTR (v_ins_deel_omschrijving, 1, 60);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Objectnaam te lang', 'Objectnaam wordt afgebroken tot [' || v_ins_deel_omschrijving || ']' );
END IF;
ELSE
v_ongeldig := 1;
END IF;
v_errorhint := 'Ongeldige meetwaarde';
-- LET OP: een eventuele komma verwijderen via REPLACE (a.g.v. getallen > 1000, die worden met scheidingsteken , door Coneco doorgegeven, zij kunnen die niet (!?!?!?) weghalen. Ja ja.)
v_ins_deel_meetwaarde := REPLACE(TRIM (v_ins_deel_meetwaarde),',','');
IF (v_ins_deel_meetwaarde IS NOT NULL)
THEN
IF LENGTH (v_ins_deel_meetwaarde) > 255
THEN
v_ins_deel_meetwaarde := SUBSTR (v_ins_deel_meetwaarde, 1, 255);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Meetwaarde te lang', 'Meetwaarde wordt afgebroken tot [' || v_ins_deel_meetwaarde || ']' );
END IF;
ELSE
v_ongeldig := 1;
END IF;
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errorhint :=
'Fout bij toevoegen regel aan importtabel arai_imp_kpi';
INSERT INTO arai_imp_kpi_energie (ins_deel_omschrijving, ins_deel_meetwaarde)
VALUES (v_ins_deel_omschrijving, v_ins_deel_meetwaarde);
COMMIT;
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog
(p_import_key,
'E',
v_aanduiding || v_errormsg,
'Ingelezen regel kan niet worden weggeschreven!'
);
COMMIT;
END;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
'Ongeldig importbestand',
'Geen header of header niet volgens specificatie!'
);
ELSE
fac.imp_writelog (p_import_key,
'S',
'KPI: aantal ingelezen regels: '
|| TO_CHAR (v_count_tot),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
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',
v_aanduiding || v_errormsg,
v_errorhint
);
COMMIT;
END arai_import_kpi_energie;
/
CREATE OR REPLACE PROCEDURE arai_update_kpi_energie_items (
p_import_key IN NUMBER
)
IS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count_tot NUMBER (10);
v_count_error NUMBER (10);
v_count NUMBER (10);
-- Very important: om af te dwingen dat bij elkaar horende meetwaarden dezelfde insert-date krijgen, zodat ze in de grafiek-definitie gebruiikt kunnen worden en gegarandeerd dezelfde timestamp hebben
v_nu DATE;
c_ins_kenmerk_key_opc_meting NUMBER (10) := 61;
c_ins_kenmerk_key_opc_setpoint NUMBER (10) := 62;
c_ins_kenmerk_key_opc_alarm NUMBER (10) := 63;
v_ins_deel_key NUMBER (10);
-- STATISCHE kenmerk_key (OPC-label-ID)
v_ins_kenmerk_key_opc NUMBER (10);
-- DYNAMISCHE kenmerk_key (meetwaarde)
-- Key van de meting, setpoint of alarm, die op slimme manier runtime hieronder wordt bepaald adhv de waarde van INS_KENMERK_LOCATIEKOLOM
v_ins_kenmerk_key_dyn NUMBER (10);
CURSOR c_kpi_energie
IS
SELECT *
FROM arai_imp_kpi_energie k;
BEGIN
v_count_tot := 0;
v_count_error := 0;
v_aanduiding := '';
SELECT SYSDATE
INTO v_nu
FROM dual;
-- Alle kpi-energie verwerken...
FOR rec_kpi_energie IN c_kpi_energie
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errorhint := 'Fout bij bepalen ENERGIE object obv OPC-label [' || rec_kpi_energie.ins_deel_omschrijving || ']';
-- Bepalen van het object ins_deel adhv het UNIEKE! OPC-label. OPC-label staat in 1 van de 3 kenmerken (defintitie op discipline-nivo) bij het object zijn geregistreerd.
-- Behalve ins_deel_key wordt ook bijbehorende STATISCHE ins_kenmerk_key opgeleverd (wie van de 3 is dan bekend).
-- Als die niet kan worden gevonden, dat wordt de betreffende waarde (meting, setpoint of alarm) NIET geregistreerd, en wordt gelogd
SELECT ins_deel_key, INS_KENMERK_KEY
INTO v_ins_deel_key, v_ins_kenmerk_key_opc
FROM ins_kenmerkdeel kd
WHERE KD.INS_KENMERKDEEL_WAARDE = rec_kpi_energie.ins_deel_omschrijving
and KD.INS_KENMERK_KEY IN (c_ins_kenmerk_key_opc_meting, c_ins_kenmerk_key_opc_setpoint, c_ins_kenmerk_key_opc_alarm)
and KD.INS_KENMERKDEEL_VERWIJDER IS NULL;
-- Daarna wordt adhv de STATISCHE kenmerk_key de DYNAMISCHE ins_kenmerk_key (die van de bijbehorende meetwaarde) bepaald.
-- Enigzins getruukt, maar wel goed, via de locatiekolom, die een verwijzing naar de statische kenmerk bevat.
-- Zo is bekend welke STATISCHE KEY bij welke DYNAMISCHE hoort.
v_errorhint := 'Fout bij bepalen van meetwaarde kenmerk bij object obv OPC-label [' || rec_kpi_energie.ins_deel_omschrijving || ' - ' || v_ins_deel_key || ' - ' || v_ins_kenmerk_key_opc || ']';
SELECT ins_kenmerk_key
INTO v_ins_kenmerk_key_dyn
FROM ins_kenmerk k
WHERE K.INS_KENMERK_LOCATIEKOLOM = v_ins_kenmerk_key_opc
AND K.INS_KENMERK_MEETWAARDE = 1
AND K.INS_KENMERK_NIVEAU = 'S'
AND K.INS_SRTINSTALLATIE_KEY = (SELECT ins_srtdeel_key FROM ins_deel WHERE ins_deel_key = v_ins_deel_key);
v_errorhint := 'Fout bij update van meetwaarde bij object obv OPC-label [' || rec_kpi_energie.ins_deel_omschrijving || ' - ' || v_ins_deel_key || ' - ' || v_ins_kenmerk_key_opc || ']';
-- De vorige meetwaarde functioneel verwijderen, er is immers een nieuwe (hieronder)
UPDATE ins_kenmerkdeel
SET ins_kenmerkdeel_verwijder = v_nu
WHERE ins_kenmerk_key = v_ins_kenmerk_key_dyn
AND ins_deel_key = v_ins_deel_key
AND ins_kenmerkdeel_verwijder IS NULL;
v_errorhint := 'Fout bij insert nieuwe van meetwaarde bij object obv OPC-label [' || rec_kpi_energie.ins_deel_omschrijving || ' - ' || v_ins_deel_key || ' - ' || v_ins_kenmerk_key_opc || ']';
INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde)
SELECT v_ins_deel_key, v_ins_kenmerk_key_dyn, rec_kpi_energie.ins_deel_meetwaarde FROM DUAL;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint
);
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'KPI ENERGIE: verwerkte regels zonder foutmelding: '
|| TO_CHAR (v_count_tot - v_count_error),
''
);
fac.imp_writelog (p_import_key,
'S',
'KPI ENERGIE: verwerkte regels met foutmelding: '
|| TO_CHAR (v_count_error),
''
);
COMMIT;
END arai_update_kpi_energie_items;
/
CREATE OR REPLACE PROCEDURE arai_update_kpi_halbezetting (
p_import_key IN NUMBER
)
IS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count_tot NUMBER (10);
v_count_error NUMBER (10);
v_count NUMBER (10);
v_ins_deel_key NUMBER (10);
c_ins_kenmerk_key_halbezet NUMBER (10) := 64;
v_aantal NUMBER (10);
v_nu DATE;
CURSOR c_kpi_halbezet
IS
SELECT *
FROM arai_imp_kpi_energie k;
BEGIN
v_count_tot := 0;
v_count_error := 0;
v_aanduiding := '';
SELECT SYSDATE
INTO v_nu
FROM dual;
-- Alle kpi-energie verwerken...
FOR rec_halbezet IN c_kpi_halbezet
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errorhint := 'Fout bij bepalen BEZETTING object obv OPC-label [' || rec_halbezet.ins_deel_omschrijving || ']';
-- Bepalen van het object ins_deel adhv het UNIEKE! OPC-label als objectomschrijving
-- Behalve ins_deel_key wordt ook bijbehorende STATISCHE ins_kenmerk_key opgeleverd (wie van de 3 is dan bekend).
-- Als die niet kan worden gevonden, dat wordt de betreffende waarde (meting, setpoint of alarm) NIET geregistreerd, en wordt gelogd
SELECT ins_deel_key
INTO v_ins_deel_key
FROM ins_deel d
WHERE ins_deel_omschrijving = rec_halbezet.ins_deel_omschrijving
AND D.INS_DEEL_VERWIJDER IS NULL;
-- Daarna wordt adhv de STATISCHE kenmerk_key de DYNAMISCHE ins_kenmerk_key (die van de bijbehorende meetwaarde) bepaald.
-- Enigzins getruukt, maar wel goed, via de locatiekolom, die een verwijzing naar de statische kenmerk bevat.
-- Zo is bekend welke STATISCHE KEY bij welke DYNAMISCHE hoort.
v_errorhint := 'Fout bij bepalen of meetwaarde halbezetting bij object ' || rec_halbezet.ins_deel_omschrijving || ' - ' || v_ins_deel_key || ' (registratie van vandaag is al gebeurd).';
--SELECT COUNT(*)
--INTO v_aantal
--FROM ins_kenmerkdeel
--WHERE ins_deel_key = v_ins_deel_key
--AND ins_kenmerk_key = c_ins_kenmerk_key_halbezet
--AND TRUNC(ins_kenmerkdeel_aanmaak) = TRUNC(SYSDATE);
-- Voorheen was het eenmaal per dag, nu gewoon elke 10 minuten oid
v_aantal := 0;
IF (v_aantal = 0)
THEN
BEGIN
v_errorhint := 'Fout bij update van vorige meetwaarde halbezetting bij object ' || rec_halbezet.ins_deel_omschrijving || ' - ' || v_ins_deel_key || '.';
-- De vorige meetwaarde functioneel verwijderen, er is immers een nieuwe (hieronder)
UPDATE ins_kenmerkdeel
SET ins_kenmerkdeel_verwijder = v_nu
WHERE ins_kenmerk_key = c_ins_kenmerk_key_halbezet
AND ins_deel_key = v_ins_deel_key
AND ins_kenmerkdeel_verwijder IS NULL;
v_errorhint := 'Fout bij insert nieuwe van meetwaarde halbezetting bij object ' || rec_halbezet.ins_deel_omschrijving || ' - ' || v_ins_deel_key || ' (registratie van vandaag is al gebeurd).';
-- MB: ITT wat Coneco aangeeft dat hier alleen een waarde 1 of 2 worden gebruikt, zie ik alleen de waarden 0.1 en 0.2
-- In de nieuwste definitie staat hier 1.0 (= niet verhuurd oftewel leeg) of 2.0 (=wel verhuurd, bezet).
IF rec_halbezet.ins_deel_meetwaarde = 1.0
THEN
INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde)
SELECT v_ins_deel_key, c_ins_kenmerk_key_halbezet, 0 FROM DUAL;
ELSE
INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde)
SELECT v_ins_deel_key, c_ins_kenmerk_key_halbezet, 1 FROM DUAL;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog
(p_import_key,
'E',
v_aanduiding || v_errormsg,
'Ingelezen regel kan niet worden weggeschreven!'
);
COMMIT;
END;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint
);
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'KPI HALBEZETTING: verwerkte regels zonder foutmelding: '
|| TO_CHAR (v_count_tot - v_count_error),
''
);
fac.imp_writelog (p_import_key,
'S',
'KPI HALBEZETTING: verwerkte regels met foutmelding: '
|| TO_CHAR (v_count_error),
''
);
COMMIT;
END arai_update_kpi_halbezetting;
/
CREATE OR REPLACE PROCEDURE arai_update_kpi_energie (
p_import_key IN NUMBER
)
IS
BEGIN
arai_update_kpi_energie_items(p_import_key);
arai_update_kpi_halbezetting(p_import_key);
END arai_update_kpi_energie;
/
---
-- ins_kenmerk_key = 64 is de kenmerk-key van de 'meetwaarde' ruimte bezet (ja / nee).
-- Extra aanscherping: object moet van objectsoort 'detectie ruimtebezet' (srtdeel_key=65) zijn.
-- kd is kenmerkdeel met meetwaarden (zaal bezet ja of nee): ins_kenmerk_key = 64
-- kd2 is Optioneel: (+) kenmerkdeel met de groepnaam (tbv RTM Energie welke zalen op 1 regel (groep) komen te staan): ins_kenmerk_key = 81
-- kd3 is Optioneel: (+) kenmerkdeel met de ruimtenaam (tbv RTM Energie, kan de standaard ruimteomschr. daarmee overrulen) : ins_kenmerk_key = 82
CREATE OR REPLACE VIEW arai_v_hall_bezetting
(alg_gebouw_key,
alg_gebouw_naam,
alg_verdieping_key,
alg_ruimte_key,
alg_ruimte_omschrijving,
ruimtegroep,
ins_kenmerkdeel_waarde,
ins_kenmerkdeel_aanmaak
)
AS
SELECT g.alg_gebouw_key,
g.alg_gebouw_naam,
v.alg_verdieping_key,
r.alg_ruimte_key,
COALESCE(kd3.ins_kenmerkdeel_waarde,r.alg_ruimte_omschrijving),
kd2.ins_kenmerkdeel_waarde,
kd.ins_kenmerkdeel_waarde,
kd.ins_kenmerkdeel_aanmaak
FROM ins_kenmerkdeel kd, ins_deel d, alg_ruimte r, alg_verdieping v, alg_gebouw g, ins_kenmerkdeel kd2, ins_kenmerkdeel kd3
WHERE kd.ins_kenmerk_key = 64
AND TRUNC(kd.ins_kenmerkdeel_aanmaak) = TRUNC(SYSDATE)
AND d.ins_srtdeel_key = 65
AND kd.ins_kenmerkdeel_verwijder IS NULL
AND d.ins_deel_key =kd.ins_deel_key
AND D.INS_ALG_RUIMTE_TYPE = 'R'
AND r.alg_ruimte_key = D.INS_ALG_RUIMTE_KEY
AND v.alg_verdieping_key = r.alg_verdieping_key
AND g.alg_gebouw_key = v.alg_gebouw_key
AND kd2.ins_kenmerk_key(+) = 81
AND d.ins_deel_key =kd2.ins_deel_key (+)
AND kd2.ins_kenmerkdeel_verwijder (+) IS NULL
AND kd3.ins_kenmerk_key(+) = 82
AND d.ins_deel_key =kd3.ins_deel_key (+)
AND kd3.ins_kenmerkdeel_verwijder (+) IS NULL;
---
-- Eerst wat algemene energie-views, als BASIS voor de energie-grafieken
-- Let op!! Belangrijk: de K.INS_KENMERK_LOCATIEKOLOM = 61, 62 en 63 zijn de ins_kenmerk_key van de bijbehorende OPC-id's.
-- Die worden elders gebruikt in c_ins_kenmerk_key_opc_meting, c_ins_kenmerk_key_opc_setpoint en c_ins_kenmerk_key_opc_alarm
--
-- Verder van belang: SG.INS_DISCIPLINE_KEY = 281 (de key die de discipline energie gaat krijgen).
---
CREATE OR REPLACE VIEW arai_v_energie_meting_nu
AS
SELECT sg.ins_srtgroep_key,
sg.ins_srtgroep_omschrijving,
sd.ins_srtdeel_key,
sd.ins_srtdeel_omschrijving,
d.ins_deel_key,
d.ins_deel_omschrijving,
d.ins_deel_x,
v.ins_kenmerkdeel_waarde verbruik,
v.ins_kenmerkdeel_aanmaak,
v.ins_kenmerkdeel_verwijder
FROM ins_srtgroep sg, ins_srtdeel sd, ins_deel d, ins_kenmerkdeel v
WHERE SG.INS_DISCIPLINE_KEY = 281
and SD.INS_SRTGROEP_KEY = SG.INS_SRTGROEP_KEY
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND v.ins_deel_key = d.ins_deel_key
AND v.ins_kenmerk_key = (
SELECT ins_kenmerk_key
FROM ins_kenmerk k
WHERE K.INS_KENMERK_LOCATIEKOLOM = 61
AND K.INS_KENMERK_MEETWAARDE = 1
AND K.INS_KENMERK_NIVEAU = 'S'
AND K.INS_SRTINSTALLATIE_KEY = (SELECT ins_srtdeel_key FROM ins_deel WHERE ins_deel_key = d.ins_deel_key)
)
AND v.ins_kenmerkdeel_verwijder IS NULL;
CREATE OR REPLACE VIEW arai_v_energie_setpoint_nu
AS
SELECT sg.ins_srtgroep_key,
sg.ins_srtgroep_omschrijving,
sd.ins_srtdeel_key,
sd.ins_srtdeel_omschrijving,
d.ins_deel_key,
d.ins_deel_omschrijving,
s.ins_kenmerkdeel_waarde setpoint
FROM ins_srtgroep sg, ins_srtdeel sd, ins_deel d, ins_kenmerkdeel s
WHERE SG.INS_DISCIPLINE_KEY = 281
and SD.INS_SRTGROEP_KEY = SG.INS_SRTGROEP_KEY
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND s.ins_deel_key = d.ins_deel_key
AND s.ins_kenmerk_key = (
SELECT ins_kenmerk_key
FROM ins_kenmerk k
WHERE K.INS_KENMERK_LOCATIEKOLOM = 62
AND K.INS_KENMERK_MEETWAARDE = 1
AND K.INS_KENMERK_NIVEAU = 'S'
AND K.INS_SRTINSTALLATIE_KEY = (SELECT ins_srtdeel_key FROM ins_deel WHERE ins_deel_key = d.ins_deel_key)
)
AND s.ins_kenmerkdeel_verwijder IS NULL;
CREATE OR REPLACE VIEW arai_v_energie_kleur_nu
AS
SELECT sg.ins_srtgroep_key,
sg.ins_srtgroep_omschrijving,
sd.ins_srtdeel_key,
sd.ins_srtdeel_omschrijving,
d.ins_deel_key,
d.ins_deel_omschrijving,
k.ins_kenmerkdeel_waarde kleur
FROM ins_srtgroep sg, ins_srtdeel sd, ins_deel d, ins_kenmerkdeel k
WHERE SG.INS_DISCIPLINE_KEY = 281
and SD.INS_SRTGROEP_KEY = SG.INS_SRTGROEP_KEY
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND k.ins_deel_key = d.ins_deel_key
AND k.ins_kenmerk_key = (
SELECT ins_kenmerk_key
FROM ins_kenmerk k
WHERE K.INS_KENMERK_LOCATIEKOLOM = 63
AND K.INS_KENMERK_MEETWAARDE = 1
AND K.INS_KENMERK_NIVEAU = 'S'
AND K.INS_SRTINSTALLATIE_KEY = (SELECT ins_srtdeel_key FROM ins_deel WHERE ins_deel_key = d.ins_deel_key)
)
AND k.ins_kenmerkdeel_verwijder IS NULL;
CREATE OR REPLACE VIEW arai_v_energie_verbruik_nu
AS
SELECT v.ins_srtgroep_key,
v.ins_srtgroep_omschrijving,
v.ins_srtdeel_key,
v.ins_srtdeel_omschrijving,
v.ins_deel_key,
v.ins_deel_omschrijving,
v.verbruik,
s.setpoint,
k.kleur,
v.ins_kenmerkdeel_aanmaak,
v.ins_kenmerkdeel_verwijder,
COALESCE(v.ins_deel_x,1) as volgorde
FROM arai_v_energie_meting_nu v, arai_v_energie_setpoint_nu s, arai_v_energie_kleur_nu k
WHERE v.ins_deel_key = s.ins_deel_key(+)
AND v.ins_deel_key = k.ins_deel_key(+);
-- Let op!! Belangrijk: de K.INS_KENMERK_LOCATIEKOLOM = 61, 62 en 63 zijn de ins_kenmerk_key van de bijbehorende OPC-id's.
-- Die worden elders gebruikt in c_ins_kenmerk_key_opc_meting, c_ins_kenmerk_key_opc_setpoint en c_ins_kenmerk_key_opc_alarm
-- Verder van belang: SG.INS_DISCIPLINE_KEY = 281 (de key die de discipline energie gaat krijgen).
CREATE OR REPLACE VIEW arai_v_energie_verbruik_histry
AS
SELECT sg.ins_srtgroep_key,
sg.ins_srtgroep_omschrijving,
sd.ins_srtdeel_key,
sd.ins_srtdeel_omschrijving,
d.ins_deel_key,
d.ins_deel_omschrijving,
v.ins_kenmerkdeel_waarde verbruik,
s.ins_kenmerkdeel_waarde setpoint,
k.ins_kenmerkdeel_waarde kleur,
v.ins_kenmerkdeel_aanmaak,
v.ins_kenmerkdeel_verwijder
FROM ins_srtgroep sg, ins_srtdeel sd, ins_deel d, ins_kenmerkdeel v, ins_kenmerkdeel s, ins_kenmerkdeel k
WHERE SG.INS_DISCIPLINE_KEY = 281
and SD.INS_SRTGROEP_KEY = SG.INS_SRTGROEP_KEY
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND v.ins_deel_key = d.ins_deel_key
AND v.ins_kenmerk_key = (
SELECT ins_kenmerk_key
FROM ins_kenmerk k
WHERE K.INS_KENMERK_LOCATIEKOLOM = 61
AND K.INS_KENMERK_MEETWAARDE = 1
AND K.INS_KENMERK_NIVEAU = 'S'
AND K.INS_SRTINSTALLATIE_KEY = (SELECT ins_srtdeel_key FROM ins_deel WHERE ins_deel_key = d.ins_deel_key)
)
AND s.ins_deel_key = d.ins_deel_key
AND s.ins_kenmerk_key = (
SELECT ins_kenmerk_key
FROM ins_kenmerk k
WHERE K.INS_KENMERK_LOCATIEKOLOM = 62
AND K.INS_KENMERK_MEETWAARDE = 1
AND K.INS_KENMERK_NIVEAU = 'S'
AND K.INS_SRTINSTALLATIE_KEY = (SELECT ins_srtdeel_key FROM ins_deel WHERE ins_deel_key = d.ins_deel_key)
)
AND v.ins_kenmerkdeel_aanmaak = s.ins_kenmerkdeel_aanmaak
AND k.ins_deel_key = d.ins_deel_key
AND k.ins_kenmerk_key = (
SELECT ins_kenmerk_key
FROM ins_kenmerk k
WHERE K.INS_KENMERK_LOCATIEKOLOM = 63
AND K.INS_KENMERK_MEETWAARDE = 1
AND K.INS_KENMERK_NIVEAU = 'S'
AND K.INS_SRTINSTALLATIE_KEY = (SELECT ins_srtdeel_key FROM ins_deel WHERE ins_deel_key = d.ins_deel_key)
)
AND v.ins_kenmerkdeel_aanmaak = k.ins_kenmerkdeel_aanmaak;
CREATE OR REPLACE VIEW arai_v_energie_verbruik_today
AS
SELECT sg.ins_srtgroep_key,
sg.ins_srtgroep_omschrijving,
sd.ins_srtdeel_key,
sd.ins_srtdeel_omschrijving,
d.ins_deel_key,
d.ins_deel_omschrijving,
v.ins_kenmerkdeel_waarde verbruik,
v.ins_kenmerkdeel_aanmaak,
v.ins_kenmerkdeel_verwijder
FROM ins_srtgroep sg, ins_srtdeel sd, ins_deel d, ins_kenmerkdeel v
WHERE SG.INS_DISCIPLINE_KEY = 281
and SD.INS_SRTGROEP_KEY = SG.INS_SRTGROEP_KEY
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND v.ins_deel_key = d.ins_deel_key
AND v.ins_kenmerk_key = (
SELECT ins_kenmerk_key
FROM ins_kenmerk k
WHERE K.INS_KENMERK_LOCATIEKOLOM = 61
AND K.INS_KENMERK_MEETWAARDE = 1
AND K.INS_KENMERK_NIVEAU = 'S'
AND K.INS_SRTINSTALLATIE_KEY = (SELECT ins_srtdeel_key FROM ins_deel WHERE ins_deel_key = d.ins_deel_key)
)
AND TRUNC(v.ins_kenmerkdeel_aanmaak) = TRUNC(SYSDATE);
CREATE OR REPLACE VIEW arai_v_energie_verbruik_today
(ins_deel_key, ins_deel_omschrijving, verbruik, ins_kenmerkdeel_aanmaak)
AS
SELECT d.ins_deel_key,
MIN(d.ins_deel_omschrijving),
ROUND(AVG(fac.safe_to_number(COALESCE(v.ins_kenmerkdeel_waarde,'0'))),1),
TO_CHAR(ins_kenmerkdeel_aanmaak,'HH24')
FROM ins_srtgroep sg, ins_srtdeel sd, ins_deel d, ins_kenmerkdeel v
WHERE SG.INS_DISCIPLINE_KEY = 281
and SD.INS_SRTGROEP_KEY = SG.INS_SRTGROEP_KEY
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND v.ins_deel_key = d.ins_deel_key
AND v.ins_kenmerk_key = (
SELECT ins_kenmerk_key
FROM ins_kenmerk k
WHERE K.INS_KENMERK_LOCATIEKOLOM = 61
AND K.INS_KENMERK_MEETWAARDE = 1
AND K.INS_KENMERK_NIVEAU = 'S'
AND K.INS_SRTINSTALLATIE_KEY = (SELECT ins_srtdeel_key FROM ins_deel WHERE ins_deel_key = d.ins_deel_key)
)
AND TRUNC(v.ins_kenmerkdeel_aanmaak) = TRUNC(SYSDATE)
GROUP BY d.ins_deel_key, TO_CHAR(ins_kenmerkdeel_aanmaak,'HH24');
-- Discipline Energie, Soortgroep Water (key = 62)
CREATE OR REPLACE VIEW arai_v_water_verbruik_nu
AS SELECT * FROM arai_v_energie_verbruik_nu
WHERE ins_srtgroep_key = 62
UNION ALL
SELECT 62, ' ', 0, ' ', 0, ' ', '0', '0', '1.0', SYSDATE, NULL,0 FROM DUAL
UNION ALL
SELECT 62, ' ', 0, ' ', 0, ' ', '0', '0', '1.0', SYSDATE, NULL,99 FROM DUAL;
-- Discipline Energie, Soortgroep Warmte (key = 64)
CREATE OR REPLACE VIEW arai_v_warmte_verbruik_nu
AS SELECT * FROM arai_v_energie_verbruik_nu
WHERE ins_srtgroep_key = 64;
-- Discipline Energie, Soortgroep Elektra (key = 61)
CREATE OR REPLACE VIEW arai_v_elektra_verbruik_nu
AS SELECT * FROM arai_v_energie_verbruik_nu
WHERE ins_srtgroep_key = 61;
----------------------------------------------------------------
-- WATER
-- Grafiek: KPI Energie Waterverbruik per watermeter van nu (max 10 minuten geleden) van alle watermeters
-- FCLT_YAS_ is de y-as voor groen
-- FCLT_YAS2_ is de y-as voor rood
-- FCLT_YAS3_ is de y-as voor oranje
-- Barchart met 3 kleuren: groen (waterverbruik = okee), oranje (waterverbruik is oranje) en rood (waterverbruik is rood)
-- KLEUR: 1.0 =GROEN
-- 3.0 =ORANJE
-- 7.0 =ROOD
CREATE OR REPLACE VIEW arai_v_graph_water_nu
(
fclt_key,
FCLT_XAS_,
FCLT_YAS_,
FCLT_YAS2_,
FCLT_YAS3_,
FCLT_URL,
VOLGORDE
)
AS
SELECT ins_deel_key,
ins_deel_omschrijving,
CASE
WHEN fac.safe_to_number(kleur) = 1.0 THEN fac.safe_to_number(verbruik)
ELSE CASE
WHEN fac.safe_to_number(verbruik) > fac.safe_to_number(setpoint) THEN fac.safe_to_number(setpoint)
ELSE 0
END
END,
CASE
WHEN fac.safe_to_number(kleur) = 7.0
THEN CASE
WHEN fac.safe_to_number(verbruik) > fac.safe_to_number(setpoint) THEN fac.safe_to_number(verbruik) - fac.safe_to_number(setpoint)
ELSE fac.safe_to_number(verbruik)
END
ELSE 0
END,
CASE
WHEN fac.safe_to_number(kleur) = 3.0
THEN CASE
WHEN fac.safe_to_number(verbruik) > fac.safe_to_number(setpoint) THEN fac.safe_to_number(verbruik) - fac.safe_to_number(setpoint)
ELSE fac.safe_to_number(verbruik)
END
ELSE 0
END,
'appl/ins/ins_deel.asp?urole=fe' || '&' || 'ins_key=' || ins_deel_key,
volgorde
FROM arai_v_water_verbruik_nu;
-- Verbruik van vandaag vanaf maximaal 12 uur geleden.
CREATE OR REPLACE VIEW arai_v_graph_water_today
(
fclt_key,
FCLT_XAS_,
FCLT_YAS_,
FCLT_URL
)
AS
SELECT ins_deel_key,
ins_kenmerkdeel_aanmaak,
verbruik,
''
FROM arai_v_energie_verbruik_today
WHERE ins_deel_key = 241
AND ins_kenmerkdeel_aanmaak >= GREATEST('00', TRIM(TO_CHAR(TO_CHAR(SYSDATE,'HH24') - 12,'00')));
-- ELEKTRA
-- Grafiek: KPI Energie Elektraverbruik per elektrameter van nu (max 10 minuten geleden):
-- ins_deel_key inkoop = 243
-- ins_deel_key wkk = 244
-- ins_deel_key pv = 339 NIET, die gaat in een aparte grafiek (uitdukken in kW)
-- ins_deel_key totaal = 245
-- YAS voor groen
-- YAS2 voor rood
-- YAS3 voor oranje
-- Barchart met 3 kleuren: groen (verbruik = okee), oranje (verbruik is oranje) en rood (verbruik is rood)
CREATE OR REPLACE VIEW arai_v_graph_elektra_nu
(
fclt_key,
FCLT_XAS_,
FCLT_YAS_,
FCLT_YAS2_,
FCLT_YAS3_,
FCLT_URL,
VOLGORDE
)
AS
SELECT ins_deel_key,
ins_deel_omschrijving,
CASE
WHEN COALESCE(fac.safe_to_number(kleur),1.0) = 1.0 THEN fac.safe_to_number(verbruik)
ELSE CASE
WHEN fac.safe_to_number(verbruik) > fac.safe_to_number(setpoint) THEN fac.safe_to_number(setpoint)
ELSE 0
END
END,
CASE
WHEN fac.safe_to_number(kleur) = 7.0
THEN CASE
WHEN fac.safe_to_number(verbruik) > fac.safe_to_number(setpoint) THEN fac.safe_to_number(verbruik) - fac.safe_to_number(setpoint)
ELSE fac.safe_to_number(verbruik)
END
ELSE 0
END,
CASE
WHEN fac.safe_to_number(kleur) = 3.0
THEN CASE
WHEN fac.safe_to_number(verbruik) > fac.safe_to_number(setpoint) THEN fac.safe_to_number(verbruik) - fac.safe_to_number(setpoint)
ELSE fac.safe_to_number(verbruik)
END
ELSE 0
END,
'appl/ins/ins_deel.asp?urole=fe' || '&' || 'ins_key=' || ins_deel_key,
volgorde
FROM arai_v_elektra_verbruik_nu
WHERE ins_deel_key IN (243, 244, 245);
-- MBMB: Check of de ins_deel_key's hieronder okee zijn:
-- ins_deel_key inkoop = 243
-- ins_deel_key wkk = 244
-- ins_deel_key pv = 339 NIET, die gaat in een aparte grafiek (uitdukken in kW)
-- ins_deel_key totaal = 245
CREATE OR REPLACE VIEW arai_v_graph_electra_today
(
fclt_key,
FCLT_XAS_,
FCLT_YAS_INKOOP,
FCLT_YAS2_WKK,
FCLT_YAS3_TOTAAL,
FCLT_URL
)
AS
SELECT totaal.ins_deel_key,
totaal.ins_kenmerkdeel_aanmaak,
inkoop.verbruik,
wkk.verbruik,
totaal.verbruik,
''
FROM arai_v_energie_verbruik_today inkoop, arai_v_energie_verbruik_today wkk, arai_v_energie_verbruik_today totaal
WHERE inkoop.ins_deel_key = 243
AND inkoop.ins_kenmerkdeel_aanmaak >= GREATEST('00', TRIM(TO_CHAR(TO_CHAR(SYSDATE,'HH24') - 12,'00')))
AND wkk.ins_deel_key = 244
AND wkk.ins_kenmerkdeel_aanmaak >= GREATEST('00', TRIM(TO_CHAR(TO_CHAR(SYSDATE,'HH24') - 12,'00')))
AND totaal.ins_deel_key = 245
AND totaal.ins_kenmerkdeel_aanmaak >= GREATEST('00', TRIM(TO_CHAR(TO_CHAR(SYSDATE,'HH24') - 12,'00')))
AND inkoop.ins_kenmerkdeel_aanmaak = wkk.ins_kenmerkdeel_aanmaak
AND wkk.ins_kenmerkdeel_aanmaak = totaal.ins_kenmerkdeel_aanmaak;
-- ELEKTRA
-- Grafiek: KPI Zonne-energie van nu (max 10 minuten geleden)
-- YAS voor groen
-- ins_deel_key pv = 339 (uitdukken in kW)
-- Barchart met 1 kleur: groen.
CREATE OR REPLACE VIEW arai_v_graph_zon_nu
(
fclt_key,
FCLT_XAS_,
FCLT_YAS_,
FCLT_URL,
VOLGORDE
)
AS
SELECT ins_deel_key,
ins_deel_omschrijving,
fac.safe_to_number(verbruik),
'appl/ins/ins_deel.asp?urole=fe' || '&' || 'ins_key=' || ins_deel_key,
volgorde
FROM arai_v_elektra_verbruik_nu
WHERE ins_deel_key IN (339)
UNION ALL
SELECT 0, ' ', 0, ' ', 0 FROM DUAL
UNION ALL
SELECT 0, ' ', 0, ' ', 99 FROM DUAL;
-- MBMB: Check of de ins_deel_key's hieronder okee zijn:
-- ins_deel_key pv = 339
CREATE OR REPLACE VIEW arai_v_graph_zon_today
(
fclt_key,
FCLT_XAS_,
FCLT_YAS_,
FCLT_URL
)
AS
SELECT pv.ins_deel_key,
pv.ins_kenmerkdeel_aanmaak,
pv.verbruik,
''
FROM arai_v_energie_verbruik_today pv
WHERE pv.ins_deel_key = 339
AND pv.ins_kenmerkdeel_aanmaak >= GREATEST('00', TRIM(TO_CHAR(TO_CHAR(SYSDATE,'HH24') - 12,'00')));
-- WARMTE
-- Grafiek: KPI Energie Warmteverbruik per warmtemeter van nu (max 10 minuten geleden)
-- YAS voor groen
-- YAS2 voor rood
-- YAS3 voor oranje
-- Barchart met 3 kleuren: groen (verbruik = okee), oranje (verbruik is oranje) en rood (verbruik is rood)
CREATE OR REPLACE VIEW arai_v_graph_warmte_nu
(
fclt_key,
FCLT_XAS_,
FCLT_YAS_,
FCLT_YAS2_,
FCLT_YAS3_,
FCLT_URL,
VOLGORDE
)
AS
SELECT ins_deel_key,
ins_deel_omschrijving,
CASE
WHEN COALESCE(fac.safe_to_number(kleur),1.0) = 1.0 THEN fac.safe_to_number(verbruik)
ELSE CASE
WHEN fac.safe_to_number(verbruik) > fac.safe_to_number(setpoint) THEN fac.safe_to_number(setpoint)
ELSE 0
END
END,
CASE
WHEN fac.safe_to_number(kleur) = 7.0
THEN CASE
WHEN fac.safe_to_number(verbruik) > fac.safe_to_number(setpoint) THEN fac.safe_to_number(verbruik) - fac.safe_to_number(setpoint)
ELSE fac.safe_to_number(verbruik)
END
ELSE 0
END,
CASE
WHEN fac.safe_to_number(kleur) = 3.0
THEN CASE
WHEN fac.safe_to_number(verbruik) > fac.safe_to_number(setpoint) THEN fac.safe_to_number(verbruik) - fac.safe_to_number(setpoint)
ELSE fac.safe_to_number(verbruik)
END
ELSE 0
END,
'appl/ins/ins_deel.asp?urole=fe' || '&' || 'ins_key=' || ins_deel_key,
volgorde
FROM arai_v_warmte_verbruik_nu;
-- MBMB: Check of de ins_deel_key's hieronder okee zijn:
-- ins_deel_key gas = 242
-- ins_deel_key stadw = 246
-- ins_deel_key wkk = 337
-- ins_deel_key totaal = 338
CREATE OR REPLACE VIEW arai_v_graph_warmte_today
(
fclt_key,
FCLT_XAS_,
FCLT_YAS_GAS,
FCLT_YAS2_STADW,
FCLT_YAS3_WKK,
FCLT_YAS4_TOTAAL,
FCLT_URL
)
AS
SELECT totaal.ins_deel_key,
totaal.ins_kenmerkdeel_aanmaak,
gas.verbruik,
stadw.verbruik,
wkk.verbruik,
totaal.verbruik,
''
FROM arai_v_energie_verbruik_today gas, arai_v_energie_verbruik_today stadw, arai_v_energie_verbruik_today wkk, arai_v_energie_verbruik_today totaal
WHERE gas.ins_deel_key = 242
AND gas.ins_kenmerkdeel_aanmaak >= GREATEST('00', TRIM(TO_CHAR(TO_CHAR(SYSDATE,'HH24') - 12,'00')))
AND stadw.ins_deel_key = 246
AND gas.ins_kenmerkdeel_aanmaak >= GREATEST('00', TRIM(TO_CHAR(TO_CHAR(SYSDATE,'HH24') - 12,'00')))
AND wkk.ins_deel_key = 337
AND wkk.ins_kenmerkdeel_aanmaak >= GREATEST('00', TRIM(TO_CHAR(TO_CHAR(SYSDATE,'HH24') - 12,'00')))
AND totaal.ins_deel_key = 338
AND totaal.ins_kenmerkdeel_aanmaak >= GREATEST('00', TRIM(TO_CHAR(TO_CHAR(SYSDATE,'HH24') - 12,'00')))
AND gas.ins_kenmerkdeel_aanmaak = stadw.ins_kenmerkdeel_aanmaak
AND stadw.ins_kenmerkdeel_aanmaak = wkk.ins_kenmerkdeel_aanmaak
AND wkk.ins_kenmerkdeel_aanmaak = totaal.ins_kenmerkdeel_aanmaak;
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Import KPI ICT MITEL Import KPI ICT MITEL Import KPI ICT MITEL Import KPI ICT MITEL Import KPI ICT MITEL --
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE arai_notify_kpi_ict_mitel
(
p_import_key IN NUMBER
)
IS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errorhint2 VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count_tot NUMBER (10);
v_count_error NUMBER (10);
v_count NUMBER (10);
-- fac_usrtab_key = 21 is de tabel '$KPI_NOTIFY': SYSTEM TABEL: KEEP OUT!
-- SYNTAX code = KPI_<kpi-naam>_<mail-of-sms>, dus b.v. 'KPI_TEMP_MAIL', 'KPI_ICT_MITEL_MAIL', 'KPI_TEMP_SMS', 'KPI_ICT_MITEL_SMS',
-- Met volgnr = 1 wordt aangegeven dat het een actieve notificatie is, lege waarde of 0 (of iets anders) is inactief cq. tijdelijk uitgezet.
CURSOR c_kpi_ict_notify_mail_kpi
IS
SELECT fac_usrdata_omschr
FROM fac_usrdata
WHERE fac_usrtab_key = 21
AND fac_usrdata_code like 'KPI_ICT_MITEL_MAIL%'
AND fac_usrdata_verwijder IS NULL
AND fac_usrdata_volgnr = 1;
CURSOR c_kpi_ict_notify_mail_evm
IS
SELECT fac_usrdata_omschr
FROM fac_usrdata
WHERE fac_usrtab_key = 21
AND fac_usrdata_code like 'EVM_MAIL%'
AND fac_usrdata_verwijder IS NULL
AND fac_usrdata_volgnr = 1;
CURSOR c_kpi_ict_notify_sms_kpi
IS
SELECT fac_usrdata_omschr
FROM fac_usrdata
WHERE fac_usrtab_key = 21
AND fac_usrdata_code like 'KPI_ICT_MITEL_SMS%'
AND fac_usrdata_verwijder IS NULL
AND fac_usrdata_volgnr = 1;
CURSOR c_kpi_ict_notify_sms_evm
IS
SELECT fac_usrdata_omschr
FROM fac_usrdata
WHERE fac_usrtab_key = 21
AND fac_usrdata_code like 'EVM_SMS%'
AND fac_usrdata_verwijder IS NULL
AND fac_usrdata_volgnr = 1;
CURSOR c_kpi_ict_mitel
IS
SELECT ins_deel_key, ins_kenmerkdeel_waarde, kpi_color_overrule,
CASE
WHEN kpi_color_overrule IS NOT NULL THEN kpi_color_overrule
WHEN ins_kenmerkdeel_waarde IS NULL THEN -1
WHEN ins_kenmerkdeel_waarde >= waarde_rood THEN 2
WHEN ins_kenmerkdeel_waarde >= waarde_oranje THEN 1
ELSE 0
END kpi_ict_mitel
FROM arai_v_kpi_ict_mitel
WHERE ins_kenmerkdeel_verwijder IS NULL;
-- Alleen notificeren gedurende de "openingsdatums" en "openingstijden" van de KPI.
-- Openingsdatums worden bepaald door settings KPI_ALL_DATUM1 en KPI_ALL_DATUM2 (b.v. 06-09-2012 en 11-09-2012)
-- Indien deze niet in tabel staan, dan zijn de openingsdatums oneindig (levert altijd OKEE op).
-- Openingstijden worden bepaald door settings KPI_ICT_MITEL_TIME1 en KPI_ICT_MITEL_TIME2 (b.v. 08:00 en 17:00)
-- Indien deze niet in tabel staan, dan zijn de openingstijden van 0:00 t/m 23:59 (24 uurs)
CURSOR c_kpi_notify_during_opening
IS
SELECT
COALESCE(
(SELECT
CASE WHEN TRUNC(to_date(ud.fac_usrdata_omschr,'DD-MM-YYYY')) <= TRUNC(sysdate)
THEN 1
ELSE 0
END
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 21
AND ud.fac_usrdata_code = 'KPI_ALL_DATUM1'
AND ud.fac_usrdata_verwijder IS NULL
), 1) min_datum,
COALESCE(
(SELECT
CASE WHEN TRUNC(to_date(ud.fac_usrdata_omschr,'DD-MM-YYYY')) >= TRUNC(sysdate)
THEN 1
ELSE 0
END
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 21
AND ud.fac_usrdata_code = 'KPI_ALL_DATUM2'
AND ud.fac_usrdata_verwijder IS NULL
), 1) max_datum,
COALESCE(
(SELECT
CASE WHEN to_date(to_char(sysdate,'DD-MM-YYYY') || ' ' || ud.fac_usrdata_omschr,'DD-MM-YYYY HH24:MI') <= sysdate
THEN 1
ELSE 0
END
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 21
AND ud.fac_usrdata_code = 'KPI_ICT_MITEL_TIME1'
AND ud.fac_usrdata_verwijder IS NULL
), 1) min_tijd,
COALESCE(
(SELECT
CASE WHEN to_date(to_char(sysdate,'DD-MM-YYYY') || ' ' || ud.fac_usrdata_omschr,'DD-MM-YYYY HH24:MI') >= sysdate
THEN 1
ELSE 0
END
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 21
AND ud.fac_usrdata_code = 'KPI_ICT_MITEL_TIME2'
AND ud.fac_usrdata_verwijder IS NULL
), 1) max_tijd
FROM DUAL;
BEGIN
FOR rec_open IN c_kpi_notify_during_opening
LOOP
-- Deze loop is precies 1 record (feitelijk een if-statement)
IF rec_open.min_datum = 1 AND rec_open.max_datum = 1 AND rec_open.min_tijd = 1 AND rec_open.max_tijd = 1
THEN
-- De sysdate ligt tussen zowel de openingstijd als sluitingstijd van de KPI, dus we kunnen gaan notificeren...
FOR rec_kpi_ict_mitel IN c_kpi_ict_mitel
LOOP
BEGIN
-- Als ORANJE (1) of ROOD (2), dan notificeren, anders niet (uiteraard)
IF rec_kpi_ict_mitel.kpi_ict_mitel = 1 OR rec_kpi_ict_mitel.kpi_ict_mitel = 2
THEN
IF rec_kpi_ict_mitel.kpi_ict_mitel = 1
THEN
-- Code ORANJE voor KPI ICT MITEL
-- Mailen naar KPI + EVM, en SMS-en naar KPI en EVM...
-- Maar ALLEEN indien er GEEN handmatige OVERRULE kleur is ingesteld
IF rec_kpi_ict_mitel.kpi_color_overrule IS NULL
THEN
-- Vanuit Mitel, dus geen handmatige ingestelde kleur hier...
v_errorhint := 'Alarm ORANJE: Gemiddelde wachttijd ICT Telefooncentrale ' || rec_kpi_ict_mitel.ins_kenmerkdeel_waarde || ' seconden.';
v_errormsg := '';
-- 1.Eerst mailen naar alle KPI-eigenaren / betrokkenen
FOR rec_kpi_noti IN c_kpi_ict_notify_mail_kpi
LOOP
BEGIN
-- Mailen
fac.putnotificationprio (NULL, NULL, v_errorhint, 2, rec_kpi_noti.fac_usrdata_omschr, NULL, 2);
-- Loggen
v_aanduiding := 'Bestemd voor ' || rec_kpi_noti.fac_usrdata_omschr ;
fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, v_errorhint);
COMMIT;
END;
END LOOP;
-- 2. Dan mailen naar alle eventmanagers
FOR rec_kpi_noti IN c_kpi_ict_notify_mail_evm
LOOP
BEGIN
-- Mailen
fac.putnotificationprio (NULL, NULL, v_errorhint, 2, rec_kpi_noti.fac_usrdata_omschr, NULL, 2);
-- Loggen
v_aanduiding := 'Bestemd voor ' || rec_kpi_noti.fac_usrdata_omschr ;
fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, v_errorhint);
COMMIT;
END;
END LOOP;
-- 3.Dan nog sms-en naar alle KPI-eigenaren / betrokkenen
FOR rec_kpi_noti IN c_kpi_ict_notify_sms_kpi
LOOP
BEGIN
-- SMS-en
fac.putnotificationprio (NULL, NULL, v_errorhint, 4, NULL, rec_kpi_noti.fac_usrdata_omschr, 2);
-- Loggen
v_aanduiding := 'Bestemd voor ' || rec_kpi_noti.fac_usrdata_omschr ;
fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, v_errorhint);
COMMIT;
END;
END LOOP;
-- 4. En sms-en naar alle eventmanagers
FOR rec_kpi_noti IN c_kpi_ict_notify_sms_evm
LOOP
BEGIN
-- SMS-en
fac.putnotificationprio (NULL, NULL, v_errorhint, 4, NULL, rec_kpi_noti.fac_usrdata_omschr, 2);
-- Loggen
v_aanduiding := 'Bestemd voor ' || rec_kpi_noti.fac_usrdata_omschr ;
fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, v_errorhint);
COMMIT;
END;
END LOOP;
ELSE
-- De KPI KLEUR is handmatig (danwel door de 1e ROOD via MITEL) ingesteld, en OVERRULED het systeem MITEL en dus ook GEEN notifificaties...
v_errormsg := '';
v_errorhint := '';
v_aanduiding := 'Geen notificatie: KPI ICT Mitel is handmatig ingesteld' ;
fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, v_errorhint);
END IF;
ELSE
-- Code ROOD voor KPI ICT MITEL
-- Mailen naar KPI + EVM, en SMS-en naar KPI en EVM
-- Maar ALLEEN indien er GEEN handmatige OVERRULE kleur is ingesteld
IF rec_kpi_ict_mitel.kpi_color_overrule IS NULL
THEN
-- Vanuit Mitel, dus geen handmatige ingestelde kleur hier...
-- Eerst maar DIRECT de overrule instellen, dan hebbe we die gehad.
-- RAI wil graag in geval van ROOD dat die op ROOD blijft, ook al vertelt MITEL dat de wachttijd alweer oplaag is
-- Dat heeft te maken met ALGEMEN aankondiging, en daardoor afname van telefoonwachtrij, terwijl het ICT probleem niet is opgelost.
-- MB vind dit een kronkel: is eigenlijkj een andere KPI. Maar RAI wil zo, dus geschiedde het...
-- kd.ins_kenmerk_key = 41 is de key van kenmerk Overrule Kleur bij telefooncentrale
DELETE FROM ins_kenmerkdeel kd
WHERE kd.ins_deel_key = rec_kpi_ict_mitel.ins_deel_key AND kd.ins_kenmerk_key = 41;
INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde)
SELECT rec_kpi_ict_mitel.ins_deel_key , 41,
(SELECT fac_usrdata_key FROM fac_usrdata WHERE fac_usrdata_code = 'KPI_ROOD' and fac_usrdata_verwijder IS NULL) FROM DUAL;
v_errorhint := 'Alarm ROOD: Gemiddelde wachttijd ICT Telefooncentrale: ' || rec_kpi_ict_mitel.ins_kenmerkdeel_waarde || ' seconden.';
v_errormsg := '';
-- 1.Eerst mailen naar alle KPI-eigenaren / betrokkenen
FOR rec_kpi_noti IN c_kpi_ict_notify_mail_kpi
LOOP
BEGIN
-- Mailen
fac.putnotificationprio (NULL, NULL, v_errorhint, 2, rec_kpi_noti.fac_usrdata_omschr, NULL, 2);
-- Loggen
v_aanduiding := 'Bestemd voor ' || rec_kpi_noti.fac_usrdata_omschr ;
fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, v_errorhint);
COMMIT;
END;
END LOOP;
-- 2. Dan mailen naar alle eventmanagers
FOR rec_kpi_noti IN c_kpi_ict_notify_mail_evm
LOOP
BEGIN
-- Mailen
fac.putnotificationprio (NULL, NULL, v_errorhint, 2, rec_kpi_noti.fac_usrdata_omschr, NULL, 2);
-- Loggen
v_aanduiding := 'Bestemd voor ' || rec_kpi_noti.fac_usrdata_omschr ;
fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, v_errorhint);
COMMIT;
END;
END LOOP;
-- 3.Eerst sms-en naar alle KPI-eigenaren / betrokkenen
FOR rec_kpi_noti IN c_kpi_ict_notify_sms_kpi
LOOP
BEGIN
-- SMS-en
fac.putnotificationprio (NULL, NULL, v_errorhint, 4, NULL, rec_kpi_noti.fac_usrdata_omschr, 2);
-- Loggen
v_aanduiding := 'Bestemd voor ' || rec_kpi_noti.fac_usrdata_omschr ;
fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, v_errorhint);
COMMIT;
END;
END LOOP;
-- 4. Dan mailen naar alle eventmanagers
FOR rec_kpi_noti IN c_kpi_ict_notify_sms_evm
LOOP
BEGIN
-- SMS-en
fac.putnotificationprio (NULL, NULL, v_errorhint, 4, NULL, rec_kpi_noti.fac_usrdata_omschr, 2);
-- Loggen
v_aanduiding := 'Bestemd voor ' || rec_kpi_noti.fac_usrdata_omschr ;
fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, v_errorhint);
COMMIT;
END;
END LOOP;
ELSE
-- De KPI KLEUR is handmatig (danwel door de 1e ROOD via MITEL) ingesteld, en OVERRULED het systeem MITEL en dus ook GEEN notifificaties...
v_errormsg := '';
v_errorhint := '';
v_aanduiding := 'Geen notificatie: KPI ICT Mitel is handmatig ingesteld' ;
fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, v_errorhint);
END IF;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint
);
COMMIT;
END;
END LOOP;
ELSE
-- De sysdate ligt buiten de openingstijd en sluitingstijd van de KPI, dus GEEN notificeren...
v_errormsg := '';
v_errorhint := '';
v_aanduiding := 'Geen notificatie: tijd ligt buiten de KPI tijden' ;
fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, v_errorhint);
END IF;
-- Deze loop is precies 1 record (feitelijk een if-statement)
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (arai_notify_kpi_ict_mitel error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint
);
COMMIT;
END arai_notify_kpi_ict_mitel;
/
CREATE OR REPLACE PROCEDURE arai_import_kpi_ict_mitel (
p_import_key IN NUMBER
)
IS
c_fielddelimitor VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000); -- Input line
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER := 0;
v_ongeldig NUMBER (1);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_count NUMBER;
-- De importvelden:
v_wachtrij_id VARCHAR2 (256);
v_aantal_wachtenden VARCHAR2 (256);
v_aantal_agents VARCHAR2 (256);
-- Gemiddelde wachttijd in seconden
v_gemiddelde_wachttijd VARCHAR2 (256);
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
DELETE FROM arai_imp_kpi_ict_mitel;
COMMIT;
v_count_tot := 0;
v_count_import := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_aanduiding := '';
v_errorhint := 'Fout bij opvragen te importeren rij';
v_ongeldig := 0;
-- Lees alle veldwaarden
-- Wachtrij-ID, aantal wachtenden, aantal agents en gemiddelde-wachttijd van de telefooncentrale
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 1, v_wachtrij_id);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 2, v_aantal_wachtenden);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 3, v_aantal_agents);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 4, v_gemiddelde_wachttijd);
--
v_aanduiding :=
'['
|| v_wachtrij_id
|| '|'
|| v_aantal_wachtenden
|| '|'
|| v_aantal_agents
|| '|'
|| v_gemiddelde_wachttijd
|| '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (v_wachtrij_id) = 'WACHTRIJ_ID'
AND UPPER (v_aantal_wachtenden) = 'AANTAL_WACHTENDEN'
AND UPPER (v_aantal_agents) = 'AANTAL_AGENTS'
AND UPPER (v_gemiddelde_wachttijd) = 'GEMIDDELDE_WACHTTIJD'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
--
v_errorhint := 'Ongeldige objectnaam / installatiecode';
v_wachtrij_id := TRIM (v_wachtrij_id);
IF (v_wachtrij_id IS NOT NULL)
THEN
IF LENGTH (v_wachtrij_id) > 60
THEN
v_wachtrij_id := SUBSTR (v_wachtrij_id, 1, 60);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Objectnaam te lang', 'Objectnaam wordt afgebroken tot [' || v_wachtrij_id || ']' );
END IF;
ELSE
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Objectnaam niet gevuld', 'Objectnaam is verplicht');
v_ongeldig := 1;
END IF;
v_errorhint := 'Ongeldige meetwaarde';
v_aantal_wachtenden := TRIM (v_aantal_wachtenden);
IF (v_aantal_wachtenden IS NOT NULL)
THEN
IF LENGTH (v_aantal_wachtenden) > 10
THEN
v_aantal_wachtenden := SUBSTR (v_aantal_wachtenden, 1, 10);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Aantal wachtenden te lang', 'Aantal wachtenden wordt afgebroken tot [' || v_aantal_wachtenden || ']' );
END IF;
ELSE
--Is wel geldig, maar wel ff loggen...
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Aantal wachtenden niet gevuld', 'Aantal wachtenden wordt niet gergeistreerd');
-- v_ongeldig := 1;
END IF;
v_errorhint := 'Aantal agents ongeldig';
v_aantal_agents := TRIM (v_aantal_agents);
IF (v_aantal_agents IS NOT NULL)
THEN
IF LENGTH (v_aantal_agents) > 10
THEN
v_aantal_agents := SUBSTR (v_aantal_agents, 1, 10);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'OPC label te lang', 'Label wordt afgebroken tot [' || v_aantal_agents || ']' );
END IF;
ELSE
--Is wel geldig, maar wel ff loggen...
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Aantal agents is niet gevuld', 'Aantal agents wordt niet geregistreerd');
-- v_ongeldig := 1;
END IF;
v_errorhint := 'Ongeldige (gemiddelde) wachttijd';
v_gemiddelde_wachttijd := TRIM (v_gemiddelde_wachttijd);
IF (v_gemiddelde_wachttijd IS NOT NULL)
THEN
IF LENGTH (v_gemiddelde_wachttijd) > 10
THEN
v_gemiddelde_wachttijd := SUBSTR (v_gemiddelde_wachttijd, 1, 10);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Wachttijd te lang', 'Wachttijd wordt afgebroken tot [' || v_gemiddelde_wachttijd || ']' );
END IF;
ELSE
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Gemiddelde wachttijd is niet gevuld', 'Gemiddelde wachttijd is verplicht');
v_ongeldig := 1;
END IF;
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errorhint :=
'Fout bij toevoegen regel aan importtabel arai_imp_kpi_ict_mitel';
INSERT INTO arai_imp_kpi_ict_mitel (wachtrij_id,aantal_wachtenden,aantal_agents, gemiddelde_wachttijd)
VALUES (v_wachtrij_id,v_aantal_wachtenden,v_aantal_agents, v_gemiddelde_wachttijd);
COMMIT;
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog
(p_import_key,
'E',
v_aanduiding || v_errormsg,
'Ingelezen regel kan niet worden weggeschreven!'
);
COMMIT;
END;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
'Ongeldig importbestand',
'Geen header of header niet volgens specificatie!'
);
ELSE
fac.imp_writelog (p_import_key,
'S',
'KPI: aantal ingelezen regels: '
|| TO_CHAR (v_count_tot),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
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',
v_aanduiding || v_errormsg,
v_errorhint
);
COMMIT;
END arai_import_kpi_ict_mitel;
/
CREATE OR REPLACE PROCEDURE arai_update_kpi_ict_mitel (
p_import_key IN NUMBER
)
IS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count_tot NUMBER (10);
v_count_error NUMBER (10);
v_count NUMBER (10);
c_ins_srtgroep_key_mitel NUMBER (10) := 41;
c_ins_kenmerk_key_mitel NUMBER (10) := 21;
v_ins_deel_key NUMBER (10);
-- Alle kpi_wachtijen van Mitel telefooncentrale
CURSOR c_kpi_ict_mitel
IS
SELECT *
FROM arai_imp_kpi_ict_mitel k;
-- WHERE k.ins_deel_omschrijving like '%TT%';
-- AND k.ins_deel_opclabel like '%MET%';
BEGIN
v_count_tot := 0;
v_count_error := 0;
v_aanduiding := '';
-- Alle kpi-wachtrijen verwerken...
FOR rec_kpi_ict_mitel IN c_kpi_ict_mitel
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errorhint := 'Fout bij bepalen object [' || rec_kpi_ict_mitel.wachtrij_id || ']';
-- NB sd.ins_srtgroep_key = 41 is de groep van allemaal telefooncentrale-wachtrij-objecten;
-- Let op: binnen de srtgroep moet de naam/code/id van het wachtrij-object wel UNIEK zijn!!!
SELECT d.ins_deel_key
INTO v_ins_deel_key
FROM ins_deel d, ins_srtdeel sd
WHERE d.ins_deel_verwijder IS NULL
AND UPPER (d.ins_deel_omschrijving) = UPPER (rec_kpi_ict_mitel.wachtrij_id)
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = c_ins_srtgroep_key_mitel;
-- Max 1 record wordt bijgewerkt, namelijk het kenmerk wachtrij van het betreffende object wordt functioneel verwijderd.
UPDATE ins_kenmerkdeel
SET ins_kenmerkdeel_verwijder = SYSDATE
WHERE ins_kenmerk_key = c_ins_kenmerk_key_mitel
AND ins_deel_key = v_ins_deel_key
AND ins_kenmerkdeel_verwijder IS NULL;
v_errorhint := 'Fout bij toevoegen wachtrij bij object [' || rec_kpi_ict_mitel.wachtrij_id || ']';
INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde)
SELECT v_ins_deel_key, c_ins_kenmerk_key_mitel, rec_kpi_ict_mitel.gemiddelde_wachttijd FROM DUAL;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint
);
COMMIT;
END;
END LOOP;
-- Als alle wachtrijen zijn verwerkt, dan checken of er een wachtrij buiten de grenzen valt.
fac.imp_writelog (p_import_key,
'S',
'KPI: verwerkte regels zonder foutmelding: '
|| TO_CHAR (v_count_tot - v_count_error),
''
);
fac.imp_writelog (p_import_key,
'S',
'KPI: verwerkte regels met foutmelding: '
|| TO_CHAR (v_count_error),
''
);
COMMIT;
-- Tenslotte nog de notificaties uitsturen, als STAART van de import.
arai_notify_kpi_ict_mitel(p_import_key);
END arai_update_kpi_ict_mitel;
/
-- Om het HALVE uur de resultaten van het voorgaande halve uur verzamelen, optellen volgens formule en daarop notifceren.
CREATE OR REPLACE PROCEDURE arai_export_kpi_toilet_noti (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2
)
IS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errorhint2 VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count_tot NUMBER (10);
v_count_error NUMBER (10);
v_count NUMBER (10);
CURSOR c_kpi_toilet_notify_mail_kpi
IS
SELECT fac_usrdata_omschr
FROM fac_usrdata
WHERE fac_usrtab_key = 21
AND fac_usrdata_code like 'KPI_SCHONETOILETTEN_MAIL%'
AND fac_usrdata_verwijder IS NULL
AND fac_usrdata_volgnr = 1;
CURSOR c_kpi_toilet_notify_mail_evm
IS
SELECT fac_usrdata_omschr
FROM fac_usrdata
WHERE fac_usrtab_key = 21
AND fac_usrdata_code like 'EVM_MAIL%'
AND fac_usrdata_verwijder IS NULL
AND fac_usrdata_volgnr = 1;
CURSOR c_kpi_toilet_notify_sms_kpi
IS
SELECT fac_usrdata_omschr
FROM fac_usrdata
WHERE fac_usrtab_key = 21
AND fac_usrdata_code like 'KPI_SCHONETOILETTEN_SMS%'
AND fac_usrdata_verwijder IS NULL
AND fac_usrdata_volgnr = 1;
CURSOR c_kpi_toilet_notify_sms_evm
IS
SELECT fac_usrdata_omschr
FROM fac_usrdata
WHERE fac_usrtab_key = 21
AND fac_usrdata_code like 'EVM_SMS%'
AND fac_usrdata_verwijder IS NULL
AND fac_usrdata_volgnr = 1;
CURSOR c_toilet_gebouw
IS
SELECT alg_gebouw_key, alg_gebouw_code, alg_gebouw_naam, goed, kpi_status
FROM arai_v_kpi_toilet_scan_gebouw;
-- Alleen notificeren gedurende de "openingsdatums" en "openingstijden" van de KPI.
-- Openingsdatums worden bepaald door settings KPI_ALL_DATUM1 en KPI_ALL_DATUM2 (b.v. 06-09-2012 en 11-09-2012)
-- Indien deze niet in tabel staan, dan zijn de openingsdatums oneindig (levert altijd OKEE op).
-- Openingstijden worden bepaald door settings KPI_ICT_MITEL_TIME1 en KPI_ICT_MITEL_TIME2 (b.v. 08:00 en 17:00)
-- Indien deze niet in tabel staan, dan zijn de openingstijden van 0:00 t/m 23:59 (24 uurs)
CURSOR c_kpi_notify_during_opening
IS
SELECT
COALESCE(
(SELECT
CASE WHEN TRUNC(to_date(ud.fac_usrdata_omschr,'DD-MM-YYYY')) <= TRUNC(sysdate)
THEN 1
ELSE 0
END
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 21
AND ud.fac_usrdata_code = 'KPI_ALL_DATUM1'
AND ud.fac_usrdata_verwijder IS NULL
), 1) min_datum,
COALESCE(
(SELECT
CASE WHEN TRUNC(to_date(ud.fac_usrdata_omschr,'DD-MM-YYYY')) >= TRUNC(sysdate)
THEN 1
ELSE 0
END
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 21
AND ud.fac_usrdata_code = 'KPI_ALL_DATUM2'
AND ud.fac_usrdata_verwijder IS NULL
), 1) max_datum,
COALESCE(
(SELECT
CASE WHEN to_date(to_char(sysdate,'DD-MM-YYYY') || ' ' || ud.fac_usrdata_omschr,'DD-MM-YYYY HH24:MI') <= sysdate
THEN 1
ELSE 0
END
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 21
AND ud.fac_usrdata_code = 'KPI_SCHONETOILETTEN_TIME1'
AND ud.fac_usrdata_verwijder IS NULL
), 1) min_tijd,
COALESCE(
(SELECT
CASE WHEN to_date(to_char(sysdate,'DD-MM-YYYY') || ' ' || ud.fac_usrdata_omschr,'DD-MM-YYYY HH24:MI') >= sysdate
THEN 1
ELSE 0
END
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 21
AND ud.fac_usrdata_code = 'KPI_SCHONETOILETTEN_TIME2'
AND ud.fac_usrdata_verwijder IS NULL
), 1) max_tijd
FROM DUAL;
BEGIN
FOR rec_open IN c_kpi_notify_during_opening
LOOP
-- Deze loop is precies 1 record (feitelijk een if-statement)
IF rec_open.min_datum = 1 AND rec_open.max_datum = 1 AND rec_open.min_tijd = 1 AND rec_open.max_tijd = 1
THEN
-- De sysdate ligt tussen zowel de openingstijd als sluitingstijd van de KPI, dus we kunnen gaan notificeren...
FOR rec_kpi_toilet IN c_toilet_gebouw
LOOP
BEGIN
-- Als ORANJE (1) of ROOD (2), dan notificeren, anders niet (uiteraard)
IF rec_kpi_toilet.kpi_status = 1 OR rec_kpi_toilet.kpi_status = 2
THEN
IF rec_kpi_toilet.kpi_status = 1
THEN
-- Code ORANJE voor KPI TOILET
-- Mailen naar KPI + EVM, en SMS-en naar KPI en EVM
v_errorhint := 'Alarm ORANJE: Toiletten in gebouw ' || rec_kpi_toilet.alg_gebouw_naam || ' is voor ' || rec_kpi_toilet.goed || ' % schoon.';
v_errormsg := '';
-- 1.Eerst mailen naar alle KPI-eigenaren / betrokkenen
FOR rec_kpi_noti IN c_kpi_toilet_notify_mail_kpi
LOOP
BEGIN
-- Mailen
fac.putnotificationprio (NULL, NULL, v_errorhint, 2, rec_kpi_noti.fac_usrdata_omschr, NULL, 2);
COMMIT;
END;
END LOOP;
-- 2. Dan mailen naar alle eventmanagers
FOR rec_kpi_noti IN c_kpi_toilet_notify_mail_evm
LOOP
BEGIN
-- Mailen
fac.putnotificationprio (NULL, NULL, v_errorhint, 2, rec_kpi_noti.fac_usrdata_omschr, NULL, 2);
COMMIT;
END;
END LOOP;
-- 3.Eerst sms-en naar alle KPI-eigenaren / betrokkenen
FOR rec_kpi_noti IN c_kpi_toilet_notify_sms_kpi
LOOP
BEGIN
-- SMS-en
fac.putnotificationprio (NULL, NULL, v_errorhint, 4, NULL, rec_kpi_noti.fac_usrdata_omschr, 2);
COMMIT;
END;
END LOOP;
-- 4. Dan mailen naar alle eventmanagers
FOR rec_kpi_noti IN c_kpi_toilet_notify_sms_evm
LOOP
BEGIN
-- SMS-en
fac.putnotificationprio (NULL, NULL, v_errorhint, 4, NULL, rec_kpi_noti.fac_usrdata_omschr, 2);
COMMIT;
END;
END LOOP;
ELSE
-- Code ROOD voor KPI TOILET
-- Mailen naar KPI + EVM, en SMS-en naar KPI en EVM
v_errorhint := 'Alarm ROOD: Toiletten in gebouw ' || rec_kpi_toilet.alg_gebouw_naam || ' is voor ' || rec_kpi_toilet.goed || ' % schoon.';
v_errormsg := '';
-- 1.Eerst mailen naar alle KPI-eigenaren / betrokkenen
FOR rec_kpi_noti IN c_kpi_toilet_notify_mail_kpi
LOOP
BEGIN
-- Mailen
fac.putnotificationprio (NULL, NULL, v_errorhint, 2, rec_kpi_noti.fac_usrdata_omschr, NULL, 2);
COMMIT;
END;
END LOOP;
-- 2. Dan mailen naar alle eventmanagers
FOR rec_kpi_noti IN c_kpi_toilet_notify_mail_evm
LOOP
BEGIN
-- Mailen
fac.putnotificationprio (NULL, NULL, v_errorhint, 2, rec_kpi_noti.fac_usrdata_omschr, NULL, 2);
COMMIT;
END;
END LOOP;
-- 3.Eerst sms-en naar alle KPI-eigenaren / betrokkenen
FOR rec_kpi_noti IN c_kpi_toilet_notify_sms_kpi
LOOP
BEGIN
-- SMS-en
fac.putnotificationprio (NULL, NULL, v_errorhint, 4, NULL, rec_kpi_noti.fac_usrdata_omschr, 2);
COMMIT;
END;
END LOOP;
-- 4. Dan mailen naar alle eventmanagers
FOR rec_kpi_noti IN c_kpi_toilet_notify_sms_evm
LOOP
BEGIN
-- SMS-en
fac.putnotificationprio (NULL, NULL, v_errorhint, 4, NULL, rec_kpi_noti.fac_usrdata_omschr, 2);
COMMIT;
END;
END LOOP;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
COMMIT;
END;
END LOOP;
--ELSE
-- De sysdate ligt buiten de openingstijd en sluitingstijd van de KPI, dus GEEN notificeren...
--v_errormsg := '';
--v_errorhint := '';
--v_aanduiding := 'Geen notificatie: tijd ligt buiten de KPI tijden' ;
--fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, v_errorhint);
END IF;
-- Deze loop is precies 1 record (feitelijk een if-statement)
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (arai_export_kpi_toilet_noti error ' || oracle_err_num || '/' || oracle_err_mes || ')';
COMMIT;
END arai_export_kpi_toilet_noti;
/
-- Om het HALVE uur de resultaten van het voorgaande halve uur verzamelen, optellen volgens formule en daarop notifceren.
CREATE OR REPLACE PROCEDURE arai_export_kpi_schoonstd_noti (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2
)
IS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errorhint2 VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count_tot NUMBER (10);
v_count_error NUMBER (10);
v_count NUMBER (10);
CURSOR c_kpi_notify_mail_kpi
IS
SELECT fac_usrdata_omschr
FROM fac_usrdata
WHERE fac_usrtab_key = 21
AND fac_usrdata_code like 'KPI_SCHONESTANDS_MAIL%'
AND fac_usrdata_verwijder IS NULL
AND fac_usrdata_volgnr = 1;
CURSOR c_kpi_notify_mail_evm
IS
SELECT fac_usrdata_omschr
FROM fac_usrdata
WHERE fac_usrtab_key = 21
AND fac_usrdata_code like 'EVM_MAIL%'
AND fac_usrdata_verwijder IS NULL
AND fac_usrdata_volgnr = 1;
CURSOR c_kpi_notify_sms_kpi
IS
SELECT fac_usrdata_omschr
FROM fac_usrdata
WHERE fac_usrtab_key = 21
AND fac_usrdata_code like 'KPI_SCHONESTANDS_SMS%'
AND fac_usrdata_verwijder IS NULL
AND fac_usrdata_volgnr = 1;
CURSOR c_kpi_notify_sms_evm
IS
SELECT fac_usrdata_omschr
FROM fac_usrdata
WHERE fac_usrtab_key = 21
AND fac_usrdata_code like 'EVM_SMS%'
AND fac_usrdata_verwijder IS NULL
AND fac_usrdata_volgnr = 1;
CURSOR c_kpi_schonestand
IS
SELECT FCLT_XAS_TIJD, goed, fout, KPI_STATUS
FROM arai_v_rap_kpi_standschoon;
-- Alleen notificeren gedurende de "openingsdatums" en "openingstijden" van de KPI.
-- Openingsdatums worden bepaald door settings KPI_ALL_DATUM1 en KPI_ALL_DATUM2 (b.v. 06-09-2012 en 11-09-2012)
-- Indien deze niet in tabel staan, dan zijn de openingsdatums oneindig (levert altijd OKEE op).
-- Openingstijden worden bepaald door settings KPI_ICT_MITEL_TIME1 en KPI_ICT_MITEL_TIME2 (b.v. 08:00 en 17:00)
-- Indien deze niet in tabel staan, dan zijn de openingstijden van 0:00 t/m 23:59 (24 uurs)
CURSOR c_kpi_notify_during_opening
IS
SELECT
COALESCE(
(SELECT
CASE WHEN TRUNC(to_date(ud.fac_usrdata_omschr,'DD-MM-YYYY')) <= TRUNC(sysdate)
THEN 1
ELSE 0
END
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 21
AND ud.fac_usrdata_code = 'KPI_ALL_DATUM1'
AND ud.fac_usrdata_verwijder IS NULL
), 1) min_datum,
COALESCE(
(SELECT
CASE WHEN TRUNC(to_date(ud.fac_usrdata_omschr,'DD-MM-YYYY')) >= TRUNC(sysdate)
THEN 1
ELSE 0
END
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 21
AND ud.fac_usrdata_code = 'KPI_ALL_DATUM2'
AND ud.fac_usrdata_verwijder IS NULL
), 1) max_datum,
COALESCE(
(SELECT
CASE WHEN to_date(to_char(sysdate,'DD-MM-YYYY') || ' ' || ud.fac_usrdata_omschr,'DD-MM-YYYY HH24:MI') <= sysdate
THEN 1
ELSE 0
END
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 21
AND ud.fac_usrdata_code = 'KPI_SCHONESTANDS_TIME1'
AND ud.fac_usrdata_verwijder IS NULL
), 1) min_tijd,
COALESCE(
(SELECT
CASE WHEN to_date(to_char(sysdate,'DD-MM-YYYY') || ' ' || ud.fac_usrdata_omschr,'DD-MM-YYYY HH24:MI') >= sysdate
THEN 1
ELSE 0
END
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 21
AND ud.fac_usrdata_code = 'KPI_SCHONESTANDS_TIME2'
AND ud.fac_usrdata_verwijder IS NULL
), 1) max_tijd
FROM DUAL;
BEGIN
FOR rec_open IN c_kpi_notify_during_opening
LOOP
-- Deze loop is precies 1 record (feitelijk een if-statement)
IF rec_open.min_datum = 1 AND rec_open.max_datum = 1 AND rec_open.min_tijd = 1 AND rec_open.max_tijd = 1
THEN
-- De sysdate ligt tussen zowel de openingstijd als sluitingstijd van de KPI, dus we kunnen gaan notificeren...
FOR rec_kpi IN c_kpi_schonestand
LOOP
BEGIN
-- Als ORANJE (1) of ROOD (2), dan notificeren, anders niet (uiteraard)
IF rec_kpi.kpi_status = 1 OR rec_kpi.kpi_status = 2
THEN
IF rec_kpi.kpi_status = 1
THEN
-- Code ORANJE
-- Mailen naar KPI + EVM, en SMS-en naar KPI en EVM
v_errorhint := 'Alarm ORANJE: Klachten over standschoonmaak. KPI percentage: ' || rec_kpi.goed || ' %';
v_errormsg := '';
-- 1.Eerst mailen naar alle KPI-eigenaren / betrokkenen
FOR rec_kpi_noti IN c_kpi_notify_mail_kpi
LOOP
BEGIN
-- Mailen
fac.putnotificationprio (NULL, NULL, v_errorhint, 2, rec_kpi_noti.fac_usrdata_omschr, NULL, 2);
COMMIT;
END;
END LOOP;
-- 2. Dan mailen naar alle eventmanagers
FOR rec_kpi_noti IN c_kpi_notify_mail_evm
LOOP
BEGIN
-- Mailen
fac.putnotificationprio (NULL, NULL, v_errorhint, 2, rec_kpi_noti.fac_usrdata_omschr, NULL, 2);
COMMIT;
END;
END LOOP;
-- 3.Eerst sms-en naar alle KPI-eigenaren / betrokkenen
FOR rec_kpi_noti IN c_kpi_notify_sms_kpi
LOOP
BEGIN
-- SMS-en
fac.putnotificationprio (NULL, NULL, v_errorhint, 4, NULL, rec_kpi_noti.fac_usrdata_omschr, 2);
COMMIT;
END;
END LOOP;
-- 4. Dan mailen naar alle eventmanagers
FOR rec_kpi_noti IN c_kpi_notify_sms_evm
LOOP
BEGIN
-- SMS-en
fac.putnotificationprio (NULL, NULL, v_errorhint, 4, NULL, rec_kpi_noti.fac_usrdata_omschr, 2);
COMMIT;
END;
END LOOP;
ELSE
-- Code ROOD voor KPI
-- Mailen naar KPI + EVM, en SMS-en naar KPI en EVM
v_errorhint := 'Alarm ROOD: Klachten over standschoonmaak. KPI percentage: ' || rec_kpi.goed || ' %';
v_errormsg := '';
-- 1.Eerst mailen naar alle KPI-eigenaren / betrokkenen
FOR rec_kpi_noti IN c_kpi_notify_mail_kpi
LOOP
BEGIN
-- Mailen
fac.putnotificationprio (NULL, NULL, v_errorhint, 2, rec_kpi_noti.fac_usrdata_omschr, NULL, 2);
COMMIT;
END;
END LOOP;
-- 2. Dan mailen naar alle eventmanagers
FOR rec_kpi_noti IN c_kpi_notify_mail_evm
LOOP
BEGIN
-- Mailen
fac.putnotificationprio (NULL, NULL, v_errorhint, 2, rec_kpi_noti.fac_usrdata_omschr, NULL, 2);
COMMIT;
END;
END LOOP;
-- 3.Eerst sms-en naar alle KPI-eigenaren / betrokkenen
FOR rec_kpi_noti IN c_kpi_notify_sms_kpi
LOOP
BEGIN
-- SMS-en
fac.putnotificationprio (NULL, NULL, v_errorhint, 4, NULL, rec_kpi_noti.fac_usrdata_omschr, 2);
COMMIT;
END;
END LOOP;
-- 4. Dan mailen naar alle eventmanagers
FOR rec_kpi_noti IN c_kpi_notify_sms_evm
LOOP
BEGIN
-- SMS-en
fac.putnotificationprio (NULL, NULL, v_errorhint, 4, NULL, rec_kpi_noti.fac_usrdata_omschr, 2);
COMMIT;
END;
END LOOP;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
COMMIT;
END;
END LOOP;
--ELSE
-- De sysdate ligt buiten de openingstijd en sluitingstijd van de KPI, dus GEEN notificeren...
--v_errormsg := '';
--v_errorhint := '';
--v_aanduiding := 'Geen notificatie: tijd ligt buiten de KPI tijden' ;
--fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, v_errorhint);
END IF;
-- Deze loop is precies 1 record (feitelijk een if-statement)
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (arai_export_kpi_schoonstd_noti error ' || oracle_err_num || '/' || oracle_err_mes || ')';
COMMIT;
END arai_export_kpi_schoonstd_noti;
/
-- EXPOSANTEN NOTIFICATIE van klachten
-- Om de 5 minuten de nieuwe meldingen en meldingen die zijn afgemeld van de voorgaande 5 minuten verzamelen en notificeren.
-- De exposanten/klachtindiener krijgt van een nieuwe melding een registratiemail en van een opgeloste klacht feedback.
CREATE OR REPLACE PROCEDURE arai_export_klacht_noti (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2
)
IS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errorhint2 VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count_tot NUMBER (10);
v_count_error NUMBER (10);
v_count NUMBER (10);
v_tracking VARCHAR2 (1000);
-- Nieuwe klachten sinds de laatste keer dat er cust01 of cust02 notificatie is getracked, van ins_srtdiscipline_key = 1 is vakgroeptype 'Klachten exposanten'
CURSOR c_klacht_new
IS
SELECT m.mld_melding_key, km1.mld_kenmerkmelding_waarde exposant_mailadres, REPLACE(REPLACE(km2.mld_kenmerkmelding_waarde ,' ',''),'-','') exposant_telefoon
FROM mld_melding m, mld_stdmelding std, ins_tab_discipline d, ins_srtdiscipline sd,
fac_tracking t, fac_srtnotificatie sn,
mld_kenmerkmelding km1, mld_kenmerkmelding km2
WHERE m.mld_melding_key = km1.mld_melding_key (+)
AND km1.mld_kenmerk_key (+) = 46
AND m.mld_melding_key = km2.mld_melding_key (+)
AND km2.mld_kenmerk_key (+) = 45
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 sd.ins_srtdiscipline_key = 1
AND m.mld_melding_key = t.fac_tracking_refkey
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'MLDNEW'
AND t.fac_tracking_datum > ( SELECT COALESCE(MAX(FAC_TRACKING_DATUM), SYSDATE - 1)
FROM fac_tracking t, fac_srtnotificatie sn
WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code IN ( 'CUST01', 'CUST02')
);
-- AND t.fac_tracking_datum >= SYSDATE - 1/24/12; Eerder was het sinds de laatste 5 minuten, hierboven verbeterd met sinds laatste notifictaie.
-- Afgemelde klachten van afgelopen 5 minuten: ins_srtdiscipline_key = 1 is vakgroeptype 'Klachten exposanten'
CURSOR c_klacht_afgemeld
IS
SELECT m.mld_melding_key, km1.mld_kenmerkmelding_waarde exposant_mailadres, REPLACE(REPLACE(km2.mld_kenmerkmelding_waarde ,' ',''),'-','') exposant_telefoon
FROM mld_melding m, mld_stdmelding std, ins_tab_discipline d, ins_srtdiscipline sd,
fac_tracking t, fac_srtnotificatie sn,
mld_kenmerkmelding km1, mld_kenmerkmelding km2
WHERE m.mld_melding_key = km1.mld_melding_key (+)
AND km1.mld_kenmerk_key (+) = 46
AND m.mld_melding_key = km2.mld_melding_key (+)
AND km2.mld_kenmerk_key (+) = 45
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 sd.ins_srtdiscipline_key = 1
AND m.mld_melding_key = t.fac_tracking_refkey
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'MLDAFM'
AND t.fac_tracking_datum > ( SELECT COALESCE(MAX(FAC_TRACKING_DATUM), SYSDATE - 1)
FROM fac_tracking t, fac_srtnotificatie sn
WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code IN ( 'CUST01', 'CUST02')
);
-- AND t.fac_tracking_datum >= SYSDATE - 1/24/12; Eerder was het sinds de laatste 5 minuten, hierboven verbeterd met sinds laatste notifictaie.
BEGIN
FOR rec_klacht IN c_klacht_new
LOOP
BEGIN
-- Mailen van nieuwe klacht naar de expostant via CUST01, eventueel ook SMS indien 06nummer via CUST02.
v_errorhint := 'Uw melding ' || rec_klacht.mld_melding_key || ' is geregistreerd ';
v_errormsg := '';
IF (rec_klacht.exposant_mailadres IS NOT NULL AND INSTR(rec_klacht.exposant_mailadres,'@') > 0)
THEN
-- CUST01 = 'Uw melding ##KEY## is geregistereerd' wordt naar exposant gemaild
fac.putnotificationsrtprio ( NULL, NULL, 'CUST01', rec_klacht.mld_melding_key, 'Your call ##KEY## is registered', NULL, rec_klacht.exposant_mailadres, NULL, NULL, 2, NULL);
v_tracking := 'Mail naar exposant ' || rec_klacht.exposant_mailadres || ': ' || v_errorhint;
fac.trackaction ('CUST01', rec_klacht.mld_melding_key, NULL, NULL, v_tracking);
COMMIT;
END IF;
-- SMS versturen doen we (nog) NIET!
IF 0 = 1
THEN
IF (rec_klacht.exposant_telefoon IS NOT NULL AND SUBSTR(rec_klacht.exposant_telefoon, 1,2) = '06')
THEN
-- Het is een mobiel nummer, stuur een SMS
-- CUST02 = 'Uw melding ##KEY## is geregistereerd' wordt naar exposant ge-SMSt
-- Via de meldingstatus wordt in XSL de tekst bepaald
fac.putnotificationsrtprio ( NULL, NULL, 'CUST02', rec_klacht.mld_melding_key, 'Your call ##KEY## is registered', NULL, NULL, rec_klacht.exposant_telefoon, NULL, 2, NULL);
v_tracking := 'SMS naar exposant ' || rec_klacht.exposant_telefoon || ': ' || v_errorhint;
fac.trackaction ('CUST01', rec_klacht.mld_melding_key, NULL, NULL, v_tracking);
COMMIT;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
COMMIT;
END;
END LOOP;
-- Mails en SMS versturen voor afgemelde klachten doen we (nog) NIET!
IF 0 = 1
THEN
FOR rec_klacht IN c_klacht_afgemeld
LOOP
BEGIN
-- Mailen van nieuwe klacht naar de expostant via CUST01, eventueel ook SMS indien 06nummer via CUST02.
v_errorhint := 'Uw melding ' || rec_klacht.mld_melding_key || ' is afgehandeld. ';
v_errormsg := '';
IF (rec_klacht.exposant_mailadres IS NOT NULL AND INSTR(rec_klacht.exposant_mailadres,'@') > 0)
THEN
-- CUST01 = 'Uw melding ##KEY## is afgehandeld' wordt naar exposant gemaild
fac.putnotificationsrtprio ( NULL, NULL, 'CUST01', rec_klacht.mld_melding_key, 'Your call ##KEY## is signed off', NULL, rec_klacht.exposant_mailadres, NULL, NULL, 2, NULL);
v_tracking := 'Mail naar exposant ' || rec_klacht.exposant_mailadres || ': ' || v_errorhint;
fac.trackaction ('CUST02', rec_klacht.mld_melding_key, NULL, NULL, v_tracking);
COMMIT;
END IF;
-- SMS versturen doen we (nog) NIET!
IF 0 = 1
THEN
IF (rec_klacht.exposant_telefoon IS NOT NULL AND SUBSTR(rec_klacht.exposant_telefoon, 1,2) = '06')
THEN
-- Het is een mobiel nummer, stuur een SMS
-- CUST02 = 'Uw melding ##KEY## is afgehandeld' wordt naar exposant ge-SMSt
-- Via de meldingstatus wordt in XSL de tekst bepaald.
fac.putnotificationsrtprio ( NULL, NULL, 'CUST02', rec_klacht.mld_melding_key, 'Your call ##KEY## is signed off', NULL, NULL, rec_klacht.exposant_telefoon, NULL, 2, NULL);
v_tracking := 'SMS naar exposant ' || rec_klacht.exposant_mailadres || ': ' || v_errorhint;
fac.trackaction ('CUST02', rec_klacht.mld_melding_key, NULL, NULL, v_tracking);
COMMIT;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
COMMIT;
END;
END LOOP;
END IF;
-- Aangezien alles in het Engels-talig moet worden verstuurd, (en dat dit niet bij de klacht of via een instelling taalafhankelijk is) hierbij ff hard op Engels (EN).
-- Dit zijn de notificaties van het type CUST01 (mail, niewe melding en afgemelde melding) en CUST02 (sms, nieuwe melding en afgemelde melding)
UPDATE fac_notificatie n
SET n.fac_notificatie_lang = 'EN'
WHERE n.fac_srtnotificatie_key IN (SELECT sn.fac_srtnotificatie_key FROM fac_srtnotificatie sn
WHERE sn.fac_srtnotificatie_code IN ( 'CUST01', 'CUST02'));
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (arai_export_kpi_schoonstd_noti error ' || oracle_err_num || '/' || oracle_err_mes || ')';
COMMIT;
END arai_export_klacht_noti;
/
-- INVOERDER/BALIE krijgen NOTIFICATIE van klachten DIE binnen 10 minuten afgerond moeten zijn!
-- Om de 5 minuten de meldingen die NOG niet zijn afgemeld maar binnen 5 to 10 minuten dat wel zouden moeten verzamelen en notificeren.
-- De invoerder (baliemedewerker) krijgt van deze klacht die op aflopen staat signaleringsmail.
CREATE OR REPLACE PROCEDURE arai_export_klacht_5min_klaar (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2
)
IS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errorhint2 VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count_tot NUMBER (10);
v_count_error NUMBER (10);
v_count NUMBER (10);
v_tracking VARCHAR2 (1000);
-- Klachten die op over 5-10 minuten afgerond/gereed moeten worden gemeld, notificeren naar mailadres de MELDER (BALIE, FRONTOFFICE)
-- Hierbij voorkomen
CURSOR c_klacht_5min
IS
SELECT fclt_f_meldingnr, fclt_f_leverancier, invoerder_email from arai_v_rap_mld_klachten
WHERE fclt_key = 1
AND sysdate >= operationele_einddatum - (10 / (24*60))
AND sysdate <= operationele_einddatum - (5 / (24*60));
BEGIN
FOR rec_klacht IN c_klacht_5min
LOOP
BEGIN
v_errorhint := 'Oplostijd van klacht ' || rec_klacht.fclt_f_meldingnr || ' (leverancier ' || rec_klacht.fclt_f_leverancier || ' ) is met +- 5 minuten verstreken.';
v_errormsg := '';
-- Mailen naar het mailadres van degene die de klacht heetft ingevoerd (BALIE-medewerker/FrontOffice)
IF rec_klacht.invoerder_email IS NOT NULL
THEN
fac.putnotificationprio (NULL, NULL, v_errorhint, 2, rec_klacht.invoerder_email, NULL, 2);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
COMMIT;
END;
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
COMMIT;
END arai_export_klacht_5min_klaar;
/
----------------------------------------------------------------------------------------------------------------------------------------------------------
--- ** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP ** --
--- ** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP ** --
--- ** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP **** TEMP ** --
----------------------------------------------------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE arai_post_import_energie (p_import_key IN NUMBER)
IS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
CURSOR c1
IS
SELECT UPPER (ins_discipline_omschrijving) ins_discipline_upper,
UPPER (ins_srtgroep_omschrijving) ins_srtgroep_upper,
UPPER (ins_srtdeel_code) ins_srtdeel_code_upper,
UPPER (ins_srtdeel_omschrijving) ins_srtdeel_upper,
MAX (ins_discipline_omschrijving)
ins_discipline_omschrijving,
MAX (ins_srtgroep_omschrijving) ins_srtgroep_omschrijving,
MAX (ins_srtdeel_code) ins_srtdeel_code,
MAX (ins_srtdeel_omschrijving) ins_srtdeel_omschrijving,
MIN(res_deel_eenheid) res_deel_eenheid
FROM arai_imp_ins
GROUP BY UPPER (ins_discipline_omschrijving),
UPPER (ins_srtgroep_omschrijving),
UPPER (ins_srtdeel_code),
UPPER (ins_srtdeel_omschrijving);
v_discipline_key NUMBER (10);
v_srtgroep_key NUMBER (10);
v_ins_srtdeel_key NUMBER (10);
ccount NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
c_ins_kenmerk_key_opc_meting NUMBER (10) := 61;
c_ins_kenmerk_key_opc_setpoint NUMBER (10) := 62;
c_ins_kenmerk_key_opc_alarm NUMBER (10) := 63;
BEGIN
v_count_tot := 0;
v_count_update := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errormsg := 'Post-Energie: Fout bij bepalen discipline';
SELECT ins_discipline_key
INTO v_discipline_key
FROM ins_tab_discipline
WHERE ins_discipline_verwijder IS NULL
AND ins_discipline_module = 'INS'
AND UPPER (TRIM (ins_discipline_omschrijving)) =
rec.ins_discipline_upper;
v_errormsg := 'Post-Energie: Fout bij bepalen groepsoort';
SELECT ins_srtgroep_key
INTO v_srtgroep_key
FROM ins_srtgroep
WHERE ins_srtgroep_verwijder IS NULL
AND ins_srtgroep_module = 'INS'
AND ins_discipline_key = v_discipline_key
AND TRIM (ins_srtgroep_upper) = rec.ins_srtgroep_upper;
v_errormsg :=
'Post-Energie: Fout bij bepalen objectsoort ['
|| rec.ins_srtdeel_omschrijving
|| ']';
SELECT ins_srtdeel_key
INTO v_ins_srtdeel_key
FROM ins_srtdeel
WHERE ins_srtdeel_verwijder IS NULL
AND ins_srtdeel_module = 'INS'
AND ins_srtgroep_key = v_srtgroep_key
AND TRIM (ins_srtdeel_upper) = rec.ins_srtdeel_upper;
v_errormsg := 'Post-Energie: Fout bij insert srtkenmerk verbruik/meting - ' || rec.ins_srtdeel_upper;
-- Verbruik soortkenmerk bij dat soort object
INSERT INTO ins_srtkenmerk (ins_srtkenmerk_omschrijving, ins_srtkenmerk_dimensie, ins_srtkenmerk_kenmerktype, ins_srtkenmerk_lengte, ins_srtkenmerk_dec)
SELECT rec.ins_srtdeel_upper || '-verbruik', rec.res_deel_eenheid, 'N', 10, 2 FROM DUAL;
v_errormsg := 'Post-Energie: Fout bij insert kenmerk verbruik/meting - '|| rec.ins_srtdeel_upper;
-- Met bijbehorende kenmerk bij dat soort object
INSERT INTO ins_kenmerk (ins_srtkenmerk_key, ins_srtinstallatie_key, ins_kenmerk_niveau, ins_kenmerk_meetwaarde, ins_kenmerk_volgnummer, ins_kenmerk_locatiekolom)
SELECT ins_srtkenmerk_key, v_ins_srtdeel_key, 'S', 1, 901, c_ins_kenmerk_key_opc_meting
FROM ins_srtkenmerk
WHERE ins_srtkenmerk_omschrijving = rec.ins_srtdeel_upper || '-verbruik'
AND ins_srtkenmerk_kenmerktype = 'N'
AND ins_srtkenmerk_verwijder IS NULL;
v_errormsg := 'Post-Energie: Fout bij insert srtkenmerk setpoint - ' || rec.ins_srtdeel_upper;
-- Setpoint soortkenmerk bij dat soort object
INSERT INTO ins_srtkenmerk (ins_srtkenmerk_omschrijving, ins_srtkenmerk_dimensie, ins_srtkenmerk_kenmerktype, ins_srtkenmerk_lengte, ins_srtkenmerk_dec)
SELECT rec.ins_srtdeel_upper || '-setpoint', rec.res_deel_eenheid, 'N', 10, 2 FROM DUAL;
v_errormsg := 'Post-Energie: Fout bij insert kenmerk setpoint - '|| rec.ins_srtdeel_upper;
-- Met bijbehorende kenmerk bij dat soort object
INSERT INTO ins_kenmerk (ins_srtkenmerk_key, ins_srtinstallatie_key, ins_kenmerk_niveau, ins_kenmerk_meetwaarde, ins_kenmerk_volgnummer, ins_kenmerk_locatiekolom)
SELECT ins_srtkenmerk_key, v_ins_srtdeel_key, 'S', 1, 902, c_ins_kenmerk_key_opc_setpoint
FROM ins_srtkenmerk
WHERE ins_srtkenmerk_omschrijving = rec.ins_srtdeel_upper || '-setpoint'
AND ins_srtkenmerk_kenmerktype = 'N'
AND ins_srtkenmerk_verwijder IS NULL;
v_errormsg := 'Post-Energie: Fout bij insert srtkenmerk alarm - ' || rec.ins_srtdeel_upper;
-- Alarm soortkenmerk bij dat soort object
INSERT INTO ins_srtkenmerk (ins_srtkenmerk_omschrijving, ins_srtkenmerk_dimensie, ins_srtkenmerk_kenmerktype, ins_srtkenmerk_lengte, ins_srtkenmerk_dec)
SELECT rec.ins_srtdeel_upper || '-alarm', rec.res_deel_eenheid, 'N', 2, 1 FROM DUAL;
v_errormsg := 'Post-Energie: Fout bij insert kenmerk alarm - '|| rec.ins_srtdeel_upper;
-- Met bijbehorende kenmerk bij dat soort object
INSERT INTO ins_kenmerk (ins_srtkenmerk_key, ins_srtinstallatie_key, ins_kenmerk_niveau, ins_kenmerk_meetwaarde, ins_kenmerk_volgnummer, ins_kenmerk_locatiekolom)
SELECT ins_srtkenmerk_key, v_ins_srtdeel_key, 'S', 1, 903, c_ins_kenmerk_key_opc_alarm
FROM ins_srtkenmerk
WHERE ins_srtkenmerk_omschrijving = rec.ins_srtdeel_upper || '-alarm'
AND ins_srtkenmerk_kenmerktype = 'N'
AND ins_srtkenmerk_verwijder IS NULL;
v_count_update := v_count_update + 1;
COMMIT;
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.imp_writelog (p_import_key,
'W',
v_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
'Kenmerksoorten/aantal toegevoegd: ' || TO_CHAR (v_count_update),
''
);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
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',
v_aanduiding || v_errormsg,
v_errorhint
);
COMMIT;
END arai_post_import_energie;
/
CREATE OR REPLACE FORCE VIEW arai_v_bedrijveninfo
(
prs_bedrijf_key,
prs_bedrijf_naam,
prs_bedrijf_telefoon,
prs_bedrijf_info,
prs_bedrijf_verwijder
)
AS
SELECT prs_bedrijf_key,
prs_bedrijf_naam,
prs_bedrijf_telefoon,
prs_bedrijf_naam || ' (telnr: ' || prs_bedrijf_telefoon || ')',
prs_bedrijf_verwijder
FROM prs_bedrijf
WHERE COALESCE(prs_bedrijf_intern,0) = 0;
CREATE OR REPLACE PROCEDURE arai_processemail
(pfrom IN VARCHAR2,
pto IN VARCHAR2,
psubject IN VARCHAR2,
pbody IN VARCHAR2,
psessionid IN VARCHAR2,
puserkey IN NUMBER DEFAULT NULL
)
AS
-- puserkey is alvast een nieuwe parameter die per release 2015.2 er gaat komen (FSN#33503), als gevuld, dan deze als aanvrager van melding gebruiken.
sender prs_perslid.prs_perslid_key%TYPE;
kostenplaats prs_afdeling.prs_kostenplaats_key%TYPE;
v_mldkey mld_melding.mld_melding_key%TYPE;
defaultstdmelding fac_setting.fac_setting_default%TYPE;
kkey mld_kenmerk.mld_kenmerk_key%TYPE;
errormsg fac_result.fac_result_waarde%TYPE;
v_mailadres_kenmerk_key mld_kenmerk.mld_kenmerk_key%TYPE;
v_flexprop_mail VARCHAR2(1000);
v_from VARCHAR2 (1000);
subject_regexp fac_setting.fac_setting_default%TYPE;
v_behandelaar_key mld_melding.mld_melding_behandelaar_key%TYPE;
v_mldnum VARCHAR2 (4000);
v_srtdisc VARCHAR2 (4000);
v_flag_on_fenote NUMBER (10);
v_flag_on_bonote NUMBER (10);
BEGIN
-- We beschouwen dit als een nieuwe melding die afkomstig zijn van (voor Facilitor) onbekende gebruikers (die dus geen account hebben, althans geen prs_perslid zijn).
-- Deze externe/onbekende gebruikers zijn bezoekers of omwonenden, die een klacht kunnen mailen, die wordt omgezet in een Facilitor melding.
-- De melding zetten we op de system-api user voor hotelremarks, waarvan de api-key bekend is.
-- Vanaf release 2015.2 (FSN#33503) wordt deze api-user netjes als parameter puserkey meegegeven.
IF puserkey IS NOT NULL
THEN
-- Vanaf release 2015.2
SELECT prs_perslid_key, d.prs_kostenplaats_key
INTO sender, kostenplaats
FROM prs_perslid p, prs_afdeling d
WHERE p.prs_afdeling_key = d.prs_afdeling_key
AND prs_perslid_key = puserkey;
ELSE
-- Tot release 2015.2
SELECT prs_perslid_key, d.prs_kostenplaats_key
INTO sender, kostenplaats
FROM prs_perslid p, prs_afdeling d
WHERE p.prs_afdeling_key = d.prs_afdeling_key
AND prs_perslid_apikey = 'IwIyYfSxveyBfiVicoHDgDpLSzuBboXs';
END IF;
CASE pto
WHEN 'hotelremarks@arai.facilitor.nl'
THEN
-- Standaardmelding 1561 heeft omschrijving 'Overig', is van vakgroep 'RAI Hotel Travel Service', die van vakgroeptype 'Exposanten' is
defaultstdmelding := 1561;
-- kenmerk-key 46, deze is van kenmerksoort 'E-mail (C)' (key 26) op vakgroeptype niveau van vakgroeptype-key 'Exposanten' (waarop stdmelding 1561 is gebaseerd).
v_mailadres_kenmerk_key := 46;
--ELSE
-- Standaard /default waarden, nu nog n.v.t., er is 1 concrete mailadres en we hebben (nog) geen vangnet voor de rest...
--defaultstdmelding := fac.getsetting ('defaultstdmelding');
END CASE;
-------------------------------------------------
-- Check of de afzender pfrom een reply op een bestaande melding doet, in dat geval wordt dat in notities genoteerd.
-- Wat is een bestaande melding:
-- 1) Eerst uit het onderwerp het meldingnummer proberen te onderscheppen, uitgangspunt dat in het onderwerp het meldingnummer '1234' kan worden opgevist, met ervoor en erna een spatie
-- 2) Het 1e nummer dat in het onderwerp staat wordt gezien als meldingnummer, eventuele andere nummers later in het onderwerp worden genegeerd.
-- 3) Het mailadres van de afzender is dezelfde als die van dat gevonden meldingnummer '1234' in het onderwerp, deze afzender (mailadres) staat in flexprop (zie verderop hieronder)
-- ARAI heeft geen vakgroeptype-prefix, dus [alpha] is nu niet van toepassing
-- subject_regexp := '[[:alpha:]]*[[:digit:]]{1,}';
-- Dus alleen het digits-gedeelte...
subject_regexp := '[[:digit:]]{1,}';
v_mldnum :=
REGEXP_SUBSTR (psubject,
subject_regexp,
1,
1,
'i'); -- 1234, of 12345, of 12, of 1 etc.
-- ARAI heeft geen vakgroeptype-prefix, dus v_srtdisc is nu niet van toepassing
--v_srtdisc :=
-- REGEXP_SUBSTR (v_mldnum,
-- '[[:alpha:]]',
-- 1,
-- 1,
-- 'i'); -- M
--v_mldkey := fac.safe_to_number (SUBSTR (v_mldnum, LENGTH (v_srtdisc) + 1)); -- 123, of 12345, of 12, of 1
v_mldkey := fac.safe_to_number (v_mldnum);
-- Uit onderwerp is de vermoedelijke juiste v_mldkey geparsed.
-- Final check: is de afzender van de mail dezelfde als die van v_mldkey, deze afzender (mailadres) staat in flexprop (zie verderop hieronder in gedeelte bij insert melding).
SELECT MAX(SUBSTR(TRIM(km.mld_kenmerkmelding_waarde),1,50))
INTO v_flexprop_mail
FROM mld_kenmerkmelding km
WHERE mld_melding_key = v_mldkey
AND mld_kenmerk_key = v_mailadres_kenmerk_key
AND mld_kenmerkmelding_verwijder IS NULL;
v_from := SUBSTR(TRIM(pfrom),1,50);
IF v_flexprop_mail = v_from
THEN
-- Gotcha: bestaande melding gevonden
-- Van deze afzender is een eerdere melding geregistreerd, die we plakken de subject en body nu als notitie toe (als perslid system-api user).
INSERT INTO mld_melding_note (mld_melding_key,
mld_melding_note_omschrijving,
prs_perslid_key,
mld_melding_note_flag)
VALUES (v_mldkey,
SUBSTR (
psubject || CHR (13) || CHR (10)
|| REPLACE (
SUBSTR (pbody,
1,
4000 - (LENGTH (psubject) + 2)),
CHR (13) || CHR (10) || CHR (13) || CHR (10),
CHR (13) || CHR (10)),
1,
4000), -- verwijder onnodige witregels
sender,
0); -- 0 is NIET zichtbaar FE (want is system-user, zinloos).
-- Vlaggetjes zetten zoals mld_edit_note.asp dat doet
IF 1=0 -- ARAI heeft geen melding valggetjes, dus onderstaande kan voor nu weg.
THEN
BEGIN
v_flag_on_fenote := fac.getsetting('mld_flag_on_fenote');
v_flag_on_bonote := fac.getsetting('mld_flag_on_bonote');
IF v_flag_on_bonote <> 0 AND v_flag_on_bonote IS NOT NULL
THEN
UPDATE mld_melding
SET mld_melding_flag = v_flag_on_bonote
WHERE mld_melding_key = v_mldkey
AND ( (mld_melding_flag = v_flag_on_fenote)
OR (mld_melding_flag = 0 OR mld_melding_flag IS NULL));
END IF;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line( 'Niet gelukt om flag '
|| v_flag_on_bonote
|| ' te zetten.');
END;
END IF; -- ARAI heef geen vlaggetjes
-- Default tracking is even goed genoeg
fac.trackaction ('MLDNOT',
v_mldkey,
sender,
NULL,
'#Notitie toegevoegd vanuit e-mail'); -- # voorkomt notificatie
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid, 'maillog', 'Als notitie toegevoegd aan melding ' || v_mldkey);
-- Bepalen van de behandelaar van deze melding
BEGIN
SELECT mld_melding_behandelaar_key
INTO v_behandelaar_key
FROM mld_melding m, prs_perslid p
WHERE mld_melding_key = v_mldkey
AND mld_melding_behandelaar_key = p.prs_perslid_key
AND p.prs_perslid_email IS NOT NULL
AND p.prs_perslid_verwijder IS NULL;
EXCEPTION
WHEN OTHERS
THEN
v_behandelaar_key := NULL;
END;
IF v_behandelaar_key IS NOT NULL
THEN
-- Bestaande melding en behandelaar is bekend.
-- Notificatie naar behandelaar
fac.putnotificationsrtprio (
NULL,
v_behandelaar_key,
'MLDNOB',
v_mldkey,
'Melding ' || v_mldkey || ' is door de klant aangepast.',
2,
NULL,
NULL,
NULL,
2,
NULL);
END IF; -- Bestaande melding en behandelaar is bekend.
ELSE
-- GEEN bestaande melding gevonden, we gaan een nieuwe mnelding toevoegen....
IF defaultstdmelding IS NOT NULL
THEN
-- suggested extensions:
-- check for MLDUSE-write autorisations
-- parse the subject to find an appropriate stdmelding, if uniquely possible
-- append (as a note?) to an existing melding if #key is found in the subject
BEGIN
INSERT INTO mld_melding (mld_melding_module,
mld_meldbron_key,
mld_melding_datum,
mld_alg_locatie_key,
mld_melding_omschrijving,
mld_melding_status,
mld_stdmelding_key,
prs_perslid_key,
prs_perslid_key_voor,
prs_kostenplaats_key,
mld_melding_spoed)
VALUES ('MLD',
4, -- email
SYSDATE,
1, -- zie ook HSLE#33348: RAI hier kiezen (alg_locatie_key = 1)
SUBSTR (
psubject || CHR (13) || CHR(10)
|| REPLACE (
SUBSTR (pbody,
1,
4000 - (LENGTH (psubject) + 2)),
CHR (13) || CHR (10) || CHR (13) || CHR (10),
CHR (13) || CHR (10)),
1,
4000), -- verwijder onnodige witregels
NULL,
defaultstdmelding,
sender,
sender,
kostenplaats,
3)
RETURNING mld_melding_key
INTO v_mldkey;
-- Vullen van kenmerkwaarde "e-mail adres"
IF pfrom IS NOT NULL AND v_mailadres_kenmerk_key IS NOT NULL
THEN
-- Kenmerk mailadres heeft max. 50 tekens, afkappen dus...
-- zet v_from met maximaal 50 tekens als kenmerk bij de zojuist aangemaakte melding.
INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde)
VALUES (v_mldkey, v_mailadres_kenmerk_key, v_from);
END IF;
mld.setmeldingstatus (v_mldkey, 2, sender);
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || v_mldkey);
END;
END IF; -- defaultstdmelding IS NOT NULL
END IF; -- v_flexprop_mail = v_from
-- Bijlagen gaan we proberen toe te voegen, zowel bij een nieuwe als een bestaande melding....
-- Dat doen we bij een flexprop van het type 'M' (=folder met bestanden), door het laagste volgnummer te vinden
-- find the lowest volgnummer of the flexfield of type folder.
SELECT MIN (mld_kenmerk_key)
INTO kkey
FROM mld_kenmerk k,
mld_srtkenmerk sk,
mld_stdmelding std,
ins_tab_discipline d
WHERE mld_srtkenmerk_kenmerktype = 'M'
AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
AND std.mld_stdmelding_key = defaultstdmelding
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND ( (k.mld_stdmelding_key = std.mld_stdmelding_key
AND k.mld_kenmerk_niveau = 'S')
OR (k.mld_stdmelding_key = d.ins_discipline_key
AND k.mld_kenmerk_niveau = 'D')
OR (k.mld_stdmelding_key = d.ins_srtdiscipline_key
AND k.mld_kenmerk_niveau = 'T'))
AND k.mld_kenmerk_verwijder IS NULL
AND NOT EXISTS
(SELECT mld_kenmerk_volgnummer
FROM mld_kenmerk k1,
mld_srtkenmerk sk1,
mld_stdmelding std1,
ins_tab_discipline d1
WHERE sk1.mld_srtkenmerk_kenmerktype = 'M'
AND sk1.mld_srtkenmerk_key =
k1.mld_srtkenmerk_key
AND std1.mld_stdmelding_key =
defaultstdmelding
AND std1.mld_ins_discipline_key =
d1.ins_discipline_key
AND ( (k1.mld_stdmelding_key =
std1.mld_stdmelding_key
AND k1.mld_kenmerk_niveau = 'S')
OR (k1.mld_stdmelding_key =
d1.ins_discipline_key
AND k1.mld_kenmerk_niveau = 'D')
OR (k1.mld_stdmelding_key =
d1.ins_srtdiscipline_key
AND k1.mld_kenmerk_niveau = 'T'))
AND k1.mld_kenmerk_verwijder IS NULL
AND k1.mld_kenmerk_volgnummer <
k.mld_kenmerk_volgnummer);
IF kkey IS NOT NULL
THEN
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid,
'kenmerkpath',
'MLD\M' || to_char( TRUNC(v_mldkey/1000), 'FM0000') || '___\M' || v_mldkey || '\' || kkey || '\');
END IF;
IF errormsg IS NOT NULL
THEN
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid, 'errormsg', errormsg);
END IF;
EXCEPTION
WHEN OTHERS
THEN
fac.writelog (
'PROCESSEMAIL',
'W',
'Mail kon niet verwerkt worden afzender: '
|| pfrom
|| '['
|| errormsg
|| ']',
'OTHERS (error '
|| SQLCODE
|| '/'
|| SUBSTR (SQLERRM, 1, 100)
|| ')');
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid,
'errormsg',
'Database fout - Neem contact op met uw systeembeheerder');
END;
/
---------------------------------------------------------------------- KPI DEFINITIES ---------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE ARAI_IMPORT_KPI_DEFINITIE (p_import_key IN NUMBER)
IS
c_delim VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR2 (200);
-- De importvelden
v_kpi_definitie_code VARCHAR2(255); --15 BYTE),
v_kpi_definitie_omschrijving VARCHAR2(255); --60 BYTE),
v_kpi_definitie_info VARCHAR2(4000); -- 4000 BYTE),
v_kpi_definitie_categorie1 VARCHAR2(255); -- 50 BYTE),
v_kpi_definitie_categorie2 VARCHAR2(255); -- 50 BYTE),
v_kpi_definitie_categorie3 VARCHAR2(255); -- 50 BYTE),
v_kpi_definitie_drempels_0 VARCHAR2(255); -- 20 BYTE),
v_kpi_definitie_drempels_70 VARCHAR2(255); -- 20 BYTE),
v_kpi_definitie_drempels_90 VARCHAR2(255); -- 20 BYTE),
v_kpi_definitie_drempels_100 VARCHAR2(255); -- 20 BYTE)
v_kpi_definitie_drempels_tot VARCHAR2(255); -- 20 BYTE),
-- Overige velden:
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Eerst opruiming
DELETE FROM ARAI_IMP_KPI_DEFINITIE;
v_count_tot := 0;
v_count_import := 0;
header_is_valid := 0;
COMMIT;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout opvragen te importeren rij';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_categorie1);
fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_categorie2);
fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_code);
fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_info);
fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_drempels_0);
fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_drempels_70);
fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_drempels_90);
fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_drempels_100);
v_aanduiding :=
'|'
|| v_kpi_definitie_categorie1
|| '|'
|| v_kpi_definitie_categorie2
|| '|'
|| v_kpi_definitie_code
|| '| ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (v_kpi_definitie_categorie1) = 'KPI CATEGORIE 1'
AND UPPER (v_kpi_definitie_categorie2) = 'KPI CATEGORIE 2'
AND UPPER (v_kpi_definitie_code) = 'KPI CODE'
AND UPPER (v_kpi_definitie_omschrijving) = 'KPI OMSCHRIJVING'
AND UPPER (v_kpi_definitie_info) = 'KPI INFORMATIE'
AND UPPER (v_kpi_definitie_drempels_0) = 'KPI DREMPEL 0'
AND UPPER (v_kpi_definitie_drempels_70) = 'KPI DREMPEL 70'
AND UPPER (v_kpi_definitie_drempels_90) = 'KPI DREMPEL 90'
AND UPPER (v_kpi_definitie_drempels_100) = 'KPI DREMPEL 100'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
IF v_kpi_definitie_categorie1 IS NOT NULL
THEN
v_kpi_definitie_categorie1 := TRIM (v_kpi_definitie_categorie1);
IF LENGTH (v_kpi_definitie_categorie1) > 50
THEN
v_kpi_definitie_categorie1 :=
SUBSTR (TRIM (v_kpi_definitie_categorie1), 1, 50);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding,
'Categorie 1 wordt afgebroken tot ['
|| v_kpi_definitie_categorie1
|| ']');
END IF;
ELSE
v_ongeldig := 1;
fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Categorie 1 mag NIET leeg zijn: deze regel wordt overgeslagen');
END IF;
IF v_kpi_definitie_categorie2 IS NOT NULL
THEN
v_kpi_definitie_categorie2 := TRIM (v_kpi_definitie_categorie2);
IF LENGTH (v_kpi_definitie_categorie2) > 50
THEN
v_kpi_definitie_categorie2 :=
SUBSTR (TRIM (v_kpi_definitie_categorie2), 1, 50);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding,
'Categorie 2 wordt afgebroken tot ['
|| v_kpi_definitie_categorie2
|| ']');
END IF;
ELSE
v_ongeldig := 1;
fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Categorie 2 mag NIET leeg zijn: deze regel wordt overgeslagen');
END IF;
IF v_kpi_definitie_code IS NOT NULL
THEN
v_kpi_definitie_code := TRIM (v_kpi_definitie_code);
IF LENGTH (v_kpi_definitie_code) > 15
THEN
v_kpi_definitie_code :=
SUBSTR (TRIM (v_kpi_definitie_code), 1, 15);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding,
'Code wordt afgebroken tot ['
|| v_kpi_definitie_code
|| ']');
END IF;
ELSE
v_ongeldig := 1;
fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Code mag NIET leeg zijn: deze regel wordt overgeslagen');
END IF;
IF v_kpi_definitie_omschrijving IS NOT NULL
THEN
v_kpi_definitie_omschrijving := TRIM (v_kpi_definitie_omschrijving);
IF LENGTH (v_kpi_definitie_omschrijving) > 60
THEN
v_kpi_definitie_omschrijving :=
SUBSTR (TRIM (v_kpi_definitie_omschrijving), 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding,
'Omschrijving wordt afgebroken tot ['
|| v_kpi_definitie_omschrijving
|| ']');
END IF;
ELSE
v_ongeldig := 1;
fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Omschrijving mag NIET leeg zijn: deze regel wordt overgeslagen');
END IF;
v_kpi_definitie_info := TRIM (v_kpi_definitie_info);
IF LENGTH (v_kpi_definitie_info) > 4000
THEN
v_kpi_definitie_info :=
SUBSTR (TRIM (v_kpi_definitie_info), 1, 4000);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding,
'Informatie wordt afgebroken tot ['
|| v_kpi_definitie_info
|| ']');
END IF;
IF v_kpi_definitie_drempels_0 IS NOT NULL AND v_kpi_definitie_drempels_70 IS NOT NULL AND v_kpi_definitie_drempels_90 IS NOT NULL AND v_kpi_definitie_drempels_100 IS NOT NULL
THEN
v_kpi_definitie_drempels_tot := TRIM (v_kpi_definitie_drempels_0 || '|' || v_kpi_definitie_drempels_70 || '|' || v_kpi_definitie_drempels_90 || '|' || v_kpi_definitie_drempels_100);
IF LENGTH (v_kpi_definitie_drempels_tot) > 20
THEN
v_kpi_definitie_drempels_tot :=
SUBSTR (TRIM (v_kpi_definitie_drempels_tot), 1, 20);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding,
'Dermpels wordt afgebroken tot ['
|| v_kpi_definitie_drempels_tot
|| ']');
END IF;
ELSE
v_ongeldig := 1;
fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Alle drempeles MOETEN gevuld zijn: deze regel wordt overgeslagen');
END IF;
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
INSERT INTO ARAI_IMP_KPI_DEFINITIE (
KPI_DEFINITIE_CODE,
KPI_DEFINITIE_OMSCHRIJVING,
KPI_DEFINITIE_INFO,
KPI_DEFINITIE_CATEGORIE1,
KPI_DEFINITIE_CATEGORIE2,
KPI_DEFINITIE_DREMPELS)
VALUES (v_kpi_definitie_code,
v_kpi_definitie_omschrijving,
v_kpi_definitie_info,
v_kpi_definitie_categorie1,
v_kpi_definitie_categorie2,
v_kpi_definitie_drempels_tot);
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || v_errormsg,
'Fout bij toevoegen regel aan importtabel ARAI_IMP_KPI_DEFINITIE.');
END;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
'Ongeldig importbestand',
'Geen header of header niet volgens specificatie!');
ELSE
fac.imp_writelog (
p_import_key,
'S',
'KPI Definitie: aantal ingelezen importregels: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (
p_import_key,
'S',
'KPI Definitie: aantal ongeldige niet ingelezen importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
'');
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
'Inleesproces KPI Definitie afgebroken!');
END ARAI_IMPORT_KPI_DEFINITIE;
/
CREATE OR REPLACE PROCEDURE ARAI_UPDATE_KPI_DEFINITIE (p_import_key IN NUMBER)
AS
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count_error NUMBER (10);
v_count NUMBER (10);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
CURSOR c_kpi_defs
IS
SELECT * FROM ARAI_IMP_KPI_DEFINITIE;
-- MAIN
BEGIN
FOR rec_ins IN c_kpi_defs
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding :=
rec_ins.kpi_definitie_code
|| ' - '
|| rec_ins.kpi_definitie_categorie1
|| '-'
|| rec_ins.kpi_definitie_categorie2;
v_errorhint := 'Fout bij insert van kpi definitie';
IF rec_ins.kpi_definitie_code IS NOT NULL
AND rec_ins.kpi_definitie_categorie1 IS NOT NULL
AND rec_ins.kpi_definitie_categorie2 IS NOT NULL
AND rec_ins.kpi_definitie_omschrijving IS NOT NULL
AND rec_ins.kpi_definitie_drempels IS NOT NULL
THEN
INSERT INTO kpi_definitie ( KPI_DEFINITIE_CODE,
KPI_DEFINITIE_OMSCHRIJVING,
KPI_DEFINITIE_INFO,
KPI_DEFINITIE_CATEGORIE1,
KPI_DEFINITIE_CATEGORIE2,
KPI_DEFINITIE_DREMPELS)
VALUES (rec_ins.kpi_definitie_code,
rec_ins.kpi_definitie_omschrijving,
rec_ins.kpi_definitie_info,
rec_ins.kpi_definitie_categorie1,
rec_ins.kpi_definitie_categorie2,
rec_ins.kpi_definitie_drempels
);
ELSE
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding,
'Code, Omschrijving, Categorie1 en 2 en drempels mogen niet leeg zijn');
END IF;
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint);
COMMIT;
END;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 150);
v_errormsg :=
v_errormsg || 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
'Importproces KPI Definitie afgebroken!',
v_errormsg);
END ARAI_UPDATE_KPI_DEFINITIE;
/
----- Views voor berekenen KPI's -----------------------------------------------
-- Views voor berekening (genormeerde) KPI-scores o.b.v. handmatig/automatisch ingevulde KPI-meldingen.
-- KAVEL 1
-- #1-Evenementgebonden Schoonmaak door RAI
-- Deze komen uit de melding met std_melding_key 2943
CREATE OR REPLACE VIEW arai_v_kpi_es_rai
AS
WITH normen AS
(SELECT kpi_definitie_key,
kpi_definitie_code kpi_code,
kpi_definitie_categorie1 kpi_cat1,
kpi_definitie_categorie2 kpi_cat2,
kpi_definitie_drempels normscores,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100
FROM kpi_definitie
WHERE kpi_definitie_code = 'ES'),
scores_rai AS
(SELECT m.mld_melding_key,
dloc.alg_locatie_key alg_locatie_key,
TRUNC(m.mld_melding_einddatum, 'MM') periode,
COALESCE(fac.safe_to_number(ES_01.mld_kenmerkmelding_waarde),0) ES_01_score,
COALESCE(fac.safe_to_number(ES_02.mld_kenmerkmelding_waarde),0) ES_02_score,
COALESCE(fac.safe_to_number(ES_05.mld_kenmerkmelding_waarde),0) ES_05_score,
COALESCE(fac.safe_to_number(ES_06.mld_kenmerkmelding_waarde),0) ES_06_score,
COALESCE(fac.safe_to_number(ES_07.mld_kenmerkmelding_waarde),0) ES_07_score,
COALESCE(fac.safe_to_number(ES_08.mld_kenmerkmelding_waarde),0) ES_08_score,
COALESCE(fac.safe_to_number(ES_03.mld_kenmerkmelding_waarde),0) ES_03_score,
COALESCE(fac.safe_to_number(ES_04.mld_kenmerkmelding_waarde),0) ES_04_score
FROM mld_melding m,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1509) ES_01,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1506) ES_02,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1510) ES_05,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1507) ES_06,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1511) ES_07,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1508) ES_08,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1517) ES_03,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1536) ES_04,
alg_locatie dloc
WHERE m.mld_stdmelding_key = 2943
AND m.mld_melding_status NOT IN (1)
AND dloc.alg_locatie_key = m.mld_alg_locatie_key
AND ES_01.mld_melding_key(+) = m.mld_melding_key
AND ES_02.mld_melding_key(+) = m.mld_melding_key
AND ES_05.mld_melding_key(+) = m.mld_melding_key
AND ES_06.mld_melding_key(+) = m.mld_melding_key
AND ES_07.mld_melding_key(+) = m.mld_melding_key
AND ES_08.mld_melding_key(+) = m.mld_melding_key
AND ES_03.mld_melding_key(+) = m.mld_melding_key
AND ES_04.mld_melding_key(+) = m.mld_melding_key
)
SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key,
'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey,
n000, n070, n090, n100,
kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score,
normscores kpi_score_norm_score,
SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels
FROM (
SELECT n.kpi_definitie_key, n.normscores,
k.mld_melding_key,
k.alg_locatie_key,
k.periode,
n.kpi_cat1 proces,
n.kpi_cat2 onderdeel,
DECODE(n.kpi_code,
'ES', ((DECODE(ES_01_score, 0, 2, 1, 2, ES_01_score) - 2) * 2) +
((DECODE(ES_02_score, 0, 2, 1, 2, ES_02_score) - 2) * 2) +
((DECODE(ES_05_score, 0, 2, 1, 2, ES_05_score) - 2) * 2) +
((DECODE(ES_06_score, 0, 2, 1, 2, ES_06_score) - 2) * 2) +
((DECODE(ES_07_score, 0, 2, 1, 2, ES_07_score) - 2) * 2) +
((DECODE(ES_08_score, 0, 2, 1, 2, ES_08_score) - 2) * 2) +
(ABS(ES_03_score - 1) * 10) +
(ABS(ES_04_score - 1) * 10)
) score,
n.n000, n.n070, n.n090, n.n100
FROM normen n, scores_rai k) m;
-- KAVEL 1
-- #1-Evenementgebonden Schoonmaak door CSU
-- Deze komen uit de melding met std_melding_key 2944
CREATE OR REPLACE VIEW arai_v_kpi_es_csu
AS
WITH normen AS
(SELECT kpi_definitie_key,
kpi_definitie_code kpi_code,
kpi_definitie_categorie1 kpi_cat1,
kpi_definitie_categorie2 kpi_cat2,
kpi_definitie_drempels normscores,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100
FROM kpi_definitie
WHERE kpi_definitie_code = 'ES'),
scores_csu AS
(SELECT m.mld_melding_key,
dloc.alg_locatie_key alg_locatie_key,
TRUNC(m.mld_melding_einddatum, 'MM') periode,
COALESCE(fac.safe_to_number(ES_07.mld_kenmerkmelding_waarde),0) ES_07_score,
COALESCE(fac.safe_to_number(ES_08.mld_kenmerkmelding_waarde),0) ES_08_score,
COALESCE(fac.safe_to_number(ES_09.mld_kenmerkmelding_waarde),0) ES_09_score,
COALESCE(fac.safe_to_number(ES_10.mld_kenmerkmelding_waarde),0) ES_10_score,
COALESCE(fac.safe_to_number(ES_11.mld_kenmerkmelding_waarde),0) ES_11_score,
COALESCE(fac.safe_to_number(ES_12.mld_kenmerkmelding_waarde),0) ES_12_score,
COALESCE(fac.safe_to_number(ES_13.mld_kenmerkmelding_waarde),0) ES_13_score,
COALESCE(fac.safe_to_number(ES_14.mld_kenmerkmelding_waarde),0) ES_14_score,
COALESCE(fac.safe_to_number(ES_15.mld_kenmerkmelding_waarde),0) ES_15_score,
COALESCE(fac.safe_to_number(ES_16.mld_kenmerkmelding_waarde),0) ES_16_score,
COALESCE(fac.safe_to_number(ES_18.mld_kenmerkmelding_waarde),0) ES_18_score,
COALESCE(fac.safe_to_number(ES_20.mld_kenmerkmelding_waarde),0) ES_20_score
FROM mld_melding m,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1514) ES_07,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1527) ES_08,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1513) ES_09,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1529) ES_10,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1528) ES_11,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1515) ES_12,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1530) ES_13,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1525) ES_14,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1526) ES_15,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1535) ES_16,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1534) ES_18,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1533) ES_20,
alg_locatie dloc
WHERE m.mld_stdmelding_key = 2944
AND m.mld_melding_status NOT IN (1)
AND dloc.alg_locatie_key = m.mld_alg_locatie_key
AND ES_07.mld_melding_key(+) = m.mld_melding_key
AND ES_08.mld_melding_key(+) = m.mld_melding_key
AND ES_09.mld_melding_key(+) = m.mld_melding_key
AND ES_10.mld_melding_key(+) = m.mld_melding_key
AND ES_11.mld_melding_key(+) = m.mld_melding_key
AND ES_12.mld_melding_key(+) = m.mld_melding_key
AND ES_13.mld_melding_key(+) = m.mld_melding_key
AND ES_14.mld_melding_key(+) = m.mld_melding_key
AND ES_15.mld_melding_key(+) = m.mld_melding_key
AND ES_16.mld_melding_key(+) = m.mld_melding_key
AND ES_18.mld_melding_key(+) = m.mld_melding_key
AND ES_20.mld_melding_key(+) = m.mld_melding_key
)
SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key,
'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey,
n000, n070, n090, n100,
kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score,
normscores kpi_score_norm_score,
SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels
FROM (
SELECT n.kpi_definitie_key, n.normscores,
k.mld_melding_key,
k.alg_locatie_key,
k.periode,
n.kpi_cat1 proces,
n.kpi_cat2 onderdeel,
DECODE(n.kpi_code,
'ES', (ABS(ES_07_score - 1) * 10) +
(ABS(ES_08_score - 1) * 10) +
(ABS(ES_09_score - 1) * 10) +
(ABS(ES_10_score - 1) * 10) +
(ABS(ES_11_score - 1) * 10) +
(ABS(ES_12_score - 1) * 10) +
(ABS(ES_13_score - 1) * 10) +
(ABS(ES_14_score - 1) * 10) +
(ABS(ES_15_score - 1) * 10) +
CASE
WHEN ES_16_score < 1 THEN 20
WHEN ES_16_score < 2 THEN 17.5
WHEN ES_16_score < 3 THEN 15
WHEN ES_16_score < 4 THEN 12.5
WHEN ES_16_score < 5 THEN 10
WHEN ES_16_score < 6 THEN 7.5
WHEN ES_16_score < 7 THEN 5
ELSE 0
END +
(ABS(ES_18_score - 1) * 10) +
(ABS(ES_20_score - 1) * 10)
) score,
n.n000, n.n070, n.n090, n.n100
FROM normen n, scores_csu k) m;
-- Agv ARAI#37911: kenmerken verhuizen naar csu-view naar de rai-view van kavel 1 (ES), die zijn uit bovenstaande verwijderd en hieronder neergezet
-- Verschil zit 'm in meld_stdmelding_key:
-- De verhuisde kenmerk-keys van 2944 naar mld_stdmelding_key 2943 zijn:
-- 1531 (ES_21)
-- 1505 (ES_17)
-- 1532 (ES_19)
-- 1523 (ES_28)
-- 1516 (ES_29)
-- 1512 (ES_06)
-- 1524 (ES_05)
CREATE OR REPLACE VIEW arai_v_kpi_es_csu_2_rai
AS
WITH normen AS
(SELECT kpi_definitie_key,
kpi_definitie_code kpi_code,
kpi_definitie_categorie1 kpi_cat1,
kpi_definitie_categorie2 kpi_cat2,
kpi_definitie_drempels normscores,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100
FROM kpi_definitie
WHERE kpi_definitie_code = 'ES'),
scores_csu AS
(SELECT m.mld_melding_key,
dloc.alg_locatie_key alg_locatie_key,
TRUNC(m.mld_melding_einddatum, 'MM') periode,
COALESCE(fac.safe_to_number(ES_05.mld_kenmerkmelding_waarde),0) ES_05_score,
COALESCE(fac.safe_to_number(ES_06.mld_kenmerkmelding_waarde),0) ES_06_score,
COALESCE(fac.safe_to_number(ES_21.mld_kenmerkmelding_waarde),0) ES_21_score,
COALESCE(fac.safe_to_number(ES_17.mld_kenmerkmelding_waarde),0) ES_17_score,
COALESCE(fac.safe_to_number(ES_19.mld_kenmerkmelding_waarde),0) ES_19_score,
COALESCE(fac.safe_to_number(ES_28.mld_kenmerkmelding_waarde),0) ES_28_score,
COALESCE(fac.safe_to_number(ES_29.mld_kenmerkmelding_waarde),0) ES_29_score
FROM mld_melding m,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1524) ES_05,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1512) ES_06,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1531) ES_21,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1505) ES_17,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1532) ES_19,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1523) ES_28,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1516) ES_29,
alg_locatie dloc
WHERE m.mld_stdmelding_key = 2943
AND m.mld_melding_status NOT IN (1)
AND dloc.alg_locatie_key = m.mld_alg_locatie_key
AND ES_05.mld_melding_key(+) = m.mld_melding_key
AND ES_06.mld_melding_key(+) = m.mld_melding_key
AND ES_21.mld_melding_key(+) = m.mld_melding_key
AND ES_17.mld_melding_key(+) = m.mld_melding_key
AND ES_19.mld_melding_key(+) = m.mld_melding_key
AND ES_28.mld_melding_key(+) = m.mld_melding_key
AND ES_29.mld_melding_key(+) = m.mld_melding_key
)
SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key,
'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey,
n000, n070, n090, n100,
kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score,
normscores kpi_score_norm_score,
SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels
FROM (
SELECT n.kpi_definitie_key, n.normscores,
k.mld_melding_key,
k.alg_locatie_key,
k.periode,
n.kpi_cat1 proces,
n.kpi_cat2 onderdeel,
DECODE(n.kpi_code,
'ES', (ES_05_score * 10) +
(ES_06_score * 5) +
(ABS(ES_21_score - 1) * 10) +
(ES_17_score * 2) +
(ABS(ES_19_score - 1) * 10) +
(ABS(ES_28_score - 1) * 10) +
(ABS(ES_29_score - 1) * 10)
) score,
n.n000, n.n070, n.n090, n.n100
FROM normen n, scores_csu k) m;
-- KAVEL 2
-- Afval, Parkeer, Beursvloer cijfers door RAI
-- Deze komen uit de melding met std_melding_key 2945
CREATE OR REPLACE VIEW arai_v_kpi_apb_rai
AS
WITH normen AS
(SELECT kpi_definitie_key,
kpi_definitie_code kpi_code,
kpi_definitie_categorie1 kpi_cat1,
kpi_definitie_categorie2 kpi_cat2,
kpi_definitie_drempels normscores,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100
FROM kpi_definitie
WHERE kpi_definitie_code = 'APB'),
scores_rai AS
(SELECT m.mld_melding_key,
dloc.alg_locatie_key alg_locatie_key,
TRUNC(m.mld_melding_einddatum, 'MM') periode,
COALESCE(fac.safe_to_number(APB_01.mld_kenmerkmelding_waarde),0) APB_01_score,
COALESCE(fac.safe_to_number(APB_02.mld_kenmerkmelding_waarde),0) APB_02_score,
COALESCE(fac.safe_to_number(APB_05.mld_kenmerkmelding_waarde),0) APB_05_score,
COALESCE(fac.safe_to_number(APB_06.mld_kenmerkmelding_waarde),0) APB_06_score,
COALESCE(fac.safe_to_number(APB_03.mld_kenmerkmelding_waarde),0) APB_03_score,
COALESCE(fac.safe_to_number(APB_04.mld_kenmerkmelding_waarde),0) APB_04_score
FROM mld_melding m,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1542) APB_01,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1540) APB_02,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1543) APB_05,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1541) APB_06,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1545) APB_03,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1569) APB_04,
alg_locatie dloc
WHERE m.mld_stdmelding_key = 2945
AND m.mld_melding_status NOT IN (1)
AND dloc.alg_locatie_key = m.mld_alg_locatie_key
AND APB_01.mld_melding_key(+) = m.mld_melding_key
AND APB_02.mld_melding_key(+) = m.mld_melding_key
AND APB_05.mld_melding_key(+) = m.mld_melding_key
AND APB_06.mld_melding_key(+) = m.mld_melding_key
AND APB_03.mld_melding_key(+) = m.mld_melding_key
AND APB_04.mld_melding_key(+) = m.mld_melding_key
)
SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key,
'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey,
n000, n070, n090, n100,
kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score,
normscores kpi_score_norm_score,
SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels
FROM (
SELECT n.kpi_definitie_key, n.normscores,
k.mld_melding_key,
k.alg_locatie_key,
k.periode,
n.kpi_cat1 proces,
n.kpi_cat2 onderdeel,
DECODE(n.kpi_code,
'APB', ((DECODE(APB_01_score, 0, 2, 1, 2, APB_01_score) - 2) * 2) +
((DECODE(APB_02_score, 0, 2, 1, 2, APB_02_score) - 2) * 2) +
(APB_05_score * 2) +
((DECODE(APB_06_score, 0, 1, APB_06_score) - 1) * 2) +
(ABS(APB_03_score - 1) * 10) +
(ABS(APB_04_score - 1) * 10)
) score,
n.n000, n.n070, n.n090, n.n100
FROM normen n, scores_rai k) m;
-- KAVEL 2
-- Afval, Parkeer, Beursvloer cijfers door CSU
-- Deze komen uit de melding met std_melding_key 2946
CREATE OR REPLACE VIEW arai_v_kpi_apb_csu
AS
WITH normen AS
(SELECT kpi_definitie_key,
kpi_definitie_code kpi_code,
kpi_definitie_categorie1 kpi_cat1,
kpi_definitie_categorie2 kpi_cat2,
kpi_definitie_drempels normscores,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100
FROM kpi_definitie
WHERE kpi_definitie_code = 'APB'),
scores_csu AS
(SELECT m.mld_melding_key,
dloc.alg_locatie_key alg_locatie_key,
TRUNC(m.mld_melding_einddatum, 'MM') periode,
COALESCE(fac.safe_to_number(APB_24.mld_kenmerkmelding_waarde),0) APB_24_score,
COALESCE(fac.safe_to_number(APB_07.mld_kenmerkmelding_waarde),0) APB_07_score,
COALESCE(fac.safe_to_number(APB_08.mld_kenmerkmelding_waarde),0) APB_08_score,
COALESCE(fac.safe_to_number(APB_09.mld_kenmerkmelding_waarde),0) APB_09_score,
COALESCE(fac.safe_to_number(APB_10.mld_kenmerkmelding_waarde),0) APB_10_score,
COALESCE(fac.safe_to_number(APB_11.mld_kenmerkmelding_waarde),0) APB_11_score,
COALESCE(fac.safe_to_number(APB_12.mld_kenmerkmelding_waarde),0) APB_12_score,
COALESCE(fac.safe_to_number(APB_13.mld_kenmerkmelding_waarde),0) APB_13_score,
COALESCE(fac.safe_to_number(APB_14.mld_kenmerkmelding_waarde),0) APB_14_score,
COALESCE(fac.safe_to_number(APB_15.mld_kenmerkmelding_waarde),0) APB_15_score,
COALESCE(fac.safe_to_number(APB_16.mld_kenmerkmelding_waarde),0) APB_16_score,
COALESCE(fac.safe_to_number(APB_18.mld_kenmerkmelding_waarde),0) APB_18_score,
COALESCE(fac.safe_to_number(APB_25.mld_kenmerkmelding_waarde),0) APB_25_score,
COALESCE(fac.safe_to_number(APB_26.mld_kenmerkmelding_waarde),0) APB_26_score,
COALESCE(fac.safe_to_number(APB_27.mld_kenmerkmelding_waarde),0) APB_27_score,
COALESCE(fac.safe_to_number(APB_20.mld_kenmerkmelding_waarde),0) APB_20_score
FROM mld_melding m,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1539) APB_24,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1547) APB_07,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1559) APB_08,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1546) APB_09,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1561) APB_10,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1560) APB_11,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1549) APB_12,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1562) APB_13,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1557) APB_14,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1558) APB_15,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1567) APB_16,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1566) APB_18,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1568) APB_25,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1570) APB_26,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1548) APB_27,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1565) APB_20,
alg_locatie dloc
WHERE m.mld_stdmelding_key = 2946
AND m.mld_melding_status NOT IN (1)
AND dloc.alg_locatie_key = m.mld_alg_locatie_key
AND APB_24.mld_melding_key(+) = m.mld_melding_key
AND APB_07.mld_melding_key(+) = m.mld_melding_key
AND APB_08.mld_melding_key(+) = m.mld_melding_key
AND APB_09.mld_melding_key(+) = m.mld_melding_key
AND APB_10.mld_melding_key(+) = m.mld_melding_key
AND APB_11.mld_melding_key(+) = m.mld_melding_key
AND APB_12.mld_melding_key(+) = m.mld_melding_key
AND APB_13.mld_melding_key(+) = m.mld_melding_key
AND APB_14.mld_melding_key(+) = m.mld_melding_key
AND APB_15.mld_melding_key(+) = m.mld_melding_key
AND APB_16.mld_melding_key(+) = m.mld_melding_key
AND APB_18.mld_melding_key(+) = m.mld_melding_key
AND APB_25.mld_melding_key(+) = m.mld_melding_key
AND APB_26.mld_melding_key(+) = m.mld_melding_key
AND APB_27.mld_melding_key(+) = m.mld_melding_key
AND APB_20.mld_melding_key(+) = m.mld_melding_key
)
SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key,
'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey,
n000, n070, n090, n100,
kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score,
normscores kpi_score_norm_score,
SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels
FROM (
SELECT n.kpi_definitie_key, n.normscores,
k.mld_melding_key,
k.alg_locatie_key,
k.periode,
n.kpi_cat1 proces,
n.kpi_cat2 onderdeel,
DECODE(n.kpi_code,
'APB', ((DECODE(APB_24_score, 0, 1, APB_24_score) - 1) * 2) +
(ABS(APB_07_score - 1) * 10) +
(ABS(APB_08_score - 1) * 10) +
(ABS(APB_09_score - 1) * 10) +
(ABS(APB_10_score - 1) * 10) +
(ABS(APB_11_score - 1) * 10) +
(ABS(APB_12_score - 1) * 10) +
(ABS(APB_13_score - 1) * 10) +
(ABS(APB_14_score - 1) * 10) +
(ABS(APB_15_score - 1) * 10) +
CASE
WHEN APB_16_score < 1 THEN 10
WHEN APB_16_score < 2 THEN 7.5
WHEN APB_16_score < 3 THEN 5
ELSE 0
END +
(ABS(APB_18_score - 1) * 10) +
CASE
WHEN to_char(k.periode,'YYYY') = '2016' AND APB_25_score < 7 THEN 10
WHEN to_char(k.periode,'YYYY') >= '2017' AND APB_25_score < 9 THEN 10
ELSE 0
END +
CASE
WHEN APB_26_score < 38 THEN 10
ELSE 0
END +
CASE
WHEN APB_27_score < 22.5 THEN 10
ELSE 0
END +
(ABS(APB_20_score - 1) * 10)
) score,
n.n000, n.n070, n.n090, n.n100
FROM normen n, scores_csu k) m;
-- Agv ARAI#37911: kenmerken verhuizen naar csu-view naar de rai-view van kavel 2 (APB), die zijn uit bovenstaande verwijderd en hieronder neergezet
-- Verschil zit 'm in meld_stdmelding_key:
-- De verhuisde kenmerk-keys van 2946 naar mld_stdmelding_key 2945 zijn:
-- 1563 (APB_21)
-- 1538 (APB_17)
-- 1564 (APB_19)
-- 1555 (APB_28)
-- 1550 (APB_29)
-- 1544 (APB_06)
-- 1556 (APB_05)
-- 1537 (APB_23)
CREATE OR REPLACE VIEW arai_v_kpi_apb_csu_2_rai
AS
WITH normen AS
(SELECT kpi_definitie_key,
kpi_definitie_code kpi_code,
kpi_definitie_categorie1 kpi_cat1,
kpi_definitie_categorie2 kpi_cat2,
kpi_definitie_drempels normscores,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100
FROM kpi_definitie
WHERE kpi_definitie_code = 'APB'),
scores_csu AS
(SELECT m.mld_melding_key,
dloc.alg_locatie_key alg_locatie_key,
TRUNC(m.mld_melding_einddatum, 'MM') periode,
COALESCE(fac.safe_to_number(APB_05.mld_kenmerkmelding_waarde),0) APB_05_score,
COALESCE(fac.safe_to_number(APB_23.mld_kenmerkmelding_waarde),0) APB_23_score,
COALESCE(fac.safe_to_number(APB_06.mld_kenmerkmelding_waarde),0) APB_06_score,
COALESCE(fac.safe_to_number(APB_21.mld_kenmerkmelding_waarde),0) APB_21_score,
COALESCE(fac.safe_to_number(APB_17.mld_kenmerkmelding_waarde),0) APB_17_score,
COALESCE(fac.safe_to_number(APB_19.mld_kenmerkmelding_waarde),0) APB_19_score,
COALESCE(fac.safe_to_number(APB_28.mld_kenmerkmelding_waarde),0) APB_28_score,
COALESCE(fac.safe_to_number(APB_29.mld_kenmerkmelding_waarde),0) APB_29_score
FROM mld_melding m,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1556) APB_05,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1537) APB_23,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1544) APB_06,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1563) APB_21,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1538) APB_17,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1564) APB_19,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1555) APB_28,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1550) APB_29,
alg_locatie dloc
WHERE m.mld_stdmelding_key = 2945
AND m.mld_melding_status NOT IN (1)
AND dloc.alg_locatie_key = m.mld_alg_locatie_key
AND APB_05.mld_melding_key(+) = m.mld_melding_key
AND APB_23.mld_melding_key(+) = m.mld_melding_key
AND APB_06.mld_melding_key(+) = m.mld_melding_key
AND APB_21.mld_melding_key(+) = m.mld_melding_key
AND APB_17.mld_melding_key(+) = m.mld_melding_key
AND APB_19.mld_melding_key(+) = m.mld_melding_key
AND APB_28.mld_melding_key(+) = m.mld_melding_key
AND APB_29.mld_melding_key(+) = m.mld_melding_key
)
SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key,
'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey,
n000, n070, n090, n100,
kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score,
normscores kpi_score_norm_score,
SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels
FROM (
SELECT n.kpi_definitie_key, n.normscores,
k.mld_melding_key,
k.alg_locatie_key,
k.periode,
n.kpi_cat1 proces,
n.kpi_cat2 onderdeel,
DECODE(n.kpi_code,
'APB', (APB_05_score * 10) +
(APB_23_score * 2) +
(APB_06_score * 5) +
(ABS(APB_21_score - 1) * 10) +
(APB_17_score * 2) +
(ABS(APB_19_score - 1) * 10) +
(ABS(APB_28_score - 1) * 10) +
(ABS(APB_29_score - 1) * 10)
) score,
n.n000, n.n070, n.n090, n.n100
FROM normen n, scores_csu k) m;
-- KAVEL 3
-- Back of House cijfers door RAI
-- Deze komen uit de melding met std_melding_key 2947
CREATE OR REPLACE VIEW arai_v_kpi_bh_rai
AS
WITH normen AS
(SELECT kpi_definitie_key,
kpi_definitie_code kpi_code,
kpi_definitie_categorie1 kpi_cat1,
kpi_definitie_categorie2 kpi_cat2,
kpi_definitie_drempels normscores,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100
FROM kpi_definitie
WHERE kpi_definitie_code = 'BH'),
scores_rai AS
(SELECT m.mld_melding_key,
dloc.alg_locatie_key alg_locatie_key,
TRUNC(m.mld_melding_einddatum, 'MM') periode,
COALESCE(fac.safe_to_number(BH_01.mld_kenmerkmelding_waarde),0) BH_01_score,
COALESCE(fac.safe_to_number(BH_02.mld_kenmerkmelding_waarde),0) BH_02_score,
COALESCE(fac.safe_to_number(BH_03.mld_kenmerkmelding_waarde),0) BH_03_score,
COALESCE(fac.safe_to_number(BH_04.mld_kenmerkmelding_waarde),0) BH_04_score
FROM mld_melding m,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1574) BH_01,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1573) BH_02,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1580) BH_03,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1595) BH_04,
alg_locatie dloc
WHERE m.mld_stdmelding_key = 2947
AND m.mld_melding_status NOT IN (1)
AND dloc.alg_locatie_key = m.mld_alg_locatie_key
AND BH_01.mld_melding_key(+) = m.mld_melding_key
AND BH_02.mld_melding_key(+) = m.mld_melding_key
AND BH_03.mld_melding_key(+) = m.mld_melding_key
AND BH_04.mld_melding_key(+) = m.mld_melding_key
)
SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key,
'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey,
n000, n070, n090, n100,
kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score,
normscores kpi_score_norm_score,
SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels
FROM (
SELECT n.kpi_definitie_key, n.normscores,
k.mld_melding_key,
k.alg_locatie_key,
k.periode,
n.kpi_cat1 proces,
n.kpi_cat2 onderdeel,
DECODE(n.kpi_code,
'BH', (BH_01_score * 2) +
(BH_02_score * 2) +
(ABS(BH_03_score - 1) * 10) +
(ABS(BH_04_score - 1) * 10)
) score,
n.n000, n.n070, n.n090, n.n100
FROM normen n, scores_rai k) m;
-- KAVEL 3
-- Kantoorschoonmaak cijfers door CSU
-- Deze komen uit de melding met std_melding_key 2948
CREATE OR REPLACE VIEW arai_v_kpi_bh_csu
AS
WITH normen AS
(SELECT kpi_definitie_key,
kpi_definitie_code kpi_code,
kpi_definitie_categorie1 kpi_cat1,
kpi_definitie_categorie2 kpi_cat2,
kpi_definitie_drempels normscores,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100
FROM kpi_definitie
WHERE kpi_definitie_code = 'BH'),
scores_csu AS
(SELECT m.mld_melding_key,
dloc.alg_locatie_key alg_locatie_key,
TRUNC(m.mld_melding_einddatum, 'MM') periode,
COALESCE(fac.safe_to_number(BH_07.mld_kenmerkmelding_waarde),0) BH_07_score,
COALESCE(fac.safe_to_number(BH_08.mld_kenmerkmelding_waarde),0) BH_08_score,
COALESCE(fac.safe_to_number(BH_09.mld_kenmerkmelding_waarde),0) BH_09_score,
COALESCE(fac.safe_to_number(BH_10.mld_kenmerkmelding_waarde),0) BH_10_score,
COALESCE(fac.safe_to_number(BH_11.mld_kenmerkmelding_waarde),0) BH_11_score,
COALESCE(fac.safe_to_number(BH_12.mld_kenmerkmelding_waarde),0) BH_12_score,
COALESCE(fac.safe_to_number(BH_13.mld_kenmerkmelding_waarde),0) BH_13_score,
COALESCE(fac.safe_to_number(BH_14.mld_kenmerkmelding_waarde),0) BH_14_score,
COALESCE(fac.safe_to_number(BH_15.mld_kenmerkmelding_waarde),0) BH_15_score,
COALESCE(fac.safe_to_number(BH_16.mld_kenmerkmelding_waarde),0) BH_16_score,
COALESCE(fac.safe_to_number(BH_18.mld_kenmerkmelding_waarde),0) BH_18_score,
COALESCE(fac.safe_to_number(BH_22.mld_kenmerkmelding_waarde),0) BH_22_score,
COALESCE(fac.safe_to_number(BH_20.mld_kenmerkmelding_waarde),0) BH_20_score
FROM mld_melding m,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1578) BH_07,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1586) BH_08,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1577) BH_09,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1588) BH_10,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1587) BH_11,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1579) BH_12,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1589) BH_13,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1584) BH_14,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1585) BH_15,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1594) BH_16,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1593) BH_18,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1571) BH_22,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1592) BH_20,
alg_locatie dloc
WHERE m.mld_stdmelding_key = 2948
AND m.mld_melding_status NOT IN (1)
AND dloc.alg_locatie_key = m.mld_alg_locatie_key
AND BH_07.mld_melding_key(+) = m.mld_melding_key
AND BH_08.mld_melding_key(+) = m.mld_melding_key
AND BH_09.mld_melding_key(+) = m.mld_melding_key
AND BH_10.mld_melding_key(+) = m.mld_melding_key
AND BH_11.mld_melding_key(+) = m.mld_melding_key
AND BH_12.mld_melding_key(+) = m.mld_melding_key
AND BH_13.mld_melding_key(+) = m.mld_melding_key
AND BH_14.mld_melding_key(+) = m.mld_melding_key
AND BH_15.mld_melding_key(+) = m.mld_melding_key
AND BH_16.mld_melding_key(+) = m.mld_melding_key
AND BH_18.mld_melding_key(+) = m.mld_melding_key
AND BH_22.mld_melding_key(+) = m.mld_melding_key
AND BH_20.mld_melding_key(+) = m.mld_melding_key
)
SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key,
'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey,
n000, n070, n090, n100,
kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score,
normscores kpi_score_norm_score,
SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels
FROM (
SELECT n.kpi_definitie_key, n.normscores,
k.mld_melding_key,
k.alg_locatie_key,
k.periode,
n.kpi_cat1 proces,
n.kpi_cat2 onderdeel,
DECODE(n.kpi_code,
'BH', (ABS(BH_07_score - 1) * 10) +
(ABS(BH_08_score - 1) * 10) +
(ABS(BH_09_score - 1) * 10) +
(ABS(BH_10_score - 1) * 10) +
(ABS(BH_11_score - 1) * 10) +
(ABS(BH_12_score - 1) * 10) +
(ABS(BH_13_score - 1) * 10) +
(ABS(BH_14_score - 1) * 10) +
(ABS(BH_15_score - 1) * 10) +
CASE
WHEN BH_16_score < 1 THEN 10
WHEN BH_16_score < 2 THEN 7.5
WHEN BH_16_score < 3 THEN 5
ELSE 0
END +
(ABS(BH_18_score - 1) * 10) +
(ABS(BH_22_score - 1) * 10) +
(ABS(BH_20_score - 1) * 10)
) score,
n.n000, n.n070, n.n090, n.n100
FROM normen n, scores_csu k) m;
-- Agv ARAI#37911: kenmerken verhuizen naar csu-view naar de rai-view van kavel 3 (BH), die zijn uit bovenstaande verwijderd en hieronder neergezet
-- Verschil zit 'm in meld_stdmelding_key:
-- De verhuisde kenmerk-keys van 2948 naar mld_stdmelding_key 2947 zijn:
-- 1590 (BH_21)
-- 1572 (BH_17)
-- 1591 (BH_19)
-- 1575 (BH_06)
-- 1583 (BH_05)
CREATE OR REPLACE VIEW arai_v_kpi_bh_csu_2_rai
AS
WITH normen AS
(SELECT kpi_definitie_key,
kpi_definitie_code kpi_code,
kpi_definitie_categorie1 kpi_cat1,
kpi_definitie_categorie2 kpi_cat2,
kpi_definitie_drempels normscores,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100
FROM kpi_definitie
WHERE kpi_definitie_code = 'BH'),
scores_csu AS
(SELECT m.mld_melding_key,
dloc.alg_locatie_key alg_locatie_key,
TRUNC(m.mld_melding_einddatum, 'MM') periode,
COALESCE(fac.safe_to_number(BH_05.mld_kenmerkmelding_waarde),0) BH_05_score,
COALESCE(fac.safe_to_number(BH_06.mld_kenmerkmelding_waarde),0) BH_06_score,
COALESCE(fac.safe_to_number(BH_21.mld_kenmerkmelding_waarde),0) BH_21_score,
COALESCE(fac.safe_to_number(BH_17.mld_kenmerkmelding_waarde),0) BH_17_score,
COALESCE(fac.safe_to_number(BH_19.mld_kenmerkmelding_waarde),0) BH_19_score
FROM mld_melding m,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1583) BH_05,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1575) BH_06,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1590) BH_21,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1572) BH_17,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1591) BH_19,
alg_locatie dloc
WHERE m.mld_stdmelding_key = 2947
AND m.mld_melding_status NOT IN (1)
AND dloc.alg_locatie_key = m.mld_alg_locatie_key
AND BH_05.mld_melding_key(+) = m.mld_melding_key
AND BH_06.mld_melding_key(+) = m.mld_melding_key
AND BH_21.mld_melding_key(+) = m.mld_melding_key
AND BH_17.mld_melding_key(+) = m.mld_melding_key
AND BH_19.mld_melding_key(+) = m.mld_melding_key
)
SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key,
'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey,
n000, n070, n090, n100,
kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score,
normscores kpi_score_norm_score,
SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels
FROM (
SELECT n.kpi_definitie_key, n.normscores,
k.mld_melding_key,
k.alg_locatie_key,
k.periode,
n.kpi_cat1 proces,
n.kpi_cat2 onderdeel,
DECODE(n.kpi_code,
'BH', (BH_05_score * 10) +
(BH_06_score * 5) +
(ABS(BH_21_score - 1) * 10) +
(BH_17_score * 2) +
(ABS(BH_19_score - 1) * 10)
) score,
n.n000, n.n070, n.n090, n.n100
FROM normen n, scores_csu k) m;
-- KAVEL 4
-- Kantoorschoonmaak cijfers door RAI
-- Deze komen uit de melding met std_melding_key 2941
CREATE OR REPLACE VIEW arai_v_kpi_ks_rai
AS
WITH normen AS
(SELECT kpi_definitie_key,
kpi_definitie_code kpi_code,
kpi_definitie_categorie1 kpi_cat1,
kpi_definitie_categorie2 kpi_cat2,
kpi_definitie_drempels normscores,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100
FROM kpi_definitie
WHERE kpi_definitie_code = 'KS'),
scores_rai AS
(SELECT m.mld_melding_key,
dloc.alg_locatie_key alg_locatie_key,
TRUNC(m.mld_melding_einddatum, 'MM') periode,
COALESCE(fac.safe_to_number(KS_01.mld_kenmerkmelding_waarde),0) KS_01_score,
COALESCE(fac.safe_to_number(KS_02.mld_kenmerkmelding_waarde),0) KS_02_score,
COALESCE(fac.safe_to_number(KS_03.mld_kenmerkmelding_waarde),0) KS_03_score,
COALESCE(fac.safe_to_number(KS_04.mld_kenmerkmelding_waarde),0) KS_04_score
FROM mld_melding m,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1483) KS_01,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1482) KS_02,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1489) KS_03,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1504) KS_04,
alg_locatie dloc
WHERE m.mld_stdmelding_key = 2941
AND m.mld_melding_status NOT IN (1)
AND dloc.alg_locatie_key = m.mld_alg_locatie_key
AND KS_01.mld_melding_key(+) = m.mld_melding_key
AND KS_02.mld_melding_key(+) = m.mld_melding_key
AND KS_03.mld_melding_key(+) = m.mld_melding_key
AND KS_04.mld_melding_key(+) = m.mld_melding_key
)
SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key,
'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey,
n000, n070, n090, n100,
kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score,
normscores kpi_score_norm_score,
SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels
FROM (
SELECT n.kpi_definitie_key, n.normscores,
k.mld_melding_key,
k.alg_locatie_key,
k.periode,
n.kpi_cat1 proces,
n.kpi_cat2 onderdeel,
DECODE(n.kpi_code,
'KS', ((DECODE(KS_01_score, 0, 1, KS_01_score) - 1) * 2) +
((DECODE(KS_02_score, 0, 1, KS_02_score) - 1) * 2) +
(ABS(KS_03_score - 1) * 10) +
(ABS(KS_04_score - 1) * 10)
) score,
n.n000, n.n070, n.n090, n.n100
FROM normen n, scores_rai k) m;
-- KAVEL 4
-- Kantoorschoonmaak cijfers door CSU
-- Deze komen uit de melding met std_melding_key 2942
CREATE OR REPLACE VIEW arai_v_kpi_ks_csu
AS
WITH normen AS
(SELECT kpi_definitie_key,
kpi_definitie_code kpi_code,
kpi_definitie_categorie1 kpi_cat1,
kpi_definitie_categorie2 kpi_cat2,
kpi_definitie_drempels normscores,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100
FROM kpi_definitie
WHERE kpi_definitie_code = 'KS'),
scores_csu AS
(SELECT m.mld_melding_key,
dloc.alg_locatie_key alg_locatie_key,
TRUNC(m.mld_melding_einddatum, 'MM') periode,
COALESCE(fac.safe_to_number(KS_07.mld_kenmerkmelding_waarde),0) KS_07_score,
COALESCE(fac.safe_to_number(KS_08.mld_kenmerkmelding_waarde),0) KS_08_score,
COALESCE(fac.safe_to_number(KS_09.mld_kenmerkmelding_waarde),0) KS_09_score,
COALESCE(fac.safe_to_number(KS_10.mld_kenmerkmelding_waarde),0) KS_10_score,
COALESCE(fac.safe_to_number(KS_11.mld_kenmerkmelding_waarde),0) KS_11_score,
COALESCE(fac.safe_to_number(KS_12.mld_kenmerkmelding_waarde),0) KS_12_score,
COALESCE(fac.safe_to_number(KS_13.mld_kenmerkmelding_waarde),0) KS_13_score,
COALESCE(fac.safe_to_number(KS_14.mld_kenmerkmelding_waarde),0) KS_14_score,
COALESCE(fac.safe_to_number(KS_15.mld_kenmerkmelding_waarde),0) KS_15_score,
COALESCE(fac.safe_to_number(KS_16.mld_kenmerkmelding_waarde),0) KS_16_score,
COALESCE(fac.safe_to_number(KS_18.mld_kenmerkmelding_waarde),0) KS_18_score,
COALESCE(fac.safe_to_number(KS_20.mld_kenmerkmelding_waarde),0) KS_20_score
FROM mld_melding m,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1487) KS_07,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1496) KS_08,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1486) KS_09,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1498) KS_10,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1497) KS_11,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1488) KS_12,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1499) KS_13,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1494) KS_14,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1495) KS_15,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1503) KS_16,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1502) KS_18,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1501) KS_20,
alg_locatie dloc
WHERE m.mld_stdmelding_key = 2942
AND m.mld_melding_status NOT IN (1)
AND dloc.alg_locatie_key = m.mld_alg_locatie_key
AND KS_07.mld_melding_key(+) = m.mld_melding_key
AND KS_08.mld_melding_key(+) = m.mld_melding_key
AND KS_09.mld_melding_key(+) = m.mld_melding_key
AND KS_10.mld_melding_key(+) = m.mld_melding_key
AND KS_11.mld_melding_key(+) = m.mld_melding_key
AND KS_12.mld_melding_key(+) = m.mld_melding_key
AND KS_13.mld_melding_key(+) = m.mld_melding_key
AND KS_14.mld_melding_key(+) = m.mld_melding_key
AND KS_15.mld_melding_key(+) = m.mld_melding_key
AND KS_16.mld_melding_key(+) = m.mld_melding_key
AND KS_18.mld_melding_key(+) = m.mld_melding_key
AND KS_20.mld_melding_key(+) = m.mld_melding_key
)
SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key,
'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey,
n000, n070, n090, n100,
kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score,
normscores kpi_score_norm_score,
SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels
FROM (
SELECT n.kpi_definitie_key, n.normscores,
k.mld_melding_key,
k.alg_locatie_key,
k.periode,
n.kpi_cat1 proces,
n.kpi_cat2 onderdeel,
DECODE(n.kpi_code,
'KS', (ABS(KS_07_score - 1) * 10) +
(ABS(KS_08_score - 1) * 10) +
(ABS(KS_09_score - 1) * 10) +
(ABS(KS_10_score - 1) * 10) +
(ABS(KS_11_score - 1) * 10) +
(ABS(KS_12_score - 1) * 10) +
(ABS(KS_13_score - 1) * 10) +
(ABS(KS_14_score - 1) * 10) +
(ABS(KS_15_score - 1) * 10) +
CASE
WHEN KS_16_score < 1 THEN 10
WHEN KS_16_score < 2 THEN 7.5
WHEN KS_16_score < 3 THEN 5
ELSE 0
END +
(ABS(KS_18_score - 1) * 10) +
(ABS(KS_20_score - 1) * 10)
) score,
n.n000, n.n070, n.n090, n.n100
FROM normen n, scores_csu k) m;
-- Agv ARAI#37911: kenmerken verhuizen naar csu-view naar de rai-view van kavel 4 (KS), die zijn uit bovenstaande verwijderd en hieronder neergezet
-- Verschil zit 'm in meld_stdmelding_key:
-- De verhuisde kenmerk-keys van 2942 naar mld_stdmelding_key 2941 zijn:
-- 1481 (KS_17)
-- 1500 (KS_19)
-- 1484 (KS_06)
-- 1492 (KS_05)
CREATE OR REPLACE VIEW arai_v_kpi_ks_csu_2_rai
AS
WITH normen AS
(SELECT kpi_definitie_key,
kpi_definitie_code kpi_code,
kpi_definitie_categorie1 kpi_cat1,
kpi_definitie_categorie2 kpi_cat2,
kpi_definitie_drempels normscores,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090,
fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100
FROM kpi_definitie
WHERE kpi_definitie_code = 'KS'),
scores_csu AS
(SELECT m.mld_melding_key,
dloc.alg_locatie_key alg_locatie_key,
TRUNC(m.mld_melding_einddatum, 'MM') periode,
COALESCE(fac.safe_to_number(KS_05.mld_kenmerkmelding_waarde),0) KS_05_score,
COALESCE(fac.safe_to_number(KS_06.mld_kenmerkmelding_waarde),0) KS_06_score,
COALESCE(fac.safe_to_number(KS_17.mld_kenmerkmelding_waarde),0) KS_17_score,
COALESCE(fac.safe_to_number(KS_19.mld_kenmerkmelding_waarde),0) KS_19_score
FROM mld_melding m,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1492) KS_05,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1484) KS_06,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1481) KS_17,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1500) KS_19,
alg_locatie dloc
WHERE m.mld_stdmelding_key = 2941
AND m.mld_melding_status NOT IN (1)
AND dloc.alg_locatie_key = m.mld_alg_locatie_key
AND KS_05.mld_melding_key(+) = m.mld_melding_key
AND KS_06.mld_melding_key(+) = m.mld_melding_key
AND KS_17.mld_melding_key(+) = m.mld_melding_key
AND KS_19.mld_melding_key(+) = m.mld_melding_key
)
SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key,
'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey,
n000, n070, n090, n100,
kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score,
normscores kpi_score_norm_score,
SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels
FROM (
SELECT n.kpi_definitie_key, n.normscores,
k.mld_melding_key,
k.alg_locatie_key,
k.periode,
n.kpi_cat1 proces,
n.kpi_cat2 onderdeel,
DECODE(n.kpi_code,
'KS', (KS_05_score * 10) +
(KS_06_score * 5) +
(KS_17_score * 2) +
(ABS(KS_19_score - 1) * 10)
) score,
n.n000, n.n070, n.n090, n.n100
FROM normen n, scores_csu k) m;
CREATE OR REPLACE VIEW arai_v_kpi_ks
(kpi_definitie_key, kpi_score_datum, alg_locatie_key, kpi_score_xmlnode, kpi_score_refkey, kpi_score_score, kpi_score_norm_score, kpi_score_drempels)
AS
SELECT kpi_definitie_key, kpi_score_datum, alg_locatie_key, 'melding' kpi_score_xmlnode, NULL kpi_score_refkey, kpi.getNormScore(SUM(kpi_score_drempels), n000, n070, n090, n100), MIN(KPI_SCORE_NORM_SCORE), SUM(kpi_score_drempels)
FROM
(SELECT * FROM arai_v_kpi_ks_rai r
UNION
SELECT * FROM arai_v_kpi_ks_csu c
UNION
SELECT * FROM arai_v_kpi_ks_csu_2_rai cr
)
GROUP BY kpi_definitie_key, kpi_score_datum, alg_locatie_key, n000, n070, n090, n100;
CREATE OR REPLACE VIEW arai_v_kpi_bh
(kpi_definitie_key, kpi_score_datum, alg_locatie_key, kpi_score_xmlnode, kpi_score_refkey, kpi_score_score, kpi_score_norm_score, kpi_score_drempels)
AS
SELECT kpi_definitie_key, kpi_score_datum, alg_locatie_key, 'melding' kpi_score_xmlnode, NULL kpi_score_refkey, kpi.getNormScore(SUM(kpi_score_drempels), n000, n070, n090, n100), MIN(KPI_SCORE_NORM_SCORE), SUM(kpi_score_drempels)
FROM
(SELECT * FROM arai_v_kpi_bh_rai r
UNION
SELECT * FROM arai_v_kpi_bh_csu c
UNION
SELECT * FROM arai_v_kpi_bh_csu_2_rai cr
)
GROUP BY kpi_definitie_key, kpi_score_datum, alg_locatie_key, n000, n070, n090, n100;
CREATE OR REPLACE VIEW arai_v_kpi_apb
(kpi_definitie_key, kpi_score_datum, alg_locatie_key, kpi_score_xmlnode, kpi_score_refkey, kpi_score_score, kpi_score_norm_score, kpi_score_drempels)
AS
SELECT kpi_definitie_key, kpi_score_datum, alg_locatie_key, 'melding' kpi_score_xmlnode, NULL kpi_score_refkey, kpi.getNormScore(SUM(kpi_score_drempels), n000, n070, n090, n100), MIN(KPI_SCORE_NORM_SCORE), SUM(kpi_score_drempels)
FROM
(SELECT * FROM arai_v_kpi_apb_rai r
UNION
SELECT * FROM arai_v_kpi_apb_csu c
UNION
SELECT * FROM arai_v_kpi_apb_csu_2_rai cr
)
GROUP BY kpi_definitie_key, kpi_score_datum, alg_locatie_key, n000, n070, n090, n100;
CREATE OR REPLACE VIEW arai_v_kpi_es
(kpi_definitie_key, kpi_score_datum, alg_locatie_key, kpi_score_xmlnode, kpi_score_refkey, kpi_score_score, kpi_score_norm_score, kpi_score_drempels)
AS
SELECT kpi_definitie_key, kpi_score_datum, alg_locatie_key, 'melding' kpi_score_xmlnode, NULL kpi_score_refkey, kpi.getNormScore(SUM(kpi_score_drempels), n000, n070, n090, n100), MIN(KPI_SCORE_NORM_SCORE), SUM(kpi_score_drempels)
FROM
(SELECT * FROM arai_v_kpi_es_rai r
UNION
SELECT * FROM arai_v_kpi_es_csu c
UNION
SELECT * FROM arai_v_kpi_es_csu_2_rai cr
)
GROUP BY kpi_definitie_key, kpi_score_datum, alg_locatie_key, n000, n070, n090, n100;
CREATE OR REPLACE VIEW arai_v_kpi_all
AS
SELECT * FROM arai_v_kpi_ks
UNION ALL
SELECT * FROM arai_v_kpi_bh
UNION ALL
SELECT * FROM arai_v_kpi_apb
UNION ALL
SELECT * FROM arai_v_kpi_es;
CREATE OR REPLACE PACKAGE arai
AS
PROCEDURE refreshscore(pUserKey IN NUMBER);
END;
/
CREATE OR REPLACE PACKAGE BODY arai
AS
PROCEDURE refreshscore(pUserKey IN NUMBER)
AS
BEGIN
-- Waarden van de huidige periode(s) verwijderen.
-- TODO: tricky met KPI's op basis van storingsmeldingen, klachten etc; daar kan voor een
-- periode maar zo een extra melding afgemeld worden, waardoor de score opnieuw berekend wordt
DELETE FROM kpi_score;
--WHERE (kpi_definitie_key, kpi_score_datum, alg_locatie_key) IN (
-- SELECT DISTINCT kpi_definitie_key, kpi_score_datum, alg_locatie_key
-- FROM demo_v_kpi_all);
-- Opnieuw genereren van KPI scores
INSERT INTO kpi_score (
kpi_definitie_key,
kpi_score_datum,
alg_locatie_key,
kpi_score_xmlnode,
kpi_score_refkey,
kpi_score_score,
kpi_score_norm_score,
kpi_score_drempels)
SELECT * FROM arai_v_kpi_all;
COMMIT;
END;
END;
/
-- ARAI#37083 QR Code alle objecten
CREATE OR REPLACE VIEW arai_v_ins_qrc_mld
AS
SELECT i.ins_deel_omschrijving hide_f_sort,
l.alg_locatie_code||' '||l.alg_locatie_omschrijving fclt_f_locatie,
o.alg_gebouw_omschrijving fclt_f_gebouw,
o.alg_plaatsaanduiding fclt_f_plaats,
d.ins_discipline_omschrijving fclt_f_discipline,
g.ins_srtgroep_omschrijving fclt_f_objectgroep,
s.ins_srtdeel_omschrijving fclt_f_objectsoort,
i.ins_deel_omschrijving fclt_f_identificatie,
d.ins_discipline_omschrijving||' / '||sm.mld_stdmelding_omschrijving fclt_f_melding,
i.ins_deel_key,
s.ins_srtdeel_key,
o.alg_gebouw_code,
o.alg_verdieping_code,
i.ins_discipline_key fclt_3d_discipline_key,
l.alg_locatie_key fclt_3d_locatie_key,
i.ins_alg_ruimte_type,
i.ins_alg_ruimte_key,
b.fac_bookmark_id hide_f_bookmark_id
FROM ins_deel i,
ins_v_alg_overzicht o,
ins_srtdeel s,
ins_srtgroep g,
ins_discipline d,
alg_locatie l,
fac_bookmark b,
mld_stdmelding sm
WHERE b.fac_bookmark_naam = 'QRC_MELDING'
AND (b.fac_bookmark_expire IS NULL OR b.fac_bookmark_expire > SYSDATE)
AND ins_deel_verwijder IS NULL
AND i.ins_deel_module = 'INS'
AND i.ins_deel_parent_key IS NULL
AND s.ins_srtdeel_key = i.ins_srtdeel_key
AND g.ins_srtgroep_key = s.ins_srtgroep_key
AND d.ins_discipline_key = g.ins_discipline_key
AND o.alg_onroerendgoed_keys = i.ins_alg_ruimte_key
AND o.alg_onroerendgoed_type = i.ins_alg_ruimte_type
AND i.ins_alg_ruimte_type IN ('T', 'R', 'W')
AND o.alg_locatie_key = i.ins_alg_locatie_key
AND i.ins_alg_locatie_key = l.alg_locatie_key
AND sm.ins_srtinst_key IS NOT NULL
AND sm.ins_srtinst_key = DECODE(sm.ins_srtinst_niveau,
'S', i.ins_srtdeel_key,
'G', s.ins_srtgroep_key,
'D', g.ins_discipline_key);
BEGIN adm.systrackscriptId('$Id$', 0); END;
/
BEGIN fac.registercustversion('ARAI', 23); END;
/
commit;
spool off