svn path=/Customer/trunk/; revision=13682

This commit is contained in:
Arthur Egberink
2008-09-26 11:44:08 +00:00
parent 3010ef3f0c
commit 4be09b4bf4

View File

@@ -1,8 +1,8 @@
-- Script containing customer specific configuration sql statements
-- for RWSN: Rijkswaterstaat Nederland
-- (c) 2008 SG|Facilitor bv
-- $Revision: 15 $
-- $Modtime: 25-09-08 1:50 $
-- $Revision: 16 $
-- $Modtime: 26-09-08 12:44 $
--
-- Support: +31 53 4800700
@@ -176,13 +176,13 @@ AS
-- in het CSV bestand is dus de organisatie eenheid komen te vervallen.
CURSOR cafdelingsboom
IS
SELECT DECODE (LEVEL, 8, 7, 9, 7, 10, 7, 11, 7, LEVEL) niveau, afdelingscode, omschrijving, parentcode,
SELECT DECODE (LEVEL, 8, 7, 9, 7, 10, 7, 11, 7, LEVEL) niveau, level, afdelingscode, omschrijving, parentcode,
begindatum, einddatum
FROM rwsn_imp_idm_org
WHERE afdelingscode IS NOT NULL -- geen lege regels
CONNECT BY PRIOR afdelingscode = parentcode
START WITH parentcode = '00000000'
ORDER BY niveau;
ORDER BY level;
CURSOR cverplichtingen (pcafdeling IN NUMBER)
IS
@@ -196,6 +196,7 @@ AS
lkostenplaatskey prs_kostenplaats.prs_kostenplaats_key%TYPE;
lafdelingkey NUMBER (10);
lparentkey NUMBER (10);
lparentcode VARCHAR2 (20);
l_oldcountkp NUMBER;
l_newcountkp NUMBER;
l_oldcountafd NUMBER;
@@ -219,7 +220,7 @@ BEGIN
p_applrun,
'I',
'Facilitor IDM_ORG import version ' || currentversion,
'$Revision: 15 $'
'$Revision: 16 $'
);
-- How many active records are now present?
@@ -253,6 +254,29 @@ BEGIN
FOR rc IN cafdelingsboom
LOOP
lparentcode := rc.parentcode;
IF rc.level > 10 THEN
SELECT parentcode
INTO lparentcode
FROM rwsn_imp_idm_org
WHERE afdelingscode = lparentcode;
END IF;
IF rc.level > 9 THEN
SELECT parentcode
INTO lparentcode
FROM rwsn_imp_idm_org
WHERE afdelingscode = lparentcode;
END IF;
IF rc.level > 8 THEN
SELECT parentcode
INTO lparentcode
FROM rwsn_imp_idm_org
WHERE afdelingscode = lparentcode;
END IF;
-- Bestaat de kostenplaats al?
BEGIN
SELECT prs_kostenplaats_key
@@ -312,8 +336,9 @@ BEGIN
THEN
-- Niveau's lopen van 4.., alle niveaus zitten wel in de cursor voor de bovenstaande kostenplaatsen
-- Maar voor de afdelingen pakken we 4 (rootniveau) en hoger
-- Afdelingen op niveau 3 worden ook op rootniveau toegevoegd
BEGIN
IF rc.niveau = 4
IF (rc.niveau = 4 OR rc.niveau = 3)
THEN
INSERT INTO prs_afdeling
(prs_afdeling_naam,
@@ -325,6 +350,13 @@ BEGIN
VALUES (rc.afdelingscode, rc.omschrijving, c_prs_bedrijfkey, NULL, lkostenplaatskey);
ELSIF rc.niveau > 4
THEN
SELECT prs_afdeling_key
INTO lparentkey
FROM prs_afdeling
WHERE prs_afdeling_naam = lparentcode
AND prs_afdeling_verwijder IS NULL;
INSERT INTO prs_afdeling
(prs_afdeling_naam,
prs_afdeling_omschrijving,
@@ -332,12 +364,11 @@ BEGIN
prs_afdeling_parentkey,
prs_kostenplaats_key
)
SELECT rc.afdelingscode, rc.omschrijving, NULL, prs_afdeling_key, lkostenplaatskey
FROM prs_afdeling
WHERE prs_afdeling_naam = rc.parentcode;
VALUES (rc.afdelingscode, rc.omschrijving, NULL, lparentkey, lkostenplaatskey);
END IF;
IF rc.niveau >= 4
IF rc.niveau >= 3
THEN
fac.imp_writelog (p_applname,
p_applrun,
@@ -352,9 +383,9 @@ BEGIN
oracle_err_mes := SUBSTR (SQLERRM, 1, 1000);
fac.imp_writelog (p_applname,
p_applrun,
'W',
'E',
SUBSTR ('Afdeling kan niet worden toegevoegd ' || oracle_err_mes, 1, 1000),
rc.afdelingscode || '/' || rc.omschrijving
rc.afdelingscode || '/' || rc.omschrijving || ' (' || lparentcode || ')'
);
END;
END IF;
@@ -403,7 +434,7 @@ BEGIN
AND prs_kostenplaats_verwijder IS NULL;
UPDATE prs_afdeling
SET prs_afdeling_omschrijving = SUBSTR ('VERVALLLEN: ' || prs_afdeling_omschrijving, 1, 60)
SET prs_afdeling_omschrijving = SUBSTR ('VERVALLEN: ' || prs_afdeling_omschrijving, 1, 60)
WHERE prs_afdeling_omschrijving NOT LIKE 'VERVALLEN: %'
AND NOT EXISTS (SELECT ''
FROM rwsn_imp_idm_org
@@ -754,7 +785,7 @@ AS
idm.bezoekadresplaats, idm.aanduidingnaamgebruik, idm.partnertussenvoegsel, idm.partnernaam
FROM rwsn_imp_idm_pers idm, prs_perslid p
WHERE idm.personeelsnummer = p.prs_perslid_nr(+) AND idm.einddatum > SYSDATE
ORDER BY idm.personeelsnummer, prs_perslid_key DESC;
ORDER BY idm.personeelsnummer, prs_perslid_key DESC, idm.einddatum DESC ;
v_perslid_key NUMBER (10);
v_prs_key_cnt NUMBER (10);
@@ -954,7 +985,7 @@ AS
THEN
-- persoon heeft geen werkplek(ken)
BEGIN
v_errormsg := 'Bepalen verdieping';
lv_errormsg := 'Bepalen verdieping';
SELECT alg_verdieping_key
INTO lv_verdieping_key
@@ -1026,6 +1057,90 @@ AS
VALUES (pkey, lv_werkplek_key, 0);
END IF;
END;
PROCEDURE update_adres
AS
CURSOR cadressen
IS
SELECT DISTINCT
substr(bezoekadresplaats || '-' || bezoekadresnaam,1,30) adres_naam
, substr(bezoekadresnaam || ' ' || bezoekadresnummer,1,35) adres_bezoek_adres
, substr(bezoekadrespostcode,1,12) adres_bezoek_postcode
, substr(bezoekadresplaats, 1, 30) adres_bezoek_plaats
FROM rwsn_imp_idm_pers;
ladreskey NUMBER (10);
l_newcount NUMBER;
l_impcount NUMBER;
v_errormsg VARCHAR (200);
oracle_err_mes VARCHAR2 (150);
currentversion fac_module.fac_module_version%TYPE;
BEGIN
SELECT MAX (fac_module_version)
INTO currentversion
FROM fac_module;
fac.imp_writelog (p_applname,
p_applrun,
'I',
'Facilitor idm_adres import version ' || currentversion,
'$Revision: 16 $'
);
-- How many active records are imported?
SELECT COUNT (*)
INTO l_impcount
FROM fac_imp_adres;
FOR rc IN cadressen
LOOP
-- Bestaat deze al?
-- Er is geen key, dus checken we op alle velden
-- Een update is dus nvt
BEGIN
SELECT mld_adres_key
INTO ladreskey
FROM mld_adres
WHERE mld_adres_naam = rc.adres_naam
AND mld_adres_bezoek_postcode = rc.adres_bezoek_postcode
AND mld_adres_bezoek_adres = rc.adres_bezoek_adres
AND mld_adres_bezoek_plaats = rc.adres_bezoek_plaats;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
ladreskey := -1;
END;
DBMS_OUTPUT.put_line (rc.adres_naam);
IF ladreskey = -1
THEN
INSERT INTO mld_adres
(mld_adres_naam,
mld_adres_bezoek_adres,
mld_adres_bezoek_postcode,
mld_adres_bezoek_plaats,
mld_adres_afleveradres
)
VALUES (rc.adres_naam, rc.adres_bezoek_adres, rc.adres_bezoek_postcode, rc.adres_bezoek_plaats, 1);
fac.imp_writelog (p_applname, p_applrun, 'I', 'Adres is toegevoegd', rc.adres_naam);
END IF;
END LOOP;
-- Zoek de locatiekey bij het adres op basis van postcode
-- Als er meerdere locaties matchen pak ik de oudste (=grootste?)
UPDATE mld_adres
SET alg_locatie_key =
(SELECT MIN (l.alg_locatie_key)
FROM alg_locatie l
WHERE l.alg_locatie_postcode = mld_adres_bezoek_postcode
AND l.alg_locatie_verwijder IS NULL)
WHERE mld_adres_verwijder IS NULL AND alg_locatie_key IS NULL;
END;
----------------------
----------------------
----------------------
@@ -1050,7 +1165,7 @@ BEGIN
p_applrun,
'I',
'Facilitor IDM_PERS import version ' || currentversion,
'$Revision: 15 $'
'$Revision: 16 $'
);
-- -- #Import
@@ -1061,7 +1176,7 @@ BEGIN
-- Informatieve logging, zien we gelijk hoe laat het was
fac.imp_writelog (p_applname, p_applrun, 'S', 'Aantal ingelezen personen: ' || TO_CHAR (v_perslid_count_imp), '');
-- #Actieve personen mè² personeelsnummer
-- #Actieve personen mèt personeelsnummer
SELECT COUNT (*)
INTO v_perslid_count_fclt
FROM prs_perslid
@@ -1074,6 +1189,8 @@ BEGIN
RETURN;
END IF;
update_adres ();
-- Begin met het ontmantelen van vervallen personen
FOR rec_prs_del IN c_prs_del
LOOP
@@ -1171,7 +1288,8 @@ BEGIN
v_afdeling_key := 0;
v_srtperslid_key := 0;
v_perslid_key := 0;
v_errormsg := 'Fout bij bepalen randvoorwaarden';
-- *** Controle verplichte gegevens + ophalen extra informatie ***
-- Controle: PRS_PERSLID_NR
IF rec_prs_upd.prs_perslid_nr IS NULL
@@ -1429,21 +1547,26 @@ BEGIN
prs_srtperslid_key = v_srtperslid_key,
prs_afdeling_key = v_afdeling_key,
prs_perslid_verwijder = NULL,
prs_perslid_oslogin = rec_prs_upd.loginnaam,
prs_perslid_oslogin = llogin,
prs_perslid_mobiel = rec_prs_upd.mobielnummer,
prs_perslid_email = rec_prs_upd.email,
prs_perslid_email = lemail,
prs_perslid_ingangsdatum = rec_prs_upd.begindatum,
prs_perslid_einddatum = rec_prs_upd.einddatum
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_voorletters, '-') <> NVL (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 NVL (prs_perslid_titel, '-') <> NVL (rec_prs_upd.prs_perslid_titel, '-')
OR prs_srtperslid_key <> v_srtperslid_key
OR prs_afdeling_key <> v_afdeling_key
OR NVL (prs_perslid_oslogin, '-') <> NVL (llogin, '-')
OR NVL (prs_perslid_mobiel, '-') <> NVL (rec_prs_upd.mobielnummer, '-')
OR NVL (prs_perslid_email, '-') <> NVL (lemail, '-')
OR NVL (prs_perslid_ingangsdatum, to_date('01012000', 'ddmmyyyy')) <> NVL (rec_prs_upd.begindatum, to_date('01012000', 'ddmmyyyy'))
OR NVL (prs_perslid_einddatum, to_date('01012000', 'ddmmyyyy')) <> NVL (rec_prs_upd.einddatum, to_date('01012000', 'ddmmyyyy'))
OR rec_prs_upd.prs_perslid_verwijder IS NOT NULL
);
@@ -1454,7 +1577,7 @@ BEGIN
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := oracle_err_mes;
v_errormsg := v_errormsg || ' - ' || oracle_err_mes;
v_errorhint := 'Persoon: ' || rec_prs_upd.prs_perslid_nr;
v_update := FALSE;
fac.imp_writelog (p_applname, p_applrun, 'E', v_errormsg, v_errorhint);
@@ -1470,8 +1593,11 @@ BEGIN
IF v_update
THEN
v_newgebouwkey := getgebouwkey (rec_prs_upd.bezoekadrespostcode, rec_prs_upd.bezoekadresnummer);
handle_location (v_perslid_key, v_newgebouwkey);
IF rec_prs_upd.bezoekadrespostcode IS NOT NULL
THEN
v_newgebouwkey := getgebouwkey (rec_prs_upd.bezoekadrespostcode, rec_prs_upd.bezoekadresnummer);
handle_location (v_perslid_key, v_newgebouwkey);
END IF;
END IF;
IF v_update
@@ -1533,189 +1659,6 @@ END;
/
-------------------------------------------------------------------------------
-- IMPORTFUNCTIES - IDM_ADRES
-------------------------------------------------------------------------------
-- RWSN specifieke import van locaties om personen vanuit IDM te kunnen mappen
-- op een plaats. Er wordt gebruik gemaakt van de standaard FAC_IMP_ADRES tabel,
-- die ruimer is dan RWSN_IMP_ADRES zou zijn en voldoet dus.
--
/* Formatted on 12/09/2008 12:47 (Formatter Plus v4.8.7) */
CREATE OR REPLACE PROCEDURE rwsn_import_idm_adres (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2
)
AS
CURSOR c_cursor
IS
SELECT *
FROM fac_imp_file
WHERE fac_imp_file_applicatie = p_applname
ORDER BY fac_imp_file_index;
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);
v_skipfield VARCHAR2 (100);
-- De importvelden
v_location_guid VARCHAR2 (100);
v_visitaddress VARCHAR2 (100);
v_visitnumber VARCHAR2 (100);
v_visitpostalcode VARCHAR2 (100);
v_visitplace VARCHAR2 (100);
header_found BOOLEAN;
v_controle_res VARCHAR2 (30);
BEGIN
-- Eerst opruiming
DELETE FROM imp_log
WHERE imp_log_applicatie = p_applname;
-- Init
header_found := FALSE;
v_fielddelimitor := ';';
-- Clear my previous imported rows
-- DELETE FROM rwsn_imp_idm_adres;
DELETE FROM fac_imp_adres;
FOR rec1 IN c_cursor
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
fac.imp_getfield (v_newline, v_fielddelimitor, v_location_guid);
fac.imp_getfield (v_newline, v_fielddelimitor, v_visitaddress);
fac.imp_getfield (v_newline, v_fielddelimitor, v_visitnumber);
fac.imp_getfield (v_newline, v_fielddelimitor, v_visitpostalcode);
fac.imp_getfield (v_newline, v_fielddelimitor, v_visitplace);
-- Skip until a valid header is found
IF (v_location_guid = '"Location_GUID"' AND v_visitplace = '"VisitPlace"')
THEN
-- Sla de kopregel over.
header_found := TRUE;
ELSIF (header_found)
THEN
INSERT INTO fac_imp_adres
(adres_naam, adres_bezoek_adres, adres_bezoek_postcode, adres_bezoek_plaats)
VALUES (SUBSTR (v_visitaddress, 1, 30),
SUBSTR (v_visitaddress || ' ' || v_visitnumber, 1, 35),
SUBSTR (v_visitpostalcode, 1, 12),
SUBSTR (v_visitplace, 1, 30)
);
END IF;
COMMIT;
END;
END LOOP;
IF NOT header_found
THEN
fac.imp_writelog (p_applname,
p_applrun,
'E',
'Geen geldige header aangetroffen',
'Bestand ' || p_filename || ' is geen geldig IDM_ADRES importbestand.'
);
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_applname, p_applrun, 'E', SUBSTR (v_errormsg, 1, 1000), '');
-- maak de importtabel leeg om te voorkomen dat er halve bestanden ingelezen worden.
DELETE FROM fac_imp_adres;
END;
/
/* Formatted on 12/09/2008 13:04 (Formatter Plus v4.8.7) */
CREATE OR REPLACE PROCEDURE rwsn_update_idm_adres (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
CURSOR cadressen
IS
SELECT *
FROM fac_imp_adres;
ladreskey NUMBER (10);
l_newcount NUMBER;
l_impcount NUMBER;
v_errormsg VARCHAR (200);
oracle_err_mes VARCHAR2 (150);
currentversion fac_module.fac_module_version%TYPE;
BEGIN
SELECT MAX (fac_module_version)
INTO currentversion
FROM fac_module;
fac.imp_writelog (p_applname,
p_applrun,
'I',
'Facilitor idm_adres import version ' || currentversion,
'$Revision: 15 $'
);
-- How many active records are imported?
SELECT COUNT (*)
INTO l_impcount
FROM fac_imp_adres;
FOR rc IN cadressen
LOOP
-- Bestaat deze al?
-- Er is geen key, dus checken we op alle velden
-- Een update is dus nvt
BEGIN
SELECT mld_adres_key
INTO ladreskey
FROM mld_adres
WHERE mld_adres_naam = rc.adres_naam
AND mld_adres_bezoek_postcode = rc.adres_bezoek_postcode
AND mld_adres_bezoek_adres = rc.adres_bezoek_adres
AND mld_adres_bezoek_plaats = rc.adres_bezoek_plaats;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
ladreskey := -1;
END;
DBMS_OUTPUT.put_line (rc.adres_naam);
IF ladreskey = -1
THEN
INSERT INTO mld_adres
(mld_adres_naam,
mld_adres_bezoek_adres,
mld_adres_bezoek_postcode,
mld_adres_bezoek_plaats,
mld_adres_afleveradres
)
VALUES (rc.adres_naam, rc.adres_bezoek_adres, rc.adres_bezoek_postcode, rc.adres_bezoek_plaats, 1);
fac.imp_writelog (p_applname, p_applrun, 'I', 'Adres is toegevoegd', rc.adres_naam);
END IF;
END LOOP;
-- Zoek de locatiekey bij het adres op basis van postcode
-- Als er meerdere locaties matchen pak ik de oudste (=grootste?)
UPDATE mld_adres
SET alg_locatie_key =
(SELECT MIN (l.alg_locatie_key)
FROM alg_locatie l
WHERE l.alg_locatie_postcode = mld_adres_bezoek_postcode AND l.alg_locatie_verwijder IS NULL)
WHERE mld_adres_verwijder IS NULL AND alg_locatie_key IS NULL;
END;
/
--=============================================================================
-- EXPORTFUNCTIES
-------------------------------------------------------------------------------