-- -- $Id$ -- -- Script containing customer specific sql statements for the CWTD database DEFINE thisfile = 'CWTD.SQL' DEFINE dbuser = '^CWTD' 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 ------ -- -- Personen import -- CREATE OR REPLACE PROCEDURE cwtd_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_field VARCHAR2 (100); -- Import field v_fielddelimitor VARCHAR2 (1); -- Field seperator v_errormsg VARCHAR (200); 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_perslid_naam VARCHAR2 (1000); -- v_perslid_tussenvoegsel VARCHAR2 (1000); -- v_perslid_partn_tussen VARCHAR2 (1000); -- v_perslid_partn_naam VARCHAR2 (1000); -- v_perslid_voorletters VARCHAR2 (1000); v_perslid_voornaam VARCHAR2 (1000); -- v_perslid_fullname VARCHAR2 (1000); v_perslid_telefoonnr VARCHAR2 (1000); -- v_perslid_mobiel VARCHAR2 (1000); v_perslid_oslogin VARCHAR2 (1000); v_perslid_email VARCHAR2 (1000); v_srtperslid_omschrijving VARCHAR2 (1000); v_perslid_nr VARCHAR2 (1000); v_perslid_geslacht VARCHAR2 (1000); v_perslid_ingangsdatum VARCHAR2 (1000); v_perslid_einddatum VARCHAR2 (1000); v_locatie_omschrijving VARCHAR2 (1000); v_locatie_code VARCHAR2 (1000); v_ruimte_nr VARCHAR2 (1000); v_dummy VARCHAR2 (1000); header_found BOOLEAN; v_controle_res VARCHAR2(30); v_old_persnr VARCHAR2 (30); CURSOR c IS SELECT fac_usrdata_omschr, prs_perslid_nr FROM cwtd_imp_persoon cip, fac_usrdata u WHERE UPPER(cip.prs_perslid_naam) LIKE UPPER(u.fac_usrdata_omschr) || ' ' || '%' AND fac_usrtab_key = 81 ORDER BY cip.prs_perslid_nr, LENGTH (fac_usrdata_omschr) DESC; -- 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 header_found := FALSE; v_fielddelimitor := ';'; v_errormsg := ''; v_old_persnr := 'QueQeLeQue'; 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 cwtd_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); -- Carlson UID fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_voornaam); -- First Name fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_naam); -- Last Name fac.imp_getfield (v_newline, v_fielddelimitor, v_srtperslid_omschrijving); -- Job Name fac.imp_getfield (v_newline, v_fielddelimitor, v_afdeling_omschrijving); -- Department Name fac.imp_getfield (v_newline, v_fielddelimitor, v_locatie_omschrijving); -- Location Name fac.imp_getfield (v_newline, v_fielddelimitor, v_afdeling_naam); -- Cost Center Numnber fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_email); -- Email Address fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_geslacht); -- Gender fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_telefoonnr); -- Work Phone fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_ingangsdatum); v_perslid_ingangsdatum := ''; fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_einddatum); v_perslid_einddatum := ''; v_perslid_oslogin := ''; -- Skip until the header is found IF (v_perslid_nr = 'Carlson UID' AND v_perslid_voornaam = 'First Name' AND v_perslid_naam = 'Last Name' AND v_srtperslid_omschrijving = 'Job Name' AND v_afdeling_omschrijving = 'Department Name' AND v_locatie_omschrijving = 'Location Name' AND v_afdeling_naam = 'Cost Center Numnber' AND v_perslid_email = 'Email Address' AND v_perslid_geslacht = 'Gender' AND v_perslid_telefoonnr = 'Work Phone' -- v_perslid_voorletters IS NULL AND -- v_perslid_tussenvoegsel IS NULL AND -- v_perslid_partn_tussen IS NULL AND -- v_perslid_partn_naam IS NULL AND -- v_perslid_fullname IS NULL AND -- v_srtperslid_omschrijving IS NULL AND -- v_perslid_mobiel IS NULL AND ) THEN header_found := TRUE; ELSIF (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_geslacht := get_imp_value(v_perslid_geslacht, 10); -- v_perslid_partn_naam := get_imp_value(v_perslid_partn_naam,30); -- v_perslid_partn_tussen := get_imp_value(v_perslid_partn_tussen,15); -- v_perslid_fullname := get_imp_value(v_perslid_fullname,60); 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_afdeling_omschrijving := get_imp_value(v_afdeling_omschrijving,60); v_locatie_omschrijving := get_imp_value(v_locatie_omschrijving,30); v_srtperslid_omschrijving := get_imp_value(v_srtperslid_omschrijving,30); v_perslid_telefoonnr := get_imp_value(v_perslid_telefoonnr, 30); -- Velden met een waarde '' zijn leeg ivm privacy overwegingen INSERT INTO cwtd_imp_persoon (prs_perslid_nr ,prs_perslid_naam ,prs_perslid_voornaam ,prs_perslid_geslacht --,prs_perslid_partn_tussen --,prs_perslid_partn_naam --,prs_perslid_tussenvoegsel --,prs_perslid_voorletters --,prs_perslid_fullname ,prs_perslid_telefoonnr -- ,prs_perslid_mobiel -- ,prs_perslid_oslogin ,prs_perslid_email ,prs_srtperslid_omschrijving ,prs_afdeling_naam ,prs_afdeling_omschr ,prs_perslid_ingangsdatum ,prs_perslid_einddatum ,prs_locatie_omschrijving ,cwtd_imp_persoon_aanmaak ) VALUES(v_perslid_nr ,v_perslid_naam ,v_perslid_voornaam ,DECODE (v_perslid_geslacht, 'Male', 1, 'Female', 0, NULL) --,v_perslid_partn_tussen -- ,v_perslid_partn_naam -- ,v_perslid_tussenvoegsel -- ,v_perslid_voorletters --,v_perslid_fullname ,v_perslid_telefoonnr -- ,v_perslid_mobiel --,v_perslid_oslogin ,v_perslid_email ,v_srtperslid_omschrijving ,v_afdeling_naam ,v_afdeling_omschrijving ,'' ,'' ,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; -- logging END; END IF; COMMIT; END; END LOOP; IF header_found = FALSE THEN fac.imp_writelog (p_import_key, 'E', 'Geen geldige header gevonden', ''); ELSE -- splits de achternaam in tussenvoegsels en achternaam. FOR rec IN c LOOP BEGIN IF rec.prs_perslid_nr <> v_old_persnr THEN DBMS_OUTPUT.put_line ( rec.prs_perslid_nr || '-' || rec.fac_usrdata_omschr); v_old_persnr := rec.prs_perslid_nr; UPDATE cwtd_imp_persoon cip SET prs_perslid_tussenvoegsel = rec.fac_usrdata_omschr, prs_perslid_naam = TRIM(SUBSTR (prs_perslid_naam, LENGTH (rec.fac_usrdata_omschr) + 1)) WHERE cip.prs_perslid_nr = rec.prs_perslid_nr; END IF; END; END LOOP; END IF; 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; / SHOW ERRORS; CREATE OR REPLACE PROCEDURE cwtd_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 GEBOUW c_srtgebouw_default INTEGER := 1; c_srtruimte_default INTEGER := 1; -- 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 prs_perslid_key, prs_perslid_nr FROM prs_perslid WHERE prs_perslid_nr IS NOT NULL AND prs_perslid_verwijder IS NULL AND LTRIM (prs_perslid_nr, '0') NOT IN ( SELECT LTRIM (prs_perslid_nr, '0') FROM cwtd_imp_persoon) ORDER BY 1; CURSOR c_prs_upd IS SELECT p.prs_perslid_key, lp.prs_locatie_omschrijving, lp.prs_perslid_partn_tussen, lp.prs_perslid_partn_naam, lp.prs_perslid_fullname, DECODE (lp.prs_afdeling_naam, NULL, '0000', lp.prs_afdeling_naam) prs_afdeling_naam, lp.prs_afdeling_omschr, lp.prs_perslid_naam, lp.prs_perslid_tussenvoegsel, lp.prs_perslid_voorletters, lp.prs_perslid_voornaam, lp.prs_perslid_geslacht, DECODE (lp.prs_perslid_telefoonnr, '0', NULL, lp.prs_perslid_telefoonnr) prs_perslid_telefoonnr, lp.prs_perslid_mobiel, lp.prs_perslid_oslogin, lp.prs_perslid_email, COALESCE (lp.prs_srtperslid_omschrijving, 'Onbekend') prs_srtperslid_omschrijving, lp.prs_perslid_nr, '' prs_perslid_titel, p.prs_perslid_verwijder, INSTR (lp.prs_perslid_fullname, lp.prs_perslid_naam) ind_eigen, INSTR (lp.prs_perslid_fullname, NVL (lp.prs_perslid_partn_naam, 'xxxxxx')) ind_partner FROM ( SELECT * FROM cwtd_imp_persoon) lp LEFT OUTER JOIN ( SELECT * FROM prs_perslid) p ON LTRIM (lp.prs_perslid_nr, '0') = LTRIM (p.prs_perslid_nr, '0') -- 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 ASC; v_perslid_tussenvoegsel VARCHAR2(15); v_perslid_naam VARCHAR2(30); v_per_indnaamsvoegen VARCHAR2(1); v_perslid_key NUMBER (10); v_prs_key_cnt NUMBER (10); v_srtperslid_key NUMBER (10); v_afdeling_key NUMBER (10); v_gebouw_key NUMBER (10); v_verdieping_key NUMBER (10); v_ruimte_nr VARCHAR2 (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); o_afdeling_key NUMBER (10); -- huidige (oude) afdeling l_nrkps NUMBER; v_nr_werkplek NUMBER; v_current_gebouw_key NUMBER; v_new_gebouw_key NUMBER; v_werkplek_volgnr NUMBER(10); v_werkplek_oms VARCHAR2 (60); BEGIN -- Constanten: SELECT SYSDATE, SYSDATE, SYSDATE INTO c_perslid_aanmaak, c_perslid_verwijder, c_perslid_ingangsdatum FROM DUAL; -- *** Delete *************************************************************** v_errorhint := 'Eventueel te verwijderen personen worden verwijderd '; SELECT COUNT (*) INTO v_perslid_count_fclt FROM prs_perslid WHERE prs_perslid_nr IS NOT NULL AND prs_perslid_verwijder IS NULL; SELECT COUNT (*) INTO v_perslid_count_imp FROM cwtd_imp_persoon; IF v_perslid_count_imp < 10 THEN fac.imp_writelog (p_import_key, 'E', 'Geen records gevonden om te importeren.', ''); COMMIT; RETURN; END IF; 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||']', '' ); 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 aangepast (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); v_update := FALSE; END IF; -- (oorspronkelijk overgenomen uit de CONN perman koppeling.) IF rec_prs_upd.ind_eigen = 0 THEN v_per_indnaamsvoegen := 'A'; ELSIF rec_prs_upd.ind_partner = 0 THEN v_per_indnaamsvoegen := 'X'; ELSIF rec_prs_upd.ind_partner < rec_prs_upd.ind_eigen THEN v_per_indnaamsvoegen := 'J'; ELSE v_per_indnaamsvoegen := 'G'; END IF; v_perslid_tussenvoegsel := rec_prs_upd.prs_perslid_tussenvoegsel; v_perslid_naam := rec_prs_upd.prs_perslid_naam; -- partner - eigen -- IF v_per_indnaamsvoegen = 'J' -- OR v_per_indnaamsvoegen = 'W' -- OR v_per_indnaamsvoegen = 'E' -- OR v_per_indnaamsvoegen = 'P' -- THEN -- v_perslid_tussenvoegsel := rec_prs_upd.prs_perslid_partn_tussen; -- -- IF rec_prs_upd.prs_perslid_tussenvoegsel IS NOT NULL -- THEN -- v_perslid_naam := SUBSTR (rec_prs_upd.prs_perslid_partn_naam || '-' || rec_prs_upd.prs_perslid_tussenvoegsel || ' ' || rec_prs_upd.prs_perslid_naam, 1, 30); -- ELSE -- v_perslid_naam := SUBSTR (rec_prs_upd.prs_perslid_partn_naam || '-' || rec_prs_upd.prs_perslid_naam, 1, 30); -- END IF; -- -- partner -- ELSIF v_per_indnaamsvoegen = 'A' -- THEN -- v_perslid_tussenvoegsel := rec_prs_upd.prs_perslid_partn_tussen; -- v_perslid_naam := SUBSTR (rec_prs_upd.prs_perslid_partn_naam, 1, 30); -- -- eigen - partner -- ELSIF v_per_indnaamsvoegen = 'G' -- THEN -- IF rec_prs_upd.prs_perslid_partn_tussen IS NOT NULL -- THEN -- v_perslid_naam := -- SUBSTR (rec_prs_upd.prs_perslid_naam || '-' || rec_prs_upd.prs_perslid_partn_tussen || ' ' || rec_prs_upd.prs_perslid_partn_naam, 1, 30); -- ELSE -- v_perslid_naam := SUBSTR (rec_prs_upd.prs_perslid_naam || '-' || rec_prs_upd.prs_perslid_partn_naam, 1, 30); -- END IF; -- END IF; -- Controle: PRS_PERSLID_NAAM IF v_update AND v_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 gereactiveerd 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 LTRIM(p.prs_perslid_nr, '0') LIKE LTRIM(rec_prs_upd.prs_perslid_nr, '0') 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; indien afdeling niet bestaat nieuwe toevoegen. SELECT prs_afdeling_key INTO v_afdeling_key FROM prs_afdeling WHERE prs_afdeling_naam = upper(rec_prs_upd.prs_afdeling_naam) AND prs_afdeling_verwijder is null; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO prs_kostenplaats (prs_kostenplaats_nr, prs_kostenplaats_module) values (rec_prs_upd.prs_afdeling_naam, 'PRS'); INSERT INTO prs_afdeling (prs_afdeling_naam, prs_afdeling_omschrijving, prs_kostenplaats_key, prs_bedrijf_key) VALUES ( rec_prs_upd.prs_afdeling_naam , 'Onbekend-'||rec_prs_upd.prs_afdeling_naam , ( SELECT prs_kostenplaats_key FROM prs_kostenplaats WHERE prs_kostenplaats_verwijder is null AND prs_kostenplaats_nr = rec_prs_upd.prs_afdeling_naam) , 2); -- Bepaal de afdelingskey; SELECT prs_afdeling_key INTO v_afdeling_key FROM prs_afdeling WHERE prs_afdeling_naam = upper(rec_prs_upd.prs_afdeling_naam) AND prs_afdeling_verwijder is null; 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) RETURNING prs_srtperslid_key INTO v_srtperslid_key; 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_geslacht, 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, fac_profiel_key ) VALUES (v_perslid_naam, v_perslid_tussenvoegsel, 'PRS', rec_prs_upd.prs_perslid_voorletters, rec_prs_upd.prs_perslid_voornaam, rec_prs_upd.prs_perslid_geslacht, 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, v_afdeling_key, c_perslid_aanmaak, 21 ); fac.imp_writelog (p_import_key, 'C', 'Nieuw persoon toegevoegd', 'Naam/persoonsnr: ' || v_perslid_naam || '/' || rec_prs_upd.prs_perslid_nr ); ELSE v_errormsg := 'Persoon kan niet worden gewijzigd'; UPDATE prs_perslid SET prs_perslid_naam = v_perslid_naam, prs_perslid_tussenvoegsel = v_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 = rec_prs_upd.prs_perslid_telefoonnr, prs_perslid_geslacht = rec_prs_upd.prs_perslid_geslacht, prs_perslid_titel = rec_prs_upd.prs_perslid_titel, prs_srtperslid_key = v_srtperslid_key, prs_afdeling_key = v_afdeling_key, prs_perslid_verwijder = NULL, prs_perslid_email = rec_prs_upd.prs_perslid_email WHERE prs_perslid_key = rec_prs_upd.prs_perslid_key AND ( prs_perslid_naam != v_perslid_naam OR NVL (prs_perslid_tussenvoegsel, '-') != NVL (v_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 != v_afdeling_key OR prs_perslid_email != rec_prs_upd.prs_perslid_email OR NVL (prs_perslid_geslacht, 9) != NVL (rec_prs_upd.prs_perslid_geslacht, 9) OR rec_prs_upd.prs_perslid_verwijder IS NOT NULL ); END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')'; v_errorhint := to_char(v_afdeling_key)||'|'||rec_prs_upd.prs_afdeling_naam||'|xxx {' || v_errormsg || '}; personeelsnummer: ' || rec_prs_upd.prs_perslid_nr; 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_gebouw_key SELECT alg_gebouw_key INTO v_current_gebouw_key FROM prs_v_werkplekperslid_gegevens pwg , alg_gebouw g WHERE prs_perslid_key = rec_prs_upd.prs_perslid_key AND g.alg_gebouw_upper = pwg.alg_gebouw_upper AND g.alg_gebouw_verwijder IS NULL; -- bepaal nieuwe alg_gebouw_key SELECT g.alg_gebouw_key INTO v_new_gebouw_key FROM fac_usrdata ud, alg_gebouw g WHERE ud.fac_usrtab_key = c_usrtab_key AND ud.fac_usrdata_omschr = g.alg_gebouw_code AND ud.fac_usrdata_code = rec_prs_upd.prs_afdeling_naam AND g.alg_gebouw_verwijder IS NULL; -- indien gelijk dan werkplek niet updaten. v_update := (v_current_gebouw_key != v_new_gebouw_key); EXCEPTION WHEN OTHERS THEN fac.imp_writelog (p_import_key, 'I', v_errormsg, 'huidige of nieuwe alg_gebouw_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_afdeling_naam 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 LTRIM (prs_perslid_nr, '0') = LTRIM (rec_prs_upd.prs_perslid_nr, '0') 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 g.alg_gebouw_key INTO v_gebouw_key FROM fac_usrdata ud, alg_gebouw g WHERE ud.fac_usrtab_key = c_usrtab_key AND ud.fac_usrdata_omschr = g.alg_gebouw_code AND ud.fac_usrdata_code = rec_prs_upd.prs_afdeling_naam AND g.alg_gebouw_verwijder IS NULL; EXCEPTION WHEN OTHERS THEN v_update := FALSE; END; IF NOT v_update THEN v_errorhint := 'Onbekende Gebouw-omschrijving ' || rec_prs_upd.prs_afdeling_naam || '; personeelsnummer: ' || rec_prs_upd.prs_perslid_nr; fac.imp_writelog (p_import_key, 'I', v_errormsg, v_errorhint); ELSE 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_nr, alg_ruimte_key INTO v_ruimte_nr, 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_nr, alg_ruimte_key INTO v_ruimte_nr, 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; -- *** IMPLICIETE WERKPLEK (NIEUW) ********************************************* -- Persoon krijgt wp op fictieve of echte ruimte. v_errorhint := 'Fout bij bepalen vrije werkplek'; SELECT COUNT ( * ) 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_werkplek_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_werkplek_key, 100); ELSE v_errorhint := 'Fout bij bepalen nieuwe werkplek'; SELECT COALESCE (MAX (w.prs_werkplek_volgnr), 0) + 1 INTO v_werkplek_volgnr FROM prs_werkplek w WHERE w.prs_alg_ruimte_key = v_ruimte_key; v_werkplek_oms := v_ruimte_nr || '/' || TO_CHAR (v_werkplek_volgnr); v_errorhint := 'Fout bij toevoegen nieuwe werkplek'; INSERT INTO prs_werkplek (prs_werkplek_module, prs_werkplek_volgnr, prs_werkplek_omschrijving, prs_alg_ruimte_key) VALUES ('PRR', v_werkplek_volgnr, v_werkplek_oms, v_ruimte_key) RETURNING prs_werkplek_key INTO v_werkplek_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_werkplek_key, 100); END IF; ---- *** EXPLICIETE WERKPLEK (OUD) *********************************************** -- 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_verwijder IS NULL -- 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_verwijder IS NULL -- 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; -- gebouw END IF; -- afdeling 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 || ' gebouw:' || rec_prs_upd.prs_afdeling_naam || ' ' || 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 VIEW CWTD_V_NOTI_CNTREMINDER (CODE, SENDER, RECEIVER, TEXT, KEY, PAR1, PAR2, XKEY) AS SELECT '', '', 7282, '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 trunc(SYSDATE) = trunc(cnt.cnt_getrappeldatum(c.cnt_contract_key)); -- backoffice bezoekers rapport (tbv notificatie naar gebouwadres) CREATE OR REPLACE VIEW CWTD_V_RAP_BEZBO ( datum, van, tot, bezoeker, bedrijf, Parkeerplaats, Contactpersoon, Gastheer_vrouw, Telefoon, Ruimte, Actie, Opmerking, Gebouw_code, extra_key ) AS SELECT TO_CHAR (bez_afspraak_datum, 'DD-MM-YYYY') datum, TO_CHAR (bez_afspraak_datum, 'HH24:MI') van, TO_CHAR (bez_afspraak_eind, 'HH24:MI') tot, bez_afspraak_naam Bezoeker, bez_afspraak_bedrijf Bedrijf, NVL2 (rd.res_rsv_deel_key, 'Ja', NULL) parkeer, p.prs_perslid_naam_full Contactpersoon, bez_afspraak_gastheer Gastheer_vrouw, COALESCE (p2.prs_perslid_telefoonnr, p2.prs_perslid_mobiel), aog.alg_gebouw_code || ' ' || aog.alg_verdieping_code || ' ' || aog.alg_ruimte_nr ruimte, bez_actie_omschrijving actie, ba.bez_afspraak_opmerking opmerking, aog.alg_gebouw_code, aog.alg_gebouw_key FROM bez_afspraak ba, bez_bezoekers bb, bez_actie bac, alg_v_allonrgoed_gegevens aog, res_rsv_deel rd, prs_v_perslid_fullnames_all p, prs_perslid p2 WHERE TRUNC (bez_afspraak_datum) = TRUNC (SYSDATE + 1) AND bb.bez_afspraak_key = ba.bez_afspraak_key AND ba.bez_actie_key = bac.bez_actie_key AND aog.alg_onroerendgoed_keys = ba.alg_onrgoed_keys AND bb.bez_bezoekers_key = rd.bez_bezoekers_key(+) AND ba.bez_afspraak_contact_key = p.prs_perslid_key AND p2.prs_perslid_key(+) = ba.bez_afspraak_host_key; -- Lastminute afspraken ook notificeren op de dag zelf -- Key 14 = BEZMUT CREATE OR REPLACE FORCE VIEW CWTD_V_NOTI_BEZBO_LASTMIN ( CODE, SENDER, RECEIVER, TEXT, KEY, XKEY, XEMAIL, XMOBILE ) AS SELECT 'BEZMUT', NULL, NULL, 'Last minute bezoekerafspraak toegevoegd: ' || g.alg_gebouw_omschrijving, ba.bez_afspraak_key, null, g.alg_gebouw_email, NULL FROM bez_afspraak ba, alg_v_allonrgoed_gegevens aog, alg_gebouw g, fac_tracking tr WHERE TRUNC (bez_afspraak_datum) = TRUNC (SYSDATE) AND aog.alg_onroerendgoed_keys = ba.alg_onrgoed_keys AND g.alg_gebouw_key = aog.alg_gebouw_key AND g.alg_gebouw_email IS NOT NULL AND tr.fac_tracking_refkey = ba.bez_afspraak_key AND tr.fac_srtnotificatie_key = 14 AND tr.fac_tracking_datum > sysdate -1/24; -- Stuur elke dag een overzicht van bezoekers naar gebouwadres CREATE OR REPLACE VIEW CWTD_V_NOTI_BEZBO ( CODE, SENDER, RECEIVER, TEXT, KEY, XKEY, XEMAIL, XMOBILE ) AS SELECT 'CUST01', NULL, NULL, 'Bezoekers overzicht ' || g.alg_gebouw_omschrijving || ' ' || TRUNC (SYSDATE + 1), (SELECT fac_usrrap_key FROM fac_usrrap WHERE fac_usrrap_view_name = 'CWTD_V_RAP_BEZBO'), g.alg_gebouw_key, g.alg_gebouw_email, NULL FROM alg_gebouw g WHERE g.alg_gebouw_email IS NOT NULL; -- CWTD#36142 CREATE OR REPLACE PROCEDURE cwtd_processemail ( pfrom IN VARCHAR2, pto IN VARCHAR2, psubject IN VARCHAR2, pbody IN VARCHAR2, psessionid IN VARCHAR2, puserkey IN NUMBER DEFAULT NULL) AS v_count NUMBER; sender prs_perslid.prs_perslid_key%TYPE; kostenplaats prs_afdeling.prs_kostenplaats_key%TYPE; newkey mld_melding.mld_melding_key%TYPE; defaultstdmelding fac_setting.fac_setting_default%TYPE; kkey mld_kenmerk.mld_kenmerk_key%TYPE; errormsg fac_result.fac_result_waarde%TYPE; BEGIN -- Valideer de sender in pfrom: kennen we deze? SELECT COUNT(*) INTO v_count FROM prs_perslid p, prs_afdeling d WHERE p.prs_afdeling_key = d.prs_afdeling_key AND UPPER (prs_perslid_email) = UPPER (pfrom); -- Bekende afzender --> dat is de melder IF (v_count = 1) THEN SELECT prs_perslid_key, d.prs_kostenplaats_key INTO sender, kostenplaats FROM prs_perslid p, prs_afdeling d WHERE p.prs_afdeling_key = d.prs_afdeling_key AND UPPER (prs_perslid_email) = UPPER (pfrom); -- Geen bekende afzender --> _FACILITOR ELSE SELECT prs_perslid_key, d.prs_kostenplaats_key INTO sender, kostenplaats FROM prs_perslid p, prs_afdeling d WHERE p.prs_afdeling_key = d.prs_afdeling_key AND prs_perslid_key = 4; END IF; CASE WHEN UPPER (pto) LIKE 'MELDINGENFMBENELUX@%' THEN defaultstdmelding := fac.getsetting ('defaultstdmelding'); -- suggested extensions: -- check for MLDUSE-write autorisations -- parse the subject to find an appropriate stdmelding, if uniquely possible -- append (as a note?) to an existing melding if #key is found in the subject BEGIN INSERT INTO mld_melding (mld_melding_module, mld_meldbron_key, mld_melding_datum, mld_melding_onderwerp, mld_melding_omschrijving, mld_melding_status, mld_stdmelding_key, mld_alg_locatie_key, prs_perslid_key, prs_perslid_key_voor, prs_kostenplaats_key, mld_melding_spoed) VALUES ('MLD', 4, -- email SYSDATE, SUBSTR ( psubject, 1, 60), SUBSTR ( REPLACE ( SUBSTR (pbody, 1, 4000), CHR (13) || CHR (10) || CHR (13) || CHR (10), CHR (13) || CHR (10)), 1, 4000), -- verwijder onnodige witregels NULL, defaultstdmelding, 1062, -- Brussels Woluwe HQ sender, sender, kostenplaats, 3) RETURNING mld_melding_key INTO newkey; -- find the lowest volgnummer of the flexfield of type folder. SELECT MIN (mld_kenmerk_key) INTO kkey FROM mld_kenmerk k, mld_srtkenmerk sk, mld_stdmelding std, ins_tab_discipline d WHERE mld_srtkenmerk_kenmerktype = 'M' AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key AND std.mld_stdmelding_key = defaultstdmelding AND std.mld_ins_discipline_key = d.ins_discipline_key AND ( (k.mld_kenmerk_niveau = 'S' AND k.mld_stdmelding_key = std.mld_stdmelding_key) OR (k.mld_kenmerk_niveau = 'D' AND k.mld_stdmelding_key = d.ins_discipline_key) OR (k.mld_kenmerk_niveau = 'T' AND k.mld_stdmelding_key = d.ins_srtdiscipline_key) ) AND k.mld_kenmerk_verwijder IS NULL AND NOT EXISTS ( SELECT mld_kenmerk_volgnummer FROM mld_kenmerk k1, mld_srtkenmerk sk1, mld_stdmelding std1, ins_tab_discipline d1 WHERE sk1.mld_srtkenmerk_kenmerktype = 'M' AND sk1.mld_srtkenmerk_key = k1.mld_srtkenmerk_key AND std1.mld_stdmelding_key = defaultstdmelding AND std1.mld_ins_discipline_key = d1.ins_discipline_key AND ( (k1.mld_kenmerk_niveau = 'S' AND k1.mld_stdmelding_key = std1.mld_stdmelding_key) OR (k1.mld_kenmerk_niveau = 'D' AND k1.mld_stdmelding_key = d1.ins_discipline_key) OR (k1.mld_kenmerk_niveau = 'T' AND k1.mld_stdmelding_key = d1.ins_srtdiscipline_key) ) AND k1.mld_kenmerk_verwijder IS NULL AND k1.mld_kenmerk_volgnummer > k.mld_kenmerk_volgnummer); IF kkey IS NOT NULL THEN INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'kenmerkpath', 'MLD\M' || to_char( TRUNC(newkey/1000), 'FM0000') || '___\M' || newkey || '\' || kkey || '\'); END IF; mld.setmeldingstatus (newkey, 2, sender); INSERT INTO fac_result ( fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || newkey); END; ELSE NULL; END CASE; IF errormsg IS NOT NULL THEN INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'errormsg', errormsg); END IF; EXCEPTION WHEN OTHERS THEN fac.writelog ( 'PROCESSEMAIL', 'W', 'Mail kon niet verwerkt worden afzender: ' || pfrom || '[' || errormsg || ']', 'OTHERS (error ' || SQLCODE || '/' || SUBSTR (SQLERRM, 1, 100) || ')'); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'errormsg', 'Database fout - Neem contact op met uw systeembeheerder'); END cwtd_processemail; / ------ 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