PCIN#39973 PRS-import

svn path=/Customer/trunk/; revision=35017
This commit is contained in:
Maarten van der Heide
2017-08-18 15:17:09 +00:00
parent b3907304f8
commit 07cca6692f

171
PCIN/pcin.sql Normal file
View File

@@ -0,0 +1,171 @@
--
-- $Id$
--
-- Script containing customer specific db-configuration for PCIN.
DEFINE thisfile = 'PCIN.SQL'
DEFINE dbuser = '^PCIN'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
WHENEVER SQLERROR EXIT;
SELECT adm.scriptspoolfile('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL;
WHENEVER SQLERROR CONTINUE;
SPOOL &fcltlogfile
SET DEFINE OFF
------ payload begin ------
CREATE OR REPLACE VIEW pcin_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 pcin_import_prs (p_import_key IN NUMBER)
AS
v_errormsg VARCHAR2 (1000) := '-';
v_errorhint VARCHAR2 (1000) := '-';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
BEGIN
v_errorhint := 'Generieke import';
--Naam;Voornaam;tussenvoegsel;Achternaam;Login;Plaats;Mobiel;Email;Personeelsnummer;Afdelingscode;Functie
-- De sequence array staat beschreven in PRS_PAC.SRC bij de import_perslid-PROCEDURE.
prs.import_perslid (
p_import_key,
'0;0;0;0;0;0;10;4;3;2;'
|| '0;0;0;0;0;0;7;8;0;9;'
|| '11;5;0;0;0;0;6;0;0;0;'
|| '0;0;0;0;0;0;0;0;0;0;'
|| '0;0;0;0;0;0',
'Naam;Voornaam;tussenvoegsel;Achternaam;Login;Plaats;Mobiel;Email;Personeelsnummer;Afdelingscode;Functie%');
COMMIT;
-- Klantspecifieke aanpassingen.
-- Locatie/Gebouw/Verdieping/Ruimte bepalen via Plaats-kolom -> Bezoekplaats van Locatie
-- en daaronder Ruimte '_000' op Verdieping 0!
-- 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 Ruimte '_000' op Verdieping 0 op import-locatie!
-- Eventuele WPs onder andere locaties dan de import-locatie blijven ook ongewijzigd!
UPDATE fac_imp_perslid i
SET i.alg_locatie_code =
(SELECT il.alg_locatie_code
FROM alg_v_aanweziglocatie il
WHERE il.alg_locatie_upper = UPPER (i.prs_kenmerk1) -- Of UPPER (il.alg_locatie_bezoek_plaats) = UPPER (i.prs_kenmerk1)?
AND NOT EXISTS
(SELECT 1
FROM alg_v_aanweziglocatie
WHERE alg_locatie_upper = UPPER (i.prs_kenmerk1)
AND alg_locatie_key < il.alg_locatie_key)),
i.alg_gebouw_code =
(SELECT MIN (ig.alg_gebouw_code)
FROM alg_v_aanweziglocatie il, alg_v_aanweziggebouw ig
WHERE il.alg_locatie_upper = UPPER (i.prs_kenmerk1) -- Of UPPER (il.alg_locatie_bezoek_plaats) = UPPER (i.prs_kenmerk1)?
AND il.alg_locatie_key = ig.alg_locatie_key
AND NOT EXISTS
(SELECT 1
FROM alg_v_aanweziglocatie
WHERE alg_locatie_upper = UPPER (i.prs_kenmerk1)
AND alg_locatie_key < il.alg_locatie_key)),
i.alg_verdieping_volgnr = 0,
i.alg_ruimte_nr = '_000'
WHERE NOT EXISTS -- Nog geen werkplek binnen Locatie!
(SELECT 1
FROM alg_v_aanweziglocatie il,
prs_v_aanwezigperslid p,
prs_perslidwerkplek pw,
prs_werkplek cw,
alg_v_aanwezigruimte cr,
alg_verdieping cv,
alg_gebouw cg,
alg_locatie cl
WHERE il.alg_locatie_upper = UPPER (i.prs_kenmerk1) -- Of UPPER (il.alg_locatie_bezoek_plaats) = UPPER (i.prs_kenmerk1)?
AND NOT EXISTS
(SELECT 1
FROM alg_v_aanweziglocatie
WHERE alg_locatie_upper = UPPER (i.prs_kenmerk1)
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);
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.imp_writelog (p_import_key, 'E', v_errormsg || v_errorhint, 'Inleesproces personen afgebroken!');
END pcin_import_prs;
/
CREATE OR REPLACE PROCEDURE pcin_update_prs (p_import_key IN NUMBER)
IS
-- Let op! Personen die niet meer in dienst zijn -> niet in fac_imp_perslid!
-- Dubbele perslid_nr? Dan wordt iemand mogelijk niet verwijderd/INACTIEF!
CURSOR c_del
IS
--SELECT p.prs_perslid_key, p.prs_perslid_nr
-- FROM prs_v_aanwezigperslid p, fac_imp_perslid i
-- WHERE p.prs_perslid_nr IS NOT NULL
-- AND p.prs_perslid_nr = i.prs_perslid_nr(+)
-- AND i.prs_perslid_nr IS NULL
SELECT p.prs_perslid_key, p.prs_perslid_nr
FROM prs_v_aanwezigperslid p
WHERE p.prs_perslid_nr IS NOT NULL
AND NOT EXISTS
(SELECT 1
FROM fac_imp_perslid i
WHERE UPPER (i.prs_perslid_nr) = UPPER (p.prs_perslid_nr))
ORDER BY 2;
BEGIN
-- Generieke update.
prs.update_perslid (p_import_key, 'NR', 'A');
-- Verwijder personen die niet meer in de import voorkomen.
FOR rec IN c_del
LOOP
BEGIN
prs.delete_perslid (p_import_key, rec.prs_perslid_key);
END;
END LOOP;
END pcin_update_prs;
/
------ 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