SORO#25401 -- Update n.a.v. 3.2.2

svn path=/Customer/trunk/; revision=19397
This commit is contained in:
Arthur Egberink
2013-10-08 10:26:43 +00:00
parent 985f0f1ff5
commit 9da78fd417
3 changed files with 1565 additions and 0 deletions

0
SORO/Once/.gitignore vendored Normal file
View File

506
SORO/soro.sql Normal file
View File

@@ -0,0 +1,506 @@
-- Script containing customer specific configuration sql statements for SORO: Stichting ORO
-- (c) 2013 SG|facilitor
-- $Revision: 15481 $
-- $Id: soro.sql 15481 2012-09-23 15:37:06Z jgl $
--
-- Support: +31 53 4800710
set echo on
spool xsoro.lst
@soro_prs_pack.sql;
--
-- Personen import
--
CREATE OR REPLACE PROCEDURE soro_import_perslid_mut (p_import_key IN NUMBER)
AS
c_fielddelimitor VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count NUMBER;
v_ongeldig NUMBER (1);
v_mode NUMBER (1);
v_aanduiding VARCHAR2 (200);
v_all_null BOOLEAN;
v_count_error NUMBER (10);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
-- De importvelden:
v_alg_locatie_code VARCHAR2 (256);
v_alg_gebouw_code VARCHAR2 (256);
v_alg_verdieping_volgnr VARCHAR2 (256);
v_alg_verdieping_volgnr_num NUMBER (3);
v_alg_ruimte_nr VARCHAR2 (256);
v_prs_werkplek_volgnr VARCHAR2 (256);
v_prs_werkplek_volgnr_num NUMBER (3);
v_prs_werkplek_omschrijving VARCHAR2 (256);
v_prs_afdeling_naam VARCHAR2 (256);
v_prs_afdeling_omschrijving VARCHAR2 (256);
v_prs_perslid_naam VARCHAR2 (256);
v_prs_perslid_tussenvoegsel VARCHAR2 (256);
v_prs_perslid_voorletters VARCHAR2 (256);
v_prs_perslid_voornaam VARCHAR2 (256);
v_prs_perslid_titel VARCHAR2 (256);
v_prs_perslid_telefoonnr VARCHAR2 (256);
v_prs_perslid_mobiel VARCHAR2 (256);
v_prs_perslid_email VARCHAR2 (256);
v_prs_srtperslid_omschrijving VARCHAR2 (256);
v_prs_perslid_nr VARCHAR2 (256);
v_prs_perslid_oslogin VARCHAR2 (256);
v_prs_perslid_wachtwoord VARCHAR2 (256);
v_dummy VARCHAR2 (256);
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
AND LENGTH(fac_imp_file_line) > 15
ORDER BY fac_imp_file_index;
BEGIN
DELETE FROM fac_imp_perslid;
COMMIT;
v_count_error := 0;
header_is_valid := 0;
v_count_tot := 0;
v_count_import := 0;
v_aanduiding := '';
FOR rec1 IN c1
LOOP
BEGIN
v_errormsg := 'Fout FETCH te importeren rij';
v_newline := rec1.fac_imp_file_line;
v_errormsg := '';
v_errorhint := 'Fout opvragen te importeren rij';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
-- 01 vestiging
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
-- 02 locatie
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
-- 03
fac.imp_getfield (v_newline,
c_fielddelimitor,
v_prs_afdeling_omschrijving);
-- 04
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_naam);
-- 05
fac.imp_getfield (v_newline,
c_fielddelimitor,
v_prs_perslid_tussenvoegsel);
-- 06
fac.imp_getfield (v_newline,
c_fielddelimitor,
v_prs_perslid_voornaam);
-- 07
fac.imp_getfield (v_newline,
c_fielddelimitor,
v_prs_perslid_telefoonnr);
-- 08
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_email);
-- 09
fac.imp_getfield (v_newline,
c_fielddelimitor,
v_prs_srtperslid_omschrijving);
-- 10
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_nr);
-- 11
fac.imp_getfield (v_newline,
c_fielddelimitor,
v_prs_perslid_oslogin);
--
v_aanduiding :=
v_prs_perslid_naam || '|' || v_prs_perslid_voornaam || '| ';
-- Controleer alle veldwaarde
IF (header_is_valid = 0)
THEN
IF UPPER (v_prs_perslid_naam) = 'ACHTERNAAM'
AND UPPER (v_prs_srtperslid_omschrijving) = 'FUNCTIE'
AND UPPER (v_prs_perslid_oslogin) = 'INLOGNAAM'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- De afdelingen binnen ORO hebben geen afdelingscode. Daarom wordt de key van de afdeling als code gebruikt.
v_errorhint := 'Ongeldige afdelingscode';
v_prs_afdeling_naam := TRIM (v_prs_afdeling_naam);
IF v_prs_afdeling_omschrijving IS NOT NULL
THEN
BEGIN
SELECT prs_afdeling_key
INTO v_prs_afdeling_naam
FROM prs_afdeling
WHERE prs_afdeling_parentkey = 21 -- top level afdeling ORO
AND UPPER(prs_afdeling_omschrijving) = UPPER(v_prs_afdeling_omschrijving)
AND prs_afdeling_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
SELECT prs_s_prs_afdeling_key.NEXTVAL
INTO v_prs_afdeling_naam
FROM DUAL;
INSERT INTO prs_afdeling (prs_afdeling_key,
prs_afdeling_parentkey,
prs_afdeling_naam,
prs_afdeling_omschrijving)
VALUES (v_prs_afdeling_naam,
21,
v_prs_afdeling_naam,
v_prs_afdeling_omschrijving);
END;
END IF;
--
v_errorhint := 'Ongeldige naam persoon';
v_prs_perslid_naam := TRIM (v_prs_perslid_naam);
IF LENGTH (v_prs_perslid_naam) > 60
THEN
v_prs_perslid_naam := SUBSTR (v_prs_perslid_naam, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Naam persoon is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_prs_perslid_naam
|| ']');
ELSE
IF (v_prs_perslid_naam IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Naam persoon onbekend',
'Naam persoon moet worden opgegeven');
END IF;
END IF;
--
v_errorhint := 'Ongeldige tussenvoegsel persoon';
v_prs_perslid_tussenvoegsel := TRIM (v_prs_perslid_tussenvoegsel);
IF LENGTH (v_prs_perslid_tussenvoegsel) > 10
THEN
v_prs_perslid_tussenvoegsel :=
SUBSTR (v_prs_perslid_tussenvoegsel, 1, 10);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Tussenvoegsel persoon is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_prs_perslid_tussenvoegsel
|| ']');
END IF;
--
v_errorhint := 'Voornaam persoon';
v_prs_perslid_voornaam := TRIM (v_prs_perslid_voornaam);
IF LENGTH (v_prs_perslid_voornaam) > 30
THEN
v_prs_perslid_voornaam :=
SUBSTR (v_prs_perslid_voornaam, 1, 30);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Voornaam persoon is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_prs_perslid_voornaam
|| ']');
END IF;
--
v_errorhint := 'Ongeldige telefoonnr. persoon';
v_prs_perslid_telefoonnr := REPLACE (v_prs_perslid_telefoonnr, ' ', '');
IF LENGTH (v_prs_perslid_telefoonnr) > 15
THEN
v_prs_perslid_telefoonnr :=
SUBSTR (v_prs_perslid_telefoonnr, 1, 15);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Telefoonnr. persoon is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_prs_perslid_telefoonnr
|| ']');
END IF;
--
v_errorhint := 'Ongeldige email persoon';
v_prs_perslid_email := TRIM (v_prs_perslid_email);
IF LENGTH (v_prs_perslid_email) > 200
THEN
v_prs_perslid_email := SUBSTR (v_prs_perslid_email, 1, 200);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Email persoon is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_prs_perslid_email
|| ']');
END IF;
--
v_errorhint := 'Ongeldige functie persoon';
v_prs_srtperslid_omschrijving :=
TRIM (v_prs_srtperslid_omschrijving);
IF LENGTH (v_prs_srtperslid_omschrijving) > 60
THEN
v_prs_srtperslid_omschrijving :=
SUBSTR (v_prs_srtperslid_omschrijving, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Functie-aanduiding persoon is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_prs_srtperslid_omschrijving
|| ']');
ELSE
IF (v_prs_srtperslid_omschrijving IS NULL)
THEN
v_prs_srtperslid_omschrijving := 'Onbekend';
fac.imp_writelog (
p_import_key,
'I',
v_aanduiding || 'Functie persoon niet gevuld',
'Wordt nu op Onbekend gezet');
END IF;
END IF;
--
v_errorhint := 'Ongeldige persoonnr.';
v_prs_perslid_nr := TRIM (v_prs_perslid_nr);
IF LENGTH (v_prs_perslid_nr) > 16
THEN
v_prs_perslid_nr := SUBSTR (v_prs_perslid_nr, 1, 16);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Persoonnr. persoon is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_prs_perslid_nr
|| ']');
END IF;
--
v_errorhint := 'Ongeldige loginnaam';
v_prs_perslid_oslogin := TRIM (v_prs_perslid_oslogin);
IF LENGTH (v_prs_perslid_oslogin) > 30
THEN
v_prs_perslid_oslogin := SUBSTR (v_prs_perslid_oslogin, 1, 30);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Loginnaam persoon is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_prs_perslid_oslogin
|| ']');
END IF;
--
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
v_errormsg :=
'Fout bij toevoegen te impoteren persoon ['
|| v_aanduiding
|| ']';
INSERT INTO fac_imp_perslid (alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr,
prs_werkplek_volgnr,
prs_werkplek_omschrijving,
prs_afdeling_naam,
prs_perslid_naam,
prs_perslid_tussenvoegsel,
prs_perslid_voorletters,
prs_perslid_voornaam,
prs_perslid_titel,
prs_perslid_telefoonnr,
prs_perslid_mobiel,
prs_perslid_email,
prs_srtperslid_omschrijving,
prs_perslid_nr,
prs_perslid_oslogin,
prs_perslid_wachtwoord)
VALUES (v_alg_locatie_code,
v_alg_gebouw_code,
v_alg_verdieping_volgnr,
v_alg_ruimte_nr,
v_prs_werkplek_volgnr,
v_prs_werkplek_omschrijving,
v_prs_afdeling_naam,
v_prs_perslid_naam,
v_prs_perslid_tussenvoegsel,
v_prs_perslid_voorletters,
v_prs_perslid_voornaam,
v_prs_perslid_titel,
v_prs_perslid_telefoonnr,
v_prs_perslid_mobiel,
v_prs_perslid_email,
v_prs_srtperslid_omschrijving,
v_prs_perslid_nr,
UPPER (v_prs_perslid_oslogin),
v_prs_perslid_wachtwoord);
v_count_import := v_count_import + 1;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Ongeldig importbestand',
'Geen geldige headerregel aanwezig');
ELSE
fac.imp_writelog (
p_import_key,
'S',
'Persoon: aantal ingelezen regels: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (
p_import_key,
'S',
'Persoon: aantal ongeldige importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
'');
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint);
END soro_import_perslid_mut;
/
CREATE OR REPLACE PROCEDURE soro_update_perslid_mut (p_import_key IN NUMBER)
IS
CURSOR c_del
IS
SELECT prs_perslid_key,
prs_perslid_naam,
prs_perslid_oslogin,
prs_perslid_oslogin2,
prs_perslid_login,
(SELECT COUNT ( * )
FROM prs_v_verplichting v
WHERE v.prs_perslid_key = p.prs_perslid_key)
verplichtingen
FROM prs_perslid p
WHERE NOT EXISTS
(SELECT prs_perslid_key
FROM fac_imp_perslid i
WHERE p.prs_perslid_oslogin = UPPER (i.prs_perslid_oslogin))
AND prs_perslid_verwijder IS NULL
AND prs_perslid_oslogin NOT LIKE '/_%' ESCAPE ('/')
AND prs_perslid_nr IS NOT NULL;
v_count NUMBER;
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
BEGIN
SELECT COUNT ( * ) INTO v_count FROM fac_imp_perslid;
IF v_count > 1000
THEN
-- generic update
soro.fac_gen_update_perslid (p_import_key,
'LOGIN',
0,
'');
FOR rec IN c_del
LOOP
BEGIN
v_aanduiding :=
rec.prs_perslid_naam || ' (' || rec.prs_perslid_oslogin || ')';
UPDATE prs_perslid p
SET prs_perslid_oslogin = NULL, prs_perslid_oslogin2 = NULL
WHERE p.prs_perslid_key = rec.prs_perslid_key;
DELETE fac_gebruikersgroep
WHERE prs_perslid_key = rec.prs_perslid_key;
IF rec.verplichtingen = 0
THEN
UPDATE prs_perslid p
SET prs_perslid_verwijder = SYSDATE
WHERE p.prs_perslid_key = rec.prs_perslid_key;
ELSE
UPDATE prs_perslid p
SET prs_perslid_naam =
SUBSTR ('Inactief ' || prs_perslid_naam, 1, 60)
WHERE p.prs_perslid_key = rec.prs_perslid_key
AND p.prs_perslid_naam NOT LIKE 'Inactief%';
END IF;
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.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Fout bij verwijderen persoon.');
END;
END LOOP;
END IF;
END soro_update_perslid_mut;
/
BEGIN fac.registercustversion('SORO', 1); END;
/
BEGIN adm.systrackscript('$Workfile: soro.sql $', '$Revision: 15481 $', 0); END;
/
show errors;
commit;
spool off;

1059
SORO/soro_prs_pack.sql Normal file

File diff suppressed because it is too large Load Diff