-- -- $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;' || '11;8;0;0;0;12;15;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;extensionAttribute6;accountexpirationdate;userAccountControl%' ); 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) || '%]
' || '- #personen importbestand = [' || TO_CHAR (v_count_prs_import) || ']
' || '- #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), '' || m.mld_melding_key || '' 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 -- call ARAI#59317: RAI Amsterdam B.V. vervaldatum kan nooit bereikt worden (sysdate + 30) -- Normale events zijn 450 dagen na afbouwdatum niet meer zichtbaar (via vervaldatum), om een te lange lijst te voorkomen. 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 + 450 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%' AND evenement NOT LIKE '%ondleiding%' AND evenement NOT LIKE '%FO1%' AND evenement NOT LIKE '%ousekeeping%' AND evenement NOT LIKE '%tatus report%' AND evenement NOT LIKE '%avilions%' AND arai_events_key != 28321 UNION ALL SELECT arai_events_key, Evenement || '|' || Bedrijfsnaam, Evenement, EventID, Bedrijfsnaam, BedrijfsnaamID, BIllto, BilltoID, EventDatumVan, EventDatumTot, EventOpbouw, EventAfbouw, SYSDATE + 30 FROM arai_events WHERE arai_events_key = 28321; --------------------------------------------------------------------------------------------------------------------------------------------- --- 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 || ' °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; CREATE OR REPLACE VIEW arai_v_ins_qrc_inspecties ( fclt_3d_discipline_key, fclt_3d_locatie_key, fclt_f_locatie, fclt_f_gebouw, plaats, soortruimte, ins_srtgroep_key, ins_srtgroep_omschrijving, 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 DISTINCT 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, sg.ins_srtgroep_key, sg.ins_srtgroep_omschrijving, 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, ins_deelsrtcontrole dc, ins_srtcontrole sc, ins_srtgroep sg WHERE b.fac_bookmark_naam = 'KPI_INSPECTIES' 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 sc.ctr_discipline_key = 2021 -- Inspecties AND sc.ins_srtcontrole_niveau = 'S' AND sc.ins_srtinstallatie_key = s.ins_srtdeel_key AND s.ins_srtdeel_key = i.ins_srtdeel_key AND s.ins_srtgroep_key = sg.ins_srtgroep_key UNION ALL SELECT DISTINCT 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, sg.ins_srtgroep_key, sg.ins_srtgroep_omschrijving, 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, i.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, ins_deelsrtcontrole dc, ins_srtcontrole sc, ins_srtgroep sg WHERE b.fac_bookmark_naam = 'KPI_INSPECTIES' AND i.ins_deel_verwijder IS NULL AND sg.ins_srtgroep_verwijder IS NULL AND i.ins_srtdeel_key = s.ins_srtdeel_key AND sg.ins_srtgroep_key = s.ins_srtgroep_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 l.alg_district_key = di.alg_district_key AND sc.ctr_discipline_key = 2021 -- Inspecties AND sc.ins_srtcontrole_niveau = 'G' AND sc.ins_srtinstallatie_key = sg.ins_srtgroep_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), ''), 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; mld.setopdrachtstatus (c_uur.mld_opdr_key, 9, 4); -- Update de status naar verwerkt wanneer de opdracht is afgemeld 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__, 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 || ' °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 || ' °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__, 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); v_riggingpnt NUMBER (10); v_event NUMBER (10); -- v_ontwerp NUMBER (10); v_hal NUMBER (10); v_getriggingpnt VARCHAR2 (50); v_getevent VARCHAR2 (50); v_gethal VARCHAR2 (50); v_getontwerp VARCHAR2 (50); 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 UPPER (pto) = 'HOTELREMARKS@ARAI.FACILITOR.NL' THEN SELECT p.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 p.prs_perslid_verwijder IS NULL AND UPPER (p.prs_perslid_oslogin) = '_HOTELREMARKS'; -- 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; END IF; IF UPPER (pto) = 'GIELISSEN@ARAI.FACILITOR.NL' THEN SELECT p.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 p.prs_perslid_verwijder IS NULL AND UPPER (p.prs_perslid_oslogin) = '_GIELISSEN'; IF UPPER (psubject) LIKE 'SERVICEBON%' THEN IF UPPER (psubject) LIKE '%MANSVELD%' THEN defaultstdmelding := 460; v_mailadres_kenmerk_key := 46; END IF; IF UPPER (psubject) LIKE '%MTD%' THEN defaultstdmelding := 3443; v_mailadres_kenmerk_key := 46; END IF; END IF; END IF; IF UPPER (pto) = 'BEOORDELENRIGGINGPLAN@ARAI.FACILITOR.NL' THEN SELECT p.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 p.prs_perslid_verwijder IS NULL AND UPPER (p.prs_perslid_oslogin) = '_RIGGING'; defaultstdmelding := 4141; v_mailadres_kenmerk_key := 3321; END IF; IF UPPER (pto) = 'STORINGENTD@ARAI.FACILITOR.NL' THEN SELECT p.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 p.prs_perslid_verwijder IS NULL AND UPPER (p.prs_perslid_oslogin) = '_STORING'; defaultstdmelding := 3741; v_mailadres_kenmerk_key := 2501; END IF; ------------------------------------------------- -- 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; IF defaultstdmelding = 4141 THEN v_getevent := REGEXP_SUBSTR (REPLACE (pbody, CHR(10), ' '), 'event id *'||subject_regexp, 1, 1, 'i'); SELECT a.arai_events_key INTO v_event FROM arai_events a WHERE a.eventid = REGEXP_SUBSTR (v_getevent, subject_regexp, 1, 1, 'i'); v_gethal := REGEXP_SUBSTR (REPLACE (pbody, CHR(10), ' '), 'hallen *'||subject_regexp, 1, 1, 'i'); v_hal := REGEXP_SUBSTR (v_gethal, subject_regexp, 1, 1, 'i'); v_gebcode := LPAD(v_hal,2,'0'); v_getriggingpnt := REGEXP_SUBSTR (REPLACE (pbody, CHR(10), ' '), 'punten *'||subject_regexp, 1, 1, 'i'); v_riggingpnt := REGEXP_SUBSTR (v_getriggingpnt, subject_regexp, 1, 1, 'i'); -- LET OP, ontwerp werkt nog niet! -- v_getontwerp := -- REGEXP_SUBSTR (REPLACE (pbody, CHR(10), ' '), -- 'ontwerp *'||subject_regexp, -- 1, -- 1, -- 'i'); -- -- SELECT f.fac_usrdata_key -- INTO v_ontwerp -- FROM fac_usrdata f -- WHERE f.fac_usrtab_key = 381 -- AND f.fac_usrdata_omschr = REGEXP_SUBSTR (v_getontwerp, -- subject_regexp, -- 1, -- 1, -- 'i'); 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.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; 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, dit moet uiteindelijk voor alle events werken 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; END IF; -- defaultstdmelding is gielissen of niet IF defaultstdmelding = 4141 -- Wanneer het gaat om een rigging melding 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, -- gebouw o.b.v. halnummer (gebouwcode) 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, 2981, v_event); -- evenement INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde) VALUES (v_mldkey, 3241, v_riggingpnt); -- aantal riggingpunten -- INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde) -- VALUES (v_mldkey, 3181, v_ontwerp); -- status ontwerp -- 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 rigging of niet IF defaultstdmelding IN (1561, 3741) -- Hotelremarks of StoringenTD THEN -- suggested extensions: -- check for MLDUSE-write autorisations -- parse the subject to find an appropriate stdmelding, if uniquely possible -- append (as a note?) to an existing melding if #key is found in the subject BEGIN INSERT INTO mld_melding (mld_melding_module, mld_meldbron_key, mld_melding_datum, mld_alg_locatie_key, mld_melding_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) psubject, SUBSTR (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 Hotelremarks of StoringenTD 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, 1981, 1982, 1103, 1881) -- corona knelpunten 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, tevens voor postshow (beleid en werkafspraken) CREATE OR REPLACE VIEW arai_v_rap_dagrap_extradata ( melding_key, afdeling, evenement, meldingdatum, kenmerkvolgnr, kenmerkoms, kenmerkwaarde ) AS SELECT 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, 1661, -- knelpunten beleid 1662, -- knelpunten werkafspraken 1106, 1141, 1041, 1981, 1982, 1103, 1881) -- corona knelpunten 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; -- Nu ook met extra meldingen die niet om dagrap gaan CREATE OR REPLACE VIEW arai_v_rap_postshow ( 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, 1661, -- knelpunten beleid 1662, -- knelpunten werkafspraken 1106, 1141, 1041, 1981, 1982, 1103, 1881) -- corona knelpunten 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 IN (1541, 2261); -- Specifiek rapport voor knelpunt kenmerken CREATE OR REPLACE VIEW arai_v_rap_postshow_data ( melding_key, discipline, melding_status, afdeling, teammanager, teammanager_id, manager, manager_id, evenement, meldingdatum, kenmerkvolgnr, kenmerkoms, kenmerkwaarde ) AS SELECT DISTINCT m.mld_melding_key, md.ins_discipline_omschrijving, ms.mld_statuses_omschrijving, std.mld_stdmelding_omschrijving, (SELECT fac_usrdata_omschr FROM fac_usrdata WHERE fac_usrdata_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 = m.mld_melding_key AND k.mld_srtkenmerk_key = 1681)), (SELECT fac_usrdata_code FROM fac_usrdata WHERE fac_usrdata_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 = m.mld_melding_key AND k.mld_srtkenmerk_key = 1681)), (SELECT fac_usrdata_omschr FROM fac_usrdata WHERE fac_usrdata_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 = m.mld_melding_key AND k.mld_srtkenmerk_key = 1682)), (SELECT fac_usrdata_code FROM fac_usrdata WHERE fac_usrdata_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 = m.mld_melding_key AND k.mld_srtkenmerk_key = 1682)), (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 AND k.mld_kenmerk_verwijder IS NULL)), 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, mld_discipline md, mld_statuses ms WHERE msk.mld_srtkenmerk_key = mk.mld_srtkenmerk_key AND msk.mld_srtkenmerk_key IN (961, -- knelpunt evemenent 1661, -- knelpunten beleid 1662, -- knelpunt werkafspraken 1881, -- corona knelpunten 1001 -- beste practise ) 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 m.mld_melding_status = ms.mld_statuses_key AND std.mld_ins_discipline_key = md.ins_discipline_key AND std.mld_ins_discipline_key IN (1541, 2262, 2261); -- Managers zijn verantwoordelijk voor beleid, teammanagers voor werkafspraken. -- Deze worden hieronder verdeelt, is er geen manager geselecteerd bij een beleidspunten dan gaat deze naar de teammanager. -- Alleen meldingen waarvan ook echt de volgende workflowstap is gegenereerd, om het overzichtelijk te houden. CREATE OR REPLACE VIEW arai_v_rap_postshow_knelpnt ( melding_key, discipline, melding_status, afdeling, behandelaar, teammanager, teammanager_id, manager, manager_id, evenement, meldingdatum, kenmerkvolgnr, kenmerkoms, kenmerkwaarde ) AS SELECT ad.melding_key, ad.discipline, ad.melding_status, ad.afdeling, CASE WHEN ad.manager IS NOT NULL OR ad.teammanager IS NOT NULL THEN 'Reeds toegewezen' ELSE 'Nog toe te wijzen' END behandelaar, CASE WHEN UPPER (ad.kenmerkoms) LIKE '%BELEID%' AND ad.manager IS NOT NULL THEN NULL ELSE ad.teammanager END teammanager, CASE WHEN UPPER (ad.kenmerkoms) LIKE '%BELEID%' AND ad.manager IS NOT NULL THEN NULL ELSE ad.teammanager_id END teammanager_id, CASE WHEN UPPER (ad.kenmerkoms) LIKE '%WERKAFSPRA%' AND ad.teammanager IS NOT NULL THEN NULL WHEN UPPER (ad.kenmerkoms) LIKE '%EVENEMENT%' AND ad.teammanager IS NOT NULL THEN NULL ELSE ad.manager END manager, CASE WHEN UPPER (ad.kenmerkoms) LIKE '%WERKAFSPRA%' AND ad.teammanager IS NOT NULL THEN NULL WHEN UPPER (ad.kenmerkoms) LIKE '%EVENEMENT%' AND ad.teammanager IS NOT NULL THEN NULL ELSE ad.manager_id END manager_id, ad.evenement, ad.meldingdatum, ad.kenmerkvolgnr, ad.kenmerkoms, ad.kenmerkwaarde FROM arai_v_rap_postshow_data ad, mld_stdmelding std, mld_melding m WHERE ad.melding_key = m.mld_melding_key AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_stdmelding_key IN (4541, 4542) AND UPPER (ad.kenmerkwaarde) NOT LIKE '%NVT%'; -- Rapport met prs_perslid_key van manager / teammanager voor eigen menu-item. CREATE OR REPLACE VIEW arai_v_rap_post_myknlpunt ( melding_key, discipline, melding_status, afdeling, behandelaar, teammanager, manager, prs_perslid_key, evenement, meldingdatum, kenmerkvolgnr, kenmerkoms, kenmerkwaarde ) AS SELECT melding_key, discipline, melding_status, afdeling, behandelaar, teammanager, manager, fac.safe_to_number (COALESCE (teammanager_id, manager_id, NULL)) prs_perslid_key, evenement, meldingdatum, kenmerkvolgnr, kenmerkoms, kenmerkwaarde FROM arai_v_rap_postshow_knelpnt; CREATE OR REPLACE VIEW arai_v_rap_knlpnt_style ( melding_key, melding_status, afdeling, behandelaar, rol, naam, evenement, meldingdatum, kenmerkoms, kenmerkwaarde ) AS SELECT ak.melding_key, ak.melding_status, ak.afdeling, ak.behandelaar, CASE WHEN ak.teammanager IS NOT NULL THEN 'Teammanager' WHEN ak.manager IS NOT NULL THEN 'Manager' ELSE 'Nog toe te wijzen' END CASE, COALESCE (ak.teammanager, ak.manager, 'Nog toe te wijzen'), ak.evenement, ak.meldingdatum, ak.kenmerkoms, ak.kenmerkwaarde FROM arai_v_rap_postshow_knelpnt ak; CREATE OR REPLACE VIEW arai_v_rap_postshow_report ( evenement, meldingdatum, weeknummer, kenmerkoms, event_managenent, facilities_warehouse, traffic_management, safety_security, food_beverage, ict, account_management, exhibitor_services, event_operations, planning_management, product_manager_es, support_center, hide_f_sort ) AS SELECT x.*, y.kenmerkvolgnr FROM ( SELECT afdeling, evenement, TRUNC (meldingdatum), TO_CHAR (meldingdatum, 'YYYY-IW') week, kenmerkoms, LISTAGG (kenmerkwaarde, ', ') WITHIN GROUP (ORDER BY meldingdatum) kenmerkwaarde FROM arai_v_rap_postshow_data b WHERE UPPER (b.kenmerkwaarde) NOT LIKE '%NVT%' GROUP BY afdeling, evenement, kenmerkoms, meldingdatum) PIVOT (MIN(kenmerkwaarde) FOR afdeling IN ('Event Management', 'Facilities/Warehouse', 'Traffic Management', 'Safety & Security', 'Food & Beverage', 'ICT', 'Account Management', 'Exhibitor Services', 'Event Operations', 'Planning Management', 'Product manager ES', 'Support Center' )) x LEFT JOIN ( SELECT MIN (kenmerkvolgnr) kenmerkvolgnr, kenmerkoms FROM arai_v_rap_postshow_data GROUP BY kenmerkoms) y ON x.kenmerkoms = y.kenmerkoms ORDER BY x.evenement; -- Postshow klaar voor styling CREATE OR REPLACE VIEW arai_v_rap_postshow_style ( afdeling, evenement, kenmerkoms, kenmerkwaarde ) AS SELECT x.* FROM ( SELECT afdeling, evenement, kenmerkoms, TO_CHAR (meldingdatum, 'DD-MM-YYYY') || ' ' || kenmerkwaarde waarde FROM arai_v_rap_postshow_data b WHERE UPPER (b.afdeling) NOT LIKE '%KNELPUNT%' AND UPPER (b.kenmerkwaarde) NOT LIKE '%NVT%' GROUP BY afdeling, evenement, kenmerkoms, kenmerkwaarde, meldingdatum ORDER BY DECODE (afdeling, 'Event Management', 1, 'Facilities/Warehouse', 2, 'Traffic Management', 3, 'Safety & Security', 4, 'Food & Beverage', 5, 'ICT', 6, 'Account Management', 7, 'Exhibitor Services', 8, 'Event Operations', 9, 'Planning Management', 10, 'Product manager ES', 11, 'Support Center', 12, 13)) x, DUAL ORDER BY x.waarde; -- 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 WHERE UPPER (b.kenmerkwaarde) NOT LIKE '%NVT%' 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 WHERE UPPER (kenmerkwaarde) NOT LIKE '%NVT%' 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 AND UPPER (b.kenmerkwaarde) NOT LIKE '%NVT%' 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 AND UPPER (b.kenmerkwaarde) NOT LIKE '%NVT%' 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 WHERE UPPER (kenmerkwaarde) NOT LIKE '%NVT%' GROUP BY kenmerkoms) y ON x.kenmerkoms = y.kenmerkoms ORDER BY x.evenement; -- Voor meer filtering mogelijkheden binnen de resultaten van de dagrapportages. 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 m.mld_melding_key, (SELECT pf.prs_perslid_naam_full FROM prs_v_perslid_fullnames pf WHERE m.prs_perslid_key = pf.prs_perslid_key) perslid, COALESCE ( (SELECT prs_afdeling_omschrijving FROM prs_afdeling afd WHERE afd.prs_afdeling_key = m.prs_afdeling_key), (SELECT prs_afdeling_omschrijving FROM prs_afdeling afd, prs_perslid pp WHERE afd.prs_afdeling_key = pp.prs_afdeling_key AND pp.prs_perslid_key = m.prs_perslid_key)) afdeling_omschrijving, COALESCE ((m.prs_afdeling_key), (SELECT prs_afdeling_key FROM prs_perslid pp WHERE pp.prs_perslid_key = m.prs_perslid_key)) afdeling_key, (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all pf WHERE pf.prs_perslid_key = mld.getmeldinguser (m.mld_melding_key)) invoerder, md.ins_discipline_key stdm_ins_discipline_key, std.mld_stdmelding_omschrijving 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 = m.mld_melding_key AND k.mld_srtkenmerk_key IN (1103, 1104))) sub, ms.mld_statuses_omschrijving, TRUNC (m.mld_melding_datum), m.mld_melding_opmerking, ag.evenement, ag.kenmerkoms, ag.kenmerkwaarde FROM mld_melding m, mld_discipline md, mld_stdmelding std, mld_statuses ms, arai_v_rap_dagrap_extradata ag WHERE m.mld_melding_key = ag.melding_key AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = md.ins_discipline_key AND m.mld_melding_status = ms.mld_statuses_key AND UPPER (ag.kenmerkwaarde) NOT LIKE '%NVT%'; 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; -- Onderstaande gaat om openstaande standkeuringen, deze wordt op de vloer gebruikt. 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); -- Alle standkeuringen (niet gefilterd op status) voor raadplegen historie. CREATE OR REPLACE VIEW arai_v_rap_standkeuringalles ( 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; -- 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_opdr_key, NULL, NULL, p.prs_perslid_email, NULL FROM mld_opdr mo, mld_melding m, mld_stdmelding ms, mld_discipline md, prs_perslid p, fac_tracking t 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 AND t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun - fac_notificatie_job_interval / 24 FROM fac_notificatie_job WHERE UPPER(fac_notificatie_job_view) = 'ARAI_V_NOTI_OPENOPDR') AND (SELECT fac_notificatie_job_nextrun FROM fac_notificatie_job WHERE UPPER(fac_notificatie_job_view) = 'ARAI_V_NOTI_OPENOPDR') UNION ALL SELECT DISTINCT 'CUST04', NULL, NULL, 'U heeft verlopen opdrachten', mo.mld_opdr_key, NULL, NULL, p.prs_bedrijf_email, NULL FROM mld_opdr mo, mld_melding m, mld_stdmelding ms, mld_discipline md, prs_bedrijf p, fac_tracking t 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 AND t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun - fac_notificatie_job_interval / 24 FROM fac_notificatie_job WHERE UPPER(fac_notificatie_job_view) = 'ARAI_V_NOTI_OPENOPDR') AND (SELECT fac_notificatie_job_nextrun FROM fac_notificatie_job WHERE UPPER(fac_notificatie_job_view) = 'ARAI_V_NOTI_OPENOPDR'); CREATE OR REPLACE VIEW arai_v_noti_manager ( code, sender, receiver, text, key, xkey, xsender, xemail, xmobile, attachments ) AS SELECT 'CUST03', NULL, (SELECT fac_usrdata_code FROM fac_usrdata WHERE fac_usrdata_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 = m.mld_melding_key AND k.mld_srtkenmerk_key = 1682)), -- Verantwoordelijke manager 'Er staat een nieuw knelpunt beleid voor u klaar', m.mld_melding_key, NULL, NULL, NULL, NULL, NULL FROM mld_melding m, fac_tracking t WHERE m.mld_melding_status = 2 -- NEW AND m.mld_stdmelding_key = 4541 -- Knelpunt beleid AND t.fac_tracking_refkey = m.mld_melding_key AND t.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key FROM fac_srtnotificatie WHERE fac_srtnotificatie_code = 'MLDNEW') AND t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun - fac_notificatie_job_interval / 24 FROM fac_notificatie_job WHERE UPPER(fac_notificatie_job_view) = 'ARAI_V_NOTI_MANAGER') AND (SELECT fac_notificatie_job_nextrun FROM fac_notificatie_job WHERE UPPER(fac_notificatie_job_view) = 'ARAI_V_NOTI_MANAGER'); -- Wanneer de manager gewijzigd wordt in de beleidsmelding moet er ook een notificatie uit gaan. CREATE OR REPLACE VIEW arai_v_noti_newmanager ( code, sender, receiver, text, key, xkey, xsender, xemail, xmobile, attachments ) AS SELECT 'CUST06', NULL, (SELECT fac_usrdata_code FROM fac_usrdata WHERE fac_usrdata_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 = m.mld_melding_key AND k.mld_srtkenmerk_key = 1682)), -- Verantwoordelijke manager 'U bent als manager toegewezen aan een knelpunt beleid.', m.mld_melding_key, NULL, NULL, NULL, NULL, NULL FROM mld_melding m, fac_tracking t WHERE t.fac_tracking_oms LIKE '%Verantwoordelijke Manager%' -- Manager is gewijzigd AND m.mld_stdmelding_key = 4541 -- Knelpunt beleid AND t.fac_tracking_refkey = m.mld_melding_key AND t.fac_srtnotificatie_key = 35 -- wijziging AND t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun - fac_notificatie_job_interval / 24 FROM fac_notificatie_job WHERE UPPER(fac_notificatie_job_view) = 'ARAI_V_NOTI_NEWMANAGER') AND (SELECT fac_notificatie_job_nextrun FROM fac_notificatie_job WHERE UPPER(fac_notificatie_job_view) = 'ARAI_V_NOTI_NEWMANAGER'); CREATE OR REPLACE VIEW arai_v_noti_tmanager ( code, sender, receiver, text, key, xkey, xsender, xemail, xmobile, attachments ) AS SELECT 'CUST05', NULL, (SELECT fac_usrdata_code FROM fac_usrdata WHERE fac_usrdata_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 = m.mld_melding_key AND k.mld_srtkenmerk_key = 1681)), -- Verantwoordelijke Teammanager 'Er staat een nieuw knelpunt werkafspraken voor u klaar', m.mld_melding_key, NULL, NULL, NULL, NULL, NULL FROM mld_melding m, fac_tracking t WHERE m.mld_melding_status = 2 AND m.mld_stdmelding_key = 4542 -- Knelpunt werkafspraken AND t.fac_tracking_refkey = m.mld_melding_key AND t.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key FROM fac_srtnotificatie WHERE fac_srtnotificatie_code = 'MLDNEW') AND t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun - fac_notificatie_job_interval / 24 FROM fac_notificatie_job WHERE UPPER(fac_notificatie_job_view) = 'ARAI_V_NOTI_TMANAGER') AND (SELECT fac_notificatie_job_nextrun FROM fac_notificatie_job WHERE UPPER(fac_notificatie_job_view) = 'ARAI_V_NOTI_TMANAGER'); -- Zowel voltooide als lopende taken, t.b.v. compliance dashboards CREATE OR REPLACE VIEW arai_v_rap_compliance_data ( ins_deel_key, ins_deelsrtcontrole_key, taakcategorie, discipline, objectsoort, objectomschr, taakomschrijving, plandatum, status, gebouw, verdieping, ruimte, te_laat_dagen, dagen_tegaan, wettelijk_verplicht, prioriteit, beheerder ) AS SELECT i.ins_deel_key, dl.ins_deelsrtcontrole_key, disc.ins_discipline_omschrijving, ic.ins_discipline_omschrijving, srt.ins_srtdeel_omschrijving, i.ins_deel_omschrijving, s.ins_srtcontrole_omschrijving, dl.ins_deelsrtcontrole_plandatum, CASE WHEN ROUND (TRUNC (SYSDATE) - dl.ins_deelsrtcontrole_plandatum) > 30 THEN 'Te laat > 30 dagen' WHEN ROUND (TRUNC (SYSDATE) - dl.ins_deelsrtcontrole_plandatum) BETWEEN 0 AND 30 THEN 'Te laat' ELSE DECODE (st.ins_controlestatus_omschr, 'Afgemeld', 'Voltooid', st.ins_controlestatus_omschr) END status, ag.alg_gebouw_omschrijving, av.alg_verdieping_omschrijving, ar.alg_ruimte_omschrijving, CASE WHEN ROUND (TRUNC (SYSDATE) - dl.ins_deelsrtcontrole_plandatum) > 0 THEN ROUND (TRUNC (SYSDATE) - dl.ins_deelsrtcontrole_plandatum) ELSE NULL END te_laat_dagen, CASE WHEN ROUND (TRUNC (SYSDATE) - dl.ins_deelsrtcontrole_plandatum) < 0 THEN ROUND(ABS( (TRUNC (SYSDATE) - dl.ins_deelsrtcontrole_plandatum))) ELSE NULL END dagen_te_gaan, CASE WHEN UPPER (s.ins_srtcontrole_opmerking) LIKE '%WETTELIJK%' THEN 'Ja' WHEN UPPER (s.ins_srtcontrole_opmerking) LIKE '%VERPLICHT%' THEN 'Ja' ELSE 'Nee' END wettelijk_verplicht, (SELECT fac_usrdata_omschr FROM fac_usrdata WHERE fac_usrdata_key = (SELECT fac.safe_to_number (ins_kenmerkdeel_waarde) FROM ins_kenmerkdeel kd, ins_kenmerk k WHERE kd.ins_kenmerk_key = k.ins_kenmerk_key AND kd.ins_deel_key = i.ins_deel_key AND k.ins_kenmerk_niveau = 'D' AND k.ins_srtkenmerk_key = 561)) prioriteit, (SELECT f.prs_perslid_naam_full FROM prs_v_perslid_fullnames f WHERE f.prs_perslid_key = i.prs_perslid_key_beh) beheerder FROM ins_deelsrtcontrole dl, ins_deel i, ins_srtcontrole s, ins_srtdeel srt, ctr_v_aanwezigdiscipline disc, ins_discipline ic, ins_controlestatuses st, alg_gebouw ag, alg_ruimte ar, alg_verdieping av WHERE dl.ins_deel_key = i.ins_deel_key AND dl.ins_srtcontrole_key = s.ins_srtcontrole_key AND i.ins_srtdeel_key = srt.ins_srtdeel_key AND i.ins_srtdeel_key = s.ins_srtinstallatie_key AND i.ins_discipline_key = ic.ins_discipline_key AND dl.ins_deelsrtcontrole_status = st.ins_controlestatus_key AND s.ctr_discipline_key = disc.ins_discipline_key AND disc.ins_discipline_key IN (1941, 2021) AND i.ins_alg_ruimte_key = ar.alg_ruimte_key AND i.ins_alg_ruimte_type = 'R' AND ar.alg_verdieping_key = av.alg_verdieping_key AND av.alg_gebouw_key = ag.alg_gebouw_key AND dl.ins_deelsrtcontrole_plandatum > SYSDATE - 365 AND dl.ins_deelsrtcontrole_status IN (0, 2) -- gepland, in behandeling UNION ALL SELECT i.ins_deel_key, dl.ins_deelsrtcontrole_key, disc.ins_discipline_omschrijving, ic.ins_discipline_omschrijving, srt.ins_srtdeel_omschrijving, i.ins_deel_omschrijving, s.ins_srtcontrole_omschrijving, dl.ins_deelsrtcontrole_plandatum, DECODE (st.ins_controlestatus_omschr, 'Afgemeld', 'Voltooid', st.ins_controlestatus_omschr) status, ag.alg_gebouw_omschrijving, av.alg_verdieping_omschrijving, ar.alg_ruimte_omschrijving, NULL te_laat_dagen, NULL dagen_te_gaan, CASE WHEN UPPER (s.ins_srtcontrole_opmerking) LIKE '%WETTELIJK%' THEN 'Ja' WHEN UPPER (s.ins_srtcontrole_opmerking) LIKE '%VERPLICHT%' THEN 'Ja' ELSE 'Nee' END wettelijk_verplicht, (SELECT fac_usrdata_omschr FROM fac_usrdata WHERE fac_usrdata_key = (SELECT fac.safe_to_number (ins_kenmerkdeel_waarde) FROM ins_kenmerkdeel kd, ins_kenmerk k WHERE kd.ins_kenmerk_key = k.ins_kenmerk_key AND kd.ins_deel_key = i.ins_deel_key AND k.ins_kenmerk_niveau = 'D' AND k.ins_srtkenmerk_key = 561)) prioriteit, (SELECT f.prs_perslid_naam_full FROM prs_v_perslid_fullnames f WHERE f.prs_perslid_key = i.prs_perslid_key_beh) beheerder FROM ins_deelsrtcontrole dl, ins_deel i, ins_srtcontrole s, ins_srtdeel srt, ctr_v_aanwezigdiscipline disc, ins_discipline ic, ins_controlestatuses st, alg_gebouw ag, alg_ruimte ar, alg_verdieping av WHERE dl.ins_deel_key = i.ins_deel_key AND dl.ins_srtcontrole_key = s.ins_srtcontrole_key AND i.ins_srtdeel_key = srt.ins_srtdeel_key AND i.ins_srtdeel_key = s.ins_srtinstallatie_key AND i.ins_discipline_key = ic.ins_discipline_key AND dl.ins_deelsrtcontrole_status = st.ins_controlestatus_key AND s.ctr_discipline_key = disc.ins_discipline_key AND disc.ins_discipline_key IN (1941, 2021) AND i.ins_alg_ruimte_key = ar.alg_ruimte_key AND i.ins_alg_ruimte_type = 'R' AND ar.alg_verdieping_key = av.alg_verdieping_key AND av.alg_gebouw_key = ag.alg_gebouw_key AND dl.ins_deelsrtcontrole_status IN (5, 6) UNION ALL SELECT i.ins_deel_key, NULL, disc.ins_discipline_omschrijving, ic.ins_discipline_omschrijving, srt.ins_srtdeel_omschrijving, i.ins_deel_omschrijving, s.ins_srtcontrole_omschrijving, fac.nextcyclusdatedeel (i.ins_deel_key, s.ins_srtcontrole_key, 1), CASE WHEN ROUND(TRUNC (SYSDATE) - fac.nextcyclusdatedeel (i.ins_deel_key, s.ins_srtcontrole_key, 1)) > 30 THEN 'Te laat > 30 dagen' WHEN ROUND(TRUNC (SYSDATE) - fac.nextcyclusdatedeel (i.ins_deel_key, s.ins_srtcontrole_key, 1)) BETWEEN 0 AND 30 THEN 'Te laat' ELSE 'Gepland' END status, ag.alg_gebouw_omschrijving, av.alg_verdieping_omschrijving, ar.alg_ruimte_omschrijving, CASE WHEN ROUND(TRUNC (SYSDATE) - fac.nextcyclusdatedeel (i.ins_deel_key, s.ins_srtcontrole_key, 1)) > 0 THEN ROUND(TRUNC (SYSDATE) - fac.nextcyclusdatedeel (i.ins_deel_key, s.ins_srtcontrole_key, 1)) ELSE NULL END te_laat_dagen, CASE WHEN ROUND(TRUNC (SYSDATE) - fac.nextcyclusdatedeel (i.ins_deel_key, s.ins_srtcontrole_key, 1)) < 0 THEN ROUND(ABS( (TRUNC (SYSDATE) - fac.nextcyclusdatedeel (i.ins_deel_key, s.ins_srtcontrole_key, 1)))) ELSE NULL END dagen_te_gaan, CASE WHEN UPPER (s.ins_srtcontrole_opmerking) LIKE '%WETTELIJK%' THEN 'Ja' WHEN UPPER (s.ins_srtcontrole_opmerking) LIKE '%VERPLICHT%' THEN 'Ja' ELSE 'Nee' END wettelijk_verplicht, (SELECT fac_usrdata_omschr FROM fac_usrdata WHERE fac_usrdata_key = (SELECT fac.safe_to_number (ins_kenmerkdeel_waarde) FROM ins_kenmerkdeel kd, ins_kenmerk k WHERE kd.ins_kenmerk_key = k.ins_kenmerk_key AND kd.ins_deel_key = i.ins_deel_key AND k.ins_kenmerk_niveau = 'D' AND k.ins_srtkenmerk_key = 561)) prioriteit, (SELECT f.prs_perslid_naam_full FROM prs_v_perslid_fullnames f WHERE f.prs_perslid_key = i.prs_perslid_key_beh) beheerder FROM ins_deel i, ins_srtcontrole s, ins_srtdeel srt, ctr_v_aanwezigdiscipline disc, ins_discipline ic, alg_gebouw ag, alg_ruimte ar, alg_verdieping av WHERE i.ins_srtdeel_key = srt.ins_srtdeel_key AND i.ins_srtdeel_key = s.ins_srtinstallatie_key AND i.ins_discipline_key = ic.ins_discipline_key AND s.ctr_discipline_key = disc.ins_discipline_key AND disc.ins_discipline_key IN (1941, 2021) AND i.ins_alg_ruimte_key = ar.alg_ruimte_key AND i.ins_alg_ruimte_type = 'R' AND ar.alg_verdieping_key = av.alg_verdieping_key AND av.alg_gebouw_key = ag.alg_gebouw_key AND i.ins_deel_verwijder IS NULL AND NOT EXISTS (SELECT 'x' FROM ins_deelsrtcontrole WHERE i.ins_deel_key = ins_deel_key AND s.ins_srtcontrole_key = ins_srtcontrole_key AND fac.nextcyclusdatedeel (i.ins_deel_key, s.ins_srtcontrole_key, 1) = ins_deelsrtcontrole_datum_org); CREATE OR REPLACE VIEW arai_v_graph_com_totaal ( STATUS, AANTAL ) AS SELECT status, COUNT ( * ) FROM arai_v_rap_compliance_data GROUP BY status; CREATE OR REPLACE VIEW arai_v_graph_com_wet ( STATUS, AANTAL ) AS SELECT status, COUNT ( * ) FROM arai_v_rap_compliance_data WHERE UPPER (wettelijk_verplicht) = 'JA' GROUP BY status; CREATE OR REPLACE VIEW arai_v_graph_com_kritisch ( STATUS, AANTAL ) AS SELECT status, COUNT ( * ) FROM arai_v_rap_compliance_data WHERE prioriteit LIKE '%1%' GROUP BY status; CREATE OR REPLACE VIEW arai_v_graph_com_inspecties ( STATUS, AANTAL ) AS SELECT status, COUNT ( * ) FROM arai_v_rap_compliance_data WHERE UPPER (taakcategorie) = 'INSPECTIE' GROUP BY status; CREATE OR REPLACE VIEW arai_v_graph_com_onderhoud ( STATUS, AANTAL ) AS SELECT status, COUNT ( * ) FROM arai_v_rap_compliance_data WHERE UPPER (taakcategorie) = 'ONDERHOUD' GROUP BY status; CREATE OR REPLACE VIEW arai_v_graph_taken_voltooid ( FCLT_XAS_, FCLT_YAS_ ) AS SELECT aantal, sub.totaal FROM arai_v_graph_com_totaal, (SELECT SUM (aantal) totaal FROM arai_v_graph_com_totaal WHERE UPPER (status) NOT LIKE 'GEPLAND') sub WHERE UPPER (status) = 'VOLTOOID'; CREATE OR REPLACE VIEW arai_v_rap_disco ( mld_melding_key, meldingnummer, extern_nr, meldbron, mld_melding_start_key, alg_district_omschrijving, locatie, locatie_omschrijving, alg_locatie_key, onrgoed_key, gebouw, gebouw_naam, gebouw_key, verdieping, verdieping_key, ruimtenr, ruimte_omschrijving, ruimte_key, melding_ordernr, kostensoortgroep, kostensoort, kostenplaats, kostenplaats_oms, melder, prs_perslid_key, afdeling, afdeling_omschrijving, prs_bedrijf_key, invoerder, invoerder_key, behandelaar, behandelaar_key, soortmelding, ins_discipline_key, ins_srtdiscipline_prefix, productgroep, subproductgroep, subproductgroepgroep, status, plan_uitvoertijd, datum, datumfilter, plan_einddatum, prioriteit, ingezien, geaccepteerd, afgemeld, verwerkt, acceptoptijd, uitvoeringoptijd_sla, uitvoeringoptijd_afspraak, onderwerp, omschrijving, opmerking, mld_melding_parentkey, tevredenheid, tevredenheid_opm, object_omschrijving, geplande_actie, opdracht_key, opdracht_volgnummer, opdracht_type, opdracht_status, opdracht_datum, opdracht_einddatum, opdracht_plandatum, opdracht_verzonden, opdracht_geaccepteerd, opdracht_afgemeld, opdracht_verwerkt, opdracht_omschrijving, opdracht_opmerking, opdracht_uitvoerende, opdracht_contract, opdracht_behandelaar, opdracht_behandelaar_key, opdracht_uren, opdracht_uren_besteed, opdracht_correctie, opdracht_materiaal, opdracht_uurtarief, opdracht_kosten, opdracht_kostenplaats, opdracht_kostenplaats_oms ) AS SELECT m.mld_melding_key, TO_CHAR (m.mld_melding_key) meldingnummer, m.mld_melding_externnr, mld_meldbron_omschrijving meldbron, m.mld_melding_start_key, alg_district_omschrijving, alg_locatie_code locatie, alg_locatie_omschrijving locatie_omschrijving, l.alg_locatie_key, m.mld_alg_onroerendgoed_keys, og.alg_gebouw_code gebouw, og.alg_gebouw_naam gebouw_naam, og.alg_gebouw_key, og.alg_verdieping_code verdieping, og.alg_verdieping_key, og.alg_ruimte_nr ruimte, og.alg_ruimte_omschrijving ruimte_omschrijving, og.alg_ruimte_key, m.mld_melding_ordernr melding_ordernr, (SELECT ksg.prs_kostensoortgrp_oms FROM prs_kostensoortgrp ksg, prs_kostensoort ks WHERE ksg.prs_kostensoortgrp_key = ks.prs_kostensoortgrp_key AND ks.prs_kostensoort_key = (SELECT COALESCE (sm.prs_kostensoort_key, disc.prs_kostensoort_key) FROM mld_stdmelding sm, mld_discipline disc WHERE sm.mld_ins_discipline_key = disc.ins_discipline_key AND sm.mld_stdmelding_key = s.mld_stdmelding_key)) kostensoortgroep, (SELECT ks.prs_kostensoort_oms FROM prs_kostensoort ks WHERE ks.prs_kostensoort_key = (SELECT COALESCE (sm.prs_kostensoort_key, disc.prs_kostensoort_key) FROM mld_stdmelding sm, mld_discipline disc WHERE sm.mld_ins_discipline_key = disc.ins_discipline_key AND sm.mld_stdmelding_key = s.mld_stdmelding_key)) kostensoort, (SELECT k.prs_kostenplaats_nr FROM prs_kostenplaats k WHERE k.prs_kostenplaats_key = m.prs_kostenplaats_key) kostenplaats, (SELECT k.prs_kostenplaats_omschrijving FROM prs_kostenplaats k WHERE k.prs_kostenplaats_key = m.prs_kostenplaats_key) kostenplaats_oms, (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all pf WHERE pf.prs_perslid_key = m.prs_perslid_key) melder, m.prs_perslid_key, (SELECT prs_afdeling_naam FROM prs_afdeling afd, prs_perslid pp WHERE afd.prs_afdeling_key = pp.prs_afdeling_key AND pp.prs_perslid_key = m.prs_perslid_key) afdeling, (SELECT prs_afdeling_omschrijving FROM prs_afdeling afd, prs_perslid pp WHERE afd.prs_afdeling_key = pp.prs_afdeling_key AND pp.prs_perslid_key = m.prs_perslid_key) afdeling_omschrijving, (SELECT prs_bedrijf_key FROM prs_v_afdeling pva, prs_perslid pp WHERE pva.prs_afdeling_key = pp.prs_afdeling_key AND pp.prs_perslid_key = m.prs_perslid_key) prs_bedrijf_key, (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all pf WHERE pf.prs_perslid_key = mld.getmeldinguser (m.mld_melding_key)) invoerder, fac.gettrackinguserkey ('MLDNEW', m.mld_melding_key), (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all WHERE prs_perslid_key = m.mld_melding_behandelaar_key), m.mld_melding_behandelaar_key, sd.ins_srtdiscipline_omschrijving soortmelding, md.ins_discipline_key ins_discipline_key, ins_srtdiscipline_prefix ins_srtdiscipline_prefix, md.ins_discipline_omschrijving productgroep, s.mld_stdmelding_omschrijving subproductgroep, (SELECT smg.mld_stdmeldinggroep_naam FROM mld_stdmeldinggroep smg WHERE smg.mld_stdmeldinggroep_key = s.mld_stdmeldinggroep_key) subproductgroepgroep, (SELECT DECODE ( COALESCE (par.mld_melding_status, m.mld_melding_status), 4, DECODE (o.mld_opdr_key, NULL, mld_statuses_omschrijving, 'Niet opgelost'), mld_statuses_omschrijving ) FROM mld_statuses sta WHERE sta.mld_statuses_key = COALESCE (par.mld_melding_status, m.mld_melding_status)) status, COALESCE ( par.plan_uitvoertijd, DECODE (m.mld_melding_t_uitvoertijd.eenheid, 'U', TO_NUMBER (NULL), m.mld_melding_t_uitvoertijd.tijdsduur) ) plan_uitvoertijd, -- Altijd in dagen; anders NULL! COALESCE (par.mld_melding_datum, m.mld_melding_datum) datum, m.mld_melding_datum datumfilter, COALESCE (par.mld_melding_einddatum, m.mld_melding_einddatum) plan_einddatum, DECODE(mld_melding_spoed, 1, 'Kritiek', 2, 'Hoog', 3, 'Normaal', 4, 'Laag', 'Onbekend') prioritieit, mld.getmeldingstatusdate (m.mld_melding_key, 3) ingezien, mld.getmeldingstatusdate (m.mld_melding_key, 4) geaccepteerd, COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5), mld.getmeldingstatusdate (m.mld_melding_key, 1)) afgemeld, fac.gettrackingdate ('MLDVER', m.mld_melding_key) verwerkt, CASE WHEN mld_melding_acceptdatum_std < COALESCE ( fac.gettrackingdate ('MLDREJ', m.mld_melding_key), COALESCE ( fac.gettrackingdate ('MLDACP', m.mld_melding_key), SYSDATE ) ) THEN 0 ELSE 1 END acceptoptijd, CASE WHEN s.mld_stdmelding_slabewaken = 0 OR m.mld_melding_indult = 1 THEN NULL WHEN fac.gettrackingdate ('MLDREJ', m.mld_melding_key) IS NOT NULL THEN 1 ELSE CASE -- vooralsnog WHEN mld.getactualuitvoer(m.mld_melding_key).tijdsduur < -- te traag m.mld_melding_t_uitvoertijd.tijdsduur + m.mld_melding_t_respijt.tijdsduur WHEN m.mld_melding_einddatum_std > COALESCE ( fac.gettrackingdate ('MLDAFM', m.mld_melding_key), SYSDATE ) THEN 1 ELSE 0 END END uitvoeringoptijd_sla, CASE WHEN fac.gettrackingdate ('MLDREJ', m.mld_melding_key) IS NOT NULL THEN 1 ELSE CASE WHEN m.mld_melding_einddatum > COALESCE ( fac.gettrackingdate ('MLDAFM', m.mld_melding_key), SYSDATE ) THEN 1 ELSE 0 END END uitvoeringoptijd_afspraak, m.mld_melding_onderwerp, m.mld_melding_omschrijving omschrijving, m.mld_melding_opmerking opmerking, m.mld_melding_parentkey, m.mld_melding_satisfaction, m.mld_melding_satisfaction_op, (SELECT MAX (ins_deel_omschrijving) FROM ins_deel id, mld_melding_object mo WHERE mo.mld_melding_key = m.mld_melding_key AND mo.ins_deel_key = id.ins_deel_key) object_omschrijving, DECODE ( INSTR (mld_melding_opmerking, 'Automatisch gegenereerd door'), 1, 'yes', 'no') geplande_actie, o.mld_opdr_key, o.mld_opdr_bedrijfopdr_volgnr opdracht_volgnummer, (SELECT mld_typeopdr_omschrijving FROM mld_typeopdr t WHERE o.mld_typeopdr_key = t.mld_typeopdr_key) opdracht_type, (SELECT REPLACE (mld_statusopdr_omschrijving, 'Uitgegeven', 'Toegekend') mld_statusopdr_omschrijving FROM mld_statusopdr sta WHERE sta.mld_statusopdr_key = o.mld_statusopdr_key) opdracht_status, o.mld_opdr_datumbegin opdracht_datum, o.mld_opdr_einddatum opdracht_einddatum, o.mld_opdr_plandatum opdracht_plandatum, o.mld_opdr_verzonden opdracht_verzonden, fac.gettrackingdate ('ORDACP', o.mld_opdr_key) opdracht_geaccepteerd, mld.getopdrachtstatusdate (o.mld_opdr_key, 6) opdracht_afgemeld, fac.gettrackingdate ('ORDVER', mld_opdr_key) opdracht_verwerkt, o.mld_opdr_omschrijving opdracht_omschrijving, o.mld_opdr_opmerking opdracht_opmerking, (SELECT naam FROM mld_v_uitvoerende u WHERE u.mld_uitvoerende_key = o.mld_uitvoerende_keys) opdracht_uitvoerende, NULL opdracht_contract, (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all WHERE prs_perslid_key = o.prs_perslid_key) behandelaar, o.prs_perslid_key opdracht_contactpersoon, DECODE (mld_statusopdr_key, 1, 0, 2, 0, -- afgewezen, niet akkoord o.mld_opdr_uren) opdracht_uren, (SELECT COUNT (mld_opdr_uren_besteed) FROM mld_opdr_uren ou WHERE ou.mld_opdr_key = o.mld_opdr_key AND mld_opdr_uren_status IN (3, -- goedgekeurd 4) -- verwerkt ) uren_besteed, DECODE ( mld_statusopdr_key, 1, 0, 2, 0, o.mld_opdr_kosten - o.mld_opdr_materiaal - (o.mld_opdr_uren * o.mld_opdr_uurloon) ) opdracht_correctie, DECODE (mld_statusopdr_key, 1, 0, 2, 0, o.mld_opdr_materiaal) opdracht_materiaal, DECODE (mld_statusopdr_key, 1, 0, 2, 0, o.mld_opdr_uurloon) opdracht_uurtarief, DECODE (mld_statusopdr_key, 1, 0, 2, 0, o.mld_opdr_kosten) opdracht_kosten, (SELECT k.prs_kostenplaats_nr FROM prs_kostenplaats k WHERE k.prs_kostenplaats_key = o.prs_kostenplaats_key) opdracht_kostenplaats, (SELECT k.prs_kostenplaats_omschrijving FROM prs_kostenplaats k WHERE k.prs_kostenplaats_key = o.prs_kostenplaats_key) opdracht_kostenplaats_oms FROM mld_melding m, mld_meldbron mb, mld_stdmelding s, alg_locatie l, alg_district d, alg_v_allonrgoed_gegevens og, mld_discipline md, ins_srtdiscipline sd, mld_opdr o, (SELECT mld_melding_key, mld_melding_status, mld_melding_datum, mld_melding_einddatum, DECODE (m.mld_melding_t_uitvoertijd.eenheid, 'U', TO_NUMBER (NULL), m.mld_melding_t_uitvoertijd.tijdsduur) plan_uitvoertijd FROM mld_melding m WHERE mld_melding_key IN (SELECT mld_melding_parentkey FROM mld_melding WHERE mld_melding_parentkey IS NOT NULL)) par WHERE s.mld_stdmelding_key = m.mld_stdmelding_key AND m.mld_meldbron_key = mb.mld_meldbron_key AND m.fac_activiteit_key IS NULL AND m.mld_alg_locatie_key = l.alg_locatie_key(+) AND sd.ins_srtdiscipline_key = md.ins_srtdiscipline_key AND md.ins_discipline_key = s.mld_ins_discipline_key AND l.alg_district_key = d.alg_district_key(+) AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys(+) AND m.mld_melding_key = o.mld_melding_key(+) AND m.mld_melding_parentkey = par.mld_melding_key(+); CREATE OR REPLACE VIEW arai_v_rap_safesight_afm ( issue_id, status, status_set, remark ) AS SELECT m.mld_melding_key, s.mld_statuses_omschrijving, MAX (t.fac_tracking_datum), m.mld_melding_opmerking FROM mld_melding m, mld_statuses s, fac_tracking t, prs_perslid p, (SELECT fac_tracking_refkey mldkey FROM fac_tracking f, prs_perslid pp WHERE f.prs_perslid_key = pp.prs_perslid_key AND pp.prs_perslid_oslogin = '_SAPI' AND f.fac_srtnotificatie_key = 33) sub -- Alleen meldingen die gemaakt zijn door de API user worden opgehaald WHERE t.fac_srtnotificatie_key IN (33, 28, 40, 29, 34) -- Nieuw, Geaccepteerd, In behandeling, Afgemeld, Afgewezen AND t.fac_tracking_refkey = sub.mldkey AND t.fac_tracking_refkey = m.mld_melding_key AND m.mld_melding_status = s.mld_statuses_key GROUP BY (m.mld_melding_key, s.mld_statuses_omschrijving, m.mld_melding_opmerking); CREATE OR REPLACE VIEW arai_v_rap_safesightmails (person_id, person_email) AS SELECT prs_perslid_key, prs_perslid_email FROM prs_perslid WHERE prs_perslid_verwijder IS NULL AND prs_perslid_email IS NOT NULL; CREATE OR REPLACE VIEW arai_v_rap_safesight_loc ( location_id, location_name, building_id, buidling_name, floor_id, floor_name, room_id, room_name ) AS SELECT l.alg_locatie_key, l.alg_locatie_omschrijving, g.alg_gebouw_key, g.alg_gebouw_omschrijving, v.alg_verdieping_key, v.alg_verdieping_omschrijving, r.alg_ruimte_key, r.alg_ruimte_omschrijving FROM alg_v_aanweziglocatie l, alg_v_aanweziggebouw g, alg_v_aanwezigverdieping v, alg_v_aanwezigruimte r WHERE g.alg_locatie_key = l.alg_locatie_key AND v.alg_gebouw_key = g.alg_gebouw_key AND r.alg_verdieping_key = v.alg_verdieping_key; CREATE OR REPLACE VIEW arai_v_rap_kpi_csu ( melding_key, soort_kpi, evenement, meldingdatum, onderwerp, omschrijving, kenmerkvolgnr, kenmerkoms, kenmerkwaarde ) AS SELECT 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, m.mld_melding_onderwerp, m.mld_melding_omschrijving, mk.mld_kenmerk_volgnummer, COALESCE (mk.mld_kenmerk_omschrijving, msk.mld_srtkenmerk_omschrijving), 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 (1861, 1842, 1841, 1840, 1839, 1838, 1837, 1836, 1835, 1834, 1833, 1832, 1831, 1830, 1829, 1828, 1827, 1826, 1825, 1824, 1823, 1822, 1821) 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 = 2341; -- Aangepast label voor werplekreserveringen CREATE OR REPLACE VIEW CAD_V_LABEL_DEEL_RES_DATUMKORT ( FCLT_F_DATUM, INS_DEEL_KEY, RES_DEEL_OMSCHRIJVING, WAARDE1, WAARDE, WAARDE3, WAARDE_HTML, WAARDE_HTML2, WAARDE_HTML3 ) AS WITH datums AS ( SELECT TRUNC (SYSDATE) + LEVEL - 1 datum FROM DUAL CONNECT BY LEVEL <= 42) SELECT datums.datum fclt_f_datum, isd.res_ins_deel_key ins_deel_key, res_deel_omschrijving, CHR (10) || LISTAGG ( DECODE ( prs_perslid_naam_friendly, NULL, '', '[s40]' || prs_perslid_naam_friendly || ' (' || TO_CHAR (res_rsv_deel_van, 'HH24:MI') || '-' || DECODE ( TRUNC (res_rsv_deel_tot), TRUNC (res_rsv_deel_van), TO_CHAR (res_rsv_deel_tot, 'HH24:MI'), TO_CHAR (res_rsv_deel_tot, 'DD-MM-YYYY HH24:MI')) || ')'), CHR (10)) WITHIN GROUP (ORDER BY res_rsv_deel_van) waarde1, CHR (10) || LISTAGG ( DECODE ( prs_perslid_naam_friendly, NULL, '', '[s40]' || TO_CHAR (res_rsv_deel_van, 'HH24:MI') || ' ' || prs_perslid_naam_friendly), CHR (10)) WITHIN GROUP (ORDER BY res_rsv_deel_van) waarde2, CHR (10) || LISTAGG ( DECODE (prs_perslid_naam_friendly, NULL, '', '[s40]' || prs_perslid_naam_friendly), CHR (10)) WITHIN GROUP (ORDER BY res_rsv_deel_van) waarde3, LISTAGG ( DECODE ( prs_perslid_naam_friendly, NULL, '', '' || TO_CHAR (res_rsv_deel_van, 'HH24:MI') || ' ' || prs_perslid_naam_friendly || ''), '
') WITHIN GROUP (ORDER BY res_rsv_deel_van) waarde_html, LISTAGG ( DECODE ( prs_perslid_naam_friendly, NULL, '', '' || prs_perslid_naam_friendly || ''), '
') WITHIN GROUP (ORDER BY res_rsv_deel_van) waarde_html2, LISTAGG ( DECODE ( prs_perslid_naam_friendly, NULL, '', '' || substr(prs_perslid_voornaam, 1, 1) || '. ' || DECODE (prs_perslid_tussenvoegsel, NULL, '', prs_perslid_tussenvoegsel || ' ') || DECODE (prs_perslid_naam, 'TD', regexp_substr(prs_perslid_voornaam, '[[:alpha:]]+',1,2), prs_perslid_naam) || ''), '
') WITHIN GROUP (ORDER BY res_rsv_deel_van) waarde_html3 FROM res_v_aanwezigdeel isd, datums, (SELECT datum, res_ins_deel_key, prs_perslid_naam_friendly, res_rsv_deel_van, res_rsv_deel_tot, prs_perslid_naam, prs_perslid_tussenvoegsel, prs_perslid_voornaam FROM res_v_aanwezigdeel r, res_v_aanwezigrsv_deel rrd, res_rsv_ruimte rrr, prs_v_perslid_fullnames p, prs_perslid pe, datums WHERE r.res_deel_key = rrd.res_deel_key AND rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key AND rrr.res_rsv_ruimte_host_key = p.prs_perslid_key AND p.prs_perslid_key = pe.prs_perslid_key AND datum >= TRUNC (res_rsv_deel_van) AND datum < TRUNC (res_rsv_deel_tot + 1)) res -- Bezet WHERE isd.res_ins_deel_key = res.res_ins_deel_key(+) AND datums.datum = res.datum(+) GROUP BY datums.datum, isd.res_ins_deel_key, res_deel_omschrijving; CREATE OR REPLACE VIEW cad_v_label_res_namen ( fclt_f_datum, ins_deel_key, waarde ) AS SELECT fclt_f_datum, ins_deel_key, waarde_html3 FROM cad_v_label_deel_res_datumkort; ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- 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; / -- Maak opdrachten aan voor meldingen met autoopdracht die binnenkomen via API2 t.b.v. Safesight meldingen CREATE OR REPLACE PROCEDURE arai_export_autoorder ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2 ) AS CURSOR c IS SELECT m.mld_melding_key, m.prs_kostenplaats_key, m.mld_melding_omschrijving, MAX (bdl.prs_bedrijf_key) prs_bedrijf_key, std.mld_typeopdr_key, m.mld_melding_einddatum, m.mld_melding_status FROM mld_melding m, mld_stdmelding std, prs_dienst d, prs_bedrijfdienstlocatie bdl, fac_tracking f WHERE m.mld_melding_status IN (2, 3, 4) -- Nieuw, Te Accepteren, In behandeling AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_stdmelding_autoorder = 1 AND std.mld_ins_discipline_key = 1282 -- Schoonmaak evementen AND f.fac_tracking_refkey = m.mld_melding_key AND f.fac_srtnotificatie_key = 33 -- mldnew AND f.prs_perslid_key = 16721 -- API user safesight AND std.prs_dienst_key = bdl.prs_dienst_key AND mld_melding_datum > SYSDATE - 1 -- voorkom dat oude meldingen ineens verstuurd gaan worden AND std.mld_typeopdr_key IS NOT NULL AND NOT EXISTS (SELECT mld_melding_key FROM mld_opdr o WHERE mld_melding_key = m.mld_melding_key) GROUP BY mld_melding_key, prs_kostenplaats_key, mld_melding_omschrijving, mld_typeopdr_key, mld_melding_einddatum, mld_melding_status; CURSOR c_flex (c_melding_key NUMBER) IS SELECT sk.mld_srtkenmerk_kenmerktype, sk.mld_srtkenmerk_omschrijving, DECODE ( sk.mld_srtkenmerk_kenmerktype, 'S', fac.getdomeinwaarde (sk.fac_kenmerkdomein_key, mld_kenmerkmelding_waarde), 'R', fac.getdomeinwaarde (sk.fac_kenmerkdomein_key, mld_kenmerkmelding_waarde), mld_kenmerkmelding_waarde) waarde FROM mld_kenmerkmelding km, mld_kenmerk k, mld_srtkenmerk sk WHERE mld_melding_key = c_melding_key AND km.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key ORDER BY k.mld_kenmerk_volgnummer; v_opdr_key NUMBER; v_notificatie_code VARCHAR2(20); v_mld_opdr_bedrijfopdr_volgnr NUMBER; v_melding_omschrijving VARCHAR2(4000); BEGIN FOR rec IN c LOOP BEGIN -- eerst even de status naar geaccepteerd zetten. IF rec.mld_melding_status <> 4 THEN MLD.setmeldingstatus (rec.mld_melding_key, 4, 4); -- Geaccepteerd, Facilitor END IF; v_melding_omschrijving := NULL; FOR rec_flex IN c_flex(rec.mld_melding_key) LOOP BEGIN v_melding_omschrijving := v_melding_omschrijving || rec_flex.mld_srtkenmerk_omschrijving || ': ' || rec_flex.waarde || chr(10); END; END LOOP; v_mld_opdr_bedrijfopdr_volgnr := mld.BepaalOpdrMeldingVolgnr (rec.mld_melding_key); INSERT INTO mld_opdr (mld_melding_key , prs_kostenplaats_key , mld_typeopdr_key , prs_perslid_key , mld_uitvoerende_keys , mld_opdr_datumbegin , mld_opdr_einddatum , mld_opdr_module , mld_opdr_omschrijving , mld_opdr_bedrijfopdr_volgnr , mld_opdr_teverzenden) VALUES ( rec.mld_melding_key , rec.prs_kostenplaats_key , rec.mld_typeopdr_key , 4 -- facilitor , rec.prs_bedrijf_key , SYSDATE , rec.mld_melding_einddatum , 'MLD' , v_melding_omschrijving || rec.mld_melding_omschrijving , v_mld_opdr_bedrijfopdr_volgnr , 1) RETURNING mld_opdr_key INTO v_opdr_key; MLD.setopdrachtstatus(v_opdr_key , 5, 4); -- uitgegeven, Facilitor SELECT DECODE (u.type, 'P', 'ORDMLI', 'ORDMLE') INTO v_notificatie_code FROM mld_v_uitvoerende u WHERE u.mld_uitvoerende_key = rec.prs_bedrijf_key; FAC.trackaction(v_notificatie_code, v_opdr_key, 4, NULL, NULL); -- update melding status MLD.updatemeldingstatus (rec.mld_melding_key, 0, 4); -- facilitor EXCEPTION WHEN OTHERS THEN fac.writelog (p_applname , 'E' , 'OTHERS (error ' || SQLCODE || '/' || SUBSTR (SQLERRM, 1, 100) || ')' , 'Fout bij aanmaken opdracht: ' || rec.mld_melding_key); END; END LOOP; END arai_export_autoorder; / ------ 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