-- -- $Id$ -- -- Script containing customer specific db-configuration for VVGR. DEFINE thisfile = 'VVGR.SQL' DEFINE dbuser = '^VVGR' SET ECHO ON SET DEFINE ON COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT; COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT; WHENEVER SQLERROR CONTINUE; SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL; SPOOL &fcltlogfile WHENEVER SQLERROR EXIT; SELECT adm.checkscriptcust('&dbuser') AS fcltcusttxt FROM DUAL; WHENEVER SQLERROR CONTINUE; --------------------------------------- PROMPT &fcltcusttxt --------------------------------------- SET DEFINE OFF ------ payload begin ------ CREATE OR REPLACE VIEW vvgr_v_rap_import_log ( fclt_f_applicatie, datum, fclt_f_status, omschrijving, hint ) AS SELECT COALESCE (fac_import_app_code, imp_log_applicatie), TO_CHAR (imp_log_datum, 'dd-mm-yyyy hh24:mi'), imp_log_status, imp_log_omschrijving, imp_log_hint FROM imp_log il1, fac_import fi1, fac_import_app fia1 WHERE il1.fac_import_key = fi1.fac_import_key(+) AND fi1.fac_import_app_key = fia1.fac_import_app_key(+) AND NOT EXISTS (SELECT 1 FROM imp_log il2, fac_import fi2 WHERE il2.fac_import_key = fi2.fac_import_key AND fi2.fac_import_app_key = fi1.fac_import_app_key AND il2.fac_import_key > il1.fac_import_key); CREATE OR REPLACE PROCEDURE vvgr_import_prs (p_import_key IN NUMBER) AS v_errormsg VARCHAR2 (1000) := '-'; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN -- Funtie-kolom kopieren naar extra kolom 18 (= kenmerk6)! UPDATE fac_imp_file i SET i.fac_imp_file_line = i.fac_imp_file_line || ';' || SUBSTR (fac_imp_file_line, INSTR (fac_imp_file_line, ';', 1, 9) + 1, INSTR (fac_imp_file_line, ';', 1, 10) - INSTR (fac_imp_file_line, ';', 1, 9) - 1) WHERE fac_import_key = p_import_key AND fac_imp_file_index > 1; -- Functie-kolom=10 resetten (op 'XXX' want verplicht)! UPDATE fac_imp_file i SET i.fac_imp_file_line = SUBSTR (fac_imp_file_line, 1, INSTR (fac_imp_file_line, ';', 1, 9)) || '"XXX"' || SUBSTR (fac_imp_file_line, INSTR (fac_imp_file_line, ';', 1, 10)) WHERE fac_import_key = p_import_key AND fac_imp_file_index > 1; COMMIT; /* -- Afdelingscode-kolom kopieren naar extra kolom 19 (= kenmerk7)! UPDATE fac_imp_file i SET i.fac_imp_file_line = i.fac_imp_file_line || ';' || SUBSTR (fac_imp_file_line, INSTR (fac_imp_file_line, ';', 1, 14) + 1, INSTR (fac_imp_file_line, ';', 1, 15) - INSTR (fac_imp_file_line, ';', 1, 14) - 1) WHERE fac_import_key = p_import_key AND fac_imp_file_index > 1; -- Afdelingscode-kolom=15 resetten (op 'XXX' want verplicht)! UPDATE fac_imp_file i SET i.fac_imp_file_line = SUBSTR (fac_imp_file_line, 1, INSTR (fac_imp_file_line, ';', 1, 14)) || '"XXX"' || SUBSTR (fac_imp_file_line, INSTR (fac_imp_file_line, ';', 1, 15)) WHERE fac_import_key = p_import_key AND fac_imp_file_index > 1; COMMIT; */ -- Generieke import. -- De sequence array staat beschreven in PRS_PAC.SRC bij de import_perslid-PROCEDURE. -- Met Stamplaats wordt nog niets gedaan! --'%ID;Kantoornummer;Achternaam;AchternaamVoorvoegsel;Voorletters;Voornaam;Emailadres;MobielZakelijk;Geboortedatum;Functie;InternTelefoonnummer;;Geslacht;Naam;Afdeling;Functie;Uren%'); prs.import_perslid ( p_import_key, '0;0;0;0;0;0;2;3;4;6;' || '5;0;0;0;13;11;8;7;0;1;' || '10;0;0;0;0;0;9;14;15;16;' || '17;18;0;0;0;0;0;0;0;0;' || '0;0;0;0;0;0', '%ID;Kantoornummer;Achternaam;AchternaamVoorvoegsel;Voorletters;Voornaam;Emailadres;MobielZakelijk;Geboortedatum;Functie;InternTelefoonnummer;;Geslacht;Naam;Afdeling;Functie;Uren%'); -- Klantspecifieke aanpassingen. /* -- Afdeling-kolom altijd op 'VVGR' (en kenmerk7 negeren)! UPDATE fac_imp_perslid i SET i.prs_afdeling_naam = 'VVGR'; */ -- Functie-kolom volgens kenmerk6 of anders op Onbekend! UPDATE fac_imp_perslid i SET i.prs_srtperslid_omschrijving = COALESCE (SUBSTR (i.prs_kenmerk6, 1, 60), 'Onbekend') WHERE i.prs_perslid_naam IS NOT NULL; /* -- Login-kolom volgens e-mail (en eventueel niet gevuld)! UPDATE fac_imp_perslid i SET i.prs_perslid_oslogin = SUBSTR (i.prs_perslid_email, 1, 30) WHERE i.prs_perslid_naam IS NOT NULL; -- Als geen Voornaam aangeleverd, dan handmatig toegekende niet wissen. UPDATE fac_imp_perslid i SET i.prs_perslid_voornaam = (SELECT MAX (prs_perslid_voornaam) FROM prs_v_aanwezigperslid WHERE prs_perslid_nr = i.prs_perslid_nr) WHERE i.prs_perslid_voornaam IS NULL -- Aangeleverde Voornaam wint! AND EXISTS (SELECT 1 FROM prs_v_aanwezigperslid WHERE prs_perslid_voornaam IS NOT NULL AND prs_perslid_nr = i.prs_perslid_nr); -- Als geen Email aangeleverd, dan handmatig toegekende niet wissen. UPDATE fac_imp_perslid i SET i.prs_perslid_email = (SELECT MAX (prs_perslid_email) FROM prs_v_aanwezigperslid WHERE prs_perslid_nr = i.prs_perslid_nr) WHERE i.prs_perslid_email IS NULL -- Aangeleverde Email wint! AND EXISTS (SELECT 1 FROM prs_v_aanwezigperslid WHERE prs_perslid_email IS NOT NULL AND prs_perslid_nr = i.prs_perslid_nr); -- Als geen Telefoonnr aangeleverd, dan handmatig toegekende niet wissen. UPDATE fac_imp_perslid i SET i.prs_perslid_telefoonnr = (SELECT MAX (prs_perslid_telefoonnr) FROM prs_v_aanwezigperslid WHERE prs_perslid_nr = i.prs_perslid_nr) WHERE i.prs_perslid_telefoonnr IS NULL -- Aangeleverde Telefoonnr wint! AND EXISTS (SELECT 1 FROM prs_v_aanwezigperslid WHERE prs_perslid_telefoonnr IS NOT NULL AND prs_perslid_nr = i.prs_perslid_nr); -- Als geen Mobiel aangeleverd, dan handmatig toegekende niet wissen. UPDATE fac_imp_perslid i SET i.prs_perslid_mobiel = (SELECT MAX (prs_perslid_mobiel) FROM prs_v_aanwezigperslid WHERE prs_perslid_nr = i.prs_perslid_nr) WHERE i.prs_perslid_mobiel IS NULL -- Aangeleverde Mobiel wint! AND EXISTS (SELECT 1 FROM prs_v_aanwezigperslid WHERE prs_perslid_mobiel IS NOT NULL AND prs_perslid_nr = i.prs_perslid_nr); -- Klantspecifieke aanpassingen. -- Locatie/Gebouw/Verdieping/Ruimte bepalen via Kenmerk1-kolom -> Eigen tabel (key = 1) -> -- Gebouw en daaronder Ruimte '_' op de verdieping met het laagste volgnummer! -- Als persoon al een WP heeft op import-locatie, dan is dat de juiste en blijft deze -- (handmatig gecorrigeerde WP) ongewijzigd. In alle andere gevallen verhuist persoon naar -- '_' op de meegegeven locatie. -- Eventuele WPs onder andere locaties dan import-locatie blijven ook ongewijzigd! UPDATE fac_imp_perslid i SET i.alg_locatie_code = (SELECT il.alg_locatie_code FROM fac_v_aanwezigusrdata ud, -- Mapping Kenmerk1-code -> Gebouwcode alg_v_aanweziggebouw ig, alg_locatie il WHERE ud.fac_usrtab_key = -1 AND UPPER (ud.fac_usrdata_code) = UPPER (i.prs_kenmerk1) AND UPPER (ud.fac_usrdata_omschr) = UPPER (ig.alg_gebouw_code) AND ig.alg_locatie_key = il.alg_locatie_key AND NOT EXISTS (SELECT 1 FROM alg_v_aanweziggebouw WHERE UPPER (alg_gebouw_code) = UPPER (ud.fac_usrdata_omschr) AND alg_locatie_key < il.alg_locatie_key)), i.alg_gebouw_code = (SELECT ig.alg_gebouw_code FROM fac_v_aanwezigusrdata ud, -- Mapping Kenmerk1-code -> Gebouwcode alg_v_aanweziggebouw ig, alg_locatie il WHERE ud.fac_usrtab_key = -1 AND UPPER (ud.fac_usrdata_code) = UPPER (i.prs_kenmerk1) AND UPPER (ud.fac_usrdata_omschr) = UPPER (ig.alg_gebouw_code) AND ig.alg_locatie_key = il.alg_locatie_key AND NOT EXISTS (SELECT 1 FROM alg_v_aanweziggebouw WHERE UPPER (alg_gebouw_code) = UPPER (ud.fac_usrdata_omschr) AND alg_locatie_key < il.alg_locatie_key)), i.alg_verdieping_volgnr = (SELECT iv.alg_verdieping_volgnr FROM fac_v_aanwezigusrdata ud, -- Mapping Kenmerk1-code -> Gebouwcode alg_v_aanweziggebouw ig, alg_locatie il, alg_verdieping iv, alg_ruimte ir WHERE ud.fac_usrtab_key = -1 AND UPPER (ud.fac_usrdata_code) = UPPER (i.prs_kenmerk1) AND UPPER (ud.fac_usrdata_omschr) = UPPER (ig.alg_gebouw_code) AND ig.alg_locatie_key = il.alg_locatie_key AND NOT EXISTS (SELECT 1 FROM alg_v_aanweziggebouw WHERE UPPER (alg_gebouw_code) = UPPER (ud.fac_usrdata_omschr) AND alg_locatie_key < il.alg_locatie_key) AND ig.alg_gebouw_key = iv.alg_gebouw_key AND iv.alg_verdieping_key = ir.alg_verdieping_key AND ir.alg_ruimte_nr = '_000' AND NOT EXISTS (SELECT 1 FROM alg_v_aanwezigruimte r, alg_verdieping v WHERE r.alg_ruimte_nr = '_000' AND r.alg_verdieping_key = v.alg_verdieping_key AND v.alg_verdieping_volgnr < iv.alg_verdieping_volgnr)), i.alg_ruimte_nr = (SELECT '_000' FROM fac_v_aanwezigusrdata ud, -- Mapping Kenmerk1-code -> Gebouwcode alg_v_aanweziggebouw ig, alg_locatie il WHERE ud.fac_usrtab_key = -1 AND UPPER (ud.fac_usrdata_code) = UPPER (i.prs_kenmerk1) AND UPPER (ud.fac_usrdata_omschr) = UPPER (ig.alg_gebouw_code) AND ig.alg_locatie_key = il.alg_locatie_key AND NOT EXISTS (SELECT 1 FROM alg_v_aanweziggebouw WHERE UPPER (alg_gebouw_code) = UPPER (ud.fac_usrdata_omschr) AND alg_locatie_key < il.alg_locatie_key)) WHERE NOT EXISTS -- Nog geen werkplek op Locatie! (SELECT 1 FROM fac_v_aanwezigusrdata ud, -- Mapping Kenmerk1-code -> Gebouwcode alg_v_aanweziggebouw ig, alg_locatie il, prs_v_aanwezigperslid p, prs_perslidwerkplek pw, prs_werkplek cw, alg_v_aanwezigruimte cr, alg_verdieping cv, alg_gebouw cg WHERE ud.fac_usrtab_key = -1 AND UPPER (ud.fac_usrdata_code) = UPPER (i.prs_kenmerk1) AND UPPER (ud.fac_usrdata_omschr) = UPPER (ig.alg_gebouw_code) AND ig.alg_locatie_key = il.alg_locatie_key AND NOT EXISTS (SELECT 1 FROM alg_v_aanweziggebouw WHERE UPPER (alg_gebouw_code) = UPPER (ud.fac_usrdata_omschr) AND alg_locatie_key < il.alg_locatie_key) AND p.prs_perslid_nr = i.prs_perslid_nr AND p.prs_perslid_key = pw.prs_perslid_key AND pw.prs_werkplek_key = cw.prs_werkplek_key AND cw.prs_alg_ruimte_key = cr.alg_ruimte_key AND cr.alg_verdieping_key = cv.alg_verdieping_key AND cv.alg_gebouw_key = cg.alg_gebouw_key AND cg.alg_locatie_key = il.alg_locatie_key); -- Resulteert in nette foutmelding als ruimte niet kan worden bepaald. UPDATE fac_imp_perslid SET alg_verdieping_volgnr = 0 WHERE alg_gebouw_code IS NOT NULL AND alg_verdieping_volgnr IS 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.imp_writelog (p_import_key, 'E', v_errormsg, 'Inleesproces personen afgebroken!'); END vvgr_import_prs; / CREATE OR REPLACE PROCEDURE vvgr_update_prs (p_import_key IN NUMBER) IS -- Toevoegen afdelingen die nog niet voorkomen in Facilitor en verwijderen -- voorlopig handmatig (ipv. automatisch). CURSOR c_afd IS SELECT i.prs_afdeling_naam, MAX (COALESCE (SUBSTR (i.prs_kenmerk3, 1, 60), i.prs_afdeling_naam)) prs_afdeling_omschrijving, COUNT (*) aant FROM fac_imp_perslid i WHERE LENGTH (i.prs_afdeling_naam) BETWEEN 1 AND 15 -- Gevuld en niet te lang! AND EXISTS (SELECT 1 FROM prs_v_aanwezigbedrijf WHERE prs_bedrijf_key = 2) -- VVGR! AND NOT EXISTS (SELECT 1 FROM prs_afdeling WHERE prs_afdeling_verwijder IS NULL AND prs_bedrijf_key = 2 -- VVGR! AND prs_afdeling_parentkey IS NULL -- Afdeling-1! AND UPPER (TRIM (prs_afdeling_naam)) = UPPER (TRIM (i.prs_afdeling_naam))) GROUP BY i.prs_afdeling_naam ORDER BY 1; -- Verwijderen personen die niet meer in importbestand voorkomen. -- Dubbele nummers? Dan wordt iemand mogelijk niet verwijderd/INACTIEF! CURSOR c_del IS SELECT p.prs_perslid_key FROM prs_v_aanwezigperslid p WHERE p.prs_perslid_key > 10 -- Voor de zekerheid! AND p.prs_perslid_apikey IS NULL --AND prs_perslid_oslogin2 IS NULL -- Zonder alternatieve login! AND prs_perslid_nr IS NOT NULL -- Met personeelsnummer! --AND NOT EXISTS -- (SELECT 1 -- FROM fac_imp_perslid -- WHERE LOWER (prs_perslid_email) = LOWER (p.prs_perslid_email)) AND NOT EXISTS (SELECT 1 FROM fac_imp_perslid WHERE UPPER (prs_perslid_nr) = UPPER (p.prs_perslid_nr)) ORDER BY 1; v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count NUMBER; BEGIN -- Toevoegen niet bestaande afdelingen. FOR rec IN c_afd LOOP BEGIN INSERT INTO prs_afdeling (prs_bedrijf_key, prs_afdeling_naam, prs_afdeling_omschrijving) VALUES (2, rec.prs_afdeling_naam, rec.prs_afdeling_omschrijving); END; END LOOP; COMMIT; -- Generic update. SELECT COUNT(*) INTO v_count FROM fac_imp_perslid; IF v_count < 100 THEN fac.imp_writelog (p_import_key, 'E', 'Het aantal te importeren personen is te klein (' || TO_CHAR (v_count) || ')', 'Zie specificatie'); RETURN; END IF; -- Generieke update (op e-mail adres). prs.update_perslid (p_import_key, 'NR', 'L'); -- Verwijderen personen *binnen VVGR* niet meer in importbestand. /* FOR rec IN c_del LOOP BEGIN prs.delete_perslid (p_import_key, rec.prs_perslid_key); END; END LOOP; */ END vvgr_update_prs; / CREATE OR REPLACE VIEW VVGR_V_RAP_QRC AS SELECT d.ins_deel_omschrijving hide_f_sort, l.alg_locatie_code || ' ' || l.alg_locatie_omschrijving fclt_f_locatie, o.alg_gebouw_omschrijving fclt_f_gebouw, o.alg_plaatsaanduiding fclt_f_plaats, dd.ins_discipline_omschrijving fclt_f_discipline, sg.ins_srtgroep_omschrijving fclt_f_objectgroep, sd.ins_srtdeel_omschrijving fclt_f_objectsoort, d.ins_deel_omschrijving fclt_f_identificatie, dd.ins_discipline_omschrijving || ' / ' || sm.mld_stdmelding_omschrijving fclt_f_melding, dd.ins_discipline_key fclt_3d_discipline_key, sd.ins_srtdeel_key, d.ins_deel_key, d.ins_alg_locatie_key fclt_3d_locatie_key, d.ins_alg_ruimte_type, d.ins_alg_ruimte_key, o.alg_gebouw_code, o.alg_verdieping_code, b.fac_bookmark_id hide_f_bookmark_id FROM fac_bookmark b, ins_v_aanwezigdeel d, ins_srtdeel sd, ins_srtgroep sg, ins_discipline dd, alg_locatie l, ins_v_alg_overzicht o, mld_stdmelding sm, mld_stdmelding_srtinst smsd WHERE (b.fac_bookmark_expire IS NULL OR b.fac_bookmark_expire > SYSDATE) AND b.fac_bookmark_naam = 'QRC_MELDING' --AND d.ins_deel_module = 'INS' AND d.ins_srtdeel_key = sd.ins_srtdeel_key AND sd.ins_srtgroep_key = sg.ins_srtgroep_key AND sg.ins_discipline_key = dd.ins_discipline_key AND d.ins_deel_parent_key IS NULL AND d.ins_alg_ruimte_type IN ('T', 'R', 'W') AND d.ins_alg_locatie_key = l.alg_locatie_key --AND d.ins_alg_locatie_key = o.alg_locatie_key AND d.ins_alg_ruimte_key = o.alg_onroerendgoed_keys AND d.ins_alg_ruimte_type = o.alg_onroerendgoed_type AND sm.mld_stdmelding_key = smsd.mld_stdmelding_key AND smsd.ins_srtinstallatie_key = DECODE (smsd.ins_srtinstallatie_niveau, 'S', sd.ins_srtdeel_key, 'G', sg.ins_srtgroep_key, 'D', dd.ins_discipline_key); ------ 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