-- -- $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_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 CREATE OR REPLACE VIEW arai_v_events ( arai_events_key, arai_events_full, Evenement, EventID, Bedrijfsnaam, BedrijfsnaamID, BIllto, BilltoID, EventDatumVan, EventDatumTot, EventOpbouw, EventAfbouw, Vervaldatum ) AS SELECT arai_events_key, Evenement || '|' || Bedrijfsnaam, Evenement, EventID, Bedrijfsnaam, BedrijfsnaamID, BIllto, BilltoID, EventDatumVan, EventDatumTot, EventOpbouw, EventAfbouw, EventDatumTot + COALESCE ((SELECT fac.safe_to_number(ud.fac_usrdata_omschr) FROM fac_usrdata ud WHERE ud.fac_usrtab_key = 201 AND ud.fac_usrdata_code = 'EBMS_EVENTS_DAYS_IN_PAST' AND ud.fac_usrdata_verwijder IS NULL), 365) FROM arai_events; --------------------------------------------------------------------------------------------------------------------------------------------- --- EBMS EXPOSANTEN GEGEVENS --------------------------------------------------------------------------------------------------------------------------------------------- CREATE OR REPLACE VIEW arai_v_ebms ( arai_ebms_key, arai_ebms_full, Evenement, EventID, Bedrijfsnaam, BedrijfsnaamID, BIllto, BilltoID, Lokatie, Ordernummer, EventDatumVan, EventDatumTot, Vervaldatum ) AS SELECT eb.arai_ebms_key, eb.Ordernummer || '|' || eb.Evenement || '|' || eb.Bedrijfsnaam || '|' || eb.Lokatie, eb.Evenement, eb.EventID, eb.Bedrijfsnaam, eb.BedrijfsnaamID, eb.BIllto, eb.BilltoID, eb.Lokatie, eb.Ordernummer, ev.EventDatumVan, ev.EventDatumTot, ev.Vervaldatum FROM arai_ebms eb, arai_v_events ev WHERE eb.eventid=ev.eventid; CREATE OR REPLACE PROCEDURE arai_import_ebms ( p_import_key IN NUMBER ) IS c_fielddelimitor VARCHAR2 (1) := '|'; v_newline VARCHAR2 (1000); -- Input line v_aanduiding VARCHAR2 (200); v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); header_is_valid NUMBER := 0; v_ongeldig NUMBER (1); v_count_tot NUMBER (10); v_count_import NUMBER (10); v_count NUMBER; -- De importvelden: v_Evenement VARCHAR2 (256); v_EventID VARCHAR2 (256); v_Bedrijfsnaam VARCHAR2 (256); v_BedrijfsnaamID VARCHAR2 (256); v_BIllto VARCHAR2 (256); v_BilltoID VARCHAR2 (256); v_Lokatie VARCHAR2 (256); v_Ordernummer VARCHAR2 (256); v_EventDatum1 VARCHAR2 (256); v_EventDatum2 VARCHAR2 (256); CURSOR c1 IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; BEGIN DELETE FROM arai_imp_ebms; COMMIT; v_count_tot := 0; v_count_import := 0; FOR rec1 IN c1 LOOP BEGIN v_newline := rec1.fac_imp_file_line; v_aanduiding := ''; v_errorhint := 'Fout bij opvragen te importeren rij'; v_ongeldig := 0; -- Lees alle veldwaarden -- EBMS gegevens fac.imp_getfield_nr (v_newline, c_fielddelimitor, 1, v_Evenement); fac.imp_getfield_nr (v_newline, c_fielddelimitor, 2, v_EventID); fac.imp_getfield_nr (v_newline, c_fielddelimitor, 3, v_Bedrijfsnaam); fac.imp_getfield_nr (v_newline, c_fielddelimitor, 4, v_BedrijfsnaamID); fac.imp_getfield_nr (v_newline, c_fielddelimitor, 5, v_BIllto); fac.imp_getfield_nr (v_newline, c_fielddelimitor, 6, v_BilltoID); fac.imp_getfield_nr (v_newline, c_fielddelimitor, 7, v_Lokatie); fac.imp_getfield_nr (v_newline, c_fielddelimitor, 8, v_Ordernummer); --fac.imp_getfield_nr (v_newline, c_fielddelimitor, 9, v_EventDatum1); --fac.imp_getfield_nr (v_newline, c_fielddelimitor, 10, v_EventDatum2); -- v_aanduiding := '[' || v_Evenement || '|' || v_BedrijfsnaamID || '|' || v_Ordernummer || '] '; -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen -- de juiste kolomkop. Ik controleer daarbij ALLE kolommen! -- Ik negeer alles totdat ik een geldige header ben gepasseerd. -- Header = Evenement|EventID|Bedrijfsnaam|BedrijfsnaamID|BIllto|BilltoID|Lokatie|Ordernummer IF (header_is_valid = 0) THEN IF UPPER (v_Evenement) = 'EVENEMENT' AND UPPER (v_EventID) = 'EVENTID' AND UPPER (v_Bedrijfsnaam) = 'BEDRIJFSNAAM' AND UPPER (v_BedrijfsnaamID) = 'BEDRIJFSNAAMID' AND UPPER (v_Ordernummer) = 'ORDERNUMMER' THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden -- v_errorhint := 'Ongeldige ordernummer'; v_Ordernummer := TRIM (v_Ordernummer); IF (v_Ordernummer IS NOT NULL) THEN IF LENGTH (v_Ordernummer) > 20 THEN v_Ordernummer := SUBSTR (v_Ordernummer, 1, 20); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Ordernummer te lang', 'Ordernummer wordt afgebroken tot [' || v_Ordernummer || ']' ); END IF; ELSE fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Record niet ingelezen', 'Ordernummer is leeg'); v_ongeldig := 1; END IF; -- v_errorhint := 'Ongeldige lokatie'; v_Lokatie := TRIM (v_Lokatie); IF (v_Lokatie IS NOT NULL) THEN IF LENGTH (v_Lokatie) > 50 THEN v_Lokatie := SUBSTR (v_Lokatie, 1, 50); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Lokatie te lang', 'Lokatie wordt afgebroken tot [' || v_Lokatie || ']' ); END IF; --ELSE --fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Record niet ingelezen', 'Lokatie is leeg'); --v_ongeldig := 1; END IF; -- v_errorhint := 'Ongeldige BedrijfsID'; v_BedrijfsnaamID := TRIM (v_BedrijfsnaamID); IF (v_BedrijfsnaamID IS NOT NULL) THEN IF LENGTH (v_BedrijfsnaamID) > 20 THEN v_BedrijfsnaamID := SUBSTR (v_BedrijfsnaamID, 1, 20); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'BedrijfsnaamID te lang', 'BedrijfsnaamID wordt afgebroken tot [' || v_BedrijfsnaamID || ']' ); END IF; --ELSE --fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Record niet ingelezen', 'BedrijfsnaamID is leeg'); --v_ongeldig := 1; END IF; -- v_errorhint := 'Ongeldige bedrijfsnaam'; v_Bedrijfsnaam := TRIM (v_Bedrijfsnaam); IF (v_Bedrijfsnaam IS NOT NULL) THEN IF LENGTH (v_Bedrijfsnaam) > 255 THEN v_Bedrijfsnaam := SUBSTR (v_Bedrijfsnaam, 1, 255); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Bedrijfsnaam te lang', 'Bedrijfsnaam wordt afgebroken tot [' || v_Bedrijfsnaam || ']' ); END IF; --ELSE --fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Record niet ingelezen', 'Bedrijfsnaam is leeg'); --v_ongeldig := 1; END IF; -- v_errorhint := 'Ongeldige BilltoID'; v_BilltoID := TRIM (v_BilltoID); IF (v_BilltoID IS NOT NULL) THEN IF LENGTH (v_BilltoID) > 20 THEN v_BilltoID := SUBSTR (v_BilltoID, 1, 20); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'BilltoID te lang', 'BilltoID wordt afgebroken tot [' || v_BilltoID || ']' ); END IF; --ELSE --fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Record niet ingelezen', 'BilltoID is leeg'); --v_ongeldig := 1; END IF; -- v_errorhint := 'Ongeldige BIllto'; v_BIllto := TRIM (v_BIllto); IF (v_BIllto IS NOT NULL) THEN IF LENGTH (v_BIllto) > 255 THEN v_BIllto := SUBSTR (v_BIllto, 1, 255); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'BIllto te lang', 'BIllto wordt afgebroken tot [' || v_BIllto || ']' ); END IF; --ELSE --fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Record niet ingelezen', 'BIllto is leeg'); --v_ongeldig := 1; END IF; -- v_errorhint := 'Ongeldige EventID'; v_EventID := TRIM (v_EventID); IF (v_EventID IS NOT NULL) THEN IF LENGTH (v_EventID) > 20 THEN v_EventID := SUBSTR (v_EventID, 1, 20); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'EventID te lang', 'EventID wordt afgebroken tot [' || v_EventID || ']' ); END IF; ELSE fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Record niet ingelezen', 'EventID is leeg'); v_ongeldig := 1; END IF; -- v_errorhint := 'Ongeldige Evenement'; v_Evenement := TRIM (v_Evenement); IF (v_Evenement IS NOT NULL) THEN IF LENGTH (v_Evenement) > 255 THEN v_Evenement := SUBSTR (v_Evenement, 1, 255); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Evenement te lang', 'Evenement wordt afgebroken tot [' || v_Evenement || ']' ); END IF; ELSE fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Record niet ingelezen', 'Evenement is leeg'); v_ongeldig := 1; END IF; -- Insert geformatteerde import record IF v_ongeldig = 0 THEN BEGIN v_errorhint := 'Fout bij toevoegen regel aan importtabel arai_imp_ebms'; INSERT INTO arai_imp_ebms (Evenement, EventID, Bedrijfsnaam, BedrijfsnaamID, BIllto, BilltoID, Lokatie, Ordernummer) VALUES (v_Evenement, v_EventID, v_Bedrijfsnaam, v_BedrijfsnaamID, v_BIllto, v_BilltoID, v_Lokatie, v_Ordernummer); COMMIT; v_count_import := v_count_import + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := v_errorhint || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Ingelezen regel kan niet worden weggeschreven!' ); COMMIT; END; END IF; END IF; END; END LOOP; IF (header_is_valid = 0) THEN fac.imp_writelog (p_import_key, 'E', 'Ongeldig importbestand', 'Geen header of header niet volgens specificatie!' ); ELSE fac.imp_writelog (p_import_key, 'S', 'EBMS: aantal ingelezen regels: ' || TO_CHAR (v_count_import), '' ); END IF; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint ); COMMIT; END arai_import_ebms; / CREATE OR REPLACE PROCEDURE arai_update_ebms ( p_import_key IN NUMBER ) IS v_aanduiding VARCHAR2 (200); v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count_tot NUMBER (10); v_count_error NUMBER (10); v_count NUMBER (10); v_ordernummer VARCHAR(20); -- Alle kpi_wachtijen van Mitel telefooncentrale CURSOR c_imp_ebms IS SELECT * FROM arai_imp_ebms k; BEGIN v_count_tot := 0; v_count_error := 0; v_aanduiding := ''; -- Alle kpi-wachtrijen verwerken... FOR rec_ebms IN c_imp_ebms LOOP BEGIN v_count_tot := v_count_tot + 1; v_errorhint := 'Fout bij bepalen ordernummer [' || UPPER(rec_ebms.Ordernummer) || ']'; -- Dit zal waarschijnlijk een error opleveren bij 2 inserts van ordernummer. -- Evenement, EventID, Bedrijfsnaam, BedrijfsnaamID, BIllto, BilltoID, Lokatie, Ordernummer -- Bepaal het record uit arai_ebms op basis van ordernummer SELECT COUNT (*) INTO v_count FROM arai_ebms WHERE Ordernummer = UPPER (rec_ebms.Ordernummer); IF (v_count = 0) THEN -- Ordernummer bestaat nog niet, dus toevoegen... v_errorhint := 'Fout bij toevoegen ordernummer ' || UPPER(rec_ebms.Ordernummer); INSERT INTO arai_ebms (Evenement, EventID, Bedrijfsnaam, BedrijfsnaamID, BIllto, BilltoID, Lokatie, Ordernummer) VALUES (rec_ebms.Evenement, rec_ebms.EventID, rec_ebms.Bedrijfsnaam, rec_ebms.BedrijfsnaamID, rec_ebms.BIllto, rec_ebms.BilltoID, rec_ebms.Lokatie, UPPER(rec_ebms.Ordernummer)); COMMIT; ELSE -- Ordernummer bestaat al, dus updaten van alle gegevens v_errorhint := 'Fout bij bijwerken van ordernummer ' || UPPER(rec_ebms.Ordernummer); UPDATE arai_ebms SET Evenement= rec_ebms.Evenement, EventID=rec_ebms.EventID, Bedrijfsnaam=rec_ebms.Bedrijfsnaam, BedrijfsnaamID=rec_ebms.BedrijfsnaamID, BIllto=rec_ebms.BIllto, BilltoID=rec_ebms.BilltoID, Lokatie=rec_ebms.Lokatie WHERE Ordernummer=UPPER(rec_ebms.Ordernummer); COMMIT; END IF; COMMIT; EXCEPTION WHEN OTHERS THEN v_count_error := v_count_error + 1; oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint ); COMMIT; END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'EBMS: verwerkte regels zonder foutmelding: ' || TO_CHAR (v_count_tot - v_count_error), '' ); fac.imp_writelog (p_import_key, 'S', 'KPI: verwerkte regels met foutmelding: ' || TO_CHAR (v_count_error), '' ); COMMIT; END arai_update_ebms; / -- mbmb --------------------------------------------------------------------------------------------------------------------------------------------- --- EBMS EVENTS / ORGANISATIE GEGEVENS --------------------------------------------------------------------------------------------------------------------------------------------- CREATE OR REPLACE PROCEDURE arai_import_events ( p_import_key IN NUMBER ) IS c_fielddelimitor VARCHAR2 (1) := '|'; v_newline VARCHAR2 (1000); -- Input line v_aanduiding VARCHAR2 (200); v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); header_is_valid NUMBER := 0; v_ongeldig NUMBER (1); v_count_tot NUMBER (10); v_count_import NUMBER (10); v_count NUMBER; -- De importvelden: v_Evenement VARCHAR2 (256); v_EventID VARCHAR2 (256); v_Bedrijfsnaam VARCHAR2 (256); v_BedrijfsnaamID VARCHAR2 (256); v_BIllto VARCHAR2 (256); v_BilltoID VARCHAR2 (256); v_EventDatum1 VARCHAR2 (256); v_EventDatum2 VARCHAR2 (256); v_EventOpbouw VARCHAR2 (256); v_EventAfbouw VARCHAR2 (256); CURSOR c1 IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; BEGIN DELETE FROM arai_imp_events; COMMIT; v_count_tot := 0; v_count_import := 0; FOR rec1 IN c1 LOOP BEGIN v_newline := rec1.fac_imp_file_line; v_aanduiding := ''; v_errorhint := 'Fout bij opvragen te importeren rij'; v_ongeldig := 0; -- Lees alle veldwaarden -- EVENTS GEGEVENS UIT EBMS fac.imp_getfield_nr (v_newline, c_fielddelimitor, 1, v_Evenement); fac.imp_getfield_nr (v_newline, c_fielddelimitor, 2, v_EventID); fac.imp_getfield_nr (v_newline, c_fielddelimitor, 3, v_Bedrijfsnaam); fac.imp_getfield_nr (v_newline, c_fielddelimitor, 4, v_BedrijfsnaamID); fac.imp_getfield_nr (v_newline, c_fielddelimitor, 5, v_BIllto); fac.imp_getfield_nr (v_newline, c_fielddelimitor, 6, v_BilltoID); fac.imp_getfield_nr (v_newline, c_fielddelimitor, 7, v_EventOpbouw); fac.imp_getfield_nr (v_newline, c_fielddelimitor, 8, v_EventDatum1); fac.imp_getfield_nr (v_newline, c_fielddelimitor, 9, v_EventDatum2); fac.imp_getfield_nr (v_newline, c_fielddelimitor, 10, v_EventAfbouw); -- v_aanduiding := '[' || v_Evenement || '|' || v_BedrijfsnaamID || '] '; -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen -- de juiste kolomkop. Ik controleer daarbij ALLE kolommen! -- Ik negeer alles totdat ik een geldige header ben gepasseerd. -- Header = Evenement|EventID|Bedrijfsnaam|BedrijfsnaamID|BIllto|BilltoID IF (header_is_valid = 0) THEN IF UPPER (v_Evenement) = 'EVENEMENT' AND UPPER (v_EventID) = 'EVENTID' AND UPPER (v_Bedrijfsnaam) = 'BEDRIJFSNAAM' AND UPPER (v_BedrijfsnaamID) = 'BEDRIJFSNAAMID' THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden -- v_errorhint := 'Ongeldige EventID'; v_EventID := TRIM (v_EventID); IF (v_EventID IS NOT NULL) THEN IF LENGTH (v_EventID) > 20 THEN v_EventID := SUBSTR (v_EventID, 1, 20); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'EventID te lang', 'EventID wordt afgebroken tot [' || v_EventID || ']' ); END IF; ELSE fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Record niet ingelezen', 'EventID is leeg'); v_ongeldig := 1; END IF; -- v_errorhint := 'Ongeldige Evenement'; v_Evenement := TRIM (v_Evenement); IF (v_Evenement IS NOT NULL) THEN IF LENGTH (v_Evenement) > 255 THEN v_Evenement := SUBSTR (v_Evenement, 1, 255); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Evenement te lang', 'Evenement wordt afgebroken tot [' || v_Evenement || ']' ); END IF; ELSE fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Record niet ingelezen', 'Evenement is leeg'); v_ongeldig := 1; END IF; -- v_errorhint := 'Ongeldige BedrijfsID'; v_BedrijfsnaamID := TRIM (v_BedrijfsnaamID); IF (v_BedrijfsnaamID IS NOT NULL) THEN IF LENGTH (v_BedrijfsnaamID) > 20 THEN v_BedrijfsnaamID := SUBSTR (v_BedrijfsnaamID, 1, 20); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'BedrijfsnaamID te lang', 'BedrijfsnaamID wordt afgebroken tot [' || v_BedrijfsnaamID || ']' ); END IF; END IF; -- v_errorhint := 'Ongeldige bedrijfsnaam'; v_Bedrijfsnaam := TRIM (v_Bedrijfsnaam); IF (v_Bedrijfsnaam IS NOT NULL) THEN IF LENGTH (v_Bedrijfsnaam) > 255 THEN v_Bedrijfsnaam := SUBSTR (v_Bedrijfsnaam, 1, 255); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Bedrijfsnaam te lang', 'Bedrijfsnaam wordt afgebroken tot [' || v_Bedrijfsnaam || ']' ); END IF; END IF; -- v_errorhint := 'Ongeldige BilltoID'; v_BilltoID := TRIM (v_BilltoID); IF (v_BilltoID IS NOT NULL) THEN IF LENGTH (v_BilltoID) > 20 THEN v_BilltoID := SUBSTR (v_BilltoID, 1, 20); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'BilltoID te lang', 'BilltoID wordt afgebroken tot [' || v_BilltoID || ']' ); END IF; END IF; -- v_errorhint := 'Ongeldige BIllto'; v_BIllto := TRIM (v_BIllto); IF (v_BIllto IS NOT NULL) THEN IF LENGTH (v_BIllto) > 255 THEN v_BIllto := SUBSTR (v_BIllto, 1, 255); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'BIllto te lang', 'BIllto wordt afgebroken tot [' || v_BIllto || ']' ); END IF; END IF; v_errorhint := 'Ongeldige Start Eventdatum '; v_EventDatum1 := TRIM (v_EventDatum1); IF (v_EventDatum1 IS NOT NULL) THEN IF LENGTH (v_EventDatum1) > 50 THEN v_EventDatum1 := SUBSTR (v_EventDatum1, 1, 50); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Start Eventdatum te lang', 'Start Eventdatum wordt afgebroken tot [' || v_EventDatum1 || ']' ); END IF; v_EventDatum1 := REPLACE(REPLACE(v_EventDatum1,' ', ' '),' ', ' '); END IF; v_errorhint := 'Ongeldige Einde Eventdatum '; v_EventDatum2 := TRIM (v_EventDatum2); IF (v_EventDatum2 IS NOT NULL) THEN IF LENGTH (v_EventDatum2) > 50 THEN v_EventDatum2 := SUBSTR (v_EventDatum2, 1, 50); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Einde Eventdatum te lang', 'Einde Eventdatum wordt afgebroken tot [' || v_EventDatum2 || ']' ); END IF; v_EventDatum2 := REPLACE(REPLACE(v_EventDatum2,' ', ' '),' ', ' '); END IF; v_errorhint := 'Ongeldige Start Opbouwdatum '; v_EventOpbouw := TRIM (v_EventOpbouw); IF (v_EventOpbouw IS NOT NULL) THEN IF LENGTH (v_EventOpbouw) > 50 THEN v_EventOpbouw := SUBSTR (v_EventOpbouw, 1, 50); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Start Opbouwdatum te lang', 'Start Opbouwdatum wordt afgebroken tot [' || v_EventOpbouw || ']' ); END IF; v_EventOpbouw := REPLACE(REPLACE(v_EventOpbouw,' ', ' '),' ', ' '); END IF; v_errorhint := 'Ongeldige Einde Afbouwdatum '; v_EventAfbouw := TRIM (v_EventAfbouw); IF (v_EventAfbouw IS NOT NULL) THEN IF LENGTH (v_EventAfbouw) > 50 THEN v_EventAfbouw := SUBSTR (v_EventAfbouw, 1, 50); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Einde Afbouwdatum te lang', 'Einde Afbouwdatum wordt afgebroken tot [' || v_EventAfbouw || ']' ); END IF; v_EventAfbouw := REPLACE(REPLACE(v_EventAfbouw,' ', ' '),' ', ' '); END IF; -- Insert geformatteerde import record IF v_ongeldig = 0 THEN BEGIN v_errorhint := 'Fout bij toevoegen regel aan importtabel arai_imp_events'; INSERT INTO arai_imp_events (Evenement, EventID, Bedrijfsnaam, BedrijfsnaamID, BIllto, BilltoID, EventDatumVan, EventDatumTot, EventOpbouw, EventAfbouw) VALUES (v_Evenement, v_EventID, v_Bedrijfsnaam, v_BedrijfsnaamID, v_BIllto, v_BilltoID, v_EventDatum1, v_EventDatum2, v_EventOpbouw, v_EventAfbouw); COMMIT; v_count_import := v_count_import + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := v_errorhint || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Ingelezen regel kan niet worden weggeschreven!' ); COMMIT; END; END IF; END IF; END; END LOOP; IF (header_is_valid = 0) THEN fac.imp_writelog (p_import_key, 'E', 'Ongeldig importbestand', 'Geen header of header niet volgens specificatie!' ); ELSE fac.imp_writelog (p_import_key, 'S', 'EVENTS: aantal ingelezen regels: ' || TO_CHAR (v_count_import), '' ); END IF; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint ); COMMIT; END arai_import_events; / CREATE OR REPLACE PROCEDURE arai_update_events ( p_import_key IN NUMBER ) IS v_aanduiding VARCHAR2 (200); v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count_tot NUMBER (10); v_count_error NUMBER (10); v_count NUMBER (10); -- Alle event-regels CURSOR c_imp_events IS SELECT * FROM arai_imp_events; BEGIN v_count_tot := 0; v_count_error := 0; v_aanduiding := ''; -- Alle events verwerken... FOR rec_events IN c_imp_events LOOP BEGIN v_count_tot := v_count_tot + 1; v_errorhint := 'Fout bij bepalen events-id [' || UPPER(rec_events.EventID) || ']'; -- Evenement, EventID, Bedrijfsnaam, BedrijfsnaamID, BIllto, BilltoID -- Bepaal het record uit arai_events op basis van event_id SELECT COUNT (*) INTO v_count FROM arai_events WHERE EventID = UPPER (rec_events.EventID); IF (v_count = 0) THEN -- Event bestaat nog niet, dus toevoegen... v_errorhint := 'Fout bij toevoegen event ' || UPPER(rec_events.EventID); INSERT INTO arai_events (Evenement, EventID, Bedrijfsnaam, BedrijfsnaamID, BIllto, BilltoID, EventDatumVan, EventDatumTot, EventOpbouw, EventAfbouw) SELECT rec_events.Evenement, UPPER(rec_events.EventID), rec_events.Bedrijfsnaam, rec_events.BedrijfsnaamID, rec_events.BIllto, rec_events.BilltoID, to_date(rec_events.EventDatumVan,'DD-MM-YYYY HH24:MI:SS'), to_date(rec_events.EventDatumTot,'DD-MM-YYYY HH24:MI:SS'), to_date(rec_events.EventOpbouw,'DD-MM-YYYY HH24:MI:SS'), to_date(rec_events.EventAfbouw,'DD-MM-YYYY HH24:MI:SS') FROM DUAL; -- VALUES (rec_events.Evenement, rec_events.EventID, rec_events.Bedrijfsnaam, rec_events.BedrijfsnaamID, rec_events.BIllto, rec_events.BilltoID); COMMIT; ELSE -- Event bestaat al, dus updaten van alle gegevens v_errorhint := 'Fout bij bijwerken van event ' || UPPER(rec_events.EventID); UPDATE arai_events SET Evenement= rec_events.Evenement, Bedrijfsnaam=rec_events.Bedrijfsnaam, BedrijfsnaamID=rec_events.BedrijfsnaamID, BIllto=rec_events.BIllto, BilltoID=rec_events.BilltoID, EventDatumVan=to_date(rec_events.EventDatumVan,'DD-MM-YYYY HH24:MI:SS'), EventDatumTot=to_date(rec_events.EventDatumTot,'DD-MM-YYYY HH24:MI:SS'), EventOpbouw=to_date(rec_events.EventOpbouw,'DD-MM-YYYY HH24:MI:SS'), EventAfbouw=to_date(rec_events.EventAfbouw,'DD-MM-YYYY HH24:MI:SS') WHERE EventID=UPPER(rec_events.EventID); COMMIT; END IF; COMMIT; EXCEPTION WHEN OTHERS THEN v_count_error := v_count_error + 1; oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint ); COMMIT; END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'EVENTS: verwerkte regels zonder foutmelding: ' || TO_CHAR (v_count_tot - v_count_error), '' ); fac.imp_writelog (p_import_key, 'S', 'EVENTS: verwerkte regels met foutmelding: ' || TO_CHAR (v_count_error), '' ); COMMIT; END arai_update_events; / --------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------- --- KPI TEMPERATUUR KPI TEMPERATUUR KPI TEMPERATUUR --- --------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------- -- sd.ins_srtgroep_key (+) = 1 is de key van de groep 'Temperatuur' onder de discipline 'Klimaat' -- kd.ins_kenmerk_key (+) = 1 is de key van het kenmerk Temperatuur. -- ak.alg_kenmerk_key (+) = 1020 is de key van kenmerk 'Join KPI?' -- ak1.alg_kenmerk_key (+) = 1021 is de key van kenmerk 'Min. temperatuur' -- ak2.alg_kenmerk_key (+) = 1022 is de key van kenmerk 'Max. temperatuur' -- ud1.fac_usrtab_key = 41 is de key van de usertabel '$KPI_SETTINGS'. -- ud.fac_usrdata_code = KPI_TEMP_GROEN_MIN is de ondergrens voor de grone zone (default 20.0), KPI_TEMP_GROEN_MAX is de bovengrens voor de groene zone (default 24).. -- KPI_TEMP_ORANJE_MARGE is de marge (default 1.0 graad) die de ondergrens voor de oranje zone (default dus 20-1=19) en de bovengrens voor orane (default dus 24+1=25) aangeeft. -- join_kpi heeft de volgende (key)waarden (uit eigen tabel Join KPI): 1 = Nee (doet niet mee), 2 = Nu ff niet, 3 = Ja (doet mee). -- min_waarde_oranje (1e min. grenswaarde, instelbaar per ruimte, als leeg dan eerst uit usrtab $KPI_SETTINGS (KPI_TEMP_GROEN_MIN), anders default 20.0), -- max_waarde_oranje,(1e max. grenswaarde, instelbaar per ruimte, als leeg dan eerst uit usrtab $KPI_SETTINGS (KPI_TEMP_GROEN_MAX), anders default 24.0), -- min_waarde, (rode grenswaarde, is gelijk aan min_waarde_oranje - 1.0) -- max_waarde, (rode grenswaarde, is gelijk aan max_waarde_oranje + 1.0) CREATE OR REPLACE VIEW arai_v_kpi_temp_per_ruimte ( ins_deel_key, ins_deel_omschrijving, alg_ruimte_key, join_kpi, alg_gebouw_code, alg_gebouw_naam, alg_verdieping_key, alg_verdieping_volgnr, alg_ruimte_nr, alg_ruimte_omschrijving, ins_kenmerkdeel_waarde, min_waarde_oranje, max_waarde_oranje, min_waarde, max_waarde, ins_kenmerkdeel_aanmaak, ins_kenmerkdeel_verwijder, url ) AS SELECT d.ins_deel_key, d.ins_deel_omschrijving, r.alg_ruimte_key, COALESCE(ak.alg_onrgoedkenmerk_waarde,'1'), g.alg_gebouw_code, g.alg_gebouw_naam, v.alg_verdieping_key, v.alg_verdieping_volgnr, r.alg_ruimte_nr, r.alg_ruimte_omschrijving, kd.ins_kenmerkdeel_waarde, COALESCE(ak1.alg_onrgoedkenmerk_waarde, ( SELECT ud.fac_usrdata_omschr FROM fac_usrdata ud WHERE ud.fac_usrtab_key = 41 AND ud.fac_usrdata_code = 'KPI_TEMP_GROEN_MIN' AND ud.fac_usrdata_verwijder IS NULL ), '20.0'), COALESCE(ak2.alg_onrgoedkenmerk_waarde, ( SELECT ud.fac_usrdata_omschr FROM fac_usrdata ud WHERE ud.fac_usrtab_key = 41 AND ud.fac_usrdata_code = 'KPI_TEMP_GROEN_MAX' AND ud.fac_usrdata_verwijder IS NULL ), '24.0'), COALESCE(ak1.alg_onrgoedkenmerk_waarde, ( SELECT ud.fac_usrdata_omschr FROM fac_usrdata ud WHERE ud.fac_usrtab_key = 41 AND ud.fac_usrdata_code = 'KPI_TEMP_GROEN_MIN' AND ud.fac_usrdata_verwijder IS NULL ), '20.0') - COALESCE( ( SELECT ud.fac_usrdata_omschr FROM fac_usrdata ud WHERE ud.fac_usrtab_key = 41 AND ud.fac_usrdata_code = 'KPI_TEMP_ORANJE_MARGE' AND ud.fac_usrdata_verwijder IS NULL ), '1.0'), COALESCE(ak2.alg_onrgoedkenmerk_waarde, ( SELECT ud.fac_usrdata_omschr FROM fac_usrdata ud WHERE ud.fac_usrtab_key = 41 AND ud.fac_usrdata_code = 'KPI_TEMP_GROEN_MAX' AND ud.fac_usrdata_verwijder IS NULL ), '24.0') + COALESCE( ( SELECT ud.fac_usrdata_omschr FROM fac_usrdata ud WHERE ud.fac_usrtab_key = 41 AND ud.fac_usrdata_code = 'KPI_TEMP_ORANJE_MARGE' AND ud.fac_usrdata_verwijder IS NULL ), '1.0'), kd.ins_kenmerkdeel_aanmaak, kd.ins_kenmerkdeel_verwijder, NULL FROM ins_deel d, ins_srtdeel sd, alg_ruimte r, alg_verdieping v, alg_gebouw g, ins_kenmerkdeel kd, alg_onrgoedkenmerk ak, alg_onrgoedkenmerk ak1, alg_onrgoedkenmerk ak2 WHERE d.ins_deel_verwijder IS NULL AND d.ins_srtdeel_key = sd.ins_srtdeel_key (+) AND sd.ins_srtgroep_key (+) = 1 AND r.alg_ruimte_key = d.ins_alg_ruimte_key (+) AND v.alg_verdieping_key = r.alg_verdieping_key AND g.alg_gebouw_key = v.alg_gebouw_key AND kd.ins_deel_key (+) = d.ins_deel_key AND kd.ins_kenmerk_key (+) = 1 AND r.alg_ruimte_key = ak.alg_onrgoed_key AND ak.alg_onrgoed_niveau = 'R' AND ak.alg_kenmerk_key (+) = 1020 AND r.alg_ruimte_key = ak1.alg_onrgoed_key (+) AND ak1.alg_onrgoed_niveau (+) = 'R' AND ak1.alg_kenmerk_key (+) = 1021 AND r.alg_ruimte_key = ak2.alg_onrgoed_key (+) AND ak2.alg_onrgoed_niveau (+) = 'R' AND ak2.alg_kenmerk_key (+) = 1022; CREATE OR REPLACE VIEW arai_v_rap_kpi_temp_per_ruimte ( alg_ruimte_key, join_kpi, alg_gebouw_code, alg_gebouw_naam, alg_verdieping_key, alg_verdieping_volgnr, alg_ruimte_nr, alg_ruimte_omschrijving, avg_temp, min_temp, max_temp, min_waarde_oranje, max_waarde_oranje, min_waarde, max_waarde, datum, url ) AS SELECT alg_ruimte_key, MIN(join_kpi), MIN(alg_gebouw_code), MIN(alg_gebouw_naam), MIN(alg_verdieping_key), MIN(alg_verdieping_volgnr), MIN(alg_ruimte_nr), MIN(alg_ruimte_omschrijving), ROUND(AVG(ins_kenmerkdeel_waarde),1), ROUND(MIN(ins_kenmerkdeel_waarde),1), ROUND(MAX(ins_kenmerkdeel_waarde),1), MIN(min_waarde_oranje), MIN(max_waarde_oranje), MIN(min_waarde), MIN(max_waarde), MIN(ins_kenmerkdeel_aanmaak), MIN(url) FROM arai_v_kpi_temp_per_ruimte WHERE ins_kenmerkdeel_verwijder IS NULL AND TRUNC(ins_kenmerkdeel_aanmaak) = TRUNC(SYSDATE) GROUP BY alg_ruimte_key ; CREATE OR REPLACE VIEW arai_v_rap_temp_per_datapunt ( fclt_x_jaar, fclt_x_maand, fclt_x_dag, fclt_x_uur, fclt_x_minuut, datum, fclt_f_gebouw, fclt_f_verdieping, fclt_f_ruimte, ruimtetemperatuur, fclt_f_datapunt, temperatuur ) AS SELECT to_char(ins_kenmerkdeel_aanmaak,'yyyy'), to_char(ins_kenmerkdeel_aanmaak,'mm'), to_char(ins_kenmerkdeel_aanmaak,'dd'), to_char(ins_kenmerkdeel_aanmaak,'hh24'), to_char(ins_kenmerkdeel_aanmaak,'mi'), to_char(ins_kenmerkdeel_aanmaak,'dd-mm-yyyy hh24:mi'), alg_gebouw_code || '-' || alg_gebouw_naam, to_char(alg_verdieping_volgnr), alg_ruimte_omschrijving, to_char((SELECT ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) FROM arai_v_kpi_temp_per_ruimte y WHERE y.alg_ruimte_key = x.alg_ruimte_key AND y.ins_kenmerkdeel_aanmaak = x.ins_kenmerkdeel_aanmaak GROUP BY alg_ruimte_key, TO_CHAR(ins_kenmerkdeel_aanmaak,'HH24:MI') )), ins_deel_omschrijving, ins_kenmerkdeel_waarde FROM arai_v_kpi_temp_per_ruimte x; CREATE OR REPLACE VIEW arai_v_rap_temp_per_ruimte ( fclt_x_jaar, fclt_x_maand, fclt_x_dag, fclt_x_dagdeel, fclt_x_uur, fclt_x_minuut, fclt_f_gebouw, fclt_f_verdieping, fclt_f_ruimte, ruimtetemperatuur, kpi_temp ) AS SELECT to_char(ins_kenmerkdeel_aanmaak,'yyyy'), to_char(ins_kenmerkdeel_aanmaak,'mm'), to_char(ins_kenmerkdeel_aanmaak,'dd'), CASE WHEN to_char(ins_kenmerkdeel_aanmaak,'hh24') <= '06' THEN 'nacht' WHEN to_char(ins_kenmerkdeel_aanmaak,'hh24') <= '11' THEN 'ochtend' WHEN to_char(ins_kenmerkdeel_aanmaak,'hh24') <= '17' THEN 'middag' ELSE 'avond' END dagdeel, to_char(ins_kenmerkdeel_aanmaak,'hh24'), to_char(ins_kenmerkdeel_aanmaak,'mi'), MIN(alg_gebouw_code) || '-' || MIN(alg_gebouw_naam), to_char(MIN(alg_verdieping_volgnr)), MIN(alg_ruimte_omschrijving), to_char(ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1)), CASE WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) IS NULL THEN -1 WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) < MIN(min_waarde) THEN 2 WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) > MIN(max_waarde) THEN 2 WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) < MIN(min_waarde_oranje) THEN 1 WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) > MIN(max_waarde_oranje) THEN 1 ELSE 0 END kpi_temp FROM arai_v_kpi_temp_per_ruimte x GROUP BY alg_ruimte_key, to_char(ins_kenmerkdeel_aanmaak,'yyyy'), to_char(ins_kenmerkdeel_aanmaak,'mm'), to_char(ins_kenmerkdeel_aanmaak,'dd'), to_char(ins_kenmerkdeel_aanmaak,'hh24'), to_char(ins_kenmerkdeel_aanmaak,'mi'); ----------------------------------- KPI TEMPERATUUR GRAFIEKEN ----------------------------------- -- Grafiek 1: KPI gemiddelde temperatuuur per ruimte van vandaag van max. 4 uur terug in de tijd uitgezet. CREATE OR REPLACE VIEW arai_v_graph_kpi_temp_vandaag ( fclt_key, FCLT_XAS_TIJD, FCLT_YAS_TEMPERATUUR, FCLT_URL ) AS SELECT alg_ruimte_key, TO_CHAR(ins_kenmerkdeel_aanmaak,'HH24:MI'), ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1), MIN(url) FROM arai_v_kpi_temp_per_ruimte WHERE ins_kenmerkdeel_aanmaak >= SYSDATE - 4/24 AND TRUNC(ins_kenmerkdeel_aanmaak) = TRUNC(SYSDATE) GROUP BY alg_ruimte_key, TO_CHAR(ins_kenmerkdeel_aanmaak,'HH24:MI'); -- Grafiek 2: KPI gemiddelde temperatuuur per ruimte van vandaag van max. 4 uur terug in de tijd uitgezet. -- FCLT_YAS_TEMPERATUUR is de y-as voor rood -- FCLT_YAS2_TEMPERATUUR is de y-as voor groen -- FCLT_YAS3_TEMPERATUUR is de y-as voor oranje -- Barchart met 3 kleuren: groen (temp = okee), oranje (temp is oranje) en rood (temp is rood) CREATE OR REPLACE VIEW arai_v_graph_kpi_temp2_vandaag ( fclt_key, FCLT_XAS_TIJD, FCLT_YAS_TEMPERATUUR, FCLT_YAS2_TEMPERATUUR, FCLT_YAS3_TEMPERATUUR, FCLT_URL ) AS SELECT alg_ruimte_key, TO_CHAR(ins_kenmerkdeel_aanmaak,'HH24:MI'), CASE WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) IS NULL THEN 0 WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) < MIN(min_waarde) THEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) > MIN(max_waarde) THEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) ELSE 0 END, CASE WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) IS NULL THEN 0 WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) < MIN(min_waarde_oranje) THEN 0 WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) > MIN(max_waarde_oranje) THEN 0 ELSE ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) END, CASE WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) IS NULL THEN 0 WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) < MIN(min_waarde_oranje) AND ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) >= MIN(min_waarde) THEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) WHEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) > MAX(max_waarde_oranje) AND ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) <= MIN(max_waarde) THEN ROUND(AVG(to_number(COALESCE(ins_kenmerkdeel_waarde,'0'))),1) ELSE 0 END, MIN(url) FROM arai_v_kpi_temp_per_ruimte WHERE ins_kenmerkdeel_aanmaak >= SYSDATE - 4/24 AND TRUNC(ins_kenmerkdeel_aanmaak) = TRUNC(SYSDATE) GROUP BY alg_ruimte_key, TO_CHAR(ins_kenmerkdeel_aanmaak,'HH24:MI'); CREATE OR REPLACE VIEW arai_v_label_ins_temp (ins_deel_key, waarde) AS SELECT ins_deel_key, CHR (10) || CASE WHEN join_kpi = 3 THEN CASE WHEN ins_kenmerkdeel_waarde IS NULL THEN '[s750][cff0000]' WHEN ROUND(to_number(COALESCE(ins_kenmerkdeel_waarde,'0')),1) < min_waarde THEN '[s750][cff0000]' WHEN ROUND(to_number(COALESCE(ins_kenmerkdeel_waarde,'0')),1) > max_waarde THEN '[s750][cff0000]' WHEN ROUND(to_number(COALESCE(ins_kenmerkdeel_waarde,'0')),1) < min_waarde_oranje THEN '[s750][cff8800]' WHEN ROUND(to_number(COALESCE(ins_kenmerkdeel_waarde,'0')),1) > max_waarde_oranje THEN '[s750][cff8800]' ELSE '[s500][c00c000]' END ELSE '[s500][cc0c0c0]' END || ins_kenmerkdeel_waarde || ' °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 (+) = 181 AND km.mld_kenmerkmelding_waarde = ebms.arai_ebms_key(+) AND m.mld_melding_key = km1.mld_melding_key (+) AND km1.mld_kenmerk_key (+) = 46 AND m.mld_melding_key = km2.mld_melding_key (+) AND km2.mld_kenmerk_key (+) = 45 AND m.mld_melding_key = km3.mld_melding_key (+) AND km3.mld_kenmerk_key (+) = 44 AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key AND sd.ins_srtdiscipline_key = 1; CREATE OR REPLACE VIEW arai_v_rap_mld_klachten_2 AS SELECT * FROM arai_v_rap_mld_klachten; --------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------- --- KLACHTEN ORGANISATOR KLACHTEN ORGANISATOR KLACHTEN ORGANISATOR --- --------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------- -- sd.ins_srtdiscipline_key = 21 is de meldingtype 'Klachten organisatoren' -- km.mld_kenmerk_key (+) = 503 is key van kenmerk voor ebms_event -- km3.mld_kenmerk_key (+) = 501 is key van kenmerk voor contactpersoon -- km1.mld_kenmerk_key (+) = 502 is key van kenmerk voor mailadres -- km2.mld_kenmerk_key (+) = 504 is key van kenmerk voor telefoon CREATE OR REPLACE VIEW arai_v_rap_mld_org_klachten ( 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; -------------------------------------------------------------------------------------------------------------------------- -- Klachten RTM grafieken -- -- Alle klachten (exp + org + bez) van de afgelopen 12 maanden. CREATE OR REPLACE VIEW arai_v_graph_kl_maand ( fclt_key, FCLT_XAS_, FCLT_YAS_OP_TIJD, FCLT_YAS2_TE_LAAT, FCLT_YAS3_TOTAAL, FCLT_URL, VOLGORDE ) AS SELECT NULL, to_char(to_date(fclt_f_maand,'MM'),'mon'), count(*) - SUM(mld_sla_te_laat), SUM(mld_sla_te_laat), count(*), 'appl/fac/fac_usrrap_list.asp?usrrap_key=181' || '&' || 'fclt_f_colname1=fclt_f_jaar' || '&' || 'fclt_f_colvalue1=' || fclt_f_jaar || '&' || 'fclt_f_colname2=fclt_f_maand' || '&' || 'fclt_f_colvalue2=' || fclt_f_maand, fclt_f_jaar || fclt_f_maand FROM arai_v_rap_mld_tot_klachten_2 WHERE invoer_datum > SYSDATE - 365 GROUP BY fclt_f_jaar, fclt_f_maand; -- -- Basisview met de laatste 7 dagen (nodig om 'klachtloze' dagen ook in grafiek te kunnen tonen) CREATE OR REPLACE VIEW arai_v_7_dagen (datum, dag) AS SELECT TRUNC(SYSDATE - (LEVEL - 1)) datum, substr(to_char(SYSDATE - (LEVEL - 1), 'day'), 1, 2) dag FROM DUAL CONNECT BY LEVEL <= 7; -- Alle klachten (exp + org + bez) van de afgelopen 7 dagen. CREATE OR REPLACE VIEW arai_v_graph_kl_dag ( fclt_key, FCLT_XAS_, FCLT_YAS_OP_TIJD, FCLT_YAS2_TE_LAAT, FCLT_YAS3_TOTAAL, FCLT_URL, VOLGORDE ) AS SELECT NULL, substr(to_char(to_date(fclt_f_ingevoerd, 'YYYY-MM-DD') ,'day'),1,2), count(*) - SUM(mld_sla_te_laat), SUM(mld_sla_te_laat), count(*), 'appl/fac/fac_usrrap_list.asp?usrrap_key=181' || '&' || 'fclt_f_colname1=fclt_f_ingevoerd' || '&' || 'fclt_f_colvalue1=' || fclt_f_ingevoerd, fclt_f_ingevoerd FROM arai_v_rap_mld_tot_klachten_2 WHERE TRUNC(invoer_datum) > TRUNC(SYSDATE - 7) GROUP BY to_char(to_date(fclt_f_ingevoerd, 'YYYY-MM-DD') ,'day'), fclt_f_ingevoerd UNION SELECT NULL, dag, 0, 0, 0, '', to_char(datum, 'yyyy-mm-dd') FROM arai_v_7_dagen WHERE NOT EXISTS (select 'x' FROM arai_v_rap_mld_tot_klachten_2 WHERE TRUNC(invoer_datum) > TRUNC(SYSDATE - 7) AND to_char(datum, 'yyyy-mm-dd') = fclt_f_ingevoerd); -- Basisview met de laatste x-aantal uren (nodig om 'klachtloze' uurtjes ook in grafiek te kunnen tonen) CREATE OR REPLACE VIEW arai_v_24_uren (datum, uur) AS SELECT TRUNC(SYSDATE - (LEVEL/24 - 1/24)) datum, to_char(SYSDATE - (LEVEL/24 - 1/24), 'hh24') uur FROM DUAL CONNECT BY LEVEL <= 24; -- Alle klachten (exp + org + bez) van de afgelopen 24 uren. CREATE OR REPLACE VIEW arai_v_graph_kl_uur ( fclt_key, FCLT_XAS_, FCLT_YAS_OP_TIJD, FCLT_YAS2_TE_LAAT, FCLT_YAS3_TOTAAL, FCLT_URL, VOLGORDE ) AS SELECT NULL, to_char(invoer_datum,'hh24'), count(*) - SUM(mld_sla_te_laat), SUM(mld_sla_te_laat), count(*), 'appl/fac/fac_usrrap_list.asp?usrrap_key=181' || '&' || 'fclt_f_colname1=invoer_datum_time' || '&' || 'fclt_f_colvalue1=' || to_char(invoer_datum,'dd-mm-yyyy') || ' ' || to_char(invoer_datum,'hh24') || ':*', to_char(invoer_datum,'hh24') FROM arai_v_rap_mld_tot_klachten_2 WHERE TRUNC(invoer_datum) = TRUNC(SYSDATE) GROUP BY to_char(invoer_datum,'dd-mm-yyyy'), to_char(invoer_datum,'hh24') UNION SELECT NULL, uur, 0, 0 ,0, '', uur FROM arai_v_24_uren WHERE datum = TRUNC(SYSDATE) AND NOT EXISTS (SELECT 'x' FROM arai_v_rap_mld_tot_klachten_2 WHERE TRUNC(invoer_datum)= TRUNC(SYSDATE) AND to_char(invoer_datum,'hh24') = uur); -- Alle openstaande klachten per leverancier. -- FCLT_YAS_ zijn de klachten die nog op tijd zijn, (blauw) -- FCLT_YAS2_ zijn de klachten die te laat tijd zijn (rood), CREATE OR REPLACE VIEW arai_v_graph_kl_open_lev ( fclt_key, FCLT_XAS_, FCLT_YAS_, FCLT_YAS2_, FCLT_URL, VOLGORDE ) AS SELECT NULL, fclt_f_leverancier, count(*) - SUM(mld_sla_te_laat), SUM(mld_sla_te_laat), 'appl/fac/fac_usrrap_list.asp?usrrap_key=181' || '&' || 'fclt_f_colname1=fclt_f_leverancier' || '&' || 'fclt_f_colvalue1=' || fclt_f_leverancier || '&' || 'fclt_f_colname2=fclt_f_lopend' || '&' || 'fclt_f_colvalue2=' || fclt_f_lopend, 0 - count(*) FROM arai_v_rap_mld_tot_klachten_2 WHERE UPPER(fclt_f_lopend) = 'OPEN' GROUP BY fclt_f_leverancier, fclt_f_lopend; -- Top evenement klachten afgelopen maanden CREATE OR REPLACE VIEW arai_v_graph_kl_event ( fclt_key, FCLT_XAS_, FCLT_YAS_, FCLT_YAS2_, FCLT_URL, VOLGORDE ) AS SELECT NULL, fclt_f_evenement, count(*) - SUM(mld_sla_te_laat), SUM(mld_sla_te_laat), 'appl/fac/fac_usrrap_list.asp?usrrap_key=181' || '&' || 'fclt_f_colname1=fclt_f_evenement' || '&' || 'fclt_f_colvalue1=' || fclt_f_evenement, 0 - count(*) FROM arai_v_rap_mld_tot_klachten_2 WHERE invoer_datum > SYSDATE - 365 GROUP BY fclt_f_evenement; -- Top leverancier klachten afgelopen maanden CREATE OR REPLACE VIEW arai_v_graph_kl_lev ( fclt_key, FCLT_XAS_, FCLT_YAS_, FCLT_YAS2_, FCLT_URL, VOLGORDE ) AS SELECT NULL, fclt_f_leverancier, count(*) - SUM(mld_sla_te_laat), SUM(mld_sla_te_laat), 'appl/fac/fac_usrrap_list.asp?usrrap_key=181' || '&' || 'fclt_f_colname1=fclt_f_leverancier' || '&' || 'fclt_f_colvalue1=' || fclt_f_leverancier, 0 - count(*) FROM arai_v_rap_mld_tot_klachten_2 WHERE invoer_datum > SYSDATE - 365 GROUP BY fclt_f_leverancier; --------------------------------------------------------------------------------------------------------------------------- -- Bijzonder handige check-rapportage of er wordt voldaan aan het geheel om automatische opdrachten aan te maken bij stdmelding->dienst->bedrijf CREATE OR REPLACE VIEW arai_v_rap_mlddienstbedrijf ( fclt_f_meldingtype, fclt_f_vakgroep, MLD_STDMELDING_KEY, MLD_STDMELDING_OMSCHRIJVING, uitvoertijd_uur, auto_opdracht, fclt_f_dienst, fclt_f_locatie, fclt_f_gebouw, fclt_f_bedrijf, mailadres ) AS SELECT SD.INS_SRTDISCIPLINE_OMSCHRIJVING, DIS.INS_DISCIPLINE_OMSCHRIJVING, SM.MLD_STDMELDING_KEY, SM.MLD_STDMELDING_OMSCHRIJVING, --ROUND (MLD_STDMELDING_UITVOERTIJD * 24, 2), --TO_CHAR (ROUND (SM.MLD_STDMELDING_T_UITVOERTIJD.tijdsduur, 2)) || SM.MLD_STDMELDING_T_UITVOERTIJD.eenheid, CASE WHEN SM.MLD_STDMELDING_T_UITVOERTIJD.eenheid = 'D' THEN ROUND (SM.MLD_STDMELDING_T_UITVOERTIJD.tijdsduur * 24, 2) ELSE ROUND (SM.MLD_STDMELDING_T_UITVOERTIJD.tijdsduur, 2) END, DECODE ( MLD_STDMELDING_autoorder, 1, 'Ja - Opdracht: ' || COALESCE (top.mld_typeopdr_omschrijving, 'Geen') || ' - Dienst vereist:' || DECODE (MLD_STDMELDING_vereisdienst, 1, 'Ja', 'Nee'), 'Nee'), D.PRS_DIENST_OMSCHRIJVING, COALESCE (L.ALG_LOCATIE_OMSCHRIJVING, '*'), COALESCE (G.ALG_GEBOUW_NAAM, '*'), B.PRS_BEDRIJF_NAAM, B.PRS_BEDRIJF_EMAIL FROM mld_stdmelding sm, prs_dienst d, prs_bedrijf b, prs_bedrijfdienstlocatie bdl, mld_discipline dis, ins_srtdiscipline sd, alg_locatie l, alg_gebouw g, mld_typeopdr top WHERE SM.PRS_DIENST_KEY = D.PRS_DIENST_KEY AND d.prs_dienst_key = BDL.PRS_DIENST_KEY AND BDL.PRS_BEDRIJF_KEY = b.prs_bedrijf_key AND SM.MLD_INS_DISCIPLINE_KEY = DIS.INS_DISCIPLINE_KEY AND DIS.INS_SRTDISCIPLINE_KEY = SD.INS_SRTDISCIPLINE_KEY AND bdl.alg_locatie_key = l.alg_locatie_key(+) AND bdl.alg_gebouw_key = g.alg_gebouw_key(+) AND sm.MLD_TYPEOPDR_KEY = top.MLD_TYPEOPDR_KEY(+); --------------------------------------------------------------------------------------------------------------------------- -- Alle standschoonmaak-klachten CREATE OR REPLACE VIEW arai_v_standschoonmaak_alle ( mld_melding_key, fclt_f_meldingnr, fclt_f_type, fclt_discipline_key, fclt_f_vakgroep, mld_stdmelding_key, fclt_f_melding, mld_melding_omschrijving, mld_melding_opmerking, mld_melding_note_omschrijving, fclt_f_leverancier, fclt_f_jaar, fclt_f_kwartaal, fclt_f_maand, invoer_datum, fclt_f_ingevoerd, invoer_datum_time, operationele_einddatum, sla_einddatum, mld_operationeel_te_laat, mld_sla_te_laat, mld_operationeel_dagenuurmin, fclt_f_lopend, fclt_key, fclt_f_status, status_code, afmeld_datum, fclt_f_afgemeld, afmeld_datum_time, afgemeld_door, ingevoerd_door, invoerder_email, company_contactpersoon, company_mailadres, company_telefoon, eventid, fclt_f_evenement, bedrijfsnaamid, fclt_f_company, billtoid, billto, fclt_f_lokatie, ordernummer, waarde_oranje, waarde_rood ) AS SELECT * FROM arai_v_rap_mld_klachten WHERE fclt_3d_discipline_key = 221; CREATE OR REPLACE VIEW arai_v_rap_standschoonmaak_all AS SELECT * FROM arai_v_standschoonmaak_alle; -- Alle standschoonmaak-klachten die VANDAAG zijn AFGEMELD CREATE OR REPLACE VIEW arai_v_standschoon_afgemeld AS SELECT * FROM arai_v_standschoonmaak_alle WHERE TRUNC(afmeld_datum) = TRUNC(SYSDATE); -- Alle LOPENDE! (statuscode in 0, 2, 3, 4, 7, 99) klachten over standschoonmaak, van niet alleen vandaag, maar ook die gisteren, eergisteren etc zijn gemaakt. CREATE OR REPLACE VIEW arai_v_rap_standschoon_lopend AS SELECT * FROM arai_v_standschoonmaak_alle WHERE status_code IN (0, 2, 3, 4, 7, 99); -- UNION van arai_v_standschoon_afgemeld + arai_v_rap_standschoon_lopend, -- Dus Alle afgemelde standschoonmaakklachten van vandaag en de nog lopende (actuele). CREATE OR REPLACE VIEW arai_v_standschoon_today AS SELECT * FROM arai_v_standschoon_afgemeld UNION SELECT * FROM arai_v_rap_standschoon_lopend; -- Deze view gebruiken voor 'random' binnenkomende KPI-metingen als klachten, om een timetable te hebben voor b.v. grafieken CREATE OR REPLACE VIEW arai_v_timetable_halve_uren (datum, tijd) AS SELECT TRUNC(SYSDATE) + (LEVEL-1)/48 datum, TO_CHAR (TRUNC(SYSDATE) + (LEVEL-1)/48, 'HH24:MI') tijd FROM DUAL CONNECT BY LEVEL <= 24*2; -- Grafiek 1 (lijngrafiek): KPI percentage op tijd afgehandelde klachten schone stands van vandaag van max. 8 uur terug in de tijd uitgezet. -- Daarbij worden de onregelmatige controle-tijden (naar boven) afgerond op halve uren (dus hh:00 of hh:30), -- Dus X-as bestaat uit maximaal 8 uur x 2 (ieder half uur) = 16 waarden, b.v. 10:00, 10:30, 11:00, ... t/m 17:30. -- De Y-as bestaat uit een percentage van op tijd afgehandelde klachten standschoonmaak tov. alle lopende klachten binnen dat tijdstip van het halve uur. -- Eerst een 1e hulp-tabel (temp-tabel) CREATE OR REPLACE VIEW arai_v_kpi_schonestand_nu ( fclt_f_meldingnr, FCLT_XAS_TIJD, mld_operationeel_te_laat, waarde_oranje, waarde_rood ) AS SELECT fclt_f_meldingnr, TO_CHAR(SYSDATE, 'HH24:MI'), CASE WHEN SYSDATE <= kpi.operationele_einddatum THEN 0 ELSE 1 END, waarde_oranje, waarde_rood FROM arai_v_rap_standschoon_lopend kpi; -- Dan een 2e hulp-tabel (temp-tabel) CREATE OR REPLACE VIEW arai_v_tmp_graph_schonestand ( fclt_f_meldingnr, FCLT_XAS_TIJD, mld_operationeel_te_laat, waarde_oranje, waarde_rood ) AS SELECT fclt_f_meldingnr, hu.tijd, CASE WHEN hu.datum <= kpi.operationele_einddatum THEN 0 ELSE 1 END, waarde_oranje, waarde_rood FROM arai_v_standschoon_today kpi, arai_v_timetable_halve_uren hu WHERE hu.datum <= SYSDATE AND hu.datum <= COALESCE(kpi.afmeld_datum, SYSDATE) AND hu.datum >= kpi.invoer_datum UNION SELECT fclt_f_meldingnr, FCLT_XAS_TIJD, mld_operationeel_te_laat, waarde_oranje, waarde_rood FROM arai_v_kpi_schonestand_nu; CREATE OR REPLACE VIEW arai_v_graph_kpi_schonestand ( FCLT_XAS_TIJD, FCLT_YAS_PERC, goed, fout, waarde_oranje, waarde_rood ) AS SELECT FCLT_XAS_TIJD, ROUND(SUM(mld_operationeel_te_laat)/COUNT(*)*100,1), ROUND(100 - (SUM(mld_operationeel_te_laat)/COUNT(*)*100),1), ROUND(SUM(mld_operationeel_te_laat)/COUNT(*)*100,1), MIN(waarde_oranje), MIN(waarde_rood) FROM arai_v_tmp_graph_schonestand GROUP BY FCLT_XAS_TIJD UNION SELECT hu.tijd, 0, 100, 0, '0', '0' FROM arai_v_timetable_halve_uren hu WHERE hu.datum < SYSDATE AND NOT EXISTS (SELECT 'x' FROM arai_v_tmp_graph_schonestand t WHERE t.FCLT_XAS_TIJD = hu.tijd); CREATE OR REPLACE VIEW arai_v_rap_kpi_standschoon ( FCLT_XAS_TIJD, goed, fout, KPI_STATUS ) AS SELECT FCLT_XAS_TIJD, goed, fout, CASE WHEN goed >= waarde_oranje THEN 0 WHEN goed >= waarde_rood THEN 1 ELSE 2 END FROM arai_v_graph_kpi_schonestand WHERE fclt_xas_tijd = (select max(fclt_xas_tijd) from arai_v_graph_kpi_schonestand); -- Grafiek 2 (barchart met rood/oranje/groen): KPI precentage schone toiletten per gebouw, van vandaag van max. 8 uur terug in de tijd uitgezet. -- FCLT_YAS_SCHOON is de y-as voor rood -- FCLT_YAS2_SCHOON is de y-as voor groen -- FCLT_YAS3_SCHOON is de y-as voor oranje -- Barchart met 3 kleuren: groen (temp = okee), oranje (temp is oranje) en rood (temp is rood) CREATE OR REPLACE VIEW arai_v_graph_kpi_schonestand2 ( FCLT_XAS_TIJD, FCLT_YAS_PERC, FCLT_YAS2_PERC, FCLT_YAS3_PERC ) AS SELECT FCLT_XAS_TIJD, CASE WHEN goed IS NULL THEN 0 WHEN goed < waarde_rood THEN fout ELSE 0 END, CASE WHEN goed IS NULL THEN 0 WHEN goed >= waarde_oranje THEN fout ELSE 0 END, CASE WHEN goed IS NULL THEN 0 WHEN goed >= waarde_rood AND goed < waarde_oranje THEN fout ELSE 0 END FROM arai_v_graph_kpi_schonestand; --------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------- --- KPI OVERALL KPI OVERALL KPI OVERALL KPI OVERALL --- --------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------- -- STATUS = 0 (is okee), 1 = oranje, 2 = rood, -1 = grijs CREATE OR REPLACE VIEW arai_v_rap_kpi_all ( KPI_NAAM, KPI_STATUS, FCLT_URL, USR_RAP_ALL_DETAILS ) AS SELECT 'TEMPERATUUR', (SELECT COALESCE(MAX(kpi_temperatuur),-1) FROM (SELECT CASE WHEN avg_temp IS NULL THEN 2 WHEN avg_temp < min_waarde THEN 2 WHEN avg_temp > max_waarde THEN 2 WHEN avg_temp < min_waarde_oranje THEN 1 WHEN avg_temp > max_waarde_oranje THEN 1 ELSE 0 END kpi_temperatuur FROM arai_v_rap_kpi_temp_per_ruimte WHERE join_kpi = 3) ), 'arai_v_rap_kpi_temp_per_ruimte', 'arai_v_rap_temp_per_ruimte' FROM DUAL -- UNION ALL -- SELECT 'ICT', -- (SELECT COALESCE(MAX(kpi_ict_mitel),-1) FROM -- (SELECT -- CASE -- WHEN kpi_color_overrule IS NOT NULL THEN kpi_color_overrule -- WHEN ins_kenmerkdeel_waarde IS NULL THEN -1 -- WHEN ins_kenmerkdeel_waarde >= waarde_rood THEN 2 -- WHEN ins_kenmerkdeel_waarde >= waarde_oranje THEN 1 -- ELSE 0 -- END kpi_ict_mitel -- FROM arai_v_kpi_ict_mitel -- WHERE ins_kenmerkdeel_verwijder IS NULL -- AND trunc_datum = TRUNC(SYSDATE)) -- ), 'arai_v_rap_kpi_ict_mitel', '' -- FROM DUAL UNION ALL SELECT 'TOILETSCHOONMAAK', (SELECT COALESCE(MAX(KPI_STATUS),-1) FROM arai_v_kpi_toilet_gebouw), 'arai_v_kpi_toilet_gebouw', 'arai_v_rap_kpi_toilet_all' FROM DUAL UNION ALL SELECT 'STANDSCHOONMAAK', (SELECT COALESCE(MAX(KPI_STATUS),-1) FROM arai_v_rap_kpi_standschoon), 'arai_v_rap_kpi_standschoon', 'arai_v_rap_standschoonmaak_all' FROM DUAL; --------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------- --- QRC TOILET SCHOONMAAK QRC TOILET SCHOONMAAK QRC TOILET SCHOONMAAK --- --------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------- CREATE OR REPLACE VIEW arai_v_ins_qrc_toilet (fclt_3d_discipline_key, fclt_3d_locatie_key, fclt_f_locatie, fclt_f_gebouw, plaats, soortruimte, ins_srtdeel_code, ins_srtdeel_omschrijving, ins_deel_omschrijving, ins_deel_key, ins_srtdeel_key, fclt_f_objectsoort, ins_alg_ruimte_type, alg_district_key, ins_deel_upper, alg_ruimte_key, hide_f_bookmark_id ) AS SELECT i.ins_discipline_key, l.alg_locatie_key, l.alg_locatie_omschrijving, o.alg_gebouw_omschrijving, o.alg_plaatsaanduiding plaats, (SELECT r.alg_ruimte_omschrijving FROM alg_ruimte r WHERE r.alg_ruimte_key = i.ins_alg_ruimte_key) soortruimte, s.ins_srtdeel_code, s.ins_srtdeel_omschrijving, i.ins_deel_omschrijving, i.ins_deel_key, s.ins_srtdeel_key, s.ins_srtdeel_upper, i.ins_alg_ruimte_type, l.alg_district_key, ins_deel_upper, i.ins_alg_ruimte_key, b.fac_bookmark_id FROM ins_deel i, ins_v_alg_overzicht o, ins_srtdeel s, alg_locatie l, alg_district di, fac_bookmark b WHERE b.fac_bookmark_naam = 'KPI_TOILETSCHOONMAAK' AND s.ins_srtdeel_key = 21 AND ins_deel_verwijder IS NULL AND i.ins_deel_module = 'INS' AND i.ins_deel_parent_key IS NULL AND o.alg_onroerendgoed_keys = i.ins_alg_ruimte_key AND o.alg_onroerendgoed_type = i.ins_alg_ruimte_type AND i.ins_alg_ruimte_type IN ('T', 'R', 'W') AND o.alg_locatie_key = i.ins_alg_locatie_key AND i.ins_alg_locatie_key = l.alg_locatie_key AND l.alg_district_key = di.alg_district_key AND s.ins_srtdeel_key = i.ins_srtdeel_key; --------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------- --- Export URENREGISTRATIE Export URENREGISTRATIE Export URENREGISTRATIE Export URENREGISTRATIE --- --------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------- -- Gedetaileerde versie van de algemene view mld_v_nettotijdsbesteding. -- De uren van ARAI moeten niet per persoon per opdracht worden weergegeven maar per persoon per dag. CREATE OR REPLACE VIEW arai_v_persoonuren ( mld_opdr_key, prs_perslid_key, naam, datum, ntb_prs ) AS SELECT a.mld_opdr_key, a.prs_perslid_key, naam, TRUNC(a.start_date + delta) datum, SUM( CASE WHEN TRUNC(a.end_date, 'DD') = TRUNC(a.start_date, 'DD') THEN a.lastdate - a.firstdate WHEN delta = 0 THEN TRUNC(a.firstdate + 1) - a.firstdate WHEN TRUNC(a.start_date, 'DD') + delta = TRUNC(a.end_date, 'DD') THEN a.lastdate - TRUNC(a.lastdate) ELSE 1 END) ntb_prs FROM (SELECT TRUNC(firstdate) start_date, -- Voor CONNECT BY LEVEL de TRUNC van firstdate en lastdate bepalen anders gaat het fout als de tijd van lastdate kleiner is als van firstdate. TRUNC(lastdate) end_date, firstdate, lastdate, prs_perslid_key, prs_perslid_naam_full naam, mld_opdr_key FROM ( SELECT st.fac_srtnotificatie_code, LAG(t.fac_tracking_datum) OVER(PARTITION BY fac_tracking_refkey ORDER BY fac_tracking_datum) AS firstdate, t.fac_tracking_datum lastdate, t.prs_perslid_key, p.prs_perslid_naam_full, fac_tracking_refkey mld_opdr_key, t.fac_tracking_key FROM fac_tracking t, fac_srtnotificatie st, prs_v_perslid_fullnames_all p WHERE t.fac_srtnotificatie_key = st.fac_srtnotificatie_key AND t.prs_perslid_key = p.prs_perslid_key AND st.fac_srtnotificatie_code IN ('ORDACP', 'ORDHLT', 'ORDRSM', 'ORDAFM', 'ORDCAN') -- De gecancelde opdrachten zijn nog meegenomen. AND fac_tracking_datum >= TO_DATE('01-05-2017','dd-mm-yyyy') -- oude records zijn nog niet ingevuld. ORDER BY fac_tracking_datum, prs_perslid_key) xx WHERE xx.fac_srtnotificatie_code IN ('ORDHLT', 'ORDAFM', 'ORDCAN')) a, -- De gecancelde opdrachten zijn nog meegenomen. ( SELECT LEVEL - 1 AS delta FROM DUAL CONNECT BY LEVEL - 1 <= (SELECT MAX(end_date - start_date) FROM (SELECT TRUNC(firstdate) start_date, -- Voor CONNECT BY LEVEL de TRUNC van firstdate en lastdate bepalen anders gaat het fout als de tijd van lastdate kleiner is als van firstdate. TRUNC(lastdate) end_date, firstdate, lastdate, prs_perslid_key, mld_opdr_key FROM ( SELECT st.fac_srtnotificatie_code, LAG(t.fac_tracking_datum) OVER(PARTITION BY fac_tracking_refkey ORDER BY fac_tracking_datum) AS firstdate, t.fac_tracking_datum lastdate, t.prs_perslid_key, p.prs_perslid_naam_full, fac_tracking_refkey mld_opdr_key FROM fac_tracking t, fac_srtnotificatie st, prs_v_perslid_fullnames_all p WHERE t.fac_srtnotificatie_key = st.fac_srtnotificatie_key AND t.prs_perslid_key = p.prs_perslid_key AND st.fac_srtnotificatie_code IN ('ORDACP', 'ORDHLT', 'ORDRSM', 'ORDAFM', 'ORDCAN') -- De gecancelde opdrachten zijn nog meegenomen. AND fac_tracking_datum >= TO_DATE('01-05-2017','dd-mm-yyyy') -- oude records zijn nog niet ingevuld. ORDER BY fac_tracking_datum, prs_perslid_key) xx WHERE xx.fac_srtnotificatie_code IN ('ORDHLT', 'ORDAFM', 'ORDCAN')))) -- De gecancelde opdrachten zijn nog meegenomen. WHERE a.start_date + delta <= a.end_date GROUP BY a.mld_opdr_key, a.prs_perslid_key, naam, TRUNC(a.start_date + delta) ORDER BY a.prs_perslid_key, datum, a.mld_opdr_key; CREATE OR REPLACE VIEW arai_v_export_urenregistratie ( result, result_order ) AS SELECT REPLACE(REPLACE(m.mld_melding_key || ';' || sm.mld_stdmelding_omschrijving || ';' || p.prs_perslid_naam || ';' || p.prs_perslid_voornaam || ';' || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr || ';' || fac.gettrackingdate('ORDAFM', o.mld_opdr_key) || ';' || ROUND(t.ntb_prs*24*60,2) ,CHR (13), ''), CHR (10), ''), 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 = 6 AND o.MLD_TYPEOPDR_KEY = 281 AND o.mld_opdr_key = t.mld_opdr_key AND mld_opdr_datumbegin >= TO_DATE('01-05-2017', 'dd-mm-yyyy') AND NOT EXISTS ( SELECT 'x' FROM mld_opdr_uren x WHERE o.mld_opdr_key = x.mld_opdr_key AND t.datum = x.mld_opdr_uren_datum AND t.prs_perslid_key = x.prs_perslid_key); -- Hieronder alle afgemelde opdrachten, met of zonder uur-besteding, die willen we wel meenemen in de query, zodat ze kunnen worden verwerkt (status 6->7) (en de volgende keer niet meer meedoen). CURSOR c_opdr_metofzonder_uren IS SELECT o.mld_opdr_key FROM mld_opdr o WHERE o.MLD_STATUSOPDR_KEY = 6 AND o.MLD_TYPEOPDR_KEY = 281 AND mld_opdr_datumbegin >= to_date('01-05-2017', 'dd-mm-yyyy'); v_errormsg VARCHAR (200); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN v_errormsg := 'Geen akties'; FOR c_uur IN c_opdr_met_uren LOOP -- Least, omdat aantal uren maximaal 3 cijfers kan bestaan in DB INSERT INTO mld_opdr_uren(mld_opdr_key, mld_opdr_uren_datum, prs_perslid_key, mld_opdr_uren_besteed, mld_opdr_uren_status) SELECT c_uur.mld_opdr_key, TRUNC(c_uur.datum), c_uur.prs_perslid_key, LEAST(999, ROUND(c_uur.aantal_uur, 2)), 3 FROM DUAL; END LOOP; FOR c_uur IN c_opdr_metofzonder_uren LOOP -- ARAI#47067: Uren berekening niet robuust tegen handmatig ingevulde uren, aanpassing is dat nu status 9 (=Afgerond) ipv status 7 (verwerkt) wordt gezet. mld.setopdrachtstatus (c_uur.mld_opdr_key, 9, 4); END LOOP; COMMIT; END; / ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- 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, puserkey IN NUMBER DEFAULT NULL ) AS -- puserkey is alvast een nieuwe parameter die per release 2015.2 er gaat komen (FSN#33503), als gevuld, dan deze als aanvrager van melding gebruiken. sender prs_perslid.prs_perslid_key%TYPE; kostenplaats prs_afdeling.prs_kostenplaats_key%TYPE; v_mldkey mld_melding.mld_melding_key%TYPE; defaultstdmelding fac_setting.fac_setting_default%TYPE; kkey mld_kenmerk.mld_kenmerk_key%TYPE; errormsg fac_result.fac_result_waarde%TYPE; v_mailadres_kenmerk_key mld_kenmerk.mld_kenmerk_key%TYPE; v_flexprop_mail VARCHAR2(1000); v_from VARCHAR2 (1000); subject_regexp fac_setting.fac_setting_default%TYPE; v_behandelaar_key mld_melding.mld_melding_behandelaar_key%TYPE; v_mldnum VARCHAR2 (4000); v_srtdisc VARCHAR2 (4000); v_flag_on_fenote NUMBER (10); v_flag_on_bonote NUMBER (10); BEGIN -- We beschouwen dit als een nieuwe melding die afkomstig zijn van (voor Facilitor) onbekende gebruikers (die dus geen account hebben, althans geen prs_perslid zijn). -- Deze externe/onbekende gebruikers zijn bezoekers of omwonenden, die een klacht kunnen mailen, die wordt omgezet in een Facilitor melding. -- De melding zetten we op de system-api user voor hotelremarks, waarvan de api-key bekend is. -- Vanaf release 2015.2 (FSN#33503) wordt deze api-user netjes als parameter puserkey meegegeven. IF puserkey IS NOT NULL THEN -- Vanaf release 2015.2 SELECT prs_perslid_key, d.prs_kostenplaats_key INTO sender, kostenplaats FROM prs_perslid p, prs_afdeling d WHERE p.prs_afdeling_key = d.prs_afdeling_key AND prs_perslid_key = puserkey; ELSE -- Tot release 2015.2 SELECT prs_perslid_key, d.prs_kostenplaats_key INTO sender, kostenplaats FROM prs_perslid p, prs_afdeling d WHERE p.prs_afdeling_key = d.prs_afdeling_key AND prs_perslid_apikey = 'IwIyYfSxveyBfiVicoHDgDpLSzuBboXs'; END IF; CASE pto WHEN 'hotelremarks@arai.facilitor.nl' THEN -- Standaardmelding 1561 heeft omschrijving 'Overig', is van vakgroep 'RAI Hotel Travel Service', die van vakgroeptype 'Exposanten' is defaultstdmelding := 1561; -- kenmerk-key 46, deze is van kenmerksoort 'E-mail (C)' (key 26) op vakgroeptype niveau van vakgroeptype-key 'Exposanten' (waarop stdmelding 1561 is gebaseerd). v_mailadres_kenmerk_key := 46; --ELSE -- Standaard /default waarden, nu nog n.v.t., er is 1 concrete mailadres en we hebben (nog) geen vangnet voor de rest... --defaultstdmelding := fac.getsetting ('defaultstdmelding'); END CASE; ------------------------------------------------- -- Check of de afzender pfrom een reply op een bestaande melding doet, in dat geval wordt dat in notities genoteerd. -- Wat is een bestaande melding: -- 1) Eerst uit het onderwerp het meldingnummer proberen te onderscheppen, uitgangspunt dat in het onderwerp het meldingnummer '1234' kan worden opgevist, met ervoor en erna een spatie -- 2) Het 1e nummer dat in het onderwerp staat wordt gezien als meldingnummer, eventuele andere nummers later in het onderwerp worden genegeerd. -- 3) Het mailadres van de afzender is dezelfde als die van dat gevonden meldingnummer '1234' in het onderwerp, deze afzender (mailadres) staat in flexprop (zie verderop hieronder) -- ARAI heeft geen vakgroeptype-prefix, dus [alpha] is nu niet van toepassing -- subject_regexp := '[[:alpha:]]*[[:digit:]]{1,}'; -- Dus alleen het digits-gedeelte... subject_regexp := '[[:digit:]]{1,}'; v_mldnum := REGEXP_SUBSTR (psubject, subject_regexp, 1, 1, 'i'); -- 1234, of 12345, of 12, of 1 etc. -- ARAI heeft geen vakgroeptype-prefix, dus v_srtdisc is nu niet van toepassing --v_srtdisc := -- REGEXP_SUBSTR (v_mldnum, -- '[[:alpha:]]', -- 1, -- 1, -- 'i'); -- M --v_mldkey := fac.safe_to_number (SUBSTR (v_mldnum, LENGTH (v_srtdisc) + 1)); -- 123, of 12345, of 12, of 1 v_mldkey := fac.safe_to_number (v_mldnum); -- Uit onderwerp is de vermoedelijke juiste v_mldkey geparsed. -- Final check: is de afzender van de mail dezelfde als die van v_mldkey, deze afzender (mailadres) staat in flexprop (zie verderop hieronder in gedeelte bij insert melding). SELECT MAX(SUBSTR(TRIM(km.mld_kenmerkmelding_waarde),1,50)) INTO v_flexprop_mail FROM mld_kenmerkmelding km WHERE mld_melding_key = v_mldkey AND mld_kenmerk_key = v_mailadres_kenmerk_key AND mld_kenmerkmelding_verwijder IS NULL; v_from := SUBSTR(TRIM(pfrom),1,50); IF v_flexprop_mail = v_from THEN -- Gotcha: bestaande melding gevonden -- Van deze afzender is een eerdere melding geregistreerd, die we plakken de subject en body nu als notitie toe (als perslid system-api user). INSERT INTO mld_melding_note (mld_melding_key, mld_melding_note_omschrijving, prs_perslid_key, mld_melding_note_flag) VALUES (v_mldkey, SUBSTR ( psubject || CHR (13) || CHR (10) || REPLACE ( SUBSTR (pbody, 1, 4000 - (LENGTH (psubject) + 2)), CHR (13) || CHR (10) || CHR (13) || CHR (10), CHR (13) || CHR (10)), 1, 4000), -- verwijder onnodige witregels sender, 0); -- 0 is NIET zichtbaar FE (want is system-user, zinloos). -- Vlaggetjes zetten zoals mld_edit_note.asp dat doet IF 1=0 -- ARAI heeft geen melding valggetjes, dus onderstaande kan voor nu weg. THEN BEGIN v_flag_on_fenote := fac.getsetting('mld_flag_on_fenote'); v_flag_on_bonote := fac.getsetting('mld_flag_on_bonote'); IF v_flag_on_bonote <> 0 AND v_flag_on_bonote IS NOT NULL THEN UPDATE mld_melding SET mld_melding_flag = v_flag_on_bonote WHERE mld_melding_key = v_mldkey AND ( (mld_melding_flag = v_flag_on_fenote) OR (mld_melding_flag = 0 OR mld_melding_flag IS NULL)); END IF; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line( 'Niet gelukt om flag ' || v_flag_on_bonote || ' te zetten.'); END; END IF; -- ARAI heef geen vlaggetjes -- Default tracking is even goed genoeg fac.trackaction ('MLDNOT', v_mldkey, sender, NULL, '#Notitie toegevoegd vanuit e-mail'); -- # voorkomt notificatie INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Als notitie toegevoegd aan melding ' || v_mldkey); -- Bepalen van de behandelaar van deze melding BEGIN SELECT mld_melding_behandelaar_key INTO v_behandelaar_key FROM mld_melding m, prs_perslid p WHERE mld_melding_key = v_mldkey AND mld_melding_behandelaar_key = p.prs_perslid_key AND p.prs_perslid_email IS NOT NULL AND p.prs_perslid_verwijder IS NULL; EXCEPTION WHEN OTHERS THEN v_behandelaar_key := NULL; END; IF v_behandelaar_key IS NOT NULL THEN -- Bestaande melding en behandelaar is bekend. -- Notificatie naar behandelaar fac.putnotificationsrtprio ( NULL, v_behandelaar_key, 'MLDNOB', v_mldkey, 'Melding ' || v_mldkey || ' is door de klant aangepast.', 2, NULL, NULL, NULL, 2, NULL); END IF; -- Bestaande melding en behandelaar is bekend. ELSE -- GEEN bestaande melding gevonden, we gaan een nieuwe mnelding toevoegen.... IF defaultstdmelding IS NOT NULL THEN -- suggested extensions: -- check for MLDUSE-write autorisations -- parse the subject to find an appropriate stdmelding, if uniquely possible -- append (as a note?) to an existing melding if #key is found in the subject BEGIN INSERT INTO mld_melding (mld_melding_module, mld_meldbron_key, mld_melding_datum, mld_alg_locatie_key, mld_melding_omschrijving, mld_melding_status, mld_stdmelding_key, prs_perslid_key, prs_perslid_key_voor, prs_kostenplaats_key, mld_melding_spoed) VALUES ('MLD', 4, -- email SYSDATE, 1, -- zie ook HSLE#33348: RAI hier kiezen (alg_locatie_key = 1) SUBSTR ( psubject || CHR (13) || CHR(10) || REPLACE ( SUBSTR (pbody, 1, 4000 - (LENGTH (psubject) + 2)), CHR (13) || CHR (10) || CHR (13) || CHR (10), CHR (13) || CHR (10)), 1, 4000), -- verwijder onnodige witregels NULL, defaultstdmelding, sender, sender, kostenplaats, 3) RETURNING mld_melding_key INTO v_mldkey; -- Vullen van kenmerkwaarde "e-mail adres" IF pfrom IS NOT NULL AND v_mailadres_kenmerk_key IS NOT NULL THEN -- Kenmerk mailadres heeft max. 50 tekens, afkappen dus... -- zet v_from met maximaal 50 tekens als kenmerk bij de zojuist aangemaakte melding. INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde) VALUES (v_mldkey, v_mailadres_kenmerk_key, v_from); END IF; mld.setmeldingstatus (v_mldkey, 2, sender); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || v_mldkey); END; END IF; -- defaultstdmelding IS NOT NULL END IF; -- v_flexprop_mail = v_from -- Bijlagen gaan we proberen toe te voegen, zowel bij een nieuwe als een bestaande melding.... -- Dat doen we bij een flexprop van het type 'M' (=folder met bestanden), door het laagste volgnummer te vinden -- find the lowest volgnummer of the flexfield of type folder. SELECT MIN (mld_kenmerk_key) INTO kkey FROM mld_kenmerk k, mld_srtkenmerk sk, mld_stdmelding std, ins_tab_discipline d WHERE mld_srtkenmerk_kenmerktype = 'M' AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key AND std.mld_stdmelding_key = defaultstdmelding AND std.mld_ins_discipline_key = d.ins_discipline_key AND ( (k.mld_stdmelding_key = std.mld_stdmelding_key AND k.mld_kenmerk_niveau = 'S') OR (k.mld_stdmelding_key = d.ins_discipline_key AND k.mld_kenmerk_niveau = 'D') OR (k.mld_stdmelding_key = d.ins_srtdiscipline_key AND k.mld_kenmerk_niveau = 'T')) AND k.mld_kenmerk_verwijder IS NULL AND NOT EXISTS (SELECT mld_kenmerk_volgnummer FROM mld_kenmerk k1, mld_srtkenmerk sk1, mld_stdmelding std1, ins_tab_discipline d1 WHERE sk1.mld_srtkenmerk_kenmerktype = 'M' AND sk1.mld_srtkenmerk_key = k1.mld_srtkenmerk_key AND std1.mld_stdmelding_key = defaultstdmelding AND std1.mld_ins_discipline_key = d1.ins_discipline_key AND ( (k1.mld_stdmelding_key = std1.mld_stdmelding_key AND k1.mld_kenmerk_niveau = 'S') OR (k1.mld_stdmelding_key = d1.ins_discipline_key AND k1.mld_kenmerk_niveau = 'D') OR (k1.mld_stdmelding_key = d1.ins_srtdiscipline_key AND k1.mld_kenmerk_niveau = 'T')) AND k1.mld_kenmerk_verwijder IS NULL AND k1.mld_kenmerk_volgnummer < k.mld_kenmerk_volgnummer); IF kkey IS NOT NULL THEN INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'kenmerkpath', 'MLD\M' || to_char( TRUNC(v_mldkey/1000), 'FM0000') || '___\M' || v_mldkey || '\' || kkey || '\'); END IF; IF errormsg IS NOT NULL THEN INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'errormsg', errormsg); END IF; EXCEPTION WHEN OTHERS THEN fac.writelog ( 'PROCESSEMAIL', 'W', 'Mail kon niet verwerkt worden afzender: ' || pfrom || '[' || errormsg || ']', 'OTHERS (error ' || SQLCODE || '/' || SUBSTR (SQLERRM, 1, 100) || ')'); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'errormsg', 'Database fout - Neem contact op met uw systeembeheerder'); END; / ---------------------------------------------------------------------- KPI DEFINITIES --------------------------------------------------------------------------- CREATE OR REPLACE PROCEDURE ARAI_IMPORT_KPI_DEFINITIE (p_import_key IN NUMBER) IS c_delim VARCHAR2 (1) := ';'; v_newline VARCHAR2 (1000); -- Input line v_errormsg VARCHAR2 (1000); v_errorhint VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); header_is_valid NUMBER; v_count_tot NUMBER (10); v_count_import NUMBER (10); v_ongeldig NUMBER (1); v_aanduiding VARCHAR2 (200); -- De importvelden v_kpi_definitie_code VARCHAR2(255); --15 BYTE), v_kpi_definitie_omschrijving VARCHAR2(255); --60 BYTE), v_kpi_definitie_info VARCHAR2(4000); -- 4000 BYTE), v_kpi_definitie_categorie1 VARCHAR2(255); -- 50 BYTE), v_kpi_definitie_categorie2 VARCHAR2(255); -- 50 BYTE), v_kpi_definitie_categorie3 VARCHAR2(255); -- 50 BYTE), v_kpi_definitie_drempels_0 VARCHAR2(255); -- 20 BYTE), v_kpi_definitie_drempels_70 VARCHAR2(255); -- 20 BYTE), v_kpi_definitie_drempels_90 VARCHAR2(255); -- 20 BYTE), v_kpi_definitie_drempels_100 VARCHAR2(255); -- 20 BYTE) v_kpi_definitie_drempels_tot VARCHAR2(255); -- 20 BYTE), -- Overige velden: CURSOR c1 IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; BEGIN -- Eerst opruiming DELETE FROM ARAI_IMP_KPI_DEFINITIE; v_count_tot := 0; v_count_import := 0; header_is_valid := 0; COMMIT; FOR rec1 IN c1 LOOP BEGIN v_newline := rec1.fac_imp_file_line; v_errormsg := 'Fout opvragen te importeren rij'; v_aanduiding := ''; v_ongeldig := 0; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_categorie1); fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_categorie2); fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_code); fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_omschrijving); fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_info); fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_drempels_0); fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_drempels_70); fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_drempels_90); fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_drempels_100); v_aanduiding := '|' || v_kpi_definitie_categorie1 || '|' || v_kpi_definitie_categorie2 || '|' || v_kpi_definitie_code || '| '; -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen -- de juiste kolomkop. Ik controleer daarbij ALLE kolommen! -- Ik negeer alles totdat ik een geldige header ben gepasseerd. IF (header_is_valid = 0) THEN IF UPPER (v_kpi_definitie_categorie1) = 'KPI CATEGORIE 1' AND UPPER (v_kpi_definitie_categorie2) = 'KPI CATEGORIE 2' AND UPPER (v_kpi_definitie_code) = 'KPI CODE' AND UPPER (v_kpi_definitie_omschrijving) = 'KPI OMSCHRIJVING' AND UPPER (v_kpi_definitie_info) = 'KPI INFORMATIE' AND UPPER (v_kpi_definitie_drempels_0) = 'KPI DREMPEL 0' AND UPPER (v_kpi_definitie_drempels_70) = 'KPI DREMPEL 70' AND UPPER (v_kpi_definitie_drempels_90) = 'KPI DREMPEL 90' AND UPPER (v_kpi_definitie_drempels_100) = 'KPI DREMPEL 100' THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden IF v_kpi_definitie_categorie1 IS NOT NULL THEN v_kpi_definitie_categorie1 := TRIM (v_kpi_definitie_categorie1); IF LENGTH (v_kpi_definitie_categorie1) > 50 THEN v_kpi_definitie_categorie1 := SUBSTR (TRIM (v_kpi_definitie_categorie1), 1, 50); fac.imp_writelog ( p_import_key, 'W', v_aanduiding, 'Categorie 1 wordt afgebroken tot [' || v_kpi_definitie_categorie1 || ']'); END IF; ELSE v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Categorie 1 mag NIET leeg zijn: deze regel wordt overgeslagen'); END IF; IF v_kpi_definitie_categorie2 IS NOT NULL THEN v_kpi_definitie_categorie2 := TRIM (v_kpi_definitie_categorie2); IF LENGTH (v_kpi_definitie_categorie2) > 50 THEN v_kpi_definitie_categorie2 := SUBSTR (TRIM (v_kpi_definitie_categorie2), 1, 50); fac.imp_writelog ( p_import_key, 'W', v_aanduiding, 'Categorie 2 wordt afgebroken tot [' || v_kpi_definitie_categorie2 || ']'); END IF; ELSE v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Categorie 2 mag NIET leeg zijn: deze regel wordt overgeslagen'); END IF; IF v_kpi_definitie_code IS NOT NULL THEN v_kpi_definitie_code := TRIM (v_kpi_definitie_code); IF LENGTH (v_kpi_definitie_code) > 15 THEN v_kpi_definitie_code := SUBSTR (TRIM (v_kpi_definitie_code), 1, 15); fac.imp_writelog ( p_import_key, 'W', v_aanduiding, 'Code wordt afgebroken tot [' || v_kpi_definitie_code || ']'); END IF; ELSE v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Code mag NIET leeg zijn: deze regel wordt overgeslagen'); END IF; IF v_kpi_definitie_omschrijving IS NOT NULL THEN v_kpi_definitie_omschrijving := TRIM (v_kpi_definitie_omschrijving); IF LENGTH (v_kpi_definitie_omschrijving) > 60 THEN v_kpi_definitie_omschrijving := SUBSTR (TRIM (v_kpi_definitie_omschrijving), 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding, 'Omschrijving wordt afgebroken tot [' || v_kpi_definitie_omschrijving || ']'); END IF; ELSE v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Omschrijving mag NIET leeg zijn: deze regel wordt overgeslagen'); END IF; v_kpi_definitie_info := TRIM (v_kpi_definitie_info); IF LENGTH (v_kpi_definitie_info) > 4000 THEN v_kpi_definitie_info := SUBSTR (TRIM (v_kpi_definitie_info), 1, 4000); fac.imp_writelog ( p_import_key, 'W', v_aanduiding, 'Informatie wordt afgebroken tot [' || v_kpi_definitie_info || ']'); END IF; IF v_kpi_definitie_drempels_0 IS NOT NULL AND v_kpi_definitie_drempels_70 IS NOT NULL AND v_kpi_definitie_drempels_90 IS NOT NULL AND v_kpi_definitie_drempels_100 IS NOT NULL THEN v_kpi_definitie_drempels_tot := TRIM (v_kpi_definitie_drempels_0 || '|' || v_kpi_definitie_drempels_70 || '|' || v_kpi_definitie_drempels_90 || '|' || v_kpi_definitie_drempels_100); IF LENGTH (v_kpi_definitie_drempels_tot) > 20 THEN v_kpi_definitie_drempels_tot := SUBSTR (TRIM (v_kpi_definitie_drempels_tot), 1, 20); fac.imp_writelog ( p_import_key, 'W', v_aanduiding, 'Dermpels wordt afgebroken tot [' || v_kpi_definitie_drempels_tot || ']'); END IF; ELSE v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Alle drempeles MOETEN gevuld zijn: deze regel wordt overgeslagen'); END IF; -- Insert geformatteerde import record IF v_ongeldig = 0 THEN BEGIN INSERT INTO ARAI_IMP_KPI_DEFINITIE ( KPI_DEFINITIE_CODE, KPI_DEFINITIE_OMSCHRIJVING, KPI_DEFINITIE_INFO, KPI_DEFINITIE_CATEGORIE1, KPI_DEFINITIE_CATEGORIE2, KPI_DEFINITIE_DREMPELS) VALUES (v_kpi_definitie_code, v_kpi_definitie_omschrijving, v_kpi_definitie_info, v_kpi_definitie_categorie1, v_kpi_definitie_categorie2, v_kpi_definitie_drempels_tot); v_count_import := v_count_import + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog ( p_import_key, 'E', v_aanduiding || v_errormsg, 'Fout bij toevoegen regel aan importtabel ARAI_IMP_KPI_DEFINITIE.'); END; END IF; END IF; END; END LOOP; IF (header_is_valid = 0) THEN fac.imp_writelog (p_import_key, 'E', 'Ongeldig importbestand', 'Geen header of header niet volgens specificatie!'); ELSE fac.imp_writelog ( p_import_key, 'S', 'KPI Definitie: aantal ingelezen importregels: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog ( p_import_key, 'S', 'KPI Definitie: aantal ongeldige niet ingelezen importregels: ' || TO_CHAR (v_count_tot - v_count_import), ''); END IF; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Inleesproces KPI Definitie afgebroken!'); END ARAI_IMPORT_KPI_DEFINITIE; / CREATE OR REPLACE PROCEDURE ARAI_UPDATE_KPI_DEFINITIE (p_import_key IN NUMBER) AS v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); header_is_valid NUMBER; v_count_error NUMBER (10); v_count NUMBER (10); v_count_tot NUMBER (10); v_count_import NUMBER (10); v_ongeldig NUMBER (1); v_aanduiding VARCHAR2 (200); v_errorhint VARCHAR2 (1000); CURSOR c_kpi_defs IS SELECT * FROM ARAI_IMP_KPI_DEFINITIE; -- MAIN BEGIN FOR rec_ins IN c_kpi_defs LOOP BEGIN v_count_tot := v_count_tot + 1; v_aanduiding := rec_ins.kpi_definitie_code || ' - ' || rec_ins.kpi_definitie_categorie1 || '-' || rec_ins.kpi_definitie_categorie2; v_errorhint := 'Fout bij insert van kpi definitie'; IF rec_ins.kpi_definitie_code IS NOT NULL AND rec_ins.kpi_definitie_categorie1 IS NOT NULL AND rec_ins.kpi_definitie_categorie2 IS NOT NULL AND rec_ins.kpi_definitie_omschrijving IS NOT NULL AND rec_ins.kpi_definitie_drempels IS NOT NULL THEN INSERT INTO kpi_definitie ( KPI_DEFINITIE_CODE, KPI_DEFINITIE_OMSCHRIJVING, KPI_DEFINITIE_INFO, KPI_DEFINITIE_CATEGORIE1, KPI_DEFINITIE_CATEGORIE2, KPI_DEFINITIE_DREMPELS) VALUES (rec_ins.kpi_definitie_code, rec_ins.kpi_definitie_omschrijving, rec_ins.kpi_definitie_info, rec_ins.kpi_definitie_categorie1, rec_ins.kpi_definitie_categorie2, rec_ins.kpi_definitie_drempels ); ELSE fac.imp_writelog ( p_import_key, 'E', v_aanduiding, 'Code, Omschrijving, Categorie1 en 2 en drempels mogen niet leeg zijn'); END IF; EXCEPTION WHEN OTHERS THEN v_count_error := v_count_error + 1; oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint); COMMIT; END; END LOOP; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 150); v_errormsg := v_errormsg || 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', 'Importproces KPI Definitie afgebroken!', v_errormsg); END ARAI_UPDATE_KPI_DEFINITIE; / ----- Views voor berekenen KPI's ----------------------------------------------- -- Views voor berekening (genormeerde) KPI-scores o.b.v. handmatig/automatisch ingevulde KPI-meldingen. -- KAVEL 1 -- #1-Evenementgebonden Schoonmaak door RAI -- Deze komen uit de melding met std_melding_key 2943 CREATE OR REPLACE VIEW arai_v_kpi_es_rai AS WITH normen AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_categorie1 kpi_cat1, kpi_definitie_categorie2 kpi_cat2, kpi_definitie_drempels normscores, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100 FROM kpi_definitie WHERE kpi_definitie_code = 'ES'), scores_rai AS (SELECT m.mld_melding_key, dloc.alg_locatie_key alg_locatie_key, TRUNC(m.mld_melding_einddatum, 'MM') periode, COALESCE(fac.safe_to_number(ES_01.mld_kenmerkmelding_waarde),0) ES_01_score, COALESCE(fac.safe_to_number(ES_02.mld_kenmerkmelding_waarde),0) ES_02_score, COALESCE(fac.safe_to_number(ES_05.mld_kenmerkmelding_waarde),0) ES_05_score, COALESCE(fac.safe_to_number(ES_06.mld_kenmerkmelding_waarde),0) ES_06_score, COALESCE(fac.safe_to_number(ES_07.mld_kenmerkmelding_waarde),0) ES_07_score, COALESCE(fac.safe_to_number(ES_08.mld_kenmerkmelding_waarde),0) ES_08_score, COALESCE(fac.safe_to_number(ES_03.mld_kenmerkmelding_waarde),0) ES_03_score, COALESCE(fac.safe_to_number(ES_04.mld_kenmerkmelding_waarde),0) ES_04_score FROM mld_melding m, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1509) ES_01, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1506) ES_02, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1510) ES_05, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1507) ES_06, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1511) ES_07, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1508) ES_08, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1517) ES_03, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1536) ES_04, alg_locatie dloc WHERE m.mld_stdmelding_key = 2943 AND m.mld_melding_status NOT IN (1) AND dloc.alg_locatie_key = m.mld_alg_locatie_key AND ES_01.mld_melding_key(+) = m.mld_melding_key AND ES_02.mld_melding_key(+) = m.mld_melding_key AND ES_05.mld_melding_key(+) = m.mld_melding_key AND ES_06.mld_melding_key(+) = m.mld_melding_key AND ES_07.mld_melding_key(+) = m.mld_melding_key AND ES_08.mld_melding_key(+) = m.mld_melding_key AND ES_03.mld_melding_key(+) = m.mld_melding_key AND ES_04.mld_melding_key(+) = m.mld_melding_key ) SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key, 'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey, n000, n070, n090, n100, kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score, normscores kpi_score_norm_score, SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels FROM ( SELECT n.kpi_definitie_key, n.normscores, k.mld_melding_key, k.alg_locatie_key, k.periode, n.kpi_cat1 proces, n.kpi_cat2 onderdeel, DECODE(n.kpi_code, 'ES', ((DECODE(ES_01_score, 0, 2, 1, 2, ES_01_score) - 2) * 2) + ((DECODE(ES_02_score, 0, 2, 1, 2, ES_02_score) - 2) * 2) + ((DECODE(ES_05_score, 0, 2, 1, 2, ES_05_score) - 2) * 2) + ((DECODE(ES_06_score, 0, 2, 1, 2, ES_06_score) - 2) * 2) + ((DECODE(ES_07_score, 0, 2, 1, 2, ES_07_score) - 2) * 2) + ((DECODE(ES_08_score, 0, 2, 1, 2, ES_08_score) - 2) * 2) + (ABS(ES_03_score - 1) * 10) + (ABS(ES_04_score - 1) * 10) ) score, n.n000, n.n070, n.n090, n.n100 FROM normen n, scores_rai k) m; -- KAVEL 1 -- #1-Evenementgebonden Schoonmaak door CSU -- Deze komen uit de melding met std_melding_key 2944 CREATE OR REPLACE VIEW arai_v_kpi_es_csu AS WITH normen AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_categorie1 kpi_cat1, kpi_definitie_categorie2 kpi_cat2, kpi_definitie_drempels normscores, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100 FROM kpi_definitie WHERE kpi_definitie_code = 'ES'), scores_csu AS (SELECT m.mld_melding_key, dloc.alg_locatie_key alg_locatie_key, TRUNC(m.mld_melding_einddatum, 'MM') periode, COALESCE(fac.safe_to_number(ES_07.mld_kenmerkmelding_waarde),0) ES_07_score, COALESCE(fac.safe_to_number(ES_08.mld_kenmerkmelding_waarde),0) ES_08_score, COALESCE(fac.safe_to_number(ES_09.mld_kenmerkmelding_waarde),0) ES_09_score, COALESCE(fac.safe_to_number(ES_10.mld_kenmerkmelding_waarde),0) ES_10_score, COALESCE(fac.safe_to_number(ES_11.mld_kenmerkmelding_waarde),0) ES_11_score, COALESCE(fac.safe_to_number(ES_12.mld_kenmerkmelding_waarde),0) ES_12_score, COALESCE(fac.safe_to_number(ES_13.mld_kenmerkmelding_waarde),0) ES_13_score, COALESCE(fac.safe_to_number(ES_14.mld_kenmerkmelding_waarde),0) ES_14_score, COALESCE(fac.safe_to_number(ES_15.mld_kenmerkmelding_waarde),0) ES_15_score, COALESCE(fac.safe_to_number(ES_16.mld_kenmerkmelding_waarde),0) ES_16_score, COALESCE(fac.safe_to_number(ES_18.mld_kenmerkmelding_waarde),0) ES_18_score, COALESCE(fac.safe_to_number(ES_20.mld_kenmerkmelding_waarde),0) ES_20_score FROM mld_melding m, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1514) ES_07, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1527) ES_08, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1513) ES_09, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1529) ES_10, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1528) ES_11, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1515) ES_12, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1530) ES_13, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1525) ES_14, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1526) ES_15, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1535) ES_16, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1534) ES_18, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1533) ES_20, alg_locatie dloc WHERE m.mld_stdmelding_key = 2944 AND m.mld_melding_status NOT IN (1) AND dloc.alg_locatie_key = m.mld_alg_locatie_key AND ES_07.mld_melding_key(+) = m.mld_melding_key AND ES_08.mld_melding_key(+) = m.mld_melding_key AND ES_09.mld_melding_key(+) = m.mld_melding_key AND ES_10.mld_melding_key(+) = m.mld_melding_key AND ES_11.mld_melding_key(+) = m.mld_melding_key AND ES_12.mld_melding_key(+) = m.mld_melding_key AND ES_13.mld_melding_key(+) = m.mld_melding_key AND ES_14.mld_melding_key(+) = m.mld_melding_key AND ES_15.mld_melding_key(+) = m.mld_melding_key AND ES_16.mld_melding_key(+) = m.mld_melding_key AND ES_18.mld_melding_key(+) = m.mld_melding_key AND ES_20.mld_melding_key(+) = m.mld_melding_key ) SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key, 'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey, n000, n070, n090, n100, kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score, normscores kpi_score_norm_score, SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels FROM ( SELECT n.kpi_definitie_key, n.normscores, k.mld_melding_key, k.alg_locatie_key, k.periode, n.kpi_cat1 proces, n.kpi_cat2 onderdeel, DECODE(n.kpi_code, 'ES', (ABS(ES_07_score - 1) * 10) + (ABS(ES_08_score - 1) * 10) + (ABS(ES_09_score - 1) * 10) + (ABS(ES_10_score - 1) * 10) + (ABS(ES_11_score - 1) * 10) + (ABS(ES_12_score - 1) * 10) + (ABS(ES_13_score - 1) * 10) + (ABS(ES_14_score - 1) * 10) + (ABS(ES_15_score - 1) * 10) + CASE WHEN ES_16_score < 1 THEN 20 WHEN ES_16_score < 2 THEN 17.5 WHEN ES_16_score < 3 THEN 15 WHEN ES_16_score < 4 THEN 12.5 WHEN ES_16_score < 5 THEN 10 WHEN ES_16_score < 6 THEN 7.5 WHEN ES_16_score < 7 THEN 5 ELSE 0 END + (ABS(ES_18_score - 1) * 10) + (ABS(ES_20_score - 1) * 10) ) score, n.n000, n.n070, n.n090, n.n100 FROM normen n, scores_csu k) m; -- Agv ARAI#37911: kenmerken verhuizen naar csu-view naar de rai-view van kavel 1 (ES), die zijn uit bovenstaande verwijderd en hieronder neergezet -- Verschil zit 'm in meld_stdmelding_key: -- De verhuisde kenmerk-keys van 2944 naar mld_stdmelding_key 2943 zijn: -- 1531 (ES_21) -- 1505 (ES_17) -- 1532 (ES_19) -- 1523 (ES_28) -- 1516 (ES_29) -- 1512 (ES_06) -- 1524 (ES_05) CREATE OR REPLACE VIEW arai_v_kpi_es_csu_2_rai AS WITH normen AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_categorie1 kpi_cat1, kpi_definitie_categorie2 kpi_cat2, kpi_definitie_drempels normscores, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100 FROM kpi_definitie WHERE kpi_definitie_code = 'ES'), scores_csu AS (SELECT m.mld_melding_key, dloc.alg_locatie_key alg_locatie_key, TRUNC(m.mld_melding_einddatum, 'MM') periode, COALESCE(fac.safe_to_number(ES_05.mld_kenmerkmelding_waarde),0) ES_05_score, COALESCE(fac.safe_to_number(ES_06.mld_kenmerkmelding_waarde),0) ES_06_score, COALESCE(fac.safe_to_number(ES_21.mld_kenmerkmelding_waarde),0) ES_21_score, COALESCE(fac.safe_to_number(ES_17.mld_kenmerkmelding_waarde),0) ES_17_score, COALESCE(fac.safe_to_number(ES_19.mld_kenmerkmelding_waarde),0) ES_19_score, COALESCE(fac.safe_to_number(ES_28.mld_kenmerkmelding_waarde),0) ES_28_score, COALESCE(fac.safe_to_number(ES_29.mld_kenmerkmelding_waarde),0) ES_29_score FROM mld_melding m, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1524) ES_05, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1512) ES_06, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1531) ES_21, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1505) ES_17, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1532) ES_19, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1523) ES_28, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1516) ES_29, alg_locatie dloc WHERE m.mld_stdmelding_key = 2943 AND m.mld_melding_status NOT IN (1) AND dloc.alg_locatie_key = m.mld_alg_locatie_key AND ES_05.mld_melding_key(+) = m.mld_melding_key AND ES_06.mld_melding_key(+) = m.mld_melding_key AND ES_21.mld_melding_key(+) = m.mld_melding_key AND ES_17.mld_melding_key(+) = m.mld_melding_key AND ES_19.mld_melding_key(+) = m.mld_melding_key AND ES_28.mld_melding_key(+) = m.mld_melding_key AND ES_29.mld_melding_key(+) = m.mld_melding_key ) SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key, 'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey, n000, n070, n090, n100, kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score, normscores kpi_score_norm_score, SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels FROM ( SELECT n.kpi_definitie_key, n.normscores, k.mld_melding_key, k.alg_locatie_key, k.periode, n.kpi_cat1 proces, n.kpi_cat2 onderdeel, DECODE(n.kpi_code, 'ES', (ES_05_score * 10) + (ES_06_score * 5) + (ABS(ES_21_score - 1) * 10) + (ES_17_score * 2) + (ABS(ES_19_score - 1) * 10) + (ABS(ES_28_score - 1) * 10) + (ABS(ES_29_score - 1) * 10) ) score, n.n000, n.n070, n.n090, n.n100 FROM normen n, scores_csu k) m; -- KAVEL 2 -- Afval, Parkeer, Beursvloer cijfers door RAI -- Deze komen uit de melding met std_melding_key 2945 CREATE OR REPLACE VIEW arai_v_kpi_apb_rai AS WITH normen AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_categorie1 kpi_cat1, kpi_definitie_categorie2 kpi_cat2, kpi_definitie_drempels normscores, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100 FROM kpi_definitie WHERE kpi_definitie_code = 'APB'), scores_rai AS (SELECT m.mld_melding_key, dloc.alg_locatie_key alg_locatie_key, TRUNC(m.mld_melding_einddatum, 'MM') periode, COALESCE(fac.safe_to_number(APB_01.mld_kenmerkmelding_waarde),0) APB_01_score, COALESCE(fac.safe_to_number(APB_02.mld_kenmerkmelding_waarde),0) APB_02_score, COALESCE(fac.safe_to_number(APB_05.mld_kenmerkmelding_waarde),0) APB_05_score, COALESCE(fac.safe_to_number(APB_06.mld_kenmerkmelding_waarde),0) APB_06_score, COALESCE(fac.safe_to_number(APB_03.mld_kenmerkmelding_waarde),0) APB_03_score, COALESCE(fac.safe_to_number(APB_04.mld_kenmerkmelding_waarde),0) APB_04_score FROM mld_melding m, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1542) APB_01, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1540) APB_02, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1543) APB_05, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1541) APB_06, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1545) APB_03, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1569) APB_04, alg_locatie dloc WHERE m.mld_stdmelding_key = 2945 AND m.mld_melding_status NOT IN (1) AND dloc.alg_locatie_key = m.mld_alg_locatie_key AND APB_01.mld_melding_key(+) = m.mld_melding_key AND APB_02.mld_melding_key(+) = m.mld_melding_key AND APB_05.mld_melding_key(+) = m.mld_melding_key AND APB_06.mld_melding_key(+) = m.mld_melding_key AND APB_03.mld_melding_key(+) = m.mld_melding_key AND APB_04.mld_melding_key(+) = m.mld_melding_key ) SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key, 'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey, n000, n070, n090, n100, kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score, normscores kpi_score_norm_score, SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels FROM ( SELECT n.kpi_definitie_key, n.normscores, k.mld_melding_key, k.alg_locatie_key, k.periode, n.kpi_cat1 proces, n.kpi_cat2 onderdeel, DECODE(n.kpi_code, 'APB', ((DECODE(APB_01_score, 0, 2, 1, 2, APB_01_score) - 2) * 2) + ((DECODE(APB_02_score, 0, 2, 1, 2, APB_02_score) - 2) * 2) + (APB_05_score * 2) + ((DECODE(APB_06_score, 0, 1, APB_06_score) - 1) * 2) + (ABS(APB_03_score - 1) * 10) + (ABS(APB_04_score - 1) * 10) ) score, n.n000, n.n070, n.n090, n.n100 FROM normen n, scores_rai k) m; -- KAVEL 2 -- Afval, Parkeer, Beursvloer cijfers door CSU -- Deze komen uit de melding met std_melding_key 2946 CREATE OR REPLACE VIEW arai_v_kpi_apb_csu AS WITH normen AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_categorie1 kpi_cat1, kpi_definitie_categorie2 kpi_cat2, kpi_definitie_drempels normscores, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100 FROM kpi_definitie WHERE kpi_definitie_code = 'APB'), scores_csu AS (SELECT m.mld_melding_key, dloc.alg_locatie_key alg_locatie_key, TRUNC(m.mld_melding_einddatum, 'MM') periode, COALESCE(fac.safe_to_number(APB_24.mld_kenmerkmelding_waarde),0) APB_24_score, COALESCE(fac.safe_to_number(APB_07.mld_kenmerkmelding_waarde),0) APB_07_score, COALESCE(fac.safe_to_number(APB_08.mld_kenmerkmelding_waarde),0) APB_08_score, COALESCE(fac.safe_to_number(APB_09.mld_kenmerkmelding_waarde),0) APB_09_score, COALESCE(fac.safe_to_number(APB_10.mld_kenmerkmelding_waarde),0) APB_10_score, COALESCE(fac.safe_to_number(APB_11.mld_kenmerkmelding_waarde),0) APB_11_score, COALESCE(fac.safe_to_number(APB_12.mld_kenmerkmelding_waarde),0) APB_12_score, COALESCE(fac.safe_to_number(APB_13.mld_kenmerkmelding_waarde),0) APB_13_score, COALESCE(fac.safe_to_number(APB_14.mld_kenmerkmelding_waarde),0) APB_14_score, COALESCE(fac.safe_to_number(APB_15.mld_kenmerkmelding_waarde),0) APB_15_score, COALESCE(fac.safe_to_number(APB_16.mld_kenmerkmelding_waarde),0) APB_16_score, COALESCE(fac.safe_to_number(APB_18.mld_kenmerkmelding_waarde),0) APB_18_score, COALESCE(fac.safe_to_number(APB_25.mld_kenmerkmelding_waarde),0) APB_25_score, COALESCE(fac.safe_to_number(APB_26.mld_kenmerkmelding_waarde),0) APB_26_score, COALESCE(fac.safe_to_number(APB_27.mld_kenmerkmelding_waarde),0) APB_27_score, COALESCE(fac.safe_to_number(APB_20.mld_kenmerkmelding_waarde),0) APB_20_score FROM mld_melding m, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1539) APB_24, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1547) APB_07, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1559) APB_08, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1546) APB_09, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1561) APB_10, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1560) APB_11, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1549) APB_12, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1562) APB_13, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1557) APB_14, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1558) APB_15, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1567) APB_16, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1566) APB_18, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1568) APB_25, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1570) APB_26, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1548) APB_27, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1565) APB_20, alg_locatie dloc WHERE m.mld_stdmelding_key = 2946 AND m.mld_melding_status NOT IN (1) AND dloc.alg_locatie_key = m.mld_alg_locatie_key AND APB_24.mld_melding_key(+) = m.mld_melding_key AND APB_07.mld_melding_key(+) = m.mld_melding_key AND APB_08.mld_melding_key(+) = m.mld_melding_key AND APB_09.mld_melding_key(+) = m.mld_melding_key AND APB_10.mld_melding_key(+) = m.mld_melding_key AND APB_11.mld_melding_key(+) = m.mld_melding_key AND APB_12.mld_melding_key(+) = m.mld_melding_key AND APB_13.mld_melding_key(+) = m.mld_melding_key AND APB_14.mld_melding_key(+) = m.mld_melding_key AND APB_15.mld_melding_key(+) = m.mld_melding_key AND APB_16.mld_melding_key(+) = m.mld_melding_key AND APB_18.mld_melding_key(+) = m.mld_melding_key AND APB_25.mld_melding_key(+) = m.mld_melding_key AND APB_26.mld_melding_key(+) = m.mld_melding_key AND APB_27.mld_melding_key(+) = m.mld_melding_key AND APB_20.mld_melding_key(+) = m.mld_melding_key ) SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key, 'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey, n000, n070, n090, n100, kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score, normscores kpi_score_norm_score, SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels FROM ( SELECT n.kpi_definitie_key, n.normscores, k.mld_melding_key, k.alg_locatie_key, k.periode, n.kpi_cat1 proces, n.kpi_cat2 onderdeel, DECODE(n.kpi_code, 'APB', ((DECODE(APB_24_score, 0, 1, APB_24_score) - 1) * 2) + (ABS(APB_07_score - 1) * 10) + (ABS(APB_08_score - 1) * 10) + (ABS(APB_09_score - 1) * 10) + (ABS(APB_10_score - 1) * 10) + (ABS(APB_11_score - 1) * 10) + (ABS(APB_12_score - 1) * 10) + (ABS(APB_13_score - 1) * 10) + (ABS(APB_14_score - 1) * 10) + (ABS(APB_15_score - 1) * 10) + CASE WHEN APB_16_score < 1 THEN 10 WHEN APB_16_score < 2 THEN 7.5 WHEN APB_16_score < 3 THEN 5 ELSE 0 END + (ABS(APB_18_score - 1) * 10) + CASE WHEN to_char(k.periode,'YYYY') = '2016' AND APB_25_score < 7 THEN 10 WHEN to_char(k.periode,'YYYY') >= '2017' AND APB_25_score < 9 THEN 10 ELSE 0 END + CASE WHEN APB_26_score < 38 THEN 10 ELSE 0 END + CASE WHEN APB_27_score < 22.5 THEN 10 ELSE 0 END + (ABS(APB_20_score - 1) * 10) ) score, n.n000, n.n070, n.n090, n.n100 FROM normen n, scores_csu k) m; -- Agv ARAI#37911: kenmerken verhuizen naar csu-view naar de rai-view van kavel 2 (APB), die zijn uit bovenstaande verwijderd en hieronder neergezet -- Verschil zit 'm in meld_stdmelding_key: -- De verhuisde kenmerk-keys van 2946 naar mld_stdmelding_key 2945 zijn: -- 1563 (APB_21) -- 1538 (APB_17) -- 1564 (APB_19) -- 1555 (APB_28) -- 1550 (APB_29) -- 1544 (APB_06) -- 1556 (APB_05) -- 1537 (APB_23) CREATE OR REPLACE VIEW arai_v_kpi_apb_csu_2_rai AS WITH normen AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_categorie1 kpi_cat1, kpi_definitie_categorie2 kpi_cat2, kpi_definitie_drempels normscores, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100 FROM kpi_definitie WHERE kpi_definitie_code = 'APB'), scores_csu AS (SELECT m.mld_melding_key, dloc.alg_locatie_key alg_locatie_key, TRUNC(m.mld_melding_einddatum, 'MM') periode, COALESCE(fac.safe_to_number(APB_05.mld_kenmerkmelding_waarde),0) APB_05_score, COALESCE(fac.safe_to_number(APB_23.mld_kenmerkmelding_waarde),0) APB_23_score, COALESCE(fac.safe_to_number(APB_06.mld_kenmerkmelding_waarde),0) APB_06_score, COALESCE(fac.safe_to_number(APB_21.mld_kenmerkmelding_waarde),0) APB_21_score, COALESCE(fac.safe_to_number(APB_17.mld_kenmerkmelding_waarde),0) APB_17_score, COALESCE(fac.safe_to_number(APB_19.mld_kenmerkmelding_waarde),0) APB_19_score, COALESCE(fac.safe_to_number(APB_28.mld_kenmerkmelding_waarde),0) APB_28_score, COALESCE(fac.safe_to_number(APB_29.mld_kenmerkmelding_waarde),0) APB_29_score FROM mld_melding m, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1556) APB_05, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1537) APB_23, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1544) APB_06, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1563) APB_21, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1538) APB_17, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1564) APB_19, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1555) APB_28, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1550) APB_29, alg_locatie dloc WHERE m.mld_stdmelding_key = 2945 AND m.mld_melding_status NOT IN (1) AND dloc.alg_locatie_key = m.mld_alg_locatie_key AND APB_05.mld_melding_key(+) = m.mld_melding_key AND APB_23.mld_melding_key(+) = m.mld_melding_key AND APB_06.mld_melding_key(+) = m.mld_melding_key AND APB_21.mld_melding_key(+) = m.mld_melding_key AND APB_17.mld_melding_key(+) = m.mld_melding_key AND APB_19.mld_melding_key(+) = m.mld_melding_key AND APB_28.mld_melding_key(+) = m.mld_melding_key AND APB_29.mld_melding_key(+) = m.mld_melding_key ) SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key, 'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey, n000, n070, n090, n100, kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score, normscores kpi_score_norm_score, SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels FROM ( SELECT n.kpi_definitie_key, n.normscores, k.mld_melding_key, k.alg_locatie_key, k.periode, n.kpi_cat1 proces, n.kpi_cat2 onderdeel, DECODE(n.kpi_code, 'APB', (APB_05_score * 10) + (APB_23_score * 2) + (APB_06_score * 5) + (ABS(APB_21_score - 1) * 10) + (APB_17_score * 2) + (ABS(APB_19_score - 1) * 10) + (ABS(APB_28_score - 1) * 10) + (ABS(APB_29_score - 1) * 10) ) score, n.n000, n.n070, n.n090, n.n100 FROM normen n, scores_csu k) m; -- KAVEL 3 -- Back of House cijfers door RAI -- Deze komen uit de melding met std_melding_key 2947 CREATE OR REPLACE VIEW arai_v_kpi_bh_rai AS WITH normen AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_categorie1 kpi_cat1, kpi_definitie_categorie2 kpi_cat2, kpi_definitie_drempels normscores, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100 FROM kpi_definitie WHERE kpi_definitie_code = 'BH'), scores_rai AS (SELECT m.mld_melding_key, dloc.alg_locatie_key alg_locatie_key, TRUNC(m.mld_melding_einddatum, 'MM') periode, COALESCE(fac.safe_to_number(BH_01.mld_kenmerkmelding_waarde),0) BH_01_score, COALESCE(fac.safe_to_number(BH_02.mld_kenmerkmelding_waarde),0) BH_02_score, COALESCE(fac.safe_to_number(BH_03.mld_kenmerkmelding_waarde),0) BH_03_score, COALESCE(fac.safe_to_number(BH_04.mld_kenmerkmelding_waarde),0) BH_04_score FROM mld_melding m, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1574) BH_01, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1573) BH_02, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1580) BH_03, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1595) BH_04, alg_locatie dloc WHERE m.mld_stdmelding_key = 2947 AND m.mld_melding_status NOT IN (1) AND dloc.alg_locatie_key = m.mld_alg_locatie_key AND BH_01.mld_melding_key(+) = m.mld_melding_key AND BH_02.mld_melding_key(+) = m.mld_melding_key AND BH_03.mld_melding_key(+) = m.mld_melding_key AND BH_04.mld_melding_key(+) = m.mld_melding_key ) SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key, 'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey, n000, n070, n090, n100, kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score, normscores kpi_score_norm_score, SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels FROM ( SELECT n.kpi_definitie_key, n.normscores, k.mld_melding_key, k.alg_locatie_key, k.periode, n.kpi_cat1 proces, n.kpi_cat2 onderdeel, DECODE(n.kpi_code, 'BH', (BH_01_score * 2) + (BH_02_score * 2) + (ABS(BH_03_score - 1) * 10) + (ABS(BH_04_score - 1) * 10) ) score, n.n000, n.n070, n.n090, n.n100 FROM normen n, scores_rai k) m; -- KAVEL 3 -- Kantoorschoonmaak cijfers door CSU -- Deze komen uit de melding met std_melding_key 2948 CREATE OR REPLACE VIEW arai_v_kpi_bh_csu AS WITH normen AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_categorie1 kpi_cat1, kpi_definitie_categorie2 kpi_cat2, kpi_definitie_drempels normscores, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100 FROM kpi_definitie WHERE kpi_definitie_code = 'BH'), scores_csu AS (SELECT m.mld_melding_key, dloc.alg_locatie_key alg_locatie_key, TRUNC(m.mld_melding_einddatum, 'MM') periode, COALESCE(fac.safe_to_number(BH_07.mld_kenmerkmelding_waarde),0) BH_07_score, COALESCE(fac.safe_to_number(BH_08.mld_kenmerkmelding_waarde),0) BH_08_score, COALESCE(fac.safe_to_number(BH_09.mld_kenmerkmelding_waarde),0) BH_09_score, COALESCE(fac.safe_to_number(BH_10.mld_kenmerkmelding_waarde),0) BH_10_score, COALESCE(fac.safe_to_number(BH_11.mld_kenmerkmelding_waarde),0) BH_11_score, COALESCE(fac.safe_to_number(BH_12.mld_kenmerkmelding_waarde),0) BH_12_score, COALESCE(fac.safe_to_number(BH_13.mld_kenmerkmelding_waarde),0) BH_13_score, COALESCE(fac.safe_to_number(BH_14.mld_kenmerkmelding_waarde),0) BH_14_score, COALESCE(fac.safe_to_number(BH_15.mld_kenmerkmelding_waarde),0) BH_15_score, COALESCE(fac.safe_to_number(BH_16.mld_kenmerkmelding_waarde),0) BH_16_score, COALESCE(fac.safe_to_number(BH_18.mld_kenmerkmelding_waarde),0) BH_18_score, COALESCE(fac.safe_to_number(BH_22.mld_kenmerkmelding_waarde),0) BH_22_score, COALESCE(fac.safe_to_number(BH_20.mld_kenmerkmelding_waarde),0) BH_20_score FROM mld_melding m, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1578) BH_07, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1586) BH_08, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1577) BH_09, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1588) BH_10, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1587) BH_11, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1579) BH_12, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1589) BH_13, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1584) BH_14, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1585) BH_15, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1594) BH_16, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1593) BH_18, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1571) BH_22, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1592) BH_20, alg_locatie dloc WHERE m.mld_stdmelding_key = 2948 AND m.mld_melding_status NOT IN (1) AND dloc.alg_locatie_key = m.mld_alg_locatie_key AND BH_07.mld_melding_key(+) = m.mld_melding_key AND BH_08.mld_melding_key(+) = m.mld_melding_key AND BH_09.mld_melding_key(+) = m.mld_melding_key AND BH_10.mld_melding_key(+) = m.mld_melding_key AND BH_11.mld_melding_key(+) = m.mld_melding_key AND BH_12.mld_melding_key(+) = m.mld_melding_key AND BH_13.mld_melding_key(+) = m.mld_melding_key AND BH_14.mld_melding_key(+) = m.mld_melding_key AND BH_15.mld_melding_key(+) = m.mld_melding_key AND BH_16.mld_melding_key(+) = m.mld_melding_key AND BH_18.mld_melding_key(+) = m.mld_melding_key AND BH_22.mld_melding_key(+) = m.mld_melding_key AND BH_20.mld_melding_key(+) = m.mld_melding_key ) SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key, 'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey, n000, n070, n090, n100, kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score, normscores kpi_score_norm_score, SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels FROM ( SELECT n.kpi_definitie_key, n.normscores, k.mld_melding_key, k.alg_locatie_key, k.periode, n.kpi_cat1 proces, n.kpi_cat2 onderdeel, DECODE(n.kpi_code, 'BH', (ABS(BH_07_score - 1) * 10) + (ABS(BH_08_score - 1) * 10) + (ABS(BH_09_score - 1) * 10) + (ABS(BH_10_score - 1) * 10) + (ABS(BH_11_score - 1) * 10) + (ABS(BH_12_score - 1) * 10) + (ABS(BH_13_score - 1) * 10) + (ABS(BH_14_score - 1) * 10) + (ABS(BH_15_score - 1) * 10) + CASE WHEN BH_16_score < 1 THEN 10 WHEN BH_16_score < 2 THEN 7.5 WHEN BH_16_score < 3 THEN 5 ELSE 0 END + (ABS(BH_18_score - 1) * 10) + (ABS(BH_22_score - 1) * 10) + (ABS(BH_20_score - 1) * 10) ) score, n.n000, n.n070, n.n090, n.n100 FROM normen n, scores_csu k) m; -- Agv ARAI#37911: kenmerken verhuizen naar csu-view naar de rai-view van kavel 3 (BH), die zijn uit bovenstaande verwijderd en hieronder neergezet -- Verschil zit 'm in meld_stdmelding_key: -- De verhuisde kenmerk-keys van 2948 naar mld_stdmelding_key 2947 zijn: -- 1590 (BH_21) -- 1572 (BH_17) -- 1591 (BH_19) -- 1575 (BH_06) -- 1583 (BH_05) CREATE OR REPLACE VIEW arai_v_kpi_bh_csu_2_rai AS WITH normen AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_categorie1 kpi_cat1, kpi_definitie_categorie2 kpi_cat2, kpi_definitie_drempels normscores, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100 FROM kpi_definitie WHERE kpi_definitie_code = 'BH'), scores_csu AS (SELECT m.mld_melding_key, dloc.alg_locatie_key alg_locatie_key, TRUNC(m.mld_melding_einddatum, 'MM') periode, COALESCE(fac.safe_to_number(BH_05.mld_kenmerkmelding_waarde),0) BH_05_score, COALESCE(fac.safe_to_number(BH_06.mld_kenmerkmelding_waarde),0) BH_06_score, COALESCE(fac.safe_to_number(BH_21.mld_kenmerkmelding_waarde),0) BH_21_score, COALESCE(fac.safe_to_number(BH_17.mld_kenmerkmelding_waarde),0) BH_17_score, COALESCE(fac.safe_to_number(BH_19.mld_kenmerkmelding_waarde),0) BH_19_score FROM mld_melding m, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1583) BH_05, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1575) BH_06, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1590) BH_21, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1572) BH_17, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1591) BH_19, alg_locatie dloc WHERE m.mld_stdmelding_key = 2947 AND m.mld_melding_status NOT IN (1) AND dloc.alg_locatie_key = m.mld_alg_locatie_key AND BH_05.mld_melding_key(+) = m.mld_melding_key AND BH_06.mld_melding_key(+) = m.mld_melding_key AND BH_21.mld_melding_key(+) = m.mld_melding_key AND BH_17.mld_melding_key(+) = m.mld_melding_key AND BH_19.mld_melding_key(+) = m.mld_melding_key ) SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key, 'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey, n000, n070, n090, n100, kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score, normscores kpi_score_norm_score, SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels FROM ( SELECT n.kpi_definitie_key, n.normscores, k.mld_melding_key, k.alg_locatie_key, k.periode, n.kpi_cat1 proces, n.kpi_cat2 onderdeel, DECODE(n.kpi_code, 'BH', (BH_05_score * 10) + (BH_06_score * 5) + (ABS(BH_21_score - 1) * 10) + (BH_17_score * 2) + (ABS(BH_19_score - 1) * 10) ) score, n.n000, n.n070, n.n090, n.n100 FROM normen n, scores_csu k) m; -- KAVEL 4 -- Kantoorschoonmaak cijfers door RAI -- Deze komen uit de melding met std_melding_key 2941 CREATE OR REPLACE VIEW arai_v_kpi_ks_rai AS WITH normen AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_categorie1 kpi_cat1, kpi_definitie_categorie2 kpi_cat2, kpi_definitie_drempels normscores, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100 FROM kpi_definitie WHERE kpi_definitie_code = 'KS'), scores_rai AS (SELECT m.mld_melding_key, dloc.alg_locatie_key alg_locatie_key, TRUNC(m.mld_melding_einddatum, 'MM') periode, COALESCE(fac.safe_to_number(KS_01.mld_kenmerkmelding_waarde),0) KS_01_score, COALESCE(fac.safe_to_number(KS_02.mld_kenmerkmelding_waarde),0) KS_02_score, COALESCE(fac.safe_to_number(KS_03.mld_kenmerkmelding_waarde),0) KS_03_score, COALESCE(fac.safe_to_number(KS_04.mld_kenmerkmelding_waarde),0) KS_04_score FROM mld_melding m, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1483) KS_01, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1482) KS_02, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1489) KS_03, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1504) KS_04, alg_locatie dloc WHERE m.mld_stdmelding_key = 2941 AND m.mld_melding_status NOT IN (1) AND dloc.alg_locatie_key = m.mld_alg_locatie_key AND KS_01.mld_melding_key(+) = m.mld_melding_key AND KS_02.mld_melding_key(+) = m.mld_melding_key AND KS_03.mld_melding_key(+) = m.mld_melding_key AND KS_04.mld_melding_key(+) = m.mld_melding_key ) SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key, 'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey, n000, n070, n090, n100, kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score, normscores kpi_score_norm_score, SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels FROM ( SELECT n.kpi_definitie_key, n.normscores, k.mld_melding_key, k.alg_locatie_key, k.periode, n.kpi_cat1 proces, n.kpi_cat2 onderdeel, DECODE(n.kpi_code, 'KS', ((DECODE(KS_01_score, 0, 1, KS_01_score) - 1) * 2) + ((DECODE(KS_02_score, 0, 1, KS_02_score) - 1) * 2) + (ABS(KS_03_score - 1) * 10) + (ABS(KS_04_score - 1) * 10) ) score, n.n000, n.n070, n.n090, n.n100 FROM normen n, scores_rai k) m; -- KAVEL 4 -- Kantoorschoonmaak cijfers door CSU -- Deze komen uit de melding met std_melding_key 2942 CREATE OR REPLACE VIEW arai_v_kpi_ks_csu AS WITH normen AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_categorie1 kpi_cat1, kpi_definitie_categorie2 kpi_cat2, kpi_definitie_drempels normscores, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100 FROM kpi_definitie WHERE kpi_definitie_code = 'KS'), scores_csu AS (SELECT m.mld_melding_key, dloc.alg_locatie_key alg_locatie_key, TRUNC(m.mld_melding_einddatum, 'MM') periode, COALESCE(fac.safe_to_number(KS_07.mld_kenmerkmelding_waarde),0) KS_07_score, COALESCE(fac.safe_to_number(KS_08.mld_kenmerkmelding_waarde),0) KS_08_score, COALESCE(fac.safe_to_number(KS_09.mld_kenmerkmelding_waarde),0) KS_09_score, COALESCE(fac.safe_to_number(KS_10.mld_kenmerkmelding_waarde),0) KS_10_score, COALESCE(fac.safe_to_number(KS_11.mld_kenmerkmelding_waarde),0) KS_11_score, COALESCE(fac.safe_to_number(KS_12.mld_kenmerkmelding_waarde),0) KS_12_score, COALESCE(fac.safe_to_number(KS_13.mld_kenmerkmelding_waarde),0) KS_13_score, COALESCE(fac.safe_to_number(KS_14.mld_kenmerkmelding_waarde),0) KS_14_score, COALESCE(fac.safe_to_number(KS_15.mld_kenmerkmelding_waarde),0) KS_15_score, COALESCE(fac.safe_to_number(KS_16.mld_kenmerkmelding_waarde),0) KS_16_score, COALESCE(fac.safe_to_number(KS_18.mld_kenmerkmelding_waarde),0) KS_18_score, COALESCE(fac.safe_to_number(KS_20.mld_kenmerkmelding_waarde),0) KS_20_score FROM mld_melding m, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1487) KS_07, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1496) KS_08, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1486) KS_09, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1498) KS_10, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1497) KS_11, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1488) KS_12, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1499) KS_13, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1494) KS_14, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1495) KS_15, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1503) KS_16, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1502) KS_18, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1501) KS_20, alg_locatie dloc WHERE m.mld_stdmelding_key = 2942 AND m.mld_melding_status NOT IN (1) AND dloc.alg_locatie_key = m.mld_alg_locatie_key AND KS_07.mld_melding_key(+) = m.mld_melding_key AND KS_08.mld_melding_key(+) = m.mld_melding_key AND KS_09.mld_melding_key(+) = m.mld_melding_key AND KS_10.mld_melding_key(+) = m.mld_melding_key AND KS_11.mld_melding_key(+) = m.mld_melding_key AND KS_12.mld_melding_key(+) = m.mld_melding_key AND KS_13.mld_melding_key(+) = m.mld_melding_key AND KS_14.mld_melding_key(+) = m.mld_melding_key AND KS_15.mld_melding_key(+) = m.mld_melding_key AND KS_16.mld_melding_key(+) = m.mld_melding_key AND KS_18.mld_melding_key(+) = m.mld_melding_key AND KS_20.mld_melding_key(+) = m.mld_melding_key ) SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key, 'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey, n000, n070, n090, n100, kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score, normscores kpi_score_norm_score, SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels FROM ( SELECT n.kpi_definitie_key, n.normscores, k.mld_melding_key, k.alg_locatie_key, k.periode, n.kpi_cat1 proces, n.kpi_cat2 onderdeel, DECODE(n.kpi_code, 'KS', (ABS(KS_07_score - 1) * 10) + (ABS(KS_08_score - 1) * 10) + (ABS(KS_09_score - 1) * 10) + (ABS(KS_10_score - 1) * 10) + (ABS(KS_11_score - 1) * 10) + (ABS(KS_12_score - 1) * 10) + (ABS(KS_13_score - 1) * 10) + (ABS(KS_14_score - 1) * 10) + (ABS(KS_15_score - 1) * 10) + CASE WHEN KS_16_score < 1 THEN 10 WHEN KS_16_score < 2 THEN 7.5 WHEN KS_16_score < 3 THEN 5 ELSE 0 END + (ABS(KS_18_score - 1) * 10) + (ABS(KS_20_score - 1) * 10) ) score, n.n000, n.n070, n.n090, n.n100 FROM normen n, scores_csu k) m; -- Agv ARAI#37911: kenmerken verhuizen naar csu-view naar de rai-view van kavel 4 (KS), die zijn uit bovenstaande verwijderd en hieronder neergezet -- Verschil zit 'm in meld_stdmelding_key: -- De verhuisde kenmerk-keys van 2942 naar mld_stdmelding_key 2941 zijn: -- 1481 (KS_17) -- 1500 (KS_19) -- 1484 (KS_06) -- 1492 (KS_05) CREATE OR REPLACE VIEW arai_v_kpi_ks_csu_2_rai AS WITH normen AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_categorie1 kpi_cat1, kpi_definitie_categorie2 kpi_cat2, kpi_definitie_drempels normscores, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100 FROM kpi_definitie WHERE kpi_definitie_code = 'KS'), scores_csu AS (SELECT m.mld_melding_key, dloc.alg_locatie_key alg_locatie_key, TRUNC(m.mld_melding_einddatum, 'MM') periode, COALESCE(fac.safe_to_number(KS_05.mld_kenmerkmelding_waarde),0) KS_05_score, COALESCE(fac.safe_to_number(KS_06.mld_kenmerkmelding_waarde),0) KS_06_score, COALESCE(fac.safe_to_number(KS_17.mld_kenmerkmelding_waarde),0) KS_17_score, COALESCE(fac.safe_to_number(KS_19.mld_kenmerkmelding_waarde),0) KS_19_score FROM mld_melding m, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1492) KS_05, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1484) KS_06, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1481) KS_17, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 1500) KS_19, alg_locatie dloc WHERE m.mld_stdmelding_key = 2941 AND m.mld_melding_status NOT IN (1) AND dloc.alg_locatie_key = m.mld_alg_locatie_key AND KS_05.mld_melding_key(+) = m.mld_melding_key AND KS_06.mld_melding_key(+) = m.mld_melding_key AND KS_17.mld_melding_key(+) = m.mld_melding_key AND KS_19.mld_melding_key(+) = m.mld_melding_key ) SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key, 'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey, n000, n070, n090, n100, kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score, normscores kpi_score_norm_score, SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels FROM ( SELECT n.kpi_definitie_key, n.normscores, k.mld_melding_key, k.alg_locatie_key, k.periode, n.kpi_cat1 proces, n.kpi_cat2 onderdeel, DECODE(n.kpi_code, 'KS', (KS_05_score * 10) + (KS_06_score * 5) + (KS_17_score * 2) + (ABS(KS_19_score - 1) * 10) ) score, n.n000, n.n070, n.n090, n.n100 FROM normen n, scores_csu k) m; CREATE OR REPLACE VIEW arai_v_kpi_ks (kpi_definitie_key, kpi_score_datum, alg_locatie_key, kpi_score_xmlnode, kpi_score_refkey, kpi_score_score, kpi_score_norm_score, kpi_score_drempels) AS SELECT kpi_definitie_key, kpi_score_datum, alg_locatie_key, 'melding' kpi_score_xmlnode, NULL kpi_score_refkey, kpi.getNormScore(SUM(kpi_score_drempels), n000, n070, n090, n100), MIN(KPI_SCORE_NORM_SCORE), SUM(kpi_score_drempels) FROM (SELECT * FROM arai_v_kpi_ks_rai r UNION SELECT * FROM arai_v_kpi_ks_csu c UNION SELECT * FROM arai_v_kpi_ks_csu_2_rai cr ) GROUP BY kpi_definitie_key, kpi_score_datum, alg_locatie_key, n000, n070, n090, n100; CREATE OR REPLACE VIEW arai_v_kpi_bh (kpi_definitie_key, kpi_score_datum, alg_locatie_key, kpi_score_xmlnode, kpi_score_refkey, kpi_score_score, kpi_score_norm_score, kpi_score_drempels) AS SELECT kpi_definitie_key, kpi_score_datum, alg_locatie_key, 'melding' kpi_score_xmlnode, NULL kpi_score_refkey, kpi.getNormScore(SUM(kpi_score_drempels), n000, n070, n090, n100), MIN(KPI_SCORE_NORM_SCORE), SUM(kpi_score_drempels) FROM (SELECT * FROM arai_v_kpi_bh_rai r UNION SELECT * FROM arai_v_kpi_bh_csu c UNION SELECT * FROM arai_v_kpi_bh_csu_2_rai cr ) GROUP BY kpi_definitie_key, kpi_score_datum, alg_locatie_key, n000, n070, n090, n100; CREATE OR REPLACE VIEW arai_v_kpi_apb (kpi_definitie_key, kpi_score_datum, alg_locatie_key, kpi_score_xmlnode, kpi_score_refkey, kpi_score_score, kpi_score_norm_score, kpi_score_drempels) AS SELECT kpi_definitie_key, kpi_score_datum, alg_locatie_key, 'melding' kpi_score_xmlnode, NULL kpi_score_refkey, kpi.getNormScore(SUM(kpi_score_drempels), n000, n070, n090, n100), MIN(KPI_SCORE_NORM_SCORE), SUM(kpi_score_drempels) FROM (SELECT * FROM arai_v_kpi_apb_rai r UNION SELECT * FROM arai_v_kpi_apb_csu c UNION SELECT * FROM arai_v_kpi_apb_csu_2_rai cr ) GROUP BY kpi_definitie_key, kpi_score_datum, alg_locatie_key, n000, n070, n090, n100; CREATE OR REPLACE VIEW arai_v_kpi_es (kpi_definitie_key, kpi_score_datum, alg_locatie_key, kpi_score_xmlnode, kpi_score_refkey, kpi_score_score, kpi_score_norm_score, kpi_score_drempels) AS SELECT kpi_definitie_key, kpi_score_datum, alg_locatie_key, 'melding' kpi_score_xmlnode, NULL kpi_score_refkey, kpi.getNormScore(SUM(kpi_score_drempels), n000, n070, n090, n100), MIN(KPI_SCORE_NORM_SCORE), SUM(kpi_score_drempels) FROM (SELECT * FROM arai_v_kpi_es_rai r UNION SELECT * FROM arai_v_kpi_es_csu c UNION SELECT * FROM arai_v_kpi_es_csu_2_rai cr ) GROUP BY kpi_definitie_key, kpi_score_datum, alg_locatie_key, n000, n070, n090, n100; CREATE OR REPLACE VIEW arai_v_kpi_all AS SELECT * FROM arai_v_kpi_ks UNION ALL SELECT * FROM arai_v_kpi_bh UNION ALL SELECT * FROM arai_v_kpi_apb UNION ALL SELECT * FROM arai_v_kpi_es; CREATE OR REPLACE PACKAGE arai AS PROCEDURE refreshscore(pUserKey IN NUMBER); END; / CREATE OR REPLACE PACKAGE BODY arai AS PROCEDURE refreshscore(pUserKey IN NUMBER) AS BEGIN -- Waarden van de huidige periode(s) verwijderen. -- TODO: tricky met KPI's op basis van storingsmeldingen, klachten etc; daar kan voor een -- periode maar zo een extra melding afgemeld worden, waardoor de score opnieuw berekend wordt DELETE FROM kpi_score; --WHERE (kpi_definitie_key, kpi_score_datum, alg_locatie_key) IN ( -- SELECT DISTINCT kpi_definitie_key, kpi_score_datum, alg_locatie_key -- FROM demo_v_kpi_all); -- Opnieuw genereren van KPI scores INSERT INTO kpi_score ( kpi_definitie_key, kpi_score_datum, alg_locatie_key, kpi_score_xmlnode, kpi_score_refkey, kpi_score_score, kpi_score_norm_score, kpi_score_drempels) SELECT * FROM arai_v_kpi_all; COMMIT; END; END; / -- ARAI#37083 QR Code alle objecten CREATE OR REPLACE VIEW arai_v_ins_qrc_mld AS SELECT i.ins_deel_omschrijving hide_f_sort, l.alg_locatie_code||' '||l.alg_locatie_omschrijving fclt_f_locatie, o.alg_gebouw_omschrijving fclt_f_gebouw, o.alg_plaatsaanduiding fclt_f_plaats, d.ins_discipline_omschrijving fclt_f_discipline, g.ins_srtgroep_omschrijving fclt_f_objectgroep, s.ins_srtdeel_omschrijving fclt_f_objectsoort, i.ins_deel_omschrijving fclt_f_identificatie, d.ins_discipline_omschrijving||' / '||sm.mld_stdmelding_omschrijving fclt_f_melding, i.ins_deel_key, s.ins_srtdeel_key, o.alg_gebouw_code, o.alg_verdieping_code, i.ins_discipline_key fclt_3d_discipline_key, l.alg_locatie_key fclt_3d_locatie_key, i.ins_alg_ruimte_type, i.ins_alg_ruimte_key, b.fac_bookmark_id hide_f_bookmark_id FROM ins_deel i, ins_v_alg_overzicht o, ins_srtdeel s, ins_srtgroep g, ins_discipline d, alg_locatie l, fac_bookmark b, mld_stdmelding sm WHERE b.fac_bookmark_naam = 'QRC_MELDING' AND (b.fac_bookmark_expire IS NULL OR b.fac_bookmark_expire > SYSDATE) AND ins_deel_verwijder IS NULL AND i.ins_deel_module = 'INS' AND i.ins_deel_parent_key IS NULL AND s.ins_srtdeel_key = i.ins_srtdeel_key AND g.ins_srtgroep_key = s.ins_srtgroep_key AND d.ins_discipline_key = g.ins_discipline_key AND o.alg_onroerendgoed_keys = i.ins_alg_ruimte_key AND o.alg_onroerendgoed_type = i.ins_alg_ruimte_type AND i.ins_alg_ruimte_type IN ('T', 'R', 'W') AND o.alg_locatie_key = i.ins_alg_locatie_key AND i.ins_alg_locatie_key = l.alg_locatie_key AND sm.ins_srtinst_key IS NOT NULL AND sm.ins_srtinst_key = DECODE(sm.ins_srtinst_niveau, 'S', i.ins_srtdeel_key, 'G', s.ins_srtgroep_key, 'D', g.ins_discipline_key); ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- 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 = substr(c.ins_srtcontrole_omschrijving, 1, instr(c.ins_srtcontrole_omschrijving, '-')-1 ); -- 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 = substr(c.ins_srtcontrole_omschrijving, 1, instr(c.ins_srtcontrole_omschrijving, '-')-1 ) 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 = substr(c.ins_srtcontrole_omschrijving, 1, instr(c.ins_srtcontrole_omschrijving, '-')-1 ) 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', substr( ins_kenmerkwaarde1 || '-' || MAX(ins_kenmerkwaarde2), 1,60), v_receptnr, 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; / ------ 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