Files
Customer/GESL/gesl.sql
Erik Groener 593a179a5a FSN#25312 adm.systrackscript bij alle (cust) files voor zover nog afwezig
svn path=/Customer/trunk/; revision=16510
2013-01-14 13:24:08 +00:00

1116 lines
39 KiB
SQL

-- Script containing customer specific configuration sql statements for GESL: Stadsdeel Geuzenveld-Slotermeer (via U4A)
-- (c) 2009 SG|facilitor
-- $Revision$
-- $Id$
--
-- Support: +31 53 4800710
SPOOL xGESL.LST
SET ECHO ON
--------------
CREATE OR REPLACE PROCEDURE gesl_import_organisatie (
p_import_key IN NUMBER
) IS
c_fielddelimitor VARCHAR2 (1) := ',';
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER;
v_ongeldig BOOLEAN;
v_mode NUMBER(1);
v_aanduiding VARCHAR (200);
v_all_null BOOLEAN;
v_count_error NUMBER(10);
v_count_tot NUMBER(10);
v_count_import NUMBER(10);
v_header_valid BOOLEAN;
-- De importvelden:
v_bedrijf_naam VARCHAR2 (256);
v_afdeling_naam VARCHAR2 (256);
v_afdeling_naam_parent VARCHAR2 (256);
v_afdeling_omschrijving VARCHAR2 (256);
v_kostenplaats_nr VARCHAR2 (256);
-- PRS_BEDRIJF
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
DELETE FROM gesl_imp_organisatie;
COMMIT;
v_count_error := 0;
v_count_tot := 0;
v_count_import := 0;
v_header_valid := FALSE;
FOR rec IN c1
LOOP
BEGIN
v_errormsg := 'Fout FETCH te importeren rij';
v_newline := rec. fac_imp_file_line;
v_count_tot := v_count_tot + 1;
v_errormsg := 'Fout opvragen te importeren rij';
v_aanduiding := '';
v_ongeldig := FALSE;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline,
C_FIELDDELIMITOR,
v_bedrijf_naam
);
--
fac.imp_getfield (v_newline,
C_FIELDDELIMITOR,
v_afdeling_naam_parent
);
--
fac.imp_getfield (v_newline,
C_FIELDDELIMITOR,
v_afdeling_naam
);
--
fac.imp_getfield (v_newline,
C_FIELDDELIMITOR,
v_afdeling_omschrijving
);
--
fac.imp_getfield (v_newline,
C_FIELDDELIMITOR,
v_kostenplaats_nr
);
--
v_aanduiding := v_bedrijf_naam||'|'||v_afdeling_naam||'|'||v_afdeling_naam_parent||'| ';
-- controleer de header
IF (v_bedrijf_naam = 'Bedrijfsnaam')
THEN
IF v_bedrijf_naam = 'Bedrijfsnaam' AND
v_afdeling_naam_parent = 'Afdelingscode parent' AND
v_afdeling_naam = 'Afdelingscode' AND
v_afdeling_omschrijving = 'Afdelingsomschrijving' AND
v_kostenplaats_nr = 'Kostenplaats'
THEN
v_header_valid := TRUE;
ELSE
fac.imp_writelog (p_import_key,
'E',
v_aanduiding||'Ongeldig importbestand',
'Kopregel: ' || v_aanduiding
);
return;
END IF;
ELSE
-- Controleer alle veldwaarde
v_bedrijf_naam := 'Geuzenveld-Slotermeer';
--
v_afdeling_naam := trim(v_afdeling_naam);
IF LENGTH (v_afdeling_naam) > 10 THEN
v_afdeling_naam:= SUBSTR(v_afdeling_naam,1,10);
fac.imp_writelog(p_import_key
,'W'
,v_aanduiding||'Afdeling-aanduiding is te lang'
,'Aanduiding wordt afgebroken tot [' || v_afdeling_naam || ']'
);
END IF;
--
v_afdeling_naam_parent := trim(v_afdeling_naam_parent);
IF LENGTH (v_afdeling_naam_parent) > 10 THEN
v_afdeling_naam_parent:= SUBSTR(v_afdeling_naam_parent,1,10);
fac.imp_writelog(p_import_key
,'W'
,v_aanduiding||'Afdeling-aanduiding is te lang'
,'Aanduiding wordt afgebroken tot [' || v_afdeling_naam_parent || ']'
);
END IF;
--
v_afdeling_omschrijving := trim(v_afdeling_omschrijving);
IF LENGTH (v_afdeling_omschrijving) > 60 THEN
v_afdeling_omschrijving:= SUBSTR(v_afdeling_omschrijving,1,60);
fac.imp_writelog(p_import_key
,'W'
,v_aanduiding||'Afdelingsomschrijving is te lang'
,'Aanduiding wordt afgebroken tot [' || v_afdeling_omschrijving || ']'
);
END IF;
--
v_kostenplaats_nr := trim(v_kostenplaats_nr);
IF LENGTH (v_kostenplaats_nr) > 30 THEN
v_kostenplaats_nr:= SUBSTR(v_kostenplaats_nr,1,30);
fac.imp_writelog(p_import_key
,'W'
,v_aanduiding||'Kostenplaats-aanduiding is te lang'
,'Aanduiding wordt afgebroken tot [' || v_kostenplaats_nr || ']'
);
END IF;
v_all_null := (v_bedrijf_naam is null) and
(v_afdeling_naam is null) and
(v_afdeling_naam_parent is null) and
(v_afdeling_omschrijving is null) and
(v_kostenplaats_nr is null);
-- Insert geformatteerde import record
IF v_ongeldig = FALSE AND v_all_null = FALSE THEN
v_errormsg := 'Fout bij toevoegen te importeren bedrijf/afdeling ['||v_afdeling_naam||']';
INSERT INTO GESL_IMP_ORGANISATIE (
PRS_BEDRIJF_NAAM
,PRS_AFDELING_NAAM
,PRS_AFDELING_NAAM_PARENT
,PRS_AFDELING_OMSCHRIJVING
,PRS_KOSTENPLAATS_NR
) VALUES (
v_bedrijf_naam
,v_afdeling_naam
,v_afdeling_naam_parent
,v_afdeling_omschrijving
,v_kostenplaats_nr
);
v_count_import := v_count_import + 1;
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;
END LOOP;
fac.imp_writelog ( p_import_key,
'S',
'Afdeling: aantal ingelezen regels: '||to_char(v_count_tot),
''
);
fac.imp_writelog ( p_import_key,
'S',
'Afdeling: aantal ongeldige importregels: <b>'||to_char(v_count_tot - v_count_import),
''
);
COMMIT;
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 gesl_import_organisatie;
/
CREATE OR REPLACE PROCEDURE gesl_update_organisatie (
p_import_key IN NUMBER
) IS
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);
v_aanduiding VARCHAR2 (200);
v_count NUMBER(10);
v_count_perlid NUMBER(10);
v_count_verpl NUMBER(10);
v_ongeldig NUMBER(1);
v_count_update NUMBER(10);
v_count_error NUMBER(10);
v_count_tot NUMBER(10);
--
v_bedrijf_key NUMBER(10);
v_kostenplaats_key NUMBER(10);
v_prs_afdeling_parentkey NUMBER(10);
CURSOR c_afd_new
IS
SELECT prs_afdeling_naam prs_afdeling_naam
, prs_afdeling_omschrijving prs_afdeling_omschrijving
FROM GESL_IMP_ORGANISATIE i
WHERE NOT EXISTS (
SELECT a.prs_afdeling_naam
FROM prs_afdeling a
WHERE a.prs_afdeling_verwijder IS NULL
AND RTRIM(a.prs_afdeling_upper) = RTRIM(UPPER(i.prs_afdeling_naam)));
CURSOR c_afd_upd
IS
SELECT i.prs_afdeling_omschrijving prs_afdeling_omschrijving
, prs_afdeling_key prs_afdeling_key
FROM GESL_IMP_ORGANISATIE i
, prs_afdeling a
WHERE a.prs_afdeling_verwijder IS NULL
AND RTRIM(a.prs_afdeling_upper) = RTRIM(UPPER(i.prs_afdeling_naam));
CURSOR c_afd_del
IS
SELECT prs_afdeling_key prs_afdeling_key
FROM prs_afdeling a
WHERE a.prs_afdeling_verwijder IS NULL
AND NOT EXISTS (
SELECT i.prs_afdeling_naam
FROM GESL_IMP_ORGANISATIE i
WHERE RTRIM(a.prs_afdeling_upper) = RTRIM(UPPER(i.prs_afdeling_naam)))
AND prs_bedrijf_key <> 2;
BEGIN
v_count_update := 0;
v_count_tot := 0;
v_count_error := 0;
FOR rec IN c_afd_new
LOOP
BEGIN
v_errormsg := 'Fout FETCH te importeren rij';
v_count_tot := v_count_tot + 1;
v_aanduiding := rec.prs_afdeling_naam||'|'||rec.prs_afdeling_omschrijving ||'| ';
v_errormsg := '';
v_prs_afdeling_parentkey := to_number(NULL);
v_bedrijf_key := 21;
v_errorhint := 'Fout bij toevoegen afdeling';
INSERT INTO PRS_AFDELING
(prs_afdeling_naam
,prs_afdeling_omschrijving
,prs_bedrijf_key
,prs_afdeling_parentkey
,prs_kostenplaats_key
)
VALUES
(rec.prs_afdeling_naam
,rec.prs_afdeling_omschrijving
,v_bedrijf_key
,v_prs_afdeling_parentkey
,1 -- default kostenplaats key
);
commit;
v_count_update := v_count_update + 1;
EXCEPTION WHEN OTHERS THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR(SQLERRM, 1, 200);
IF (v_errormsg = '') THEN
v_errormsg := 'Fout tijdens toevoegen van afdeling ['||v_aanduiding||']';
END IF;
v_errorhint := v_errorhint||': ' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding||v_errormsg,
v_errorhint
);
commit; -- tbv logging
END;
END LOOP;
v_count_update := 0;
v_count_tot := 0;
v_count_error := 0;
FOR rec IN c_afd_upd
LOOP
BEGIN
v_errormsg := 'Fout FETCH te importeren rij';
v_count_tot := v_count_tot + 1;
v_aanduiding := rec.prs_afdeling_key||'|'||rec.prs_afdeling_omschrijving ||'| ';
v_errormsg := '';
v_errorhint := '';
v_errorhint := 'Fout bij wijzigen afdeling';
UPDATE prs_afdeling
SET prs_afdeling_omschrijving = rec.prs_afdeling_omschrijving
WHERE prs_afdeling_key = rec.prs_afdeling_key;
commit;
v_count_update := v_count_update + 1;
EXCEPTION WHEN OTHERS THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR(SQLERRM, 1, 200);
IF (v_errormsg = '') THEN
v_errormsg := 'Fout tijdens aanpassen van afdeling ['||v_aanduiding||']';
END IF;
v_errorhint := v_errorhint||': ' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding||v_errormsg,
v_errorhint
);
commit; -- tbv logging
END;
END LOOP;
v_count_update := 0;
v_count_tot := 0;
v_count_error := 0;
FOR rec IN c_afd_del
LOOP
BEGIN
v_errormsg := 'Fout FETCH te importeren rij';
v_count_tot := v_count_tot + 1;
v_aanduiding := rec.prs_afdeling_key;
v_errormsg := '';
v_errorhint := '';
v_errorhint := 'Fout bij bepaling kinderen';
SELECT count(*)
INTO v_count_perlid
FROM prs_v_aanwezigperslid
WHERE prs_afdeling_key = rec.prs_afdeling_key;
IF v_count_perlid > 0 THEN
fac.imp_writelog (p_import_key,
'E',
'Fout bij verwijderen afdeling, afdeling bevat medewerkers ' || '[' || v_aanduiding || ']',
v_errorhint
);
END IF;
v_errorhint := 'Fout bij bepaling verplichtingen';
SELECT count(*)
INTO v_count_verpl
FROM prs_v_aanwezigperslid
WHERE prs_afdeling_key = rec.prs_afdeling_key;
IF v_count_verpl > 0 and v_count_perlid = 0 THEN
fac.imp_writelog (p_import_key,
'E',
'Fout bij verwijderen afdeling, afdeling heeft verplichtingen ' || '[' || v_aanduiding || ']',
v_errorhint
);
END IF;
SELECT count(*)
INTO v_count
FROM prs_v_afd_verplichting
WHERE prs_afdeling_key = rec.prs_afdeling_key;
IF v_count > 0 THEN
fac.imp_writelog (p_import_key,
'E',
'Fout bij verwijderen afdeling, afdeling heeft verplichtingen ' || '[' || v_aanduiding || ']',
v_errorhint
);
END IF;
IF v_count_verpl > 0 OR v_count_perlid > 0 THEN
v_errorhint := 'Fout bij inactief maken van afdeling';
UPDATE prs_afdeling
SET prs_afdeling_omschrijving = SUBSTR('Inactief: ' || prs_afdeling_omschrijving,1,30)
WHERE prs_afdeling_key = rec.prs_afdeling_key
AND prs_afdeling_omschrijving NOT LIKE 'Inactief%';
fac.imp_writelog (p_import_key,
'W',
'Afdeling inactief gemaakt ' || '[' || v_aanduiding || ']',
''
);
ELSE
v_errorhint := 'Fout bij verwijderen van afdeling';
UPDATE prs_afdeling
SET prs_afdeling_verwijder = sysdate
WHERE prs_afdeling_key = rec.prs_afdeling_key;
fac.imp_writelog (p_import_key,
'I',
'Afdeling verwijderd ' || '[' || v_aanduiding || ']',
''
);
END IF;
commit;
v_count_update := v_count_update + 1;
EXCEPTION WHEN OTHERS THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR(SQLERRM, 1, 200);
IF (v_errormsg = '') THEN
v_errormsg := 'Fout tijdens verwijderen van afdeling ['||v_aanduiding||']';
END IF;
v_errorhint := v_errorhint||': ' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding||v_errormsg,
v_errorhint
);
commit; -- tbv logging
END;
END LOOP;
END gesl_update_organisatie;
/
CREATE OR REPLACE PROCEDURE gesl_import_perslid (
p_import_key IN NUMBER
) IS
c_fielddelimitor VARCHAR2 (1) := ',';
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR (1000);
v_errorhint VARCHAR (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER;
v_ongeldig NUMBER(1);
v_mode NUMBER(1);
v_aanduiding VARCHAR (300);
v_all_null BOOLEAN;
v_count_error NUMBER(10);
v_count_tot NUMBER(10);
v_count_import NUMBER(10);
v_header_valid BOOLEAN;
-- De importvelden:
v_prs_afdeling_naam VARCHAR2(256);
v_prs_perslid_naam VARCHAR2(256);
v_prs_perslid_voornaam VARCHAR2(256);
v_prs_perslid_telefoonnr VARCHAR2(256);
v_prs_perslid_email VARCHAR2(256);
v_prs_srtperslid_omschrijving VARCHAR2(256);
v_prs_perslid_oslogin VARCHAR2(256);
v_alg_locatie_code VARCHAR2(256);
v_dummy VARCHAR2(256);
-- PRS_PERSLID
CURSOR c
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
DELETE FROM gesl_imp_perslid;
COMMIT;
v_count_error := 0;
v_count_tot := 0;
v_count_import := 0;
v_aanduiding := '';
v_header_valid := FALSE;
FOR rec IN c
LOOP
BEGIN
v_newline := rec.fac_imp_file_line;
v_count_tot := v_count_tot + 1;
v_errormsg := '';
v_errorhint := 'Fout opvragen te importeren rij';
v_aanduiding := v_newline;
v_ongeldig := 0;
-- Lees alle veldwaarden
-- 01 Ruimtenummer
fac.imp_getfield (v_newline,
C_FIELDDELIMITOR,
v_dummy
);
-- 02 Werkplekvolgnummer
fac.imp_getfield (v_newline,
C_FIELDDELIMITOR,
v_dummy
);
-- 03 Werkplekomschrijving
fac.imp_getfield (v_newline,
C_FIELDDELIMITOR,
v_dummy
);
-- 04 Afdelingscode
fac.imp_getfield (v_newline,
C_FIELDDELIMITOR,
v_prs_afdeling_naam
);
-- 05 Achternaam
fac.imp_getfield (v_newline,
C_FIELDDELIMITOR,
v_prs_perslid_naam
);
-- 06 Tussenvoegsel
fac.imp_getfield (v_newline,
C_FIELDDELIMITOR,
v_dummy
);
-- 07 Voorletters
fac.imp_getfield (v_newline,
C_FIELDDELIMITOR,
v_dummy
);
-- 08 Voornaam
fac.imp_getfield (v_newline,
C_FIELDDELIMITOR,
v_prs_perslid_voornaam
);
-- 09 Titel
fac.imp_getfield (v_newline,
C_FIELDDELIMITOR,
v_dummy
);
-- 10 Telefoonnummer
fac.imp_getfield (v_newline,
C_FIELDDELIMITOR,
v_prs_perslid_telefoonnr
);
-- 11 Mobiel
fac.imp_getfield (v_newline,
C_FIELDDELIMITOR,
v_dummy
);
-- 12 Email
fac.imp_getfield (v_newline,
C_FIELDDELIMITOR,
v_prs_perslid_email
);
-- 13 Functie
fac.imp_getfield (v_newline,
C_FIELDDELIMITOR,
v_prs_srtperslid_omschrijving
);
-- 14 Personeelsnummer
fac.imp_getfield (v_newline,
C_FIELDDELIMITOR,
v_dummy
);
-- 15 Login
fac.imp_getfield (v_newline,
C_FIELDDELIMITOR,
v_prs_perslid_oslogin
);
-- 16
fac.imp_getfield (v_newline,
C_FIELDDELIMITOR,
v_dummy
);
-- 17
fac.imp_getfield (v_newline,
C_FIELDDELIMITOR,
v_alg_locatie_code
);
--
IF (v_header_valid = FALSE)
THEN
IF v_prs_afdeling_naam = 'Afdelingscode' AND
v_prs_perslid_naam = 'Persoon achternaam' AND
v_prs_perslid_voornaam = 'Voornaam' AND
v_prs_perslid_telefoonnr = 'Telefoonnummer' AND
v_prs_perslid_email = 'Email' AND
v_prs_srtperslid_omschrijving = 'Functie' AND
v_prs_perslid_oslogin = 'Loginnaam' AND
v_alg_locatie_code = 'Locatie'
THEN
v_header_valid := TRUE;
ELSE
fac.imp_writelog (p_import_key,
'E',
v_aanduiding||'Ongeldig importbestand',
'Kopregel: ' || v_aanduiding
);
return;
END IF;
ELSE
-- Controleer alle veldwaarde
v_errorhint := 'Ongeldige afdelingscode';
v_prs_afdeling_naam := trim(v_prs_afdeling_naam);
IF LENGTH (v_prs_afdeling_naam) > 10
THEN
v_prs_afdeling_naam:= SUBSTR(v_prs_afdeling_naam,1,10);
-- fac.imp_writelog(p_import_key
-- ,'W'
-- ,v_aanduiding||'Afdelingscode is te lang'
-- ,'Aanduiding wordt afgebroken tot [' || v_prs_afdeling_naam || ']'
-- );
ELSE
IF (v_prs_afdeling_naam IS NULL) THEN
v_ongeldig := 1;
-- Is een geldige situatie om cursisten en andere vervuiling tegen te gaan,dus niet loggen
-- fac.imp_writelog(p_import_key
-- ,'E'
-- ,v_aanduiding||'Afdelingscode onbekend'
-- ,'Afdelingscode moet worden opgegeven'
-- );
END IF;
END IF;
--
v_errorhint := 'Ongeldige naam persoon';
v_prs_perslid_naam := trim(v_prs_perslid_naam);
IF LENGTH (v_prs_perslid_naam) > 30
THEN
v_prs_perslid_naam:= SUBSTR(v_prs_perslid_naam,1,30);
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;
-- geldige foutmelding
-- fac.imp_writelog(p_import_key
-- ,'E'
-- ,v_aanduiding||'Naam persoon onbekend'
-- ,'Naam persoon moet worden opgegeven'
-- );
END IF;
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 := trim(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) > 30
THEN
v_prs_srtperslid_omschrijving:= SUBSTR(v_prs_srtperslid_omschrijving,1,30);
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_ongeldig := 1;
-- Is een geldige situatie om cursisten en andere vervuiling tegen te gaan,dus niet loggen
-- fac.imp_writelog(p_import_key
-- ,'E'
-- ,v_aanduiding||'Functie persoon onbekend'
-- ,'Functie persoon moet worden opgegeven'
-- );
END IF;
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 importeren bedrijf/afdeling ['||v_prs_afdeling_naam||']';
INSERT INTO GESL_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
) VALUES (
v_ALG_LOCATIE_CODE
,NULL
,NULL
,NULL
,NULL
,NULL
,v_PRS_AFDELING_NAAM
,v_PRS_PERSLID_NAAM
,NULL
,NULL
,v_PRS_PERSLID_VOORNAAM
,NULL
,v_PRS_PERSLID_TELEFOONNR
,NULL
,v_PRS_PERSLID_EMAIL
,v_PRS_SRTPERSLID_OMSCHRIJVING
,NULL
,v_PRS_PERSLID_OSLOGIN
);
v_count_import := v_count_import + 1;
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;
END LOOP;
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-1),
''
);
COMMIT;
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_aanduiding||v_errormsg,
v_errorhint
);
END gesl_import_perslid;
/
CREATE OR REPLACE PROCEDURE gesl_update_perslid (
p_import_key IN NUMBER
)
AS
CURSOR c_perslid_add IS
SELECT
DECODE(p.prs_perslid_key,NULL,'ADD','MOD') AKTIE
, p.prs_perslid_key
, i.prs_perslid_naam
, i.prs_afdeling_naam
, i.prs_perslid_voornaam
, i.prs_perslid_telefoonnr
, i.prs_perslid_email
, i.prs_srtperslid_omschrijving
, i.prs_perslid_oslogin
, i.alg_locatie_code
FROM gesl_imp_perslid i, prs_perslid p
WHERE UPPER(i.prs_perslid_oslogin) = p.prs_perslid_oslogin(+)
AND i.prs_perslid_oslogin IS NOT NULL;
CURSOR c_perslid_del IS
SELECT
p.prs_perslid_key
,p.prs_perslid_oslogin
FROM gesl_imp_perslid i, prs_perslid p
WHERE i.prs_perslid_oslogin(+) = p.prs_perslid_oslogin
AND p.prs_perslid_verwijder IS NULL
AND i.prs_perslid_oslogin IS NULL
AND p.prs_perslid_oslogin IS NOT NULL
AND nvl (p.prs_perslid_oslogin, 'QueQueLeQue') NOT LIKE '\_%' ESCAPE '\';
v_teller INTEGER;
v_count NUMBER(10);
v_perslidkostenplaats_key NUMBER(10);
v_kostenplaats_key NUMBER(10);
v_perslid_key NUMBER(10);
v_afdeling_key NUMBER(10);
v_srtperslid_key NUMBER(10);
v_prs_kenmerk_key NUMBER(10);
v_ruimte_key NUMBER(10);
v_werkplek_key NUMBER(10);
v_newline VARCHAR2 (1000); -- Import line
v_fielddelimitor VARCHAR2 (1); -- Field seperator
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errmes VARCHAR(1024);
v_debug BOOLEAN;
BEGIN
v_debug := FALSE;
IF v_debug THEN
fac.imp_writelog (p_import_key,
'I',
'Processing PROCEDURE gesl_update_perslid',
'SET v_debug = FALSE to skip this information'
);
commit;
END IF;
SELECT count(*)
INTO v_count
FROM gesl_imp_perslid;
IF v_count = 0 THEN
fac.imp_writelog (p_import_key,
'E',
'Geen inputgegevens gevonden tijden update',
''
);
RETURN;
END IF;
-- Personen toevoegen/wijzigen
FOR rec IN c_perslid_add
LOOP
BEGIN
v_afdeling_key := -1;
v_errmes := 'Fout bij bepalen van de afdeling <' || rec.prs_afdeling_naam || '>';
SELECT prs_afdeling_key
INTO v_afdeling_key
FROM prs_v_aanwezigafdeling
WHERE RTRIM(prs_afdeling_upper) = RTRIM(UPPER(rec.prs_afdeling_naam));
v_errmes := 'Fout bij bepalen/aanmaken functie a.d.h.v. de functie-omschrijving <' || rec.prs_srtperslid_omschrijving || '>';
BEGIN
SELECT prs_srtperslid_key
INTO v_srtperslid_key
FROM prs_srtperslid
WHERE UPPER(prs_srtperslid_omschrijving) = UPPER(rec.prs_srtperslid_omschrijving);
EXCEPTION WHEN NO_DATA_FOUND THEN
INSERT INTO prs_srtperslid (prs_srtperslid_omschrijving)
VALUES (rec.prs_srtperslid_omschrijving)
RETURNING prs_srtperslid_key INTO v_srtperslid_key;
fac.imp_writelog (p_import_key,
'I',
'Functie toegevoegd: ' || rec.prs_srtperslid_omschrijving,
'key:' || v_srtperslid_key
);
END;
v_perslid_key := rec.prs_perslid_key;
IF (rec.aktie = 'ADD') THEN
v_errmes := 'Fout bij toevoegen persoon met persoonnr <' || rec.prs_perslid_oslogin || '>';
INSERT INTO prs_perslid
(prs_perslid_naam
,prs_perslid_module
,prs_perslid_telefoonnr
,prs_perslid_oslogin
,prs_srtperslid_key
,prs_afdeling_key
,prs_perslid_email)
values
(SUBSTR(rec.prs_perslid_voornaam || ' '|| rec.prs_perslid_naam, 1, 30)
,'PRS'
,rec.prs_perslid_telefoonnr
,rec.prs_perslid_oslogin
,v_srtperslid_key
,v_afdeling_key
,rec.prs_perslid_email
) RETURNING prs_perslid_key INTO v_perslid_key;
fac.imp_writelog (p_import_key,
'I',
'Persoon toegevoegd: ' || SUBSTR(rec.prs_perslid_voornaam || ' '|| rec.prs_perslid_naam, 1, 30),
'key:' || v_perslid_key
);
IF rec.alg_locatie_code = 'G' THEN v_werkplek_key := 1;
ELSIF rec.alg_locatie_code = 'O' THEN v_werkplek_key := 21;
ELSIF rec.alg_locatie_code = 'S' THEN v_werkplek_key := 22;
ELSE v_werkplek_key := NULL;
END IF;
IF v_werkplek_key IS NOT NULL THEN
INSERT INTO prs_perslidwerkplek (prs_perslid_key, prs_werkplek_key, prs_perslidwerkplek_bezetting)
VALUES (v_perslid_key, v_werkplek_key, 0);
END IF;
ELSE
v_errmes := 'Fout bij wijzigen persoon met login <' || rec.prs_perslid_oslogin || '>' || ' (' || rec.prs_afdeling_naam||','||to_char(v_afdeling_key)||')';
UPDATE prs_perslid
SET prs_perslid_naam = SUBSTR(rec.prs_perslid_voornaam || ' '|| rec.prs_perslid_naam, 1, 30)
,prs_perslid_telefoonnr = rec.prs_perslid_telefoonnr
,prs_perslid_oslogin = rec.prs_perslid_oslogin
,prs_perslid_email = rec.prs_perslid_email
,prs_srtperslid_key = v_srtperslid_key
,prs_afdeling_key = v_afdeling_key
,prs_perslid_verwijder = NULL
WHERE prs_perslid_key = v_perslid_key;
END IF;
COMMIT; -- Er zijn geen fouten opgetreden
EXCEPTION WHEN OTHERS THEN
ROLLBACK;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
fac.imp_writelog (p_import_key,
'E',
'Personen toevoegen/wijzigen: '|| v_errmes,
'Oracle foutmelding (' || oracle_err_num || '/' || oracle_err_mes || ')'
);
COMMIT; -- Logging opslaan
END;
END LOOP;
COMMIT;
-- Personen verwijderen
FOR rec IN c_perslid_del
LOOP
BEGIN
SELECT count(*)
INTO v_count
FROM prs_v_verplichting_all
WHERE prs_perslid_key = rec.prs_perslid_key;
IF (v_count = 0) THEN
UPDATE prs_perslid
SET prs_perslid_verwijder = sysdate
WHERE prs_perslid_key = rec.prs_perslid_key;
fac.imp_writelog (p_import_key,
'I',
'Persoon verwijderd: ' || rec.prs_perslid_oslogin,
'key:' || rec.prs_perslid_key
);
ELSE
fac.imp_writelog (p_import_key,
'E',
'Persoon met login ' || rec.prs_perslid_oslogin || ' kan niet verwijderd worden.',
'Persoon heeft nog ' || to_char(v_count) || ' openstaande verplichting(en).'
);
UPDATE prs_perslid
SET prs_perslid_naam = substr('Inactief: ' || prs_perslid_naam, 1, 30)
WHERE prs_perslid_key = rec.prs_perslid_key
AND prs_perslid_naam NOT LIKE 'Inactief%';
commit;
END IF;
v_teller := v_teller + 1;
COMMIT; -- alles is goed gegaan
EXCEPTION WHEN OTHERS THEN
ROLLBACK;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
fac.imp_writelog (p_import_key,
'E',
'Personen verwijderen: '|| v_errmes,
'Oracle foutmelding (' || oracle_err_num || '/' || oracle_err_mes || ')'
);
COMMIT; -- Logging opslaan
END;
END LOOP;
END gesl_update_perslid;
/
BEGIN fac.registercustversion('GESL', 7); END;
/
BEGIN adm.systrackscript('$Workfile: gesl.sql $', '$Revision$', 0); END;
/
COMMIT;
spool off