-- -- $Id$ -- -- Script containing customer specific sql statements for the LOGI database DEFINE thisfile = 'LOGI.SQL' DEFINE dbuser = '^LOGI' DEFINE custid = 'LOGI' 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 PROCEDURE logi_import_persoon (p_import_key IN NUMBER) AS c_max_import_str_len NUMBER (10) := 1000; CURSOR c_cursor IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; NEXT_RECORD c_cursor%ROWTYPE; v_newline VARCHAR2 (1000); -- Import line v_fielddelimitor VARCHAR2 (1); -- Field seperator v_errormsg VARCHAR2 (1000) := '-'; v_errorhint VARCHAR2 (1000) := '-'; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); -- De importvelden v_perslid_nr VARCHAR2 (1000); v_perslid_naam VARCHAR2 (1000); v_perslid_voornaam VARCHAR2 (1000); v_perslid_tussenvoegsel VARCHAR2 (1000); v_perslid_oslogin VARCHAR2 (1000); v_perslid_email VARCHAR2 (1000); v_dummy VARCHAR2 (1000); v_afdeling_naam VARCHAR2 (1000); v_locatie_omschrijving VARCHAR2 (1000); header_found BOOLEAN; v_controle_res VARCHAR2 (30); -- SUBFUNCTION FUNCTION get_imp_value (p_value IN VARCHAR2, p_length IN NUMBER) RETURN VARCHAR2 IS c_del_in_str VARCHAR2 (16) := 'NULL'; c_del_in_str2 VARCHAR2 (16) := '"'; v_value VARCHAR2 (1000); BEGIN SELECT SUBSTR ( TRIM(COALESCE ( REPLACE (REPLACE (p_value, c_del_in_str), c_del_in_str2, ''), '')), 1, p_length) INTO v_value FROM DUAL; RETURN v_value; EXCEPTION WHEN OTHERS THEN RETURN p_value; END; BEGIN -- Init v_fielddelimitor := ';'; v_errormsg := ''; header_found := FALSE; v_controle_res := 'OK'; -- Hier kan een controle ingebouwd worden ... IF (v_controle_res IS NULL) THEN v_errormsg := 'Ongeldig importbestand'; fac.imp_writelog (p_import_key, 'E', v_errormsg, ''); ELSE -- Clear my previous imported rows DELETE FROM logi_imp_persoon; COMMIT; FOR NEXT_RECORD IN c_cursor LOOP BEGIN v_newline := SUBSTR (NEXT_RECORD.FAC_IMP_FILE_LINE, 1, c_max_import_str_len); fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_nr); fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_naam); fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_voornaam); fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_tussenvoegsel); fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_oslogin); fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_email); fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); fac.imp_getfield (v_newline, v_fielddelimitor, v_afdeling_naam); fac.imp_getfield (v_newline, v_fielddelimitor, v_locatie_omschrijving); -- Skip until the header is found header_found := TRUE; -- Geen Header check IF (header_found) THEN BEGIN v_errormsg := 'Kan persoonsgegevens niet inlezen '; v_perslid_nr := get_imp_value (v_perslid_nr, 16); v_perslid_naam := get_imp_value (v_perslid_naam, 30); v_perslid_voornaam := get_imp_value (v_perslid_voornaam, 30); v_perslid_tussenvoegsel := get_imp_value (v_perslid_tussenvoegsel, 15); v_perslid_oslogin := get_imp_value (v_perslid_oslogin, 30); v_perslid_email := get_imp_value (v_perslid_email, 200); v_afdeling_naam := get_imp_value (v_afdeling_naam, 10); v_locatie_omschrijving := get_imp_value (v_locatie_omschrijving, 30); -- Velden met een waarde '' zijn leeg ivm privacy overwegingen INSERT INTO logi_imp_persoon (prs_perslid_nr, prs_perslid_naam, prs_perslid_voornaam, prs_perslid_tussenvoegsel, prs_perslid_voorletters, prs_perslid_telefoonnr, prs_perslid_mobiel, prs_perslid_oslogin, prs_perslid_email, prs_srtperslid_omschrijving, prs_afdeling_naam, prs_perslid_ingangsdatum, prs_perslid_einddatum, prs_locatie_omschrijving, alg_ruimte_nr, logi_imp_persoon_aanmaak) VALUES (v_perslid_nr, v_perslid_naam, v_perslid_voornaam, v_perslid_tussenvoegsel, '', '', '', v_perslid_oslogin, v_perslid_email, '', '', -- LOGI#31662, was: v_afdeling_naam, '', '', v_locatie_omschrijving, '', SYSDATE); COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := v_errormsg || 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, 'personeelsnummer:' || v_perslid_nr); COMMIT; END; END IF; COMMIT; END; END LOOP; END IF; 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_errormsg, ''); END; / CREATE OR REPLACE PROCEDURE logi_update_persoon (p_import_key IN NUMBER) AS -- Constanten (LET OP: deze waarden moeten letterlijk in de DB aabwezig zijn!) c_usrtab_key INTEGER := 1; -- Tbv LOCATIE c_srtgebouw_default INTEGER := 1; c_srtruimte_default INTEGER := 1; c_afdeling_key NUMBER := 6761; -- LOGI#31662 -- Constanten (overig) c_prs_werkplek_omschrijving VARCHAR2 (16) := 'Onbekend'; c_srtperslid_omschr_default VARCHAR2 (16) := 'Onbekend'; c_werkplek_volgnr_default INTEGER := 1; c_verdieping_omschr_default VARCHAR2 (16) := 'BG'; c_ruimte_omschr_default VARCHAR2 (16) := 'Onbekend'; c_ruimte_code VARCHAR2 (3) := '000'; c_commitbuffer NUMBER := 1000; c_perslid_aanmaak DATE; -- := TO_DATE('01011980','ddmmyy'); -- ivm privacy overwegingen c_perslid_verwijder DATE; -- := TO_DATE('01011980','ddmmyy'); -- ivm privacy overwegingen c_perslid_ingangsdatum DATE; -- := TO_DATE('01011980','ddmmyy'); -- ivm privacy overwegingen c_no_key_found NUMBER := 0; --c_afdeling_niveau_persoon NUMBER(1) := 3; -- Afdelingsniveau waaraan personen gekoppeld worden -- Prefix voor persoonnaam om aan te geven dat de persoon op de nominatie staat om verwijderd te -- worden maar dat verwijderen nog niet mogelijk is omdat de persoon verplichtingen heeft. c_inactief VARCHAR2(16) := 'INACTIEF:'; -- om de zoveel committen v_buffercount NUMBER := 0; CURSOR c_prs_del IS SELECT p.prs_perslid_key, p.prs_perslid_nr FROM PRS_PERSLID p, (select prs_perslid_nr from logi_imp_persoon where prs_perslid_nr is not null) lp WHERE 1=1 AND p.prs_perslid_nr IS NOT NULL AND p.prs_perslid_verwijder IS NULL AND p.prs_perslid_nr = lp.prs_perslid_nr(+) AND lp.prs_perslid_nr is null ORDER BY 2, 1; CURSOR c_prs_upd IS SELECT p.prs_perslid_key , lp.prs_locatie_omschrijving --, lp.prs_afdeling_naam , lp.prs_perslid_naam , lp.prs_perslid_tussenvoegsel , lp.prs_perslid_voorletters , lp.prs_perslid_voornaam , lp.prs_perslid_telefoonnr , lp.prs_perslid_mobiel , lp.prs_perslid_oslogin , lp.prs_perslid_email , coalesce(lp.prs_srtperslid_omschrijving, c_srtperslid_omschr_default) prs_srtperslid_omschrijving , lp.prs_perslid_nr , '' prs_perslid_titel , p.prs_perslid_verwijder FROM logi_imp_persoon lp, prs_perslid p WHERE 1=1 AND lp.prs_perslid_nr = p.prs_perslid_nr(+) -- Dit moet analoog aan UWVA#13061: verwijderde personen moeten kunnen worden gereactiveerd. -- AND p.prs_perslid_verwijder IS NULL ORDER BY lp.prs_perslid_nr, p.prs_perslid_key DESC; v_perslid_key NUMBER (10); v_prs_key_cnt NUMBER (10); v_srtperslid_key NUMBER (10); --v_afdeling_key NUMBER (10); v_locatie_key NUMBER (10); v_gebouw_key NUMBER (10); v_verdieping_key NUMBER (10); v_ruimte_key NUMBER (10); v_werkplek_key NUMBER (10); v_gebouw_code VARCHAR2 (10); v_srtperslid_omschr VARCHAR (30); rec_prs_del c_prs_del%ROWTYPE; rec_prs_upd c_prs_upd%ROWTYPE; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_errormsg VARCHAR2 (1024); v_errorhint VARCHAR2 (1024); v_debug VARCHAR2 (1024); v_count NUMBER (10); v_update BOOLEAN; v_aktie VARCHAR (10); v_perslid_count_imp NUMBER; v_perslid_count_fclt NUMBER; v_perslid_newcount_fclt NUMBER; currentversion fac_module.fac_module_version%TYPE; l_validatie NUMBER; v_srtimport VARCHAR2 (10); l_nrkps NUMBER; v_nr_werkplek NUMBER; v_current_locatie_key NUMBER; v_new_locatie_key NUMBER; BEGIN -- Constanten: select TO_DATE('01011980','ddmmyy'),TO_DATE('01011980','ddmmyy'),TO_DATE('01011980','ddmmyy') into c_perslid_aanmaak, c_perslid_verwijder, c_perslid_ingangsdatum from dual; -- verwijder werkplekrelaties met een verwijderdatum. Anders krijgen we straks last van een contraint op perslidwerkplek. --delete prs_perslidwerkplek where prs_perslidwerkplek_verwijder is not null; -- Delete v_errorhint := 'Eventueel te verwijderen personen worden verwijderd '; FOR rec_prs_del IN c_prs_del LOOP BEGIN prs.delete_perslid (p_import_key, rec_prs_del.prs_perslid_key); END; END LOOP; /* oude del procedure vervangen door aanroep standaard FOR rec_prs_del IN c_prs_del LOOP BEGIN v_perslid_key := rec_prs_del.prs_perslid_key; v_errorhint := 'Verwijderen van de persoon is NIET gelukt'; SELECT COUNT (*) INTO v_count FROM prs_v_verplichting_refcheck pv WHERE pv.prs_perslid_key = v_perslid_key; IF v_count = 0 THEN -- Persoon heeft geen enkele (actuele of historische) verplichting v_errormsg := 'Kan persoon (kennelijk zonder historie!) niet met prs_perslid_key [' || TO_CHAR (v_perslid_key) || '] niet verwijder. '; DELETE FROM prs_perslid WHERE prs_perslid_key = v_perslid_key; fac.imp_writelog (p_import_key, 'I', 'Persoon verwijderd met personeelsnummer ['||rec_prs_del.prs_perslid_nr||']', '' ); commit; -- tbv logging ELSE -- Controleer of er ACTUELE verplichtingen zijn SELECT COUNT (*) INTO v_count FROM prs_v_verplichting_keys pv WHERE pv.prs_perslid_key = v_perslid_key; IF v_count > 0 THEN v_errormsg := 'Kan persoon (kennelijk met historie!) niet inactiveren met prs_perslid_key [' || TO_CHAR (v_perslid_key) || ']'; UPDATE prs_perslid SET prs_perslid_naam = SUBSTR (c_inactief || prs_perslid_naam, 1, 30), prs_perslid_oslogin = NULL WHERE prs_perslid_key = v_perslid_key AND prs_perslid_naam NOT LIKE c_inactief||'%'; fac.imp_writelog (p_import_key, 'I', 'Persoon als ['||c_inactief||'] gemarkeerd met personeelsnummer ['||rec_prs_del.prs_perslid_nr||']', '' ); ELSE BEGIN v_errormsg := 'Kan persoon (kennelijk met historie!) niet inactiveren (verwijderdatum zetten) met prs_perslid_key [' || TO_CHAR (v_perslid_key) || ']'; UPDATE prs_perslid SET prs_perslid_verwijder = c_perslid_verwijder WHERE prs_perslid_key = v_perslid_key; fac.imp_writelog (p_import_key, 'I', 'Persoon verwijderd met personeelsnummer ['||rec_prs_del.prs_perslid_nr||']', '' ); EXCEPTION WHEN OTHERS THEN -- Kennelijk heeft de persoon toch ernstige verplichtingen v_errorhint := 'Persoon heeft nog (max. ' || TO_CHAR (v_count) || ') verplichtingen; personeelsnummer: ' || rec_prs_del.prs_perslid_nr; fac.imp_writelog (p_import_key, 'I', 'Inactiveren persoon is niet gelukt', v_errorhint); END; END IF; END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := v_errormsg||'(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint); END; END LOOP; */ COMMIT; -- Update v_errormsg := 'Persoonsgegevens worden nu angepast (toevoegen/wijzigen) '; FOR rec_prs_upd IN c_prs_upd LOOP BEGIN -- Init v_update := TRUE; -- Nog geen fouten gevonden --v_afdeling_key := c_no_key_found; v_srtperslid_key := c_no_key_found; v_perslid_key := c_no_key_found; v_errormsg := ''; IF rec_prs_upd.prs_perslid_key IS NULL THEN v_aktie := 'INSERT'; v_errorhint := 'Persoonsgegevens kunnen niet toegevoegd worden'; ELSE v_aktie := 'UPDATE'; v_errorhint := 'Persoonsgegevens kunnen niet gewijzigd worden'; END IF; -- *** Controle verplichte gegevens + ophalen extra informatie *** -- Controle: PRS_PERSLID_NR IF rec_prs_upd.prs_perslid_nr IS NULL THEN v_errormsg := 'Persoon met achternaam ['||rec_prs_upd.prs_perslid_naam||' heeft geen personeelsnummer '; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint); commit; -- logging v_update := FALSE; END IF; -- Controle: PRS_PERSLID_NAAM IF v_update AND rec_prs_upd.prs_perslid_naam IS NULL THEN v_errormsg := 'Persoon met personeelsnummer [' || rec_prs_upd.prs_perslid_nr||'] heeft geen achternaam'; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint); v_update := FALSE; END IF; -- Controle: Kan persoon gereactieveerd worden of is er al een persoon met dezelfde prs_perslid_nr actief IF v_update AND rec_prs_upd.prs_perslid_verwijder IS NOT NULL THEN BEGIN -- Is er al een actieve persoon met dezelfde perslid_nr SELECT COUNT(p.prs_perslid_key) INTO v_prs_key_cnt FROM prs_perslid p WHERE p.prs_perslid_verwijder IS NULL AND p.prs_perslid_nr LIKE rec_prs_upd.prs_perslid_nr AND p.prs_perslid_key != rec_prs_upd.prs_perslid_key; IF v_prs_key_cnt > 0 THEN -- (UWVA#13270) -- Waarde(n) gevonden: Er is al een actieve persoon met dezelfde prs_perslid_nr gevonden: Niet updaten!!! --v_errormsg := 'Persoon hoeft niet gereactiveerd te worden; prs_perslid_nr: ' || rec_prs_upd.prs_perslid_nr; --v_errorhint := 'Er bestaat al een persoon met dezelfde persooneelsnummer die actief is, GEEN ACTIE NODIG; personeelsnummer: ' || rec_prs_upd.prs_perslid_nr; --fac.imp_writelog (p_import_key, 'I', v_errormsg, v_errorhint); v_update := FALSE; ELSE -- Kennelijk is er geen persoon gevonden met dezelfde prs_perslid_nr -- persoon kan gereactieveerd worden (prs_perslid_verwijder op NULL zetten) -- v_update := TRUE; v_errormsg := 'Persoon reactiveren; prs_perslid_nr: ' || rec_prs_upd.prs_perslid_nr; v_errorhint := 'ACTIE wordt ondernomen; personeelsnummer: ' || rec_prs_upd.prs_perslid_nr; fac.imp_writelog (p_import_key, 'I', v_errormsg, v_errorhint); END IF; EXCEPTION WHEN OTHERS THEN v_update := FALSE; v_errorhint := 'Fout in het vinden aantal actieve personen; personeelsnummer: ' || rec_prs_upd.prs_perslid_nr || '?!'; END; END IF; /* -- Controle: PRS_AFDELING_NAAM IF v_update THEN BEGIN v_errormsg := 'De afdeling ['||rec_prs_upd.prs_afdeling_naam||']'||' kan niet éénduidig bepaald worden '; -- Bepaal de afdelingskey; afdelingen worden met een andere import beheerd -- RD**** MAX ivm testen! SELECT max(prs_afdeling_key) INTO v_afdeling_key FROM prs_v_afdeling_fullnames WHERE upper(prs_afdeling_naam3) = upper(rec_prs_upd.prs_afdeling_naam) AND niveau = c_afdeling_niveau_persoon; EXCEPTION WHEN NO_DATA_FOUND THEN v_update := FALSE; v_errorhint := 'Afdeling ' || rec_prs_upd.prs_afdeling_naam || ' bestaat niet; personeelsnummer: ' || rec_prs_upd.prs_perslid_nr; -- Kennelijk is de afdeling niet gevonden IF (v_aktie = 'INSERT') THEN fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint); ELSE fac.imp_writelog (p_import_key, 'E', 'Afdeling van de persoon kan niet gewijzigd worden, evt. andere wijzigingen worden ook genegeerd.', v_errorhint ); END IF; WHEN OTHERS THEN v_update := FALSE; v_errorhint := 'Kan Afdeling ' || rec_prs_upd.prs_afdeling_naam || ' niet eenduidig bepalen?!'; END; END IF; */ -- Controle: PRS_SRTPERSLID_OMSCHRIJVING IF v_update THEN v_srtperslid_omschr := RTRIM (INITCAP (rec_prs_upd.prs_srtperslid_omschrijving)); BEGIN -- Bepaal de key van de functie SELECT prs_srtperslid_key INTO v_srtperslid_key FROM prs_srtperslid WHERE prs_srtperslid_upper = UPPER (v_srtperslid_omschr) AND prs_srtperslid_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN v_errormsg := 'prs_srtperslid ' || v_srtperslid_omschr || ' bestaat niet'; -- Functie bestaat kennelijk niet, maak 'm maar aan INSERT INTO prs_srtperslid (prs_srtperslid_omschrijving ) VALUES (v_srtperslid_omschr ); -- Wat is de key van deze nieuwe geworden? SELECT prs_srtperslid_key INTO v_srtperslid_key FROM prs_srtperslid WHERE prs_srtperslid_omschrijving = v_srtperslid_omschr AND prs_srtperslid_verwijder IS NULL; WHEN OTHERS THEN v_errorhint := 'Functie ' || v_srtperslid_omschr || ' kan niet bepaald worden; persoonnr: ' || rec_prs_upd.prs_perslid_nr; v_update := FALSE; END; END IF; -- *** Daadwerkelijk insert/update prs_perslid *** IF v_update THEN BEGIN IF v_aktie = 'INSERT' THEN v_errormsg := 'Persoon kan niet worden toegevoegd'; INSERT INTO prs_perslid (prs_perslid_naam, prs_perslid_tussenvoegsel, prs_perslid_module, prs_perslid_voorletters, prs_perslid_voornaam, prs_perslid_telefoonnr, prs_perslid_mobiel, prs_perslid_oslogin, prs_perslid_email, prs_perslid_nr, prs_perslid_titel, prs_srtperslid_key, prs_afdeling_key, prs_perslid_aanmaak ) VALUES (rec_prs_upd.prs_perslid_naam, rec_prs_upd.prs_perslid_tussenvoegsel, 'PRS', rec_prs_upd.prs_perslid_voorletters, rec_prs_upd.prs_perslid_voornaam, rec_prs_upd.prs_perslid_telefoonnr, rec_prs_upd.prs_perslid_mobiel, rec_prs_upd.prs_perslid_oslogin, rec_prs_upd.prs_perslid_email, rec_prs_upd.prs_perslid_nr, rec_prs_upd.prs_perslid_titel, v_srtperslid_key, c_afdeling_key, c_perslid_aanmaak ); fac.imp_writelog (p_import_key, 'C', 'Nieuw persoon toegevoegd', 'Naam/persoonsnr: ' || rec_prs_upd.prs_perslid_naam || '/' || rec_prs_upd.prs_perslid_nr ); commit; ELSE v_errormsg := 'Persoon kan niet worden gewijzigd'; UPDATE prs_perslid SET prs_perslid_naam = rec_prs_upd.prs_perslid_naam, prs_perslid_tussenvoegsel = rec_prs_upd.prs_perslid_tussenvoegsel, prs_perslid_voorletters = rec_prs_upd.prs_perslid_voorletters, prs_perslid_voornaam = NVL (rec_prs_upd.prs_perslid_voornaam, prs_perslid_voornaam), prs_perslid_telefoonnr = NVL (rec_prs_upd.prs_perslid_telefoonnr, prs_perslid_telefoonnr), prs_perslid_titel = rec_prs_upd.prs_perslid_titel, prs_srtperslid_key = v_srtperslid_key, prs_afdeling_key = c_afdeling_key, prs_perslid_verwijder = NULL, prs_perslid_oslogin = rec_prs_upd.prs_perslid_oslogin, prs_perslid_email = rec_prs_upd.prs_perslid_email WHERE prs_perslid_nr = rec_prs_upd.prs_perslid_nr AND prs_perslid_key = rec_prs_upd.prs_perslid_key AND ( prs_perslid_naam <> rec_prs_upd.prs_perslid_naam OR NVL (prs_perslid_tussenvoegsel, '-') <> NVL (rec_prs_upd.prs_perslid_tussenvoegsel, '-') OR prs_perslid_voorletters <> rec_prs_upd.prs_perslid_voorletters OR NVL (prs_perslid_voornaam, '-') <> NVL (rec_prs_upd.prs_perslid_voornaam, '-') OR NVL (prs_perslid_telefoonnr, '-') <> NVL (rec_prs_upd.prs_perslid_telefoonnr, '-') OR prs_perslid_titel <> rec_prs_upd.prs_perslid_titel OR prs_srtperslid_key <> v_srtperslid_key OR prs_afdeling_key <> c_afdeling_key OR prs_perslid_oslogin <> rec_prs_upd.prs_perslid_oslogin OR prs_perslid_email <> rec_prs_upd.prs_perslid_email OR rec_prs_upd.prs_perslid_verwijder IS NOT NULL ); commit; END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); --v_errorhint := 'perslid_nr:' || rec_prs_upd.prs_perslid_nr || ' afdeling:' || rec_prs_upd.prs_afdeling_naam || ' {' || v_errormsg || '}'; v_errorhint := 'perslid_nr:' || rec_prs_upd.prs_perslid_nr || ' {' || v_errormsg || '}'; v_errormsg := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')'; v_update := FALSE; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint); END; END IF; -- *** Werkplek *** v_errorhint := 'Kan geen werkplek toevoegen'; IF v_update AND (v_aktie = 'UPDATE') THEN -- bepaal aantal werkplekken BEGIN SELECT COUNT(*) INTO v_nr_werkplek FROM prs_perslidwerkplek WHERE prs_perslid_key = rec_prs_upd.prs_perslid_key; EXCEPTION WHEN OTHERS THEN fac.imp_writelog (p_import_key, 'I', v_errormsg, 'Het aantal werkplekken kan niet bepaald worden?! personeelsnummer: ' || rec_prs_upd.prs_perslid_nr ); v_update := FALSE; END; IF v_update AND v_nr_werkplek = 1 THEN BEGIN -- bepaal huidige alg_locatie_key SELECT alg_locatie_key INTO v_current_locatie_key FROM prs_v_werkplekperslid_gegevens WHERE prs_perslid_key = rec_prs_upd.prs_perslid_key; -- bepaal nieuwe alg_locatie_key SELECT lo.alg_locatie_key INTO v_new_locatie_key FROM fac_usrdata ud, alg_locatie lo WHERE ud.fac_usrtab_key = c_usrtab_key AND ud.fac_usrdata_code = lo.alg_locatie_code AND ud.fac_usrdata_omschr = rec_prs_upd.prs_locatie_omschrijving AND lo.alg_locatie_verwijder IS NULL; -- indien gelijk dan werkplek niet updaten. v_update := (v_current_locatie_key <> v_new_locatie_key); EXCEPTION WHEN OTHERS THEN fac.imp_writelog (p_import_key, 'I', v_errormsg, 'huidige of nieuwe alg_locatie_key kan niet bepaald worden?! personeelsnummer: ' || rec_prs_upd.prs_perslid_nr ); v_update := FALSE; END; END IF; END IF; IF v_update AND (rec_prs_upd.prs_locatie_omschrijving IS NOT NULL) AND ((v_aktie = 'INSERT') OR (v_aktie = 'UPDATE') AND (v_nr_werkplek<=1)) THEN IF v_aktie = 'INSERT' THEN v_errormsg := 'Fout bij toewijzen werkplek bij zojuist toegevoegde persoon '; ELSE -- v_aktie = 'UPDATE' v_errormsg := 'Fout bij het wijzigen van de werkplek'; END IF; BEGIN SELECT prs_perslid_key INTO v_perslid_key FROM prs_perslid WHERE prs_perslid_nr = rec_prs_upd.prs_perslid_nr AND prs_perslid_verwijder IS NULL; EXCEPTION WHEN TOO_MANY_ROWS THEN fac.imp_writelog (p_import_key, 'I', v_errormsg, 'Het personeelsnummer is niet uniek: ' || rec_prs_upd.prs_perslid_nr ); v_update := FALSE; WHEN OTHERS THEN fac.imp_writelog (p_import_key, 'I', v_errormsg, 'De persoon kan niet bepaald worden?! personeelsnummer: ' || rec_prs_upd.prs_perslid_nr ); v_update := FALSE; END; BEGIN SELECT lo.alg_locatie_key INTO v_locatie_key FROM FAC_USRDATA ud, ALG_LOCATIE lo WHERE ud.fac_usrtab_key = c_usrtab_key AND ud.fac_usrdata_code = lo.alg_locatie_code AND ud.fac_usrdata_omschr = rec_prs_upd.prs_locatie_omschrijving AND lo.alg_locatie_verwijder IS NULL; EXCEPTION WHEN OTHERS THEN v_update := FALSE; END; IF NOT v_update THEN v_errorhint := 'Onbekende Locatie-omschrijving ' || rec_prs_upd.prs_locatie_omschrijving || '; personeelsnummer: ' || rec_prs_upd.prs_perslid_nr; fac.imp_writelog (p_import_key, 'I', v_errormsg, v_errorhint); ELSE BEGIN SELECT MIN (alg_gebouw_code) INTO v_gebouw_code FROM alg_gebouw WHERE alg_locatie_key = v_locatie_key AND alg_gebouw_verwijder IS NULL; SELECT alg_gebouw_key INTO v_gebouw_key FROM alg_gebouw WHERE alg_locatie_key = v_locatie_key AND alg_gebouw_code = v_gebouw_code AND alg_gebouw_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO alg_gebouw (alg_locatie_key, alg_srtgebouw_key, alg_gebouw_code, alg_gebouw_naam ) VALUES (v_locatie_key, c_srtgebouw_default, '0', 'Onbekend' ); v_errormsg := 'Bepalen alg_gebouw_key adhv v_locatie_key=['||to_char(v_locatie_key)||'] en v_gebouw_code=['||v_gebouw_code||']'; SELECT alg_gebouw_key INTO v_gebouw_key FROM alg_gebouw WHERE alg_locatie_key = v_locatie_key AND alg_gebouw_code = v_gebouw_code AND alg_gebouw_verwijder IS NULL; END; BEGIN v_errormsg := 'Bepalen alg_verdieping_key'; SELECT alg_verdieping_key INTO v_verdieping_key FROM alg_verdieping WHERE alg_gebouw_key = v_gebouw_key AND alg_verdieping_verwijder IS NULL AND alg_verdieping_volgnr = 0; -- Begane grond! EXCEPTION WHEN NO_DATA_FOUND THEN v_errorhint := 'Persoon met persoonnummer ' || rec_prs_upd.prs_perslid_nr || ': toevoegen verdieping Onbekend'; INSERT INTO alg_verdieping (alg_gebouw_key, alg_verdieping_omschrijving, alg_verdieping_volgnr, alg_verdieping_code ) VALUES (v_gebouw_key, c_verdieping_omschr_default, 0, '0' ); -- Alsnog bepalen v_verdieping_key SELECT alg_verdieping_key INTO v_verdieping_key FROM alg_verdieping WHERE alg_gebouw_key = v_gebouw_key AND alg_verdieping_verwijder IS NULL AND alg_verdieping_volgnr = 0; -- Begane grond! END; BEGIN v_errorhint := 'Persoon met persoonnummer ' || rec_prs_upd.prs_perslid_nr || ': bepalen ruimte (ruimte zou bekend moeten zijn)'; SELECT alg_ruimte_key INTO v_ruimte_key FROM alg_ruimte WHERE alg_verdieping_key = v_verdieping_key AND alg_ruimte_verwijder IS NULL AND alg_ruimte_nr = c_ruimte_code; -- Altijd ruimte met deze notatie! EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO alg_ruimte (alg_verdieping_key, alg_srtruimte_key, alg_ruimte_nr, alg_ruimte_omschrijving ) VALUES (v_verdieping_key, c_srtruimte_default, c_ruimte_code, c_ruimte_omschr_default ); -- Alsnog bepalen v_ruimte_key SELECT alg_ruimte_key INTO v_ruimte_key FROM alg_ruimte WHERE alg_verdieping_key = v_verdieping_key AND alg_ruimte_verwijder IS NULL AND alg_ruimte_nr = c_ruimte_code; -- Altijd ruimte met deze notatie! END; BEGIN v_errorhint := 'Persoon met persoonnummer ' || rec_prs_upd.prs_perslid_nr || ': bepalen werkplek (werkplek zou bekend moeten zijn)'; SELECT prs_werkplek_key INTO v_werkplek_key FROM prs_werkplek WHERE prs_alg_ruimte_key = v_ruimte_key AND prs_werkplek_volgnr = c_werkplek_volgnr_default; -- Altijd werkplek met deze notatie! EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO prs_werkplek (prs_werkplek_volgnr, prs_werkplek_omschrijving, prs_alg_ruimte_key, prs_werkplek_virtueel ) VALUES (c_werkplek_volgnr_default, c_prs_werkplek_omschrijving, v_ruimte_key, 1 ); -- Alsnog bepalen v_werkplek_key SELECT prs_werkplek_key INTO v_werkplek_key FROM prs_werkplek WHERE prs_alg_ruimte_key = v_ruimte_key AND prs_werkplek_volgnr = c_werkplek_volgnr_default; -- Altijd werkplek met deze notatie! END; IF v_aktie = 'INSERT' OR (v_nr_werkplek = 0 AND v_aktie = 'UPDATE') THEN INSERT INTO prs_perslidwerkplek (prs_perslid_key, prs_werkplek_key, prs_perslidwerkplek_bezetting ) VALUES (v_perslid_key, v_werkplek_key, 0 ); ELSE -- v_aktie = 'UPDATE' AND v_nr_werkplek = 1 UPDATE prs_perslidwerkplek SET prs_werkplek_key = v_werkplek_key WHERE prs_perslid_key = v_perslid_key; END IF; END IF; END IF; v_buffercount := v_buffercount + 1; IF v_buffercount >= c_commitbuffer THEN COMMIT; v_buffercount := 0; END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errorhint := 'perslid_nr:' || rec_prs_upd.prs_perslid_nr || ' locatie:' || rec_prs_upd.prs_locatie_omschrijving || ' ' || v_errorhint || ' {' || v_errormsg || '}'; v_errormsg := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint); END; END LOOP; SELECT COUNT (*) INTO v_perslid_newcount_fclt FROM prs_perslid WHERE prs_perslid_nr IS NOT NULL AND prs_perslid_verwijder IS NULL; fac.imp_writelog (p_import_key, 'S', 'Aantal actieve personen (met personeelsnr) vooraf: ' || TO_CHAR (v_perslid_count_fclt) || ' nu: ' || TO_CHAR (v_perslid_newcount_fclt), '' ); SELECT COUNT (*) INTO v_perslid_newcount_fclt -- misbruik FROM prs_perslid WHERE prs_perslid_nr IS NULL AND prs_perslid_verwijder IS NULL; fac.imp_writelog (p_import_key, 'S', 'Aantal actieve personen zonder personeelsnr: ' || TO_CHAR (v_perslid_newcount_fclt), '' ); -- plaats medewerkers die nog niet in de default groep zitten in de default groep. INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key) (SELECT 1, prs_perslid_key FROM prs_perslid p WHERE prs_perslid_oslogin IS NOT NULL AND prs_perslid_verwijder IS NULL AND NOT EXISTS ( SELECT prs_perslid_key FROM fac_gebruikersgroep gg WHERE fac_groep_key = 1 AND p.prs_perslid_key = gg.prs_perslid_key)); EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errorhint := v_errorhint || ' {' || v_errormsg || '}'; v_errormsg := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint); END; / CREATE OR REPLACE PROCEDURE logi_import_organisatie (p_import_key IN NUMBER) AS c_max_import_str_len NUMBER(10) := 1000; CURSOR c_cursor IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; next_record c_cursor%ROWTYPE; v_newline VARCHAR2 (1000); -- Import line v_field VARCHAR2 (100); -- Import field v_fielddelimitor VARCHAR2 (1); -- Field seperator v_errormsg VARCHAR (1000); v_errorhint VARCHAR (200); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); -- De importvelden v_afdeling_naam VARCHAR2 (1000); v_afdeling_omschrijving VARCHAR2 (1000); v_afdeling_naam2 VARCHAR2 (1000); v_afdeling_omschrijving2 VARCHAR2 (1000); v_afdeling_naam3 VARCHAR2 (1000); v_afdeling_omschrijving3 VARCHAR2 (1000); header_found BOOLEAN; v_controle VARCHAR2(30); BEGIN -- Init header_found := FALSE; v_fielddelimitor := ';'; v_errormsg := ''; v_controle := 'OK'; -- Hier kan een controle ingebouwd worden ... IF (v_controle IS NULL) THEN v_errormsg := 'Ongeldig importbestand'; fac.imp_writelog (p_import_key, 'E', v_errormsg, ''); ELSE -- Clear my previous imported rows DELETE FROM logi_imp_organisatie; commit; FOR next_record IN c_cursor LOOP BEGIN v_newline := SUBSTR(next_record.FAC_IMP_FILE_LINE,1,c_max_import_str_len); fac.imp_getfield (v_newline, v_fielddelimitor, v_afdeling_naam); fac.imp_getfield (v_newline, v_fielddelimitor, v_afdeling_omschrijving); fac.imp_getfield (v_newline, v_fielddelimitor, v_afdeling_naam2); fac.imp_getfield (v_newline, v_fielddelimitor, v_afdeling_omschrijving2); fac.imp_getfield (v_newline, v_fielddelimitor, v_afdeling_naam3); fac.imp_getfield (v_newline, v_fielddelimitor, v_afdeling_omschrijving3); -- Skip until the header is found header_found := TRUE; -- Geen Header check IF ( 1=2 ) THEN header_found := TRUE; ELSIF (header_found) THEN BEGIN v_errormsg := 'Kan organisatiegegevens niet inlezen '; v_afdeling_naam := SUBSTR(TRIM(coalesce(v_afdeling_naam,'')),1,10); v_afdeling_omschrijving := SUBSTR(TRIM(coalesce(v_afdeling_omschrijving,'')),1,60); v_afdeling_naam2 := SUBSTR(TRIM(coalesce(v_afdeling_naam2,'')),1,10); v_afdeling_omschrijving2 := SUBSTR(TRIM(coalesce(v_afdeling_omschrijving2,'')),1,60); v_afdeling_naam3 := SUBSTR(TRIM(coalesce(v_afdeling_naam3,'')),1,10); v_afdeling_omschrijving3 := SUBSTR(TRIM(coalesce(v_afdeling_omschrijving3,'')),1,60); INSERT INTO logi_imp_organisatie (prs_afdeling_naam ,prs_afdeling_omschrijving ,prs_afdeling_naam2 ,prs_afdeling_omschrijving2 ,prs_afdeling_naam3 ,prs_afdeling_omschrijving3 ,logi_imp_organisatie_aanmaak ) VALUES(v_afdeling_naam ,v_afdeling_omschrijving ,v_afdeling_naam2 ,v_afdeling_omschrijving2 ,v_afdeling_naam3 ,v_afdeling_omschrijving3 ,SYSDATE ); commit; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := v_errormsg || 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, ''); commit; -- logging END; END IF; COMMIT; END; END LOOP; END IF; 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_errormsg, ''); END; / CREATE OR REPLACE PROCEDURE logi_update_organisatie (p_import_key IN NUMBER) AS c_bedrijf_key NUMBER(10) := 2; c_fielddelimitor VARCHAR2(1) := ';'; CURSOR c_afd1 IS SELECT prs_afdeling_naam, prs_afdeling_omschrijving, '['||prs_afdeling_naam||'|'||prs_afdeling_omschrijving||']' imp_row FROM logi_imp_organisatie WHERE 1=1 GROUP BY prs_afdeling_naam, prs_afdeling_omschrijving; next_afd1 c_afd1%ROWTYPE; CURSOR c_afd1_del IS SELECT a.prs_afdeling_key, a.prs_afdeling_naam, a.niveau FROM prs_v_afdeling_fullnames a WHERE a.niveau = 1 AND NOT EXISTS ( SELECT 'dummy' FROM LOGI_IMP_ORGANISATIE o WHERE o.prs_afdeling_naam = a.prs_afdeling_naam); next_afd1_del c_afd1_del%ROWTYPE; CURSOR c_afd2 IS SELECT prs_afdeling_naam, prs_afdeling_naam2, prs_afdeling_omschrijving2, '['||prs_afdeling_naam||'|'||prs_afdeling_naam2||'|'||prs_afdeling_omschrijving2||']' imp_row FROM logi_imp_organisatie WHERE 1=1 GROUP BY prs_afdeling_naam, prs_afdeling_naam2, prs_afdeling_omschrijving2; CURSOR c_afd2_del IS SELECT a.prs_afdeling_key, a.prs_afdeling_naam, a.niveau FROM prs_v_afdeling_fullnames a WHERE a.niveau = 2 AND NOT EXISTS ( SELECT 'dummy' FROM LOGI_IMP_ORGANISATIE o WHERE o.prs_afdeling_naam2 = a.prs_afdeling_naam3); next_afd2_del c_afd2_del%ROWTYPE; CURSOR c_afd3 IS SELECT prs_afdeling_naam, prs_afdeling_naam2, prs_afdeling_naam3, prs_afdeling_omschrijving3, '['||prs_afdeling_naam||'|'||prs_afdeling_naam2||'|'||prs_afdeling_naam3||'|'||prs_afdeling_omschrijving3||']' imp_row FROM logi_imp_organisatie WHERE 1=1 GROUP BY prs_afdeling_naam, prs_afdeling_naam2, prs_afdeling_naam3, prs_afdeling_omschrijving3; CURSOR c_afd3_del IS SELECT a.prs_afdeling_key, a.prs_afdeling_naam, a.niveau FROM prs_v_afdeling_fullnames a WHERE a.niveau = 3 AND NOT EXISTS ( SELECT 'dummy' FROM LOGI_IMP_ORGANISATIE o WHERE o.prs_afdeling_naam3 = a.prs_afdeling_naam3); next_afd3_del c_afd3_del%ROWTYPE; next_afd2_del c_afd2_del%ROWTYPE; next_afd1_del c_afd1_del%ROWTYPE; next_afd1 c_afd1%ROWTYPE; next_afd2 c_afd2%ROWTYPE; next_afd3 c_afd3%ROWTYPE; v_errormsg VARCHAR (1000); v_errorhint VARCHAR (200); v_imp VARCHAR(1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); -- Overige variabelen v_afdeling_key NUMBER(10); v_afdeling_parentkey NUMBER(10); v_afdeling_parentkey2 NUMBER(10); v_imp_row VARCHAR2(1000); FUNCTION afdeling_delete (p_afdeling_key IN NUMBER, p_afdeling_naam IN VARCHAR2, p_niveau IN NUMBER) RETURN BOOLEAN IS c_inactief VARCHAR2(16) := 'INACTIEF:'; BEGIN UPDATE prs_afdeling SET prs_afdeling_verwijder = SYSDATE WHERE prs_afdeling_key = p_afdeling_key AND prs_afdeling_verwijder IS NULL; RETURN TRUE; EXCEPTION WHEN OTHERS THEN fac.imp_writelog (p_import_key, 'E', 'Afdeling kan niet inactief worden gemaakt (heeft nog personen)', 'Niveau=['||to_char(p_niveau)||'] Afdelingnaam=['||p_afdeling_naam||']'||' Afdelingskey=[' || p_afdeling_key || ']' ); UPDATE prs_afdeling SET prs_afdeling_omschrijving = SUBSTR (c_inactief || prs_afdeling_omschrijving, 1, 60) WHERE prs_afdeling_key = p_afdeling_key AND prs_afdeling_omschrijving NOT LIKE c_inactief ||'%' AND prs_afdeling_verwijder IS NULL; RETURN FALSE; END; BEGIN -- Uiteraard verwijderen vaan hoog naar laag afdelingsniveau ivm referenties FOR next_afd3_del IN c_afd3_del LOOP BEGIN IF afdeling_delete(next_afd3_del.prs_afdeling_key, next_afd3_del.prs_afdeling_naam, next_afd3_del.niveau) THEN commit; -- update ELSE commit; -- logging END IF; END; END LOOP; -- FOR next_afd2_del IN c_afd2_del LOOP BEGIN IF afdeling_delete(next_afd2_del.prs_afdeling_key, next_afd2_del.prs_afdeling_naam, next_afd2_del.niveau) THEN commit; -- update ELSE commit; -- logging END IF; END; END LOOP; -- FOR next_afd1_del IN c_afd1_del LOOP BEGIN IF afdeling_delete(next_afd1_del.prs_afdeling_key, next_afd1_del.prs_afdeling_naam, next_afd1_del.niveau) THEN commit; -- update ELSE commit; -- logging END IF; END; END LOOP; COMMIT; -- Hoogste afdelingsniveau (direct onder bedrijf) FOR next_afd1 IN c_afd1 LOOP BEGIN v_errorhint := 'Volgende afdeling op niveau1'; v_imp_row := next_afd1.imp_row; SELECT COALESCE(MAX(prs_afdeling_key),-1) INTO v_afdeling_key FROM prs_afdeling WHERE UPPER(prs_afdeling_upper) = UPPER(next_afd1.prs_afdeling_naam) AND prs_afdeling_verwijder is null AND prs_bedrijf_key = c_bedrijf_key; IF (v_afdeling_key = -1) THEN v_errorhint := 'Fout bij toevoegen afdeling op niveau 1'; insert into PRS_AFDELING (prs_afdeling_naam ,prs_afdeling_omschrijving ,prs_bedrijf_key ,prs_afdeling_parentkey ,prs_kostenplaats_key ) values (next_afd1.prs_afdeling_naam ,next_afd1.prs_afdeling_omschrijving ,c_bedrijf_key ,TO_NUMBER(NULL) ,TO_NUMBER(NULL) ); ELSE v_errorhint := 'Fout bij wijzigen afdeling op niveau 1'; update PRS_AFDELING set prs_afdeling_omschrijving = next_afd1.prs_afdeling_omschrijving where prs_afdeling_key = v_afdeling_key; END IF; commit; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := v_errormsg || 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint||v_imp_row); commit; -- logging END; END LOOP; -- Tweede afdelingsniveau FOR next_afd2 IN c_afd2 LOOP BEGIN v_errorhint := 'Volgende afdeling op niveau2'; v_imp_row := next_afd2.imp_row; SELECT prs_afdeling_key INTO v_afdeling_parentkey FROM prs_afdeling WHERE UPPER(prs_afdeling_upper) = UPPER(next_afd2.prs_afdeling_naam) AND prs_afdeling_verwijder is null AND prs_bedrijf_key = c_bedrijf_key; SELECT COALESCE(MAX(prs_afdeling_key),-1) INTO v_afdeling_key FROM prs_afdeling WHERE UPPER(prs_afdeling_upper) = UPPER(next_afd2.prs_afdeling_naam2) AND prs_afdeling_verwijder is null AND prs_afdeling_parentkey = v_afdeling_parentkey; IF (v_afdeling_key = -1) THEN v_errorhint := 'Fout bij toevoegen afdeling op niveau 2'; insert into PRS_AFDELING (prs_afdeling_naam ,prs_afdeling_omschrijving ,prs_bedrijf_key ,prs_afdeling_parentkey ,prs_kostenplaats_key ) values (next_afd2.prs_afdeling_naam2 ,next_afd2.prs_afdeling_omschrijving2 ,TO_NUMBER(NULL) ,v_afdeling_parentkey ,TO_NUMBER(NULL) ); ELSE v_errorhint := 'Fout bij wijzigen afdeling op niveau 2'; update PRS_AFDELING set prs_afdeling_omschrijving = next_afd2.prs_afdeling_omschrijving2 where prs_afdeling_key = v_afdeling_key; END IF; commit; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := v_errormsg || 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint||v_imp_row); commit; -- logging END; END LOOP; -- Derde afdelingsniveau FOR next_afd3 IN c_afd3 LOOP BEGIN v_errorhint := 'Volgende afdeling op niveau3'; v_imp_row := next_afd3.imp_row; v_errorhint := 'Fout bij bepalen afdeling op niveau1'; SELECT prs_afdeling_key INTO v_afdeling_parentkey FROM prs_afdeling WHERE UPPER(prs_afdeling_upper) = UPPER(next_afd3.prs_afdeling_naam) AND prs_afdeling_verwijder is null AND prs_bedrijf_key = c_bedrijf_key; v_errorhint := 'Fout bij bepalen afdeling op niveau2'; SELECT prs_afdeling_key INTO v_afdeling_parentkey2 FROM prs_afdeling WHERE UPPER(prs_afdeling_upper) = UPPER(next_afd3.prs_afdeling_naam2) AND prs_afdeling_verwijder is null AND prs_afdeling_parentkey = v_afdeling_parentkey; v_errorhint := 'Fout bij bepalen afdeling op niveau3'; SELECT COALESCE(MAX(prs_afdeling_key),-1) INTO v_afdeling_key FROM prs_afdeling WHERE UPPER(prs_afdeling_upper) = UPPER(next_afd3.prs_afdeling_naam3) AND prs_afdeling_verwijder is null AND prs_afdeling_parentkey = v_afdeling_parentkey2; IF (v_afdeling_key = -1) THEN v_errorhint := 'Fout bij toevoegen afdeling op niveau 3'; insert into PRS_AFDELING (prs_afdeling_naam ,prs_afdeling_omschrijving ,prs_bedrijf_key ,prs_afdeling_parentkey ,prs_kostenplaats_key ) values (next_afd3.prs_afdeling_naam3 ,next_afd3.prs_afdeling_omschrijving3 ,TO_NUMBER(NULL) ,v_afdeling_parentkey2 ,1 ); ELSE v_errorhint := 'Fout bij wijzigen afdeling op niveau 2'; update PRS_AFDELING set prs_afdeling_omschrijving = next_afd3.prs_afdeling_omschrijving3 where prs_afdeling_key = v_afdeling_key; END IF; commit; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := v_errormsg || 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint||v_imp_row); commit; -- logging END; END LOOP; END; / -- Dummy export AUTO_STUFF! CREATE OR REPLACE VIEW logi_v_export_auto_stuff (RESULT, result_order) AS SELECT '', 0 FROM DUAL WHERE 1 = 0 / /* Formatted on 28-3-2012 17:14:45 (QP5 v5.115.810.9015) */ CREATE OR REPLACE PROCEDURE logi_select_auto_stuff (p_applname IN VARCHAR2, p_applrun IN VARCHAR2) AS CURSOR cresbots -- Botsing tussen WP-RES door dezelfde aanvrager -> delete! IS SELECT '[' || rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr || '] ' aanduiding, rrr.res_rsv_ruimte_key FROM res_v_aanwezigrsv_ruimte rrr, res_ruimte_opstelling rro, res_ruimte rr WHERE rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key AND rro.res_ruimte_key = rr.res_ruimte_key AND rr.res_discipline_key IN (621, 622, 623, 624, 625, 641) AND EXISTS (SELECT 1 FROM res_v_aanwezigrsv_ruimte rrr2, res_ruimte_opstelling rro2, res_ruimte rr2 WHERE rrr2.res_ruimte_opstel_key = rro2.res_ruimte_opstel_key AND rro2.res_ruimte_key = rr2.res_ruimte_key AND rr2.res_discipline_key IN (621, 622, 623, 624, 625, 641) AND rrr2.res_rsv_ruimte_key > rrr.res_rsv_ruimte_key AND rrr2.res_rsv_ruimte_contact_key = rrr.res_rsv_ruimte_contact_key AND rrr2.res_rsv_ruimte_van < rrr.res_rsv_ruimte_tot AND rrr2.res_rsv_ruimte_tot > rrr.res_rsv_ruimte_van); CURSOR creshori -- WP-RES te ver in de toekomst -> delete! IS SELECT '[' || rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr || '] ' aanduiding, rrr.res_rsv_ruimte_key FROM res_v_aanwezigrsv_ruimte rrr, res_ruimte_opstelling rro, res_ruimte rr WHERE rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key AND rro.res_ruimte_key = rr.res_ruimte_key AND rr.res_discipline_key IN (621, 622, 623, 624, 625, 641) AND TRUNC (rrr.res_rsv_ruimte_van) > TRUNC (SYSDATE) + 15; CURSOR cresduur -- WP-RES langer dan toegestane duur (1 uur) -> update! IS SELECT '[' || rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr || '] ' aanduiding, rrr.res_rsv_ruimte_key FROM res_v_aanwezigrsv_ruimte rrr, res_ruimte_opstelling rro, res_ruimte rr WHERE rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key AND rro.res_ruimte_key = rr.res_ruimte_key AND rr.res_discipline_key IN (621, 623) AND (rrr.res_rsv_ruimte_tot - rrr.res_rsv_ruimte_van) * 24 > 1; CURSOR cart IS SELECT '[' || TO_CHAR (ra.res_rsv_ruimte_key) || '/' || TO_CHAR (ra.res_rsv_artikel_key) || '] ' aanduiding, ra.res_rsv_ruimte_key, ra.res_rsv_artikel_key, ra.res_artikel_key FROM res_rsv_artikel ra WHERE ra.res_status_bo_key = 2 AND ra.res_rsv_artikel_dirtlevel = 0 AND ra.res_rsv_artikel_verwijder IS NULL AND TRUNC (ra.res_rsv_artikel_levering + 1) < SYSDATE; CURSOR cobj IS SELECT '[' || TO_CHAR (rd.res_rsv_ruimte_key) || '/' || TO_CHAR (rd.res_rsv_deel_key) || '] ' aanduiding, rd.res_rsv_ruimte_key, rd.res_rsv_deel_key FROM res_rsv_deel rd WHERE rd.res_status_bo_key = 2 AND rd.res_rsv_ruimte_key IS NOT NULL -- Geen parkeerplaatsen AND rd.res_rsv_deel_dirtlevel = 0 AND rd.res_rsv_deel_verwijder IS NULL AND TRUNC (rd.res_rsv_deel_tot + 1) < SYSDATE; CURSOR cres IS SELECT '[' || TO_CHAR (rrr.res_rsv_ruimte_key) || '] ' aanduiding, rrr.res_rsv_ruimte_key FROM res_rsv_ruimte rrr WHERE rrr.res_status_bo_key = 2 AND rrr.res_ruimte_opstel_key IS NOT NULL -- Geen "roomservice" AND rrr.res_rsv_ruimte_dirtlevel = 0 AND rrr.res_rsv_ruimte_verwijder IS NULL AND TRUNC (rrr.res_rsv_ruimte_tot + 1) < SYSDATE; -- LOGI#42327: Verwijderen bezoekers bij afspraken >6 maanden oud! CURSOR cafspraak IS SELECT a.bez_afspraak_key FROM bez_afspraak a WHERE ADD_MONTHS (a.bez_afspraak_datum, 6) < SYSDATE AND EXISTS (SELECT 1 FROM bez_bezoekers WHERE bez_afspraak_key = a.bez_afspraak_key); c_nu DATE := SYSDATE; c_txt_anoniem VARCHAR2 (200) := 'Geanonimiseerd'; v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count NUMBER; v_prijs NUMBER (9, 2); BEGIN v_count := 0; FOR r IN cresbots LOOP BEGIN v_errormsg := 'Fout bij verwijderen reservering'; UPDATE res_rsv_ruimte SET res_rsv_ruimte_verwijder = SYSDATE WHERE res_rsv_ruimte_key = r.res_rsv_ruimte_key; fac.trackaction ('RESDEL', r.res_rsv_ruimte_key, NULL, NULL, NULL); COMMIT; v_count := v_count + 1; 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.writelog (p_applname, 'E', r.aanduiding || v_errormsg, 'RES_WP-botsing'); COMMIT; END; END LOOP; fac.writelog (p_applname, 'S', '#RES_WP-botsing deletes: ' || TO_CHAR (v_count), ''); COMMIT; v_count := 0; FOR r IN creshori LOOP BEGIN v_errormsg := 'Fout bij verwijderen reservering'; UPDATE res_rsv_ruimte SET res_rsv_ruimte_verwijder = SYSDATE WHERE res_rsv_ruimte_key = r.res_rsv_ruimte_key; fac.trackaction ('RESDEL', r.res_rsv_ruimte_key, NULL, NULL, NULL); COMMIT; v_count := v_count + 1; 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.writelog (p_applname, 'E', r.aanduiding || v_errormsg, 'RES_WP-horizon'); COMMIT; END; END LOOP; fac.writelog (p_applname, 'S', '#RES_WP-horizon deletes: ' || TO_CHAR (v_count), ''); COMMIT; v_count := 0; FOR r IN cresduur LOOP BEGIN v_errormsg := 'Fout bij bijwerken reservering'; UPDATE res_rsv_ruimte SET res_rsv_ruimte_tot = res_rsv_ruimte_van + (1 / 24) WHERE res_rsv_ruimte_key = r.res_rsv_ruimte_key; fac.trackaction ('RESUPD', r.res_rsv_ruimte_key, NULL, NULL, NULL); COMMIT; v_count := v_count + 1; 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.writelog (p_applname, 'E', r.aanduiding || v_errormsg, 'RES_WP-tottijd'); COMMIT; END; END LOOP; fac.writelog (p_applname, 'S', '#RES_WP-tottijd updates: ' || TO_CHAR (v_count), ''); COMMIT; -- LOGI#23445: Automatisch afmelden reserveringen. FOR rc IN cart LOOP BEGIN v_errorhint := 'Fout bij bepalen res_rsv_artikel_prijs.'; SELECT res.getartikelprijs (rc.res_rsv_artikel_key) INTO v_prijs FROM DUAL; v_errorhint := 'Fout bij bijwerken res_rsv_artikel_prijs.'; UPDATE res_rsv_artikel SET res_status_bo_key = 5, res_rsv_artikel_prijs = v_prijs, res_rsv_artikel_inkoopprijs = (SELECT res_artikel_inkoopprijs FROM res_artikel WHERE res_artikel_key = rc.res_artikel_key), res_rsv_artikel_btw = (SELECT res_artikel_btw FROM res_artikel WHERE res_artikel_key = rc.res_artikel_key) WHERE res_rsv_artikel_key = rc.res_rsv_artikel_key; fac.trackaction ('RESAFM', rc.res_rsv_ruimte_key, NULL, NULL, 'Catering afgemeld'); EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.writelog (p_applname, 'W', rc.aanduiding || v_errormsg, v_errorhint); COMMIT; END; END LOOP; COMMIT; FOR rc IN cobj LOOP BEGIN v_errorhint := 'Fout bij bepalen res_rsv_deel_prijs.'; SELECT res.getdeelprijs (rc.res_rsv_deel_key) INTO v_prijs FROM DUAL; v_errorhint := 'Fout bij bijwerken res_rsv_deel_prijs.'; UPDATE res_rsv_deel SET res_status_bo_key = 5, res_rsv_deel_prijs = v_prijs WHERE res_rsv_deel_key = rc.res_rsv_deel_key; fac.trackaction ('RESAFM', rc.res_rsv_ruimte_key, NULL, NULL, 'Voorziening(en) afgemeld'); EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.writelog (p_applname, 'W', rc.aanduiding || v_errormsg, v_errorhint); COMMIT; END; END LOOP; COMMIT; FOR rc IN cres LOOP BEGIN v_errorhint := 'Fout bij bepalen res_rsv_ruimte_prijs.'; SELECT res.getruimteprijs (rc.res_rsv_ruimte_key) INTO v_prijs FROM DUAL; v_errorhint := 'Fout bij bijwerken res_rsv_ruimte_prijs.'; UPDATE res_rsv_ruimte SET res_status_bo_key = 5, res_rsv_ruimte_prijs = v_prijs WHERE res_rsv_ruimte_key = rc.res_rsv_ruimte_key; fac.trackaction ('RESAFM', rc.res_rsv_ruimte_key, NULL, NULL, NULL); EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.writelog (p_applname, 'W', rc.aanduiding || v_errormsg, v_errorhint); COMMIT; END; END LOOP; COMMIT; FOR rc IN cafspraak LOOP DELETE FROM fac_tracking WHERE fac_srtnotificatie_key IN (44, 361) -- BEZMAI/BEZUPD AND fac_tracking_refkey = rc.bez_afspraak_key; DELETE FROM fac_tracking t WHERE t.fac_srtnotificatie_key IN (15, 16, 17, 18, 181, 581) -- BEZDON/BEZDO2/BEZOUT/BEZOU2/BEZBAD/BEZUNI AND EXISTS (SELECT 1 FROM bez_bezoekers WHERE bez_afspraak_key = rc.bez_afspraak_key AND bez_bezoekers_key = t.fac_tracking_refkey); DELETE FROM bez_bezoekers WHERE bez_afspraak_key = rc.bez_afspraak_key; fac.trackaction ('#BEZUPD', rc.bez_afspraak_key, NULL, c_nu, c_txt_anoniem); END LOOP; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.writelog (p_applname, 'E', 'Proces AUTO_STUFF afgebroken!', v_errormsg); COMMIT; END; / -- LOGI#23445: Alleen spreekkamers (dus geen WP) en alleen met FO-status -- Optie/Definitief (dus niet Blokkade en Vervallen)! /* Formatted on 28-6-2012 14:24:48 (QP5 v5.115.810.9015) */ CREATE OR REPLACE VIEW LOGI_V_RAP_RES_INFOBORD ( AKTIEF, OFFSET, DAG, TIJD_VAN, TIJD_TOT, RUIMTE, CATALOGUS, AANVRAGER, GASTHEER, OMSCHRIJVING, STATUS, LOCATIE_CODE, GEBOUW_CODE, VERDIEPING_CODE, LOCATIE_OMSCHRIJVING, GEBOUW_OMSCHRIJVING, VERDIEPING_OMSCHRIJVING, ALG_LOCATIE_KEY, ALG_GEBOUW_KEY, ALG_VERDIEPING_KEY ) AS SELECT (CASE WHEN rrr.res_rsv_ruimte_van > SYSDATE THEN 'expected' WHEN rrr.res_rsv_ruimte_tot < SYSDATE THEN 'passed' ELSE 'active' END) aktief, TRUNC ( (SYSDATE - rrr.res_rsv_ruimte_van) * 24 * 60) offset, TO_CHAR (rrr.res_rsv_ruimte_van, 'dd-mm-yyyy') dag, TO_CHAR (rrr.res_rsv_ruimte_van, 'hh24:mi') tijd_van, TO_CHAR (rrr.res_rsv_ruimte_tot, 'hh24:mi') tijd_tot, rrg.res_ruimte_nr ruimte, rd.ins_discipline_omschrijving catalogus, aanvrager.prs_perslid_naam_full aanvrager, gastheer.prs_perslid_naam_full gastheer, rrr.res_rsv_ruimte_omschrijving omschrijving, sf.res_status_fo_omschrijving status, l.alg_locatie_code locatie_code, g.alg_gebouw_code gebouw_code, v.alg_verdieping_code verdieping_code, l.alg_locatie_omschrijving locatie_omschrijving, g.alg_gebouw_omschrijving gebouw_omschrijving, v.alg_verdieping_omschrijving verdieping_omschrijving, l.alg_locatie_key, g.alg_gebouw_key, v.alg_verdieping_key FROM res_v_aanwezigrsv_ruimte rrr, res_ruimte_opstelling rro, res_v_res_ruimte_gegevens rrg, prs_v_perslid_fullnames aanvrager, prs_v_perslid_fullnames gastheer, alg_locatie l, alg_gebouw g, alg_verdieping v, res_status_fo sf, res_activiteit a, res_discipline rd WHERE rrr.res_status_fo_key IN (1, 2) -- Alleen Optie + Definitief! AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key AND rro.res_ruimte_key = rrg.res_ruimte_key AND rrr.res_rsv_ruimte_host_key = gastheer.prs_perslid_key AND rrr.res_rsv_ruimte_contact_key = aanvrager.prs_perslid_key AND TRUNC (rrr.res_rsv_ruimte_van) = TRUNC (SYSDATE) AND rrg.alg_locatie_key = l.alg_locatie_key AND rrg.alg_gebouw_key = g.alg_gebouw_key AND rrg.alg_verdieping_key = v.alg_verdieping_key AND rrr.res_status_fo_key = sf.res_status_fo_key AND rrr.res_activiteit_key = a.res_activiteit_key AND a.res_srtactiviteit_key = 1 -- Ruimte (géén Voorz. + WP)! AND rrg.res_discipline_key = rd.ins_discipline_key; -- LOGI#34117 notijob tbv optionele reserveringen CREATE OR REPLACE VIEW LOGI_V_NOTI_RES_OPTIE ( CODE, SENDER, RECEIVER, TEXT, KEY, XKEY ) AS SELECT DISTINCT 'RESNEW', NULL, res_rsv_ruimte_contact_key, 'Let op: reservering ' || rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr || ' (' || res_rsv_ruimte_van || ' - ' || res_ruimte_nr || ') is optioneel' text, res_reservering_key, res_rsv_ruimte_key FROM res_rsv_ruimte rrr, fac_tracking tr, fac_srtnotificatie srt, res_ruimte_opstelling rro, res_ruimte rr WHERE res_rsv_ruimte_verwijder IS NULL AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key AND rro.res_ruimte_key = rr.res_ruimte_key AND rrr.res_status_fo_key = 1 AND tr.fac_srtnotificatie_key = srt.fac_srtnotificatie_key AND ( (tr.fac_tracking_refkey = rrr.res_rsv_ruimte_key AND srt.fac_srtnotificatie_xmlnode IN ('reservering', 'xreservering'))) AND srt.fac_srtnotificatie_code = 'RESNEW' AND tr.fac_tracking_datum > (SELECT fac_notificatie_job_nextrun - fac_notificatie_job_interval / 24 FROM fac_notificatie_job WHERE fac_notificatie_job_view = 'LOGI_V_NOTI_RES_OPTIE'); -- Bevat CUST01- en CUST02-reminders naar verantwoordelijken voor inspectie -- van betreffende objecten. -- LET OP: Notificatiejob via xemail!!! -- CUST01: wekelijks mbt. over 1 tot 2 weken te keuren objecten! -- CUST02: wekelijks mbt. objecten waarvan keuringsdatum is verstreken! /* Formatted on 7-1-2016 17:28:32 (QP5 v5.136.908.31019) */ CREATE OR REPLACE VIEW LOGI_V_NOTI_INSPECTIEREMINDER ( code, sender, receiver, text, KEY, par1, par2, xkey, xemail, xmobile ) AS SELECT sn.fac_srtnotificatie_code code, NULL sender, NULL receiver, REPLACE ( REPLACE ( sn.fac_srtnotificatie_oms, '##SRTGROEP##', DECODE ( x.min_srtgroep_oms, x.max_srtgroep_oms, x.min_srtgroep_oms || DECODE (x.aantal, 1, '/' || min_controle_oms, ''), x.min_srtgroep_oms || ', ...')), '##AANTAL##', x.aantal) subject, x.dummy_deel_key, -- Dummy key!!! NULL, NULL, NULL, x.alg_locatie_email, NULL FROM ( SELECT l.alg_locatie_email, MIN (din.ins_srtcontrole_omschrijving) min_controle_oms, MIN (sg.ins_srtgroep_omschrijving) min_srtgroep_oms, MAX (sg.ins_srtgroep_omschrijving) max_srtgroep_oms, MIN (d.ins_deel_key) dummy_deel_key, COUNT (DISTINCT d.ins_deel_key) aantal FROM ins_deel d, ins_srtdeel sd, ins_srtgroep sg, alg_locatie l, (SELECT ins_deel_key, inspectie_next, ins_srtcontrole_omschrijving FROM (WITH defined_inspect AS (SELECT * FROM ins_deel d, ins_srtdeel sd, ins_srtcontrole sc WHERE d.ins_srtdeel_key = sd.ins_srtdeel_key AND (sc.ins_srtcontrole_niveau ='S' AND sc.ins_srtinstallatie_key = d.ins_srtdeel_key OR sc.ins_srtcontrole_niveau = 'G' AND sc.ins_srtinstallatie_key = sd.ins_srtgroep_key OR sc.ins_srtcontrole_niveau = 'D' AND sc.ins_srtinstallatie_key = d.ins_discipline_key)) SELECT 1 rn, -- NOG GEEN INSPECTIES GEWEEST! di.ins_deel_key, fac.nextcyclusdate ( di.ins_deel_aanmaak, di.ins_srtcontrole_mode, COALESCE (xcp.ins_srtcontroledl_xcp_eenheid, di.ins_srtcontrole_eenheid), COALESCE (xcp.ins_srtcontroledl_xcp_periode, di.ins_srtcontrole_periode), COALESCE (xcp.ins_srtcontroledl_xcp_bits, di.ins_srtcontrole_bits), 1) inspectie_next, di.ins_srtcontrole_omschrijving FROM defined_inspect di, ins_srtcontroledl_xcp xcp WHERE (di.ins_deel_key, di.ins_srtcontrole_key) NOT IN (SELECT ins_deel_key, ins_srtcontrole_key FROM ins_deelsrtcontrole WHERE ins_deelsrtcontrole_status IN (5, 6)) AND di.ins_srtcontrole_key = xcp.ins_srtcontrole_key(+) AND di.ins_deel_key = xcp.ins_deel_key(+) AND (xcp.ins_srtcontroledl_xcp_eind(+) IS NULL OR xcp.ins_srtcontroledl_xcp_eind(+) > TRUNC (SYSDATE, 'DD')) UNION ALL SELECT RANK () OVER ( PARTITION BY di.ins_deel_key, dsc.ins_srtcontrole_key ORDER BY ins_deelsrtcontrole_datum DESC) rn, di.ins_deel_key, fac.nextcyclusdate ( CASE WHEN di.ins_srtcontrole_mode = 0 THEN dsc.ins_deelsrtcontrole_datum_org ELSE dsc.ins_deelsrtcontrole_datum END, di.ins_srtcontrole_mode, COALESCE (xcp.ins_srtcontroledl_xcp_eenheid, di.ins_srtcontrole_eenheid), COALESCE (xcp.ins_srtcontroledl_xcp_periode, di.ins_srtcontrole_periode), COALESCE (xcp.ins_srtcontroledl_xcp_bits, di.ins_srtcontrole_bits), 1) inspectie_next, di.ins_srtcontrole_omschrijving FROM ins_deelsrtcontrole dsc, defined_inspect di, ins_srtcontroledl_xcp xcp WHERE dsc.ins_deelsrtcontrole_status IN (5, 6) AND di.ins_deel_key = dsc.ins_deel_key AND di.ins_srtcontrole_key = dsc.ins_srtcontrole_key AND di.ins_srtcontrole_key = xcp.ins_srtcontrole_key(+) AND di.ins_deel_key = xcp.ins_deel_key(+) AND (xcp.ins_srtcontroledl_xcp_eind(+) IS NULL OR xcp.ins_srtcontroledl_xcp_eind(+) > TRUNC (SYSDATE, 'DD')) ORDER BY inspectie_next) WHERE rn = 1) din WHERE d.ins_deel_module = 'INS' AND d.ins_deel_verwijder IS NULL AND d.ins_deel_parent_key IS NULL AND (d.ins_deel_vervaldatum IS NULL OR d.ins_deel_vervaldatum > TRUNC (SYSDATE)) AND d.ins_srtdeel_key = sd.ins_srtdeel_key AND sd.ins_srtgroep_key = sg.ins_srtgroep_key AND d.ins_alg_locatie_key = l.alg_locatie_key AND d.ins_deel_key = din.ins_deel_key AND din.inspectie_next BETWEEN TRUNC (SYSDATE + 7) AND TRUNC (SYSDATE + 14) GROUP BY l.alg_locatie_email) x, fac_srtnotificatie sn WHERE sn.fac_srtnotificatie_code = 'CUST01' UNION ALL SELECT sn.fac_srtnotificatie_code code, NULL sender, NULL receiver, REPLACE ( REPLACE ( sn.fac_srtnotificatie_oms, '##SRTGROEP##', DECODE ( x.min_srtgroep_oms, x.max_srtgroep_oms, x.min_srtgroep_oms || DECODE (x.aantal, 1, '/' || min_controle_oms, ''), x.min_srtgroep_oms || ', ...')), '##AANTAL##', x.aantal) subject, x.dummy_deel_key, -- Dummy key!!! NULL, NULL, NULL, x.alg_locatie_email, NULL FROM ( SELECT l.alg_locatie_email, MIN (din.ins_srtcontrole_omschrijving) min_controle_oms, MIN (sg.ins_srtgroep_omschrijving) min_srtgroep_oms, MAX (sg.ins_srtgroep_omschrijving) max_srtgroep_oms, MIN (d.ins_deel_key) dummy_deel_key, COUNT (DISTINCT d.ins_deel_key) aantal FROM ins_deel d, ins_srtdeel sd, ins_srtgroep sg, alg_locatie l, (SELECT ins_deel_key, inspectie_next, ins_srtcontrole_omschrijving FROM (WITH defined_inspect AS (SELECT * FROM ins_deel d, ins_srtdeel sd, ins_srtcontrole sc WHERE d.ins_srtdeel_key = sd.ins_srtdeel_key AND (sc.ins_srtcontrole_niveau = 'S' AND sc.ins_srtinstallatie_key = d.ins_srtdeel_key OR sc.ins_srtcontrole_niveau = 'G' AND sc.ins_srtinstallatie_key = sd.ins_srtgroep_key OR sc.ins_srtcontrole_niveau = 'D' AND sc.ins_srtinstallatie_key = d.ins_discipline_key)) SELECT 1 rn, -- NOG GEEN INSPECTIES GEWEEST! di.ins_deel_key, --COALESCE ( -- xcp.ins_srtcontroledl_xcp_respijt, -- fac.nextcyclusdate ( -- di.ins_deel_aanmaak, -- di.ins_srtcontrole_mode, -- COALESCE ( -- xcp.ins_srtcontroledl_xcp_eenheid, -- di.ins_srtcontrole_eenheid), -- COALESCE ( -- xcp.ins_srtcontroledl_xcp_periode, -- di.ins_srtcontrole_periode), -- COALESCE ( -- xcp.ins_srtcontroledl_xcp_bits, -- di.ins_srtcontrole_bits), -- 1)) fac.nextcyclusdate ( di.ins_deel_aanmaak, di.ins_srtcontrole_mode, COALESCE (xcp.ins_srtcontroledl_xcp_eenheid, di.ins_srtcontrole_eenheid), COALESCE (xcp.ins_srtcontroledl_xcp_periode, di.ins_srtcontrole_periode), COALESCE (xcp.ins_srtcontroledl_xcp_bits, di.ins_srtcontrole_bits), 1) inspectie_next, di.ins_srtcontrole_omschrijving FROM defined_inspect di, ins_srtcontroledl_xcp xcp WHERE (di.ins_deel_key, di.ins_srtcontrole_key) NOT IN (SELECT ins_deel_key, ins_srtcontrole_key FROM ins_deelsrtcontrole WHERE ins_deelsrtcontrole_status IN (5, 6)) AND di.ins_srtcontrole_key = xcp.ins_srtcontrole_key(+) AND di.ins_deel_key = xcp.ins_deel_key(+) AND (xcp.ins_srtcontroledl_xcp_eind(+) IS NULL OR xcp.ins_srtcontroledl_xcp_eind(+) > TRUNC (SYSDATE, 'DD')) UNION ALL SELECT RANK () OVER ( PARTITION BY di.ins_deel_key, dsc.ins_srtcontrole_key ORDER BY ins_deelsrtcontrole_datum DESC) rn, di.ins_deel_key, fac.nextcyclusdate ( CASE WHEN di.ins_srtcontrole_mode = 0 THEN dsc.ins_deelsrtcontrole_datum_org ELSE dsc.ins_deelsrtcontrole_datum END, di.ins_srtcontrole_mode, COALESCE (xcp.ins_srtcontroledl_xcp_eenheid, di.ins_srtcontrole_eenheid), COALESCE (xcp.ins_srtcontroledl_xcp_periode, di.ins_srtcontrole_periode), COALESCE (xcp.ins_srtcontroledl_xcp_bits, di.ins_srtcontrole_bits), 1) inspectie_next, di.ins_srtcontrole_omschrijving FROM ins_deelsrtcontrole dsc, defined_inspect di, ins_srtcontroledl_xcp xcp WHERE dsc.ins_deelsrtcontrole_status IN (5, 6) AND di.ins_deel_key = dsc.ins_deel_key AND di.ins_srtcontrole_key = dsc.ins_srtcontrole_key AND di.ins_srtcontrole_key = xcp.ins_srtcontrole_key(+) AND di.ins_deel_key = xcp.ins_deel_key(+) AND (xcp.ins_srtcontroledl_xcp_eind(+) IS NULL OR xcp.ins_srtcontroledl_xcp_eind(+) > TRUNC (SYSDATE, 'DD')) ORDER BY inspectie_next) WHERE rn = 1) din WHERE d.ins_deel_module = 'INS' AND d.ins_deel_verwijder IS NULL AND d.ins_deel_parent_key IS NULL AND (d.ins_deel_vervaldatum IS NULL OR d.ins_deel_vervaldatum > TRUNC (SYSDATE)) AND d.ins_srtdeel_key = sd.ins_srtdeel_key AND sd.ins_srtgroep_key = sg.ins_srtgroep_key AND d.ins_alg_locatie_key = l.alg_locatie_key AND d.ins_deel_key = din.ins_deel_key AND din.inspectie_next < TRUNC (SYSDATE) GROUP BY l.alg_locatie_email) x, fac_srtnotificatie sn WHERE sn.fac_srtnotificatie_code = 'CUST02'; CREATE OR REPLACE VIEW LOGI_V_RAP_MLDINSRES_QRC ( FCLT_F_DISCIPLINE, FCLT_F_SOORTMELDING, FCLT_F_LOCATIE, FCLT_F_GEBOUW, FCLT_F_VERDIEPING, PLAATS, RUIMTE_KEY, RUIMTEFUNCTIE, FCLT_F_OBJECTDISCIPLINE, FCLT_F_OBJECTGROEP, OBJECTSOORT_KEY, FCLT_F_OBJECTSOORT, OBJECTSOORT_CODE, DEEL_KEY, DEEL_OMSCHRIJVING, DEEL_UPPER, HIDE_F_BOOKMARK_ID, VARIABELE ) AS SELECT md.ins_discipline_omschrijving, msd.mld_stdmelding_omschrijving, l.alg_locatie_omschrijving, o.alg_gebouw_omschrijving, o.alg_verdieping_omschrijving, o.alg_plaatsaanduiding plaats, d.ins_alg_ruimte_key ruimte_key, sr.alg_srtruimte_omschrijving, disc.ins_discipline_omschrijving, sg.ins_srtgroep_omschrijving, sd.ins_srtdeel_key, sd.ins_srtdeel_omschrijving, sd.ins_srtdeel_code, d.ins_deel_key, d.ins_deel_omschrijving, d.ins_deel_upper, b.fac_bookmark_id, 'INS_KEY' FROM (SELECT DECODE ( INSTR ( SUBSTR ( UPPER (fac_bookmark_query), INSTR (UPPER (fac_bookmark_query), 'STDM_KEY=')), '&'), 0, SUBSTR ( SUBSTR ( UPPER (fac_bookmark_query), INSTR (UPPER (fac_bookmark_query), 'STDM_KEY=')), 10), SUBSTR ( SUBSTR ( UPPER (fac_bookmark_query), INSTR (UPPER (fac_bookmark_query), 'STDM_KEY=')), 10, INSTR ( SUBSTR ( UPPER (fac_bookmark_query), INSTR (UPPER (fac_bookmark_query), 'STDM_KEY=')), '&') - 10)) stdm_key, fac_bookmark_id FROM fac_bookmark WHERE TRUNC (fac_bookmark_aanmaak) >= TO_DATE ('10062013', 'ddmmyyyy') AND UPPER (fac_bookmark_path) = 'APPL/PDA/MELDING.ASP' AND INSTR (UPPER (fac_bookmark_query), 'STDM_KEY') > 0) b, -- stdm_key-bookmarks (SELECT sm.mld_ins_discipline_key, sm.mld_stdmelding_key, sm.mld_stdmelding_omschrijving, si.ins_srtinstallatie_key ins_srtdeel_key FROM mld_stdmelding sm, mld_stdmelding_srtinst si WHERE sm.mld_stdmelding_key = si.mld_stdmelding_key AND sm.mld_stdmelding_verwijder IS NULL AND si.ins_srtinstallatie_niveau = 'S' UNION ALL SELECT sm.mld_ins_discipline_key, sm.mld_stdmelding_key, sm.mld_stdmelding_omschrijving, sd.ins_srtdeel_key FROM mld_stdmelding sm, mld_stdmelding_srtinst si, ins_srtdeel sd WHERE sm.mld_stdmelding_key = si.mld_stdmelding_key AND sm.mld_stdmelding_verwijder IS NULL AND si.ins_srtinstallatie_niveau = 'G' AND si.ins_srtinstallatie_key = sd.ins_srtgroep_key UNION ALL SELECT sm.mld_ins_discipline_key, sm.mld_stdmelding_key, sm.mld_stdmelding_omschrijving, sd.ins_srtdeel_key FROM mld_stdmelding sm, mld_stdmelding_srtinst si, ins_srtgroep sg, ins_srtdeel sd WHERE sm.mld_stdmelding_key = si.mld_stdmelding_key AND sm.mld_stdmelding_verwijder IS NULL AND si.ins_srtinstallatie_niveau = 'D' AND si.ins_srtinstallatie_key = sg.ins_discipline_key AND sg.ins_srtgroep_key = sd.ins_srtgroep_key) msd, -- object-meldingen mld_discipline md, ins_v_aanwezigdeel d, ins_srtdeel sd, ins_srtgroep sg, ins_discipline disc, ins_v_alg_overzicht o, alg_locatie l, alg_ruimte r, alg_srtruimte sr WHERE fac.safe_to_number (b.stdm_key) = msd.mld_stdmelding_key AND msd.mld_ins_discipline_key = md.ins_discipline_key AND msd.ins_srtdeel_key = d.ins_srtdeel_key AND d.ins_alg_ruimte_type IN ('T', 'R', 'W') AND d.ins_deel_parent_key IS NULL AND d.ins_srtdeel_key = sd.ins_srtdeel_key AND sd.ins_srtgroep_key = sg.ins_srtgroep_key AND sg.ins_discipline_key = disc.ins_discipline_key AND d.ins_alg_ruimte_key = o.alg_onroerendgoed_keys AND d.ins_alg_ruimte_type = o.alg_onroerendgoed_type AND d.ins_alg_locatie_key = o.alg_locatie_key -- redundant? AND o.alg_locatie_key = l.alg_locatie_key AND d.ins_alg_ruimte_key = r.alg_ruimte_key AND r.alg_srtruimte_key = sr.alg_srtruimte_key(+); CREATE OR REPLACE VIEW LOGI_V_RAP_RUIMINSRES_QRC ( FCLT_F_LOCATIE, FCLT_F_GEBOUW, FCLT_F_VERDIEPING, FCLT_F_RUIMTEFUNCTIE, PLAATS, RUIMTE_KEY, HIDE_F_BOOKMARK_ID, VARIABELE ) AS SELECT l.alg_locatie_omschrijving, o.alg_gebouw_omschrijving, o.alg_verdieping_omschrijving, sr.alg_srtruimte_omschrijving, o.alg_plaatsaanduiding plaats, r.alg_ruimte_key ruimte_key, b.fac_bookmark_id, 'RUIMTE_KEY' FROM fac_bookmark b, alg_v_aanwezigruimte r, alg_srtruimte sr, ins_v_alg_overzicht o, alg_locatie l WHERE UPPER (b.fac_bookmark_naam) LIKE '%SANI%' AND UPPER (b.fac_bookmark_path) = 'APPL/PDA/MELDING.ASP' AND r.alg_srtruimte_key = sr.alg_srtruimte_key(+) AND r.alg_ruimte_key = o.alg_onroerendgoed_keys AND o.alg_onroerendgoed_type = 'R' AND o.alg_locatie_key = l.alg_locatie_key AND sr.alg_srtruimte_key IN ('47', '48', '49', '84', '85', '101', '105'); CREATE OR REPLACE VIEW LOGI_V_RAP_MEETING_QRC ( FCLT_F_LOCATIE, FCLT_F_GEBOUW, FCLT_F_VERDIEPING, FCLT_F_RUIMTEFUNCTIE, PLAATS, RUIMTE_KEY, HIDE_F_BOOKMARK_ID, VARIABELE ) AS SELECT l.alg_locatie_omschrijving, o.alg_gebouw_omschrijving, o.alg_verdieping_omschrijving, sr.alg_srtruimte_omschrijving, o.alg_plaatsaanduiding plaats, r.alg_ruimte_key ruimte_key, b.fac_bookmark_id, 'RUIMTE_KEY' FROM fac_bookmark b, alg_v_aanwezigruimte r, alg_srtruimte sr, ins_v_alg_overzicht o, alg_locatie l WHERE UPPER (b.fac_bookmark_naam) LIKE '%MEETING%' AND UPPER (b.fac_bookmark_path) = 'APPL/RES/MELDING.ASP' AND r.alg_srtruimte_key = sr.alg_srtruimte_key(+) AND r.alg_ruimte_key = o.alg_onroerendgoed_keys AND o.alg_onroerendgoed_type = 'R' AND o.alg_locatie_key = l.alg_locatie_key AND sr.alg_srtruimte_key = '44'; CREATE OR REPLACE VIEW LOGI_V_RAP_MEETING_RES_QRC ( fclt_f_locatie, fclt_f_gebouw, fclt_f_verdieping, plaats, ruimte_key, ruimtefunctie, hide_f_bookmark_id, variabele ) AS SELECT l.alg_locatie_omschrijving, o.alg_gebouw_omschrijving, o.alg_verdieping_omschrijving, rr.res_ruimte_nr plaats, rar.res_ruimte_key ruimte_key, sr.alg_srtruimte_omschrijving, b.fac_bookmark_id, 'RES_RUIMTE_KEY' FROM fac_bookmark b, res_ruimte rr, ( SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key FROM res_alg_ruimte WHERE res_alg_ruimte_verwijder IS NULL GROUP BY res_ruimte_key) rar, alg_ruimte r, alg_srtruimte sr, ins_v_alg_overzicht o, alg_locatie l WHERE UPPER (b.fac_bookmark_naam) LIKE '%MEETING%' AND UPPER (b.fac_bookmark_path) = 'APPL/PDA/RESERVERINGEN.ASP' AND rr.res_ruimte_key = rar.res_ruimte_key AND rar.alg_ruimte_key = r.alg_ruimte_key AND r.alg_srtruimte_key = sr.alg_srtruimte_key(+) AND r.alg_ruimte_key = o.alg_onroerendgoed_keys AND o.alg_onroerendgoed_type = 'R' AND o.alg_locatie_key = l.alg_locatie_key AND sr.alg_srtruimte_key = '44'; /* UNION ALL SELECT 'Melding op object', l.alg_locatie_omschrijving, o.alg_gebouw_omschrijving, o.alg_verdieping_omschrijving, o.alg_plaatsaanduiding plaats, NULL ruimte_key, sr.alg_srtruimte_omschrijving, disc.ins_discipline_omschrijving, sg.ins_srtgroep_omschrijving, sd.ins_srtdeel_key, sd.ins_srtdeel_omschrijving, sd.ins_srtdeel_code, d.ins_deel_key, d.ins_deel_omschrijving, d.ins_deel_upper, b.fac_bookmark_id, 'INS_KEY' FROM fac_bookmark b, ins_v_aanwezigdeel d, ins_srtdeel sd, ins_srtgroep sg, ins_discipline disc, ins_v_alg_overzicht o, alg_locatie l, alg_ruimte r, alg_srtruimte sr WHERE TRUNC (b.fac_bookmark_aanmaak) = TO_DATE ('10062013', 'ddmmyyyy') AND UPPER (b.fac_bookmark_naam) LIKE '%GENERIEK%' AND UPPER (b.fac_bookmark_path) = 'APPL/PDA/INS_DEEL.ASP' AND d.ins_alg_ruimte_type IN ('T', 'R', 'W') AND d.ins_deel_parent_key IS NULL AND d.ins_srtdeel_key = sd.ins_srtdeel_key AND sd.ins_srtgroep_key = sg.ins_srtgroep_key AND sg.ins_discipline_key = disc.ins_discipline_key AND d.ins_alg_ruimte_key = o.alg_onroerendgoed_keys AND d.ins_alg_ruimte_type = o.alg_onroerendgoed_type AND d.ins_alg_locatie_key = o.alg_locatie_key -- redundant? AND o.alg_locatie_key = l.alg_locatie_key AND d.ins_alg_ruimte_key = r.alg_ruimte_key AND r.alg_srtruimte_key = sr.alg_srtruimte_key(+); UNION ALL SELECT 'Melding op ruimte', l.alg_locatie_omschrijving, o.alg_gebouw_omschrijving, o.alg_verdieping_omschrijving, o.alg_plaatsaanduiding plaats, r.alg_ruimte_key ruimte_key, sr.alg_srtruimte_omschrijving, NULL ins_discipline_omschrijving, NULL ins_srtgroep_omschrijving, NULL ins_srtdeel_key, NULL ins_srtdeel_omschrijving, NULL ins_srtdeel_code, NULL ins_deel_key, NULL ins_deel_omschrijving, NULL ins_deel_upper, b.fac_bookmark_id, 'RUIMTE_KEY' FROM fac_bookmark b, alg_v_aanwezigruimte r, alg_srtruimte sr, ins_v_alg_overzicht o, alg_locatie l WHERE TRUNC (b.fac_bookmark_aanmaak) = TO_DATE ('10062013', 'ddmmyyyy') AND UPPER (b.fac_bookmark_naam) LIKE '%GENERIEK%' AND UPPER (b.fac_bookmark_path) = 'APPL/PDA/MELDING.ASP' AND INSTR (UPPER (fac_bookmark_query), 'STDM_KEY') = 0 AND r.alg_srtruimte_key = sr.alg_srtruimte_key(+) AND r.alg_ruimte_key = o.alg_onroerendgoed_keys AND o.alg_onroerendgoed_type = 'R' AND o.alg_locatie_key = l.alg_locatie_key UNION ALL SELECT 'Melding op gebouw', l.alg_locatie_omschrijving, g.alg_gebouw_omschrijving, NULL alg_verdieping_omschrijving, l.alg_locatie_code || '-' || g.alg_gebouw_code plaats, g.alg_gebouw_key ruimte_key, sg.alg_srtgebouw_omschrijving, NULL ins_discipline_omschrijving, NULL ins_srtgroep_omschrijving, NULL ins_srtdeel_key, NULL ins_srtdeel_omschrijving, NULL ins_srtdeel_code, NULL ins_deel_key, NULL ins_deel_omschrijving, NULL ins_deel_upper, b.fac_bookmark_id, 'GEBOUW_KEY' FROM fac_bookmark b, alg_v_aanweziggebouw g, alg_v_aanwezigsrtgebouw sg, alg_locatie l WHERE TRUNC (b.fac_bookmark_aanmaak) = TO_DATE ('30012014', 'ddmmyyyy') AND UPPER (b.fac_bookmark_naam) LIKE '%GENERIEK%' AND UPPER (b.fac_bookmark_path) = 'APPL/PDA/MELDING.ASP' AND INSTR (UPPER (fac_bookmark_query), 'STDM_KEY') = 0 AND g.alg_srtgebouw_key = sg.alg_srtgebouw_key(+) AND g.alg_locatie_key = l.alg_locatie_key UNION ALL -- Reserveerbare ruimtes 50=Gemeentehuis SELECT 'Reserveer ruimte', l.alg_locatie_omschrijving, o.alg_gebouw_omschrijving, o.alg_verdieping_omschrijving, rr.res_ruimte_nr plaats, rar.res_ruimte_key ruimte_key, sr.alg_srtruimte_omschrijving, NULL ins_discipline_omschrijving, NULL ins_srtgroep_omschrijving, NULL ins_srtdeel_key, NULL ins_srtdeel_omschrijving, NULL ins_srtdeel_code, NULL ins_deel_key, NULL ins_deel_omschrijving, NULL ins_deel_upper, b.fac_bookmark_id, 'RES_RUIMTE_KEY' FROM fac_bookmark b, res_ruimte rr, ( SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key FROM res_alg_ruimte WHERE res_alg_ruimte_verwijder IS NULL GROUP BY res_ruimte_key) rar, alg_ruimte r, alg_srtruimte sr, ins_v_alg_overzicht o, alg_locatie l WHERE TRUNC (b.fac_bookmark_aanmaak) = TO_DATE ('10062013', 'ddmmyyyy') AND UPPER (b.fac_bookmark_naam) LIKE '%GENERIEK%' AND UPPER (b.fac_bookmark_path) = 'APPL/PDA/RESERVERINGEN.ASP' AND rr.res_discipline_key != 62 -- OV kaart AND rr.res_ruimte_key = rar.res_ruimte_key AND rar.alg_ruimte_key = r.alg_ruimte_key AND r.alg_srtruimte_key = sr.alg_srtruimte_key(+) AND r.alg_ruimte_key = o.alg_onroerendgoed_keys AND o.alg_onroerendgoed_type = 'R' AND o.alg_locatie_key = l.alg_locatie_key AND l.alg_locatie_key = 50; */ ------ 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