-- -- $Id$ -- -- Script containing customer specific configuration sql statements for ALLI DEFINE thisfile = 'ALLI.SQL' DEFINE dbuser = '^ALLI' DEFINE custid = 'ALLI' SET ECHO ON SET DEFINE ON COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT; COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT; WHENEVER SQLERROR CONTINUE; SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL; SPOOL &fcltlogfile WHENEVER SQLERROR EXIT; SELECT adm.checkscriptcust('&dbuser') AS fcltcusttxt FROM DUAL; WHENEVER SQLERROR CONTINUE; --------------------------------------- PROMPT &fcltcusttxt --------------------------------------- SET DEFINE OFF ------ payload begin ------ CREATE OR REPLACE PROCEDURE alli_import_prs ( p_import_key IN NUMBER ) IS c_fielddelimitor VARCHAR2 (1) := ';'; -- LET OP: moet idem zijn als declaratie bij alli_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; v_pos NUMBER; -- De importvelden: v_prs_perslid_nr VARCHAR2 (256); v_prs_perslid_voornaam VARCHAR2 (256); v_prs_perslid_naam VARCHAR2 (256); v_prs_perslid_tussenvoegsel VARCHAR2 (256); v_prs_perslid_voorletters VARCHAR2 (256); v_prs_afdeling_code VARCHAR2 (256); v_prs_afdeling_naam VARCHAR2 (256); v_prs_srtperslid_omschrijving VARCHAR2 (256); v_prs_perslid_telefoonnr VARCHAR2 (256); v_prs_perslid_mobiel VARCHAR2 (256); v_prs_perslid_email VARCHAR2 (256); v_prs_perslid_oslogin VARCHAR2 (256); v_prs_perslid_bedrijfsdeel VARCHAR2 (256); v_prs_perslid_leidinggevende 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 alli_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, 03, 04 - voornaam, achternaam, tussenvoegsel. fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_voornaam); fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_naam); fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_tussenvoegsel); -- 05 - Afdelingscode fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_afdeling_code); -- 06 - Afdelingsnaam (niet de code!) fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_afdeling_naam); -- 07 - Functieomschrijving van medewerker fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_srtperslid_omschrijving); -- 08 - Peroneelsnr fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_nr); -- 09 - Email adres van medewerker fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_email); -- 10 - Telenr (035) van medewerker fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_telefoonnr); -- 11 - Mobiel van medewerker fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_mobiel); -- 12 - Bedrijfsonderdeel van medewerker fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_bedrijfsdeel); -- 13 - Leidinggevende van medewerker fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_leidinggevende); -- 14 - Voorletters fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_voorletters); ------------------------------------------------------------------------- -- xx - Locatiecode werkplek van medewerker --fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_locatie_code); v_alg_locatie_code := NULL; -- xx - Gebouwcode werkplek van medewerker --fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_gebouw_code); v_alg_gebouw_code := NULL; ------------------------------------------------------------------------- -- v_aanduiding := '[' || v_prs_perslid_nr || '|' || v_prs_perslid_naam || '|' || v_prs_perslid_oslogin || '] '; -- 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) = 'SAMACCOUNTNAME' AND UPPER (v_prs_perslid_voornaam) = 'GIVENNAME' AND UPPER (v_prs_perslid_naam) = 'SN' AND UPPER (v_prs_afdeling_code) = 'DEPARTMENTCODE' AND UPPER (v_prs_afdeling_naam) = 'DEPARTMENTNAME' AND UPPER (v_prs_srtperslid_omschrijving) = 'FUNCTIE' AND UPPER (v_prs_perslid_nr) = 'PERSONEELSNR' AND UPPER (v_prs_perslid_email) = 'MAIL' AND UPPER (v_prs_perslid_telefoonnr) = 'TELEPHONENUMBER' AND UPPER (v_prs_perslid_mobiel) = 'MOBILE' AND UPPER (v_prs_perslid_leidinggevende) = 'LEIDINGGEVENDE' AND UPPER (v_prs_perslid_voorletters) = 'VOORLETTERS' THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden -- 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 loginnaam'; --v_prs_perslid_oslogin := SUBSTR (v_prs_perslid_email, 1, INSTR (v_prs_perslid_email, '@', 1, 1) - 1); 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; -- ALLI#33755: tussenvoegsel niet meer inlezen. Dat zit tot nader order in -- het achternaamveld gebakken v_prs_perslid_tussenvoegsel := NULL; --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) > 15 THEN v_prs_perslid_voorletters := SUBSTR (v_prs_perslid_voorletters, 1, 15); 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; v_errorhint := 'Ongeldige afdelingcode'; v_prs_afdeling_code := TRIM (v_prs_afdeling_code); IF LENGTH (v_prs_afdeling_code) > 10 THEN v_prs_afdeling_code := SUBSTR (v_prs_afdeling_code, 1, 60); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Afdelingscode te lang', 'Afdelingscode wordt afgebroken tot [' || v_prs_afdeling_code || ']' ); ELSE IF (v_prs_afdeling_code IS NULL) THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Afdelingscode onbekend', 'Afdelingscode is verplicht; regel wordt overgeslagen!' ); END IF; END IF; COMMIT; v_errorhint := 'Ongeldige afdelingnaam'; 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) > 60 THEN v_prs_srtperslid_omschrijving := SUBSTR (v_prs_srtperslid_omschrijving, 1, 60); 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 mobiel nummer'; v_prs_perslid_mobiel := TRIM (v_prs_perslid_mobiel); IF LENGTH (v_prs_perslid_mobiel) > 15 THEN v_prs_perslid_mobiel := SUBSTR (v_prs_perslid_mobiel, 1, 15); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Mobiel nummer te lang', 'mobiel nummer wordt afgebroken tot [' || v_prs_perslid_mobiel || ']' ); 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; v_errorhint := 'Ongeldig bedrijfsonderdeel'; v_prs_perslid_bedrijfsdeel := TRIM (v_prs_perslid_bedrijfsdeel); IF LENGTH (v_prs_perslid_bedrijfsdeel) > 60 THEN v_prs_perslid_bedrijfsdeel := SUBSTR (v_prs_perslid_bedrijfsdeel, 1, 60); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Bedrijfsonderdeel te lang', 'Bedrijfsonderdeel wordt afgebroken tot [' || v_prs_perslid_bedrijfsdeel || ']' ); ELSE IF (v_prs_perslid_bedrijfsdeel IS NULL) THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Bedrijfsonderdeel onbekend', 'Bedrijfsonderdeel is verplicht; regel wordt overgeslagen!' ); END IF; END IF; v_errorhint := 'Ongeldige leidinggevende'; v_prs_perslid_leidinggevende := TRIM (v_prs_perslid_leidinggevende); IF LENGTH (v_prs_perslid_leidinggevende) > 30 THEN v_prs_perslid_leidinggevende := SUBSTR (v_prs_perslid_leidinggevende, 1, 30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Login leidinggevende te lang', 'Login leidinggevende wordt afgebroken tot [' || v_prs_perslid_leidinggevende || ']' ); ELSE IF (v_prs_perslid_leidinggevende IS NULL) THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Login leidinggevende onbekend', 'Login leidinggevende is verplicht; regel wordt overgeslagen!' ); END IF; END IF; COMMIT; -- Insert geformatteerde import record IF v_ongeldig = 0 THEN BEGIN v_errorhint := 'Fout bij toevoegen regel aan importtabel alli_IMP_PRS'; INSERT INTO alli_imp_prs (prs_perslid_nr, prs_perslid_naam, prs_perslid_tussenvoegsel, prs_perslid_voorletters, prs_perslid_voornaam, prs_afdeling_code, prs_afdeling_naam, prs_srtperslid_omschrijving, alg_locatie_code, alg_gebouw_code, alg_verdieping_volgnr, alg_ruimte_nr, prs_perslid_telefoonnr, prs_perslid_mobiel, prs_perslid_email, prs_perslid_oslogin, prs_perslid_bedrijfsdeel, prs_perslid_leidinggevende ) VALUES (v_prs_perslid_nr, v_prs_perslid_naam, v_prs_perslid_tussenvoegsel, v_prs_perslid_voorletters, v_prs_perslid_voornaam, v_prs_afdeling_code, 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_mobiel, v_prs_perslid_email, v_prs_perslid_oslogin, v_prs_perslid_bedrijfsdeel, v_prs_perslid_leidinggevende ); 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 alli_import_prs; / CREATE OR REPLACE PROCEDURE alli_update_prs ( p_import_key IN NUMBER ) IS -- LET OP: moet idem zijn als declaratie bij ALLI_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_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_fac_usrdata_key NUMBER (10); v_srtperslid_key NUMBER (10); v_leidinggevende_key NUMBER (10); v_oslogin VARCHAR2 (30); v_wachtwoord VARCHAR2 (30); 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); -- Let op! Met eindatum zijn personen die niet meer in dienst zijn. -- Dubbele nummers? Dan wordt iemand mogelijk niet verwijderd/INACTIEF! CURSOR cdelprs IS SELECT p.prs_perslid_key, p.prs_perslid_nr, p.prs_perslid_naam, p.prs_perslid_voornaam FROM prs_v_aanwezigperslid p WHERE p.prs_perslid_nr IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM alli_imp_prs ip WHERE ip.prs_perslid_nr = p.prs_perslid_nr); CURSOR csperslid IS SELECT prs_srtperslid_omschrijving FROM alli_imp_prs GROUP BY prs_srtperslid_omschrijving; CURSOR cprsafd IS SELECT UPPER(prs_afdeling_code) prs_afdeling_code, MIN(prs_afdeling_naam) prs_afdeling_naam FROM alli_imp_prs GROUP BY UPPER (prs_afdeling_code); CURSOR c_bedrijf IS SELECT distinct (prs_perslid_bedrijfsdeel) prs_perslid_bedrijfsdeel FROM alli_imp_prs; CURSOR cperslid IS SELECT * FROM alli_imp_prs; CURSOR cwp IS SELECT p.*, ip.alg_locatie_code, ip.alg_gebouw_code FROM alli_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_nr) = UPPER (p.prs_perslid_nr); -- Alle actieve personen met personeelsnummer (ie. de import-doelgroep) zonder een werkplek -- PKO: Niemand heeft een werkplek; check weglaten. CURSOR cnowp IS SELECT p.prs_perslid_key, p.prs_perslid_nr, p.prs_perslid_naam, p.prs_perslid_voornaam FROM prs_v_aanwezigperslid p WHERE p.prs_perslid_nr 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) AND 1=0; -- Alle aanwezige personen met personeelsnummer (ie. de import-doelgroep) niet in een groep CURSOR cnogroup IS SELECT p.prs_perslid_key, p.prs_perslid_nr, p.prs_perslid_naam, p.prs_perslid_voornaam FROM prs_v_aanwezigperslid p WHERE p.prs_perslid_nr IS NOT NULL AND NOT EXISTS (SELECT 1 FROM fac_gebruikersgroep g WHERE g.prs_perslid_key = p.prs_perslid_key); BEGIN SELECT DECODE (COUNT (*), 0, 1, COUNT (*)) INTO v_count_prs_actual FROM prs_perslid WHERE prs_perslid_verwijder IS NULL AND prs_perslid_nr IS NOT NULL; SELECT DECODE (COUNT (*), 0, 1, COUNT (*)) INTO v_count_prs_import FROM prs_perslid p, alli_imp_prs ip WHERE p.prs_perslid_nr IS NOT NULL AND p.prs_perslid_verwijder IS NULL AND p.prs_perslid_nr = ip.prs_perslid_nr; IF ( (TRUNC ((v_count_prs_import / v_count_prs_actual) * 100) >= (100 - c_max_delta_percentage ) ) ) THEN -- Geldig importbestand wat betreft aantal personen -- Personen verwijderen/inactiveren FOR recdelprs IN cdelprs LOOP BEGIN -- 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 nummer [' || recdelprs.prs_perslid_nr || '] 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 nummer [' || recdelprs.prs_perslid_nr || '] 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; fac.imp_writelog (p_import_key, 'I', 'Persoon met nummer [' || recdelprs.prs_perslid_nr || '] en naam [' || recdelprs.prs_perslid_naam || ', ' || recdelprs.prs_perslid_voornaam || '] is INACTIEF gemaakt', 'Persoon is INACTIEF gemaakt' ); END IF; COMMIT; END IF; 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; -- Functies aanmaken 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; -- Afdelingen aanmaken FOR recafdeling IN cprsafd LOOP BEGIN v_count_tot := v_count_tot + 1; v_aanduiding := recafdeling.prs_afdeling_code || ' - ' || recafdeling.prs_afdeling_naam; v_errorhint := 'Fout bij bepalen afdeling'; SELECT COUNT (*) INTO v_count FROM prs_afdeling WHERE UPPER (prs_afdeling_naam) = UPPER (recafdeling.prs_afdeling_code) AND prs_bedrijf_key = 5 AND prs_afdeling_verwijder IS NULL; IF (v_count = 0) THEN v_errorhint := 'Fout bij toevoegen afdeling'; INSERT INTO prs_afdeling (prs_bedrijf_key, prs_afdeling_naam, prs_afdeling_omschrijving) VALUES (5, recafdeling.prs_afdeling_code, recafdeling.prs_afdeling_naam); COMMIT; ELSE v_errorhint := 'Fout bij bijwerken afdeling'; UPDATE prs_afdeling SET prs_afdeling_omschrijving = recafdeling.prs_afdeling_naam WHERE prs_afdeling_naam = recafdeling.prs_afdeling_code AND prs_bedrijf_key = 5 AND prs_afdeling_verwijder IS NULL; 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', 'Afdeling: verwerkte regels zonder foutmelding: ' || TO_CHAR (v_count_tot - v_count_error), '' ); fac.imp_writelog (p_import_key, 'S', 'Afdeling: verwerkte regels met foutmelding: ' || TO_CHAR (v_count_error), '' ); COMMIT; v_count_tot := 0; v_count_error := 0; -- Bedrijfsonderdeel aanmaken (usrdata) FOR recbedrijf IN c_bedrijf LOOP BEGIN v_count_tot := v_count_tot + 1; v_aanduiding := recbedrijf.prs_perslid_bedrijfsdeel; v_errorhint := 'Fout bij bepalen bedrijfsonderdeel'; SELECT COUNT (*) INTO v_count FROM fac_usrdata WHERE UPPER (fac_usrdata_omschr) = UPPER (recbedrijf.prs_perslid_bedrijfsdeel) AND fac_usrtab_key= 121 AND fac_usrdata_verwijder IS NULL; IF (v_count = 0) THEN v_errorhint := 'Fout bij toevoegen bedrijfsonderdeel'; INSERT INTO fac_usrdata (fac_usrtab_key, fac_usrdata_code, fac_usrdata_omschr) VALUES (121, SUBSTR(recbedrijf.prs_perslid_bedrijfsdeel,1,30), recbedrijf.prs_perslid_bedrijfsdeel); 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', 'Bedrijfsonderdeel: verwerkte regels zonder foutmelding: ' || TO_CHAR (v_count_tot - v_count_error), '' ); fac.imp_writelog (p_import_key, 'S', 'Bedrijfsonderdeel: verwerkte regels met foutmelding: ' || TO_CHAR (v_count_error), '' ); COMMIT; v_count_tot := 0; v_count_error := 0; -- Persoon toevoegen/bijwerken FOR recperslid IN cperslid LOOP BEGIN v_count_tot := v_count_tot + 1; v_perslid_key := NULL; v_aanduiding := recperslid.prs_perslid_nr || '|' || 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 || ']'; SELECT prs_afdeling_key INTO v_afdeling_key FROM prs_afdeling WHERE prs_afdeling_verwijder IS NULL AND UPPER (prs_afdeling_naam) = UPPER (recperslid.prs_afdeling_code) AND prs_bedrijf_key = 5; v_errorhint := 'Fout bij bepalen bedrijfsonderdeel [' || recperslid.prs_perslid_bedrijfsdeel || ']'; SELECT fac_usrdata_key INTO v_fac_usrdata_key FROM fac_usrdata WHERE UPPER (fac_usrdata_omschr) = UPPER (recperslid.prs_perslid_bedrijfsdeel) AND fac_usrtab_key= 121 AND fac_usrdata_verwijder IS NULL; 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_nr) = UPPER (recperslid.prs_perslid_nr); -- Meerdere personen met hetzelfde nummer; loggen en overslaan IF (v_count > 1) THEN v_count_error := v_count_error + 1; fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Meerdere personen met nummer ['||recperslid.prs_perslid_nr||'] gevonden!', v_errorhint ); CONTINUE; -- Nog niemand met dit nummer; voeg toe ELSIF (v_count = 0) THEN v_errorhint := 'Fout bij toevoegen persoon'; -- Checken of er al een persoon met dezelfde oslogin bestaat SELECT COUNT(*) INTO v_count FROM prs_perslid WHERE UPPER(prs_perslid_oslogin) = UPPER(recperslid.prs_perslid_oslogin); -- Er bestaat al iemand met deze oslogin. Loggen en overslaan. IF (v_count != 0) THEN v_count_error := v_count_error + 1; fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Er bestaat al een persoon met login ['||recperslid.prs_perslid_oslogin||']', v_errorhint ); CONTINUE; ELSE -- Nieuwe persoon uit importbestand, 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_mobiel, 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_mobiel, recperslid.prs_perslid_email, recperslid.prs_perslid_nr, recperslid.prs_perslid_oslogin ) RETURNING prs_perslid_key INTO v_perslid_key; END IF; COMMIT; -- E�n persoon met dit nummer; werk bij ELSE v_errorhint := 'Fout bij wijzigen persoon'; -- Checken of er al een andere persoon met dezelfde oslogin bestaat SELECT COUNT(*) INTO v_count FROM prs_perslid WHERE UPPER(prs_perslid_oslogin) = UPPER(recperslid.prs_perslid_oslogin) AND UPPER( COALESCE(prs_perslid_nr,'apekool') ) != UPPER(recperslid.prs_perslid_nr); -- Er bestaat al iemand anders met deze oslogin. Loggen en overslaan. IF (v_count != 0) THEN v_count_error := v_count_error + 1; fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Er bestaat al een persoon (met een ander personeelsnummer) met login ['||recperslid.prs_perslid_oslogin||']', v_errorhint ); CONTINUE; ELSE -- Functie, Afdeling altijd bijwerken -- Voorletters, Naam, Tussenvoegsels, Voornaam alleen indien gevuld wordt aangeboden, anders laten staan wat in DB stond. -- 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). -- Login: alleen bijwerken indien uit AD-dump gevuld, anders niet bijwerken (dus gewoon laten staan zoals in Facilitor was gereigistreerd). -- ALLI#33755: tussenvoegselveld actief leegmaken (dus geen coalesce meer) UPDATE prs_perslid SET prs_srtperslid_key = v_srtperslid_key, prs_afdeling_key = v_afdeling_key, prs_perslid_naam = COALESCE(recperslid.prs_perslid_naam,prs_perslid_naam), prs_perslid_voorletters = COALESCE(recperslid.prs_perslid_voorletters,prs_perslid_voorletters), prs_perslid_tussenvoegsel = recperslid.prs_perslid_tussenvoegsel, prs_perslid_voornaam = COALESCE(recperslid.prs_perslid_voornaam,prs_perslid_voornaam), prs_perslid_telefoonnr = COALESCE (recperslid.prs_perslid_telefoonnr, prs_perslid_telefoonnr), prs_perslid_mobiel = COALESCE (recperslid.prs_perslid_mobiel, prs_perslid_mobiel), prs_perslid_email = COALESCE (recperslid.prs_perslid_email, prs_perslid_email), prs_perslid_nr = COALESCE (recperslid.prs_perslid_nr, prs_perslid_nr), prs_perslid_oslogin = COALESCE (recperslid.prs_perslid_oslogin, prs_perslid_oslogin) WHERE prs_perslid_key = v_perslid_key; COMMIT; END IF; END IF; -- Bedrijfsonderdeel als flexprop inserten of updaten.... -- prs_kenmerk_key = 1060 is het bedrijfsonderdeel flexprop bij persoon (prs_perslid) SELECT COUNT (*) INTO v_count FROM prs_kenmerklink WHERE prs_link_key = v_perslid_key AND prs_kenmerklink_niveau = 'P' AND prs_kenmerk_key = 1060 AND prs_kenmerklink_verwijder IS NULL; IF (v_count = 0) THEN v_errorhint := 'Fout bij toevoegen kenmerk bedrijfsonderdeel'; INSERT INTO prs_kenmerklink (prs_link_key, prs_kenmerklink_niveau, prs_kenmerk_key, prs_kenmerklink_waarde) VALUES (v_perslid_key, 'P', 1060, v_fac_usrdata_key ); COMMIT; ELSE v_errorhint := 'Fout bij bijwerken kenmerk bedrijfsonderdeel'; UPDATE prs_kenmerklink SET prs_kenmerklink_waarde = v_fac_usrdata_key WHERE prs_link_key = v_perslid_key AND prs_kenmerklink_niveau = 'P' AND prs_kenmerk_key = 1060 AND prs_kenmerklink_verwijder IS NULL; 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), '' ); -- ALLI#33108: telefoonnummers opmaken voor de visitekaartjes -- (moet worden 0612345678) UPDATE prs_perslid SET prs_perslid_mobiel = REPLACE( REPLACE( REPLACE( REPLACE(prs_perslid_mobiel, '-', ''), '.', ''), ' ', ''), '+31', '0') WHERE prs_perslid_verwijder IS NULL AND prs_perslid_mobiel IS NOT NULL; -- In Visma wordt "0" ingevuld als iemand geen 06 heeft; lege waarde van maken. UPDATE prs_perslid SET prs_perslid_mobiel = NULL WHERE prs_perslid_mobiel = '0'; -- Ongeldige nummers rapporteren FOR rectel IN ( SELECT prs_perslid_key, prs_perslid_nr, prs_perslid_naam, prs_perslid_voornaam, prs_perslid_mobiel FROM prs_v_aanwezigperslid WHERE prs_perslid_mobiel IS NOT NULL AND prs_perslid_naam NOT LIKE 'INACTIEF%' AND ( prs_perslid_mobiel NOT LIKE '06________') ) LOOP fac.imp_writelog (p_import_key, 'W', rectel.prs_perslid_nr || '|' || rectel.prs_perslid_naam || '|' || rectel.prs_perslid_voornaam || ' - ' || 'ongeldig formaat mobiel nummer', 'Mobiel nummer (na ''omnummering''): [' || rectel.prs_perslid_mobiel || ']' ); END LOOP; COMMIT; v_count_tot := 0; v_count_error := 0; -- Werkplekken FOR recwp IN cwp LOOP BEGIN v_count_tot := v_count_tot + 1; v_aanduiding := recwp.prs_perslid_nr || '|' || recwp.prs_perslid_naam || '|' || recwp.prs_perslid_voornaam || '|' || recwp.alg_locatie_code || '|' || recwp.alg_gebouw_code || ' - '; v_errorhint := 'Fout bij bepalen persoon'; SELECT prs_perslid_key INTO v_perslid_key FROM prs_v_aanwezigperslid WHERE UPPER (prs_perslid_nr) = UPPER (recwp.prs_perslid_nr); v_errorhint := 'Fout bij bepalen locatie'; SELECT alg_locatie_key INTO v_locatie_key FROM alg_v_aanweziglocatie WHERE UPPER (alg_locatie_code) = UPPER (recwp.alg_locatie_code); v_errorhint := 'Fout bij bepalen gebouw'; SELECT alg_gebouw_key INTO v_gebouw_key FROM alg_v_aanweziggebouw WHERE alg_locatie_key = v_locatie_key AND UPPER (alg_gebouw_code) = UPPER (recwp.alg_gebouw_code); v_errorhint := 'Fout bij bepalen verdieping'; SELECT alg_verdieping_key INTO v_verdieping_key FROM alg_v_aanwezigverdieping WHERE alg_gebouw_key = v_gebouw_key AND alg_verdieping_volgnr = (SELECT MIN (v.alg_verdieping_volgnr) FROM alg_verdieping v WHERE v.alg_gebouw_key = v_gebouw_key AND v.alg_verdieping_volgnr >= 0); v_errorhint := 'Fout bij bepalen of persoon in gebouw een werkplek heeft'; SELECT COUNT (*) INTO v_count FROM prs_perslidwerkplek pw, prs_werkplek wp, alg_ruimte r, alg_verdieping v WHERE pw.prs_perslid_key = v_perslid_key AND pw.prs_werkplek_key = wp.prs_werkplek_key AND wp.prs_alg_ruimte_key = r.alg_ruimte_key AND r.alg_verdieping_key = v.alg_verdieping_key AND v.alg_gebouw_key = v_gebouw_key; -- v_count=0 -> persoon verhuist naar/krijgt wp in gebouw. IF (v_count = 0) THEN v_errorhint := 'Fout bij bepalen ruimte'; SELECT COUNT (*) INTO v_count FROM alg_v_aanwezigruimte r WHERE r.alg_verdieping_key = v_verdieping_key AND r.alg_ruimte_nr = c_ruimte_nr; -- v_count=0 -> ruimte '000' bestaat nog niet. IF (v_count = 0) THEN v_errorhint := 'Fout bij toevoegen ruimte'; INSERT INTO alg_ruimte (alg_verdieping_key, alg_srtruimte_key, alg_ruimte_nr ) VALUES (v_verdieping_key, 21, -- facilitaire ruimte c_ruimte_nr ); COMMIT; END IF; v_errorhint := 'Fout bij bepalen ruimte'; SELECT alg_ruimte_key INTO v_ruimte_key FROM alg_v_aanwezigruimte r WHERE r.alg_verdieping_key = v_verdieping_key AND r.alg_ruimte_nr = c_ruimte_nr; v_errorhint := 'Fout bij bepalen vrije werkplek'; SELECT COUNT (w.prs_werkplek_key) INTO v_count FROM prs_werkplek w WHERE w.prs_alg_ruimte_key = v_ruimte_key AND NOT EXISTS ( SELECT 1 FROM prs_perslidwerkplek pw WHERE pw.prs_werkplek_key = w.prs_werkplek_key); IF (v_count > 0) THEN SELECT MIN (w.prs_werkplek_key) INTO v_wp_key FROM prs_werkplek w WHERE w.prs_alg_ruimte_key = v_ruimte_key AND NOT EXISTS ( SELECT 1 FROM prs_perslidwerkplek pw WHERE pw.prs_werkplek_key = w.prs_werkplek_key); v_errorhint := 'Fout bij koppelen persoon aan vrije werkplek'; INSERT INTO prs_perslidwerkplek (prs_perslid_key, prs_werkplek_key, prs_perslidwerkplek_bezetting ) VALUES (v_perslid_key, v_wp_key, 100 ); COMMIT; ELSE v_errorhint := 'Fout bij bepalen nieuwe werkplek'; SELECT prs_s_prs_werkplek_key.NEXTVAL INTO v_wp_key FROM DUAL; SELECT COALESCE (MAX (w.prs_werkplek_volgnr), 0) + 1 INTO v_wp_volgnr FROM prs_werkplek w WHERE w.prs_alg_ruimte_key = v_ruimte_key; v_wp_oms := c_ruimte_nr || '/' || TO_CHAR (v_wp_volgnr); v_errorhint := 'Fout bij aanmaken nieuwe werkplek'; INSERT INTO prs_werkplek (prs_werkplek_key, prs_werkplek_module, prs_werkplek_volgnr, prs_werkplek_omschrijving, prs_alg_ruimte_key ) VALUES (v_wp_key, 'PRR', v_wp_volgnr, v_wp_oms, v_ruimte_key ); v_errorhint := 'Fout bij koppelen persoon aan nieuwe werkplek'; INSERT INTO prs_perslidwerkplek (prs_perslid_key, prs_werkplek_key, prs_perslidwerkplek_bezetting ) VALUES (v_perslid_key, v_wp_key, 100 ); 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 || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint ); COMMIT; END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'Werkplek: verwerkte regels zonder foutmelding: ' || TO_CHAR (v_count_tot - v_count_error), '' ); fac.imp_writelog (p_import_key, 'S', 'Werkplek: verwerkte regels met foutmelding: ' || TO_CHAR (v_count_error), '' ); COMMIT; -- Rapporteer personen zonder werkplek FOR recnowp IN cnowp LOOP BEGIN fac.imp_writelog (p_import_key, 'I', 'Persoon met nummer [' || recnowp.prs_perslid_nr || '] en naam [' || recnowp.prs_perslid_naam || ', ' || recnowp.prs_perslid_voornaam || '] heeft geen werkplek', 'Geen werkplek' ); 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; -- Iedereen krijgt _Default-rol die nog geen groep heeft. FOR recnogroup IN cnogroup LOOP BEGIN v_aanduiding := recnogroup.prs_perslid_nr || '|' || 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 alli_update_prs; / ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- Koppeling CYOD serienummers registratie met Misco. CREATE OR REPLACE VIEW ALLI_V_INS_KENMERKDOMEIN_BES (BES_BESTELLING_KEY, BES_BESTELLING_NR) AS SELECT BES_BESTELLING_KEY, to_char(BES_BESTELLING_KEY) FROM BES_BESTELLING; --select * --from bes_bestelopdr_item bo, bes_bestelling_item bi, bes_srtdeel sd --where bes_bestelopdr_key = (select bes_bestelopdr_key from bes_bestelopdr where bes_bestelopdr_id = '361/1') --and BI.BES_BESTELOPDR_ITEM_KEY = BO.BES_BESTELOPDR_ITEM_KEY --and bi.bes_srtdeel_key = sd.bes_srtdeel_key; CREATE OR REPLACE PROCEDURE alli_import_cyod_serienummers ( 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_bes_bestelopdr_id VARCHAR2 (256); v_bes_srtdeel_nr VARCHAR2 (256); v_serienummer VARCHAR2 (256); v_soort VARCHAR2 (256); v_datum 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 alli_imp_cyod_serienummers; 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 -- v_bes_bestelopdr_id VARCHAR2 (256); -- v_bes_srtdeel_nr VARCHAR2 (256); -- v_serienummer VARCHAR2 (256); -- v_datum VARCHAR2 (256); -- 01 - Bestelopdrachtnummer fac.imp_getfield_nr (v_newline, c_fielddelimitor, 1, v_bes_bestelopdr_id); -- 02 - Artikelnummer fac.imp_getfield_nr (v_newline, c_fielddelimitor, 2, v_bes_srtdeel_nr); -- 03 - Serienummer of IMEI nummer. fac.imp_getfield_nr (v_newline, c_fielddelimitor, 3, v_serienummer); -- 04 - Soort object: Notebook (N) of Telefoon (T) fac.imp_getfield_nr (v_newline, c_fielddelimitor, 4, v_soort); -- 05 - Verzenddatum cq. Aanschafdatum fac.imp_getfield_nr (v_newline, c_fielddelimitor, 5, v_datum); -- v_aanduiding := '[' || v_bes_bestelopdr_id || '|' || v_bes_srtdeel_nr || '|' || v_serienummer || '|' || v_soort || '] '; -- 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_bes_bestelopdr_id) = 'BESTELOPDRACHTNR' AND UPPER (v_bes_srtdeel_nr) = 'ARTIKELNR' AND UPPER (v_serienummer) = 'SERIENR' AND UPPER (v_soort) = 'TYPE' AND UPPER (v_datum) = 'VERZENDDATUM' THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden -- v_errorhint := 'Ongeldig bestelopdrachtnr'; v_bes_bestelopdr_id := TRIM (v_bes_bestelopdr_id); IF (v_bes_bestelopdr_id IS NOT NULL) THEN IF LENGTH (v_bes_bestelopdr_id) > 30 THEN v_bes_bestelopdr_id := SUBSTR (v_bes_bestelopdr_id, 1, 30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Bestelopdrachtnr te lang', 'Nummer wordt afgebroken tot [' || v_bes_bestelopdr_id || ']' ); END IF; ELSE v_ongeldig := 1; END IF; v_errorhint := 'Ongeldig artikelnr'; v_bes_srtdeel_nr := TRIM (v_bes_srtdeel_nr); IF (v_bes_srtdeel_nr IS NOT NULL) THEN IF LENGTH (v_bes_srtdeel_nr) > 32 THEN v_bes_srtdeel_nr := SUBSTR (v_bes_srtdeel_nr, 1, 32); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Artikelnummer te lang', 'Nummer wordt afgebroken tot [' || v_bes_srtdeel_nr || ']' ); END IF; ELSE v_ongeldig := 1; END IF; v_errorhint := 'Ongeldig serienummer'; v_serienummer := TRIM (v_serienummer); IF (v_serienummer IS NOT NULL) THEN IF LENGTH (v_serienummer) > 50 THEN v_serienummer := SUBSTR (v_serienummer, 1, 50); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Serienummer te lang', 'Nummer wordt afgebroken tot [' || v_serienummer || ']' ); END IF; END IF; v_errorhint := 'Ongeldig type/soort'; v_soort := TRIM (v_soort); IF (v_soort IS NOT NULL) THEN IF LENGTH (v_soort) > 1 THEN v_soort := SUBSTR (v_soort, 1, 1); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Type/soort te lang', 'Type/soort wordt afgebroken tot [' || v_soort || ']' ); END IF; END IF; v_errorhint := 'Ongeldige verzenddatum'; v_datum := TRIM (v_datum); IF (v_datum IS NOT NULL) THEN IF LENGTH (v_datum) > 10 THEN v_datum := SUBSTR (v_datum, 1, 10); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Verzenddatum te lang', 'Datum wordt afgebroken tot [' || v_datum || ']' ); END IF; END IF; -- Insert geformatteerde import record IF v_ongeldig = 0 THEN BEGIN v_errorhint := 'Fout bij toevoegen regel aan importtabel alli_imp_cyod_serienummers'; INSERT INTO alli_imp_cyod_serienummers (bes_bestelopdr_id, bes_srtdeel_nr, serienummer, soort, datum) VALUES (v_bes_bestelopdr_id, v_bes_srtdeel_nr, v_serienummer, v_soort, v_datum); 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', 'CYOD serienummers: 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 alli_import_cyod_serienummers; / CREATE OR REPLACE PROCEDURE alli_update_cyod_serienummers ( 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_aantal NUMBER (10); v_bes_bestelling_key NUMBER (10); v_prs_perslid_key NUMBER (10); v_bes_srtgroep_key NUMBER (10); c_ins_srtgroep_key_temp NUMBER (10) := 1; c_ins_kenmerk_key_temp NUMBER (10) := 1; l_ins_srtdeel_key NUMBER (10); l_ins_deel_key NUMBER (10); l_code_notebook_telefoon VARCHAR2 (100); c_ins_srtdeel_key_telefoon NUMBER (10) := 9201; c_ins_srtdeel_key_notebook NUMBER (10) := 9202; c_notebook_bestelling_key NUMBER (10) := 1; c_notebook_artikel_key NUMBER (10) := 2; c_notebook_serienr_key NUMBER (10) := 3; c_notebook_datum_key NUMBER (10) := 4; c_mobiel_bestelling_key NUMBER (10) := 5; c_mobiel_artikel_key NUMBER (10) := 6; c_mobiel_serienr_key NUMBER (10) := 7; c_mobiel_datum_key NUMBER (10) := 8; -- Alle ingelezen CYOD artikelen met serienummers CURSOR c_cyod_artikelen IS SELECT * FROM alli_imp_cyod_serienummers; BEGIN v_count_tot := 0; v_count_error := 0; v_aanduiding := ''; -- Alle artikelen verwerken... FOR rec_cyod IN c_cyod_artikelen LOOP BEGIN v_count_tot := v_count_tot + 1; v_aanduiding := '[' || rec_cyod.bes_bestelopdr_id || '|' || rec_cyod.bes_srtdeel_nr || '|' || rec_cyod.serienummer || '|' || rec_cyod.soort || '|' || rec_cyod.datum || '] '; v_errorhint := 'Fout bij bepalen combi bestelopdracht en artikelnummer'; -- Op zoek naar: -- 1) de bestelopdracht volgens opdrachtnr: rec_cyod.bes_bestelopdr_id -- 2) het artikel dat in die opdracht zit volgens artikelnr: rec_cyod.bes_srtdeel_nr -- We vinden dan: -- 1) De bestellingaanvraag (bes_bestelling_key) -- 2) De besteller (prs_perslid_key) -- 3) De soortgroep (bes_srtgroep_key): notebook of telefoon (indien een andere, dan maken we geen serienummer erbij). SELECT b.bes_bestelling_key, b.prs_perslid_key, sg.bes_srtgroep_key INTO v_bes_bestelling_key, v_prs_perslid_key, v_bes_srtgroep_key FROM bes_bestelling b, bes_bestelopdr bo, bes_bestelopdr_item boi, bes_bestelling_item bi, bes_srtdeel sd, bes_srtgroep sg WHERE b.bes_bestelling_key = bi.bes_bestelling_key AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key AND sd.bes_srtgroep_key = sg.bes_srtgroep_key AND BI.BES_BESTELOPDR_ITEM_KEY = BOI.BES_BESTELOPDR_ITEM_KEY AND bi.bes_srtdeel_key = sd.bes_srtdeel_key AND bo.bes_bestelopdr_id = rec_cyod.bes_bestelopdr_id AND sd.bes_srtdeel_nr = rec_cyod.bes_srtdeel_nr ; -- Hier komt een cruciaal stuk die bepaalt of het artikel een N(notebook) of T(telefoon is). -- Mogelijk wordt dat in de XML door Misco meegestuurd, en anders bepalen wie die adhv de groep. -- Nu doen we ff een simpele check op groep-key: indien 1623 dan is ie van de telefoon-groep, dus een telefoon. l_code_notebook_telefoon := NULL; l_code_notebook_telefoon := NULL; v_errorhint := 'Fout bij bepalen soort object'; IF rec_cyod.soort = 'T' THEN -- Ik ben een telefoon, bepaal een nieuwe default naam/code voor het object l_ins_srtdeel_key := c_ins_srtdeel_key_telefoon; ELSE IF rec_cyod.soort = 'N' THEN -- Ik ben een notebook, bepaal een nieuwe default naam/code voor het object l_ins_srtdeel_key := c_ins_srtdeel_key_notebook; ELSE l_ins_srtdeel_key := NULL; END IF; END IF; IF l_ins_srtdeel_key IS NOT NULL THEN -- Eerst ff kijken of persoon het object al heeft, waarbij serienummer/IMEI nummer dezelfde is. -- Dan namelijk NIET toevoegen, anders wordt het object dubbel geregistreerd. -- De aanschafdatum mag dan wel/hooguit worden aangepast, maar dat doen we maar even niet. We gaan ervan uit dat er eenmalig een aanlevering van goede gegevens plaatsvindt. SELECT count(*) INTO v_aantal FROM ins_deel d, ins_kenmerkdeel k WHERE ins_deel_module = 'INS' AND ins_srtdeel_key = l_ins_srtdeel_key AND ins_alg_ruimte_key = v_prs_perslid_key AND ins_alg_ruimte_type = 'P' AND d.ins_deel_key=k.ins_deel_key AND (ins_kenmerk_key = c_notebook_serienr_key OR ins_kenmerk_key = c_mobiel_serienr_key) AND ins_kenmerkdeel_waarde = rec_cyod.serienummer; IF v_aantal = 0 THEN -- Persoon heeft het object met dat serienummer nog niet --> DUS TOEVOEGEN SELECT ins.get_description('LPN_INS_DEEL',NULL, ins_srtdeel_code_upper) INTO l_code_notebook_telefoon FROM ins_srtdeel WHERE ins_srtdeel_key= l_ins_srtdeel_key; -- Insert van persoonsgebonden object. v_errorhint := 'Fout bij toevoegen van nieuw object [' || l_code_notebook_telefoon|| ']'; INSERT INTO ins_deel (ins_deel_module, ins_srtdeel_key, ins_alg_ruimte_key, ins_alg_ruimte_type, ins_deel_omschrijving) VALUES ('INS', l_ins_srtdeel_key, v_prs_perslid_key, 'P', l_code_notebook_telefoon); v_errorhint := 'Object is toegevoegd'; fac.imp_writelog (p_import_key, 'I', v_aanduiding || 'Objectnaam ' || l_code_notebook_telefoon || ' is toegevoegd', v_errorhint ); SELECT MAX(ins_deel_key) INTO l_ins_deel_key FROM ins_deel; IF l_ins_srtdeel_key = c_ins_srtdeel_key_notebook THEN -- Ik ben een notebook, vul de kenmerken v_errorhint := 'Fout bij toevoegen kenmerk bestelnummer [' || v_bes_bestelling_key || '] bij object [' || l_code_notebook_telefoon || ']'; INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde) SELECT l_ins_deel_key, c_notebook_bestelling_key, v_bes_bestelling_key FROM DUAL; v_errorhint := 'Fout bij toevoegen kenmerk artikelnummer [' || rec_cyod.bes_srtdeel_nr || '] bij object [' || l_code_notebook_telefoon || ']'; INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde) SELECT l_ins_deel_key, c_notebook_artikel_key, rec_cyod.bes_srtdeel_nr FROM DUAL; v_errorhint := 'Fout bij toevoegen kenmerk serienummer [' || rec_cyod.serienummer || '] bij object [' || l_code_notebook_telefoon || ']'; INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde) SELECT l_ins_deel_key, c_notebook_serienr_key, rec_cyod.serienummer FROM DUAL; v_errorhint := 'Fout bij toevoegen kenmerk aanschafdatum [' || rec_cyod.datum || '] bij object [' || l_code_notebook_telefoon || ']'; INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde) SELECT l_ins_deel_key, c_notebook_datum_key, TO_CHAR(TO_DATE(rec_cyod.datum,'YYYYMMDD'),'DD-MM-YYYY') FROM DUAL; ELSE IF l_ins_srtdeel_key = c_ins_srtdeel_key_telefoon THEN -- Ik ben een telefoon, vul de kenmerken v_errorhint := 'Fout bij toevoegen kenmerk bestelnummer [' || v_bes_bestelling_key || '] bij object [' || l_code_notebook_telefoon || ']'; INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde) SELECT l_ins_deel_key, c_mobiel_bestelling_key, v_bes_bestelling_key FROM DUAL; v_errorhint := 'Fout bij toevoegen kenmerk artikelnummer [' || rec_cyod.bes_srtdeel_nr || '] bij object [' || l_code_notebook_telefoon || ']'; INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde) SELECT l_ins_deel_key, c_mobiel_artikel_key, rec_cyod.bes_srtdeel_nr FROM DUAL; v_errorhint := 'Fout bij toevoegen kenmerk serienummer [' || rec_cyod.serienummer || '] bij object [' || l_code_notebook_telefoon || ']'; INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde) SELECT l_ins_deel_key, c_mobiel_serienr_key, rec_cyod.serienummer FROM DUAL; v_errorhint := 'Fout bij toevoegen kenmerk aanschafdatum [' || rec_cyod.datum || '] bij object [' || l_code_notebook_telefoon || ']'; INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde) SELECT l_ins_deel_key, c_mobiel_datum_key, TO_CHAR(TO_DATE(rec_cyod.datum,'YYYYMMDD'),'DD-MM-YYYY') FROM DUAL; END IF; END IF; ELSE -- Persoon heeft het object met dat serienummer al en zou een dubbel voorkomen gaan worden --> DUS NIET TOEVOEGEN v_count_error := v_count_error + 1; v_errorhint := 'Fout bij toevoegen van object'; fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Object met serienummers is al bij persoon geregistreerd: object wordt niet toegevoegd', v_errorhint ); END IF; ELSE -- Type/Soort is geen N en geen T, dus onbekend v_count_error := v_count_error + 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Soort object is onbekend: moet N(otebook) of T(elefoon) zijn', v_errorhint ); 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', 'CYOD Serienummers: verwerkte regels zonder foutmelding: ' || TO_CHAR (v_count_tot - v_count_error), '' ); fac.imp_writelog (p_import_key, 'S', 'CYOD Serienummers: verwerkte regels met foutmelding: ' || TO_CHAR (v_count_error), '' ); COMMIT; END alli_update_cyod_serienummers; / ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- -- Koppeling Bouwborden -- -- Leverancier: Bas Honcoop (prs_bedrijf_key = 936) -- Catalogus: Bouwborden (discipline = 521) -- OCI Punchout: http://bh.enson.nl/oci.alliantie.php?username=alliantie&password=p$iSu45&~TARGET=_self -- Financiele goedkeuring: nvt --> Automatisch accepteren aanvraag = ja -- Functionele goedkeuring: communicatiemedewerker van project (door projectleider verplicht in te vullen bij bestelaanvraag) -- Projectnummer: verplicht invulbaar veld door projectleider in te vullen bij bestelaanvraag. -- Communicatiemedewerkers voor bouwborden ALLI_V_BO_MDW_BOUWBORD_NOW: dit zijn alle BO-medewerkers met BESBOF rechten op bouwborden (dis-key = 521), -- waarbij de applicatiebeheerders ('WEB_USER01') worden uitgesloten (ook al hebben ze BESBOF op dis-key 521). -- Verder worden eventuele vroegere communicatiemedewerkers ALLI_V_BO_MDW_BOUWBORD_PAST via vervaldatum (die dat nu niet meer zijn!!) ook geuniond -- voor behoud van historie bestellingen (anders zijn ze niet zichtbaar in domein). Let op: CREATE OR REPLACE VIEW ALLI_V_BO_MDW_BOUWBORD_NOW (PRS_PERSLID_KEY, PRS_PERSLID_FULL) AS select DISTINCT p.prs_perslid_key, P.prs_perslid_naam_full FROM fac_groeprechten gr, fac_gebruikersgroep gg, prs_v_perslid_fullnames p WHERE gr.ins_discipline_key = 521 AND GR.FAC_FUNCTIE_KEY = (SELECT fac_functie_key FROM fac_functie f WHERE f.fac_functie_code = 'WEB_BESBOF') AND NOT EXISTS ( SELECT * FROM fac_groeprechten gr1, fac_gebruikersgroep gg1, prs_v_perslid_fullnames p1 WHERE GR1.FAC_FUNCTIE_KEY = (SELECT fac_functie_key FROM fac_functie f1 WHERE f1.fac_functie_code = 'WEB_USER01') AND gr1.fac_gebruiker_alg_level_write < 9 AND gr1.fac_gebruiker_prs_level_write < 9 AND gr1.fac_groep_key = gg1.fac_groep_key AND gg1.prs_perslid_key = p1.prs_perslid_key AND p1.prs_perslid_key = p.prs_perslid_key) AND gr.fac_gebruiker_alg_level_write < 9 AND gr.fac_gebruiker_prs_level_write < 9 AND gr.fac_groep_key = gg.fac_groep_key AND gg.prs_perslid_key = p.prs_perslid_key; CREATE OR REPLACE VIEW ALLI_V_BO_MDW_BOUWBORD_PAST (PRS_PERSLID_KEY, PRS_PERSLID_FULL) AS SELECT DISTINCT p.prs_perslid_key, p.prs_perslid_naam_full FROM bes_kenmerk k, bes_kenmerkbestell kb, prs_v_perslid_fullnames p WHERE k.bes_srtkenmerk_key = 361 AND k.bes_srtinstallatie_key = 521 AND k.bes_kenmerk_niveau='D' AND k.bes_kenmerk_type='B' AND k.bes_kenmerk_key = kb.bes_kenmerk_key AND fac.safe_to_number(kb.bes_kenmerkbestell_waarde) = p.prs_perslid_key MINUS SELECT DISTINCT prs_perslid_key, PRS_PERSLID_FULL FROM ALLI_V_BO_MDW_BOUWBORD_NOW; CREATE OR REPLACE VIEW ALLI_V_BO_MEDEWERKERS_BOUWBORD (PRS_PERSLID_KEY, PRS_PERSLID_FULL, PRS_PERSLID_ACTIVE) AS SELECT PRS_PERSLID_KEY, PRS_PERSLID_FULL, NULL FROM ALLI_V_BO_MDW_BOUWBORD_NOW UNION SELECT PRS_PERSLID_KEY, PRS_PERSLID_FULL, TRUNC(SYSDATE - 1) FROM ALLI_V_BO_MDW_BOUWBORD_PAST; -------------------------------------------------------------------------------------------------------------------------- -- Notificatiejob met key 41 is via alli09.sql aangemaakt. CREATE OR REPLACE VIEW ALLI_V_NOTIFY_BO_BOUWBORD (code, sender, receiver, text, KEY, par1, par2, xkey) AS SELECT sn.fac_srtnotificatie_code, b.prs_perslid_key, fac.safe_to_number(kb.bes_kenmerkbestell_waarde), sn.fac_srtnotificatie_oms, b.bes_bestelling_key, NULL, NULL, NULL FROM bes_bestelling b, bes_kenmerkbestell kb, bes_kenmerk k, bes_srtkenmerk sk, fac_kenmerkdomein kd, fac_notificatie_job nj, fac_srtnotificatie sn WHERE sn.fac_srtnotificatie_code = 'CUST01' AND nj.fac_notificatie_job_key = 41 AND b.bes_bestelling_key = kb.bes_bestelling_key and b.bes_bestelling_status = 3 and KB.BES_KENMERK_KEY = k.bes_kenmerk_key and K.BES_SRTKENMERK_KEY = SK.BES_SRTKENMERK_KEY and SK.FAC_KENMERKDOMEIN_KEY= KD.FAC_KENMERKDOMEIN_KEY and UPPER(KD.FAC_KENMERKDOMEIN_MODULE) = 'BES' and UPPER(KD.FAC_KENMERKDOMEIN_OBJECTNAAM) = 'ALLI_V_BO_MEDEWERKERS_BOUWBORD'; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- basisoverzicht van reserveringen + gekoppelde objecten (alle objecten). /* Formatted on 2/10/2025 12:22:37 (QP5 v5.336) */ CREATE OR REPLACE FORCE VIEW ALLI_V_OBJECTRESER ( RESERVERING_KEY, RRR_KEY, RES_RUIMTE_KEY, RES_ACTIVITEIT_KEY, DATUM_VAN, DATUM_TOT, TIJD_VAN, TIJD_TOT, LOCATIE_CODE, RUIMTE_NR, OBJECTEN, AANMK_DATUM, LAST_UPD, VERW_DATUM, CODE, KEY, XKEY, XEMAIL ) BEQUEATH DEFINER AS WITH obj AS ( SELECT rrd.res_rsv_ruimte_key AS rrr_key, LISTAGG (d.res_deel_omschrijving, ', ') WITHIN GROUP (ORDER BY d.res_deel_omschrijving) AS objecten FROM res_rsv_deel rrd JOIN res_deel d ON d.res_deel_key = rrd.res_deel_key GROUP BY rrd.res_rsv_ruimte_key) SELECT rrr.res_reservering_key AS reservering_key, rrr.res_rsv_ruimte_key AS rrr_key, rer.res_ruimte_key AS res_ruimte_key, rrr.res_activiteit_key AS res_activiteit_key, TO_CHAR (rrr.res_rsv_ruimte_van, 'dd-mm-yyyy') AS datum_van, TO_CHAR (rrr.res_rsv_ruimte_tot, 'dd-mm-yyyy') AS datum_tot, TO_CHAR (rrr.res_rsv_ruimte_van, 'HH24:MI') AS tijd_van, TO_CHAR (rrr.res_rsv_ruimte_tot, 'HH24:MI') AS tijd_tot, alg.alg_locatie_code AS locatie_code, COALESCE (rer.res_ruimte_friendlyname, alg.alg_ruimte_nr) AS ruimte_nr, NVL (o.objecten, 'object') AS objecten, rrr.res_rsv_ruimte_aanmaak AS aanmk_datum, (SELECT MAX (f.fac_tracking_datum) FROM fac_tracking f WHERE f.fac_tracking_refkey = rrr.res_rsv_ruimte_key AND f.fac_srtnotificatie_key = 117) AS last_upd, rrr.res_rsv_ruimte_verwijder AS verw_datum, 'CUST02' AS code, rrr.res_reservering_key AS key, rrr.res_rsv_ruimte_key AS xkey, 'localsupport@de-alliantie.nl' AS xemail FROM res_rsv_ruimte rrr LEFT JOIN res_ruimte_opstelling rop ON rop.res_ruimte_opstel_key = rrr.res_ruimte_opstel_key LEFT JOIN res_ruimte rer ON rer.res_ruimte_key = rop.res_ruimte_key LEFT JOIN alg_v_ruimte_gegevens_all alg ON alg.alg_ruimte_key = rrr.alg_ruimte_key LEFT JOIN obj o ON o.rrr_key = rrr.res_rsv_ruimte_key WHERE EXISTS (SELECT 1 FROM res_rsv_deel rrd WHERE rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key); ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- subset van ALLI_V_OBJECTRESER specifiek voor AV-middelen (microfoon, verrijdbaar scherm). /* Formatted on 2/10/2025 12:25:09 (QP5 v5.336) */ CREATE OR REPLACE FORCE VIEW ALLI_V_OBJECTRESER_AVSRT ( RESERVERING_KEY, RRR_KEY, RES_RUIMTE_KEY, RES_ACTIVITEIT_KEY, DATUM_VAN, DATUM_TOT, TIJD_VAN, TIJD_TOT, LOCATIE_CODE, RUIMTE_NR, OBJECTEN, AANMK_DATUM, LAST_UPD, VERW_DATUM, CODE, KEY, XKEY, XEMAIL ) BEQUEATH DEFINER AS WITH obj AS ( SELECT rrd.res_rsv_ruimte_key AS rrr_key, LISTAGG (d.res_deel_omschrijving, ', ') WITHIN GROUP (ORDER BY d.res_deel_omschrijving) AS objecten FROM res_rsv_deel rrd JOIN res_deel d ON d.res_deel_key = rrd.res_deel_key WHERE UPPER (d.res_deel_omschrijving) LIKE 'MICRO%' OR REGEXP_LIKE (UPPER (d.res_deel_omschrijving), 'VERRIJDBAAR.*SCHERM') GROUP BY rrd.res_rsv_ruimte_key) SELECT rrr.res_reservering_key, rrr.res_rsv_ruimte_key, rer.res_ruimte_key, rrr.res_activiteit_key, TO_CHAR (rrr.res_rsv_ruimte_van, 'dd-mm-yyyy') AS datum_van, TO_CHAR (rrr.res_rsv_ruimte_tot, 'dd-mm-yyyy') AS datum_tot, TO_CHAR (rrr.res_rsv_ruimte_van, 'HH24:MI') AS tijd_van, TO_CHAR (rrr.res_rsv_ruimte_tot, 'HH24:MI') AS tijd_tot, alg.alg_locatie_code, COALESCE (rer.res_ruimte_friendlyname, alg.alg_ruimte_nr) AS ruimte_nr, NVL (o.objecten, 'object') AS objecten, rrr.res_rsv_ruimte_aanmaak AS aanmk_datum, (SELECT MAX (f.fac_tracking_datum) FROM fac_tracking f WHERE f.fac_tracking_refkey = rrr.res_rsv_ruimte_key AND f.fac_srtnotificatie_key = 117) AS last_upd, rrr.res_rsv_ruimte_verwijder AS verw_datum, 'CUST02' AS code, rrr.res_reservering_key AS key, rrr.res_rsv_ruimte_key AS xkey, 'localsupport@de-alliantie.nl' AS xemail FROM res_rsv_ruimte rrr LEFT JOIN res_ruimte_opstelling rop ON rop.res_ruimte_opstel_key = rrr.res_ruimte_opstel_key LEFT JOIN res_ruimte rer ON rer.res_ruimte_key = rop.res_ruimte_key LEFT JOIN alg_v_ruimte_gegevens_all alg ON alg.alg_ruimte_key = rrr.alg_ruimte_key LEFT JOIN obj o ON o.rrr_key = rrr.res_rsv_ruimte_key WHERE EXISTS (SELECT 1 FROM res_rsv_deel rrd JOIN res_deel d ON d.res_deel_key = rrd.res_deel_key WHERE rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key AND ( UPPER (d.res_deel_omschrijving) LIKE 'MICRO%' OR REGEXP_LIKE (UPPER (d.res_deel_omschrijving), 'VERRIJDBAAR.*SCHERM'))); ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- tweede laag bovenop ALLI_V_OBJECTRESER_AVSRT. Bepaalt welke reserveringen nu gemaild moeten worden, afhankelijk van nieuw / gewijzigd / geannuleerd. /* Formatted on 2/10/2025 12:26:24 (QP5 v5.336) */ CREATE OR REPLACE FORCE VIEW ALLI_V_NOTI_AVSRT ( SENDER, RECEIVER, TEXT, CODE, KEY, XKEY, XEMAIL, XMOBILE ) BEQUEATH DEFINER AS SELECT NULL AS sender, NULL AS receiver, 'Er is een nieuwe AV-reservering voor ' || TO_CHAR (v.datum_van, 'dd-mm-yyyy') || ' (reservering ' || v.reservering_key || '), ruimte ' || v.ruimte_nr || ' met object(en): ' || v.objecten AS text, v.code, v.reservering_key AS key, v.rrr_key AS xkey, v.xemail, NULL AS xmobile FROM ALLI_V_OBJECTRESER_AVSRT v, fac_notificatie_job nj WHERE nj.fac_notificatie_job_view = 'ALLI_V_NOTI_AVSRT' AND ( nj.fac_notificatie_job_lastrun IS NULL OR v.aanmk_datum > nj.fac_notificatie_job_lastrun) AND v.last_upd IS NULL AND v.verw_datum IS NULL UNION ALL /* === Gewijzigde reservering === */ SELECT NULL AS sender, NULL AS receiver, 'Er is een gewijzigde AV-reservering voor ' || TO_CHAR (v.datum_van, 'dd-mm-yyyy') || ' (reservering ' || v.reservering_key || '), ruimte ' || v.ruimte_nr || ' met object(en): ' || v.objecten AS text, v.code, v.reservering_key AS key, v.rrr_key AS xkey, v.xemail, NULL AS xmobile FROM ALLI_V_OBJECTRESER_AVSRT v, fac_notificatie_job nj WHERE nj.fac_notificatie_job_view = 'ALLI_V_NOTI_AVSRT' AND ( nj.fac_notificatie_job_lastrun IS NULL OR v.last_upd > nj.fac_notificatie_job_lastrun) AND v.last_upd > v.aanmk_datum AND v.verw_datum IS NULL UNION ALL /* === Geannuleerde reservering === */ SELECT NULL AS sender, NULL AS receiver, 'Er is een annulering van een AV-reservering op ' || TO_CHAR (v.datum_van, 'dd-mm-yyyy') || ' (reservering ' || v.reservering_key || '), ruimte ' || v.ruimte_nr || ' met object(en): ' || v.objecten AS text, v.code, v.reservering_key AS key, v.rrr_key AS xkey, v.xemail, NULL AS xmobile FROM ALLI_V_OBJECTRESER_AVSRT v, fac_notificatie_job nj WHERE nj.fac_notificatie_job_view = 'ALLI_V_NOTI_AVSRT' AND ( v.verw_datum > nj.fac_notificatie_job_lastrun OR nj.fac_notificatie_job_lastrun IS NULL) AND v.verw_datum IS NOT NULL; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- View tbv notificatiejob contract-reminder (afgeleid van de FAC-standaard). -- 1x per week wordt de job aangeroepen, verschil met de standaard FAC is dat niet alleen de beheerder (voor de UNION), -- maar ook andere personen een mailt-notificatie moeten kunnen ontvangen (na UNION). -- Deze personen worden in eigen tabel "$SYSTEM" (key = 61) met als waarde-code "CNT_NOTI_REMINDER..." geregistreerd. -- In de waarde-kolom staan de prs_perslid_key van de persoon die (ook) een notificatie moet ontvangen. CREATE OR REPLACE VIEW alli_v_noti_cntreminder (code, sender, receiver, text, key, par1, par2, xkey) AS SELECT '', '', c.prs_perslid_key_beh, 'Rapp�l: Contract ' || c.cnt_contract_nummer_intern || ' (' || c.cnt_contract_omschrijving || ' ' || b.prs_bedrijf_naam || ')' || ' moet uiterlijk per ' || TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key), 'DD-MM-YYYY') || ' worden verlengd of opgezegd.', c.cnt_contract_key, c.cnt_contract_nummer_intern, cnt.cnt_getopzegdatum (c.cnt_contract_key), NULL FROM cnt_v_aanwezigcontract c, prs_bedrijf b WHERE b.prs_bedrijf_key = c.cnt_prs_bedrijf_key AND cnt_contract_verwijder IS NULL AND cnt_contract_status = 0 /* actief */ AND (SYSDATE BETWEEN cnt.cnt_getrappeldatum (c.cnt_contract_key) AND cnt.cnt_getopzegdatum (c.cnt_contract_key)) UNION SELECT '', '', fac.safe_to_number(fac_usrdata_omschr), 'Rapp�l: Contract ' || c.cnt_contract_nummer_intern || ' (' || c.cnt_contract_omschrijving || ' ' || b.prs_bedrijf_naam || ')' || ' moet uiterlijk per ' || TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key), 'DD-MM-YYYY') || ' worden verlengd of opgezegd.', c.cnt_contract_key, c.cnt_contract_nummer_intern, cnt.cnt_getopzegdatum (c.cnt_contract_key), NULL FROM cnt_v_aanwezigcontract c, prs_bedrijf b, fac_usrdata ud WHERE b.prs_bedrijf_key = c.cnt_prs_bedrijf_key AND cnt_contract_verwijder IS NULL AND cnt_contract_status = 0 /* actief */ AND (SYSDATE BETWEEN cnt.cnt_getrappeldatum (c.cnt_contract_key) AND cnt.cnt_getopzegdatum (c.cnt_contract_key)) AND fac_usrtab_key = 61 AND fac_usrdata_code like 'CNT_NOTI_REMINDER%' AND fac_usrdata_verwijder IS NULL; ---------------------------------------------------------------------------------------------------------------------------------------------------------- --- RTM Grafieken op portaal -- Alle bestelaanvragen per catalogus, per week. CREATE OR REPLACE VIEW alli_v_bes_catalogus_p_week (INS_DISCIPLINE_KEY, INS_DISCIPLINE_OMSCHRIJVING, jaar, week, aantal) AS select D.INS_DISCIPLINE_KEY, MIN(D.INS_DISCIPLINE_OMSCHRIJVING), to_char(bes_bestelling_datum, 'IYYY'), to_char(bes_bestelling_datum, 'IW'), count(b.bes_bestelling_key) from bes_bestelling b, bes_bestelling_item bi, bes_srtdeel s, bes_srtgroep g, bes_discipline d where BI.BES_BESTELLING_KEY = b.bes_bestelling_key and BI.BES_SRTDEEL_KEY = s.bes_srtdeel_key and s.bes_srtgroep_key = G.BES_SRTGROEP_KEY and G.INS_DISCIPLINE_KEY = D.INS_DISCIPLINE_KEY and TRUNC( b.bes_bestelling_datum) >= (TRUNC (SYSDATE) - DECODE (TO_CHAR (SYSDATE, 'D'), '1', 8, TO_CHAR (SYSDATE, 'D')) + 2) - 10*7 group by D.INS_DISCIPLINE_KEY, to_char(bes_bestelling_datum, 'IYYY'), to_char(bes_bestelling_datum, 'IW'); -- View van de afgelopen 10 weken, met deze week erbij is dat 11. CREATE OR REPLACE VIEW alli_v_10_week_history (jaar, week) AS SELECT to_char(TRUNC(SYSDATE - (7* (LEVEL - 1))),'IYYY') jaar, substr(to_char(SYSDATE - (7* (LEVEL - 1)), 'IW'), 1, 2) week FROM DUAL CONNECT BY LEVEL <= 11; CREATE OR REPLACE VIEW alli_v_10_week_future (jaar, week) AS SELECT to_char(TRUNC(SYSDATE + (7* (LEVEL - 1))),'IYYY') jaar, substr(to_char(SYSDATE + (7* (LEVEL - 1)), 'IW'), 1, 2) week FROM DUAL CONNECT BY LEVEL <= 11; -- Kantoorartikelen per week CREATE OR REPLACE VIEW alli_v_graph_cat_kantoor ( fclt_key, FCLT_XAS_, FCLT_YAS_KANTOOR, FCLT_YAS_INCIDENTEEL, FCLT_URL, VOLGORDE ) AS SELECT '', week, COALESCE( (SELECT aantal FROM alli_v_bes_catalogus_p_week c WHERE INS_DISCIPLINE_KEY = 501 AND c.week = w10.week AND c.jaar = w10.jaar), 0), COALESCE( (SELECT aantal FROM alli_v_bes_catalogus_p_week c WHERE INS_DISCIPLINE_KEY = 42 AND c.week = w10.week AND c.jaar = w10.jaar), 0), '', jaar|| '-' ||week FROM alli_v_10_week_history w10; -- Bouwborden per week CREATE OR REPLACE VIEW alli_v_graph_cat_bouwbord ( fclt_key, FCLT_XAS_, FCLT_YAS_BOUWBORD, FCLT_URL, VOLGORDE ) AS SELECT '', week, COALESCE( (SELECT aantal FROM alli_v_bes_catalogus_p_week c WHERE INS_DISCIPLINE_KEY = 521 AND c.week = w10.week AND c.jaar = w10.jaar), 0), '', jaar|| '-' ||week FROM alli_v_10_week_history w10; -- Drukwerk per week CREATE OR REPLACE VIEW alli_v_graph_cat_drukwerk ( fclt_key, FCLT_XAS_, FCLT_YAS_HUISSTIJL, FCLT_YAS_VISITEKAARTJES, FCLT_YAS_VVE, FCLT_YAS_SSC, FCLT_YAS_OVERIG, FCLT_URL, VOLGORDE ) AS SELECT '', week, COALESCE( (SELECT aantal FROM alli_v_bes_catalogus_p_week c WHERE INS_DISCIPLINE_KEY = 341 AND c.week = w10.week AND c.jaar = w10.jaar), 0), COALESCE( (SELECT aantal FROM alli_v_bes_catalogus_p_week c WHERE INS_DISCIPLINE_KEY = 361 AND c.week = w10.week AND c.jaar = w10.jaar), 0), COALESCE( (SELECT SUM(aantal) FROM alli_v_bes_catalogus_p_week c WHERE INS_DISCIPLINE_KEY IN (442, 443, 444, 445) AND c.week = w10.week AND c.jaar = w10.jaar), 0), COALESCE( (SELECT SUM(aantal) FROM alli_v_bes_catalogus_p_week c WHERE INS_DISCIPLINE_KEY IN (446, 447) AND c.week = w10.week AND c.jaar = w10.jaar), 0), COALESCE( (SELECT SUM(aantal) FROM alli_v_bes_catalogus_p_week c WHERE INS_DISCIPLINE_KEY IN (448, 449, 463, 441) AND c.week = w10.week AND c.jaar = w10.jaar), 0), '', jaar|| '-' ||week FROM alli_v_10_week_history w10; -- ICT (hardware en CYOD) per week CREATE OR REPLACE VIEW alli_v_graph_cat_ict ( fclt_key, FCLT_XAS_, FCLT_YAS_HARDWARE, FCLT_YAS_INCIDENTEEL, FCLT_YAS_CYOD, FCLT_URL, VOLGORDE ) AS SELECT '', week, COALESCE( (SELECT aantal FROM alli_v_bes_catalogus_p_week c WHERE INS_DISCIPLINE_KEY = 401 AND c.week = w10.week AND c.jaar = w10.jaar), 0), COALESCE( (SELECT aantal FROM alli_v_bes_catalogus_p_week c WHERE INS_DISCIPLINE_KEY = 201 AND c.week = w10.week AND c.jaar = w10.jaar), 0), COALESCE( (SELECT aantal FROM alli_v_bes_catalogus_p_week c WHERE INS_DISCIPLINE_KEY = 221 AND c.week = w10.week AND c.jaar = w10.jaar), 0), '', jaar|| '-' ||week FROM alli_v_10_week_history w10; -- Alle nieuwe contracten die ingaan de komende 10 weken per week. CREATE OR REPLACE VIEW alli_v_cnt_nieuw_per_week (jaar, week, aantal) AS select to_char(c.cnt_contract_looptijd_van, 'IYYY'), to_char(c.cnt_contract_looptijd_van, 'IW'), count(c.cnt_contract_key) from cnt_contract c WHERE TRUNC(c.cnt_contract_looptijd_van) >= (TRUNC (SYSDATE) - DECODE (TO_CHAR (SYSDATE, 'D'), '1', 8, TO_CHAR (SYSDATE, 'D')) + 2) AND TRUNC(c.cnt_contract_looptijd_van) <= (TRUNC (SYSDATE) - DECODE (TO_CHAR (SYSDATE, 'D'), '1', 8, TO_CHAR (SYSDATE, 'D')) + 2) + 10*7 GROUP BY to_char(c.cnt_contract_looptijd_van, 'IYYY'), to_char(c.cnt_contract_looptijd_van, 'IW'); -- Alle aflopende contracten de komende 10 weken per week. CREATE OR REPLACE VIEW alli_v_cnt_aflopend_per_week (jaar, week, aantal) AS select to_char(c.cnt_contract_looptijd_tot, 'IYYY'), to_char(c.cnt_contract_looptijd_tot, 'IW'), count(c.cnt_contract_key) from cnt_contract c WHERE TRUNC(c.cnt_contract_looptijd_tot) >= (TRUNC (SYSDATE) - DECODE (TO_CHAR (SYSDATE, 'D'), '1', 8, TO_CHAR (SYSDATE, 'D')) + 2) AND TRUNC(c.cnt_contract_looptijd_tot) <= (TRUNC (SYSDATE) - DECODE (TO_CHAR (SYSDATE, 'D'), '1', 8, TO_CHAR (SYSDATE, 'D')) + 2) + 10*7 GROUP BY to_char(c.cnt_contract_looptijd_tot, 'IYYY'), to_char(c.cnt_contract_looptijd_tot, 'IW'); -- Grafiek van alle aflopende contracten voor de komende 10 weken CREATE OR REPLACE VIEW alli_v_graph_cnt_new_close ( fclt_key, FCLT_XAS_, FCLT_YAS_NIEUW, FCLT_YAS_AFLOPEND, FCLT_URL, VOLGORDE ) AS SELECT '', week, COALESCE( (SELECT aantal FROM alli_v_cnt_nieuw_per_week c WHERE c.week = w10.week AND c.jaar = w10.jaar), 0), COALESCE( (SELECT aantal FROM alli_v_cnt_aflopend_per_week c WHERE c.week = w10.week AND c.jaar = w10.jaar), 0), '', jaar|| '-' ||week FROM alli_v_10_week_future w10; CREATE OR REPLACE VIEW alli_v_visitekaartje (prs_perslid_key, voornaam, naam, functie, bedrijfsonderdeel, gebouwcode, adres, postcode, plaats, postadres, postpostcode, postplaats, telefoon1, telefoon2, mobiel1, mobiel2, email ) AS SELECT p.prs_perslid_key, p.prs_perslid_voornaam, DECODE (COALESCE (p.prs_perslid_tussenvoegsel, ''), '', '', p.prs_perslid_tussenvoegsel || ' ') || prs_perslid_naam naam, prs_srtperslid_omschrijving functie, ( SELECT fac_usrdata_omschr FROM prs_kenmerklink, fac_usrdata ud WHERE fac_usrtab_key=121 AND ud.fac_usrdata_key = fac.safe_to_number(prs_kenmerklink_waarde) AND prs_link_key = p.prs_perslid_key AND prs_kenmerklink_niveau = 'P' AND prs_kenmerk_key = 1060 AND prs_kenmerklink_verwijder IS NULL ) bedrijfsonderdeel, pgl.alg_gebouw_code, l.alg_locatie_adres adres, l.alg_locatie_postcode postcode, l.alg_locatie_plaats plaats, l.alg_locatie_post_adres postadres, l.alg_locatie_post_postcode postpostcode, l.alg_locatie_post_plaats postplaats, TRIM( DECODE (SUBSTR (p.prs_perslid_telefoonnr, 1, 1), '(', SUBSTR (p.prs_perslid_telefoonnr, 2, INSTR (p.prs_perslid_telefoonnr, ')') - 2), SUBSTR (p.prs_perslid_telefoonnr, 1, INSTR (p.prs_perslid_telefoonnr, '-') - 1) ) ) telefoon1, TRIM( DECODE (SUBSTR (p.prs_perslid_telefoonnr, 1, 1), '(', SUBSTR (p.prs_perslid_telefoonnr, INSTR (p.prs_perslid_telefoonnr, ')') + 1), SUBSTR (p.prs_perslid_telefoonnr, INSTR (p.prs_perslid_telefoonnr, '-') + 1) ) ) telefoon2, TRIM( DECODE (SUBSTR (p.prs_perslid_mobiel, 1, 1), '(', SUBSTR (p.prs_perslid_mobiel, 2, INSTR (p.prs_perslid_mobiel, ')') - 2), SUBSTR (p.prs_perslid_mobiel, 1, INSTR (p.prs_perslid_mobiel, '-') - 1) ) ) mobiel1, TRIM( DECODE (SUBSTR (p.prs_perslid_mobiel, 1, 1), '(', SUBSTR (p.prs_perslid_mobiel, INSTR (p.prs_perslid_mobiel, ')') + 1), SUBSTR (p.prs_perslid_mobiel, INSTR (p.prs_perslid_mobiel, '-') + 1) ) ) mobiel2, p.prs_perslid_email email FROM prs_perslid p, prs_srtperslid sp, alg_locatie l, (SELECT alg_locatie_key, g.alg_gebouw_key, g.alg_gebouw_code, prs_perslid_key FROM (SELECT prs_perslid_key, (SELECT MAX (alg_ruimte_key) FROM prs_v_perslidwerkplek_gegevens pwg WHERE pwg.prs_perslid_key = pb.prs_perslid_key AND pwg.prs_perslidwerkplek_bezetting = pb.prs_perslidwerkplek_bezetting) alg_ruimte_key FROM ( SELECT prs_perslid_key, MAX (prs_perslidwerkplek_bezetting) prs_perslidwerkplek_bezetting FROM prs_perslidwerkplek pw, prs_werkplek wp WHERE pw.prs_werkplek_key = wp.prs_werkplek_key AND wp.prs_werkplek_virtueel = 0 GROUP BY prs_perslid_key) pb) pr, alg_gebouw g, alg_verdieping v, alg_ruimte r WHERE pr.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) pgl WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key AND p.prs_perslid_key = pgl.prs_perslid_key(+) AND pgl.alg_locatie_key = l.alg_locatie_key(+); CREATE OR REPLACE VIEW alli_v_bestelling_maninfo (fclt_f_aanvraagnr, fclt_x_jaar, fclt_x_kwartaal, fclt_x_maand, besteldatum, fclt_3d_discipline_key, fclt_f_catalogus, fclt_f_leverancier, fclt_f_aanvrager, personeelsnr, fclt_f_afdeling, fclt_f_status, bestelbedrag, opdrachtbedrag ) AS SELECT TO_CHAR(b.bes_bestelling_key), TO_CHAR(MIN(bes_bestelling_datum), 'YYYY') jaar, 'Kwartaal ' || TO_CHAR(MIN(bes_bestelling_datum), 'Q') kwartaal, TO_CHAR(MIN(bes_bestelling_datum), 'MM') maand, TO_CHAR(MIN(bes_bestelling_datum), 'DD-MM-YYYY') datum, MIN(dis.ins_discipline_key), MIN(dis.ins_discipline_omschrijving) catalogus, MIN(bd.prs_bedrijf_naam) leverancier, MIN(p.prs_perslid_naam) || NVL2 (MIN(p.prs_perslid_voorletters), ', ' || MIN(p.prs_perslid_voorletters), '') || NVL2 (MIN(p.prs_perslid_tussenvoegsel), ' ' || MIN(p.prs_perslid_tussenvoegsel), '') || NVL2 (MIN(p.prs_perslid_voornaam), ' (' || MIN(p.prs_perslid_voornaam) || ')', '') aanvrager, MIN(P.PRS_PERSLID_NR), MIN(d.prs_afdeling_naam) organisation, MIN(BS.BES_BESTELLINGSTATUSES_OMSCHR), SUM(bi.bes_bestelling_item_aantal * COALESCE (bi.bes_bestelling_item_prijs, 0)) totaalbedrag, SUM(BO.BES_BESTELOPDR_ITEM_AANTAL * COALESCE (BO.BES_BESTELOPDR_ITEM_PRIJS , 0)) opdrachtbedrag FROM bes_bestelling_item bi, bes_bestelopdr_item bo, bes_srtdeel srt, prs_bedrijf bd, bes_bestelling b, bes_bestellingstatuses bs, prs_perslid p, prs_v_afdeling d, mld_adres m, prs_v_afdeling_boom boom, bes_srtgroep grp, ins_tab_discipline dis, alg_locatie l, alg_district di WHERE srt.bes_srtgroep_key = grp.bes_srtgroep_key AND grp.ins_discipline_key = dis.ins_discipline_key AND bi.bes_srtdeel_key = srt.bes_srtdeel_key AND srt.prs_bedrijf_key = bd.prs_bedrijf_key AND BO.BES_BESTELOPDR_ITEM_KEY (+) = BI.BES_BESTELOPDR_ITEM_KEY AND bi.bes_bestelling_key = b.bes_bestelling_key AND B.BES_BESTELLING_STATUS = BS.BES_BESTELLINGSTATUSES_KEY AND p.prs_perslid_key = b.prs_perslid_key AND p.prs_afdeling_key = d.prs_afdeling_key AND d.prs_afdeling_key = boom.prs_afdeling_key AND b.mld_adres_key_lev = m.mld_adres_key AND m.alg_locatie_key = l.alg_locatie_key(+) AND l.alg_district_key = di.alg_district_key(+) GROUP BY b.bes_bestelling_key, bd.prs_bedrijf_key; -- Voor genereren van QR-codes voor meldingen op objecten CREATE OR REPLACE VIEW alli_v_rap_qrc_ins ( 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, fclt_f_bookmark, 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_omschrijving, b.fac_bookmark_naam, i.ins_alg_ruimte_type, l.alg_district_key, ins_deel_omschrijving, i.ins_alg_ruimte_key, b.fac_bookmark_id FROM ins_deel i, ins_v_alg_overzicht o, ins_srtdeel s, ins_srtgroep g, alg_locatie l, alg_district di, fac_bookmark b, mld_stdmelding sm, mld_stdmelding_srtinst si WHERE b.fac_bookmark_path = 'appl/pda/melding.asp' AND b.fac_bookmark_query LIKE '%stdm_key='||sm.mld_stdmelding_key||'%' 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 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 sm.mld_stdmelding_key = si.mld_stdmelding_key AND si.ins_srtinstallatie_key = DECODE(si.ins_srtinstallatie_niveau, 'S', i.ins_srtdeel_key, 'G', s.ins_srtgroep_key, 'D', g.ins_discipline_key); -- Voor genereren van QR-codes voor RES-ruimtes CREATE OR REPLACE VIEW alli_v_rap_qrc_res_ruimte ( fclt_3d_discipline_key, fclt_3d_locatie_key, fclt_f_locatie, fclt_f_gebouw, fclt_f_ruimtenaam, res_ruimte_key, hide_f_bookmark_id ) AS SELECT DISTINCT rg.res_discipline_key, l.alg_locatie_key, l.alg_locatie_omschrijving, g.alg_gebouw_naam, rg.res_ruimte_nr, rg.res_ruimte_key, b.fac_bookmark_id FROM res_v_res_ruimte_gegevens rg, alg_locatie l, alg_gebouw g, fac_bookmark b WHERE b.fac_bookmark_id = 'BhIEFEoAItbkuYJL' AND g.alg_gebouw_key = rg.alg_gebouw_key AND l.alg_locatie_key = rg.alg_locatie_key; -- rapport met ICT objecten (key 321) gekoppeld aan de bij behorende bestellingen (key 221 -- groep_key 1623 = Telefoons -- srtdeel_key 9202 = notebooks, srtdeel_key 9201 = telefonie CREATE OR REPLACE VIEW alli_v_rap_ict_insbes ( ins_deel_key, ins_gekoppeld_aan, ins_eigenaar, ins_naam, ins_email, ins_afdeling, ins_identificatie, ins_beschrijving, ins_aanmaakdatum, ins_objectsoort, ins_groep, artikel_groep, artikel, merk, type, specificatie, artikelnummer, bes_aantal, bes_item_prijs, bes_totaal, bestelling, ins_artikelnummer, ins_serienummer, ins_aanschafdatum, ins_aanschafdatum_exp, ins_imei ) AS SELECT d.ins_deel_key, DECODE (ins_alg_ruimte_type, 'P', 'Persoon', 'A', 'Afdeling', 'C', 'Contactpersoon', 'R', 'Ruimte', 'W', 'Werkplek', 'T', 'Terrein', '??') gekoppeld_aan, COALESCE (pf.prs_perslid_naam_full, a.prs_afdeling_omschrijving, '??') eigenaar, pf.prs_perslid_naam_full naam, pf.prs_perslid_email, a.prs_afdeling_omschrijving || ' (' || a.prs_afdeling_naam || ')' afdeling, ins_deel_omschrijving, ins_deel_opmerking beschrijving, ins_deel_aanmaak, ins_srtdeel_omschrijving, ins_srtgroep_omschrijving, cyod.bes_srtgroep_omschrijving, cyod.bes_srtdeel_omschrijving, REGEXP_SUBSTR (cyod.bes_srtdeel_omschrijving, '[^**]+', 1, 1) merk, REGEXP_SUBSTR (cyod.bes_srtdeel_omschrijving, '[^**]+', 1, 2) TYPE, REGEXP_SUBSTR (cyod.bes_srtdeel_omschrijving, '[^**]+', 1, 3) specificatie, cyod.bes_srtdeel_nr, cyod.aantal, cyod.item_prijs, cyod.totaal, insbes.ins_kenmerkdeel_waarde bestelling, (SELECT ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd, ins_kenmerk k WHERE ins_deel_key = d.ins_deel_key AND ikd.ins_kenmerk_key = k.ins_kenmerk_key AND k.ins_srtkenmerk_key = 2) artikelnr, (SELECT ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd, ins_kenmerk k WHERE ins_deel_key = d.ins_deel_key AND ikd.ins_kenmerk_key = k.ins_kenmerk_key AND k.ins_srtkenmerk_key = 3) serienummer, (SELECT fac.safe_to_date (ins_kenmerkdeel_waarde, 'dd-mm-yyyy') FROM ins_kenmerkdeel ikd, ins_kenmerk k WHERE ins_deel_key = d.ins_deel_key AND ikd.ins_kenmerk_key = k.ins_kenmerk_key AND k.ins_srtkenmerk_key = 5) aanschafdatum, (SELECT to_char(fac.safe_to_date (ins_kenmerkdeel_waarde, 'dd-mm-yyyy'), 'YYYYMMDD') FROM ins_kenmerkdeel ikd, ins_kenmerk k WHERE ins_deel_key = d.ins_deel_key AND ikd.ins_kenmerk_key = k.ins_kenmerk_key AND k.ins_srtkenmerk_key = 5) aanschafdatum_exp, (SELECT ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd, ins_kenmerk k WHERE ins_deel_key = d.ins_deel_key AND ikd.ins_kenmerk_key = k.ins_kenmerk_key AND k.ins_srtkenmerk_key = 4) imei FROM ins_v_aanwezigdeel d, ins_v_deel_gegevens_keys idg, (SELECT pf1.prs_perslid_key, pf1.prs_perslid_naam_full, p.prs_perslid_email FROM prs_v_perslid_fullnames_all pf1, prs_perslid p WHERE p.prs_perslid_key = pf1.prs_perslid_key) pf, prs_afdeling a, ins_srtdeel sd, ins_srtgroep sg, (SELECT ikd.ins_deel_key, ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd, ins_kenmerk k WHERE ikd.ins_kenmerk_key = k.ins_kenmerk_key AND k.ins_srtkenmerk_key = 1) insbes, (SELECT b.bes_bestelling_key, dis.ins_discipline_omschrijving ins_discipline_omschrijving, grp.bes_srtgroep_key bes_srtgroep_key, grp.bes_srtgroep_omschrijving bes_srtgroep_omschrijving, srt.bes_srtdeel_nr bes_srtdeel_nr, srt.bes_srtdeel_omschrijving bes_srtdeel_omschrijving, bi.bes_bestelling_item_aantal aantal, COALESCE (bi.bes_bestelling_item_prijs, 0) item_prijs, bi.bes_bestelling_item_aantal * COALESCE (bi.bes_bestelling_item_prijs, 0) totaal FROM bes_bestelling_item bi, bes_srtdeel srt, bes_bestelling b, bes_srtgroep grp, ins_tab_discipline dis WHERE bi.bes_srtdeel_key = srt.bes_srtdeel_key AND srt.bes_srtgroep_key = grp.bes_srtgroep_key AND grp.ins_discipline_key = dis.ins_discipline_key AND bi.bes_bestelling_key = b.bes_bestelling_key AND NOT EXISTS (SELECT b1.bes_bestelling_key FROM bes_bestelling b1 WHERE bes_bestelling_parentkey = b.bes_bestelling_key) AND b.bes_bestelling_key IN (SELECT bes_bestelling_key FROM bes_bestelling_item bbi, bes_srtdeel bd, bes_srtgroep bsg WHERE bbi.bes_srtdeel_key = bd.bes_srtdeel_key AND bd.bes_srtgroep_key = bsg.bes_srtgroep_key AND bsg.ins_discipline_key = 221)) cyod WHERE d.ins_srtdeel_key = sd.ins_srtdeel_key AND d.ins_deel_key = idg.ins_deel_key AND sd.ins_srtgroep_key = sg.ins_srtgroep_key AND sg.ins_discipline_key = 321 AND pf.prs_perslid_key(+) = idg.prs_perslid_key AND a.prs_afdeling_key(+) = idg.prs_afdeling_key AND insbes.ins_deel_key = d.ins_deel_key AND TO_CHAR (cyod.bes_bestelling_key) = insbes.ins_kenmerkdeel_waarde(+) AND ( (bes_srtgroep_key != 1623 AND d.ins_srtdeel_key = 9202) OR (bes_srtgroep_key = 1623 AND d.ins_srtdeel_key = 9201)); /* Formatted on 17/6/2022 23:57:31 (QP5 v5.371) */ CREATE OR REPLACE PROCEDURE alli_processemail (pfrom IN VARCHAR2, pto IN VARCHAR2, psubject IN VARCHAR2, pbody IN VARCHAR2, psessionid IN VARCHAR2, pemailkey IN NUMBER) AS v_sender prs_perslid.prs_perslid_key%TYPE; v_kostenplaats prs_afdeling.prs_kostenplaats_key%TYPE; v_mldstat mld_melding.mld_melding_status%TYPE; v_stdmelding mld_stdmelding.mld_stdmelding_key%TYPE; v_errormsg fac_result.fac_result_waarde%TYPE; v_from VARCHAR2 (4000); v_body VARCHAR2 (4000); m_body VARCHAR2 (4000); v_actie VARCHAR2 (4000); v_mldkey mld_melding.mld_melding_key%TYPE; v_mailorigin mld_kenmerk.mld_kenmerk_key%TYPE; v_attachorigin mld_kenmerk.mld_kenmerk_key%TYPE; BEGIN v_sender := 4; --Standaard de persoon Facilitor v_errormsg := '(0x143)'; v_mailorigin := 462; --Kenmerk_key originele mail-bijlage v_attachorigin := 461; --Kenmerk_key bijlage uit email -- Verwijder de Bounce Address Tag Validation IF pfrom LIKE 'prvs=%' THEN v_from := SUBSTR (pfrom, INSTR (pfrom, '=', -1) + 1); ELSE v_from := pfrom; END IF; v_body := pbody; m_body := pbody; -- DBMS_OUTPUT.PUT_LINE('v_from: '||v_from); -- Valideer de sender in pfrom: kennen we deze? SELECT MIN (p.prs_perslid_key), MIN (d.prs_kostenplaats_key) INTO v_sender, v_kostenplaats FROM prs_perslid p, prs_afdeling d WHERE p.prs_afdeling_key = d.prs_afdeling_key AND p.prs_perslid_verwijder IS NULL AND UPPER (prs_perslid_email) = UPPER (v_from); CASE WHEN UPPER (pto) LIKE 'FACILITAIR@%' THEN BEGIN v_errormsg := '(0x245)' || v_mldkey || psubject || v_actie; v_stdmelding := fac.safe_to_number (fac.getsetting ('defaultstdmelding')); v_mldstat := 2; -- Standaard de status in Nieuw (2). -- pas de omschrijving van de melding aan. Verwijder onnodige html ballast. v_body := REPLACE (v_body, ' ', ' '); -- spatie v_body := REPLACE (v_body, '!', '!'); v_body := REPLACE (v_body, '"', CHR (34)); -- double quote v_body := REPLACE (v_body, '#', '#'); v_body := REPLACE (v_body, '$', '$'); v_body := REPLACE (v_body, '%', '%'); v_body := REPLACE (v_body, '&', '&'); v_body := REPLACE (v_body, ''', CHR (39)); -- single quote v_body := REPLACE (v_body, '(', '('); v_body := REPLACE (v_body, ')', ')'); v_body := REPLACE (v_body, '*', '*'); v_body := REPLACE (v_body, '+', '+'); v_body := REPLACE (v_body, ',', ','); -- komma v_body := REPLACE (v_body, '-', '-'); -- min teken v_body := REPLACE (v_body, '.', '.'); -- punt v_body := REPLACE (v_body, '/', '/'); v_body := REPLACE (v_body, ':', ':'); -- dubbele punt v_body := REPLACE (v_body, ';', ';'); -- punt komma v_body := REPLACE (v_body, '<', '<'); v_body := REPLACE (v_body, '=', '='); v_body := REPLACE (v_body, '>', '>'); v_body := REPLACE (v_body, '?', '?'); v_body := REPLACE (v_body, '@', '@'); v_body := REPLACE (v_body, ' ' || CHR (10) || CHR (13), CHR (10) || CHR (13)); -- soms komt er ineens een een spatie achter de tag. EXCEPTION WHEN OTHERS THEN fac.writelog ( 'PROCESSEMAIL', 'W', 'Mail kon niet geformateerd worden afzender:' || pfrom || '[' || v_errormsg || ']', 'OTHERS (error ' || SQLCODE || '/' || SUBSTR (SQLERRM, 1, 100) || ')'); END; --Hieronder de acties die gedaan moeten worden. BEGIN v_stdmelding := fac.safe_to_number (fac.getsetting ('defaultstdmelding')); INSERT INTO mld_melding (mld_melding_module, mld_meldbron_key, mld_melding_datum, mld_melding_omschrijving, mld_melding_status, mld_melding_t_uitvoertijd, mld_stdmelding_key, mld_alg_locatie_key, mld_melding_externnr, prs_perslid_key, prs_perslid_key_voor, prs_kostenplaats_key, mld_melding_spoed) VALUES ( 'MLD', 4, -- email SYSDATE, SUBSTR ( psubject || CHR (13) || REPLACE ( SUBSTR ( v_body, 1, 4000 - (LENGTH (psubject) + 1)), CHR (13) || CHR (10) || CHR (13) || CHR (10), CHR (13) || CHR (10)), 1, 4000), -- verwijder onnodige witregels NULL, MLD_T_UITVOERTIJD (5, 'D'), v_stdmelding, 121, -- Locatie onbekend. NULL, v_sender, v_sender, v_kostenplaats, 3) RETURNING mld_melding_key INTO v_mldkey; -- DBMS_OUTPUT.PUT_LINE('Melding toegevoegd: ' || v_mldkey); v_errormsg := '(0x165)'; mld.setmeldingstatus (v_mldkey, 2, v_sender); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || v_mldkey); END; IF v_mldkey IS NOT NULL THEN BEGIN -- Bijlagen toevoegen uit email v_errormsg := '(0x601)' || v_mldkey || psubject || v_actie; 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 || '\' || v_attachorigin || '\'); -- Originele email wordt opgeslagen bij de opdracht v_errormsg := '(0x602`)' || v_mldkey || psubject || v_actie; 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 || '\' || v_mailorigin || '\'); END; END IF; ELSE v_errormsg := '(0x900)' || v_mldkey || psubject || v_actie || ' - geen pto herkend'; INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', v_errormsg); END CASE; EXCEPTION WHEN OTHERS THEN INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', v_errormsg); fac.writelog ( 'PROCESSEMAIL', 'E', 'Mail kon niet ingelezen worden afzender:' || pfrom || '[' || v_errormsg || v_mldkey || psubject || v_actie || ']', 'OTHERS (error ' || SQLCODE || '/' || SUBSTR (SQLERRM, 1, 100) || ')'); END; / ------ payload end ------ SET DEFINE OFF BEGIN adm.systrackscriptId ('$Id$', 0); END; / COMMIT; SET ECHO OFF SPOOL OFF SET DEFINE ON PROMPT Logfile of this upgrade is: &fcltlogfile