Files
Customer/CWTD/cwtd.sql
Arthur Egberink d43159cfb1 Verwijder factuur import
svn path=/Customer/trunk/; revision=13884
2009-05-06 15:04:48 +00:00

1110 lines
46 KiB
SQL
Raw Blame History

-- Script containing customer specific configuration sql statements for CWTD
-- (c) 2008 Facilitor
-- $Revision: 6 $
-- $Modtime: 6-05-09 16:55 $
--
-- Support: +31 53 4800700
spool xcwtd.lst
set echo on
CREATE OR REPLACE PROCEDURE cwtd_import_persoon (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2
)
AS
c_max_import_str_len NUMBER(10) := 1000;
CURSOR c_cursor IS
SELECT *
FROM fac_imp_file
WHERE fac_imp_file_applicatie = 'PERSOON'
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_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_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_naamcompl 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_applname, p_applrun, 'E', v_errormsg, '');
ELSE
-- Clear my previous imported rows
DELETE FROM cwtd_imp_persoon;
DELETE FROM IMP_LOG where imp_log_applicatie = p_applname;
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_perslid_nr);
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_naam);
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_geslacht);
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_partn_tussen);
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_partn_naam);
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_voornaam);
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_tussenvoegsel);
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_voorletters);
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_telefoonnr);
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_mobiel);
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_oslogin);
v_perslid_oslogin := '';
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_email);
fac.imp_getfield (v_newline, v_fielddelimitor, v_srtperslid_omschrijving);
fac.imp_getfield (v_newline, v_fielddelimitor, v_afdeling_naam);
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_ingangsdatum);
v_perslid_ingangsdatum := '';
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_einddatum);
v_perslid_einddatum := '';
fac.imp_getfield (v_newline, v_fielddelimitor, v_locatie_omschrijving);
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_naamcompl);
-- Skip until the header is found
IF ( v_perslid_nr = 'Personeelsnummer' AND
v_perslid_naam = 'Geboortenaam' AND
v_perslid_geslacht = 'geslacht' AND
v_perslid_partn_tussen = 'voorvoegsel echtg./partner' AND
v_perslid_partn_naam = 'naam echtg./partner' AND
v_perslid_voornaam = 'roepnaam' AND
v_perslid_tussenvoegsel = 'voorvoegsel' AND
v_perslid_voorletters = 'voorletters' AND
v_perslid_telefoonnr = 'Telefoon intern' AND
v_perslid_mobiel = 'GSM nummer zaak' AND
v_perslid_email = 'E-mailadres werk' AND
v_srtperslid_omschrijving = 'Functienaam volledig' AND
v_afdeling_naam = 'Locatie' AND
v_locatie_omschrijving = 'Standplaats'
)
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_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_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_telefoonnr
,prs_perslid_mobiel
,prs_perslid_oslogin
,prs_perslid_email
,prs_srtperslid_omschrijving
,prs_afdeling_naam
,prs_perslid_ingangsdatum
,prs_perslid_einddatum
,prs_locatie_omschrijving
,prs_perslid_naamcompl
,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_telefoonnr
,v_perslid_mobiel
,v_perslid_oslogin
,v_perslid_email
,v_srtperslid_omschrijving
,v_afdeling_naam
,''
,''
,v_locatie_omschrijving
,v_perslid_naamcompl
,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_applname, p_applrun, '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_applname, p_applrun, '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_applname, p_applrun, 'E', v_errormsg, '');
END;
/
-- show errors;
CREATE OR REPLACE PROCEDURE cwtd_update_persoon (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
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 p.prs_perslid_key, p.prs_perslid_nr
FROM PRS_PERSLID p, (select prs_perslid_nr
from cwtd_imp_persoon
where prs_perslid_nr is not null) lp
WHERE 1=1
AND p.prs_perslid_nr IS NOT NULL
AND p.prs_perslid_verwijder IS NULL
AND p.prs_perslid_nr = lp.prs_perslid_nr(+)
AND lp.prs_perslid_nr is null
ORDER BY 2, 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_naamcompl
, 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, c_srtperslid_omschr_default) prs_srtperslid_omschrijving
, lp.prs_perslid_nr
, '' prs_perslid_titel
, p.prs_perslid_verwijder
, INSTR (lp.prs_perslid_naamcompl, lp.prs_perslid_naam) ind_eigen
, INSTR (lp.prs_perslid_naamcompl, NVL (lp.prs_perslid_partn_naam, 'xxxxxx')) ind_partner
FROM cwtd_imp_persoon lp, prs_perslid p
WHERE 1=1
AND lp.prs_perslid_nr = p.prs_perslid_nr(+)
-- 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, p.prs_perslid_key DESC;
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_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;
BEGIN
--return;
-- 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_applname, p_applrun, '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_applname,
p_applrun,
'I',
'Persoon verwijderd met personeelsnummer ['||rec_prs_del.prs_perslid_nr||']',
''
);
commit; -- tbv logging
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_applname,
p_applrun,
'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_applname,
p_applrun,
'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_applname, p_applrun, '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_applname, p_applrun, 'E', v_errormsg, v_errorhint);
END;
END LOOP;
COMMIT;
-- Update
v_errormsg := 'Persoonsgegevens worden nu angepast (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_applname, p_applrun, 'E', v_errormsg, v_errorhint);
commit; -- logging
v_update := FALSE;
END IF;
-- 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_applname, p_applrun, 'E', v_errormsg, v_errorhint);
v_update := FALSE;
END IF;
-- Controle: Kan persoon gereactieveerd 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 p.prs_perslid_nr LIKE rec_prs_upd.prs_perslid_nr
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_applname, p_applrun, '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_applname, p_applrun, '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
);
-- Wat is de key van deze nieuwe geworden?
SELECT prs_srtperslid_key
INTO v_srtperslid_key
FROM prs_srtperslid
WHERE prs_srtperslid_omschrijving = v_srtperslid_omschr AND prs_srtperslid_verwijder IS NULL;
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_applname,
p_applrun,
'C',
'Nieuw persoon toegevoegd',
'Naam/persoonsnr: '
|| v_perslid_naam
|| '/'
|| rec_prs_upd.prs_perslid_nr
);
commit;
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_nr = rec_prs_upd.prs_perslid_nr
AND 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
);
commit;
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_applname, p_applrun, '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
AND prs_perslidwerkplek_verwijder IS NULL;
EXCEPTION
WHEN OTHERS
THEN
fac.imp_writelog (p_applname,
p_applrun,
'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_applname,
p_applrun,
'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 prs_perslid_nr = rec_prs_upd.prs_perslid_nr AND prs_perslid_verwijder IS NULL;
EXCEPTION
WHEN TOO_MANY_ROWS
THEN
fac.imp_writelog (p_applname,
p_applrun,
'I',
v_errormsg,
'Het personeelsnummer is niet uniek: ' || rec_prs_upd.prs_perslid_nr
);
v_update := FALSE;
WHEN OTHERS
THEN
fac.imp_writelog (p_applname,
p_applrun,
'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_applname, p_applrun, '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_key
INTO 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_key
INTO 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;
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;
END IF;
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_applname, p_applrun, '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_applname,
p_applrun,
'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_applname,
p_applrun,
'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_applname, p_applrun, 'E', v_errormsg, v_errorhint);
END;
/
CREATE OR REPLACE VIEW CWTD_V_NOTI_CNTREMINDER
(CODE, SENDER, RECEIVER, TEXT, KEY,
PAR1, PAR2, XKEY)
AS
SELECT '', '', 2521,
'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));
show errors
COMMIT;
spool off