Files
Customer/ARAI/arai.sql
Robin Stoker 36bc46ebf9 ARAI#57095 -- Fix voor ebms kenmerk standnummers
ARAI#56657 -- Rigging meldingen togevoegd aan mail2melding koppeling
ARAI#52123 -- Social media meldingen auto-afmelden
ARAI#54860 -- Notificatie voor open opdrachten

svn path=/Customer/trunk/; revision=43809
2019-08-15 14:58:54 +00:00

13093 lines
554 KiB
MySQL
Raw Blame History

--
-- $Id$
--
-- Script containing customer specific db-configuration for RAI Amsterdam (ARAI)
DEFINE thisfile = 'ARAI.SQL'
DEFINE dbuser = '^ARAI'
DEFINE custid = 'ARAI'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
WHENEVER SQLERROR EXIT;
SELECT adm.scriptspoolfile('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL;
WHENEVER SQLERROR CONTINUE;
SPOOL &fcltlogfile
SET DEFINE OFF
------ payload begin ------
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_perslid (p_import_key IN NUMBER)
AS
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (400);
v_errorhint VARCHAR2 (400);
v_newline FAC_IMP_FILE.FAC_IMP_FILE_LINE%TYPE;
BEGIN
BEGIN
SELECT fac_imp_file_line
INTO v_newline
FROM fac_imp_file
WHERE fac_import_key = p_import_key
AND fac_imp_file_index = 1;
IF v_newline LIKE
CHR (TO_NUMBER ('EF', 'xx'))
|| CHR (TO_NUMBER ('BB', 'xx'))
|| CHR (TO_NUMBER ('BF', 'xx'))
|| '%'
THEN
-- EF BB BF aangetroffen
fac.imp_writelog (p_import_key,
'W',
'Byte Order Mark aangetroffen',
'Bestand heeft onbehandeld UTF-8 formaat.'
);
v_newline := SUBSTR (v_newline, 4);
END IF;
-- Verwijder de dubbele quotes
v_newline := REPLACE (v_newline, '"');
UPDATE fac_imp_file
SET fac_imp_file_line = v_newline
WHERE fac_import_key = p_import_key
AND fac_imp_file_index = 1;
EXCEPTION WHEN OTHERS
THEN
fac.imp_writelog (p_import_key,
'E',
'Fout bij controle op Byte Order Mark',
''
);
END;
v_errorhint := 'Generieke update';
-- de sequence array staat beschreven in PRS_PAC.SRC bij de prs.import_perslid proc
-- Ingangsdatum (laatste kolom) land in v_dummy, later omzetten.
prs.import_perslid (p_import_key,
'0;0;0;0;0;0;10;2;0;1;' ||
'0;0;0;0;0;6;7;5;0;0;' ||
'0;8;0;11;0;12;0;0;0;0;'||
'0;0;0;0;0;0;0;0;0;0;'||
'0;0;0;0;0;0',
'GivenName;Surname;DisplayName;userPrincipalName;Mail;telephoneNumber;mobile;SamAccountName;Company;Department;Title;extensionAttribute5%'
);
UPDATE fac_imp_perslid
SET alg_locatie_code = 'RAI';
UPDATE fac_imp_perslid
SET prs_afdeling_naam =
(
SELECT DISTINCT p.prs_afdeling_naam
FROM prs_afdeling p
WHERE fac_imp_perslid.prs_afdeling_naam = substr (p.prs_afdeling_omschrijving, 1, 15)
AND p.prs_afdeling_verwijder IS NULL
)
WHERE fac_imp_perslid.prs_afdeling_naam NOT IN (SELECT p.prs_afdeling_naam FROM prs_afdeling p);
DELETE FROM fac_imp_perslid
WHERE alg_locatie_code NOT IN (SELECT alg_locatie_code FROM alg_locatie);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
END arai_import_perslid;
/
CREATE OR REPLACE PROCEDURE arai_update_perslid (
p_import_key IN NUMBER
) IS
-- Alle personen verwijderen die niet meer in import bestand voorkomen.
CURSOR c_del
IS
SELECT p.prs_perslid_key, p.prs_perslid_oslogin, pf.prs_perslid_naam_full
FROM fac_imp_perslid i, prs_perslid p, prs_v_perslid_fullnames_all pf
WHERE p.prs_perslid_oslogin = i.prs_perslid_oslogin(+)
AND pf.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_oslogin IS NOT NULL
AND i.prs_perslid_oslogin IS NULL
AND p.prs_perslid_verwijder IS NULL
AND p.prs_perslid_oslogin NOT LIKE '%_%'
ORDER BY 2;
v_count NUMBER;
BEGIN
-- generic update
SELECT count(*)
INTO v_count
FROM fac_imp_perslid;
IF v_count < 150
THEN
fac.imp_writelog (p_import_key,
'E',
'Het aantal te importeren personen is te klein ('
|| TO_CHAR (v_count) || ')',
'Zie Specificatie'
);
RETURN;
END IF;
-- 'LOGIN' betekent dat op basis van oslogin wordt gematched.
-- 'A' betekent altijd alle (andere/overige) werkplekken verwijderen
prs.update_perslid (p_import_key, 'LOGIN', NULL);
-- Verwijder personen die niet meer in de import voorkomen.
FOR rec IN c_del
LOOP
BEGIN
prs.delete_perslid (p_import_key, rec.prs_perslid_key);
END;
END LOOP;
END arai_update_perslid;
/
-- LET OP: OUDE PRS IMPORT!!!!!!!
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,
EventAfbouw + 150
FROM arai_events
WHERE evenement NOT LIKE '%ikv%'
AND evenement NOT LIKE '%IKV%'
AND evenement NOT LIKE '%ite visit%'
AND evenement NOT LIKE '%ite Visit%'
AND evenement NOT LIKE '%espreking%'
AND evenement NOT LIKE '%valuatie%'
AND evenement NOT LIKE '%roductie meeting%'
AND evenement NOT LIKE '%training%'
AND evenement NOT LIKE '%Training%';
---------------------------------------------------------------------------------------------------------------------------------------------
--- 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;
-- Lijst met unieke standnummers tussen een maand geleden en een jaar vooruit (anders teveel resultaten)
CREATE OR REPLACE VIEW arai_v_standnummers
(ebms_key,
standnummer)
AS
SELECT DISTINCT MIN (arai_ebms_key), lokatie
FROM ARAI_V_EBMS
WHERE eventdatumtot BETWEEN sysdate - 31 AND sysdate + 365
GROUP BY lokatie;
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 (+)
AND ins_deelsrtcontrole_datum >= SYSDATE - 28;
-- 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
(
mld_melding_key,
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,
mld_melding_note_omschrijving,
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
m.mld_melding_key,
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 mld_melding_note_omschrijving
FROM mld_melding_note
WHERE mld_melding_note_key IN
(SELECT MAX (mld_melding_note_key)
FROM mld_melding_note mn
WHERE mn.mld_melding_key = m.mld_melding_key))
mld_melding_note_omschrijving,
(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 (+) IN (2601, 2639, 2603, 2604, 2605, 2606, 2607, 2608, 2609, 2610, 2611, 2612, 2613, 2614, 2615,
2616, 2617, 2618, 2619, 2620, 2622, 2624, 2625, 2626, 2628, 2629, 2630, 2631, 2632, 2633,
2634, 2635, 2636, 2637, 2602)
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
ak.mld_melding_key,
ak.fclt_f_meldingnr,
ak.fclt_f_type,
ak.fclt_3d_discipline_key,
ak.fclt_f_vakgroep,
ak.mld_stdmelding_key,
ak.fclt_f_melding,
ak.mld_melding_omschrijving,
ak.mld_melding_opmerking,
ak.mld_melding_note_omschrijving,
ak.fclt_f_leverancier,
ak.fclt_f_jaar,
ak.fclt_f_kwartaal,
ak.fclt_f_maand,
ak.invoer_datum,
ak.fclt_f_ingevoerd,
ak.invoer_datum_time,
ak.operationele_einddatum,
ak.sla_einddatum,
ak.mld_operationeel_te_laat,
ak.mld_sla_te_laat,
ak.mld_operationeel_dagenuurmin,
ak.fclt_f_lopend,
ak.fclt_key,
ak.fclt_f_status,
ak.status_code,
ak.afmeld_datum,
ak.fclt_f_afgemeld,
ak.afmeld_datum_time,
ak.afgemeld_door,
ak.ingevoerd_door,
ak.invoerder_email,
ak.company_contactpersoon,
ak.company_mailadres,
ak.company_telefoon,
ak.eventid,
COALESCE (ak.fclt_f_evenement,
(SELECT evenement
FROM arai_v_events
WHERE arai_events_key =
(SELECT MAX (mld_kenmerkmelding_waarde)
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = ak.mld_melding_key
AND k.mld_srtkenmerk_key = 283))) fclt_f_evenement, -- Geen kenmerk EBMS? Dan pakken we het "normale" evenement kenmerk.
ak.bedrijfsnaamid,
ak.fclt_f_company,
ak.billtoid,
ak.billto,
ak.fclt_f_lokatie,
ak.ordernummer,
ak.waarde_oranje,
ak.waarde_rood
FROM arai_v_rap_mld_klachten ak;
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
--- 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
(
mld_melding_key,
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,
mld_melding_note_omschrijving,
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
m.mld_melding_key,
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 mld_melding_note_omschrijving
FROM mld_melding_note
WHERE mld_melding_note_key IN
(SELECT MAX (mld_melding_note_key)
FROM mld_melding_note mn
WHERE mn.mld_melding_key = m.mld_melding_key))
mld_melding_note_omschrijving,
(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
(
mld_melding_key,
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,
mld_melding_note_omschrijving,
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
m.mld_melding_key,
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 mld_melding_note_omschrijving
FROM mld_melding_note
WHERE mld_melding_note_key IN
(SELECT MAX (mld_melding_note_key)
FROM mld_melding_note mn
WHERE mn.mld_melding_key = m.mld_melding_key))
mld_melding_note_omschrijving,
(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;
-- En nu een view incl of een klacht terecht is of niet
CREATE OR REPLACE VIEW arai_v_rap_mld_tot_klachten_3
AS
SELECT a1.*, COALESCE (fac_usrdata_omschr, 'NVT') klacht
FROM arai_v_rap_mld_klachten_2 a1,
mld_opdr o,
(SELECT *
FROM mld_kenmerkopdr
WHERE mld_kenmerk_key = 2341) mko,
fac_usrdata ud
WHERE a1.mld_melding_key = o.mld_melding_key
AND o.mld_opdr_key = mko.mld_opdr_key(+)
AND fac.safe_to_number (mko.mld_kenmerkopdr_waarde) =
fac_usrdata_key(+)
UNION ALL
SELECT a2.*,
COALESCE (
(SELECT f.fac_usrdata_omschr
FROM fac_usrdata f,
( SELECT MAX (mo.mld_opdr_bedrijfopdr_volgnr),
mko.mld_kenmerkopdr_waarde,
m.mld_melding_key
FROM mld_kenmerkopdr mko, mld_opdr mo, mld_melding m
WHERE mko.mld_opdr_key = mo.mld_opdr_key
AND mo.mld_melding_key = m.mld_melding_key
AND mko.mld_kenmerk_key = 2341
GROUP BY m.mld_melding_key, mko.mld_kenmerkopdr_waarde)
sub
WHERE f.fac_usrdata_key =
fac.safe_to_number (sub.mld_kenmerkopdr_waarde)
AND sub.mld_melding_key = a2.mld_melding_key),
'NVT')
klacht
FROM arai_v_rap_mld_org_klachten_2 a2
UNION ALL
SELECT a3.*,
COALESCE (
(SELECT f.fac_usrdata_omschr
FROM fac_usrdata f,
( SELECT MAX (mo.mld_opdr_bedrijfopdr_volgnr),
mko.mld_kenmerkopdr_waarde,
m.mld_melding_key
FROM mld_kenmerkopdr mko, mld_opdr mo, mld_melding m
WHERE mko.mld_opdr_key = mo.mld_opdr_key
AND mo.mld_melding_key = m.mld_melding_key
AND mko.mld_kenmerk_key = 2341
GROUP BY m.mld_melding_key, mko.mld_kenmerkopdr_waarde)
sub
WHERE f.fac_usrdata_key =
fac.safe_to_number (sub.mld_kenmerkopdr_waarde)
AND sub.mld_melding_key = a3.mld_melding_key),
'NVT')
klacht
FROM arai_v_rap_mld_bez_klachten_2 a3;
--------------------------------------------------------------------------------------------------------------------------
-- 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
(
mld_melding_key,
fclt_f_meldingnr,
fclt_f_type,
fclt_discipline_key,
fclt_f_vakgroep,
mld_stdmelding_key,
fclt_f_melding,
mld_melding_omschrijving,
mld_melding_opmerking,
mld_melding_note_omschrijving,
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 ---
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
-- Gedetaileerde versie van de algemene view mld_v_nettotijdsbesteding.
-- De uren van ARAI moeten niet per persoon per opdracht worden weergegeven maar per persoon per dag.
CREATE OR REPLACE VIEW arai_v_persoonuren
(
mld_opdr_key,
prs_perslid_key,
naam,
datum,
ntb_prs
)
AS
SELECT a.mld_opdr_key,
a.prs_perslid_key,
naam,
TRUNC(a.start_date + delta) datum,
SUM(
CASE
WHEN TRUNC(a.end_date, 'DD') = TRUNC(a.start_date, 'DD')
THEN a.lastdate - a.firstdate
WHEN delta = 0
THEN TRUNC(a.firstdate + 1) - a.firstdate
WHEN TRUNC(a.start_date, 'DD') + delta = TRUNC(a.end_date, 'DD')
THEN a.lastdate - TRUNC(a.lastdate)
ELSE 1
END)
ntb_prs
FROM (SELECT TRUNC(firstdate) start_date, -- Voor CONNECT BY LEVEL de TRUNC van firstdate en lastdate bepalen anders gaat het fout als de tijd van lastdate kleiner is als van firstdate.
TRUNC(lastdate) end_date,
firstdate,
lastdate,
prs_perslid_key,
prs_perslid_naam_full naam,
mld_opdr_key
FROM ( SELECT st.fac_srtnotificatie_code,
LAG(t.fac_tracking_datum)
OVER(PARTITION BY fac_tracking_refkey
ORDER BY fac_tracking_datum)
AS firstdate,
t.fac_tracking_datum lastdate,
t.prs_perslid_key,
p.prs_perslid_naam_full,
fac_tracking_refkey mld_opdr_key,
t.fac_tracking_key
FROM fac_tracking t,
fac_srtnotificatie st,
prs_v_perslid_fullnames_all p
WHERE t.fac_srtnotificatie_key = st.fac_srtnotificatie_key
AND t.prs_perslid_key = p.prs_perslid_key
AND st.fac_srtnotificatie_code IN ('ORDACP',
'ORDHLT',
'ORDRSM',
'ORDAFM',
'ORDCAN') -- De gecancelde opdrachten zijn nog meegenomen.
AND fac_tracking_datum >= TO_DATE('01-05-2017','dd-mm-yyyy') -- oude records zijn nog niet ingevuld.
ORDER BY fac_tracking_datum,
prs_perslid_key) xx
WHERE xx.fac_srtnotificatie_code IN ('ORDHLT',
'ORDAFM',
'ORDCAN')) a, -- De gecancelde opdrachten zijn nog meegenomen.
( SELECT LEVEL - 1 AS delta
FROM DUAL
CONNECT BY LEVEL - 1 <= (SELECT MAX(end_date - start_date)
FROM (SELECT TRUNC(firstdate) start_date, -- Voor CONNECT BY LEVEL de TRUNC van firstdate en lastdate bepalen anders gaat het fout als de tijd van lastdate kleiner is als van firstdate.
TRUNC(lastdate) end_date,
firstdate,
lastdate,
prs_perslid_key,
mld_opdr_key
FROM ( SELECT st.fac_srtnotificatie_code,
LAG(t.fac_tracking_datum)
OVER(PARTITION BY fac_tracking_refkey
ORDER BY fac_tracking_datum)
AS firstdate,
t.fac_tracking_datum lastdate,
t.prs_perslid_key,
p.prs_perslid_naam_full,
fac_tracking_refkey mld_opdr_key
FROM fac_tracking t,
fac_srtnotificatie st,
prs_v_perslid_fullnames_all p
WHERE t.fac_srtnotificatie_key = st.fac_srtnotificatie_key
AND t.prs_perslid_key = p.prs_perslid_key
AND st.fac_srtnotificatie_code IN ('ORDACP',
'ORDHLT',
'ORDRSM',
'ORDAFM',
'ORDCAN') -- De gecancelde opdrachten zijn nog meegenomen.
AND fac_tracking_datum >= TO_DATE('01-05-2017','dd-mm-yyyy') -- oude records zijn nog niet ingevuld.
ORDER BY fac_tracking_datum,
prs_perslid_key) xx
WHERE xx.fac_srtnotificatie_code IN ('ORDHLT',
'ORDAFM',
'ORDCAN')))) -- De gecancelde opdrachten zijn nog meegenomen.
WHERE a.start_date + delta <= a.end_date
GROUP BY a.mld_opdr_key,
a.prs_perslid_key,
naam,
TRUNC(a.start_date + delta)
ORDER BY a.prs_perslid_key,
datum,
a.mld_opdr_key;
CREATE OR REPLACE VIEW arai_v_export_urenregistratie (
result,
result_order
)
AS
SELECT REPLACE(REPLACE(m.mld_melding_key
|| ';'
|| sm.mld_stdmelding_omschrijving
|| ';'
|| p.prs_perslid_naam
|| ';'
|| p.prs_perslid_voornaam
|| ';'
|| m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr
|| ';'
|| fac.gettrackingdate('ORDAFM', o.mld_opdr_key)
|| ';'
|| ROUND(t.ntb_prs*24*60,2)
,CHR (13), ''), CHR (10), '<ret>'), m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr
FROM mld_opdr o, mld_v_nettotijdsbesteding t, mld_melding m, mld_stdmelding sm, prs_perslid p
WHERE o.MLD_STATUSOPDR_KEY = 6
AND o.MLD_TYPEOPDR_KEY = 281
AND m.mld_melding_key = o.mld_melding_key
AND sm.mld_stdmelding_key = m.mld_stdmelding_key
AND o.mld_opdr_key = t.mld_opdr_key
AND p.prs_perslid_key = t.prs_perslid_key
AND mld_opdr_datumbegin >= to_date('01-05-2017','dd-mm-yyyy');
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
-- Alle opdrachten van type 'Intern' (key = 281) die zijn afgemeld (status = 6) maar nog niet verwerkt (status = 7) vanaf 1 mei 2017 (release ARAI24).
-- mld_statusopdr_key = 6 betekent 'afgemelde' opdracht.
-- mld_typeopdr_key = 281 betekent 'interne' opdracht (dwz urenregistratie opdrachttype)
-- Let op: Het kan zijn dat er geen tijdsbesteding voor een opdracht wordt berekend, dat komt omdat de opdracht niet eerst is geaccepteerd (expliciet is gestart).
-- Deze opdrachten die zijn afgemeld worden niet meegenomen, omdat hiervoor geen registratie in mld_opdr_uren kan worden gedaan.
-- Alle door een persoon bestede tijd (aantal_uren, uitgedrukt in een meestal gebroken getal in uren) wordt op afmeld-datum van de opdracht geregistreerd in mld_opdr_uren.
-- Er wordt van uitgegaan dat aan het eind van de werkdag de behandeling op HALT wordt gezet en 's morgens weer wordt HERVAT
-- om een goede urenregistratie te krijgen.
-- Als de uren per dag meer dan 8 uur is, wordt de behandeling 's morgens niet Hervat en 's avonds niet op HALT gezet.
-- ARAI#47067: Uren berekening niet robuust tegen handmatig ingevulde uren, aangepast door een extra conditie (not exists) toe te voegen die bestaande urenregistratie
-- van een opdracht op de datum van een persoon uitsluit
CURSOR c_opdr_met_uren
IS
SELECT o.mld_opdr_key,
t.prs_perslid_key,
t.datum,
t.ntb_prs * 24 aantal_uur
FROM mld_opdr o,
arai_v_persoonuren t
WHERE o.MLD_STATUSOPDR_KEY IN (5, 6, 8) -- Toegekend, Afgemeld, Geaccepteerd/Onderbroken
AND o.MLD_TYPEOPDR_KEY = 281
AND o.mld_opdr_key = t.mld_opdr_key
AND mld_opdr_datumbegin >= TO_DATE('01-05-2017', 'dd-mm-yyyy')
AND NOT EXISTS ( SELECT 'x' FROM mld_opdr_uren x
WHERE o.mld_opdr_key = x.mld_opdr_key
AND t.datum = x.mld_opdr_uren_datum
AND t.prs_perslid_key = x.prs_perslid_key);
-- Hieronder alle afgemelde opdrachten, met of zonder uur-besteding, die willen we wel meenemen in de query, zodat ze kunnen worden verwerkt (status 6->7) (en de volgende keer niet meer meedoen).
CURSOR c_opdr_metofzonder_uren
IS
SELECT o.mld_opdr_key
FROM mld_opdr o
WHERE o.MLD_STATUSOPDR_KEY = 6
AND o.MLD_TYPEOPDR_KEY = 281
AND mld_opdr_datumbegin >= to_date('01-05-2017', 'dd-mm-yyyy');
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
BEGIN
v_errormsg := 'Geen akties';
FOR c_uur IN c_opdr_met_uren
LOOP
-- Least, omdat aantal uren maximaal 3 cijfers kan bestaan in DB
INSERT INTO mld_opdr_uren(mld_opdr_key,
mld_opdr_uren_datum,
prs_perslid_key,
mld_opdr_uren_besteed,
mld_opdr_uren_status)
SELECT c_uur.mld_opdr_key,
TRUNC(c_uur.datum),
c_uur.prs_perslid_key,
LEAST(999, ROUND(c_uur.aantal_uur, 2)),
3
FROM DUAL;
END LOOP;
FOR c_uur IN c_opdr_metofzonder_uren
LOOP
-- ARAI#47067: Uren berekening niet robuust tegen handmatig ingevulde uren, aanpassing is dat nu status 9 (=Afgerond) ipv status 7 (verwerkt) wordt gezet.
mld.setopdrachtstatus (c_uur.mld_opdr_key, 9, 4);
END LOOP;
COMMIT;
END;
/
-- Procedure om alle dagrapportage meldingen automatisch af te melden (dagelijks)
CREATE OR REPLACE PROCEDURE arai_export_dagrapafm (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2)
AS
CURSOR arai_dagrap_afm
IS
SELECT m.mld_melding_key, m.mld_melding_status
FROM mld_melding m, mld_stdmelding std, mld_discipline md
WHERE m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = md.ins_discipline_key
AND md.ins_discipline_key = 1541
AND m.mld_melding_status != 5;
BEGIN
FOR rec IN arai_dagrap_afm
LOOP
BEGIN
UPDATE mld_melding
SET mld_melding_status = 5
WHERE mld_melding_key = rec.mld_melding_key;
fac.trackaction ('MLDAFM',
rec.mld_melding_key,
NULL,
NULL,
NULL);
END;
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,
pemailkey IN NUMBER
)
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);
v_gebkey NUMBER (10);
v_gebcode VARCHAR2 (4000);
v_standnr NUMBER (10);
v_standnrpos 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 pemailkey 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 = pemailkey;
ELSE
IF pto = 'gielissen@arai.facilitor.nl'
THEN
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 = 'hKkBBqPfzvKMupzSXZwblvsmTPHXMT';
ELSE
IF pto = 'beoordelenriggingplan@arai.facilitor.nl'
THEN
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 = 'ciyRGcuqAgWkymQkVecNHYGsQOxKrE';
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;
END IF;
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;
WHEN 'storingentd@arai.facilitor.nl'
THEN
defaultstdmelding := 3741;
v_mailadres_kenmerk_key := 2501;
WHEN 'gielissen@arai.facilitor.nl'
THEN
CASE
WHEN UPPER (psubject) LIKE 'SERVICEBON%'
THEN
CASE
WHEN UPPER (psubject) LIKE '%MANSVELD%'
THEN
defaultstdmelding := 460;
v_mailadres_kenmerk_key := 46;
WHEN UPPER (psubject) LIKE '%MTD%'
THEN
defaultstdmelding := 3443;
v_mailadres_kenmerk_key := 46;
END CASE;
END CASE;
WHEN 'beoordelenriggingplan@arai.facilitor.nl '
THEN
defaultstdmelding := 4141;
v_mailadres_kenmerk_key := 3321;
--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.
v_gebcode := LPAD(v_mldnum,2,'0'); -- gebouwbepaling voor Gielissen meldingen
IF defaultstdmelding IN (460, 3443)
THEN
SELECT alg_gebouw_key
INTO v_gebkey
FROM alg_gebouw
WHERE alg_gebouw_code = v_gebcode;
-- Eerst bepalen waar in het onderwerp het standnummer staat
v_standnrpos := INSTR(psubject, 'Standnr', 1, 1) + 1;
-- Nu we de positie van standnr weten kunnen we de waarde na de spatie ophalen en de hal ervoor plakken
SELECT AVS.EBMS_KEY
INTO v_standnr
FROM ARAI_V_STANDNUMMERS AVS,
(SELECT SUBSTR(psubject,
INSTR(psubject, ' ', v_standnrpos, 1) + 1,
INSTR(psubject, ' ', v_standnrpos, 2) - INSTR(psubject, ' ', v_standnrpos, 1) - 1) STNR FROM DUAL) SUB
WHERE AVS.STANDNUMMER = fac.safe_to_number (v_gebcode) || '.' || SUB.STNR;
END IF;
-- 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
IF fac.getdbversion() >= 'DB36' -- DB36 forward compatible
THEN
IF fac.getsetting('mld_melding_actiecode') = 1
THEN
UPDATE mld_melding
SET mld_melding_actiecode = 1+128 -- Backoffice + Attentie
WHERE mld_melding_key = v_mldkey;
END IF;
ELSE
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;
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 melding toevoegen....
IF defaultstdmelding IS NOT NULL
THEN
IF defaultstdmelding IN (460, 3443)
THEN
BEGIN
INSERT INTO mld_melding (mld_melding_module,
mld_meldbron_key,
mld_melding_datum,
mld_alg_locatie_key,
mld_alg_onroerendgoed_keys,
mld_melding_onderwerp,
mld_melding_omschrijving,
mld_melding_status,
mld_stdmelding_key,
prs_perslid_key,
prs_perslid_key_voor,
prs_kostenplaats_key,
mld_melding_spoed)
VALUES ('MLD',
4, -- email
SYSDATE,
1, -- zie ook HSLE#33348: RAI hier kiezen (alg_locatie_key = 1)
v_gebkey,
psubject,
pbody,
NULL,
defaultstdmelding,
sender,
sender,
kostenplaats,
3)
RETURNING mld_melding_key
INTO v_mldkey;
INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde)
VALUES (v_mldkey, 863, 35181); -- PLMA 2019
INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde)
VALUES (v_mldkey, 2901, v_standnr); -- EBMS Standnr
-- 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;
ELSE
-- 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 gielissen of niet
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,
1 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,
COALESCE(fac.safe_to_number(ES_TO.mld_kenmerkmelding_waarde),0) ES_TO_score -- Aantal stands schoongemaakt (ivm 7% marge)
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,
(SELECT * FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 2721) ES_TO -- Aantal stands schoongemaakt
-- 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
AND ES_TO.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', (((CASE WHEN ES_01_score <= 13 THEN 13 ELSE ES_01_score END) - 13) * 2) +
(((CASE WHEN ES_02_score <= 10 THEN 10 ELSE ES_02_score END) - 10) * 2) +
-- ((DECODE(ES_02_score, 0, 2, 1, 2, ES_02_score) - 2) * 2) +
(((CASE WHEN ES_05_score <= (ES_TO_score * 0.07) THEN (ES_TO_score * 0.07) ELSE ES_05_score END) - (ES_TO_score * 0.07)) * 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,
1 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,
1 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,
1 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,
1 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,
1 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,
1 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,
1 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,
1 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,
1 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,
1 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,
1 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);
FUNCTION get_flex_value (
pmodule IN VARCHAR2,
p_kenmerk_key IN NUMBER,
p_ref_key IN NUMBER,
p_kenmerkdomein_key IN NUMBER,
p_niveau IN VARCHAR2 DEFAULT NULL)
RETURN VARCHAR2;
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;
FUNCTION get_flex_value (
pmodule IN VARCHAR2,
p_kenmerk_key IN NUMBER,
p_ref_key IN NUMBER,
p_kenmerkdomein_key IN NUMBER,
p_niveau IN VARCHAR2 DEFAULT NULL)
RETURN VARCHAR2
AS
v_value VARCHAR2 (4000);
v_kenmerkdomein_key NUMBER (10);
BEGIN
v_value :=
flx.getflex (pmodule,
p_kenmerk_key,
p_ref_key,
p_niveau);
IF p_kenmerkdomein_key IS NOT NULL
THEN
v_value := flx.getdomeinwaarde (p_kenmerkdomein_key, v_value);
END IF;
RETURN v_value;
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,
mld_stdmelding_srtinst si
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.mld_stdmelding_key = si.mld_stdmelding_key
AND si.ins_srtinstallatie_key = DECODE(si.ins_srtinstallatie_niveau,
'S', i.ins_srtdeel_key,
'G', s.ins_srtgroep_key,
'D', g.ins_discipline_key);
CREATE OR REPLACE VIEW arai_v_rap_dagrap_gegevens
(
melding_key,
afdeling,
evenement,
meldingdatum,
kenmerkvolgnr,
kenmerkoms,
kenmerkwaarde
)
AS
SELECT DISTINCT
m.mld_melding_key,
std.mld_stdmelding_omschrijving || ' '
|| (SELECT fac_usrdata_omschr
FROM fac_usrdata
WHERE fac_usrdata_key =
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND k.mld_srtkenmerk_key = 1041)),
(SELECT evenement
FROM arai_v_events
WHERE arai_events_key =
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND k.mld_srtkenmerk_key = 283)),
m.mld_melding_datum,
mk.mld_kenmerk_volgnummer,
msk.mld_srtkenmerk_omschrijving,
-- TO_CHAR (m.mld_melding_datum, 'hh24:mi') || ' ' || -- Voor het sorteren op het inlegmoment van de melding
SUBSTR (p.prs_perslid_voornaam, 1, 1)
|| SUBSTR (p.prs_perslid_naam, 1, 1)
|| ': '
|| ARAI.get_flex_value ('MLD',
mk.mld_kenmerk_key,
m.mld_melding_key,
msk.fac_kenmerkdomein_key,
'm')
FROM mld_srtkenmerk msk,
mld_kenmerk mk,
mld_kenmerkmelding km,
mld_melding m,
mld_stdmelding std,
prs_perslid p
WHERE msk.mld_srtkenmerk_key = mk.mld_srtkenmerk_key
AND msk.mld_srtkenmerk_key IN
(1001,
961,
1002,
943,
941,
944,
942,
922,
1003,
1029,
1030,
921,
1021,
1022,
1028,
1027,
1024,
1025,
1026,
1023)
AND km.mld_kenmerk_key = mk.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND m.prs_perslid_key = p.prs_perslid_key
AND std.mld_ins_discipline_key = 1541;
-- Onderstaande is t.b.v. de UDR dagrap, bevat meer kenmerksoorten
CREATE OR REPLACE VIEW arai_v_rap_dagrap_extradata
(
melding_key,
afdeling,
evenement,
meldingdatum,
kenmerkvolgnr,
kenmerkoms,
kenmerkwaarde
)
AS
SELECT DISTINCT
m.mld_melding_key,
std.mld_stdmelding_omschrijving,
(SELECT evenement
FROM arai_v_events
WHERE arai_events_key =
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND k.mld_srtkenmerk_key = 283)),
m.mld_melding_datum,
mk.mld_kenmerk_volgnummer,
msk.mld_srtkenmerk_omschrijving,
SUBSTR (p.prs_perslid_voornaam, 1, 1) || SUBSTR (p.prs_perslid_naam, 1, 1) || ': ' ||
ARAI.get_flex_value (
'MLD',
mk.mld_kenmerk_key,
m.mld_melding_key,
msk.fac_kenmerkdomein_key,
'm')
FROM mld_srtkenmerk msk,
mld_kenmerk mk,
mld_kenmerkmelding km,
mld_melding m,
mld_stdmelding std,
prs_perslid p
WHERE msk.mld_srtkenmerk_key = mk.mld_srtkenmerk_key
AND msk.mld_srtkenmerk_key IN
(1001,
961,
1002,
943,
941,
944,
942,
922,
1003,
1029,
1030,
921,
1021,
1022,
1028,
1027,
1024,
1025,
1026,
1023,
-- 1104,
-- 1103,
1106,
1141,
1041)
AND km.mld_kenmerk_key = mk.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND m.prs_perslid_key = p.prs_perslid_key
AND std.mld_ins_discipline_key = 1541;
-- Deze dagrap_report is voor gebruik als rapportage in Facilitor, hier kan ook historie in bekeken worden.
CREATE OR REPLACE VIEW arai_v_rap_dagrap_report
(
evenement,
meldingdatum,
weeknummer,
kenmerkoms,
event_managenent,
food_beverage,
safety_security,
front_office,
facilities_warehouse,
technical_services,
traffic_management,
ict,
flexmanagement_hcc,
hide_f_sort
)
AS
SELECT x.*, y.kenmerkvolgnr
FROM ( SELECT afdeling,
evenement || ' ('
|| (SELECT MAX(fac.safe_to_number(SUBSTR (
a.kenmerkwaarde,
4,
INSTR (
a.kenmerkwaarde,
':')
+ 50)))
FROM arai_v_rap_dagrap_gegevens a
WHERE a.kenmerkoms LIKE '%Bezoeker%'
AND a.evenement = b.evenement)
|| ' bezoekers)'
evenement,
TRUNC (meldingdatum),
TO_CHAR (meldingdatum, 'YYYY-IW') week,
kenmerkoms,
LISTAGG (kenmerkwaarde, ', ')
WITHIN GROUP (ORDER BY meldingdatum)
kenmerkwaarde
FROM arai_v_rap_dagrap_gegevens b
GROUP BY afdeling, evenement, kenmerkoms, meldingdatum) PIVOT (MIN(kenmerkwaarde)
FOR afdeling
IN ('Event Management',
'Food & Beverage',
'Safety & Security',
'Front Office',
'Facilities/Warehouse',
'Technical Services',
'Traffic Management',
'ICT',
'Flexmanagement/HCC')) x
LEFT JOIN
( SELECT MIN (kenmerkvolgnr) kenmerkvolgnr, kenmerkoms
FROM arai_v_rap_dagrap_gegevens
GROUP BY kenmerkoms) y
ON x.kenmerkoms = y.kenmerkoms
ORDER BY x.evenement;
-- Nieuwe dagrapportage, klaar voor styling
CREATE OR REPLACE VIEW arai_v_rap_dagrap_style
(
datum,
afdeling,
evenement,
kenmerkoms,
kenmerkwaarde
)
AS
SELECT TRUNC (SYSDATE - 1) datum, x.*
FROM ( SELECT afdeling,
evenement || ' ('
|| (SELECT MAX(fac.safe_to_number(SUBSTR (
a.kenmerkwaarde,
4,
INSTR (
a.kenmerkwaarde,
':')
+ 50)))
FROM arai_v_rap_dagrap_gegevens a
WHERE a.kenmerkoms LIKE '%Bezoeker%'
AND a.evenement = b.evenement
AND a.meldingdatum BETWEEN TRUNC (SYSDATE - 1)
+ 6 / 24
AND TRUNC (SYSDATE)
+ 6 / 24)
|| ' bezoekers)'
evenement,
kenmerkoms,
LISTAGG (kenmerkwaarde, ', ')
WITHIN GROUP (ORDER BY meldingdatum)
kenmerkwaarde
FROM arai_v_rap_dagrap_gegevens b
WHERE b.meldingdatum BETWEEN TRUNC (SYSDATE - 1) + 6 / 24
AND TRUNC (SYSDATE) + 6 / 24 -- Alleen meldingen tussen 06:00 en 06:00 uur (24 uur) van de vorige dag
GROUP BY afdeling, evenement, kenmerkoms
ORDER BY DECODE (afdeling,
'Event Management Congres Centre', 1,
'Event Management Holland Complex', 2,
'Event Management Europa Complex', 3,
'Event Management Gehele complex', 4,
'Food & Beverage', 5,
'Safety & Security', 6,
'Front Office', 7,
'Facilities/Warehouse', 8,
'Technical Services', 9,
'Traffic Management', 10,
'ICT', 11,
'Flexmanagement/HCC', 12,
13),
DECODE (kenmerkoms, 'Operationele bijzonderheden', 1, 2)) x,
DUAL;
-- Deze dagrap is voor dagelijkse pdf export, hier zijn alleen evenementen zichtbaar die de vorige dag zijn afgerond.
CREATE OR REPLACE VIEW arai_v_rap_dagrap
(
evenement,
kenmerkoms,
event_management,
food_beverage,
safety_security,
front_office,
facilities_warehouse,
technical_services,
traffic_management,
ict,
flexmanagement_hcc,
hide_f_sort
)
AS
SELECT x.*, y.kenmerkvolgnr
FROM ( SELECT afdeling,
evenement || ' ('
|| (SELECT MAX(fac.safe_to_number(SUBSTR (
a.kenmerkwaarde,
4,
INSTR (
a.kenmerkwaarde,
':')
+ 50)))
FROM arai_v_rap_dagrap_gegevens a
WHERE a.kenmerkoms LIKE '%Bezoeker%'
AND a.evenement = b.evenement
AND a.meldingdatum BETWEEN trunc (sysdate -1) + 6/24 AND trunc (sysdate) + 6/24)
|| ' bezoekers)'
evenement,
kenmerkoms,
LISTAGG (kenmerkwaarde, ', ')
WITHIN GROUP (ORDER BY meldingdatum)
kenmerkwaarde
FROM arai_v_rap_dagrap_gegevens b
WHERE b.meldingdatum BETWEEN trunc (sysdate -1) + 6/24 AND trunc (sysdate) + 6/24 -- Alleen meldingen tussen 06:00 en 06:00 uur (24 uur) van de vorige dag
GROUP BY afdeling, evenement, kenmerkoms) PIVOT (MIN(kenmerkwaarde)
FOR afdeling
IN ('Event Management',
'Food & Beverage',
'Safety & Security',
'Front Office',
'Facilities/Warehouse',
'Technical Services',
'Traffic Management',
'ICT',
'Flexmanagement/HCC')) x
LEFT JOIN
( SELECT MIN (kenmerkvolgnr) kenmerkvolgnr, kenmerkoms
FROM arai_v_rap_dagrap_gegevens
GROUP BY kenmerkoms) y
ON x.kenmerkoms = y.kenmerkoms
ORDER BY x.evenement;
-- UDR samengevoegd met de dagrapportage. Voor meer filtering mogelijkheden.
CREATE OR REPLACE VIEW arai_v_rap_dagrap_udr
(
meldingnr,
melder,
afdeling,
fclt_3d_afdeling_key,
invoerder,
fclt_3d_discipline_key,
groep,
subgroep,
melding_status,
datum,
opmerking,
evenement,
kenmerk,
kenmerkwaarde
)
AS
SELECT mu.meldingnummer,
mu.melder,
mu.afdeling_omschrijving,
mu.fclt_3d_afdeling_key,
mu.invoerder,
mu.fclt_3d_discipline_key,
mu.subproductgroep,
(SELECT f.fac_usrdata_omschr
from fac_usrdata f where f.fac_usrdata_key =
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = mu.melding_key
AND k.mld_srtkenmerk_key IN (1103, 1104))) sub,
mu.melding_status,
TRUNC (mu.melding_datum),
mu.melding_opmerking,
ag.evenement,
ag.kenmerkoms,
ag.kenmerkwaarde
FROM mld_v_udr_melding mu, arai_v_rap_dagrap_extradata ag
WHERE mu.melding_key = ag.melding_key;
CREATE OR REPLACE VIEW arai_v_rap_mat_uur
(
datum,
aanvrager,
organisatie,
categorie,
referentie,
bedrag,
status,
kostenplaatsgroep,
kostenplaatsnr,
kostenplaats,
kostensoortgroep,
kostensoortnr,
kostensoort,
ordernr,
locatie,
district,
regio,
fclt_3d_locatie_key,
fclt_3d_afdeling_key,
materiaalkosten,
uren,
uurtarief,
correctie,
behandelaar,
uitvoerder,
vakgroeptype,
vakgroep,
evenement,
opdrkey
)
AS
SELECT f.*,
mo.mld_opdr_materiaal,
COALESCE (mo.mld_opdr_uren, mou.mld_opdr_uren_besteed) uren,
CASE
WHEN mo.mld_opdr_uurloon IS NULL THEN p.prs_perslid_uurloon
WHEN mo.mld_opdr_uurloon < 0.01 THEN p.prs_perslid_uurloon
ELSE
mo.mld_opdr_uurloon
END,
f.bedrag - COALESCE (mo.mld_opdr_materiaal, 0) - COALESCE (mld_opdr_uren * mo.mld_opdr_uurloon, 0) correctie,
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = mo.prs_perslid_key)
behandelaar,
mu.naam,
srt.ins_srtdiscipline_omschrijving,
md.ins_discipline_omschrijving,
mko.evenement,
mo.mld_opdr_key
FROM mld_opdr mo,
mld_v_uitvoerende mu,
mld_discipline md,
ins_srtdiscipline srt,
mld_melding m,
mld_stdmelding std,
prs_perslid p,
mld_opdr_uren mou,
( SELECT datum,
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 || ')',
'')
aanvrager,
d.prs_afdeling_naam organisatie,
categorie,
categorienummer,
SUM (bedrag) bedrag,
status,
kpg.prs_kostenplaatsgrp_oms,
k.prs_kostenplaats_nr,
lcl.x ('prs_kostenplaats_omschrijving',
k.prs_kostenplaats_key,
k.prs_kostenplaats_omschrijving)
kostenplaats,
ksg.prs_kostensoortgrp_oms,
ks.prs_kostensoort_oms,
ks.prs_kostensoort_opmerking,
ordernr,
alg_locatie_code,
alg_district_omschrijving,
alg_regio_omschrijving,
alg_locatie_key,
d.prs_afdeling_key
FROM (SELECT o.prs_kostenplaats_key,
o.mld_opdr_datumbegin datum,
m.prs_perslid_key prs_perslid_key,
mdis.ins_discipline_omschrijving categorie,
sd.ins_srtdiscipline_prefix
|| m.mld_melding_key
|| '/'
|| o.mld_opdr_bedrijfopdr_volgnr
categorienummer,
COALESCE (o.mld_opdr_kosten, 0) bedrag,
s.mld_statusopdr_omschrijving status,
'MLD' module,
COALESCE (s.prs_kostensoort_key,
mdis.prs_kostensoort_key)
prs_kostensoort_key,
o.mld_opdr_ordernr ordernr,
o.mld_opdr_key kostenplaats_item_key,
-1 kostenplaats_item_child_key,
m.mld_alg_locatie_key locatie_key
FROM mld_opdr o,
mld_typeopdr ot,
mld_melding m,
mld_stdmelding s,
mld_discipline mdis,
ins_srtdiscipline sd,
mld_statusopdr s
WHERE o.mld_typeopdr_key = ot.mld_typeopdr_key
AND o.mld_melding_key = m.mld_melding_key
AND s.mld_statusopdr_key = o.mld_statusopdr_key
AND m.mld_stdmelding_key = s.mld_stdmelding_key
AND mdis.ins_discipline_key = s.mld_ins_discipline_key
AND mdis.ins_srtdiscipline_key =
sd.ins_srtdiscipline_key
AND o.mld_statusopdr_key NOT IN (1, 2, 3, 4, 10)) tab,
prs_kostenplaats k,
prs_kostenplaatsgrp kpg,
prs_kostensoort ks,
prs_kostensoortgrp ksg,
prs_perslid p,
prs_v_afdeling d,
alg_locatie l,
alg_district d,
alg_regio r
WHERE tab.prs_kostenplaats_key(+) = k.prs_kostenplaats_key
AND tab.prs_kostensoort_key = ks.prs_kostensoort_key(+)
AND k.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
AND ks.prs_kostensoortgrp_key = ksg.prs_kostensoortgrp_key(+)
AND tab.prs_perslid_key = p.prs_perslid_key(+)
AND p.prs_afdeling_key = d.prs_afdeling_key(+)
AND tab.locatie_key = l.alg_locatie_key(+)
AND l.alg_district_key = d.alg_district_key(+)
AND d.alg_regio_key = r.alg_regio_key(+)
AND datum >= TO_DATE ('01-01-2010', 'DD-MM-YYYY')
GROUP BY k.prs_kostenplaats_nr,
lcl.x ('prs_kostenplaats_omschrijving',
k.prs_kostenplaats_key,
k.prs_kostenplaats_omschrijving),
datum,
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 || ')',
''),
d.prs_afdeling_naam,
d.prs_afdeling_key,
categorie,
categorienummer,
status,
kpg.prs_kostenplaatsgrp_oms,
ksg.prs_kostensoortgrp_oms,
ks.prs_kostensoort_oms,
ks.prs_kostensoort_opmerking,
ordernr,
ksg.prs_kostensoortgrp_oms,
alg_locatie_key,
alg_district_omschrijving,
alg_regio_omschrijving,
alg_locatie_code) f,
(SELECT mkm.mld_melding_key,
mkm.mld_kenmerkmelding_waarde,
ae.evenement
FROM mld_kenmerkmelding mkm, arai_v_events ae, mld_kenmerk mk
WHERE mk.mld_srtkenmerk_key = 283
AND ae.arai_events_key =
fac.safe_to_number (mkm.mld_kenmerkmelding_waarde)
AND mkm.mld_kenmerkmelding_verwijder IS NULL
AND mk.mld_kenmerk_key = mkm.mld_kenmerk_key) mko
WHERE TO_CHAR (mo.mld_melding_key || '/' || mo.mld_opdr_bedrijfopdr_volgnr) =
f.categorienummer
AND mu.mld_uitvoerende_key = mo.mld_uitvoerende_keys
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = md.ins_discipline_key
AND md.ins_srtdiscipline_key = srt.ins_srtdiscipline_key
AND m.mld_melding_key = mo.mld_melding_key
AND mo.mld_melding_key = mko.mld_melding_key(+)
AND mou.prs_perslid_key = p.prs_perslid_key(+)
AND mo.mld_opdr_key = mou.mld_opdr_key(+);
CREATE OR REPLACE VIEW arai_v_rap_mat_uur_berek
(
datum,
aanvrager,
organisatie,
referentie,
status,
kostenplaatsnr,
kostenplaats,
kostensoortnr,
kostensoort,
materiaalkosten,
uren,
uurtarief,
behandelaar,
uitvoerder,
vakgroeptype,
vakgroep,
melding,
evenement,
opdrkey,
totaal_berekend,
correctie,
totaal_na_cor
)
AS
SELECT av.datum,
av.aanvrager,
av.organisatie,
av.referentie,
av.status,
av.kostenplaatsnr,
av.kostenplaats,
av.kostensoortnr,
av.kostensoort,
av.materiaalkosten,
SUM (av.uren),
av.uurtarief,
av.behandelaar,
av.uitvoerder,
av.vakgroeptype,
av.vakgroep,
sub2.mld_stdmelding_omschrijving,
av.evenement,
av.opdrkey,
sub.totaal,
av.correctie,
sub.totaalecht
FROM arai_v_rap_mat_uur av,
( SELECT referentie,
SUM (uren) * MAX (uurtarief)
+ COALESCE (MAX (materiaalkosten), 0)
totaal,
SUM (uren) * MAX (uurtarief)
+ COALESCE (MAX (materiaalkosten), 0)
+ COALESCE (MAX (correctie), 0)
totaalecht
FROM arai_v_rap_mat_uur
GROUP BY referentie) sub,
(SELECT std.mld_stdmelding_omschrijving, o.mld_opdr_key
FROM mld_stdmelding std, mld_melding m, mld_opdr o
WHERE m.mld_stdmelding_key = std.mld_stdmelding_key
AND o.mld_melding_key = m.mld_melding_key) sub2
WHERE av.referentie = sub.referentie AND av.opdrkey = sub2.mld_opdr_key
GROUP BY av.datum,
av.aanvrager,
av.organisatie,
av.referentie,
av.status,
av.kostenplaatsnr,
av.kostenplaats,
av.kostensoortnr,
av.kostensoort,
av.materiaalkosten,
av.uurtarief,
av.behandelaar,
av.uitvoerder,
av.vakgroeptype,
av.vakgroep,
av.evenement,
av.opdrkey,
sub.totaal,
av.correctie,
sub.totaalecht,
sub2.mld_stdmelding_omschrijving;
CREATE OR REPLACE VIEW arai_v_rap_ortec
(
melding_nr,
datumtijd,
vakgroep,
melding,
gereed,
locatie,
gebouw,
gebouw_naam,
verdieping,
ruimte,
standnummer,
onderwerp,
omschrijving,
evenement,
kenmerk_ebms,
contactpersoon,
telefoonnummer,
email,
rai_medewerker,
leverancier,
status,
looptijd
)
AS
SELECT m.mld_melding_key,
m.mld_melding_datum,
iva.ins_srtdiscipline_omschrijving,
std.mld_stdmelding_omschrijving,
m.mld_melding_einddatum,
l.alg_locatie_omschrijving,
og.alg_gebouw_code gebouw,
og.alg_gebouw_naam gebouw_naam,
og.alg_verdieping_code verdieping,
og.alg_ruimte_nr ruimte,
(SELECT eb.lokatie
FROM arai_v_ebms eb
WHERE eb.arai_ebms_key =
(SELECT mvk.mld_kenmerkmelding_waarde
FROM mld_kenmerk mk,
mld_srtkenmerk msk,
mld_v_aanwezigkenmerkmelding mvk
WHERE mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
AND mk.mld_kenmerk_key = mvk.mld_kenmerk_key
AND mvk.mld_melding_key = m.mld_melding_key
AND msk.mld_srtkenmerk_key = 141))
standnummer,
m.mld_melding_omschrijving,
m.mld_melding_opmerking,
(SELECT ae.evenement
FROM arai_v_events ae
WHERE ae.arai_events_key =
(SELECT mvk.mld_kenmerkmelding_waarde
FROM mld_kenmerk mk,
mld_srtkenmerk msk,
mld_v_aanwezigkenmerkmelding mvk
WHERE mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
AND mk.mld_kenmerk_key = mvk.mld_kenmerk_key
AND mvk.mld_melding_key = m.mld_melding_key
AND mk.mld_kenmerk_verwijder IS NULL
AND msk.mld_srtkenmerk_key = 283))
evenement,
(SELECT eb.arai_ebms_full
FROM arai_v_ebms eb
WHERE eb.arai_ebms_key =
(SELECT mvk.mld_kenmerkmelding_waarde
FROM mld_kenmerk mk,
mld_srtkenmerk msk,
mld_v_aanwezigkenmerkmelding mvk
WHERE mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
AND mk.mld_kenmerk_key = mvk.mld_kenmerk_key
AND mvk.mld_melding_key = m.mld_melding_key
AND msk.mld_srtkenmerk_key = 141))
ebms,
(SELECT mvk.mld_kenmerkmelding_waarde
FROM mld_kenmerk mk,
mld_srtkenmerk msk,
mld_v_aanwezigkenmerkmelding mvk
WHERE mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
AND mk.mld_kenmerk_key = mvk.mld_kenmerk_key
AND mvk.mld_melding_key = m.mld_melding_key
AND msk.mld_srtkenmerk_key = 3)
contactpersoon,
(SELECT mvk.mld_kenmerkmelding_waarde
FROM mld_kenmerk mk,
mld_srtkenmerk msk,
mld_v_aanwezigkenmerkmelding mvk
WHERE mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
AND mk.mld_kenmerk_key = mvk.mld_kenmerk_key
AND mvk.mld_melding_key = m.mld_melding_key
AND msk.mld_srtkenmerk_key = 7)
telefoonnummer,
(SELECT mvk.mld_kenmerkmelding_waarde
FROM mld_kenmerk mk,
mld_srtkenmerk msk,
mld_v_aanwezigkenmerkmelding mvk
WHERE mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
AND mk.mld_kenmerk_key = mvk.mld_kenmerk_key
AND mvk.mld_melding_key = m.mld_melding_key
AND msk.mld_srtkenmerk_key = 4)
email,
(SELECT mvk.mld_kenmerkmelding_waarde
FROM mld_kenmerk mk,
mld_srtkenmerk msk,
mld_v_aanwezigkenmerkmelding mvk
WHERE mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
AND mk.mld_kenmerk_key = mvk.mld_kenmerk_key
AND mvk.mld_melding_key = m.mld_melding_key
AND msk.mld_srtkenmerk_key = 61)
rai_medewerker,
(SELECT mvk.mld_kenmerkmelding_waarde
FROM mld_kenmerk mk,
mld_srtkenmerk msk,
mld_v_aanwezigkenmerkmelding mvk
WHERE mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
AND mk.mld_kenmerk_key = mvk.mld_kenmerk_key
AND mvk.mld_melding_key = m.mld_melding_key
AND msk.mld_srtkenmerk_key = 942)
leverancier,
mst.mld_statuses_omschrijving,
-- substr(cast (m.mld_melding_t_uitvoertijd as varchar2 (10)), 1, instr(cast (m.mld_melding_t_uitvoertijd as varchar2 (10)), ';')-1)
mu.doorlooptijd_werkdgn
FROM mld_melding m,
ins_v_aanwezigsrtdiscipline iva,
mld_discipline md,
mld_stdmelding std,
alg_locatie l,
alg_v_allonrgoed_gegevens og,
mld_statuses mst,
mld_v_udr_melding mu
WHERE m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = md.ins_discipline_key
AND md.ins_srtdiscipline_key = iva.ins_srtdiscipline_key
AND m.mld_alg_locatie_key = l.alg_locatie_key
AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys
AND m.mld_melding_status = mst.mld_statuses_key
AND m.mld_melding_key = mu.melding_key
AND std.mld_stdmelding_verwijder IS NULL
AND md.ins_discipline_verwijder IS NULL
AND iva.ins_srtdiscipline_key = 1;
CREATE OR REPLACE VIEW arai_v_rap_standkeuringmenu
(
mld_melding_key,
datum,
tijd,
evenement,
standnummer,
resultaat,
bevindingen,
risicoklasse,
steekproef,
apparaat,
discipline,
stdmelding,
omschrijving,
opmerking,
status,
behandelaar,
fclt_f_discipline_key
)
AS
SELECT m.mld_melding_key,
TRUNC (m.mld_melding_datum), -- datum
TO_CHAR (m.mld_melding_datum, 'hh24:mi'), -- tijdstip
(SELECT evenement
FROM arai_v_events
WHERE arai_events_key =
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND k.mld_srtkenmerk_key = 283))
evenement,
(SELECT lokatie
FROM arai_v_ebms
WHERE arai_ebms_key =
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND k.mld_srtkenmerk_key = 1261))
standnr,
(SELECT fac_usrdata_omschr
FROM fac_usrdata
WHERE fac_usrdata_key =
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND k.mld_srtkenmerk_key = 1181))
resultaat,
(SELECT fac_usrdata_omschr
FROM fac_usrdata
WHERE fac_usrdata_key =
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND k.mld_kenmerk_key = 2741))
|| ' '
|| (SELECT fac_usrdata_omschr
FROM fac_usrdata
WHERE fac_usrdata_key =
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND k.mld_kenmerk_key = 2782))
|| ' '
|| (SELECT fac_usrdata_omschr
FROM fac_usrdata
WHERE fac_usrdata_key =
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND k.mld_kenmerk_key = 2783))
|| ' '
|| (SELECT fac_usrdata_omschr
FROM fac_usrdata
WHERE fac_usrdata_key =
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND k.mld_kenmerk_key = 2784))
|| ' '
|| (SELECT fac_usrdata_omschr
FROM fac_usrdata
WHERE fac_usrdata_key =
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND k.mld_kenmerk_key = 2785))
bevindingen,
(SELECT fac_usrdata_omschr
FROM fac_usrdata
WHERE fac_usrdata_key =
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND k.mld_kenmerk_key = 2701))
risicoklasse,
DECODE (
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND k.mld_kenmerk_key = 2761),
'1',
'Ja',
'Nee')
steekproef,
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_melding_key = m.mld_melding_key
AND k.mld_kenmerk_key = 2801)
steekproef_apparaat,
md.ins_discipline_omschrijving,
std.mld_stdmelding_omschrijving,
m.mld_melding_omschrijving,
m.mld_melding_opmerking,
mst.mld_statuses_omschrijving,
m.mld_melding_behandelaar_key,
md.ins_discipline_key --fclt_f_discipline_key
FROM mld_melding m,
mld_stdmelding std,
mld_discipline md,
mld_statuses mst
WHERE m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = md.ins_discipline_key
AND m.mld_stdmelding_key = 3481 -- Standkeuringen
AND m.mld_melding_status = mst.mld_statuses_key
AND m.mld_melding_status IN (0, 1, 2, 3, 4, 99);
-- Prio opdrachten rapportages t.b.v. knoppen in mobile
CREATE OR REPLACE VIEW arai_v_rap_opdrprio
(
mld_opdr_key,
opdrachtnr,
status,
melding,
prioriteit,
behandelaar,
plaats,
omschrijving,
prs_perslid_key
)
AS
SELECT o.mld_opdr_key,
TO_CHAR (o.mld_melding_key) || '/' || o.mld_opdr_bedrijfopdr_volgnr
opdrachtnummer,
DECODE (os.mld_statusopdr_key, 8, DECODE (o.mld_opdr_halted, 1, 'Onderbroken', os.mld_statusopdr_omschrijving), os.mld_statusopdr_omschrijving) status,
std.mld_stdmelding_omschrijving,
DECODE (m.mld_melding_spoed,
'1', lcl.l ('lcl_mld_urg_kritiek'),
lcl.l ('lcl_mld_urg_hoog'))
prio,
p.prs_perslid_naam_full,
DECODE (
v.alg_plaatsaanduiding,
'',
' (' || l.alg_locatie_omschrijving || ')',
v.alg_plaatsaanduiding
|| DECODE (v.alg_plaatsomschrijving,
'', '',
' (' || v.alg_plaatsomschrijving || ')'))
plaats,
TRIM(REGEXP_REPLACE (
REGEXP_SUBSTR (o.mld_opdr_omschrijving,
'(([^ ]*)( |$)*){10}'),
'[[:space:]]',
' '))
|| '...',
p.prs_perslid_key
FROM mld_opdr o,
mld_melding m,
prs_v_perslid_fullnames p,
ins_tab_discipline d,
mld_stdmelding std,
alg_v_allonrgoed_gegevens v,
alg_locatie l,
mld_v_uitvoerende mu,
mld_statusopdr os
WHERE o.mld_melding_key = m.mld_melding_key(+)
AND m.mld_melding_spoed IN ('1', '2') -- Kritiek, hoog
AND o.prs_perslid_key = p.prs_perslid_key
AND o.mld_typeopdr_key = 281 -- Interne opdracht
AND m.mld_stdmelding_key = std.mld_stdmelding_key(+)
AND std.mld_ins_discipline_key = d.ins_discipline_key(+)
AND l.alg_locatie_key = v.alg_locatie_key
AND m.mld_alg_onroerendgoed_keys = v.alg_onroerendgoed_keys(+)
AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
AND o.mld_statusopdr_key IN (4, 5, 8)
AND o.mld_uitvoerende_keys = mu.mld_uitvoerende_key
AND o.mld_uitvoerende_keys = 21
AND os.mld_statusopdr_key = o.mld_statusopdr_key;
CREATE OR REPLACE VIEW arai_v_rap_opdrprio_normlaag
(
mld_opdr_key,
opdrachtnr,
status,
melding,
behandelaar,
plaats,
geplande_aanvang,
omschrijving,
prs_perslid_key
)
AS
SELECT o.mld_opdr_key,
TO_CHAR (o.mld_melding_key) || '/' || o.mld_opdr_bedrijfopdr_volgnr
opdrachtnummer,
DECODE (os.mld_statusopdr_key, 8, DECODE (o.mld_opdr_halted, 1, 'Onderbroken', os.mld_statusopdr_omschrijving), os.mld_statusopdr_omschrijving) status,
std.mld_stdmelding_omschrijving,
p.prs_perslid_naam_full,
DECODE (
v.alg_plaatsaanduiding,
'',
' (' || l.alg_locatie_omschrijving || ')',
v.alg_plaatsaanduiding
||
DECODE (v.alg_plaatsomschrijving,
'', '',
' (' || v.alg_plaatsomschrijving || ')')
) plaats,
o.mld_opdr_plandatum,
TRIM(regexp_replace(regexp_substr(o.mld_opdr_omschrijving, '(([^ ]*)( |$)*){10}'), '[[:space:]]',' ')) || '...',
p.prs_perslid_key
FROM mld_opdr o,
mld_melding m,
prs_v_perslid_fullnames p,
ins_tab_discipline d,
mld_stdmelding std,
alg_v_allonrgoed_gegevens v,
alg_locatie l,
mld_v_uitvoerende mu,
mld_statusopdr os
WHERE o.mld_melding_key = m.mld_melding_key(+)
AND m.mld_melding_spoed NOT IN ('1', '2') -- Niet kritiek of hoog
AND o.prs_perslid_key = p.prs_perslid_key
AND o.mld_typeopdr_key = 281 -- Interne opdracht
AND m.mld_stdmelding_key = std.mld_stdmelding_key(+)
AND std.mld_ins_discipline_key = d.ins_discipline_key(+)
AND l.alg_locatie_key = v.alg_locatie_key
AND m.mld_alg_onroerendgoed_keys = v.alg_onroerendgoed_keys(+)
AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
AND o.mld_statusopdr_key IN (4, 5, 8)
AND o.mld_uitvoerende_keys = mu.mld_uitvoerende_key
AND o.mld_uitvoerende_keys = 21
AND TRUNC (mld_opdr_plandatum) <= TRUNC (sysdate + 3)
AND os.mld_statusopdr_key = o.mld_statusopdr_key;
CREATE OR REPLACE VIEW arai_v_rap_noplan_normlaag
(
mld_opdr_key,
opdrachtnr,
status,
melding,
prioriteit,
behandelaar,
plaats,
omschrijving,
prs_perslid_key
)
AS
SELECT o.mld_opdr_key,
TO_CHAR (o.mld_melding_key) || '/' || o.mld_opdr_bedrijfopdr_volgnr
opdrachtnummer,
DECODE (os.mld_statusopdr_key, 8, DECODE (o.mld_opdr_halted, 1, 'Onderbroken', os.mld_statusopdr_omschrijving), os.mld_statusopdr_omschrijving) status,
std.mld_stdmelding_omschrijving,
DECODE (m.mld_melding_spoed,
'3', lcl.l ('lcl_mld_urg_normaal'),
lcl.l ('lcl_mld_urg_laag'))
prio,
p.prs_perslid_naam_full,
DECODE (
v.alg_plaatsaanduiding,
'',
' (' || l.alg_locatie_omschrijving || ')',
v.alg_plaatsaanduiding
||
DECODE (v.alg_plaatsomschrijving,
'', '',
' (' || v.alg_plaatsomschrijving || ')')
) plaats,
TRIM(regexp_replace(regexp_substr(o.mld_opdr_omschrijving, '(([^ ]*)( |$)*){10}'), '[[:space:]]',' ')) || '...',
p.prs_perslid_key
FROM mld_opdr o,
mld_melding m,
prs_v_perslid_fullnames p,
ins_tab_discipline d,
mld_stdmelding std,
alg_v_allonrgoed_gegevens v,
alg_locatie l,
mld_v_uitvoerende mu,
mld_statusopdr os
WHERE o.mld_melding_key = m.mld_melding_key(+)
AND m.mld_melding_spoed NOT IN ('1', '2') -- Niet kritiek of hoog
AND o.prs_perslid_key = p.prs_perslid_key
AND o.mld_typeopdr_key = 281 -- Interne opdracht
AND m.mld_stdmelding_key = std.mld_stdmelding_key(+)
AND std.mld_ins_discipline_key = d.ins_discipline_key(+)
AND l.alg_locatie_key = v.alg_locatie_key
AND m.mld_alg_onroerendgoed_keys = v.alg_onroerendgoed_keys(+)
AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
AND o.mld_statusopdr_key IN (4, 5, 8)
AND o.mld_uitvoerende_keys = mu.mld_uitvoerende_key
AND o.mld_uitvoerende_keys = 21
AND mld_opdr_plandatum IS NULL
AND os.mld_statusopdr_key = o.mld_statusopdr_key;
-- Rapport voor het controleren van keyusers
CREATE OR REPLACE VIEW arai_v_rap_keyusers
(
perslid_key,
naam,
keyuser,
laatste_login
)
AS
SELECT f.prs_perslid_key,
f.naam,
DECODE (f.key_user, 1, 'Ja', 'Nee'),
f.last_login
FROM fac_v_lcrap_fe_vs_key_data f, prs_perslid p
WHERE f.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_verwijder IS NULL;
-- Notificatie wanneer iemand nog opdrachten open heeft staan
CREATE OR REPLACE VIEW ARAI_V_NOTI_OPENOPDR
(
CODE,
SENDER,
RECEIVER,
TEXT,
KEY,
XKEY,
XSENDER,
XEMAIL,
XMOBILE
)
AS
SELECT DISTINCT 'CUST04',
NULL,
NULL,
'U heeft verlopen opdrachten',
mo.mld_melding_key || '/' || mld_opdr_bedrijfopdr_volgnr,
NULL,
NULL,
p.prs_perslid_email,
NULL
FROM mld_opdr mo,
mld_melding m,
mld_stdmelding ms,
mld_discipline md,
prs_perslid p
WHERE mo.mld_melding_key = m.mld_melding_key
AND m.mld_stdmelding_key = ms.mld_stdmelding_key
AND ms.mld_ins_discipline_key = md.ins_discipline_key
AND mo.mld_uitvoerende_keys = p.prs_perslid_key
AND md.ins_srtdiscipline_key IN (22, 101, 102)
AND mo.mld_statusopdr_key IN (5, 8, 10)
AND mo.mld_opdr_einddatum > SYSDATE - 14
AND mo.mld_opdr_einddatum < SYSDATE
UNION ALL
SELECT DISTINCT 'CUST04',
NULL,
NULL,
'U heeft verlopen opdrachten',
mo.mld_melding_key || '/' || mld_opdr_bedrijfopdr_volgnr,
NULL,
NULL,
p.prs_bedrijf_email,
NULL
FROM mld_opdr mo,
mld_melding m,
mld_stdmelding ms,
mld_discipline md,
prs_bedrijf p
WHERE mo.mld_melding_key = m.mld_melding_key
AND m.mld_stdmelding_key = ms.mld_stdmelding_key
AND ms.mld_ins_discipline_key = md.ins_discipline_key
AND mo.mld_uitvoerende_keys = p.prs_bedrijf_key
AND md.ins_srtdiscipline_key IN (22, 101, 102)
AND mo.mld_statusopdr_key IN (5, 8, 10)
AND mo.mld_opdr_einddatum > SYSDATE - 14
AND mo.mld_opdr_einddatum < SYSDATE;
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- MJOB import
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE arai_post_import_mjob (p_import_key IN NUMBER)
AS
v_errorhint VARCHAR2 (400);
BEGIN
v_errorhint := 'arai_post_import_mjob';
END;
/
CREATE OR REPLACE PROCEDURE arai_import_mjob (p_import_key IN NUMBER)
AS
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (400);
v_errorhint VARCHAR2 (400);
BEGIN
v_errorhint := 'arai_import_mjob';
-- de sequence array staat beschreven in PRS_PAC.SRC bij de prs.import_perslid proc
fac_import_ins (p_import_key);
COMMIT;
-- After import korrektie gebeurt nu...
arai_post_import_mjob(p_import_key);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
END arai_import_mjob;
/
CREATE OR REPLACE PROCEDURE arai_post_update_mjob (p_import_key IN NUMBER, p_max_ins_srtdeel_key IN NUMBER, p_max_ins_deel_key IN NUMBER)
AS
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (400);
v_errorhint VARCHAR2 (400);
v_receptnr VARCHAR2 (1000);
v_kosten VARCHAR2 (1000);
v_periode VARCHAR2 (1000);
v_perc_onderhoud VARCHAR2 (1000);
v_ctr_discipline_key NUMBER(10);
v_fin_btwtabelwaarde_key fin_btwtabelwaarde.fin_btwtabelwaarde_key%TYPE;
l_kosten ins_srtcontrole.ins_srtcontrole_materiaal%TYPE;
l_periode ins_srtcontrole.ins_srtcontrole_periode%TYPE;
l_perc_onderhoud ins_srtcontrole.ins_srtcontrole_percentage%TYPE;
v_mx_ins_srtcontroledl_xcp_key NUMBER(10);
v_kpn_bestaat NUMBER(10);
-- Flexprops in de FIP-INS Excelsheet
-- ins_kenmerkwaarde Flexprop
-- 1 Receptnummer } Srtcontrole
-- 2 Receptomschrijving }
-- 3 Totaalbedr.
-- 4 StJr
-- 5 Duur
-- 6 EiJr
-- 7 ExJr
-- 8 VvJr
-- 9 Aant. Aanw. } Aantal geregistreerde objecten
-- 10 Perc. Onderh } Percentage van dat aantal (vorige kolom) dat voor onderhoud cyclus in aanmerking komt, default 100%
-- 11 Aantal niet
-- 12 Aant.Overh.
-- 13 Eh. } Eenheid --> Stoppen we nu in standaard kolom Eenheid (kolom I)
-- 14 Cycl
-- 15 Fo
-- 16 Fonds
-- 17 Taak categorie } ctr_discipline
-- 18 kenmerk18
-- 19 kenmerk19
-- 20 kenmerk20
CURSOR c0
IS -- Taakcategorie
SELECT DISTINCT(UPPER(ins_kenmerkwaarde17)) AS ctr_discipline_omschrijving
FROM fac_imp_ins
order by ctr_discipline_omschrijving;
CURSOR c0a (p_taak_categorie VARCHAR2)
IS -- Disciplines bij 1 taakcategorie
SELECT DISTINCT(ins_discipline_key) AS ins_discipline_key
FROM fac_imp_ins i, ins_discipline d
WHERE UPPER(i.ins_discipline_omschrijving) = UPPER(d.ins_discipline_omschrijving)
AND UPPER(ins_kenmerkwaarde17) = UPPER(p_taak_categorie)
AND d.ins_discipline_verwijder IS NULL;
-- LET OP: WE GAAN ERVAN UIT DAT
-- 1. bij een Receptnummer (1) altijd dezelfde Receptomschrijving(2) en Eenheid (13) horen. M.a.w. bij 2 regels Receptnr (1) zijn (2) en (13) ook gelijk.
-- 2. een receptnummer uniek is over Taakcategorie heen (d.w.z. het kan niet voorkomen dat hetzelfde receptnummer onder taakcategorie A en B bestaat (anders moeten we cursors c1 etc ook hierop filteren)
CURSOR c1
IS -- receptnummer, receptomschrijving,
SELECT DISTINCT(ins_kenmerkwaarde1)
FROM fac_imp_ins
order by ins_kenmerkwaarde1;
-- Alle geimporteerde regels (objecten met controles) die nog geen standaard srtcontrole hebben, en dus een uitzondering controle (xcp) moeten krijgen.
CURSOR c2 (p_max_ins_deel_key NUMBER, p_receptnr VARCHAR2, p_kosten VARCHAR2, p_periode VARCHAR2, p_perc_onderhoud VARCHAR2)
IS
SELECT d.ins_deel_key, d.ins_deel_omschrijving, c.ins_srtcontrole_key, ins_kenmerkwaarde14 periode, 4,
fac.safe_to_number(replace(replace(ins_kenmerkwaarde3, '.'), ',','.')) kosten, fac.safe_to_number(replace(replace(ins_kenmerkwaarde10, '.'), ',','.')) perc_onderhoud,
fac.safe_to_date('01-01-' || ins_kenmerkwaarde8 ,'dd-mm-yyyy') verval_datum
FROM fac_imp_ins i, ins_deel d, ins_srtcontrole c, alg_ruimte r, alg_verdieping v, alg_gebouw g, alg_locatie l
WHERE i.ins_deel_omschrijving = d.ins_deel_omschrijving
AND i.alg_locatie_code = l.alg_locatie_code
AND i.alg_gebouw_code = g.alg_gebouw_code
AND i.alg_verdieping_volgnr = v.alg_verdieping_volgnr
AND i.alg_ruimte_nr = r.alg_ruimte_nr
AND d.ins_alg_ruimte_type = 'R'
AND d.ins_alg_ruimte_key = r.alg_ruimte_key
AND r.alg_verdieping_key = v.alg_verdieping_key
AND v.alg_gebouw_key = g.alg_gebouw_key
AND g.alg_locatie_key = l.alg_locatie_key
AND d.ins_deel_key > p_max_ins_deel_key
AND i.ins_kenmerkwaarde1 = p_receptnr
AND (i.ins_kenmerkwaarde3 <> p_kosten OR i.ins_kenmerkwaarde14 <> p_periode OR i.ins_kenmerkwaarde10 <> p_perc_onderhoud)
AND i.ins_kenmerkwaarde3 IS NOT NULL
AND i.ins_kenmerkwaarde14 IS NOT NULL
AND i.ins_kenmerkwaarde10 IS NOT NULL
AND i.ins_kenmerkwaarde1 = c.ins_srtcontrole_omschrijving;
-- Alle geimporteerde regels (objecten met controles) die NA cursor C2 een standaard srtcontrole hebben gekregen, maar eigenlijk toch een uitzondering controle (xcp) moeten krijgen vanwege vervaljaar via cursor 6.
-- Dus alle record met een gevuld vervaljaar (ins_kenmerkwaarde8) krijgen een xcp.
CURSOR c6 (p_max_ins_deel_key NUMBER, p_receptnr VARCHAR2, p_kosten VARCHAR2, p_periode VARCHAR2, p_perc_onderhoud VARCHAR2)
IS
SELECT d.ins_deel_key, d.ins_deel_omschrijving, c.ins_srtcontrole_key, ins_kenmerkwaarde14 periode, 4,
fac.safe_to_number(replace(replace(ins_kenmerkwaarde3, '.'), ',','.')) kosten, fac.safe_to_number(replace(replace(ins_kenmerkwaarde10, '.'), ',','.')) perc_onderhoud,
fac.safe_to_date('01-01-' || ins_kenmerkwaarde8 ,'dd-mm-yyyy') verval_datum
FROM fac_imp_ins i, ins_deel d, ins_srtcontrole c, alg_ruimte r, alg_verdieping v, alg_gebouw g, alg_locatie l
WHERE i.ins_deel_omschrijving = d.ins_deel_omschrijving
AND i.alg_locatie_code = l.alg_locatie_code
AND i.alg_gebouw_code = g.alg_gebouw_code
AND i.alg_verdieping_volgnr = v.alg_verdieping_volgnr
AND i.alg_ruimte_nr = r.alg_ruimte_nr
AND d.ins_alg_ruimte_type = 'R'
AND d.ins_alg_ruimte_key = r.alg_ruimte_key
AND r.alg_verdieping_key = v.alg_verdieping_key
AND v.alg_gebouw_key = g.alg_gebouw_key
AND g.alg_locatie_key = l.alg_locatie_key
AND d.ins_deel_key > p_max_ins_deel_key
AND i.ins_kenmerkwaarde1 = p_receptnr
AND i.ins_kenmerkwaarde3 = p_kosten
AND i.ins_kenmerkwaarde14 = p_periode
AND i.ins_kenmerkwaarde10 = p_perc_onderhoud
AND i.ins_kenmerkwaarde3 IS NOT NULL
AND i.ins_kenmerkwaarde14 IS NOT NULL
AND i.ins_kenmerkwaarde10 IS NOT NULL
AND i.ins_kenmerkwaarde1 = c.ins_srtcontrole_omschrijving
AND i.ins_kenmerkwaarde8 IS NOT NULL;
CURSOR c4 (p_max_ins_srtcontroledl_xcp NUMBER)
IS
SELECT ins_srtcontroledl_xcp_key, ins_deel_key, c.ins_srtcontrole_key, ins_srtcontrole_omschrijving,
CASE
WHEN ins_srtcontrole_materiaal IS NOT NULL AND ins_srtcontroledl_xcp_materia IS NOT NULL AND ins_srtcontrole_materiaal = ins_srtcontroledl_xcp_materia
THEN 1
ELSE 0
END set_materia_null,
CASE
WHEN ins_srtcontrole_periode IS NOT NULL AND ins_srtcontroledl_xcp_periode IS NOT NULL AND ins_srtcontrole_periode = ins_srtcontroledl_xcp_periode
THEN 1
ELSE 0
END set_periode_null,
CASE
WHEN ins_srtcontrole_percentage IS NOT NULL AND ins_srtcontroledl_xcp_perc IS NOT NULL AND ins_srtcontrole_percentage = ins_srtcontroledl_xcp_perc
THEN 1
ELSE 0
END set_perc_onderhoud_null
FROM ins_srtcontrole c, ins_srtcontroledl_xcp x
WHERE x.ins_srtcontroledl_xcp_key > p_max_ins_srtcontroledl_xcp
AND x.ins_srtcontrole_key = c.ins_srtcontrole_key;
-- Let op: de eenheid kolom I wordt (itt hetgeen ik dacht) niet in ins_srtdeel_eenheid verwerkt, maar in res_deel_eenheid.
-- Verder: ins_srtdeel_code is verder helemaal NIET uniek, niet over de DB, niet per discipline en/of groep.
-- We kunnen daarom volstaan door hier verder ook niet te groeperen op discipline of iets dergelijks, we gaan gewoon op objectsoort-code groeperen, en ze krijgen allen dezelfde eenheid.
CURSOR c3
IS
SELECT ins_srtdeel_code, res_deel_eenheid
FROM fac_imp_ins
GROUP BY ins_srtdeel_code, res_deel_eenheid;
-- Fondscodes/Projectgroepen gaan we als (gebouw)kostenplaatsen opvoeren
CURSOR c5
IS
SELECT ins_kenmerkwaarde15, ins_kenmerkwaarde16
FROM fac_imp_ins
GROUP BY ins_kenmerkwaarde15, ins_kenmerkwaarde16;
-- Ten slotte hebben we ook nog de handmatige verschuivingen vanuit Tobias TMJ of StraVIS die komen overwaaien, die willen we niet verloren laten gaan.
-- B.v. alle schilderwerk is naar jaar 2018 verschoven, die willen we niet verloren laten gaan, daarvoor maken we ins_deelsrtcontrole records aan met een plandatum [ins_deelsrtcontrole_plandatum] aan, te weten
-- voor ieder record fac_imp_ins met een gevulde kolom ExJr (7e kolom uit de FIP sheet)
CURSOR c7 (p_max_ins_deel_key NUMBER)
IS
SELECT d.ins_deel_key, d.ins_deel_omschrijving, c.ins_srtcontrole_key, fac.safe_to_date('01-01-' || ins_kenmerkwaarde7 ,'dd-mm-yyyy') plan_datum
FROM fac_imp_ins i, ins_deel d, ins_srtcontrole c, alg_ruimte r, alg_verdieping v, alg_gebouw g, alg_locatie l
WHERE i.ins_deel_omschrijving = d.ins_deel_omschrijving
AND i.alg_locatie_code = l.alg_locatie_code
AND i.alg_gebouw_code = g.alg_gebouw_code
AND i.alg_verdieping_volgnr = v.alg_verdieping_volgnr
AND i.alg_ruimte_nr = r.alg_ruimte_nr
AND d.ins_alg_ruimte_type = 'R'
AND d.ins_alg_ruimte_key = r.alg_ruimte_key
AND r.alg_verdieping_key = v.alg_verdieping_key
AND v.alg_gebouw_key = g.alg_gebouw_key
AND g.alg_locatie_key = l.alg_locatie_key
AND d.ins_deel_key > p_max_ins_deel_key
AND i.ins_kenmerkwaarde1 = c.ins_srtcontrole_omschrijving
AND i.ins_kenmerkwaarde7 IS NOT NULL;
BEGIN
v_errorhint := 'arai_post_update_mjob';
-- Eerst maar eens beginnen met de verwerking van de kostenplaatsen cursor 5
FOR rec IN c5
LOOP
SELECT COUNT(*)
INTO v_kpn_bestaat
FROM prs_kostenplaats
WHERE prs_kostenplaats_upper = UPPER(rec.ins_kenmerkwaarde15)
AND prs_kostenplaats_verwijder IS NULL;
IF v_kpn_bestaat = 0
THEN
INSERT INTO prs_kostenplaats (prs_kostenplaats_nr, prs_kostenplaats_omschrijving, prs_kostenplaats_module, prs_kostenplaats_extern, prs_kostenplaats_limietperiode, prs_kostenplaats_fiat)
VALUES(rec.ins_kenmerkwaarde15, rec.ins_kenmerkwaarde16, 'ALG', 0, 0, 1);
END IF;
END LOOP;
-- Eerst maar eens beginnen met de verwerking van ins_srtdeel_eenheid
FOR rec IN c3
LOOP
UPDATE ins_srtdeel
SET ins_srtdeel_eenheid = rec.res_deel_eenheid
WHERE ins_srtdeel_code = rec.ins_srtdeel_code
AND ins_srtdeel_key > p_max_ins_srtdeel_key
AND ins_srtdeel_verwijder IS NULL;
END LOOP;
-- Verder moet van alle ins_srtdeel die zijn toegevoegd de 'hoort bij persoon' eraf worden gehaald (sie in de standaard FIP erop is gezet), dus ins_srtdeel_binding van 17 -> 1
UPDATE ins_srtdeel
SET ins_srtdeel_binding = 1
WHERE ins_srtdeel_key > p_max_ins_srtdeel_key
AND ins_srtdeel_verwijder IS NULL;
-- Bepalen van de default BTW % 21...
SELECT MIN(fin_btwtabelwaarde_key)
INTO v_fin_btwtabelwaarde_key
FROM fin_btwtabelwaarde
WHERE fin_btwtabelwaarde_perc = 21
AND COALESCE(fin_btwtabelwaarde_verlegd,0) = 0
AND fin_btwtabelwaarde_verwijder IS NULL;
-- We gaan hier per receptnummer het MEEST UNIFORME (algemene) eruit vissen.
-- Dat doen we door te kijken waarvan de combinatie van dezelfde kosten (aant_K) met dezelfde periode het vaakst voorkomen (aant_P).
-- Voorbeeld hieronder: enkele regels bij 1 object A: recept R1 kost 100 euro per eenhied en wordt elke 2 jaar gepland, elke regel daarna heeft betrekking op ander object
-- recept(1) kosten(3) periode(14)
-- R1 100 2
-- R1 100 2
-- R1 150 2
-- R1 100 1
-- Hier is de meest algemene recept die met kosten 100 en om de 2 jaar (regel 1 en 2), de andere recepten (regel 3 en 4) zijn uitzonderingen (XCP) op de algemene regel.
-- We gaan (gebaseerd op de sheet van WaardWonen) hier ook nog eens rekening houden met Perc.Onderh, die default 100 staat.
-- Maar als de regel is 50%, dan is dat de norm, en elke afwijking van 50% is dus uitzondering, dus we gaan OOK op zoek naar de meeste regels met dezelfde Perc. Onderh.
-- Dus
-- recept(1) kosten(3) periode(14) %onderh (10)
-- R1 100 2 75
-- R1 100 2 50 <-- Hiervan zijn er 2, dit is de standaard taak (srtcontrole)
-- R1 150 2 100
-- R1 100 1 100
-- R1 100 2 50 <-- Hiervan zijn er 2, dit is de standaard taak (srtcontrole)
v_errormsg := 'Loop rec0';
FOR rec0 IN c0
LOOP
BEGIN
-- Bepalen van de ctr discipline waaronder de terugkerende taken worden vastgelegd.
SELECT MIN(ins_discipline_key)
INTO v_ctr_discipline_key
FROM ctr_discipline d, ctr_disc_params dp
WHERE dp.ctr_ins_discipline_key = d.ins_discipline_key
AND d.ins_discipline_verwijder IS NULL
AND dp.ctr_disc_params_ismjob = 1
AND UPPER(d.ins_discipline_omschrijving) = UPPER(rec0.ctr_discipline_omschrijving);
IF v_ctr_discipline_key IS NULL
THEN
-- Is niet gevonden, dan voegen we hem eerst maar eens toe...
-- Deze 2 regels zijn verplaatst uit arai_mjob_ini.sql
INSERT INTO ins_tab_discipline (ins_discipline_module, ins_discipline_omschrijving)
values ('CTR', rec0.ctr_discipline_omschrijving)
RETURNING ins_discipline_key INTO v_ctr_discipline_key;
INSERT INTO ctr_disc_params(ctr_ins_discipline_key, ctr_disc_params_controle_type, ctr_disc_params_ismjob)
SELECT v_ctr_discipline_key, 2, 1 FROM dual;
END IF;
-- Nu hebben we v_ctr_discipline_key voor onderstaande loop c1 (en de loops daar weer genest in)
-- Per Taakcategorie een autorisatie-groepen voor 'MJOB' met alleen leesrechten en schrijfrechten vastleggen (de administrator is in ini al aangemaakt)
-- WE GAAN ERVAN UIT DAT DEZE NOG NIET BESTAAT (ANDERS CRASHT DEZE PROC!)
INSERT INTO fac_groep(fac_groep_omschrijving) VALUES('MJOB-R: ' || substr(rec0.ctr_discipline_omschrijving,1,20));
-- Nu nog de autorisatiegroep MJOB met schrijfrechten
-- WE GAAN ERVAN UIT DAT DEZE NOG NIET BESTAAT (ANDERS CRASHT DEZE PROC!)
INSERT INTO fac_groep(fac_groep_omschrijving) VALUES('MJOB-W:' || substr(rec0.ctr_discipline_omschrijving,1,20));
-- 1. Eerst MJOB-R (Leesrechten): ALGUSE READ
INSERT INTO fac_groeprechten (fac_groep_key, fac_functie_key,
fac_gebruiker_prs_level_read, fac_gebruiker_prs_level_write, fac_gebruiker_alg_level_read, fac_gebruiker_alg_level_write)
SELECT
(SELECT fac_groep_key FROM fac_groep WHERE fac_groep_upper = 'MJOB-R: ' || substr(rec0.ctr_discipline_omschrijving,1,20)),
fac_functie_key,
-1, 9, -1, 9
FROM fac_functie
WHERE fac_functie_code = 'WEB_ALGUSE';
-- 2. Dan MJOB-W (Schrijfrechten): ook ALGUSE READ en GEEN! WRITE. Reden is de koppeling van vastgoed met Tobias-AX (bron). Wijzigingen zullen derhalve in de bron (Tobias-AX) moeten gebeuren.
INSERT INTO fac_groeprechten (fac_groep_key, fac_functie_key,
fac_gebruiker_prs_level_read, fac_gebruiker_prs_level_write, fac_gebruiker_alg_level_read, fac_gebruiker_alg_level_write)
SELECT
(SELECT fac_groep_key FROM fac_groep WHERE fac_groep_upper = 'MJOB-W:' || substr(rec0.ctr_discipline_omschrijving,1,20)),
fac_functie_key,
-1, 9, -1, 9
FROM fac_functie
WHERE fac_functie_code = 'WEB_ALGUSE';
v_errormsg := 'Loop rec0a';
FOR rec0a IN c0a(rec0.ctr_discipline_omschrijving)
LOOP
BEGIN
--- En tenslotte gaan we de 3 MJOB autorisatiegroepen MJOB-R, MJOB-W en MJOB-A de rechten op INSUSE, INSMAN en CTRUSE uitdelen....
-- 1. Eerst MJOB-R (Leesrechten): INSUSE READ en INSMAN READ op elke INS-discipline en CTRUSE READ op de MJOB-discipline (v_ctr_discipline_key)
INSERT INTO fac_groeprechten (fac_groep_key, fac_functie_key, ins_discipline_key,
fac_gebruiker_prs_level_read, fac_gebruiker_prs_level_write, fac_gebruiker_alg_level_read, fac_gebruiker_alg_level_write)
SELECT
(SELECT fac_groep_key FROM fac_groep WHERE fac_groep_upper = 'MJOB-R: ' || substr(rec0.ctr_discipline_omschrijving,1,20)),
fac_functie_key,
rec0a.ins_discipline_key,
-1, 9, -1, 9
FROM fac_functie
WHERE fac_functie_code = 'WEB_INSUSE';
INSERT INTO fac_groeprechten (fac_groep_key, fac_functie_key, ins_discipline_key,
fac_gebruiker_prs_level_read, fac_gebruiker_prs_level_write, fac_gebruiker_alg_level_read, fac_gebruiker_alg_level_write)
SELECT
(SELECT fac_groep_key FROM fac_groep WHERE fac_groep_upper = 'MJOB-R: ' || substr(rec0.ctr_discipline_omschrijving,1,20)),
fac_functie_key,
rec0a.ins_discipline_key,
-1, 9, -1, 9
FROM fac_functie
WHERE fac_functie_code = 'WEB_INSMAN';
INSERT INTO fac_groeprechten (fac_groep_key, fac_functie_key, ins_discipline_key,
fac_gebruiker_prs_level_read, fac_gebruiker_prs_level_write, fac_gebruiker_alg_level_read, fac_gebruiker_alg_level_write)
SELECT
(SELECT fac_groep_key FROM fac_groep WHERE fac_groep_upper = 'MJOB-R: ' || substr(rec0.ctr_discipline_omschrijving,1,20)),
fac_functie_key,
v_ctr_discipline_key,
-1, 9, -1, 9
FROM fac_functie
WHERE fac_functie_code = 'WEB_CTRUSE';
-- 2. Dan MJOB-W (Schrijfrechten): INSUSE WRITE en INSMAN WRITE op elke INS-discipline en CTRUSE WRITE op de MJOB-discipline (v_ctr_discipline_key)
INSERT INTO fac_groeprechten (fac_groep_key, fac_functie_key, ins_discipline_key,
fac_gebruiker_prs_level_read, fac_gebruiker_prs_level_write, fac_gebruiker_alg_level_read, fac_gebruiker_alg_level_write)
SELECT
(SELECT fac_groep_key FROM fac_groep WHERE fac_groep_upper = 'MJOB-W:' || substr(rec0.ctr_discipline_omschrijving,1,20)),
fac_functie_key,
rec0a.ins_discipline_key,
-1, -1, -1, -1
FROM fac_functie
WHERE fac_functie_code = 'WEB_INSUSE';
INSERT INTO fac_groeprechten (fac_groep_key, fac_functie_key, ins_discipline_key,
fac_gebruiker_prs_level_read, fac_gebruiker_prs_level_write, fac_gebruiker_alg_level_read, fac_gebruiker_alg_level_write)
SELECT
(SELECT fac_groep_key FROM fac_groep WHERE fac_groep_upper = 'MJOB-W:' || substr(rec0.ctr_discipline_omschrijving,1,20)),
fac_functie_key,
rec0a.ins_discipline_key,
-1, -1, -1, -1
FROM fac_functie
WHERE fac_functie_code = 'WEB_INSMAN';
INSERT INTO fac_groeprechten (fac_groep_key, fac_functie_key, ins_discipline_key,
fac_gebruiker_prs_level_read, fac_gebruiker_prs_level_write, fac_gebruiker_alg_level_read, fac_gebruiker_alg_level_write)
SELECT
(SELECT fac_groep_key FROM fac_groep WHERE fac_groep_upper = 'MJOB-W:' || substr(rec0.ctr_discipline_omschrijving,1,20)),
fac_functie_key,
v_ctr_discipline_key,
-1, -1, -1, -1
FROM fac_functie
WHERE fac_functie_code = 'WEB_CTRUSE';
EXCEPTION
WHEN OTHERS
THEN
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
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; -- c0a
v_errormsg := 'Loop rec c1';
FOR rec IN c1
LOOP
BEGIN
SELECT ins_kenmerkwaarde1, ins_kenmerkwaarde3, ins_kenmerkwaarde14, ins_kenmerkwaarde10
INTO v_receptnr, v_kosten, v_periode, v_perc_onderhoud
FROM (
SELECT a.ins_kenmerkwaarde1, a.ins_kenmerkwaarde3, a.ins_kenmerkwaarde14, ins_kenmerkwaarde10, count(*) aantal FROM fac_imp_ins a
WHERE a.ins_kenmerkwaarde1 = rec.ins_kenmerkwaarde1
HAVING count(*) = (SELECT MAX(COUNT(*)) FROM fac_imp_ins b
WHERE b.ins_kenmerkwaarde1 = a.ins_kenmerkwaarde1
GROUP by ins_kenmerkwaarde1, ins_kenmerkwaarde3, ins_kenmerkwaarde14, ins_kenmerkwaarde10
)
GROUP by ins_kenmerkwaarde1, ins_kenmerkwaarde3, a.ins_kenmerkwaarde14, ins_kenmerkwaarde10)
WHERE rownum = 1;
-- Algemene soort controles (terugkerende taken) toevoegen op alle soortdelen die zijn toegevoegd in deze import ( > p_max_ins_srtdeel_key)
-- Daartoe bepalen we eerst van alle controles op een objectsoort de grootste gemene deler, de rest (= afwijkingen daarop) worden xcp-records.
-- Definitie "Grootste gemene deler" = het meeste aantal records met dezelfde kosten, periode en onderhoudspercentage.
-- Fondscode ook in (laatste, zojuist ingeschoten record) ins_srtcontrole verwerken...
-- We gaan ervan uit, en dat is terecht, dat er 1 fondscode (en niet meer dan 1) bij een v_receptnr bestaat.
-- Voor het geval dat er toch is (d.i. een fout in het importbestand) doen we veiligheidshalve MAX.
-- FSN#38080: kolom AA (VvJr = vervaljaar = kenmerk8) gaan we nu ook gebruiken bij de import (deden we tot nu toe nog niets mee, deze stond altijd ingevuld met een berekende waarde
-- indien gevuld met een jaar, dan is dat het vervaljaar van die activiteit bij dat element.
-- Let op: vervaljaar doet NIET! mee in de bepaling van de "grootste gemene deler" voor ins_srtcontrole.
INSERT INTO ins_srtcontrole (ctr_discipline_key, ins_srtinstallatie_key, ins_srtcontrole_niveau, ins_srtcontrole_omschrijving, ins_srtcontrole_groep,
ins_srtcontrole_info, ins_srtcontrole_periode, ins_srtcontrole_eenheid, ins_srtcontrole_mode, ins_srtcontrole_materiaal, fin_btwtabelwaarde_key,
ins_srtcontrole_percentage, prs_kostenplaats_key)
SELECT v_ctr_discipline_key, ins_srtdeel_key, 'S', ins_kenmerkwaarde1, MAX (ins_kenmerkwaarde2),
MAX(ins_kenmerkwaarde2) || ' [' || MAX(ins_kenmerkwaarde13) || ']' , v_periode, 4, 1, fac.safe_to_number(replace(replace(v_kosten, '.'), ',','.')),
v_fin_btwtabelwaarde_key,
fac.safe_to_number(replace(replace(v_perc_onderhoud, '.'), ',','.')),
(SELECT prs_kostenplaats_key
FROM prs_kostenplaats
WHERE prs_kostenplaats_verwijder IS NULL
AND prs_kostenplaats_module = 'ALG'
AND prs_kostenplaats_upper = (SELECT UPPER(MAX(ins_kenmerkwaarde15))
FROM fac_imp_ins
WHERE ins_kenmerkwaarde1 = v_receptnr))
FROM ins_srtdeel sd, fac_imp_ins i, ins_srtgroep sg, ins_discipline d
WHERE ins_srtdeel_key > p_max_ins_srtdeel_key
AND sd.ins_srtdeel_code = i.ins_srtdeel_code
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND sg.ins_discipline_key = d.ins_discipline_key
AND i.ins_discipline_omschrijving = d.ins_discipline_omschrijving
AND i.ins_srtgroep_omschrijving = sg.ins_srtgroep_omschrijving
AND i.ins_kenmerkwaarde1 = v_receptnr
AND i.ins_kenmerkwaarde3 = v_kosten
AND i.ins_kenmerkwaarde14 = v_periode
AND i.ins_kenmerkwaarde10 = v_perc_onderhoud
AND NOT EXISTS (SELECT 'x' FROM ins_srtcontrole
WHERE ins_srtinstallatie_key = ins_srtdeel_key
AND ins_srtcontrole_niveau = 'S'
AND ins_srtcontrole_groep = v_receptnr)
GROUP BY ins_srtdeel_key, ins_kenmerkwaarde1;
-- Uitzonderingen op de algemene (reguliere) soort controle, die dus afwijken van kosten en/of periode, worden toegevoegd als XCP
-- Let op: hier wordt aantal nog in GROEP gestopt, vraag is of we de eenheid moeten stoppen in ins_srtdeel_aantal of in ins_srtcontrole_aantal / ins_srtcontroledl_xcp_aantal op dieper nivo.
-- Check via onderstaande query op araio@labs levert op dat er een paar verschillen in aantal zitten:
-- araio_waardwonen_verschil_aantal_andere_eenheid.xls: 15 objecten met meerdere activiteiten, verschillend aantal, andere eenheid.
-- select a.ins_deel_omschrijving, b.ins_kenmerkwaarde1, b.ins_kenmerkwaarde2, b.ins_kenmerkwaarde13, b.ins_kenmerkwaarde10, c.ins_kenmerkwaarde10, c.ins_kenmerkwaarde13, c.ins_kenmerkwaarde1, c.ins_kenmerkwaarde2 from
-- (select ins_deel_omschrijving, count(*) from fac_imp_ins
-- having count(*) > 1
-- group by ins_deel_omschrijving) a,
-- fac_imp_ins b,
-- fac_imp_ins c
-- where a.ins_deel_omschrijving = b.ins_deel_omschrijving
-- AND b.ins_deel_omschrijving = c.ins_deel_omschrijving
-- AND b.ins_kenmerkwaarde1 <> c.ins_kenmerkwaarde1
-- AND b.ins_kenmerkwaarde10 <> c.ins_kenmerkwaarde10
-- AND b.ins_kenmerkwaarde13 <> c.ins_kenmerkwaarde13
-- ORDER BY a.ins_deel_omschrijving;
-- araio_waardwonen_verschil_aantal_dezelfde_eenheid.xls: 30 objecten met meerdere activiteiten, verschillend aantal, dezelfde eenheid
-- select a.ins_deel_omschrijving, b.ins_kenmerkwaarde1, b.ins_kenmerkwaarde2, b.ins_kenmerkwaarde13, b.ins_kenmerkwaarde10, c.ins_kenmerkwaarde10, c.ins_kenmerkwaarde13, c.ins_kenmerkwaarde1, c.ins_kenmerkwaarde2 from
-- (select ins_deel_omschrijving, count(*) from fac_imp_ins
-- having count(*) > 1
-- group by ins_deel_omschrijving) a,
-- fac_imp_ins b,
-- fac_imp_ins c
-- where a.ins_deel_omschrijving = b.ins_deel_omschrijving
-- AND b.ins_deel_omschrijving = c.ins_deel_omschrijving
-- AND b.ins_kenmerkwaarde1 <> c.ins_kenmerkwaarde1
-- AND b.ins_kenmerkwaarde10 <> c.ins_kenmerkwaarde10
-- AND b.ins_kenmerkwaarde13 = c.ins_kenmerkwaarde13
-- ORDER BY a.ins_deel_omschrijving;
-- araio_waardwonen_meer_activiteiten_met_gelijk_aantal.xlsx: 354 objecten met meerdere activiteiten, gelijke aantal, (dezelfde of afwijkend eenheid).
--select a.ins_deel_omschrijving, b.ins_kenmerkwaarde1, b.ins_kenmerkwaarde2, b.ins_kenmerkwaarde13, b.ins_kenmerkwaarde10, c.ins_kenmerkwaarde10, c.ins_kenmerkwaarde13, c.ins_kenmerkwaarde1, c.ins_kenmerkwaarde2 from
--(select ins_deel_omschrijving, count(*) from fac_imp_ins
--having count(*) > 1
--group by ins_deel_omschrijving) a,
--fac_imp_ins b,
--fac_imp_ins c
--where a.ins_deel_omschrijving = b.ins_deel_omschrijving
--AND b.ins_deel_omschrijving = c.ins_deel_omschrijving
--AND b.ins_kenmerkwaarde1 <> c.ins_kenmerkwaarde1
--AND b.ins_kenmerkwaarde10 = c.ins_kenmerkwaarde10
---- AND b.ins_kenmerkwaarde13 = c.ins_kenmerkwaarde13
--ORDER BY a.ins_deel_omschrijving;
--;
--araio_waardwonen_objecten_met_1_activiteit.xlsx: 2940 objecten met 1 activiteit, aantal dont care, eenheid dont care.
--select ins_deel_omschrijving, MAX(b.ins_kenmerkwaarde1), MAX(b.ins_kenmerkwaarde2), MAX(b.ins_kenmerkwaarde13), MAX(b.ins_kenmerkwaarde10) from fac_imp_ins b
--having count(*) = 1
--group by ins_deel_omschrijving;
-- Aantal objecten ingelezen: 3344.
-- select distinct (ins_deel_omschrijving) from fac_imp_ins;
-- Uitzonderingen op de algemene (reguliere) soort controle die we zojuist hebben toegevoegd, die dus afwijken van kosten en/of periode, worden toegevoegd als XCP
-- Let op: hier wordt aantal nog in GROEP gestopt, vraag is of we de eenheid moeten stoppen in ins_srtdeel_aantal of in ins_srtcontrole_aantal / ins_srtcontroledl_xcp_aantal op dieper nivo.
-- Let op 2: Dit zijn natuurlijk alleen de objecten die in deze import zijn toegevoegd (d.ins_deel_key > p_max_ins_deel_key) en afwijkende kosten en afwijkende periode hebben.
-- Verder moet de algemene ins_srtcontrole wel gevonden kunnen worden om een xcp daarop te kunnen maken (foreign-key)
-- Waneer de kosten OF(!) de periode niet zijn ingevuld (NULL-value), dan gaan we ervan uit dat deze de default volgen, en wordt er geen XCP aangemaakt,
-- Dus als een van beide ontbreekt, dan volgt die de standaard.
-- Hier nog ff onthouden wat de laatste xcp record is, is straks nodig voor een nabewerking (cursor 4)
SELECT coalesce(max(ins_srtcontroledl_xcp_key),0)
INTO v_mx_ins_srtcontroledl_xcp_key
FROM ins_srtcontroledl_xcp;
v_errormsg := 'Soort controle gegevens: ' || ' recept=[' || v_receptnr || '],' || ' kosten=[' || v_kosten || '],' ||
' periode=[' || v_periode || '],' || ' percentage=[' || v_perc_onderhoud || '],';
FOR rec2 IN c2 (p_max_ins_deel_key, v_receptnr, v_kosten, v_periode, v_perc_onderhoud)
LOOP
BEGIN
v_errormsg := 'C2: INSERT INTO ins_srtcontroledl_xcp: ' || 'ins_deel_key=['|| rec2.ins_deel_key || '],' || 'objectomschrijving=[' || rec2.ins_deel_omschrijving || '] ' ||
'ins_srtcontrole_key=[' || rec2.ins_srtcontrole_key || '],' ||
'recept=[' || v_receptnr || '],' || 'kosten=[' || rec2.kosten || '],' ||
'periode=[' || rec2.periode || '],' || ' percentage=[' || v_perc_onderhoud || '],';
fac.imp_writelog (p_import_key,
'I',
v_errormsg,
v_errorhint
);
INSERT INTO ins_srtcontroledl_xcp ( ins_deel_key, ins_srtcontrole_key, ins_srtcontroledl_xcp_periode,
ins_srtcontroledl_xcp_materia, ins_srtcontroledl_xcp_perc, ins_srtcontroledl_xcp_eind)
SELECT rec2.ins_deel_key, rec2.ins_srtcontrole_key, rec2.periode, rec2.kosten, rec2.perc_onderhoud, rec2.verval_datum FROM dual;
EXCEPTION
WHEN OTHERS
THEN
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
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;
FOR rec6 IN c6 (p_max_ins_deel_key, v_receptnr, v_kosten, v_periode, v_perc_onderhoud)
LOOP
BEGIN
v_errormsg := 'C6: VERVALJAAR -> ins_srtcontroledl_xcp: ' || 'ins_deel_key=['|| rec6.ins_deel_key || '],' || 'objectomschrijving=[' || rec6.ins_deel_omschrijving || '] ' ||
'ins_srtcontrole_key=[' || rec6.ins_srtcontrole_key || '],' ||
'recept=[' || v_receptnr || '],' || 'kosten=[' || rec6.kosten || '],' ||
'periode=[' || rec6.periode || '],' || ' percentage=[' || v_perc_onderhoud || '],';
fac.imp_writelog (p_import_key,
'I',
v_errormsg,
v_errorhint
);
INSERT INTO ins_srtcontroledl_xcp ( ins_deel_key, ins_srtcontrole_key, ins_srtcontroledl_xcp_eind)
SELECT rec6.ins_deel_key, rec6.ins_srtcontrole_key, rec6.verval_datum FROM dual;
EXCEPTION
WHEN OTHERS
THEN
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
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;
-- "After" post-processing van de XCP records die zojuist - in voorgaande loop- zijn toegevoegd.
-- De kolommen (materiaal, periode, percentage) die dezelfde waarde hebben als de standaard ins_srtcontrole moeten op NULL worden gezet,
-- Maw alleen de echte afwijkingen moeten een waarde (NOT NULL) hebben.
-- In de cursor c2 worden de records opgehaald waarvan minimaal 1 afwijking is, dat betekent dat er dus ook mogelijk dezelfde waarde als de standaard bestaat.
v_errormsg := 'NABEWERKING ins_srtcontroledl_xcp: ';
FOR rec4 IN c4 (v_mx_ins_srtcontroledl_xcp_key)
LOOP
BEGIN
v_errorhint := 'C4: NABEWERKING ins_srtcontroledl_xcp: ' || 'key=[' || rec4.ins_srtcontroledl_xcp_key || '], controle=[ ' || rec4.ins_srtcontrole_omschrijving || ']';
IF rec4.set_materia_null = 1
THEN
v_errorhint := 'C4a - set_materia_null ' || v_errorhint;
UPDATE ins_srtcontroledl_xcp SET ins_srtcontroledl_xcp_materia = NULL WHERE ins_srtcontroledl_xcp_key = rec4.ins_srtcontroledl_xcp_key;
END IF;
IF rec4.set_periode_null = 1
THEN
v_errorhint := 'C4b - set_periode_null ' || v_errorhint;
UPDATE ins_srtcontroledl_xcp SET ins_srtcontroledl_xcp_periode = NULL WHERE ins_srtcontroledl_xcp_key = rec4.ins_srtcontroledl_xcp_key;
END IF;
IF rec4.set_perc_onderhoud_null = 1
THEN
v_errorhint := 'C4c - set_perc_onderhoud_null ' || v_errorhint;
UPDATE ins_srtcontroledl_xcp SET ins_srtcontroledl_xcp_perc = NULL WHERE ins_srtcontroledl_xcp_key = rec4.ins_srtcontroledl_xcp_key;
END IF;
EXCEPTION
WHEN OTHERS
THEN
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
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;
EXCEPTION
WHEN OTHERS
THEN
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
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; -- cursor c1
fac.imp_writelog (p_import_key, 'I', v_receptnr || ',' || v_kosten|| ',' || v_periode|| ',' || v_perc_onderhoud, 'v_receptnr, v_kosten, v_periode, v_perc_onderhoud');
EXCEPTION
WHEN OTHERS
THEN
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
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; -- cursor c0
-- De handmatige verschuivingen vanuit Tobias TMJ of StraVIS die komen overwaaien, die willen we niet verloren laten gaan....
FOR rec7 IN c7 (p_max_ins_deel_key)
LOOP
BEGIN
v_errormsg := 'C7: INSPECTIE record -> ins_deelsrtcontrole: ' || 'ins_deel_key=['|| rec7.ins_deel_key || '],' || 'objectomschrijving=[' || rec7.ins_deel_omschrijving || '] ' ||
'ins_srtcontrole_key=[' || rec7.ins_srtcontrole_key || '],';
fac.imp_writelog (p_import_key,
'I',
v_errormsg,
v_errorhint
);
INSERT INTO ins_deelsrtcontrole (ins_deel_key, ins_srtcontrole_key, ins_deelsrtcontrole_plandatum, ins_deelsrtcontrole_status)
SELECT rec7.ins_deel_key, rec7.ins_srtcontrole_key, rec7.plan_datum, 0 FROM dual;
EXCEPTION
WHEN OTHERS
THEN
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
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;
-- We gaan dan nog het aantal objecten (ins_deel_aantal) die standaard op 1 staat, bijwerken met kolom 9 (aantal geregistreerde objecten).
-- Hiervoor nemen we het hoogste aantal (het object kan voor meerdere activiteiten met verschillende aantal (icm eenheid) worden ingezet), b.v.:
-- object A (kozijnen) 10 m2 schilderen
-- object A (kozijnen) 2 st. vervangen
-- We registeren dan bij object A 10??? (of is 2 beter, omdat dit de preferred eenheid stuks is)?
fac.imp_writelog (p_import_key, 'I', 'update ins_deel_aantal', '');
UPDATE ins_deel d
SET ins_deel_aantal = (SELECT COALESCE(fac.safe_to_number(max(ins_kenmerkwaarde9)),1)
FROM fac_imp_ins i, alg_ruimte r, alg_verdieping v, alg_gebouw g, alg_locatie l
WHERE i.ins_deel_omschrijving = d.ins_deel_omschrijving
AND i.alg_locatie_code = l.alg_locatie_code
AND i.alg_gebouw_code = g.alg_gebouw_code
AND i.alg_verdieping_volgnr = v.alg_verdieping_volgnr
AND i.alg_ruimte_nr = r.alg_ruimte_nr
AND d.ins_alg_ruimte_key = r.alg_ruimte_key
AND r.alg_verdieping_key = v.alg_verdieping_key
AND v.alg_gebouw_key = g.alg_gebouw_key
AND g.alg_locatie_key = l.alg_locatie_key
)
WHERE d.ins_deel_key > p_max_ins_deel_key
AND d.ins_deel_verwijder IS NULL;
-- De aanmaakdatums van de ins_delen die zijn toegevoegd ( > p_max_ins_deel_key) bepalen de volgende controle-momenten, dus dat komt natuurlijk wel wat nauw.
-- Daarom wordt StJr (ins_kenmerkwaarde4) als startjaar bij alle objecten (ins_delen) van het betreffende pand gezet.
fac.imp_writelog (p_import_key, 'I', 'update ins_deel_aanmaak', '');
UPDATE ins_deel d
SET ins_deel_aanmaak = (SELECT min( to_date (ins_kenmerkwaarde4, 'yyyy'))
FROM fac_imp_ins i, alg_ruimte r, alg_verdieping v, alg_gebouw g, alg_locatie l
WHERE i.ins_deel_omschrijving = d.ins_deel_omschrijving
AND i.alg_locatie_code = l.alg_locatie_code
AND i.alg_gebouw_code = g.alg_gebouw_code
AND i.alg_verdieping_volgnr = v.alg_verdieping_volgnr
AND i.alg_ruimte_nr = r.alg_ruimte_nr
AND d.ins_alg_ruimte_key = r.alg_ruimte_key
AND r.alg_verdieping_key = v.alg_verdieping_key
AND v.alg_gebouw_key = g.alg_gebouw_key
AND g.alg_locatie_key = l.alg_locatie_key
)
WHERE d.ins_deel_key > p_max_ins_deel_key
AND d.ins_deel_verwijder IS NULL;
EXCEPTION
WHEN OTHERS
THEN
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
END;
/
CREATE OR REPLACE PROCEDURE arai_update_mjob (
p_import_key IN NUMBER
) IS
v_count NUMBER;
v_max_ins_srtdeel_key NUMBER(10);
v_max_ins_deel_key NUMBER(10);
BEGIN
-- Even snel registreren wat de laatst toegevoegde ins_srtdeel is, dan weten we dat er door deze import-procedure wordt toegevoegd (alles > dan deze max).
SELECT coalesce(max(ins_srtdeel_key),0)
INTO v_max_ins_srtdeel_key
FROM ins_srtdeel
WHERE ins_srtdeel_verwijder IS NULL;
-- Idem voor laatst toegevoegde ins_deel is, dan weten we dat er door deze import-procedure wordt toegevoegd (alles > dan deze max).
SELECT coalesce(max(ins_deel_key),0)
INTO v_max_ins_deel_key
FROM ins_deel
WHERE ins_deel_verwijder IS NULL;
fac_update_ins (p_import_key);
-- After update ...
arai_post_update_mjob(p_import_key, v_max_ins_srtdeel_key, v_max_ins_deel_key);
END arai_update_mjob;
/
-- Alle meldingen ouder dan 5 jaar binnen vakgroeptype "Bezoekers en Omwonenden" anonimiseren (ivm AVG)
CREATE OR REPLACE PROCEDURE arai_export_bezomwanon (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2)
AS
CURSOR arai_bezomw_anon
IS
SELECT m.mld_melding_key, m.mld_melding_datum
FROM mld_melding m, mld_discipline md, mld_stdmelding mst
WHERE mld_melding_datum <= SYSDATE - INTERVAL '5' YEAR
AND m.mld_stdmelding_key = mst.mld_stdmelding_key
AND mst.mld_ins_discipline_key = md.ins_discipline_key
AND md.ins_srtdiscipline_key = 22;
BEGIN
FOR rec IN arai_bezomw_anon
LOOP
BEGIN
UPDATE mld_melding
SET mld_melding_omschrijving = '-GEANONIMISEERD-',
mld_melding_opmerking = '-GEANONIMISEERD-'
WHERE mld_melding_key = rec.mld_melding_key;
UPDATE mld_kenmerkmelding
SET mld_kenmerkmelding_waarde = 'GEANONIMISEERD'
WHERE mld_melding_key = rec.mld_melding_key
AND mld_kenmerk_key IN (506, 506, 508, 509, 510);
END;
END LOOP;
END;
/
CREATE OR REPLACE PROCEDURE arai_export_obiafmelder (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2)
AS
CURSOR arai_obi_afmelder
IS
SELECT m.mld_melding_key
FROM mld_melding m
WHERE m.prs_perslid_key = 12661
AND m.mld_melding_status < 5;
BEGIN
FOR rec IN arai_obi_afmelder
LOOP
BEGIN
UPDATE mld_melding
SET mld_melding_status = 5
WHERE mld_melding_key = rec.mld_melding_key;
END;
END LOOP;
END;
/
------ payload end ------
SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 0); END;
/
COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile