1228 lines
52 KiB
SQL
1228 lines
52 KiB
SQL
-- Script containing customer specific configuration sql statements for CWTD
|
||
-- (c) 2008 Facilitor
|
||
-- $Revision$
|
||
-- $Id$
|
||
--
|
||
-- Support: +31 53 4800700
|
||
|
||
spool xcwtd.lst
|
||
set echo on
|
||
|
||
CREATE OR REPLACE PROCEDURE cwtd_import_persoon (
|
||
p_import_key IN NUMBER
|
||
)
|
||
AS
|
||
c_max_import_str_len NUMBER(10) := 1000;
|
||
|
||
CURSOR c_cursor IS
|
||
SELECT *
|
||
FROM fac_imp_file
|
||
WHERE fac_import_key = p_import_key
|
||
ORDER BY fac_imp_file_index;
|
||
|
||
next_record c_cursor%ROWTYPE;
|
||
|
||
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);
|
||
|
||
-- De importvelden
|
||
v_afdeling_naam VARCHAR2 (1000);
|
||
v_afdeling_omschr VARCHAR2 (1000);
|
||
v_perslid_naam VARCHAR2 (1000);
|
||
v_perslid_tussenvoegsel VARCHAR2 (1000);
|
||
v_perslid_partn_tussen VARCHAR2 (1000);
|
||
v_perslid_partn_naam VARCHAR2 (1000);
|
||
v_perslid_voorletters VARCHAR2 (1000);
|
||
v_perslid_voornaam VARCHAR2 (1000);
|
||
v_perslid_fullname VARCHAR2 (1000);
|
||
v_perslid_telefoonnr VARCHAR2 (1000);
|
||
v_perslid_mobiel VARCHAR2 (1000);
|
||
v_perslid_oslogin VARCHAR2 (1000);
|
||
v_perslid_email VARCHAR2 (1000);
|
||
v_srtperslid_omschrijving VARCHAR2 (1000);
|
||
v_perslid_nr VARCHAR2 (1000);
|
||
v_perslid_geslacht VARCHAR2 (1000);
|
||
v_perslid_ingangsdatum VARCHAR2 (1000);
|
||
v_perslid_einddatum VARCHAR2 (1000);
|
||
v_locatie_omschrijving VARCHAR2 (1000);
|
||
v_locatie_code VARCHAR2 (1000);
|
||
v_ruimte_nr VARCHAR2 (1000);
|
||
v_dummy VARCHAR2 (1000);
|
||
header_found BOOLEAN;
|
||
v_controle_res VARCHAR2(30);
|
||
|
||
|
||
|
||
-- SUBFUNCTION
|
||
FUNCTION get_imp_value (p_value IN VARCHAR2, p_length IN NUMBER) RETURN VARCHAR2 IS
|
||
|
||
c_del_in_str VARCHAR2(16) := 'NULL';
|
||
c_del_in_str2 VARCHAR2(16) := '"';
|
||
|
||
v_value VARCHAR2(1000);
|
||
|
||
BEGIN
|
||
|
||
SELECT SUBSTR(TRIM(coalesce(replace(replace(p_value,c_del_in_str),c_del_in_str2,''),'')),1,p_length)
|
||
INTO v_value
|
||
FROM DUAL;
|
||
|
||
RETURN v_value;
|
||
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
RETURN p_value;
|
||
|
||
END;
|
||
|
||
|
||
BEGIN
|
||
-- Init
|
||
header_found := FALSE;
|
||
v_fielddelimitor := ';';
|
||
v_errormsg := '';
|
||
|
||
v_controle_res := 'OK'; -- Hier kan een controle ingebouwd worden ...
|
||
|
||
IF (v_controle_res IS NULL) THEN
|
||
|
||
v_errormsg := 'Ongeldig importbestand';
|
||
fac.imp_writelog (p_import_key, 'E', v_errormsg, '');
|
||
|
||
ELSE
|
||
|
||
-- Clear my previous imported rows
|
||
DELETE FROM cwtd_imp_persoon;
|
||
commit;
|
||
|
||
FOR next_record IN c_cursor LOOP
|
||
BEGIN
|
||
|
||
v_newline := SUBSTR(next_record.FAC_IMP_FILE_LINE,1,c_max_import_str_len);
|
||
|
||
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_afdeling_naam); -- Afdeling
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_afdeling_omschr); -- <afdelingomschrijving>
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_nr); -- UP nr
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_voorletters); -- Voorletters
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_tussenvoegsel); -- Voorvoegsels
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_naam); -- Achternaam
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_partn_tussen); -- Voorvoegsels Partner
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_partn_naam); -- Achternaam Partner
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_voornaam); -- Roepnaam
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_fullname); -- Volledige naam
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); -- Functie
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_srtperslid_omschrijving); -- <functienaam>
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_geslacht); -- Geslacht
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_email); -- E-mailadres
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_telefoonnr); -- Intern nummer
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_mobiel); -- Zakelijk mobiele nummer
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_locatie_omschrijving); -- Vestiging
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_ingangsdatum); -- In Dienst
|
||
v_perslid_ingangsdatum := '';
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_einddatum); -- Uit Dienst
|
||
v_perslid_einddatum := '';
|
||
v_perslid_oslogin := '';
|
||
|
||
-- Skip until the header is found
|
||
IF (v_afdeling_naam = 'Afdeling' AND
|
||
v_afdeling_omschr IS NULL AND
|
||
v_perslid_nr = 'UP nr' AND
|
||
v_perslid_voorletters = 'Voorletters' AND
|
||
v_perslid_tussenvoegsel = 'Voorvoegsels' AND
|
||
v_perslid_naam = 'Achternaam' AND
|
||
v_perslid_partn_tussen = 'Voorvgsl Partner' AND
|
||
v_perslid_partn_naam = 'Achternaam Partner' AND
|
||
v_perslid_voornaam = 'Roepnaam' AND
|
||
v_perslid_fullname = 'Naam' AND
|
||
v_dummy = 'Functie' AND
|
||
v_srtperslid_omschrijving IS NULL AND
|
||
v_perslid_geslacht = 'Geslacht' AND
|
||
v_perslid_email = 'E-mailadres' AND
|
||
v_perslid_telefoonnr = 'Intern nummer' AND
|
||
v_perslid_mobiel = 'Zakelijk mobiele nummer' AND
|
||
v_locatie_omschrijving = 'Vestiging'
|
||
)
|
||
THEN
|
||
header_found := TRUE;
|
||
ELSIF (header_found)
|
||
THEN
|
||
|
||
BEGIN
|
||
|
||
v_errormsg := 'Kan persoonsgegevens niet inlezen: ';
|
||
|
||
v_perslid_nr := get_imp_value(v_perslid_nr,16);
|
||
v_perslid_naam := get_imp_value(v_perslid_naam,30);
|
||
v_perslid_voornaam := get_imp_value(v_perslid_voornaam,30);
|
||
v_perslid_tussenvoegsel := get_imp_value(v_perslid_tussenvoegsel,15);
|
||
v_perslid_partn_naam := get_imp_value(v_perslid_partn_naam,30);
|
||
v_perslid_partn_tussen := get_imp_value(v_perslid_partn_tussen,15);
|
||
v_perslid_fullname := get_imp_value(v_perslid_fullname,60);
|
||
v_perslid_oslogin := get_imp_value(v_perslid_oslogin,30);
|
||
v_perslid_email := get_imp_value(v_perslid_email,200);
|
||
v_afdeling_naam := get_imp_value(v_afdeling_naam,10);
|
||
v_afdeling_omschr := get_imp_value(v_afdeling_omschr,60);
|
||
v_locatie_omschrijving := get_imp_value(v_locatie_omschrijving,30);
|
||
v_srtperslid_omschrijving := get_imp_value(v_srtperslid_omschrijving,30);
|
||
|
||
-- Velden met een waarde '' zijn leeg ivm privacy overwegingen
|
||
INSERT INTO cwtd_imp_persoon
|
||
(prs_perslid_nr
|
||
,prs_perslid_naam
|
||
,prs_perslid_voornaam
|
||
,prs_perslid_geslacht
|
||
,prs_perslid_partn_tussen
|
||
,prs_perslid_partn_naam
|
||
,prs_perslid_tussenvoegsel
|
||
,prs_perslid_voorletters
|
||
,prs_perslid_fullname
|
||
,prs_perslid_telefoonnr
|
||
,prs_perslid_mobiel
|
||
,prs_perslid_oslogin
|
||
,prs_perslid_email
|
||
,prs_srtperslid_omschrijving
|
||
,prs_afdeling_naam
|
||
,prs_afdeling_omschr
|
||
,prs_perslid_ingangsdatum
|
||
,prs_perslid_einddatum
|
||
,prs_locatie_omschrijving
|
||
,cwtd_imp_persoon_aanmaak
|
||
)
|
||
VALUES(v_perslid_nr
|
||
,v_perslid_naam
|
||
,v_perslid_voornaam
|
||
,v_perslid_geslacht
|
||
,v_perslid_partn_tussen
|
||
,v_perslid_partn_naam
|
||
,v_perslid_tussenvoegsel
|
||
,v_perslid_voorletters
|
||
,v_perslid_fullname
|
||
,v_perslid_telefoonnr
|
||
,v_perslid_mobiel
|
||
,v_perslid_oslogin
|
||
,v_perslid_email
|
||
,v_srtperslid_omschrijving
|
||
,v_afdeling_naam
|
||
,v_afdeling_omschr
|
||
,''
|
||
,''
|
||
,v_locatie_omschrijving
|
||
,sysdate
|
||
);
|
||
|
||
commit;
|
||
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg := v_errormsg || 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key, 'E', v_errormsg, 'personeelsnummer:'||v_perslid_nr);
|
||
commit; -- logging
|
||
|
||
END;
|
||
|
||
END IF;
|
||
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
|
||
IF header_found = FALSE THEN
|
||
fac.imp_writelog (p_import_key, 'E', 'Geen geldige header gevonden', '');
|
||
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;
|
||
/
|
||
|
||
SHOW ERRORS;
|
||
|
||
CREATE OR REPLACE PROCEDURE cwtd_update_persoon (p_import_key IN NUMBER)
|
||
AS
|
||
|
||
-- Constanten (LET OP: deze waarden moeten letterlijk in de DB aabwezig zijn!)
|
||
c_usrtab_key INTEGER := 1; -- Tbv GEBOUW
|
||
c_srtgebouw_default INTEGER := 1;
|
||
c_srtruimte_default INTEGER := 1;
|
||
|
||
-- Constanten (overig)
|
||
c_prs_werkplek_omschrijving VARCHAR2 (16) := 'Onbekend';
|
||
c_srtperslid_omschr_default VARCHAR2 (16) := 'Onbekend';
|
||
c_werkplek_volgnr_default INTEGER := 1;
|
||
c_verdieping_omschr_default VARCHAR2 (16) := 'BG';
|
||
c_ruimte_omschr_default VARCHAR2 (16) := 'Onbekend';
|
||
c_ruimte_code VARCHAR2 (3) := '000';
|
||
c_commitbuffer NUMBER := 1000;
|
||
c_perslid_aanmaak DATE; -- := TO_DATE('01011980','ddmmyy'); -- ivm privacy overwegingen
|
||
c_perslid_verwijder DATE; -- := TO_DATE('01011980','ddmmyy'); -- ivm privacy overwegingen
|
||
c_perslid_ingangsdatum DATE; -- := TO_DATE('01011980','ddmmyy'); -- ivm privacy overwegingen
|
||
c_no_key_found NUMBER := 0;
|
||
c_afdeling_niveau_persoon NUMBER(1) := 3; -- Afdelingsniveau waaraan personen gekoppeld worden
|
||
|
||
-- Prefix voor persoonnaam om aan te geven dat de persoon op de nominatie staat om verwijderd te
|
||
-- worden maar dat verwijderen nog niet mogelijk is omdat de persoon verplichtingen heeft.
|
||
c_inactief VARCHAR2(16) := 'INACTIEF:';
|
||
|
||
-- om de zoveel committen
|
||
v_buffercount NUMBER := 0;
|
||
|
||
CURSOR c_prs_del
|
||
IS
|
||
SELECT prs_perslid_key, prs_perslid_nr
|
||
FROM prs_perslid
|
||
WHERE prs_perslid_nr IS NOT NULL AND prs_perslid_verwijder IS NULL
|
||
AND LTRIM (prs_perslid_nr, '0') NOT IN
|
||
( SELECT LTRIM (prs_perslid_nr, '0') FROM cwtd_imp_persoon)
|
||
ORDER BY 1;
|
||
|
||
CURSOR c_prs_upd
|
||
IS
|
||
SELECT p.prs_perslid_key,
|
||
lp.prs_locatie_omschrijving,
|
||
lp.prs_perslid_partn_tussen,
|
||
lp.prs_perslid_partn_naam,
|
||
lp.prs_perslid_fullname,
|
||
lp.prs_afdeling_naam,
|
||
lp.prs_perslid_naam,
|
||
lp.prs_perslid_tussenvoegsel,
|
||
lp.prs_perslid_voorletters,
|
||
lp.prs_perslid_voornaam,
|
||
DECODE (lp.prs_perslid_telefoonnr,
|
||
'0', NULL,
|
||
lp.prs_perslid_telefoonnr)
|
||
prs_perslid_telefoonnr,
|
||
lp.prs_perslid_mobiel,
|
||
lp.prs_perslid_oslogin,
|
||
lp.prs_perslid_email,
|
||
COALESCE (lp.prs_srtperslid_omschrijving, 'Onbekend')
|
||
prs_srtperslid_omschrijving,
|
||
lp.prs_perslid_nr,
|
||
'' prs_perslid_titel,
|
||
p.prs_perslid_verwijder,
|
||
INSTR (lp.prs_perslid_fullname, lp.prs_perslid_naam) ind_eigen,
|
||
INSTR (lp.prs_perslid_fullname,
|
||
NVL (lp.prs_perslid_partn_naam, 'xxxxxx'))
|
||
ind_partner
|
||
FROM ( SELECT * FROM cwtd_imp_persoon) lp
|
||
LEFT OUTER JOIN
|
||
( SELECT * FROM prs_perslid) p
|
||
ON LTRIM (lp.prs_perslid_nr, '0') = LTRIM (p.prs_perslid_nr, '0')
|
||
-- Dit moet analoog aan UWVA#13061: verwijderde personen moeten kunnen worden gereactiveerd.
|
||
-- AND p.prs_perslid_verwijder IS NULL
|
||
ORDER BY lp.prs_perslid_nr ASC;
|
||
|
||
v_perslid_tussenvoegsel VARCHAR2(15);
|
||
v_perslid_naam VARCHAR2(30);
|
||
v_per_indnaamsvoegen VARCHAR2(1);
|
||
v_perslid_key NUMBER (10);
|
||
v_prs_key_cnt NUMBER (10);
|
||
v_srtperslid_key NUMBER (10);
|
||
v_afdeling_key NUMBER (10);
|
||
v_gebouw_key NUMBER (10);
|
||
v_verdieping_key NUMBER (10);
|
||
v_ruimte_nr VARCHAR2 (10);
|
||
v_ruimte_key NUMBER (10);
|
||
v_werkplek_key NUMBER (10);
|
||
v_gebouw_code VARCHAR2 (10);
|
||
v_srtperslid_omschr VARCHAR (30);
|
||
rec_prs_del c_prs_del%ROWTYPE;
|
||
rec_prs_upd c_prs_upd%ROWTYPE;
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_errormsg VARCHAR2 (1024);
|
||
v_errorhint VARCHAR2 (1024);
|
||
v_debug VARCHAR2 (1024);
|
||
v_count NUMBER (10);
|
||
v_update BOOLEAN;
|
||
v_aktie VARCHAR (10);
|
||
v_perslid_count_imp NUMBER;
|
||
v_perslid_count_fclt NUMBER;
|
||
v_perslid_newcount_fclt NUMBER;
|
||
currentversion fac_module.fac_module_version%TYPE;
|
||
l_validatie NUMBER;
|
||
v_srtimport VARCHAR2 (10);
|
||
o_afdeling_key NUMBER (10); -- huidige (oude) afdeling
|
||
l_nrkps NUMBER;
|
||
v_nr_werkplek NUMBER;
|
||
v_current_gebouw_key NUMBER;
|
||
v_new_gebouw_key NUMBER;
|
||
v_werkplek_volgnr NUMBER(10);
|
||
v_werkplek_oms VARCHAR2 (60);
|
||
|
||
BEGIN
|
||
-- Constanten:
|
||
SELECT SYSDATE, SYSDATE, SYSDATE
|
||
INTO c_perslid_aanmaak, c_perslid_verwijder, c_perslid_ingangsdatum
|
||
FROM DUAL;
|
||
|
||
-- *** Delete ***************************************************************
|
||
v_errorhint := 'Eventueel te verwijderen personen worden verwijderd ';
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_perslid_count_fclt
|
||
FROM prs_perslid
|
||
WHERE prs_perslid_nr IS NOT NULL AND prs_perslid_verwijder IS NULL;
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_perslid_count_imp
|
||
FROM cwtd_imp_persoon;
|
||
|
||
IF v_perslid_count_imp < 10 THEN
|
||
fac.imp_writelog (p_import_key, 'E', 'Geen records gevonden om te importeren.', '');
|
||
COMMIT;
|
||
RETURN;
|
||
END IF;
|
||
|
||
FOR rec_prs_del IN c_prs_del
|
||
LOOP
|
||
BEGIN
|
||
|
||
v_perslid_key := rec_prs_del.prs_perslid_key;
|
||
v_errorhint := 'Verwijderen van de persoon is NIET gelukt';
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_count
|
||
FROM prs_v_verplichting_refcheck pv
|
||
WHERE pv.prs_perslid_key = v_perslid_key;
|
||
|
||
IF v_count = 0
|
||
THEN
|
||
-- Persoon heeft geen enkele (actuele of historische) verplichting
|
||
v_errormsg := 'Kan persoon (kennelijk zonder historie!) niet met prs_perslid_key [' || TO_CHAR (v_perslid_key) || '] niet verwijder. ';
|
||
|
||
DELETE FROM prs_perslid
|
||
WHERE prs_perslid_key = v_perslid_key;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
'Persoon verwijderd met personeelsnummer ['||rec_prs_del.prs_perslid_nr||']',
|
||
''
|
||
);
|
||
ELSE
|
||
-- Controleer of er ACTUELE verplichtingen zijn
|
||
SELECT COUNT (*)
|
||
INTO v_count
|
||
FROM prs_v_verplichting_keys pv
|
||
WHERE pv.prs_perslid_key = v_perslid_key;
|
||
|
||
IF v_count > 0
|
||
THEN
|
||
v_errormsg := 'Kan persoon (kennelijk met historie!) niet inactiveren met prs_perslid_key [' || TO_CHAR (v_perslid_key) || ']';
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_naam = SUBSTR (c_inactief || prs_perslid_naam, 1, 30),
|
||
prs_perslid_oslogin = NULL
|
||
WHERE prs_perslid_key = v_perslid_key
|
||
AND prs_perslid_naam NOT LIKE c_inactief||'%';
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
'Persoon als ['||c_inactief||'] gemarkeerd met personeelsnummer ['||rec_prs_del.prs_perslid_nr||']',
|
||
''
|
||
);
|
||
ELSE
|
||
BEGIN
|
||
v_errormsg := 'Kan persoon (kennelijk met historie!) niet inactiveren (verwijderdatum zetten) met prs_perslid_key [' || TO_CHAR (v_perslid_key) || ']';
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_verwijder = c_perslid_verwijder
|
||
WHERE prs_perslid_key = v_perslid_key;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
'Persoon verwijderd met personeelsnummer ['||rec_prs_del.prs_perslid_nr||']',
|
||
''
|
||
);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
|
||
-- Kennelijk heeft de persoon toch ernstige verplichtingen
|
||
v_errorhint :=
|
||
'Persoon heeft nog (max. '
|
||
|| TO_CHAR (v_count)
|
||
|| ') verplichtingen; personeelsnummer: '
|
||
|| rec_prs_del.prs_perslid_nr;
|
||
fac.imp_writelog (p_import_key, 'I', 'Inactiveren persoon is niet gelukt', v_errorhint);
|
||
|
||
END;
|
||
|
||
END IF;
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg := v_errormsg||'(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
|
||
END;
|
||
END LOOP;
|
||
|
||
COMMIT;
|
||
|
||
-- *** Update ***************************************************************
|
||
v_errormsg := 'Persoonsgegevens worden nu aangepast (toevoegen/wijzigen) ';
|
||
|
||
FOR rec_prs_upd IN c_prs_upd
|
||
LOOP
|
||
BEGIN
|
||
|
||
-- Init
|
||
v_update := TRUE; -- Nog geen fouten gevonden
|
||
v_afdeling_key := c_no_key_found;
|
||
v_srtperslid_key := c_no_key_found;
|
||
v_perslid_key := c_no_key_found;
|
||
v_errormsg := '';
|
||
|
||
IF rec_prs_upd.prs_perslid_key IS NULL
|
||
THEN
|
||
v_aktie := 'INSERT';
|
||
v_errorhint := 'Persoonsgegevens kunnen niet toegevoegd worden';
|
||
ELSE
|
||
v_aktie := 'UPDATE';
|
||
v_errorhint := 'Persoonsgegevens kunnen niet gewijzigd worden';
|
||
END IF;
|
||
|
||
-- *** Controle verplichte gegevens + ophalen extra informatie ***
|
||
-- Controle: PRS_PERSLID_NR
|
||
IF rec_prs_upd.prs_perslid_nr IS NULL
|
||
THEN
|
||
v_errormsg := 'Persoon met achternaam ['||rec_prs_upd.prs_perslid_naam||' heeft geen personeelsnummer ';
|
||
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
|
||
v_update := FALSE;
|
||
END IF;
|
||
|
||
-- (oorspronkelijk overgenomen uit de CONN perman koppeling.)
|
||
IF rec_prs_upd.ind_eigen = 0 THEN
|
||
v_per_indnaamsvoegen := 'A';
|
||
ELSIF rec_prs_upd.ind_partner = 0 THEN
|
||
v_per_indnaamsvoegen := 'X';
|
||
ELSIF rec_prs_upd.ind_partner < rec_prs_upd.ind_eigen THEN
|
||
v_per_indnaamsvoegen := 'J';
|
||
ELSE
|
||
v_per_indnaamsvoegen := 'G';
|
||
END IF;
|
||
|
||
v_perslid_tussenvoegsel := rec_prs_upd.prs_perslid_tussenvoegsel;
|
||
v_perslid_naam := rec_prs_upd.prs_perslid_naam;
|
||
|
||
-- partner - eigen
|
||
IF v_per_indnaamsvoegen = 'J'
|
||
OR v_per_indnaamsvoegen = 'W'
|
||
OR v_per_indnaamsvoegen = 'E'
|
||
OR v_per_indnaamsvoegen = 'P'
|
||
THEN
|
||
v_perslid_tussenvoegsel := rec_prs_upd.prs_perslid_partn_tussen;
|
||
|
||
IF rec_prs_upd.prs_perslid_tussenvoegsel IS NOT NULL
|
||
THEN
|
||
v_perslid_naam := SUBSTR (rec_prs_upd.prs_perslid_partn_naam || '-' || rec_prs_upd.prs_perslid_tussenvoegsel || ' ' || rec_prs_upd.prs_perslid_naam, 1, 30);
|
||
ELSE
|
||
v_perslid_naam := SUBSTR (rec_prs_upd.prs_perslid_partn_naam || '-' || rec_prs_upd.prs_perslid_naam, 1, 30);
|
||
END IF;
|
||
-- partner
|
||
ELSIF v_per_indnaamsvoegen = 'A'
|
||
THEN
|
||
v_perslid_tussenvoegsel := rec_prs_upd.prs_perslid_partn_tussen;
|
||
v_perslid_naam := SUBSTR (rec_prs_upd.prs_perslid_partn_naam, 1, 30);
|
||
-- eigen - partner
|
||
ELSIF v_per_indnaamsvoegen = 'G'
|
||
THEN
|
||
IF rec_prs_upd.prs_perslid_partn_tussen IS NOT NULL
|
||
THEN
|
||
v_perslid_naam :=
|
||
SUBSTR (rec_prs_upd.prs_perslid_naam || '-' || rec_prs_upd.prs_perslid_partn_tussen || ' ' || rec_prs_upd.prs_perslid_partn_naam, 1, 30);
|
||
ELSE
|
||
v_perslid_naam := SUBSTR (rec_prs_upd.prs_perslid_naam || '-' || rec_prs_upd.prs_perslid_partn_naam, 1, 30);
|
||
END IF;
|
||
END IF;
|
||
|
||
-- Controle: PRS_PERSLID_NAAM
|
||
IF v_update AND v_perslid_naam IS NULL
|
||
THEN
|
||
v_errormsg := 'Persoon met personeelsnummer [' || rec_prs_upd.prs_perslid_nr||'] heeft geen achternaam';
|
||
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
|
||
v_update := FALSE;
|
||
END IF;
|
||
|
||
-- Controle: Kan persoon gereactiveerd worden of is er al een persoon met dezelfde prs_perslid_nr actief
|
||
IF v_update AND rec_prs_upd.prs_perslid_verwijder IS NOT NULL
|
||
THEN
|
||
BEGIN
|
||
-- Is er al een actieve persoon met dezelfde perslid_nr
|
||
SELECT COUNT(p.prs_perslid_key)
|
||
INTO v_prs_key_cnt
|
||
FROM prs_perslid p
|
||
WHERE p.prs_perslid_verwijder IS NULL
|
||
AND LTRIM(p.prs_perslid_nr, '0') LIKE LTRIM(rec_prs_upd.prs_perslid_nr, '0')
|
||
AND p.prs_perslid_key != rec_prs_upd.prs_perslid_key;
|
||
|
||
IF v_prs_key_cnt > 0
|
||
THEN
|
||
-- (UWVA#13270)
|
||
-- Waarde(n) gevonden: Er is al een actieve persoon met dezelfde prs_perslid_nr gevonden: Niet updaten!!!
|
||
--v_errormsg := 'Persoon hoeft niet gereactiveerd te worden; prs_perslid_nr: ' || rec_prs_upd.prs_perslid_nr;
|
||
--v_errorhint := 'Er bestaat al een persoon met dezelfde persooneelsnummer die actief is, GEEN ACTIE NODIG; personeelsnummer: ' || rec_prs_upd.prs_perslid_nr;
|
||
--fac.imp_writelog (p_import_key, 'I', v_errormsg, v_errorhint);
|
||
v_update := FALSE;
|
||
ELSE
|
||
-- Kennelijk is er geen persoon gevonden met dezelfde prs_perslid_nr
|
||
-- persoon kan gereactieveerd worden (prs_perslid_verwijder op NULL zetten)
|
||
-- v_update := TRUE;
|
||
v_errormsg := 'Persoon reactiveren; prs_perslid_nr: ' || rec_prs_upd.prs_perslid_nr;
|
||
v_errorhint := 'ACTIE wordt ondernomen; personeelsnummer: ' || rec_prs_upd.prs_perslid_nr;
|
||
fac.imp_writelog (p_import_key, 'I', v_errormsg, v_errorhint);
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_update := FALSE;
|
||
v_errorhint := 'Fout in het vinden aantal actieve personen; personeelsnummer: ' || rec_prs_upd.prs_perslid_nr || '?!';
|
||
END;
|
||
END IF;
|
||
|
||
-- Controle: PRS_AFDELING_NAAM
|
||
IF v_update
|
||
THEN
|
||
BEGIN
|
||
v_errormsg := 'De afdeling ['||rec_prs_upd.prs_afdeling_naam||']'||' kan niet <20><>nduidig bepaald worden ';
|
||
|
||
-- Bepaal de afdelingskey; indien afdeling niet bestaat nieuwe toevoegen.
|
||
SELECT prs_afdeling_key
|
||
INTO v_afdeling_key
|
||
FROM prs_afdeling
|
||
WHERE prs_afdeling_naam = upper(rec_prs_upd.prs_afdeling_naam)
|
||
AND prs_afdeling_verwijder is null;
|
||
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
INSERT INTO prs_kostenplaats (prs_kostenplaats_nr, prs_kostenplaats_module) values (rec_prs_upd.prs_afdeling_naam, 'PRS');
|
||
|
||
INSERT INTO prs_afdeling (prs_afdeling_naam, prs_afdeling_omschrijving, prs_kostenplaats_key, prs_bedrijf_key)
|
||
VALUES
|
||
( rec_prs_upd.prs_afdeling_naam
|
||
, 'Onbekend-'||rec_prs_upd.prs_afdeling_naam
|
||
, ( SELECT prs_kostenplaats_key
|
||
FROM prs_kostenplaats
|
||
WHERE prs_kostenplaats_verwijder is null
|
||
AND prs_kostenplaats_nr = rec_prs_upd.prs_afdeling_naam)
|
||
, 2);
|
||
|
||
-- Bepaal de afdelingskey;
|
||
SELECT prs_afdeling_key
|
||
INTO v_afdeling_key
|
||
FROM prs_afdeling
|
||
WHERE prs_afdeling_naam = upper(rec_prs_upd.prs_afdeling_naam)
|
||
AND prs_afdeling_verwijder is null;
|
||
|
||
WHEN OTHERS
|
||
THEN
|
||
v_update := FALSE;
|
||
v_errorhint := 'Kan Afdeling ' || rec_prs_upd.prs_afdeling_naam || ' niet eenduidig bepalen?!';
|
||
END;
|
||
END IF;
|
||
|
||
-- Controle: PRS_SRTPERSLID_OMSCHRIJVING
|
||
IF v_update
|
||
THEN
|
||
v_srtperslid_omschr := RTRIM (INITCAP (rec_prs_upd.prs_srtperslid_omschrijving));
|
||
|
||
BEGIN
|
||
-- Bepaal de key van de functie
|
||
SELECT prs_srtperslid_key
|
||
INTO v_srtperslid_key
|
||
FROM prs_srtperslid
|
||
WHERE prs_srtperslid_upper = UPPER (v_srtperslid_omschr) AND prs_srtperslid_verwijder IS NULL;
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
v_errormsg := 'prs_srtperslid ' || v_srtperslid_omschr || ' bestaat niet';
|
||
|
||
-- Functie bestaat kennelijk niet, maak 'm maar aan
|
||
INSERT INTO prs_srtperslid
|
||
(prs_srtperslid_omschrijving)
|
||
VALUES (v_srtperslid_omschr)
|
||
RETURNING prs_srtperslid_key
|
||
INTO v_srtperslid_key;
|
||
WHEN OTHERS
|
||
THEN
|
||
v_errorhint :=
|
||
'Functie '
|
||
|| v_srtperslid_omschr
|
||
|| ' kan niet bepaald worden; persoonnr: '
|
||
|| rec_prs_upd.prs_perslid_nr;
|
||
v_update := FALSE;
|
||
END;
|
||
END IF;
|
||
|
||
-- *** Daadwerkelijk insert/update prs_perslid ***
|
||
IF v_update
|
||
THEN
|
||
BEGIN
|
||
IF v_aktie = 'INSERT'
|
||
THEN
|
||
v_errormsg := 'Persoon kan niet worden toegevoegd';
|
||
|
||
INSERT INTO prs_perslid
|
||
(prs_perslid_naam, prs_perslid_tussenvoegsel, prs_perslid_module,
|
||
prs_perslid_voorletters, prs_perslid_voornaam,
|
||
prs_perslid_telefoonnr, prs_perslid_mobiel, prs_perslid_oslogin, prs_perslid_email, prs_perslid_nr,
|
||
prs_perslid_titel, prs_srtperslid_key, prs_afdeling_key, prs_perslid_aanmaak, fac_profiel_key
|
||
)
|
||
VALUES (v_perslid_naam, v_perslid_tussenvoegsel, 'PRS',
|
||
rec_prs_upd.prs_perslid_voorletters, rec_prs_upd.prs_perslid_voornaam,
|
||
rec_prs_upd.prs_perslid_telefoonnr, rec_prs_upd.prs_perslid_mobiel, rec_prs_upd.prs_perslid_oslogin, rec_prs_upd.prs_perslid_email, rec_prs_upd.prs_perslid_nr,
|
||
rec_prs_upd.prs_perslid_titel, v_srtperslid_key, v_afdeling_key, c_perslid_aanmaak, 21
|
||
);
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'C',
|
||
'Nieuw persoon toegevoegd',
|
||
'Naam/persoonsnr: '
|
||
|| v_perslid_naam
|
||
|| '/'
|
||
|| rec_prs_upd.prs_perslid_nr
|
||
);
|
||
ELSE
|
||
|
||
v_errormsg := 'Persoon kan niet worden gewijzigd';
|
||
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_naam = v_perslid_naam,
|
||
prs_perslid_tussenvoegsel = v_perslid_tussenvoegsel,
|
||
prs_perslid_voorletters = rec_prs_upd.prs_perslid_voorletters,
|
||
prs_perslid_voornaam = NVL (rec_prs_upd.prs_perslid_voornaam, prs_perslid_voornaam),
|
||
prs_perslid_telefoonnr = rec_prs_upd.prs_perslid_telefoonnr,
|
||
prs_perslid_titel = rec_prs_upd.prs_perslid_titel,
|
||
prs_srtperslid_key = v_srtperslid_key,
|
||
prs_afdeling_key = v_afdeling_key,
|
||
prs_perslid_verwijder = NULL,
|
||
prs_perslid_email = rec_prs_upd.prs_perslid_email
|
||
WHERE prs_perslid_key = rec_prs_upd.prs_perslid_key
|
||
AND ( prs_perslid_naam != v_perslid_naam
|
||
OR NVL (prs_perslid_tussenvoegsel, '-') != NVL (v_perslid_tussenvoegsel, '-')
|
||
OR prs_perslid_voorletters != 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 prs_srtperslid_key != v_srtperslid_key
|
||
OR prs_afdeling_key != v_afdeling_key
|
||
OR prs_perslid_email != rec_prs_upd.prs_perslid_email
|
||
OR rec_prs_upd.prs_perslid_verwijder IS NOT NULL
|
||
);
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
v_errorhint := to_char(v_afdeling_key)||'|'||rec_prs_upd.prs_afdeling_naam||'|xxx {' || v_errormsg || '}; personeelsnummer: ' || rec_prs_upd.prs_perslid_nr;
|
||
v_update := FALSE;
|
||
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
|
||
END;
|
||
END IF;
|
||
|
||
-- *** Werkplek *******************************************************
|
||
v_errorhint := 'Kan geen werkplek toevoegen';
|
||
|
||
IF v_update AND (v_aktie = 'UPDATE')
|
||
THEN
|
||
-- bepaal aantal werkplekken
|
||
BEGIN
|
||
SELECT COUNT(*)
|
||
INTO v_nr_werkplek
|
||
FROM prs_perslidwerkplek
|
||
WHERE prs_perslid_key = rec_prs_upd.prs_perslid_key;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
v_errormsg,
|
||
'Het aantal werkplekken kan niet bepaald worden?! personeelsnummer: '
|
||
|| rec_prs_upd.prs_perslid_nr
|
||
);
|
||
v_update := FALSE;
|
||
END;
|
||
|
||
IF v_update AND v_nr_werkplek = 1
|
||
THEN
|
||
BEGIN
|
||
|
||
-- bepaal huidige alg_gebouw_key
|
||
SELECT alg_gebouw_key
|
||
INTO v_current_gebouw_key
|
||
FROM prs_v_werkplekperslid_gegevens pwg
|
||
, alg_gebouw g
|
||
WHERE prs_perslid_key = rec_prs_upd.prs_perslid_key
|
||
AND g.alg_gebouw_upper = pwg.alg_gebouw_upper
|
||
AND g.alg_gebouw_verwijder IS NULL;
|
||
|
||
-- bepaal nieuwe alg_gebouw_key
|
||
SELECT g.alg_gebouw_key
|
||
INTO v_new_gebouw_key
|
||
FROM fac_usrdata ud,
|
||
alg_gebouw g
|
||
WHERE ud.fac_usrtab_key = c_usrtab_key
|
||
AND ud.fac_usrdata_omschr = g.alg_gebouw_code
|
||
AND ud.fac_usrdata_code = rec_prs_upd.prs_afdeling_naam
|
||
AND g.alg_gebouw_verwijder IS NULL;
|
||
|
||
-- indien gelijk dan werkplek niet updaten.
|
||
v_update := (v_current_gebouw_key != v_new_gebouw_key);
|
||
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
v_errormsg,
|
||
'huidige of nieuwe alg_gebouw_key kan niet bepaald worden?! personeelsnummer: '
|
||
|| rec_prs_upd.prs_perslid_nr
|
||
);
|
||
v_update := FALSE;
|
||
END;
|
||
END IF;
|
||
END IF;
|
||
|
||
IF v_update AND (rec_prs_upd.prs_afdeling_naam IS NOT NULL)
|
||
AND ((v_aktie = 'INSERT') OR (v_aktie = 'UPDATE') AND (v_nr_werkplek<=1))
|
||
THEN
|
||
|
||
IF v_aktie = 'INSERT'
|
||
THEN
|
||
v_errormsg := 'Fout bij toewijzen werkplek bij zojuist toegevoegde persoon ';
|
||
ELSE -- v_aktie = 'UPDATE'
|
||
v_errormsg := 'Fout bij het wijzigen van de werkplek';
|
||
END IF;
|
||
|
||
BEGIN
|
||
SELECT prs_perslid_key
|
||
INTO v_perslid_key
|
||
FROM prs_perslid
|
||
WHERE LTRIM (prs_perslid_nr, '0') = LTRIM (rec_prs_upd.prs_perslid_nr, '0')
|
||
AND prs_perslid_verwijder IS NULL;
|
||
EXCEPTION
|
||
WHEN TOO_MANY_ROWS
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
v_errormsg,
|
||
'Het personeelsnummer is niet uniek: ' || rec_prs_upd.prs_perslid_nr
|
||
);
|
||
|
||
v_update := FALSE;
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
v_errormsg,
|
||
'De persoon kan niet bepaald worden?! personeelsnummer: '
|
||
|| rec_prs_upd.prs_perslid_nr
|
||
);
|
||
|
||
v_update := FALSE;
|
||
END;
|
||
|
||
BEGIN
|
||
|
||
SELECT g.alg_gebouw_key
|
||
INTO v_gebouw_key
|
||
FROM fac_usrdata ud, alg_gebouw g
|
||
WHERE ud.fac_usrtab_key = c_usrtab_key
|
||
AND ud.fac_usrdata_omschr = g.alg_gebouw_code
|
||
AND ud.fac_usrdata_code = rec_prs_upd.prs_afdeling_naam
|
||
AND g.alg_gebouw_verwijder IS NULL;
|
||
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_update := FALSE;
|
||
|
||
END;
|
||
|
||
IF NOT v_update
|
||
THEN
|
||
v_errorhint :=
|
||
'Onbekende Gebouw-omschrijving '
|
||
|| rec_prs_upd.prs_afdeling_naam
|
||
|| '; personeelsnummer: '
|
||
|| rec_prs_upd.prs_perslid_nr;
|
||
fac.imp_writelog (p_import_key, 'I', v_errormsg, v_errorhint);
|
||
ELSE
|
||
|
||
BEGIN
|
||
v_errormsg := 'Bepalen alg_verdieping_key';
|
||
|
||
SELECT alg_verdieping_key
|
||
INTO v_verdieping_key
|
||
FROM alg_verdieping
|
||
WHERE alg_gebouw_key = v_gebouw_key AND alg_verdieping_verwijder IS NULL
|
||
AND alg_verdieping_volgnr = 0; -- Begane grond!
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
v_errorhint :=
|
||
'Persoon met persoonnummer ' || rec_prs_upd.prs_perslid_nr || ': toevoegen verdieping Onbekend';
|
||
|
||
INSERT INTO alg_verdieping
|
||
(alg_gebouw_key, alg_verdieping_omschrijving, alg_verdieping_volgnr,
|
||
alg_verdieping_code
|
||
)
|
||
VALUES (v_gebouw_key, c_verdieping_omschr_default, 0,
|
||
'0'
|
||
);
|
||
|
||
-- Alsnog bepalen v_verdieping_key
|
||
SELECT alg_verdieping_key
|
||
INTO v_verdieping_key
|
||
FROM alg_verdieping
|
||
WHERE alg_gebouw_key = v_gebouw_key
|
||
AND alg_verdieping_verwijder IS NULL
|
||
AND alg_verdieping_volgnr = 0; -- Begane grond!
|
||
END;
|
||
|
||
BEGIN
|
||
v_errorhint :=
|
||
'Persoon met persoonnummer '
|
||
|| rec_prs_upd.prs_perslid_nr
|
||
|| ': bepalen ruimte (ruimte zou bekend moeten zijn)';
|
||
|
||
SELECT alg_ruimte_nr, alg_ruimte_key
|
||
INTO v_ruimte_nr, v_ruimte_key
|
||
FROM alg_ruimte
|
||
WHERE alg_verdieping_key = v_verdieping_key
|
||
AND alg_ruimte_verwijder IS NULL
|
||
AND alg_ruimte_nr = c_ruimte_code;
|
||
-- Altijd ruimte met deze notatie!
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
INSERT INTO alg_ruimte
|
||
(alg_verdieping_key, alg_srtruimte_key, alg_ruimte_nr, alg_ruimte_omschrijving)
|
||
VALUES (v_verdieping_key, c_srtruimte_default, c_ruimte_code, c_ruimte_omschr_default);
|
||
|
||
-- Alsnog bepalen v_ruimte_key
|
||
SELECT alg_ruimte_nr, alg_ruimte_key
|
||
INTO v_ruimte_nr, v_ruimte_key
|
||
FROM alg_ruimte
|
||
WHERE alg_verdieping_key = v_verdieping_key
|
||
AND alg_ruimte_verwijder IS NULL
|
||
AND alg_ruimte_nr = c_ruimte_code;
|
||
-- Altijd ruimte met deze notatie!
|
||
END;
|
||
|
||
-- *** IMPLICIETE WERKPLEK (NIEUW) *********************************************
|
||
-- Persoon krijgt wp op fictieve of echte ruimte.
|
||
v_errorhint := 'Fout bij bepalen vrije werkplek';
|
||
|
||
SELECT COUNT ( * )
|
||
INTO v_count
|
||
FROM prs_werkplek w
|
||
WHERE w.prs_alg_ruimte_key = v_ruimte_key
|
||
AND NOT EXISTS
|
||
(SELECT 1
|
||
FROM prs_perslidwerkplek pw
|
||
WHERE pw.prs_werkplek_key = w.prs_werkplek_key);
|
||
|
||
IF (v_count > 0)
|
||
THEN
|
||
SELECT MIN (w.prs_werkplek_key)
|
||
INTO v_werkplek_key
|
||
FROM prs_werkplek w
|
||
WHERE w.prs_alg_ruimte_key = v_ruimte_key
|
||
AND NOT EXISTS
|
||
(SELECT 1
|
||
FROM prs_perslidwerkplek pw
|
||
WHERE pw.prs_werkplek_key = w.prs_werkplek_key);
|
||
|
||
v_errorhint := 'Fout bij koppelen persoon aan vrije werkplek';
|
||
|
||
INSERT INTO prs_perslidwerkplek (prs_perslid_key,
|
||
prs_werkplek_key,
|
||
prs_perslidwerkplek_bezetting
|
||
)
|
||
VALUES (v_perslid_key, v_werkplek_key, 100);
|
||
ELSE
|
||
v_errorhint := 'Fout bij bepalen nieuwe werkplek';
|
||
|
||
SELECT COALESCE (MAX (w.prs_werkplek_volgnr), 0) + 1
|
||
INTO v_werkplek_volgnr
|
||
FROM prs_werkplek w
|
||
WHERE w.prs_alg_ruimte_key = v_ruimte_key;
|
||
|
||
v_werkplek_oms := v_ruimte_nr || '/' || TO_CHAR (v_werkplek_volgnr);
|
||
v_errorhint := 'Fout bij toevoegen nieuwe werkplek';
|
||
|
||
INSERT INTO prs_werkplek (prs_werkplek_module,
|
||
prs_werkplek_volgnr,
|
||
prs_werkplek_omschrijving,
|
||
prs_alg_ruimte_key)
|
||
VALUES ('PRR',
|
||
v_werkplek_volgnr,
|
||
v_werkplek_oms,
|
||
v_ruimte_key)
|
||
RETURNING prs_werkplek_key
|
||
INTO v_werkplek_key;
|
||
|
||
v_errorhint :=
|
||
'Fout bij koppelen persoon aan nieuwe werkplek';
|
||
|
||
INSERT INTO prs_perslidwerkplek ( prs_perslid_key,
|
||
prs_werkplek_key,
|
||
prs_perslidwerkplek_bezetting
|
||
)
|
||
VALUES (v_perslid_key, v_werkplek_key, 100);
|
||
END IF;
|
||
|
||
---- *** EXPLICIETE WERKPLEK (OUD) ***********************************************
|
||
-- BEGIN
|
||
-- v_errorhint :=
|
||
-- 'Persoon met persoonnummer '
|
||
-- || rec_prs_upd.prs_perslid_nr
|
||
-- || ': bepalen werkplek (werkplek zou bekend moeten zijn)';
|
||
--
|
||
-- SELECT prs_werkplek_key
|
||
-- INTO v_werkplek_key
|
||
-- FROM prs_werkplek
|
||
-- WHERE prs_alg_ruimte_key = v_ruimte_key
|
||
-- AND prs_werkplek_verwijder IS NULL
|
||
-- AND prs_werkplek_volgnr = c_werkplek_volgnr_default;
|
||
-- -- Altijd werkplek met deze notatie!
|
||
-- EXCEPTION
|
||
-- WHEN NO_DATA_FOUND
|
||
-- THEN
|
||
-- INSERT INTO prs_werkplek
|
||
-- (prs_werkplek_volgnr, prs_werkplek_omschrijving, prs_alg_ruimte_key,
|
||
-- prs_werkplek_virtueel
|
||
-- )
|
||
-- VALUES (c_werkplek_volgnr_default, c_prs_werkplek_omschrijving, v_ruimte_key,
|
||
-- 1
|
||
-- );
|
||
--
|
||
-- -- Alsnog bepalen v_werkplek_key
|
||
-- SELECT prs_werkplek_key
|
||
-- INTO v_werkplek_key
|
||
-- FROM prs_werkplek
|
||
-- WHERE prs_alg_ruimte_key = v_ruimte_key
|
||
-- AND prs_werkplek_verwijder IS NULL
|
||
-- AND prs_werkplek_volgnr = c_werkplek_volgnr_default;
|
||
-- -- Altijd werkplek met deze notatie!
|
||
-- END;
|
||
--
|
||
-- IF v_aktie = 'INSERT' OR (v_nr_werkplek = 0 AND v_aktie = 'UPDATE')
|
||
-- THEN
|
||
-- INSERT INTO prs_perslidwerkplek
|
||
-- (prs_perslid_key, prs_werkplek_key, prs_perslidwerkplek_bezetting
|
||
-- )
|
||
-- VALUES (v_perslid_key, v_werkplek_key, 0
|
||
-- );
|
||
-- ELSE -- v_aktie = 'UPDATE' AND v_nr_werkplek = 1
|
||
-- UPDATE prs_perslidwerkplek
|
||
-- SET prs_werkplek_key = v_werkplek_key
|
||
-- WHERE prs_perslid_key = v_perslid_key;
|
||
-- END IF;
|
||
END IF; -- gebouw
|
||
END IF; -- afdeling
|
||
|
||
v_buffercount := v_buffercount + 1;
|
||
|
||
IF v_buffercount >= c_commitbuffer
|
||
THEN
|
||
COMMIT;
|
||
v_buffercount := 0;
|
||
END IF;
|
||
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errorhint := 'perslid_nr:' || rec_prs_upd.prs_perslid_nr || ' gebouw:' || rec_prs_upd.prs_afdeling_naam || ' ' || v_errorhint || ' {' || v_errormsg || '}';
|
||
v_errormsg := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
|
||
END;
|
||
END LOOP;
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_perslid_newcount_fclt
|
||
FROM prs_perslid
|
||
WHERE prs_perslid_nr IS NOT NULL AND prs_perslid_verwijder IS NULL;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Aantal actieve personen (met personeelsnr) vooraf: '
|
||
|| TO_CHAR (v_perslid_count_fclt)
|
||
|| ' nu: '
|
||
|| TO_CHAR (v_perslid_newcount_fclt),
|
||
''
|
||
);
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_perslid_newcount_fclt -- misbruik
|
||
FROM prs_perslid
|
||
WHERE prs_perslid_nr IS NULL AND prs_perslid_verwijder IS NULL;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Aantal actieve personen zonder personeelsnr: ' || TO_CHAR (v_perslid_newcount_fclt),
|
||
''
|
||
);
|
||
|
||
-- plaats medewerkers die nog niet in de default groep zitten in de default groep.
|
||
INSERT INTO fac_gebruikersgroep
|
||
(fac_groep_key, prs_perslid_key)
|
||
(SELECT 1, prs_perslid_key
|
||
FROM prs_perslid p
|
||
WHERE prs_perslid_oslogin IS NOT NULL
|
||
AND prs_perslid_verwijder IS NULL
|
||
AND NOT EXISTS (
|
||
SELECT prs_perslid_key
|
||
FROM fac_gebruikersgroep gg
|
||
WHERE fac_groep_key = 1
|
||
AND p.prs_perslid_key = gg.prs_perslid_key));
|
||
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errorhint := v_errorhint || ' {' || v_errormsg || '}';
|
||
v_errormsg := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
|
||
END;
|
||
/
|
||
|
||
|
||
CREATE OR REPLACE VIEW CWTD_V_NOTI_CNTREMINDER
|
||
(CODE, SENDER, RECEIVER, TEXT, KEY,
|
||
PAR1, PAR2, XKEY)
|
||
AS
|
||
SELECT '', '', 7282,
|
||
'Rapp<EFBFBD>l: Contract '
|
||
|| c.cnt_contract_nummer_intern
|
||
|| ' ('
|
||
|| c.cnt_contract_omschrijving
|
||
|| ' '
|
||
|| b.prs_bedrijf_naam
|
||
|| ')'
|
||
|| ' moet uiterlijk per '
|
||
|| TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key), 'DD-MM-YYYY')
|
||
|| ' worden verlengd of opgezegd.',
|
||
c.cnt_contract_key, c.cnt_contract_nummer_intern, cnt.cnt_getopzegdatum (c.cnt_contract_key), NULL
|
||
FROM cnt_v_aanwezigcontract c, prs_bedrijf b
|
||
WHERE b.prs_bedrijf_key = c.cnt_prs_bedrijf_key
|
||
AND trunc(SYSDATE) = trunc(cnt.cnt_getrappeldatum(c.cnt_contract_key));
|
||
|
||
-- backoffice bezoekers rapport (tbv notificatie naar gebouwadres)
|
||
CREATE OR REPLACE VIEW CWTD_V_RAP_BEZBO
|
||
(
|
||
datum,
|
||
van,
|
||
tot,
|
||
bezoeker,
|
||
bedrijf,
|
||
Parkeerplaats,
|
||
Contactpersoon,
|
||
Gastheer_vrouw,
|
||
Telefoon,
|
||
Ruimte,
|
||
Actie,
|
||
Opmerking,
|
||
Gebouw_code,
|
||
FCLT_H_alg_gebouw_key
|
||
)
|
||
AS
|
||
SELECT TO_CHAR (bez_afspraak_datum, 'DD-MM-YYYY') datum,
|
||
TO_CHAR (bez_afspraak_datum, 'HH24:MI') van,
|
||
TO_CHAR (bez_afspraak_eind, 'HH24:MI') tot,
|
||
bez_afspraak_naam Bezoeker,
|
||
bez_afspraak_bedrijf Bedrijf,
|
||
NVL2 (rd.res_rsv_deel_key, 'Ja', NULL) parkeer,
|
||
p.prs_perslid_naam_full Contactpersoon,
|
||
bez_afspraak_gastheer Gastheer_vrouw,
|
||
COALESCE (p2.prs_perslid_telefoonnr, p2.prs_perslid_mobiel),
|
||
aog.alg_gebouw_code
|
||
|| ' '
|
||
|| aog.alg_verdieping_code
|
||
|| ' '
|
||
|| aog.alg_ruimte_nr
|
||
ruimte,
|
||
bez_actie_omschrijving actie,
|
||
ba.bez_afspraak_opmerking opmerking,
|
||
aog.alg_gebouw_code,
|
||
aog.alg_gebouw_key
|
||
FROM bez_afspraak ba,
|
||
bez_bezoekers bb,
|
||
bez_actie bac,
|
||
alg_v_allonrgoed_gegevens aog,
|
||
res_rsv_deel rd,
|
||
prs_v_perslid_fullnames_all p,
|
||
prs_perslid p2
|
||
WHERE TRUNC (bez_afspraak_datum) = TRUNC (SYSDATE + 1)
|
||
AND bb.bez_afspraak_key = ba.bez_afspraak_key
|
||
AND ba.bez_actie_key = bac.bez_actie_key
|
||
AND aog.alg_onroerendgoed_keys = ba.alg_onrgoed_keys
|
||
AND bb.bez_bezoekers_key = rd.bez_bezoekers_key(+)
|
||
AND ba.bez_afspraak_contact_key = p.prs_perslid_key
|
||
AND p2.prs_perslid_key(+) = ba.bez_afspraak_host_key;
|
||
|
||
-- Stuur elke dag een overzicht van bezoekers naar gebouwadres
|
||
CREATE OR REPLACE VIEW CWTD_V_NOTI_BEZBO
|
||
(
|
||
CODE,
|
||
SENDER,
|
||
RECEIVER,
|
||
TEXT,
|
||
KEY,
|
||
XKEY,
|
||
XEMAIL,
|
||
XMOBILE
|
||
)
|
||
AS
|
||
SELECT 'CUST01',
|
||
NULL,
|
||
NULL,
|
||
'Bezoekers overzicht '
|
||
|| g.alg_gebouw_omschrijving
|
||
|| ' '
|
||
|| TRUNC (SYSDATE + 1),
|
||
(SELECT fac_usrrap_key
|
||
FROM fac_usrrap
|
||
WHERE fac_usrrap_view_name = 'CWTD_V_RAP_BEZBO'),
|
||
g.alg_gebouw_key,
|
||
g.alg_gebouw_email,
|
||
NULL
|
||
FROM alg_gebouw g
|
||
WHERE g.alg_gebouw_email IS NOT NULL;
|
||
|
||
|
||
SHOW ERRORS
|
||
|
||
BEGIN fac.registercustversion('CWTD', 9); END;
|
||
/
|
||
BEGIN adm.systrackscriptId('$Id$', 0); END;
|
||
/
|
||
COMMIT;
|
||
SPOOL OFF
|