6913 lines
288 KiB
SQL
6913 lines
288 KiB
SQL
--
|
||
-- $Id$
|
||
--
|
||
-- Script containing customer specific sql for UWVA (UWV Amsterdam)
|
||
-- related to ABS/KPN/VINDER/PROVISIONING/PHONEBOOK.
|
||
|
||
DEFINE thisfile = 'UWVA_PRS.SQL'
|
||
DEFINE dbuser = '^UWVA'
|
||
|
||
SET ECHO ON
|
||
SET DEFINE ON
|
||
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
|
||
WHENEVER SQLERROR EXIT;
|
||
SELECT adm.scriptspoolfile('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL;
|
||
WHENEVER SQLERROR CONTINUE;
|
||
SPOOL &fcltlogfile
|
||
SET DEFINE OFF
|
||
|
||
------ payload begin ------
|
||
|
||
-- UWVA#15040 Import van projectkostenplaatsen die niet voorkomen in de KPN import
|
||
CREATE OR REPLACE PROCEDURE uwva_import_kpn_prj (p_import_key IN NUMBER)
|
||
AS
|
||
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); -- Input line
|
||
v_field VARCHAR2 (100);
|
||
v_fielddelimitor VARCHAR2 (1);
|
||
v_errormsg VARCHAR (200);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
header_is_valid NUMBER;
|
||
v_afdeling VARCHAR2 (100);
|
||
v_status VARCHAR2 (100);
|
||
v_omschrijving VARCHAR2 (100);
|
||
v_boekingsunit VARCHAR2 (100);
|
||
v_project VARCHAR2 (100);
|
||
BEGIN
|
||
v_fielddelimitor := ';';
|
||
|
||
header_is_valid := 0;
|
||
|
||
DELETE FROM uwva_imp_kpn_prj;
|
||
|
||
FOR NEXT_RECORD IN c_cursor
|
||
LOOP
|
||
BEGIN
|
||
v_newline := next_record.FAC_IMP_FILE_LINE;
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_boekingsunit);
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_project);
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_omschrijving);
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_status);
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_afdeling);
|
||
|
||
IF ( header_is_valid = 0
|
||
AND v_afdeling = 'Afdeling'
|
||
AND v_status = 'Status op ingangsdatum'
|
||
AND v_omschrijving = 'Omschrijving'
|
||
AND v_boekingsunit = 'BU'
|
||
AND v_project = 'Project')
|
||
THEN
|
||
header_is_valid := 1;
|
||
ELSE
|
||
IF ( header_is_valid = 1
|
||
AND v_afdeling <> ' '
|
||
AND v_project <> ' ')
|
||
THEN
|
||
IF (LENGTH (v_afdeling) >= 6) -- lengte van kostenplaats moet minimaal 6 posities zijn.
|
||
THEN
|
||
INSERT INTO uwva_imp_kpn_prj (project,
|
||
afdeling,
|
||
status,
|
||
omschrijving,
|
||
boekingsunit)
|
||
VALUES (SUBSTR (v_project, 1, 30),
|
||
SUBSTR (v_afdeling, 1, 6),
|
||
SUBSTR (v_status, 1, 1),
|
||
SUBSTR (v_omschrijving, 1, 60),
|
||
SUBSTR (v_boekingsunit, 1, 6));
|
||
ELSE
|
||
fac.imp_writelog (p_import_key, 'E', 'Invalid import file', 'Er is een ongeldige Projectkostenplaats aangetroffen in het importbestand:' || SUBSTR (v_project, 1, 30));
|
||
|
||
-- UWVA#23269: Hier stond uwva_imp_kpn en dat leek mij niet goed (zeker met 't
|
||
-- vervolg in uwva_update_abs() zoals dat tegenwoordig het geval is)!!!
|
||
DELETE FROM uwva_imp_kpn_prj; -- maak uwva_imp_kpn_prj weer leeg.
|
||
EXIT; -- kostenplaats niet 6 posities; voorloopnullen kunnen weggevallen zijn.
|
||
END IF;
|
||
END IF;
|
||
END IF;
|
||
END;
|
||
END LOOP;
|
||
|
||
IF (header_is_valid = 0)
|
||
THEN
|
||
fac.imp_writelog (p_import_key, 'E', 'Invalid import file', 'Er is geen geldige Header aangetroffen en in het importbestand');
|
||
END IF;
|
||
|
||
-- UWVA#41977: Import robuust gemaakt tegen dubbele aanlevering van KPN_PRJ-bestand.
|
||
DELETE FROM fac_imp_file
|
||
WHERE fac_import_key = p_import_key;
|
||
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;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE uwva_update_kpn_prj (p_import_key IN NUMBER)
|
||
AS
|
||
BEGIN
|
||
-- update wordt door de uwva_update_kpn procedure uitgevoerd.
|
||
NULL;
|
||
END;
|
||
/
|
||
|
||
-- UWVA#7 Import van kostenplaatsen
|
||
-- UWVA#20021 Nu met organisatiestructuur en budgethouders + mandaten
|
||
-- (waardoor budgethouderimport overbodig wordt)
|
||
CREATE OR REPLACE PROCEDURE uwva_import_kpn (p_import_key IN NUMBER)
|
||
AS
|
||
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); -- Input line
|
||
v_field VARCHAR2 (100);
|
||
v_fielddelimitor VARCHAR2 (1);
|
||
v_errormsg VARCHAR (200);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
header_is_valid NUMBER;
|
||
v_empty VARCHAR2 (100);
|
||
v_afdeling VARCHAR2 (100);
|
||
v_status VARCHAR2 (100);
|
||
v_omschrijving VARCHAR2 (100);
|
||
v_niv2_code VARCHAR2 (100);
|
||
v_niv2_oms VARCHAR2 (100);
|
||
v_niv3_code VARCHAR2 (100);
|
||
v_niv4_code VARCHAR2 (100);
|
||
v_niv5_code VARCHAR2 (100);
|
||
v_niv6_code VARCHAR2 (100);
|
||
v_niv7_code VARCHAR2 (100);
|
||
v_perslid_nr VARCHAR2 (100);
|
||
v_mandaatcode VARCHAR2 (100);
|
||
v_date1 VARCHAR2 (20);
|
||
v_date2 VARCHAR2 (20);
|
||
BEGIN
|
||
v_fielddelimitor := ';';
|
||
|
||
header_is_valid := 0;
|
||
|
||
DELETE FROM uwva_imp_kpn;
|
||
|
||
FOR next_record IN c_cursor LOOP
|
||
BEGIN
|
||
v_newline := next_record.FAC_IMP_FILE_LINE;
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_afdeling);
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_omschrijving);
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_niv2_code);
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_niv2_oms);
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_niv3_code);
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_niv4_code);
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_niv5_code);
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_niv6_code);
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_niv7_code);
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_nr);
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_mandaatcode);
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_date1);
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_date2);
|
||
|
||
IF ( header_is_valid = 0
|
||
AND v_afdeling = 'code_eenheid' --code_eenheid
|
||
AND v_omschrijving = 'naam_eenheid' --naam_eenheid
|
||
AND v_niv2_code = 'code_eenheid_niveau_2' --code_eenheid_niveau_2
|
||
AND v_niv2_oms = 'naam_eenheid_nivo_2' --naam_eenheid_nivo_2
|
||
AND v_niv3_code = 'code_eenheid_niveau_3' --code_eenheid_niveau_3
|
||
AND v_niv4_code = 'code_eenheid_niveau_4' --code_eenheid_niveau_4
|
||
AND v_niv5_code = 'code_eenheid_niveau_5' --code_eenheid_niveau_5
|
||
AND v_niv6_code = 'code_eenheid_niveau_6' --code_eenheid_niveau_6
|
||
AND v_niv7_code = 'code_eenheid_niveau_7' --code_eenheid_niveau_7
|
||
AND v_perslid_nr = 'wnr_leidinggevende' --wnr_leidinggevende
|
||
AND v_mandaatcode = 'code_mandaat' --code_mandaat
|
||
AND v_date1 = 'start_datum' --start_datum
|
||
AND v_date2 = 'eind_datum' --eind_datum
|
||
)
|
||
THEN
|
||
header_is_valid := 1;
|
||
ELSE
|
||
IF (header_is_valid = 1 AND v_afdeling != ' ')
|
||
THEN
|
||
IF (LENGTH (v_afdeling) >= 6) -- lengte van kostenplaats moet minimaal 6 posities zijn.
|
||
THEN
|
||
IF (SYSDATE >= TO_DATE (v_date1, 'dd-mm-yyyy') AND SYSDATE <= TO_DATE (v_date2, 'dd-mm-yyyy'))
|
||
THEN v_status := 'A';
|
||
ELSE v_status := 'I';
|
||
END IF;
|
||
|
||
INSERT INTO uwva_imp_kpn
|
||
(afdeling,
|
||
status,
|
||
omschrijving,
|
||
niv2_code,
|
||
niv3_code,
|
||
niv4_code,
|
||
niv5_code,
|
||
niv6_code,
|
||
niv7_code,
|
||
perslid_nr,
|
||
mandaatcode
|
||
)
|
||
VALUES (SUBSTR (v_afdeling, 1, 6), SUBSTR (v_status, 1, 1),
|
||
SUBSTR (v_omschrijving, 1, 60),
|
||
-- Het laagste niveau afdeling dat in iedere regel wordt meegegeven
|
||
-- is de afdeling waar die regel over gaat. We willen alleen de parent
|
||
-- en bovenliggende afdelingen hebben, dus laat de huidige afdeling maar
|
||
-- weg (zodat we in de update een coalesce kunnen gebruiken om de parent
|
||
-- te bepalen!)
|
||
DECODE(v_niv2_code, v_afdeling, NULL, SUBSTR (v_niv2_code, 1, 6) ),
|
||
DECODE(v_niv3_code, v_afdeling, NULL, SUBSTR (v_niv3_code, 1, 6) ),
|
||
DECODE(v_niv4_code, v_afdeling, NULL, SUBSTR (v_niv4_code, 1, 6) ),
|
||
DECODE(v_niv5_code, v_afdeling, NULL, SUBSTR (v_niv5_code, 1, 6) ),
|
||
DECODE(v_niv6_code, v_afdeling, NULL, SUBSTR (v_niv6_code, 1, 6) ),
|
||
DECODE(v_niv7_code, v_afdeling, NULL, SUBSTR (v_niv7_code, 1, 6) ),
|
||
SUBSTR (v_perslid_nr, 1, 16), SUBSTR(v_mandaatcode, 1, 6)
|
||
);
|
||
ELSE
|
||
fac.imp_writelog (p_import_key, 'E', 'Invalid import file', 'Er is een ongeldige Kostenplaats aangetroffen in het importbestand. Een kostenplaats moet uit 6 posities bestaan. kostenplaats:' || SUBSTR (v_afdeling, 1, 6));
|
||
DELETE FROM uwva_imp_kpn; -- maak uwva_imp_kpn weer leeg.
|
||
EXIT; -- kostenplaats heeft geen 6 posities. Voorloopnullen kunnen weggevallen zijn.
|
||
END IF;
|
||
END IF;
|
||
END IF;
|
||
END;
|
||
END LOOP;
|
||
|
||
IF (header_is_valid = 0)
|
||
THEN
|
||
fac.imp_writelog (p_import_key, 'E', 'Invalid import file', 'Er is geen geldige Header aangetroffen en in het importbestand');
|
||
END IF;
|
||
|
||
-- UWVA#41977: Import robuust gemaakt tegen dubbele aanlevering van KPN-bestand.
|
||
DELETE FROM fac_imp_file
|
||
WHERE fac_import_key = p_import_key;
|
||
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;
|
||
/
|
||
|
||
-- UWVA#20021: KPN-import met organisatiestructuur.
|
||
-- UWVA#23718: Door overgang naar Peoplesoft is het importbestand gewijzigd
|
||
-- en worden inactieve KPN niet meer meegegeven (nog steeds?).
|
||
-- UWVA#75874: Check op 50% voortaan tegen alleen actieve/niet verlopen KPN.
|
||
CREATE OR REPLACE PROCEDURE uwva_update_kpn (p_import_key IN NUMBER)
|
||
AS
|
||
-- UWVA#32268: Project- en gebouwkostenplaatsen (= alfanumeriek) niet meer
|
||
-- eerst aanmaken als cluster en dan direct weer verwijderen.
|
||
CURSOR cclusters
|
||
IS
|
||
SELECT afdeling, status, omschrijving, niv2_code, 'PRS' type
|
||
FROM uwva_imp_kpn
|
||
WHERE status = 'A'
|
||
AND niv2_code IS NULL
|
||
AND fac.safe_to_number (afdeling) > 0
|
||
ORDER BY 1;
|
||
|
||
-- UWVA#16503: KPN_PRJ-kostenplaatsen dominant over KPN-kostenplaatsen!
|
||
-- UWVA#23718: quick fix; alleen nog actieve kostenplaatsen in import, dus
|
||
-- inactieve kostenplaatsen zijn kostenplaatsen die alleen nog
|
||
-- in Facilitor voorkomen.
|
||
CURSOR ckostenplaatsen
|
||
IS
|
||
SELECT 1, afdeling, status, omschrijving, COALESCE (niv2_code, afdeling) boekingsunit, 'PRS' type
|
||
FROM uwva_imp_kpn
|
||
UNION
|
||
SELECT 2, project, status, omschrijving, boekingsunit, 'PRJ' type
|
||
FROM uwva_imp_kpn_prj
|
||
--UNION
|
||
--SELECT 1, prs_kostenplaats_nr afdeling, 'I' status, prs_kostenplaats_omschrijving omschrijving, NULL boekingsunit, 'PRS' type
|
||
-- FROM prs_kostenplaats
|
||
-- WHERE prs_kostenplaats_verwijder IS NULL
|
||
-- AND prs_kostenplaats_module = 'PRS'
|
||
-- AND prs_kostenplaats_upper NOT IN (SELECT afdeling FROM uwva_imp_kpn)
|
||
UNION
|
||
SELECT 3, k.prs_kostenplaats_nr afdeling, 'I' status, k.prs_kostenplaats_omschrijving omschrijving, NULL boekingsunit, k.prs_kostenplaats_module type
|
||
FROM prs_kostenplaats k
|
||
WHERE k.prs_kostenplaats_module IN ('PRS', 'ALG', 'PRJ') -- UWVA#31020: Ook ALG + PRJ inactiveren!
|
||
AND k.prs_kostenplaats_verwijder IS NULL
|
||
--AND prs_kostenplaats_upper NOT IN (SELECT afdeling FROM uwva_imp_kpn)
|
||
AND NOT EXISTS
|
||
(SELECT 1
|
||
FROM uwva_imp_kpn
|
||
WHERE UPPER (afdeling) = k.prs_kostenplaats_upper)
|
||
AND NOT EXISTS
|
||
(SELECT 1
|
||
FROM uwva_imp_kpn_prj
|
||
WHERE UPPER (project) = k.prs_kostenplaats_upper)
|
||
ORDER BY 1, 2;
|
||
|
||
-- Aparte cursor, zodat eerst alle afdelingen (dus alle parent-afdelingen)
|
||
-- toegevoegd kunnen worden, voordat parent-child links worden vastgelegd.
|
||
-- Niveau6 geeft aan of een afdeling op afdelingsniveau 6 zou komen (en dus
|
||
-- naar niveau 5 gehaald moet worden, door 'm naast z'n parent te zetten.
|
||
CURSOR cstructuur
|
||
IS
|
||
SELECT afdeling, omschrijving, COALESCE (niv7_code, niv6_code, niv5_code, niv4_code, niv3_code, niv2_code) parent, DECODE (niv6_code, NULL, 0, 1) niveau6
|
||
FROM uwva_imp_kpn
|
||
WHERE status = 'A'
|
||
AND niv2_code IS NOT NULL
|
||
AND fac.safe_to_number (afdeling) > 0
|
||
ORDER BY 1;
|
||
|
||
v_errormsg VARCHAR (200);
|
||
oracle_err_mes VARCHAR2 (200);
|
||
c_maxvariation NUMBER;
|
||
c_prs_bedrijfkey NUMBER;
|
||
currentversion fac_module.fac_module_version%TYPE;
|
||
l_oldcount NUMBER;
|
||
l_oldcountverw NUMBER;
|
||
l_impcount NUMBER;
|
||
l_impcountverw NUMBER;
|
||
l_impcount_prj NUMBER;
|
||
l_newcount NUMBER;
|
||
l_newcountverw NUMBER;
|
||
l_manualcount NUMBER;
|
||
l_created BOOLEAN; -- In deze sessie aangemaakt!
|
||
l_inactivated BOOLEAN; -- In deze sessie inactief gemaakt of gebleven!
|
||
lniv2_codekey NUMBER (10);
|
||
lkostenplaatskey NUMBER (10);
|
||
lafdelingkey NUMBER (10);
|
||
lparentkey NUMBER (10);
|
||
v_count NUMBER;
|
||
|
||
FUNCTION isafdelingskostenplaats (kpn IN VARCHAR2)
|
||
RETURN BOOLEAN
|
||
IS
|
||
BEGIN
|
||
RETURN fac.safe_to_number (kpn) > 0;
|
||
END isafdelingskostenplaats;
|
||
BEGIN
|
||
c_maxvariation := 0.5; -- Max new/old ratio to prevent undesired changes
|
||
c_prs_bedrijfkey := 1; -- Key of own UWV bedrijf
|
||
|
||
SELECT MAX (fac_module_version) INTO currentversion FROM fac_module;
|
||
|
||
fac.imp_writelog (p_import_key, 'I', 'Facilitor KPN import version ' || currentversion, '$Revision$');
|
||
|
||
-- How many active records are now present?
|
||
SELECT COUNT ( * )
|
||
INTO l_oldcount
|
||
FROM prs_kostenplaats
|
||
WHERE prs_kostenplaats_verwijder IS NULL
|
||
AND prs_kostenplaats_omschrijving NOT LIKE 'INACTIEF:%'
|
||
AND COALESCE (prs_kostenplaats_eind, SYSDATE + 1) > TRUNC (SYSDATE);
|
||
|
||
-- How many inactive records are now present? (for summary only)
|
||
SELECT COUNT ( * )
|
||
INTO l_oldcountverw
|
||
FROM prs_kostenplaats
|
||
WHERE prs_kostenplaats_verwijder IS NOT NULL
|
||
OR (prs_kostenplaats_omschrijving LIKE 'INACTIEF:' AND prs_kostenplaats_eind < SYSDATE);
|
||
|
||
-- How many (in)active records are imported?
|
||
SELECT COUNT ( * )
|
||
INTO l_impcount
|
||
FROM uwva_imp_kpn
|
||
WHERE status = 'A';
|
||
|
||
SELECT COUNT ( * )
|
||
INTO l_impcountverw
|
||
FROM uwva_imp_kpn
|
||
WHERE status != 'A';
|
||
|
||
SELECT COUNT ( * )
|
||
INTO l_impcount_prj
|
||
FROM uwva_imp_kpn_prj
|
||
WHERE status = 'A';
|
||
|
||
--IF 1 - ((l_impcount + l_impcount_prj) / l_oldcount) > c_maxvariation
|
||
IF (ABS ((l_impcount + l_impcount_prj) - l_oldcount) > c_maxvariation * l_oldcount)
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'E',
|
||
'Het verschil tussen de actieve kostenplaatsen ('
|
||
|| TO_CHAR (l_oldcount)
|
||
|| ') en geimporteerde aantallen ('
|
||
|| TO_CHAR (l_impcount + l_impcount_prj)
|
||
|| ') is te groot',
|
||
'Zie Specificaties: De afwijking is teveel en bedraagt '
|
||
|| TO_CHAR (((l_oldcount - (l_impcount + l_impcount_prj)) / l_oldcount) * 100, '999D9')
|
||
|| '%.');
|
||
RETURN;
|
||
END IF;
|
||
|
||
-- Clusters (actieve).
|
||
FOR rc IN cclusters
|
||
LOOP
|
||
-- Bestaat deze al?
|
||
BEGIN
|
||
SELECT prs_afdeling_key
|
||
INTO lniv2_codekey
|
||
FROM prs_afdeling
|
||
WHERE prs_afdeling_verwijder IS NULL
|
||
AND prs_afdeling_upper = UPPER (rc.afdeling)
|
||
AND prs_afdeling_parentkey IS NULL;
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
-- Misschien is het een BU die nu nog als afdeling (child) staat
|
||
-- geregistreerd; die wordt dan nu gepromoveerd tot BU.
|
||
BEGIN
|
||
SELECT prs_afdeling_key
|
||
INTO lniv2_codekey
|
||
FROM prs_afdeling
|
||
WHERE prs_afdeling_verwijder IS NULL
|
||
AND prs_afdeling_upper = UPPER (rc.afdeling);
|
||
|
||
UPDATE prs_afdeling
|
||
SET prs_bedrijf_key = c_prs_bedrijfkey,
|
||
prs_afdeling_parentkey = NULL
|
||
WHERE prs_afdeling_verwijder IS NULL
|
||
AND prs_afdeling_key = lniv2_codekey;
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
lniv2_codekey := -1;
|
||
END;
|
||
WHEN OTHERS
|
||
THEN
|
||
lniv2_codekey := -1;
|
||
END;
|
||
|
||
IF lniv2_codekey = -1
|
||
THEN
|
||
-- Bestaat nog niet.
|
||
INSERT INTO prs_afdeling (prs_afdeling_naam,
|
||
prs_afdeling_omschrijving,
|
||
prs_bedrijf_key,
|
||
prs_afdeling_parentkey)
|
||
VALUES (rc.afdeling,
|
||
rc.omschrijving,
|
||
c_prs_bedrijfkey,
|
||
NULL);
|
||
ELSE
|
||
-- Niet heel belangrijk: omschrijving (re)setten.
|
||
UPDATE prs_afdeling
|
||
SET prs_afdeling_omschrijving = rc.omschrijving
|
||
WHERE prs_afdeling_key = lniv2_codekey
|
||
AND prs_afdeling_omschrijving != rc.omschrijving;
|
||
END IF;
|
||
END LOOP;
|
||
|
||
-- Clusters (toplevel afdelingen) geregeld!
|
||
|
||
-- Afdelingen/kostenplaatsen.
|
||
FOR rc IN ckostenplaatsen
|
||
LOOP
|
||
l_created := (1 = 0);
|
||
l_inactivated := (1 = 0);
|
||
|
||
-- Bestaat deze al?
|
||
BEGIN
|
||
SELECT prs_kostenplaats_key
|
||
INTO lkostenplaatskey
|
||
FROM prs_kostenplaats
|
||
WHERE prs_kostenplaats_verwijder IS NULL
|
||
AND prs_kostenplaats_upper = UPPER (rc.afdeling);
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
BEGIN
|
||
-- Er bestaat geen actuele kostenplaats.
|
||
-- UWVA#647: Misschien een (onterecht) verwijderde?
|
||
SELECT prs_kostenplaats_key
|
||
INTO lkostenplaatskey
|
||
FROM prs_kostenplaats
|
||
WHERE prs_kostenplaats_upper = UPPER (rc.afdeling);
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
-- Kostenplaats bestaat echt nog niet.
|
||
lkostenplaatskey := -1;
|
||
WHEN TOO_MANY_ROWS
|
||
THEN
|
||
-- Meer dan <20><>n verwijderde instantie, dan heeft iemand zeer
|
||
-- waarschijnlijk iets handmatig niet goed gedaan.
|
||
fac.imp_writelog (p_import_key, 'W', 'Kostenplaats komt vaker voor (handmatige mutatie!)',
|
||
rc.afdeling || '/' || rc.omschrijving);
|
||
|
||
-- Er zijn dus louter verwijderde instanties; pak de oudste.
|
||
SELECT MIN (prs_kostenplaats_key)
|
||
INTO lkostenplaatskey
|
||
FROM prs_kostenplaats
|
||
WHERE prs_kostenplaats_upper = UPPER (rc.afdeling);
|
||
END;
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (p_import_key, 'W', 'Kan kostenplaats niet eenduidig bepalen',
|
||
rc.afdeling || '/' || rc.omschrijving);
|
||
END;
|
||
|
||
IF lkostenplaatskey = -1 AND rc.status = 'A'
|
||
THEN
|
||
-- Bestaat nog niet en moet gaan bestaan.
|
||
BEGIN
|
||
-- Module wordt voor oude kostenplaatsen aan het einde op de
|
||
-- juiste waarde gezet.
|
||
INSERT INTO prs_kostenplaats (prs_kostenplaats_nr,
|
||
prs_kostenplaats_omschrijving,
|
||
prs_kostenplaats_module)
|
||
VALUES (rc.afdeling, rc.omschrijving, rc.TYPE)
|
||
RETURNING prs_kostenplaats_key
|
||
INTO lkostenplaatskey;
|
||
|
||
fac.imp_writelog (p_import_key, 'I', 'Kostenplaats is toegevoegd',
|
||
rc.afdeling || '/' || rc.omschrijving);
|
||
|
||
l_created := (1 = 1);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := '(ORACLE error ' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key, 'E', 'Kostenplaats kan niet toegevoegd worden ' || v_errormsg,
|
||
rc.afdeling || '/' || rc.omschrijving);
|
||
END;
|
||
ELSE
|
||
-- Bestaat al wel.
|
||
IF rc.status = 'A'
|
||
THEN
|
||
-- (Re)Activeer de kostenplaats.
|
||
UPDATE prs_kostenplaats
|
||
SET prs_kostenplaats_verwijder = NULL,
|
||
prs_kostenplaats_eind = NULL,
|
||
prs_kostenplaats_nr = rc.afdeling,
|
||
prs_kostenplaats_omschrijving = rc.omschrijving
|
||
WHERE prs_kostenplaats_key = lkostenplaatskey;
|
||
ELSE
|
||
UPDATE prs_kostenplaats
|
||
SET prs_kostenplaats_eind = SYSDATE,
|
||
prs_kostenplaats_omschrijving = SUBSTR ('INACTIEF:' || rc.omschrijving, 1, 60)
|
||
WHERE prs_kostenplaats_key = lkostenplaatskey
|
||
AND prs_kostenplaats_omschrijving NOT LIKE 'INACTIEF%';
|
||
|
||
UPDATE prs_kostenplaats
|
||
SET prs_kostenplaats_eind = SYSDATE
|
||
WHERE prs_kostenplaats_key = lkostenplaatskey
|
||
AND prs_kostenplaats_eind IS NULL -- UWVA#31020/MVH!
|
||
AND prs_kostenplaats_omschrijving LIKE 'INACTIEF%';
|
||
|
||
l_inactivated := (1 = 1);
|
||
END IF;
|
||
END IF;
|
||
|
||
-- Nu bestaat kostenplaats gegarandeerd en is lkostenplaatskey geldig.
|
||
BEGIN
|
||
-- Let op (UWVA#178):
|
||
-- Hoewel wij afdelingen altijd hergebruiken, kan het door handmatig
|
||
-- beheer gebeuren dat een afdeling dubbel voorkomt, 1x verwijderd en
|
||
-- 1x actueel.
|
||
-- Om dan de juiste te nemen en TOO_MANY_ROWS te vermijden, gebruiken
|
||
-- we hier nu deze GROUP BY-expressie.
|
||
-- UWVA#22805: MAX() levert altijd een resultaat, dus treedt nooit
|
||
-- NO_DATA_FOUND op, ook als niets wordt gevonden.
|
||
-- Daarom een COALESCE met -1.
|
||
SELECT COALESCE (MAX (prs_afdeling_key), -1)
|
||
INTO lafdelingkey
|
||
FROM prs_afdeling
|
||
WHERE prs_afdeling_upper = UPPER (rc.afdeling);
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
lafdelingkey := -1;
|
||
END;
|
||
|
||
-- We hoeven nu alleen nog maar de afdeling aan te maken als het een PRS-
|
||
-- kostenplaats is.
|
||
IF isafdelingskostenplaats (rc.afdeling)
|
||
THEN
|
||
-- Als l_created = TRUE, dan is kostenplaats net aangemaakt. Als het
|
||
-- een divisie (cluster) betreft, dan is afdeling ook net aangemaakt
|
||
-- en moeten we die dus niet nog een keer aanmaken, maar updaten!
|
||
-- UWVA#22805: l_created = TRUE impliceert dus v_count > 0 (want voor
|
||
-- een nieuwe "divisie-kostenplaats" is al een "divisie-afdeling"
|
||
-- aangemaakt, dus die afdeling bestaat al!). Relevanter is of de PRS-
|
||
-- kostenplaats actief is, want dan moet er een afdeling bij bestaan.
|
||
-- [Zo worden afdelingen, die - om wat voor reden ook - eerder niet
|
||
-- zijn toegevoegd, deze run wel toegevoegd (met l_created gebeurde
|
||
-- dat alleen in de run waarin de PRS-kostenplaats werd aangemaakt)].
|
||
SELECT COUNT ( * )
|
||
INTO v_count
|
||
FROM prs_afdeling
|
||
WHERE prs_afdeling_upper = UPPER (rc.afdeling);
|
||
|
||
IF (rc.status = 'A' AND v_count = 0)
|
||
THEN
|
||
-- Kostenplaats is actief, maar afdeling bestaat nog niet!
|
||
BEGIN
|
||
INSERT INTO prs_afdeling (prs_afdeling_naam,
|
||
prs_afdeling_omschrijving,
|
||
prs_kostenplaats_key,
|
||
prs_bedrijf_key)
|
||
SELECT rc.afdeling,
|
||
rc.omschrijving,
|
||
k.prs_kostenplaats_key,
|
||
1 -- 'Intern'
|
||
FROM prs_kostenplaats k
|
||
WHERE k.prs_kostenplaats_upper = UPPER (rc.afdeling);
|
||
|
||
fac.imp_writelog (p_import_key, 'I', 'Afdeling is toegevoegd',
|
||
rc.afdeling || '/' || rc.omschrijving);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := '(ORACLE error ' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key, 'E', 'Afdeling kan niet worden toegevoegd ' || v_errormsg,
|
||
rc.afdeling || '/' || rc.omschrijving || ' [key=' || lafdelingkey || ']');
|
||
END;
|
||
ELSE
|
||
-- Kostenplaats en afdeling bestonden al wel!
|
||
IF l_inactivated
|
||
THEN
|
||
-- Bepaal aantal verplichtingen op afdeling als som van:
|
||
-- 1. #voorkomens in PRS_V_AFD_VERPLICHTING
|
||
-- 2. #voorkomens in PRS_RUIMTEAFDELING
|
||
-- 3. #voorkomens van afdeling-kinderen in PRS_RUIMTEAFDELING
|
||
SELECT SUM (x.aantal)
|
||
INTO v_count
|
||
FROM (SELECT COUNT ( * ) aantal
|
||
FROM prs_v_afd_verplichting av
|
||
WHERE av.prs_afdeling_key = lafdelingkey
|
||
UNION ALL
|
||
SELECT COUNT ( * ) aantal
|
||
FROM prs_v_aanwezigruimteafdeling ra
|
||
WHERE ra.prs_afdeling_key = lafdelingkey
|
||
UNION ALL
|
||
SELECT COUNT ( * ) aantal
|
||
FROM prs_v_aanwezigafdeling a,
|
||
prs_v_aanwezigruimteafdeling ra
|
||
WHERE a.prs_afdeling_parentkey = lafdelingkey
|
||
AND a.prs_afdeling_key = ra.prs_afdeling_key) x;
|
||
|
||
-- Als v_count>0, dan bestaan er nog verplichtingen en wordt de
|
||
-- afdeling INACTIEF gemaakt!
|
||
IF v_count > 0
|
||
THEN
|
||
-- Maak (of houd) afdeling INACTIEF.
|
||
UPDATE prs_afdeling
|
||
SET prs_afdeling_naam = rc.afdeling,
|
||
prs_afdeling_omschrijving = SUBSTR ('INACTIEF:' || rc.omschrijving, 1, 60),
|
||
prs_kostenplaats_key = lkostenplaatskey
|
||
WHERE prs_afdeling_key = lafdelingkey
|
||
AND prs_afdeling_omschrijving NOT LIKE 'INACTIEF%';
|
||
ELSE
|
||
-- Verwijder afdeling en kostenplaats.
|
||
BEGIN
|
||
SELECT COUNT ( * )
|
||
INTO v_count
|
||
FROM prs_kostenplaats
|
||
WHERE prs_kostenplaats_verwijder IS NULL
|
||
AND prs_kostenplaats_key = lkostenplaatskey;
|
||
|
||
IF (v_count > 0)
|
||
THEN
|
||
UPDATE prs_kostenplaats
|
||
SET prs_kostenplaats_verwijder = SYSDATE
|
||
WHERE prs_kostenplaats_verwijder IS NULL
|
||
AND prs_kostenplaats_key = lkostenplaatskey;
|
||
|
||
fac.imp_writelog (p_import_key, 'I', 'Kostenplaats is verwijderd',
|
||
rc.afdeling || '/' || rc.omschrijving);
|
||
END IF;
|
||
|
||
SELECT COUNT ( * )
|
||
INTO v_count
|
||
FROM prs_afdeling
|
||
WHERE prs_afdeling_verwijder IS NULL
|
||
AND prs_afdeling_key = lafdelingkey;
|
||
|
||
IF (v_count > 0)
|
||
THEN
|
||
UPDATE prs_afdeling
|
||
SET prs_afdeling_verwijder = SYSDATE
|
||
WHERE prs_afdeling_verwijder IS NULL
|
||
AND prs_afdeling_key = lafdelingkey;
|
||
|
||
fac.imp_writelog (p_import_key, 'I', 'Afdeling is verwijderd',
|
||
rc.afdeling || '/' || rc.omschrijving);
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (p_import_key, 'E', 'Afdeling ' || rc.afdeling || ' kan niet worden verwijderd (heeft nog personen)',
|
||
rc.afdeling || '/' || rc.omschrijving || ' [key=' || lafdelingkey || ']');
|
||
|
||
UPDATE prs_afdeling
|
||
SET prs_afdeling_naam = rc.afdeling,
|
||
prs_afdeling_omschrijving = SUBSTR ('INACTIEF:' || rc.omschrijving, 1, 60),
|
||
prs_kostenplaats_key = lkostenplaatskey
|
||
WHERE prs_afdeling_key = lafdelingkey;
|
||
END;
|
||
END IF;
|
||
ELSE
|
||
BEGIN
|
||
-- Just update this one.
|
||
UPDATE prs_afdeling
|
||
SET prs_afdeling_naam = rc.afdeling,
|
||
prs_afdeling_omschrijving = rc.omschrijving,
|
||
prs_kostenplaats_key = lkostenplaatskey,
|
||
prs_afdeling_verwijder = NULL
|
||
WHERE prs_afdeling_key = lafdelingkey;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := '(ORACLE error ' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key, 'E', 'Afdeling kan niet worden bijgewerkt ' || v_errormsg,
|
||
rc.afdeling || '/' || rc.omschrijving || ' [key=' || lafdelingkey || ']');
|
||
END;
|
||
END IF;
|
||
END IF;
|
||
ELSE
|
||
BEGIN
|
||
-- Hier kunnen geen mensen bij horen, want geen PRS-kostenplaats.
|
||
-- Ergo: zo mogelijk opruimen.
|
||
-- UWVA#32268: Niet PRS-kostenplaatsen worden vanuit deze import
|
||
-- nooit meer als afdeling aangemaakt! Hier gebeurt in
|
||
-- principe dus nooit iets (tenzij handmatig een ALG-
|
||
-- of PRJ-kostenplaats als afdeling is toegevoegd die
|
||
-- toevallig ook voorkomt in het importbestand).
|
||
UPDATE prs_afdeling
|
||
SET prs_afdeling_verwijder = SYSDATE
|
||
WHERE prs_afdeling_key = lafdelingkey;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := '(ORACLE error ' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key, 'W', 'Afdeling kan niet vervallen (heeft nog personen)',
|
||
rc.afdeling || '/' || rc.omschrijving || ' [key=' || lafdelingkey || ']');
|
||
END;
|
||
END IF;
|
||
END LOOP;
|
||
|
||
-- Organisatiestructuur vastleggen!
|
||
FOR rc IN cstructuur
|
||
LOOP
|
||
BEGIN
|
||
lafdelingkey := NULL;
|
||
lparentkey := NULL;
|
||
|
||
SELECT prs_afdeling_key
|
||
INTO lafdelingkey
|
||
FROM prs_afdeling
|
||
WHERE prs_afdeling_verwijder IS NULL
|
||
AND prs_afdeling_upper = UPPER (rc.afdeling);
|
||
|
||
-- TODO: MAX, omdat ...?
|
||
SELECT MAX (dparent.prs_afdeling_key)
|
||
INTO lparentkey
|
||
FROM prs_afdeling dparent
|
||
WHERE dparent.prs_afdeling_verwijder IS NULL
|
||
AND dparent.prs_afdeling_upper = UPPER (rc.parent);
|
||
|
||
-- Obv. importfile alleen update parent uitvoeren indien de ouder
|
||
-- niet zichzelf is.
|
||
IF lparentkey != lafdelingkey AND lparentkey IS NOT NULL
|
||
THEN
|
||
-- UWV's organisatiestructuur heeft 6 lagen (met 3 ICT-afdelingen
|
||
-- in die 6e laag, onder 'Servicedesk ICT').
|
||
-- Haal die dus <20><>n laag omhoog (oftewel zet 'niveau-6' afdelingen
|
||
-- naast hun parent in afdelingsniveau 5).
|
||
IF (rc.niveau6 = 1)
|
||
THEN
|
||
BEGIN
|
||
SELECT MAX (dparent.prs_afdeling_parentkey)
|
||
INTO lparentkey
|
||
FROM prs_afdeling dparent
|
||
WHERE dparent.prs_afdeling_verwijder IS NULL
|
||
AND dparent.prs_afdeling_key = lparentkey;
|
||
|
||
UPDATE prs_afdeling
|
||
SET prs_bedrijf_key = NULL,
|
||
prs_afdeling_parentkey = lparentkey
|
||
WHERE prs_afdeling_key = lafdelingkey;
|
||
|
||
fac.imp_writelog (p_import_key, 'I', 'Niveau-6 afdeling aan parent van parentafdeling gekoppeld: ',
|
||
rc.afdeling || '/' || rc.omschrijving || ' (' || rc.parent || ')');
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
fac.imp_writelog (p_import_key, 'W', 'Kan parent van parentafdeling niet vinden',
|
||
rc.afdeling || '/' || rc.omschrijving || ' (' || rc.parent || ')');
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (p_import_key, 'W', 'Fout bij bepalen parent van parentafdeling',
|
||
rc.afdeling || '/' || rc.omschrijving || ' (' || rc.parent || ')');
|
||
END;
|
||
ELSE
|
||
UPDATE prs_afdeling
|
||
SET prs_bedrijf_key = NULL,
|
||
prs_afdeling_parentkey = lparentkey
|
||
WHERE prs_afdeling_key = lafdelingkey;
|
||
END IF;
|
||
ELSE
|
||
fac.imp_writelog (p_import_key, 'W', 'Fout bij vastleggen parentafdeling',
|
||
rc.afdeling || '/' || rc.omschrijving || ' (' || rc.parent || ')');
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := '(ORACLE error ' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key, 'W', 'Fout bij bepalen (parent-)afdeling',
|
||
rc.afdeling || '/' || rc.omschrijving || ' [key=' || lafdelingkey || '], parent: ' || rc.parent || ' [' || lparentkey || ']');
|
||
END;
|
||
END LOOP;
|
||
|
||
-- For summary only
|
||
SELECT COUNT ( * )
|
||
INTO l_newcount
|
||
FROM prs_kostenplaats
|
||
WHERE prs_kostenplaats_verwijder IS NULL;
|
||
|
||
SELECT COUNT ( * )
|
||
INTO l_newcountverw
|
||
FROM prs_kostenplaats
|
||
WHERE prs_kostenplaats_verwijder IS NOT NULL;
|
||
|
||
fac.imp_writelog (p_import_key, 'S',
|
||
'Aantal ingelezen kostenplaatsen: '
|
||
|| TO_CHAR (l_impcount) || '(actief) + '
|
||
|| TO_CHAR (l_impcountverw) || '(inactief) = '
|
||
|| TO_CHAR (l_impcount + l_impcountverw), '');
|
||
fac.imp_writelog (p_import_key, 'S', 'Aantal actieve kostenplaatsen vooraf: ' || TO_CHAR (l_oldcount) || ' nu: ' || TO_CHAR (l_newcount), '');
|
||
fac.imp_writelog (p_import_key, 'S', 'Aantal inactieve kostenplaatsen vooraf: ' || TO_CHAR (l_oldcountverw) || ' nu: ' || TO_CHAR (l_newcountverw), '');
|
||
|
||
-- Bonus logging
|
||
SELECT COUNT ( * )
|
||
INTO l_manualcount
|
||
FROM prs_kostenplaats k, uwva_imp_kpn i
|
||
WHERE k.prs_kostenplaats_verwijder IS NULL
|
||
AND UPPER (k.prs_kostenplaats_nr) NOT LIKE '__UWV'
|
||
AND k.prs_kostenplaats_nr = i.afdeling(+)
|
||
AND i.afdeling IS NULL;
|
||
|
||
fac.imp_writelog (p_import_key, 'S', 'Aantal actieve kostenplaatsen niet via import: ' || TO_CHAR (l_manualcount), '');
|
||
|
||
-- Update kostenplaatsgroep voor combinatievalidatie
|
||
UPDATE prs_kostenplaats
|
||
SET prs_kostenplaatsgrp_key = '61', prs_kostenplaats_module = 'PRJ'
|
||
WHERE prs_kostenplaats_nr LIKE 'PKPU%';
|
||
|
||
UPDATE prs_kostenplaats
|
||
SET prs_kostenplaatsgrp_key = '61', prs_kostenplaats_module = 'PRJ'
|
||
WHERE prs_kostenplaats_nr LIKE 'PKUN%';
|
||
|
||
UPDATE prs_kostenplaats
|
||
SET prs_kostenplaatsgrp_key = '27', prs_kostenplaats_module = 'PRJ'
|
||
WHERE prs_kostenplaats_nr LIKE 'P%'
|
||
AND (prs_kostenplaatsgrp_key != 61 OR prs_kostenplaatsgrp_key IS NULL);
|
||
|
||
UPDATE prs_kostenplaats
|
||
SET prs_kostenplaatsgrp_key = '24', prs_kostenplaats_module = 'ALG'
|
||
WHERE prs_kostenplaats_nr LIKE 'G%';
|
||
|
||
UPDATE prs_kostenplaats
|
||
SET prs_kostenplaatsgrp_key = '25', prs_kostenplaats_module = 'PRJ'
|
||
WHERE prs_kostenplaats_nr LIKE 'H%';
|
||
|
||
UPDATE prs_kostenplaats
|
||
SET prs_kostenplaatsgrp_key = '27', prs_kostenplaats_module = 'PRJ'
|
||
WHERE prs_kostenplaats_nr LIKE 'U%';
|
||
|
||
UPDATE prs_kostenplaats
|
||
SET prs_kostenplaatsgrp_key = '25', prs_kostenplaats_module = 'PRJ'
|
||
WHERE prs_kostenplaats_nr LIKE 'I%';
|
||
|
||
UPDATE prs_kostenplaats
|
||
SET prs_kostenplaatsgrp_key = '22', prs_kostenplaats_module = 'PRJ'
|
||
WHERE (prs_kostenplaats_nr LIKE 'S%'
|
||
AND prs_kostenplaats_upper NOT IN
|
||
('S30006',
|
||
'S30007',
|
||
'S30008',
|
||
'S30011',
|
||
'S30015',
|
||
'S30046',
|
||
'S30056',
|
||
'S30065',
|
||
'S30080',
|
||
'S30083',
|
||
'S30115',
|
||
'S30116',
|
||
'S30121',
|
||
'S30122',
|
||
'S30130',
|
||
'S30132'))
|
||
OR prs_kostenplaats_nr LIKE 'T%';
|
||
|
||
UPDATE prs_kostenplaats
|
||
SET prs_kostenplaatsgrp_key = '23', prs_kostenplaats_module = 'PRJ'
|
||
WHERE prs_kostenplaats_nr LIKE 'S%'
|
||
AND prs_kostenplaats_upper IN
|
||
('S30006',
|
||
'S30007',
|
||
'S30008',
|
||
'S30011',
|
||
'S30015',
|
||
'S30046',
|
||
'S30056',
|
||
'S30065',
|
||
'S30080',
|
||
'S30083',
|
||
'S30115',
|
||
'S30116',
|
||
'S30121',
|
||
'S30122',
|
||
'S30130',
|
||
'S30132');
|
||
|
||
UPDATE prs_kostenplaats
|
||
SET prs_kostenplaatsgrp_key = '21', prs_kostenplaats_module = 'PRS'
|
||
WHERE fac.safe_to_number (prs_kostenplaats_nr) IS NOT NULL;
|
||
|
||
-- Alle kostenplaatsen uit de kpn_prj import zijn projectkostenplaatsen.
|
||
UPDATE prs_kostenplaats k
|
||
SET k.prs_kostenplaatsgrp_key = '27', k.prs_kostenplaats_module = 'PRJ'
|
||
WHERE EXISTS (SELECT project
|
||
FROM uwva_imp_kpn_prj
|
||
WHERE project = k.prs_kostenplaats_nr);
|
||
|
||
COMMIT;
|
||
|
||
-- UWVA#15374: Automatisch bijwerken "kpn-based" legenda's.
|
||
INSERT INTO cad_legendawaarde (cad_legenda_key,
|
||
cad_legendawaarde_value,
|
||
cad_legendawaarde_rgb,
|
||
cad_legendawaarde_omschr)
|
||
SELECT DISTINCT
|
||
181,
|
||
SUBSTR (a.prs_afdeling_naam6, 1, 60), -- HV-Divisie
|
||
TO_CHAR (DBMS_UTILITY.get_hash_value (SUBSTR (a.prs_afdeling_naam6, 1, 60), 0, POWER (2, 24)), '0XXXXX'),
|
||
SUBSTR (a.prs_afdeling_naam6, 1, 60)
|
||
FROM prs_v_aanwezigafdeling a
|
||
WHERE a.prs_afdeling_parentkey IS NULL
|
||
AND NOT EXISTS
|
||
(SELECT cl.cad_legendawaarde_value
|
||
FROM cad_legendawaarde cl
|
||
WHERE cl.cad_legendawaarde_value = SUBSTR (a.prs_afdeling_naam6, 1, 60)
|
||
AND cl.cad_legenda_key = 181);
|
||
|
||
INSERT INTO cad_legendawaarde (cad_legenda_key,
|
||
cad_legendawaarde_value,
|
||
cad_legendawaarde_rgb,
|
||
cad_legendawaarde_omschr)
|
||
SELECT DISTINCT
|
||
182,
|
||
SUBSTR (a.prs_afdeling_naam6, 1, 60), -- HV-Afdeling
|
||
TO_CHAR (DBMS_UTILITY.get_hash_value (SUBSTR (a.prs_afdeling_naam6, 1, 60), 0, POWER (2, 24)), '0XXXXX'),
|
||
SUBSTR (a.prs_afdeling_naam6, 1, 60)
|
||
FROM prs_v_aanwezigafdeling a
|
||
WHERE a.prs_afdeling_parentkey IS NOT NULL
|
||
AND NOT EXISTS
|
||
(SELECT cl.cad_legendawaarde_value
|
||
FROM cad_legendawaarde cl
|
||
WHERE cl.cad_legendawaarde_value = SUBSTR (a.prs_afdeling_naam6, 1, 60)
|
||
AND cl.cad_legenda_key = 182);
|
||
END;
|
||
/
|
||
|
||
-- USRRAP views tbv UWVA#7
|
||
/* Formatted on 2005/02/16 11:26 (Formatter Plus v4.8.5) */
|
||
CREATE OR REPLACE VIEW uwva_v_kpn_01_teverwijderenafd (personeelsnr, persoon, afdeling, omschrijving, vervallen)
|
||
AS
|
||
SELECT prs_perslid_nr, pf.prs_perslid_naam_full, prs_afdeling_naam, prs_afdeling_omschrijving,
|
||
DECODE (d.prs_afdeling_verwijder, NULL, '', 'INACTIEF')
|
||
FROM prs_afdeling d, prs_perslid p, uwva_imp_kpn i, prs_v_perslid_fullnames_all pf
|
||
WHERE p.prs_afdeling_key = d.prs_afdeling_key
|
||
AND i.afdeling = d.prs_afdeling_naam
|
||
AND i.status <> 'A'
|
||
AND p.prs_perslid_verwijder IS NULL
|
||
AND pf.prs_perslid_key = p.prs_perslid_key;
|
||
|
||
CREATE OR REPLACE VIEW uwva_v_kpn_03_vervallenafd (hide_f_vervaldatum,
|
||
vervaldatum,
|
||
afdeling,
|
||
omschrijving
|
||
)
|
||
AS
|
||
SELECT SYSDATE - d.prs_afdeling_verwijder,
|
||
TO_CHAR (d.prs_afdeling_verwijder, 'YYYY-MM-DD'),
|
||
d.prs_afdeling_naam, d.prs_afdeling_omschrijving
|
||
FROM prs_afdeling d
|
||
WHERE d.prs_afdeling_verwijder IS NOT NULL;
|
||
|
||
CREATE OR REPLACE VIEW uwva_v_kpn_04_openverpl
|
||
(fclt_f_servicepunt, fclt_f_locatie, kostenplaats, omschrijving, vervaldatum,
|
||
verplichting, item, fclt_3d_locatie_key)
|
||
AS
|
||
SELECT di.alg_district_omschrijving fclt_f_servicepunt,
|
||
l.alg_locatie_code fclt_f_locatie,
|
||
k.prs_kostenplaats_nr,
|
||
k.prs_kostenplaats_omschrijving,
|
||
TO_CHAR (k.prs_kostenplaats_verwijder, 'YYYY-MM-DD'),
|
||
NVL (t.fac_message_text, pv.fac_message_code),
|
||
item,
|
||
pv.locatie_key
|
||
FROM prs_v_kp_verplichting pv,
|
||
fac_message t,
|
||
prs_kostenplaats k,
|
||
alg_locatie l,
|
||
alg_district di
|
||
WHERE pv.prs_kostenplaats_key = k.prs_kostenplaats_key
|
||
AND pv.locatie_key = l.alg_locatie_key
|
||
AND l.alg_district_key = di.alg_district_key
|
||
AND pv.fac_message_code = t.fac_message_code(+)
|
||
AND k.prs_kostenplaats_verwijder IS NOT NULL;
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE UWVA_import_cis (
|
||
p_import_key IN NUMBER
|
||
)
|
||
AS
|
||
-- constanten
|
||
c_fielddelimitor VARCHAR2 (1) := ';'; -- Field seperator
|
||
|
||
-- import
|
||
v_newline VARCHAR2 (1000); -- Import line
|
||
v_field VARCHAR2 (100); -- Import field
|
||
header_is_valid BOOLEAN;
|
||
v_aantal NUMBER;
|
||
|
||
-- foutafhandeling
|
||
v_errormsg VARCHAR (200);
|
||
v_errorhint VARCHAR (200);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_errmes VARCHAR(1024);
|
||
-- De importvelden
|
||
v_prs_perslid_nr VARCHAR2(16 BYTE);
|
||
v_prs_perslid_bsn VARCHAR2(10 BYTE);
|
||
v_prs_perslid_naam VARCHAR2(60 BYTE);
|
||
v_prs_perslid_oslogin VARCHAR2(30 BYTE);
|
||
v_prs_perslid_email VARCHAR2(200 BYTE);
|
||
v_teller NUMBER;
|
||
|
||
CURSOR c1 IS
|
||
SELECT *
|
||
FROM fac_imp_file
|
||
WHERE fac_import_key = p_import_key
|
||
ORDER BY fac_imp_file_index;
|
||
rec1 c1%ROWTYPE;
|
||
|
||
BEGIN
|
||
|
||
-- Init
|
||
header_is_valid := FALSE;
|
||
|
||
-- Clear my previous imported rows
|
||
DELETE FROM UWVA_imp_cis;
|
||
|
||
BEGIN
|
||
v_teller := 0;
|
||
OPEN c1;
|
||
IF c1%ISOPEN THEN
|
||
v_teller := 1;
|
||
LOOP
|
||
BEGIN
|
||
v_errmes := 'Fout FETCH te importeren rij';
|
||
FETCH c1 INTO rec1;
|
||
EXIT WHEN c1%NOTFOUND;
|
||
v_errmes := 'Fout opvragen te importeren rij';
|
||
v_newline := rec1.fac_imp_file_line;
|
||
|
||
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_nr);
|
||
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_bsn);
|
||
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_naam);
|
||
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_oslogin);
|
||
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_email);
|
||
|
||
-- Skip until a valid header is found
|
||
IF ( header_is_valid = FALSE
|
||
AND v_prs_perslid_naam LIKE 'Volledige naam'
|
||
)
|
||
THEN
|
||
header_is_valid := TRUE;
|
||
ELSIF (header_is_valid)
|
||
THEN
|
||
|
||
INSERT INTO UWVA_imp_cis
|
||
(prs_perslid_nr
|
||
,prs_perslid_bsn
|
||
,prs_perslid_naam
|
||
,prs_perslid_oslogin
|
||
,prs_perslid_email
|
||
)
|
||
VALUES (SUBSTR (RTRIM(v_prs_perslid_nr), 1, 16)
|
||
,SUBSTR (RTRIM(v_prs_perslid_bsn), 1, 10)
|
||
,SUBSTR (RTRIM(v_prs_perslid_naam), 1, 60)
|
||
,SUBSTR (RTRIM(v_prs_perslid_oslogin), 1, 30)
|
||
,SUBSTR (RTRIM(v_prs_perslid_email), 1, 200)
|
||
);
|
||
END IF;
|
||
|
||
header_is_valid := TRUE;
|
||
|
||
COMMIT;
|
||
|
||
IF (NOT header_is_valid)
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
'Invalid import file',
|
||
'Er is geen geldige header aangetroffen in het importbestand'
|
||
);
|
||
END IF;
|
||
COMMIT; -- alles is goed gegaan
|
||
END;
|
||
END LOOP;
|
||
END IF;
|
||
CLOSE c1;
|
||
|
||
SELECT count(*)
|
||
INTO v_aantal
|
||
FROM FAC_IMP_FILE
|
||
WHERE fac_import_key = p_import_key;
|
||
fac.imp_writelog (p_import_key, 'S', 'Aantal ingelezen uit cis bestand: '|| v_aantal, '');
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_aantal
|
||
FROM prs_v_aanwezigperslid
|
||
WHERE prs_perslid_naam NOT LIKE 'INA%' AND prs_perslid_nr IS NOT NULL;
|
||
fac.imp_writelog (p_import_key, 'S', 'Aantal actieve personen in Facilitor met pers.nr: '|| v_aantal, '');
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_aantal
|
||
FROM prs_perslid p, uwva_imp_cis cis
|
||
WHERE prs_perslid_verwijder IS NULL
|
||
AND p.prs_perslid_naam NOT LIKE 'INACT%'
|
||
AND p.prs_perslid_nr IS NOT NULL
|
||
AND cis.prs_perslid_nr = p.prs_perslid_nr;
|
||
fac.imp_writelog (p_import_key, 'S', 'Match personeelsnummer: '|| v_aantal, '');
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_aantal
|
||
FROM prs_perslid p, uwva_imp_cis cis
|
||
WHERE prs_perslid_verwijder IS NULL
|
||
AND p.prs_perslid_naam NOT LIKE 'INACT%'
|
||
AND p.prs_perslid_nr IS NOT NULL
|
||
AND cis.prs_perslid_nr = p.prs_perslid_nr
|
||
AND LTRIM (RTRIM (UPPER (cis.prs_perslid_oslogin))) =
|
||
LTRIM (RTRIM (UPPER (p.prs_perslid_oslogin)))
|
||
AND cis.prs_perslid_oslogin IS NOT NULL
|
||
AND p.prs_perslid_oslogin IS NOT NULL;
|
||
fac.imp_writelog (p_import_key, 'S', 'Match personeelsnummer en logincode: '|| v_aantal, '');
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_aantal
|
||
FROM prs_perslid p, uwva_imp_cis cis
|
||
WHERE prs_perslid_verwijder IS NULL -- 18550
|
||
AND p.prs_perslid_naam NOT LIKE 'INACT%'
|
||
AND p.prs_perslid_nr IS NOT NULL
|
||
AND cis.prs_perslid_nr = p.prs_perslid_nr
|
||
AND LTRIM (RTRIM (UPPER (cis.prs_perslid_email))) =
|
||
LTRIM (RTRIM (UPPER (p.prs_perslid_email)))
|
||
AND cis.prs_perslid_email IS NOT NULL
|
||
AND p.prs_perslid_email IS NOT NULL;
|
||
fac.imp_writelog (p_import_key, 'S', 'Match personeelsnummer en email: '|| v_aantal, '');
|
||
|
||
|
||
COMMIT;
|
||
END;
|
||
EXCEPTION WHEN OTHERS THEN
|
||
ROLLBACK;
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
'Personen import: '|| v_errmes,
|
||
'Oracle foutmelding (' || oracle_err_num || '/' || oracle_err_mes || ')'
|
||
);
|
||
COMMIT; -- Logging opslaan
|
||
END;
|
||
/
|
||
|
||
|
||
/* Formatted on 2005/10/11 14:25 (Formatter Plus v4.8.5) */
|
||
CREATE OR REPLACE PROCEDURE UWVA_update_cis (p_import_key IN NUMBER)
|
||
AS
|
||
|
||
CURSOR c_login
|
||
IS
|
||
SELECT p.prs_perslid_nr, cis.prs_perslid_oslogin, p.prs_perslid_login
|
||
FROM prs_perslid p, uwva_imp_cis cis
|
||
WHERE prs_perslid_verwijder IS NULL
|
||
AND p.prs_perslid_naam NOT LIKE 'INACT%'
|
||
AND p.prs_perslid_nr IS NOT NULL
|
||
AND cis.prs_perslid_nr = p.prs_perslid_nr
|
||
AND LTRIM (RTRIM (UPPER (NVL(cis.prs_perslid_oslogin, 'is leeg')))) <>
|
||
LTRIM (RTRIM (UPPER (NVL(p.prs_perslid_oslogin, 'is leeg'))))
|
||
AND cis.prs_perslid_oslogin IS NOT NULL;
|
||
|
||
CURSOR c_email
|
||
IS
|
||
SELECT p.prs_perslid_nr, cis.prs_perslid_email
|
||
FROM prs_perslid p, uwva_imp_cis cis
|
||
WHERE prs_perslid_verwijder IS NULL
|
||
AND p.prs_perslid_naam NOT LIKE 'INACT%'
|
||
AND p.prs_perslid_nr IS NOT NULL
|
||
AND cis.prs_perslid_nr = p.prs_perslid_nr
|
||
AND LTRIM (RTRIM (UPPER (NVL(cis.prs_perslid_email,'geenmail')))) <>
|
||
LTRIM (RTRIM (UPPER (NVL(p.prs_perslid_email,'geenmail'))))
|
||
AND cis.prs_perslid_email IS NOT NULL
|
||
AND NOT (substr(cis.prs_perslid_email,7,1)='@')
|
||
AND fac.safe_to_number(substr(cis.prs_perslid_email, 4,3)) is null;
|
||
|
||
v_aantal NUMBER(10);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_errmes VARCHAR(1024);
|
||
v_errormsg VARCHAR (200);
|
||
|
||
BEGIN
|
||
|
||
v_aantal := 0;
|
||
FOR rc IN c_login
|
||
LOOP
|
||
-- Bestaat deze al?
|
||
BEGIN
|
||
|
||
|
||
IF rc.prs_perslid_login < to_date ('20070101', 'yyyymmdd') OR
|
||
rc.prs_perslid_login is NULL THEN
|
||
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_oslogin = null
|
||
WHERE prs_perslid_oslogin = UPPER(rc.prs_perslid_oslogin);
|
||
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_oslogin = rc.prs_perslid_oslogin
|
||
WHERE prs_perslid_nr = rc.prs_perslid_nr
|
||
AND prs_perslid_verwijder is null;
|
||
v_aantal := v_aantal + 1;
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 150);
|
||
v_errormsg := '(ORACLE error ' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
'Kan login niet aanpassen ' || v_errormsg,
|
||
'Personeelsnummer: ' || rc.prs_perslid_nr || ' login: ' || rc.prs_perslid_oslogin
|
||
);
|
||
END;
|
||
COMMIT;
|
||
END LOOP;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Aantal aangepaste logins: ' || v_aantal,
|
||
''
|
||
);
|
||
|
||
v_aantal := 0;
|
||
FOR rc IN c_email
|
||
LOOP
|
||
BEGIN
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_email = rc.prs_perslid_email
|
||
WHERE prs_perslid_nr = rc.prs_perslid_nr
|
||
AND prs_perslid_verwijder is null;
|
||
v_aantal := v_aantal + 1;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 150);
|
||
v_errormsg := '(ORACLE error ' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
'Kan emailadres niet aanpassen ' || v_errormsg,
|
||
'Personeelnummer: ' || rc.prs_perslid_nr || ' email: ' || rc.prs_perslid_email
|
||
);
|
||
END;
|
||
COMMIT;
|
||
END LOOP;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Aantal aangepaste emailadressen: ' || v_aantal,
|
||
''
|
||
);
|
||
|
||
commit;
|
||
|
||
END;
|
||
/
|
||
|
||
|
||
/* UWVA#15279 - Importfunctie tbv. het bijwerken van persoonsgegevens! */
|
||
CREATE OR REPLACE PROCEDURE uwva_import_prs (
|
||
p_import_key IN NUMBER
|
||
)
|
||
IS
|
||
c_delim VARCHAR2 (1) := ';';
|
||
v_newline VARCHAR2 (1000); -- Input line
|
||
v_aanduiding VARCHAR2 (200);
|
||
v_errorhint VARCHAR2 (1000);
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
header_is_valid NUMBER := 0;
|
||
v_ongeldig NUMBER (1);
|
||
v_wp_ongeldig NUMBER (1);
|
||
v_count_tot NUMBER (10);
|
||
v_count_import NUMBER (10);
|
||
v_count NUMBER (10);
|
||
-- De importvelden:
|
||
v_prs_perslid_nr VARCHAR2 (255);
|
||
v_prs_perslid_oslogin VARCHAR2 (255);
|
||
v_prs_perslid_oslogin2 VARCHAR2 (255);
|
||
v_prs_perslid_telefoonnr VARCHAR2 (255);
|
||
v_prs_perslid_mobiel VARCHAR2 (255);
|
||
v_prs_perslid_email VARCHAR2 (255);
|
||
v_alg_locatie_code VARCHAR2 (255);
|
||
v_alg_gebouw_code VARCHAR2 (255);
|
||
v_alg_verdieping_volgnr VARCHAR2 (255); -- C10
|
||
v_alg_verdieping_volgnr_n NUMBER (3); -- N3
|
||
v_alg_ruimte_nr VARCHAR2 (255); -- C10
|
||
|
||
CURSOR c1
|
||
IS
|
||
SELECT *
|
||
FROM fac_imp_file
|
||
WHERE fac_import_key = p_import_key
|
||
ORDER BY fac_imp_file_index;
|
||
BEGIN
|
||
DELETE FROM uwva_imp_prs;
|
||
|
||
COMMIT;
|
||
v_count_tot := 0;
|
||
v_count_import := 0;
|
||
|
||
FOR rec1 IN c1
|
||
LOOP
|
||
BEGIN
|
||
v_newline := rec1.fac_imp_file_line;
|
||
v_aanduiding := '';
|
||
v_errorhint := 'Fout bij opvragen te importeren rij';
|
||
v_errormsg := '';
|
||
v_ongeldig := 0;
|
||
v_wp_ongeldig := 0;
|
||
-- Lees alle veldwaarden
|
||
-- 01
|
||
fac.imp_getfield (v_newline, c_delim, v_prs_perslid_nr);
|
||
-- 02
|
||
fac.imp_getfield (v_newline, c_delim, v_prs_perslid_oslogin);
|
||
-- 03
|
||
fac.imp_getfield (v_newline, c_delim, v_prs_perslid_oslogin2);
|
||
-- 04
|
||
fac.imp_getfield (v_newline, c_delim, v_prs_perslid_telefoonnr);
|
||
-- 05
|
||
fac.imp_getfield (v_newline, c_delim, v_prs_perslid_mobiel);
|
||
-- 06
|
||
fac.imp_getfield (v_newline, c_delim, v_prs_perslid_email);
|
||
-- 07
|
||
fac.imp_getfield (v_newline, c_delim, v_alg_locatie_code);
|
||
-- 08
|
||
fac.imp_getfield (v_newline, c_delim, v_alg_gebouw_code);
|
||
-- 09
|
||
fac.imp_getfield (v_newline, c_delim, v_alg_verdieping_volgnr);
|
||
-- 10
|
||
fac.imp_getfield (v_newline, c_delim, v_alg_ruimte_nr);
|
||
--
|
||
v_aanduiding :=
|
||
'[' || COALESCE (v_prs_perslid_nr, v_prs_perslid_oslogin)
|
||
|| '] ';
|
||
|
||
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
|
||
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
|
||
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
|
||
IF (header_is_valid = 0)
|
||
THEN
|
||
IF UPPER (v_prs_perslid_nr) = 'PERSONEELSNUMMER'
|
||
AND UPPER (v_prs_perslid_oslogin) = 'LOGINNAAM'
|
||
AND UPPER (v_prs_perslid_oslogin2) = 'ALT-LOGINNAAM'
|
||
AND UPPER (v_prs_perslid_telefoonnr) = 'TELEFOONNUMMER'
|
||
AND UPPER (v_prs_perslid_mobiel) = 'MOBIEL'
|
||
AND UPPER (v_prs_perslid_email) = 'EMAIL'
|
||
AND UPPER (v_alg_locatie_code) = 'LOCATIECODE'
|
||
AND UPPER (v_alg_gebouw_code) = 'GEBOUWCODE'
|
||
AND UPPER (v_alg_verdieping_volgnr) = 'VERDIEPINGNUMMER'
|
||
AND UPPER (v_alg_ruimte_nr) = 'RUIMTENUMMER'
|
||
THEN
|
||
header_is_valid := 1;
|
||
END IF;
|
||
ELSE
|
||
v_count_tot := v_count_tot + 1;
|
||
-- Controleer alle veldwaarden
|
||
v_errorhint := 'Ongeldig personeelsnummer';
|
||
v_prs_perslid_nr := TRIM (v_prs_perslid_nr);
|
||
|
||
IF LENGTH (v_prs_perslid_nr) > 16
|
||
THEN
|
||
v_ongeldig := 1;
|
||
fac.imp_writelog
|
||
(p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Personeelsnummer te lang',
|
||
'Personeelsnummer is primair verplicht; regel wordt overgeslagen!'
|
||
);
|
||
COMMIT;
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldige loginnaam';
|
||
v_prs_perslid_oslogin := TRIM (v_prs_perslid_oslogin);
|
||
|
||
IF LENGTH (v_prs_perslid_oslogin) > 30
|
||
THEN
|
||
IF v_prs_perslid_nr IS NULL
|
||
THEN
|
||
v_ongeldig := 1;
|
||
fac.imp_writelog
|
||
(p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Loginnaam te lang',
|
||
'Loginnaam is secundair verplicht; regel wordt overgeslagen!'
|
||
);
|
||
ELSE
|
||
v_prs_perslid_oslogin := NULL;
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Loginnaam te lang',
|
||
'Loginnaam wordt niet bijgewerkt'
|
||
);
|
||
END IF;
|
||
|
||
COMMIT;
|
||
END IF;
|
||
|
||
--
|
||
IF ( v_ongeldig = 0
|
||
AND v_prs_perslid_nr IS NULL
|
||
AND v_prs_perslid_oslogin IS NULL
|
||
)
|
||
THEN
|
||
v_ongeldig := 1;
|
||
fac.imp_writelog
|
||
(p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Personeelsnummer en loginnaam onbekend',
|
||
'Personeelsnummer of loginnaam is verplicht; regel wordt overgeslagen!'
|
||
);
|
||
COMMIT;
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldige tweede loginnaam';
|
||
v_prs_perslid_oslogin2 := TRIM (v_prs_perslid_oslogin2);
|
||
|
||
IF LENGTH (v_prs_perslid_oslogin2) > 30
|
||
THEN
|
||
v_prs_perslid_oslogin2 := NULL;
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Tweede loginnaam te lang',
|
||
'Tweede loginnaam wordt niet bijgewerkt'
|
||
);
|
||
COMMIT;
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldig telefoonnummer';
|
||
v_prs_perslid_telefoonnr := TRIM (v_prs_perslid_telefoonnr);
|
||
|
||
IF LENGTH (v_prs_perslid_telefoonnr) > 15
|
||
THEN
|
||
v_prs_perslid_telefoonnr := NULL;
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Telefoonnummer te lang',
|
||
'Telefoonnummer wordt niet bijgewerkt'
|
||
);
|
||
COMMIT;
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldig mobiel nummer';
|
||
v_prs_perslid_mobiel := TRIM (v_prs_perslid_mobiel);
|
||
|
||
IF LENGTH (v_prs_perslid_mobiel) > 15
|
||
THEN
|
||
v_prs_perslid_mobiel := NULL;
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Mobiel nummer te lang',
|
||
'Mobiel nummer wordt niet bijgewerkt'
|
||
);
|
||
COMMIT;
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldig e-mailadres';
|
||
v_prs_perslid_email := TRIM (v_prs_perslid_email);
|
||
|
||
IF LENGTH (v_prs_perslid_email) > 50
|
||
THEN
|
||
v_prs_perslid_email := NULL;
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'E-mailadres te lang',
|
||
'E-mailadres wordt niet bijgewerkt'
|
||
);
|
||
COMMIT;
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint :=
|
||
'Ongeldige locatiecode [' || v_alg_locatie_code || ']';
|
||
v_alg_locatie_code := TRIM (v_alg_locatie_code);
|
||
|
||
IF LENGTH (v_alg_locatie_code) > 5
|
||
THEN
|
||
v_alg_locatie_code := NULL;
|
||
v_wp_ongeldig := 1;
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Locatiecode te lang',
|
||
'Werkplek wordt niet bijgewerkt'
|
||
);
|
||
COMMIT;
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint :=
|
||
'Ongeldige gebouwcode [' || v_alg_gebouw_code || ']';
|
||
v_alg_gebouw_code := TRIM (v_alg_gebouw_code);
|
||
|
||
IF LENGTH (v_alg_gebouw_code) > 10
|
||
THEN
|
||
v_wp_ongeldig := 1;
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Gebouwcode te lang',
|
||
'Werkplek wordt niet bijgewerkt'
|
||
);
|
||
COMMIT;
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint :=
|
||
'Ongeldig verdiepingnummer [' || v_alg_verdieping_volgnr || ']';
|
||
v_alg_verdieping_volgnr := TRIM (v_alg_verdieping_volgnr);
|
||
|
||
BEGIN
|
||
v_alg_verdieping_volgnr_n :=
|
||
ROUND (fac.safe_to_number (v_alg_verdieping_volgnr));
|
||
|
||
IF v_alg_verdieping_volgnr_n NOT BETWEEN -999 AND 999
|
||
THEN
|
||
v_wp_ongeldig := 1;
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding
|
||
|| 'Verdiepingnummer groter dan 3 posities',
|
||
'Werkplek wordt niet bijgewerkt'
|
||
);
|
||
COMMIT;
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg :=
|
||
v_errorhint
|
||
|| 'ORACLE (error '
|
||
|| oracle_err_num
|
||
|| '/'
|
||
|| oracle_err_mes
|
||
|| ')';
|
||
v_wp_ongeldig := 1;
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || v_errormsg,
|
||
'Werkplek wordt niet bijgewerkt'
|
||
);
|
||
COMMIT;
|
||
END;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldig ruimtenummer [' || v_alg_ruimte_nr || ']';
|
||
v_alg_ruimte_nr := TRIM (v_alg_ruimte_nr);
|
||
|
||
IF LENGTH (v_alg_ruimte_nr) > 10
|
||
THEN
|
||
v_wp_ongeldig := 1;
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Ruimtenummer te lang',
|
||
'Werkplek wordt niet bijgewerkt'
|
||
);
|
||
COMMIT;
|
||
END IF;
|
||
|
||
SELECT DECODE (v_alg_locatie_code, NULL, 0, 1)
|
||
+ DECODE (v_alg_gebouw_code, NULL, 0, 1)
|
||
+ DECODE (v_alg_verdieping_volgnr_n, NULL, 0, 1)
|
||
+ DECODE (v_alg_ruimte_nr, NULL, 0, 1)
|
||
INTO v_count
|
||
FROM DUAL;
|
||
|
||
IF v_count MOD 4 <> 0
|
||
THEN
|
||
v_wp_ongeldig := 1;
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Werkplekgegevens onvolledig',
|
||
'Werkplek wordt niet bijgewerkt'
|
||
);
|
||
COMMIT;
|
||
END IF;
|
||
|
||
-- Insert geformatteerde import record
|
||
IF v_ongeldig = 0
|
||
THEN
|
||
BEGIN
|
||
v_errorhint :=
|
||
'Fout bij toevoegen regel aan importtabel UWVA_IMP_PRS';
|
||
|
||
IF v_wp_ongeldig = 1
|
||
THEN
|
||
INSERT INTO uwva_imp_prs
|
||
(prs_perslid_nr, prs_perslid_oslogin,
|
||
prs_perslid_oslogin2,
|
||
prs_perslid_telefoonnr,
|
||
prs_perslid_mobiel, prs_perslid_email
|
||
)
|
||
VALUES (v_prs_perslid_nr, v_prs_perslid_oslogin,
|
||
v_prs_perslid_oslogin2,
|
||
v_prs_perslid_telefoonnr,
|
||
v_prs_perslid_mobiel, v_prs_perslid_email
|
||
);
|
||
ELSE
|
||
INSERT INTO uwva_imp_prs
|
||
(prs_perslid_nr, prs_perslid_oslogin,
|
||
prs_perslid_oslogin2,
|
||
prs_perslid_telefoonnr,
|
||
prs_perslid_mobiel, prs_perslid_email,
|
||
alg_locatie_code, alg_gebouw_code,
|
||
alg_verdieping_volgnr, alg_ruimte_nr
|
||
)
|
||
VALUES (v_prs_perslid_nr, v_prs_perslid_oslogin,
|
||
v_prs_perslid_oslogin2,
|
||
v_prs_perslid_telefoonnr,
|
||
v_prs_perslid_mobiel, v_prs_perslid_email,
|
||
v_alg_locatie_code, v_alg_gebouw_code,
|
||
v_alg_verdieping_volgnr_n, v_alg_ruimte_nr
|
||
);
|
||
END IF;
|
||
|
||
COMMIT;
|
||
v_count_import := v_count_import + 1;
|
||
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
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint
|
||
);
|
||
COMMIT;
|
||
END;
|
||
END IF;
|
||
END IF;
|
||
END;
|
||
END LOOP;
|
||
|
||
IF (header_is_valid = 0)
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
'Ongeldig importbestand',
|
||
'Geen header of header niet volgens specificatie!'
|
||
);
|
||
ELSE
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Persoon: aantal ingelezen regels: '
|
||
|| TO_CHAR (v_count_tot),
|
||
''
|
||
);
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Persoon: aantal ongeldige importregels: '
|
||
|| TO_CHAR (v_count_tot - v_count_import),
|
||
''
|
||
);
|
||
END IF;
|
||
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg :=
|
||
'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint
|
||
);
|
||
COMMIT;
|
||
END uwva_import_prs;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE uwva_update_prs (
|
||
p_import_key IN NUMBER
|
||
)
|
||
IS
|
||
v_aanduiding VARCHAR2 (200);
|
||
v_errorhint VARCHAR2 (1000);
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_count_tot NUMBER (10);
|
||
v_count_error NUMBER (10);
|
||
v_count NUMBER (10);
|
||
--
|
||
v_perslid_key NUMBER (10);
|
||
v_locatie_key NUMBER (10);
|
||
v_gebouw_key NUMBER (10);
|
||
v_verdieping_key NUMBER (10);
|
||
v_ruimte_key NUMBER (10);
|
||
v_wp_key NUMBER (10);
|
||
v_wp_volgnr NUMBER (3);
|
||
v_wp_oms VARCHAR2 (30);
|
||
|
||
-- Dubbele nummers/logins in import? Dan wordt dezelfde persoon 2x (of meer) bijgewerkt!
|
||
CURSOR cperslid
|
||
IS
|
||
SELECT ip.prs_perslid_nr, ip.prs_perslid_oslogin,
|
||
ip.prs_perslid_oslogin2, ip.prs_perslid_telefoonnr,
|
||
ip.prs_perslid_mobiel, ip.prs_perslid_email
|
||
FROM uwva_imp_prs ip;
|
||
|
||
-- Dubbele nummers/logins in import? Dan krijgt iemand mogelijk de verkeerde plaats(en)!
|
||
-- NB. Import garandeert dat als locatie niet leeg, dan ook gebouw t/m ruimte niet leeg!
|
||
CURSOR cwp
|
||
IS
|
||
SELECT ip.prs_perslid_nr, ip.prs_perslid_oslogin, ip.alg_locatie_code,
|
||
ip.alg_gebouw_code, ip.alg_verdieping_volgnr, ip.alg_ruimte_nr
|
||
FROM uwva_imp_prs ip
|
||
WHERE ip.alg_locatie_code IS NOT NULL;
|
||
|
||
-- Alle actieve personen met personeelsnummer (ie. de import-doelgroep) zonder een werkplek
|
||
CURSOR cnowp
|
||
IS
|
||
SELECT p.prs_perslid_key, p.prs_perslid_nr, p.prs_perslid_naam,
|
||
p.prs_perslid_voornaam
|
||
FROM prs_v_aanwezigperslid p
|
||
WHERE p.prs_perslid_nr IS NOT NULL
|
||
AND p.prs_perslid_naam NOT LIKE 'INACTIEF:%'
|
||
AND NOT EXISTS (SELECT 1
|
||
FROM prs_perslidwerkplek pw
|
||
WHERE pw.prs_perslid_key = p.prs_perslid_key);
|
||
BEGIN
|
||
v_count_tot := 0;
|
||
v_count_error := 0;
|
||
|
||
FOR recperslid IN cperslid
|
||
LOOP
|
||
BEGIN
|
||
v_count_tot := v_count_tot + 1;
|
||
v_aanduiding :=
|
||
'['
|
||
|| COALESCE (recperslid.prs_perslid_nr,
|
||
recperslid.prs_perslid_oslogin
|
||
)
|
||
|| '] ';
|
||
v_errorhint := 'Fout bij bepalen persoon';
|
||
|
||
IF recperslid.prs_perslid_nr IS NOT NULL
|
||
THEN
|
||
SELECT COUNT (*), MAX (prs_perslid_key)
|
||
INTO v_count, v_perslid_key
|
||
FROM prs_perslid
|
||
WHERE prs_perslid_verwijder IS NULL
|
||
AND UPPER (prs_perslid_nr) = UPPER (recperslid.prs_perslid_nr);
|
||
ELSE
|
||
SELECT COUNT (*), MAX (prs_perslid_key)
|
||
INTO v_count, v_perslid_key
|
||
FROM prs_perslid
|
||
WHERE prs_perslid_verwijder IS NULL
|
||
AND UPPER (prs_perslid_oslogin) = UPPER (recperslid.prs_perslid_oslogin);
|
||
END IF;
|
||
|
||
IF (v_count = 1)
|
||
THEN
|
||
v_errorhint := 'Fout bij wijzigen persoon';
|
||
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_oslogin =
|
||
COALESCE (recperslid.prs_perslid_oslogin,
|
||
prs_perslid_oslogin
|
||
),
|
||
prs_perslid_oslogin2 =
|
||
COALESCE (recperslid.prs_perslid_oslogin2,
|
||
prs_perslid_oslogin2
|
||
),
|
||
prs_perslid_telefoonnr =
|
||
COALESCE (recperslid.prs_perslid_telefoonnr,
|
||
prs_perslid_telefoonnr
|
||
),
|
||
prs_perslid_mobiel =
|
||
COALESCE (recperslid.prs_perslid_mobiel,
|
||
prs_perslid_mobiel
|
||
),
|
||
prs_perslid_email =
|
||
COALESCE (recperslid.prs_perslid_email,
|
||
prs_perslid_email
|
||
)
|
||
WHERE prs_perslid_key = v_perslid_key;
|
||
ELSE
|
||
IF (v_count = 0)
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding
|
||
|| ' Persoon niet bekend in Facilitor',
|
||
v_errorhint
|
||
);
|
||
ELSE -- (v_count > 1)
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding
|
||
|| ' Persoon niet 1-duidig te bepalen',
|
||
v_errorhint
|
||
);
|
||
END IF;
|
||
END IF;
|
||
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_count_error := v_count_error + 1;
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg :=
|
||
'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint
|
||
);
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Persoon: verwerkte regels zonder foutmelding: '
|
||
|| TO_CHAR (v_count_tot - v_count_error),
|
||
''
|
||
);
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Persoon: verwerkte regels met foutmelding: '
|
||
|| TO_CHAR (v_count_error),
|
||
''
|
||
);
|
||
COMMIT;
|
||
|
||
v_count_tot := 0;
|
||
v_count_error := 0;
|
||
|
||
FOR recwp IN cwp
|
||
LOOP
|
||
BEGIN
|
||
v_count_tot := v_count_tot + 1;
|
||
v_aanduiding :=
|
||
'['
|
||
|| COALESCE (recwp.prs_perslid_nr, recwp.prs_perslid_oslogin)
|
||
|| '] ';
|
||
v_errorhint := 'Fout bij bepalen persoon';
|
||
|
||
IF recwp.prs_perslid_nr IS NOT NULL
|
||
THEN
|
||
SELECT COUNT (*), MAX (prs_perslid_key)
|
||
INTO v_count, v_perslid_key
|
||
FROM prs_perslid
|
||
WHERE prs_perslid_verwijder IS NULL
|
||
AND UPPER (prs_perslid_nr) = UPPER (recwp.prs_perslid_nr);
|
||
ELSE
|
||
SELECT COUNT (*), MAX (prs_perslid_key)
|
||
INTO v_count, v_perslid_key
|
||
FROM prs_perslid
|
||
WHERE prs_perslid_verwijder IS NULL
|
||
AND UPPER (prs_perslid_oslogin) = UPPER (recwp.prs_perslid_oslogin);
|
||
END IF;
|
||
|
||
IF (v_count = 1)
|
||
THEN
|
||
v_errorhint := 'Fout bij bepalen locatie';
|
||
|
||
SELECT alg_locatie_key
|
||
INTO v_locatie_key
|
||
FROM alg_v_aanweziglocatie
|
||
WHERE UPPER (alg_locatie_code) = UPPER (recwp.alg_locatie_code);
|
||
|
||
v_errorhint := 'Fout bij bepalen gebouw';
|
||
|
||
SELECT alg_gebouw_key
|
||
INTO v_gebouw_key
|
||
FROM alg_v_aanweziggebouw
|
||
WHERE alg_locatie_key = v_locatie_key
|
||
AND UPPER (alg_gebouw_code) = UPPER (recwp.alg_gebouw_code);
|
||
|
||
v_errorhint := 'Fout bij bepalen verdieping';
|
||
|
||
SELECT alg_verdieping_key
|
||
INTO v_verdieping_key
|
||
FROM alg_v_aanwezigverdieping
|
||
WHERE alg_gebouw_key = v_gebouw_key
|
||
AND UPPER (alg_verdieping_volgnr) = UPPER (recwp.alg_verdieping_volgnr);
|
||
|
||
v_errorhint := 'Fout bij bepalen ruimte';
|
||
|
||
SELECT alg_ruimte_key
|
||
INTO v_ruimte_key
|
||
FROM alg_v_aanwezigruimte r
|
||
WHERE r.alg_verdieping_key = v_verdieping_key
|
||
AND UPPER (r.alg_ruimte_nr) = UPPER (recwp.alg_ruimte_nr);
|
||
|
||
-- Persoon verhuist naar/krijgt nieuwe werkplek in betreffende gebouw!
|
||
v_errorhint := 'Fout bij verhuizen naar nieuwe werkplek';
|
||
PRS.movetoruimte (v_perslid_key, v_ruimte_key, 'G');
|
||
--ELSE
|
||
--Niets, want dat is dan al gemeld in voorgaande loop!
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_count_error := v_count_error + 1;
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg :=
|
||
'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint
|
||
);
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Werkplek: verwerkte regels zonder foutmelding: '
|
||
|| TO_CHAR (v_count_tot - v_count_error),
|
||
''
|
||
);
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Werkplek: verwerkte regels met foutmelding: '
|
||
|| TO_CHAR (v_count_error),
|
||
''
|
||
);
|
||
COMMIT;
|
||
|
||
FOR recnowp IN cnowp
|
||
LOOP
|
||
BEGIN
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
'Persoon met nummer ['
|
||
|| recnowp.prs_perslid_nr
|
||
|| '] en naam ['
|
||
|| recnowp.prs_perslid_naam
|
||
|| ', '
|
||
|| recnowp.prs_perslid_voornaam
|
||
|| '] heeft geen werkplek',
|
||
'Geen werkplek'
|
||
);
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg :=
|
||
'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_errormsg,
|
||
v_errorhint
|
||
);
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
END uwva_update_prs;
|
||
/
|
||
|
||
--UWVA#30448: PWP-import
|
||
/* Formatted on 12-12-2014 14:45:15 (QP5 v5.136.908.31019) */
|
||
CREATE OR REPLACE PROCEDURE uwva_import_pwp (p_import_key IN NUMBER)
|
||
AS
|
||
c_delim VARCHAR2 (1) := ';';
|
||
v_newline VARCHAR2 (1000); -- Input line
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_aanduiding VARCHAR2 (200) := '';
|
||
header_is_valid NUMBER := 0;
|
||
v_count_tot NUMBER (10) := 0;
|
||
v_count_import NUMBER (10) := 0;
|
||
v_ongeldig NUMBER (1) := 0;
|
||
-- De importvelden
|
||
v_login VARCHAR2 (255); -- C30/prs_perslid_oslogin
|
||
v_locatie VARCHAR2 (255); -- C10/alg_locatie_code
|
||
v_gebouw VARCHAR2 (255); -- C12/alg_gebouw_code
|
||
v_verdiepingcode VARCHAR2 (255); -- C10/alg_verdieping_code
|
||
v_ruimtenr VARCHAR2 (255); -- C10/alg_ruimte_nr
|
||
v_pwp_volgnr VARCHAR2 (255); -- N2/prs_perslidwerkplek_volgnr
|
||
v_bezetting VARCHAR2 (255); -- N3/prs_perslidwerkplek_bezetting
|
||
|
||
-- Overige velden:
|
||
CURSOR c1
|
||
IS
|
||
SELECT *
|
||
FROM fac_imp_file
|
||
WHERE fac_import_key = p_import_key
|
||
ORDER BY fac_imp_file_index;
|
||
BEGIN
|
||
DELETE FROM uwva_imp_pwp;
|
||
|
||
COMMIT;
|
||
|
||
FOR rec1 IN c1
|
||
LOOP
|
||
BEGIN
|
||
v_newline := rec1.fac_imp_file_line;
|
||
v_errormsg := 'Fout bij opvragen importregel';
|
||
v_aanduiding := '';
|
||
v_ongeldig := 0;
|
||
|
||
-- Lees alle veldwaarden
|
||
-- LOGIN;LOCATIE;GEBOUW;VERDIEPINGCODE;RUIMTENR;PWP_VOLGNR;BEZETTING
|
||
fac.imp_getfield (v_newline, c_delim, v_login);
|
||
fac.imp_getfield (v_newline, c_delim, v_locatie);
|
||
fac.imp_getfield (v_newline, c_delim, v_gebouw);
|
||
fac.imp_getfield (v_newline, c_delim, v_verdiepingcode);
|
||
fac.imp_getfield (v_newline, c_delim, v_ruimtenr);
|
||
fac.imp_getfield (v_newline, c_delim, v_pwp_volgnr);
|
||
fac.imp_getfield (v_newline, c_delim, v_bezetting);
|
||
v_aanduiding :=
|
||
'['
|
||
|| v_login
|
||
|| '|'
|
||
|| v_gebouw
|
||
|| '|'
|
||
|| v_verdiepingcode
|
||
|| '|'
|
||
|| v_ruimtenr
|
||
|| '|'
|
||
|| TO_CHAR (v_pwp_volgnr)
|
||
|| '|'
|
||
|| TO_CHAR (v_bezetting)
|
||
|| '] ';
|
||
|
||
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
|
||
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
|
||
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
|
||
IF (header_is_valid = 0)
|
||
THEN
|
||
IF UPPER (TRIM (v_login)) = 'LOGIN'
|
||
AND UPPER (TRIM (v_locatie)) = 'LOCATIE'
|
||
AND UPPER (TRIM (v_gebouw)) = 'GEBOUW'
|
||
AND UPPER (TRIM (v_verdiepingcode)) = 'VERDIEPINGCODE'
|
||
AND UPPER (TRIM (v_ruimtenr)) = 'RUIMTENR'
|
||
AND UPPER (TRIM (v_pwp_volgnr)) = 'PWP_VOLGNR'
|
||
AND UPPER (TRIM (v_bezetting)) = 'BEZETTING'
|
||
THEN
|
||
header_is_valid := 1;
|
||
END IF;
|
||
ELSE
|
||
v_count_tot := v_count_tot + 1;
|
||
-- Controleer alle veldwaarden
|
||
v_errormsg := 'Login ongeldig/ongedefinieerd of te lang';
|
||
v_login := TRIM (v_login);
|
||
|
||
IF v_login IS NULL OR LENGTH (v_login) > 30
|
||
THEN
|
||
v_ongeldig := 1;
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || v_errormsg,
|
||
'Regel wordt overgeslagen!');
|
||
END IF;
|
||
|
||
--
|
||
v_errormsg := 'Locatie ongeldig/ongedefinieerd of te lang';
|
||
v_locatie := TRIM (v_locatie);
|
||
|
||
IF v_locatie IS NULL OR LENGTH (v_locatie) > 10
|
||
THEN
|
||
v_ongeldig := 1;
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || v_errormsg,
|
||
'Regel wordt overgeslagen!');
|
||
END IF;
|
||
|
||
--
|
||
v_errormsg := 'Gebouw ongeldig/ongedefinieerd of te lang';
|
||
v_gebouw := TRIM (v_gebouw);
|
||
|
||
IF v_gebouw IS NULL OR LENGTH (v_gebouw) > 12
|
||
THEN
|
||
v_ongeldig := 1;
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || v_errormsg,
|
||
'Regel wordt overgeslagen!');
|
||
END IF;
|
||
|
||
--
|
||
v_errormsg := 'Verdieping ongeldig/ongedefinieerd of te lang';
|
||
v_verdiepingcode := TRIM (v_verdiepingcode);
|
||
|
||
IF v_verdiepingcode IS NULL OR LENGTH (v_verdiepingcode) > 10
|
||
THEN
|
||
v_ongeldig := 1;
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || v_errormsg,
|
||
'Regel wordt overgeslagen!');
|
||
END IF;
|
||
|
||
--
|
||
v_errormsg := 'Ruimtenr ongeldig/ongedefinieerd of te lang';
|
||
v_ruimtenr := TRIM (v_ruimtenr);
|
||
|
||
IF v_ruimtenr IS NULL OR LENGTH (v_ruimtenr) > 10
|
||
THEN
|
||
v_ongeldig := 1;
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || v_errormsg,
|
||
'Regel wordt overgeslagen!');
|
||
END IF;
|
||
|
||
--
|
||
v_errormsg := 'PWP-volgnr ongeldig';
|
||
v_pwp_volgnr := TRIM (v_pwp_volgnr);
|
||
|
||
IF v_pwp_volgnr IS NOT NULL AND COALESCE (fac.safe_to_number (v_pwp_volgnr), -1) NOT BETWEEN 0 AND 99
|
||
THEN
|
||
v_pwp_volgnr := NULL;
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || v_errormsg,
|
||
'Volgnummer wordt genegeerd!');
|
||
END IF;
|
||
|
||
--
|
||
v_errormsg := 'Bezetting ongeldig/ongedefinieerd';
|
||
v_bezetting := TRIM (v_bezetting);
|
||
|
||
IF COALESCE (fac.safe_to_number (v_bezetting), -1) NOT BETWEEN 0 AND 100
|
||
THEN
|
||
v_ongeldig := 1;
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || v_errormsg,
|
||
'Regel wordt overgeslagen!');
|
||
END IF;
|
||
|
||
-- Insert geformatteerde import record
|
||
IF (v_ongeldig = 0)
|
||
THEN
|
||
BEGIN
|
||
v_errormsg := 'Fout wegschrijven importregel';
|
||
|
||
INSERT INTO uwva_imp_pwp (login,
|
||
locatie,
|
||
gebouw,
|
||
verdiepingcode,
|
||
ruimtenr,
|
||
pwp_volgnr,
|
||
bezetting)
|
||
VALUES (v_login,
|
||
v_locatie,
|
||
v_gebouw,
|
||
v_verdiepingcode,
|
||
v_ruimtenr,
|
||
fac.safe_to_number (v_pwp_volgnr),
|
||
fac.safe_to_number (v_bezetting));
|
||
|
||
v_count_import := v_count_import + 1;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg :=
|
||
v_errormsg
|
||
|| ' ORACLE (error '
|
||
|| oracle_err_num
|
||
|| '/'
|
||
|| oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
'');
|
||
END;
|
||
END IF;
|
||
END IF;
|
||
END;
|
||
END LOOP;
|
||
|
||
IF (header_is_valid = 0)
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
'Ongeldig importbestand',
|
||
'Geen header of header niet volgens specificatie!');
|
||
ELSE
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'S',
|
||
'Inleesproces/#ingelezen importregels: ' || TO_CHAR (v_count_tot),
|
||
'');
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'S',
|
||
'Inleesproces/#ongeldige niet ingelezen importregels: '
|
||
|| TO_CHAR (v_count_tot - v_count_import),
|
||
'');
|
||
END IF;
|
||
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg :=
|
||
v_errormsg
|
||
|| 'ORACLE (error '
|
||
|| oracle_err_num
|
||
|| '/'
|
||
|| oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
'Inleesproces PWP afgebroken!');
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE uwva_update_pwp (p_import_key IN NUMBER)
|
||
AS
|
||
-- Cursor loopt - op login/locatie/gebouw/verdiepingcode/ruimtenr! - over
|
||
-- alle ingelezen regels.
|
||
CURSOR c1
|
||
IS
|
||
SELECT *
|
||
FROM uwva_imp_pwp
|
||
ORDER BY 1, 2, 3, 4, 5;
|
||
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_aanduiding VARCHAR2 (200);
|
||
v_count NUMBER (10) := 0;
|
||
v_count_tot NUMBER (10) := 0;
|
||
v_count_upd NUMBER (10) := 0;
|
||
v_perslid_key prs_perslid.prs_perslid_key%TYPE;
|
||
v_locatie_key alg_locatie.alg_locatie_key%TYPE;
|
||
v_gebouw_key alg_gebouw.alg_gebouw_key%TYPE;
|
||
v_verdieping_key alg_verdieping.alg_verdieping_key%TYPE;
|
||
v_ruimte_key alg_ruimte.alg_ruimte_key%TYPE;
|
||
v_pwp_key prs_perslidwerkplek.prs_perslidwerkplek_key%TYPE;
|
||
BEGIN
|
||
-- Loop over alle ingelezen PWP-regels.
|
||
FOR rec1 IN c1
|
||
LOOP
|
||
BEGIN
|
||
v_aanduiding :=
|
||
'['
|
||
|| rec1.login
|
||
|| '|'
|
||
|| rec1.gebouw
|
||
|| '|'
|
||
|| rec1.verdiepingcode
|
||
|| '|'
|
||
|| rec1.ruimtenr
|
||
|| '|'
|
||
|| TO_CHAR (rec1.pwp_volgnr)
|
||
|| '|'
|
||
|| TO_CHAR (rec1.bezetting)
|
||
|| '] ';
|
||
v_count_tot := v_count_tot + 1;
|
||
|
||
v_errormsg := 'Fout bepalen persoon';
|
||
|
||
SELECT prs_perslid_key
|
||
INTO v_perslid_key
|
||
FROM prs_v_aanwezigperslid
|
||
WHERE prs_perslid_oslogin = UPPER (rec1.login)
|
||
OR prs_perslid_oslogin2 = UPPER (rec1.login);
|
||
|
||
v_errormsg := 'Fout bepalen locatie';
|
||
|
||
SELECT alg_locatie_key
|
||
INTO v_locatie_key
|
||
FROM alg_v_aanweziglocatie
|
||
WHERE UPPER (alg_locatie_code) = UPPER (rec1.locatie);
|
||
|
||
v_errormsg := 'Fout bepalen gebouw';
|
||
|
||
SELECT alg_gebouw_key
|
||
INTO v_gebouw_key
|
||
FROM alg_v_aanweziggebouw
|
||
WHERE alg_gebouw_upper = UPPER (rec1.gebouw)
|
||
AND alg_locatie_key = v_locatie_key;
|
||
|
||
v_errormsg := 'Fout bepalen verdiepingcode';
|
||
|
||
SELECT alg_verdieping_key
|
||
INTO v_verdieping_key
|
||
FROM alg_v_aanwezigverdieping
|
||
WHERE UPPER (alg_verdieping_code) = UPPER (rec1.verdiepingcode)
|
||
AND alg_gebouw_key = v_gebouw_key;
|
||
|
||
v_errormsg := 'Fout bepalen ruimtenr';
|
||
|
||
SELECT alg_ruimte_key
|
||
INTO v_ruimte_key
|
||
FROM alg_v_aanwezigruimte
|
||
WHERE alg_ruimte_upper_nr = UPPER (rec1.ruimtenr)
|
||
AND alg_verdieping_key = v_verdieping_key;
|
||
|
||
v_errormsg := 'Fout bepalen bestaande werkplek op locatie';
|
||
|
||
SELECT COUNT ( * )
|
||
INTO v_count
|
||
FROM prs_perslidwerkplek pwp,
|
||
prs_werkplek wp,
|
||
alg_ruimte r,
|
||
alg_verdieping v,
|
||
alg_gebouw g
|
||
WHERE pwp.prs_perslid_key = v_perslid_key
|
||
AND pwp.prs_werkplek_key = wp.prs_werkplek_key
|
||
AND wp.prs_alg_ruimte_key = r.alg_ruimte_key
|
||
AND r.alg_verdieping_key = v.alg_verdieping_key
|
||
AND v.alg_gebouw_key = g.alg_gebouw_key
|
||
AND g.alg_locatie_key = v_locatie_key;
|
||
|
||
-- Als op locatie reeds een bestaande WP, dan niet nog een toewijzen.
|
||
IF (v_count = 0)
|
||
THEN
|
||
v_errormsg := 'Fout toewijzen werkplek';
|
||
PRS.movetoruimte (v_perslid_key, v_ruimte_key, NULL);
|
||
|
||
v_errormsg := 'Fout bepalen werkplek';
|
||
|
||
SELECT pwp.prs_perslidwerkplek_key
|
||
INTO v_pwp_key
|
||
FROM prs_perslidwerkplek pwp, prs_werkplek wp
|
||
WHERE pwp.prs_perslid_key = v_perslid_key
|
||
AND pwp.prs_werkplek_key = wp.prs_werkplek_key
|
||
AND wp.prs_werkplek_virtueel = 0 -- Alleen echte plekken
|
||
AND wp.prs_werkplek_type = 0 -- Alleen vaste plekken
|
||
AND wp.prs_alg_ruimte_key = v_ruimte_key;
|
||
|
||
v_errormsg := 'Fout bijwerken werkplek';
|
||
|
||
UPDATE prs_perslidwerkplek
|
||
SET prs_perslidwerkplek_volgnr = rec1.pwp_volgnr,
|
||
prs_perslidwerkplek_bezetting = rec1.bezetting
|
||
WHERE prs_perslidwerkplek_key = v_pwp_key;
|
||
|
||
v_count_upd := v_count_upd + 1;
|
||
ELSE
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
v_aanduiding || 'Werkplek ongewijzigd',
|
||
'');
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg :=
|
||
v_errormsg
|
||
|| ' ORACLE (error '
|
||
|| oracle_err_num
|
||
|| '/'
|
||
|| oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
'');
|
||
END;
|
||
END LOOP;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'PWPs/#ingelezen: ' || TO_CHAR (v_count_tot),
|
||
'');
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'PWPs/#toegevoegd: ' || TO_CHAR (v_count_upd),
|
||
'');
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg :=
|
||
v_errormsg
|
||
|| ' ORACLE (error '
|
||
|| oracle_err_num
|
||
|| '/'
|
||
|| oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_errormsg,
|
||
'Importproces PWP afgebroken!');
|
||
END;
|
||
/
|
||
|
||
|
||
/* Formatted on 17-2-2014 11:48:12 (QP5 v5.136.908.31019) */
|
||
CREATE OR REPLACE VIEW uwva_v_email_schrijfwijzer
|
||
(
|
||
prs_key,
|
||
fac_id,
|
||
imp_id,
|
||
imp_empnum,
|
||
imp_nickname,
|
||
imp_lastname,
|
||
imp_spousename,
|
||
fac_email,
|
||
imp_email,
|
||
sw_email
|
||
)
|
||
AS
|
||
SELECT DISTINCT
|
||
p.prs_perslid_key,
|
||
kl.prs_kenmerklink_waarde,
|
||
ip.id,
|
||
ip.empnum,
|
||
ip.nickname,
|
||
ip.lastname,
|
||
ip.spousename,
|
||
p.prs_perslid_email,
|
||
ip.email,
|
||
DECODE (
|
||
INSTR (COALESCE (p.prs_perslid_email, ip.email), '@'),
|
||
NULL, -- geen email bekend -> ongewijzigd
|
||
COALESCE (p.prs_perslid_email, ip.email),
|
||
0, -- geen '@' in email -> ongewijzigd
|
||
COALESCE (p.prs_perslid_email, ip.email),
|
||
CASE -- email met een '@'
|
||
WHEN INSTR (COALESCE (p.prs_perslid_email, ip.email) || '.', '.') <
|
||
INSTR (COALESCE (p.prs_perslid_email, ip.email), '@')
|
||
THEN -- . voor @ (dus meeste gevallen)
|
||
REPLACE (
|
||
REPLACE (
|
||
REPLACE (
|
||
REPLACE (
|
||
INITCAP(SUBSTR (LOWER(COALESCE (p.prs_perslid_email, ip.email)),
|
||
1,
|
||
INSTR (COALESCE (p.prs_perslid_email, ip.email), '.', -1, 2) - 1))
|
||
|| SUBSTR (LOWER(COALESCE (p.prs_perslid_email, ip.email)),
|
||
INSTR (COALESCE (p.prs_perslid_email, ip.email), '.', -1, 2)),
|
||
INITCAP(REPLACE (COALESCE (nickname, vnaam), ' ', '') || '.'),
|
||
REPLACE (INITCAP (COALESCE (nickname, vnaam)), ' ', '') || '.'),
|
||
LOWER(SUBSTR (TRIM (COALESCE (lastname, anaam)),
|
||
1,
|
||
INSTR (TRIM (COALESCE (lastname, anaam)), ' ') - 1)),
|
||
SUBSTR (INITCAP (TRIM (COALESCE (lastname, anaam))),
|
||
1,
|
||
INSTR (TRIM (COALESCE (lastname, anaam)), ' ') - 1)),
|
||
LOWER(SUBSTR (TRIM (COALESCE (lastname, anaam)),
|
||
INSTR (TRIM (COALESCE (lastname, anaam)), ' ', -1) + 1)),
|
||
SUBSTR (INITCAP (TRIM (COALESCE (lastname, anaam))),
|
||
INSTR (TRIM (COALESCE (lastname, anaam)), ' ', -1) + 1)),
|
||
LOWER (REPLACE (spousename, ' ', '')),
|
||
REPLACE (INITCAP (spousename), ' ', ''))
|
||
ELSE -- geen . voor @ (bkwi.nl/uwv.local; <30!) -> ongewijzigd
|
||
COALESCE (p.prs_perslid_email, ip.email)
|
||
END)
|
||
email_schrijfwijzer
|
||
FROM (SELECT prs_perslid_key,
|
||
REPLACE (prs_perslid_email, '$', '@') prs_perslid_email,
|
||
prs_perslid_voornaam vnaam,
|
||
prs_perslid_naam anaam
|
||
FROM prs_v_aanwezigperslid) p
|
||
LEFT JOIN prs_v_aanwezigkenmerklink kl
|
||
ON p.prs_perslid_key = kl.prs_link_key
|
||
AND kl.prs_kenmerk_key = 1232 -- ABS-ID
|
||
FULL JOIN (SELECT *
|
||
FROM uwva_imp_abs
|
||
WHERE SUBSTR (empnum, 1, 1) IN ('C', 'I', 'E', 'F', 'D', 'K')) ip
|
||
ON kl.prs_kenmerklink_waarde = ip.id;
|
||
|
||
/* Formatted on 4-7-2016 16:45:15 (QP5 v5.136.908.31019) */
|
||
CREATE OR REPLACE VIEW uwva_v_rap_uitdienst
|
||
(
|
||
extra_key,
|
||
perslid_nr,
|
||
absid,
|
||
perslid_naam_full,
|
||
kpn_nr,
|
||
kpn_oms,
|
||
verplichting
|
||
)
|
||
AS -- Voorgaande import uitdienst <20>n lopende/actuele verplichtingen!
|
||
SELECT p.prs_perslid_key,
|
||
p.prs_perslid_nr,
|
||
kl2.prs_kenmerklink_waarde,
|
||
pf.prs_perslid_naam_full,
|
||
kp.prs_kostenplaats_nr,
|
||
kp.prs_kostenplaats_omschrijving,
|
||
lcl.fac_locale_xsl_tekst || ' ' || vp.item
|
||
FROM prs_v_aanwezigperslid p,
|
||
prs_afdeling a,
|
||
prs_kostenplaats kp,
|
||
prs_v_perslid_fullnames_all pf,
|
||
prs_v_verplichting vp, --_keys vp,
|
||
prs_kenmerklink kl1,
|
||
prs_kenmerklink kl2,
|
||
fac_locale_xsl lcl
|
||
WHERE p.prs_afdeling_key = a.prs_afdeling_key
|
||
AND a.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
|
||
AND p.prs_perslid_key = pf.prs_perslid_key
|
||
AND p.prs_perslid_key = vp.prs_perslid_key(+)
|
||
AND p.prs_perslid_key = kl1.prs_link_key
|
||
AND kl1.prs_kenmerk_key = 1040 -- Type Medewerker
|
||
AND kl1.prs_kenmerklink_waarde IN
|
||
(SELECT TO_CHAR (fac_usrdata_key)
|
||
FROM fac_usrdata
|
||
WHERE fac_usrtab_key = 301 -- Type_medewerker
|
||
AND fac_usrdata_upper IN ('C', 'I', 'E', 'F', 'D', 'K', 'W'))
|
||
AND p.prs_perslid_key = kl2.prs_link_key
|
||
AND kl2.prs_kenmerk_key = 1232 -- ABS-ID
|
||
AND NOT EXISTS (SELECT 1
|
||
FROM uwva_imp_abs uia
|
||
WHERE uia.id = kl2.prs_kenmerklink_waarde)
|
||
AND vp.fac_message_code = lcl.fac_locale_xsl_label
|
||
AND lcl.fac_locale_xsl_lang = 'NL';
|
||
|
||
-- ABS importfunctie, herziene versie volgens UWVA#18115, met aanvullingen voor Vinder (UWVA#19010)
|
||
CREATE OR REPLACE PROCEDURE uwva_import_abs (p_import_key IN NUMBER)
|
||
AS
|
||
CURSOR c1
|
||
IS
|
||
SELECT *
|
||
FROM fac_imp_file
|
||
WHERE fac_import_key = p_import_key
|
||
ORDER BY fac_imp_file_index;
|
||
|
||
v_newline VARCHAR2 (1000); -- Import line
|
||
v_field VARCHAR2 (100); -- Import field
|
||
v_fielddelimitor VARCHAR2 (1) := ';'; -- Field seperator
|
||
v_count_import NUMBER (10);
|
||
v_count NUMBER;
|
||
v_errormsg VARCHAR2 (200);
|
||
v_errorhint VARCHAR2 (200);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_buffercount NUMBER := 0;
|
||
c_commitbuffer NUMBER := 2000; -- om de zoveel committen
|
||
-- De importvelden
|
||
v_prefname VARCHAR2 (100);
|
||
v_lastname VARCHAR2 (100);
|
||
v_prefix VARCHAR2 (100);
|
||
v_spousename VARCHAR2 (100);
|
||
v_spouseprefix VARCHAR2 (100);
|
||
v_nickname VARCHAR2 (100);
|
||
v_titel VARCHAR2 (100);
|
||
v_account VARCHAR2 (100);
|
||
v_altaccnt VARCHAR2 (100);
|
||
v_funcdscr VARCHAR2 (100);
|
||
v_telno VARCHAR2 (100);
|
||
v_mobno VARCHAR2 (100);
|
||
v_faxno VARCHAR2 (100);
|
||
v_email VARCHAR2 (255);
|
||
v_initials VARCHAR2 (100);
|
||
v_empnum VARCHAR2 (100);
|
||
v_costcent VARCHAR2 (100);
|
||
v_gender VARCHAR2 (100);
|
||
v_employeetype VARCHAR2 (100);
|
||
v_pandcode VARCHAR2 (100);
|
||
v_grpfname VARCHAR2 (100);
|
||
v_grpid VARCHAR2 (100);
|
||
v_id VARCHAR2 (100);
|
||
header_found BOOLEAN := FALSE;
|
||
BEGIN
|
||
-- Clear my previous imported rows
|
||
DELETE FROM uwva_imp_abs;
|
||
|
||
v_count_import := 0;
|
||
|
||
FOR rec1 IN c1
|
||
LOOP
|
||
BEGIN
|
||
v_newline := rec1.fac_imp_file_line;
|
||
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_prefname); -- prefname
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_nickname); -- nickname
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_titel); -- titel
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_account); -- accnt
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_altaccnt); -- altaccnt
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_funcdscr); -- funcdscr
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_telno); -- telno
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_mobno); -- mobnr
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_faxno); -- faxnr
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_email); -- email
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_initials); -- initials
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_prefix); -- prefix
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_empnum); -- empnum
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_costcent); -- costcent
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_gender); -- gender
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_employeetype); -- type
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_pandcode); -- location
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_id); -- id
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_grpfname); -- grpfname
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_grpid); -- grpid
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_lastname); -- lastname
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_spousename); -- spousename
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_spouseprefix); -- spouseprefix
|
||
|
||
-- Skip until the header is found
|
||
IF (header_found = FALSE)
|
||
THEN
|
||
IF UPPER (v_prefname) = 'PREFNAME' -- PREFNAME
|
||
AND UPPER (v_nickname) = 'NICKNAME' -- NICKNAME
|
||
AND UPPER (v_titel) = 'TITEL' -- TITEL
|
||
AND UPPER (v_account) = 'ACCNT' -- ACCNT
|
||
AND UPPER (v_altaccnt) = 'ALTACCNT' -- ALTACCNT
|
||
AND UPPER (v_funcdscr) = 'FUNCDSCR' -- FUNCDSCR
|
||
AND UPPER (v_telno) = 'TELNO' -- TELNO
|
||
AND UPPER (v_mobno) = 'MOBNR' -- MOBNR
|
||
AND UPPER (v_faxno) = 'FAXNR' -- FAXNR
|
||
AND UPPER (v_email) = 'EMAIL' -- EMAIL
|
||
AND UPPER (v_initials) = 'INITIALS' -- INITIALS
|
||
AND UPPER (v_prefix) = 'PREFIX' -- PREFIX
|
||
AND UPPER (v_empnum) = 'EMPNUM' -- EMPNUM
|
||
AND UPPER (v_costcent) = 'COSTCENT' -- COSTCENT
|
||
AND UPPER (v_gender) = 'GENDER' -- GENDER
|
||
AND UPPER (v_employeetype) = 'TYPE' -- TYPE
|
||
AND UPPER (v_pandcode) = 'LOCATION' -- LOCATION
|
||
AND UPPER (v_id) = 'ID' -- ID
|
||
AND UPPER (v_grpfname) = 'GRPFNAME' -- GRPFNAME
|
||
AND UPPER (v_grpid) = 'GRPID' -- GRPID
|
||
AND UPPER (v_lastname) = 'LASTNAME' -- LASTNAME
|
||
AND UPPER (v_spousename) = 'SPOUSENAME' -- SPOUSENAME
|
||
AND UPPER (v_spouseprefix) = 'SPOUSEPREFIX' -- SPOUSEPREFIX
|
||
THEN
|
||
header_found := TRUE;
|
||
END IF;
|
||
ELSE
|
||
INSERT INTO uwva_imp_abs (id,
|
||
prefname,
|
||
nickname,
|
||
titel,
|
||
account,
|
||
funcdscr,
|
||
telno,
|
||
mobno,
|
||
faxno,
|
||
email,
|
||
initials,
|
||
prefix,
|
||
empnum, -- personeelsnummer incl. prefix voor werknemertype (zoals in importbestand)
|
||
empnum_noprefix, -- personeelsnummer excl. prefix voor werknemertype (zoals initieel in Facilitor)
|
||
costcent,
|
||
gender,
|
||
employeetype,
|
||
pandcode,
|
||
grpfname,
|
||
grpid,
|
||
lastname,
|
||
spousename,
|
||
spouseprefix)
|
||
VALUES (fac.safe_to_number(v_id), -- flexkenmerk heeft type Numeriek, dus hier vast omzetten (voorloopnullen eraf)
|
||
SUBSTR (v_prefname, 1, 100), -- kan samenvoeging van voor- en achternaam bevatten, dus lekker lang laten
|
||
SUBSTR (v_nickname, 1, 30),
|
||
SUBSTR (v_titel, 1, 15),
|
||
UPPER ( SUBSTR (v_account, 1, 30) ), -- UPPER, dat scheelt executietijd bij update_abs, ivm indexing e.d.
|
||
SUBSTR ( TRIM (v_funcdscr), 1, 60),
|
||
SUBSTR (v_telno, 1, 20),
|
||
SUBSTR (v_mobno, 1, 20),
|
||
SUBSTR (v_faxno, 1, 20),
|
||
SUBSTR (v_email, 1, 200),
|
||
SUBSTR (v_initials, 1, 10),
|
||
SUBSTR (v_prefix, 1, 15),
|
||
UPPER ( SUBSTR (v_empnum, 1, 16) ), -- UPPER, dat scheelt executietijd bij update_abs, ivm indexing e.d.
|
||
UPPER ( SUBSTR (v_empnum, 3, 16) ), -- UPPER, dat scheelt executietijd bij update_abs, ivm indexing e.d.
|
||
LPAD (v_costcent, 6, 0),
|
||
UPPER ( SUBSTR (v_gender, 1, 1) ), -- UPPER, dat scheelt executietijd bij update_abs, ivm indexing e.d.
|
||
UPPER ( SUBSTR (v_empnum, 1, 1) ), -- UPPER, dat scheelt executietijd bij update_abs, ivm indexing e.d.
|
||
SUBSTR (v_pandcode, 1, 6),
|
||
SUBSTR (v_grpfname, 1, 40),
|
||
SUBSTR (v_grpid, 1, 40),
|
||
SUBSTR (v_lastname, 1, 30),
|
||
SUBSTR (v_spousename, 1, 30),
|
||
SUBSTR (v_spouseprefix, 1, 15));
|
||
|
||
v_count_import := v_count_import + 1;
|
||
END IF;
|
||
|
||
-- Elke c_commitbuffer regels committen
|
||
v_buffercount := v_buffercount + 1;
|
||
IF (v_buffercount >= c_commitbuffer)
|
||
THEN
|
||
COMMIT;
|
||
v_buffercount := 0;
|
||
END IF;
|
||
END;
|
||
END LOOP;
|
||
|
||
IF (header_found = FALSE)
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
'Ongeldig importbestand',
|
||
'Geen header of header niet volgens specificatie!'
|
||
);
|
||
ELSE
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Aantal ingelezen regels: '
|
||
|| TO_CHAR (v_count_import),
|
||
''
|
||
);
|
||
END IF;
|
||
|
||
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;
|
||
/
|
||
|
||
-- Functies om werknemertype te bepalen en flexkenmerken op te halen
|
||
CREATE OR REPLACE PACKAGE uwva_abs
|
||
AS
|
||
FUNCTION get_flexval (p_import_key IN NUMBER, perslid_key IN NUMBER, flex_key IN NUMBER) RETURN VARCHAR2;
|
||
FUNCTION get_employeetype (p_import_key IN NUMBER, perslid_key IN NUMBER, employeetype_key IN NUMBER) RETURN VARCHAR2;
|
||
END uwva_abs;
|
||
/
|
||
|
||
CREATE OR REPLACE PACKAGE BODY uwva_abs
|
||
AS
|
||
FUNCTION get_flexval (p_import_key IN NUMBER, perslid_key IN NUMBER, flex_key IN NUMBER) RETURN VARCHAR2
|
||
IS
|
||
vf_flexval VARCHAR(60) := '';
|
||
BEGIN
|
||
SELECT prs_kenmerklink_waarde
|
||
INTO vf_flexval
|
||
FROM prs_kenmerklink
|
||
WHERE prs_link_key = perslid_key
|
||
AND prs_kenmerk_key = flex_key
|
||
AND prs_kenmerklink_verwijder IS NULL;
|
||
|
||
RETURN vf_flexval;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
RETURN '';
|
||
END get_flexval;
|
||
|
||
FUNCTION get_employeetype (p_import_key IN NUMBER, perslid_key IN NUMBER, employeetype_key IN NUMBER) RETURN VARCHAR2
|
||
IS
|
||
vf_employeetype VARCHAR(5) := '';
|
||
BEGIN
|
||
SELECT ud.fac_usrdata_upper
|
||
INTO vf_employeetype
|
||
FROM prs_perslid p,
|
||
prs_kenmerklink km,
|
||
fac_usrdata ud
|
||
WHERE km.prs_link_key = p.prs_perslid_key
|
||
AND km.prs_kenmerk_key = employeetype_key
|
||
AND ud.fac_usrdata_key = km.prs_kenmerklink_waarde
|
||
AND p.prs_perslid_key = perslid_key;
|
||
|
||
RETURN vf_employeetype;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
RETURN '';
|
||
END get_employeetype;
|
||
|
||
END uwva_abs;
|
||
/
|
||
|
||
-- ABS importfunctie, herziene versie volgens UWVA#18115, met aanvullingen voor Vinder (UWVA#19010)
|
||
CREATE OR REPLACE PROCEDURE uwva_update_abs (p_import_key IN NUMBER)
|
||
AS
|
||
-- Constanten
|
||
et_check INTEGER;
|
||
c_functie_onbekend VARCHAR2 (60) := 'Functie onbekend in ABS';
|
||
c_absid_key NUMBER (10) := 1232; -- PROD
|
||
c_grp_default_key NUMBER (10) := 241; -- PROD
|
||
c_employeetype_key NUMBER (10) := 1040; -- Het flexkenmerk dat het employeetype registreert
|
||
-- C(contract), I(intern), E(extern), F(flexplek), D(dummy), K(ketenpartner), W(wonga)
|
||
c_usrtab_employeetype_key NUMBER (10) := 301; -- Dat is een referentiekenmerk naar fac_userdata die we opzoeken
|
||
c_usrtab_pandcodes_key NUMBER (10) := 1; -- Het flexkenmerk dat de pandcode registreert
|
||
c_usrtab_pandcoderegio_key NUMBER (10) := 782;
|
||
c_usrtab_regiovinder_key NUMBER (10) := 783;
|
||
c_usrdata_onbekend_omschr VARCHAR2 (60) := 'ONBEKEND';
|
||
c_usrdata_onbekend_key NUMBER (10) := 4889;
|
||
c_regio_key NUMBER (10) := 1193;
|
||
c_faxnr_key NUMBER (10) := 7;
|
||
c_srtgebouw_default INTEGER := 1;
|
||
c_srtruimte_default INTEGER := 1;
|
||
c_ruimte_code VARCHAR2 (4) := '_000';
|
||
c_ruimte_omschr_default VARCHAR2 (16) := 'Onbekend';
|
||
c_verdieping_omschr_default VARCHAR2 (16) := 'BG';
|
||
c_werkplek_volgnr_default INTEGER := 1;
|
||
c_prs_werkplek_omschrijving VARCHAR2 (16) := 'imp';
|
||
c_def_pandcode_ketenpartner VARCHAR2 (6) := 'GAMSG3';
|
||
-- Voor budgethouders (uit voormalige budgethouderimport)
|
||
c_kpn_maxvariation NUMBER := 0.5; -- Max new/old ratio to prevent undesired changes
|
||
l_oldcount NUMBER;
|
||
l_impcount NUMBER;
|
||
l_impcount_prj NUMBER;
|
||
c_grp_budgh_key NUMBER := 1061;
|
||
c_grp_medewerker_key NUMBER := 1601;
|
||
nrbh1 NUMBER;
|
||
nrbh2 NUMBER;
|
||
|
||
c_maxvariation NUMBER := 20;
|
||
c_commitbuffer NUMBER := 5000; -- om de zoveel committen
|
||
v_buffercount NUMBER := 0;
|
||
v_time VARCHAR2 (50);
|
||
v_deelkey NUMBER (10);
|
||
v_deeloms VARCHAR2 (60);
|
||
v_deelstat VARCHAR2 (60);
|
||
|
||
-- Alle personen in Facilitor die (nog) geen ABS-ID (het unieke ID binnen ABS) hebben.
|
||
-- Deze personen worden gematcht op basis van: 1) account
|
||
-- 2) personeelsnr-met-prefix
|
||
-- 3) personeelsnr-zonder-prefix + type
|
||
-- Hierbij worden alle medewerkertypen (en mensen zonder type) aangepast, dus ook types
|
||
-- die ABS vervolgens niet aanpast(!).
|
||
-- Mensen die niet gevonden kunnen worden, krijgen type 'P'.
|
||
CURSOR c_prs_no_absid
|
||
IS
|
||
SELECT prs_perslid_key, prs_perslid_naam, prs_perslid_oslogin, prs_perslid_nr
|
||
FROM prs_perslid
|
||
WHERE prs_perslid_key IN
|
||
(SELECT prs_perslid_key
|
||
FROM prs_v_aanwezigperslid
|
||
MINUS
|
||
SELECT prs_link_key
|
||
FROM prs_v_aanwezigkenmerklink
|
||
WHERE prs_kenmerk_key = c_absid_key
|
||
AND prs_kenmerklink_waarde IS NOT NULL
|
||
MINUS
|
||
SELECT prs_link_key
|
||
FROM prs_v_aanwezigkenmerklink
|
||
WHERE prs_kenmerk_key = c_employeetype_key
|
||
AND prs_kenmerklink_waarde = 24747) -- X(derden)
|
||
ORDER BY 1;
|
||
|
||
-- Om te kunnen bepalen wat we met mensen moeten doen, moeten we weten welk werknemertype iemand heeft.
|
||
-- Het type in Facilitor kan leeg zijn (sowieso bij de eerste import), dus we proberen dit aan te
|
||
-- vullen vanuit het importbestand. Zodra het type gevuld is, kunnen we kijken of iemand I,E,C,F,D,K,W
|
||
-- is en of hij/zij bijgewerkt/verwijderd moet worden.
|
||
CURSOR c_prs_no_type
|
||
IS
|
||
SELECT prs_perslid_key,
|
||
prs_perslid_naam,
|
||
uwva_abs.get_flexval( p_import_key, prs_perslid_key, c_absid_key ) absid,
|
||
prs_perslid_oslogin,
|
||
prs_perslid_nr
|
||
FROM prs_perslid
|
||
WHERE prs_perslid_key IN
|
||
(SELECT prs_perslid_key
|
||
FROM prs_v_aanwezigperslid
|
||
MINUS
|
||
SELECT prs_link_key
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = c_employeetype_key
|
||
AND prs_kenmerklink_waarde IS NOT NULL)
|
||
;
|
||
|
||
-- Welke personen vervallen uit Facilitor? Zij die niet in het ingelezen bestand voorkomen
|
||
-- en wel van een employeetype zijn dat uit ABS had moeten komen (I, E, C, F, D, K of W dus).
|
||
-- We matchen daarbij op ABS-ID, dus personen zonder ABS-ID worden ook verwijderd.
|
||
CURSOR c_prs_del
|
||
IS
|
||
SELECT pl.prs_perslid_key,
|
||
pl.prs_perslid_naam_full prs_perslid_naam,
|
||
pl.prs_perslid_oslogin,
|
||
pl.prs_perslid_nr,
|
||
pl.absid
|
||
-- Personen in Facilitor waarvoor ABS leidend is (en die dus
|
||
-- in het importbestand zouden moeten voorkomen)
|
||
FROM (SELECT p.*,
|
||
pf.prs_perslid_naam_full,
|
||
km2.prs_kenmerklink_waarde absid
|
||
FROM prs_v_perslid_fullnames_all pf,
|
||
prs_kenmerklink km1,
|
||
prs_kenmerklink km2,
|
||
prs_v_aanwezigperslid p
|
||
WHERE km1.prs_link_key = p.prs_perslid_key
|
||
AND km2.prs_link_key(+) = p.prs_perslid_key
|
||
AND km1.prs_kenmerk_key = c_employeetype_key
|
||
AND km2.prs_kenmerk_key(+) = c_absid_key
|
||
AND fac.safe_to_number (km1.prs_kenmerklink_waarde) IN
|
||
(SELECT fac_usrdata_key
|
||
FROM fac_usrdata
|
||
WHERE fac_usrtab_key = c_usrtab_employeetype_key
|
||
AND fac_usrdata_upper IN
|
||
('C', 'I', 'E', 'F', 'D', 'K', 'W'))
|
||
AND pf.prs_perslid_key = p.prs_perslid_key) pl
|
||
-- Match op ABS-ID
|
||
LEFT OUTER JOIN uwva_imp_abs uia
|
||
ON pl.absid = uia.id
|
||
-- Iedereen die niet matcht (en dus niet in ABS voorkomt)
|
||
WHERE uia.id IS NULL
|
||
;
|
||
|
||
-- Alle personen uit het importbestand met een type waarvoor ABS leidend is (C, I, E, F, D, K of W).
|
||
-- Deze types noem ik hieronder voor het gemak even ABS-types.
|
||
-- Iedere persoon wordt bij het doorlopen van de cursor gematched met Facilitor, als volgt:
|
||
-- * Personen in ABS z<>nder ABS-type worden volledig genegeerd
|
||
-- * Personen in Facilitor met types L, O, P, X (dus g<><67>n ABS-type) worden volledig genegeerd. Om
|
||
-- dergelijke personen wel met ABS te kunnen laten matchen, moeten ze eerst handmatig worden
|
||
-- gemuteerd in Facilitor.
|
||
-- * Matching tussen personen in ABS en Facilitor vindt plaats op basis van het ABS-ID (het ID is
|
||
-- een uniek nummer in ABS, dat middels een flexkenmerk in Facilitor is opgenomen. Dit kenmerk
|
||
-- wordt door bovenstaande cursor (aan)gevuld. NB: matching vind niet in de cursor plaats,
|
||
-- omdat een ABS-ID niet uniek hoeft te zijn in Facilitor en omdat uit te voeren acties afhangen
|
||
-- van het medewerkertype in Facilitor.
|
||
-- * Personen met een ABS-ID (en account of persoonsnummer-met-prefix?) dat /niet uniek/ is, worden /niet/
|
||
-- gemuteerd! Dit om te voorkomen dat de verkeerde persoon bijgewerkt wordt.
|
||
-- * Als een persoon in Facilitor w<>l een ABS-type heeft, maar dit wijkt af van het ABS-type in
|
||
-- ABS, dan wordt het type in Facilitor bijgewerkt (bijv van E naar I).
|
||
CURSOR c_prs_upd
|
||
IS
|
||
SELECT DISTINCT
|
||
--SUBSTR (prefname, 1, 30) prs_perslid_naam,
|
||
TRIM (prefname) prs_perslid_naam,
|
||
nickname prs_perslid_voornaam,
|
||
titel prs_perslid_titel,
|
||
account prs_perslid_oslogin,
|
||
funcdscr prs_srtperslid_omschrijving,
|
||
telno prs_perslid_telefoonnr,
|
||
mobno prs_perslid_mobiel,
|
||
faxno prs_perslid_faxnr,
|
||
email email,
|
||
initials prs_perslid_voorletters,
|
||
DECODE (
|
||
COALESCE (INSTR (prefname, spousename), 0),
|
||
0, TRIM (prefix),
|
||
DECODE (
|
||
INSTR (prefname, lastname),
|
||
0, TRIM (spouseprefix),
|
||
CASE
|
||
WHEN INSTR (prefname, lastname) <= INSTR (prefname, spousename)
|
||
THEN
|
||
TRIM (prefix)
|
||
ELSE
|
||
TRIM (spouseprefix)
|
||
END))
|
||
prs_perslid_tussenvoegsel,
|
||
empnum prs_perslid_nr,
|
||
empnum_noprefix prs_perslid_nr_noprefix,
|
||
costcent prs_afdeling_naam,
|
||
DECODE (gender, 'M', 1, 'V', 0, NULL) prs_perslid_geslacht,
|
||
SUBSTR (empnum, 1, 1) employeetype,
|
||
pandcode,
|
||
id,
|
||
sw.sw_email
|
||
FROM (SELECT *
|
||
FROM uwva_imp_abs
|
||
WHERE SUBSTR (empnum, 1, 1) IN ('C', 'I', 'E', 'F', 'D', 'K', 'W')) ip
|
||
LEFT JOIN -- UWVA#27483: E-mail volgens schrijfwijzer (INSERT-only)!
|
||
uwva_v_email_schrijfwijzer sw
|
||
ON ip.id = sw.imp_id;
|
||
|
||
CURSOR c_prs_wp
|
||
IS
|
||
SELECT hrmloc.prs_perslid_key,
|
||
hrmloc.alg_locatie_key,
|
||
hrmloc.alg_gebouw_key,
|
||
hrmloc.pandcode,
|
||
hrmloc.employeetype,
|
||
hrmloc.aanduiding,
|
||
COALESCE (hrmall.aant, 0) hrmall_wp_aant,
|
||
hrmall.pw_key hrmall_pw_key,
|
||
COALESCE (faclo1.aant, 0) facloc_wp_aant,
|
||
faclo2.pw_key facloc_pw_key,
|
||
faclo2.volgnr facloc_volgnr,
|
||
COALESCE (facall.aant, 0) facall_wp_aant,
|
||
facall.pw_key facall_pw_key
|
||
FROM (SELECT DISTINCT
|
||
p.prs_perslid_key,
|
||
l.alg_locatie_key,
|
||
g.alg_gebouw_key,
|
||
uia.pandcode,
|
||
et.fac_usrdata_upper employeetype,
|
||
p.prs_perslid_naam || '/' || p.prs_perslid_nr || '/' || p.prs_perslid_oslogin || '/' || l.alg_locatie_code
|
||
aanduiding
|
||
FROM prs_v_aanwezigperslid p, -- update HRM-WP van..
|
||
prs_kenmerklink km1, -- ..personen met ABS-ID
|
||
uwva_imp_abs uia, -- (..in import en Facilitor)
|
||
prs_kostenplaats kp, -- ..en HRM-pandcode bestaat
|
||
alg_gebouw g, -- (..in import en Facilitor)
|
||
alg_locatie l,
|
||
prs_kenmerklink km2, -- ..en type C/I/E/F/D/K/W!
|
||
(SELECT *
|
||
FROM fac_usrdata
|
||
WHERE fac_usrtab_key = c_usrtab_employeetype_key
|
||
AND fac_usrdata_upper IN ('C', 'I', 'E', 'F', 'D', 'K', 'W')) et
|
||
WHERE p.prs_perslid_key = km1.prs_link_key
|
||
AND km1.prs_kenmerk_key = c_absid_key
|
||
AND km1.prs_kenmerklink_verwijder IS NULL
|
||
AND km1.prs_kenmerklink_waarde = uia.id
|
||
AND uia.pandcode = kp.prs_kostenplaats_nr
|
||
AND kp.prs_kostenplaats_verwijder IS NULL
|
||
AND kp.prs_kostenplaats_key = g.prs_kostenplaats_key
|
||
AND g.alg_gebouw_verwijder IS NULL
|
||
AND g.alg_locatie_key = l.alg_locatie_key
|
||
AND l.alg_locatie_verwijder IS NULL
|
||
AND p.prs_perslid_key = km2.prs_link_key
|
||
AND km2.prs_kenmerk_key = c_employeetype_key
|
||
AND km2.prs_kenmerklink_verwijder IS NULL
|
||
AND fac.safe_to_number (km2.prs_kenmerklink_waarde) = et.fac_usrdata_key) hrmloc
|
||
LEFT JOIN ( SELECT pw.prs_perslid_key,
|
||
COUNT ( * ) aant, -- >1 -> PW-key irrelevant
|
||
MAX (pw.prs_perslidwerkplek_key) pw_key
|
||
FROM prs_perslidwerkplek pw, prs_werkplek wp
|
||
WHERE pw.prs_perslidwerkplek_volgnr = 2
|
||
AND pw.prs_werkplek_key = wp.prs_werkplek_key
|
||
AND wp.prs_werkplek_virtueel = 0
|
||
GROUP BY pw.prs_perslid_key) hrmall
|
||
ON hrmloc.prs_perslid_key = hrmall.prs_perslid_key
|
||
LEFT JOIN ( SELECT pw.prs_perslid_key,
|
||
g.alg_locatie_key,
|
||
COUNT ( * ) aant -- >1 -> PW/volgnr RELEVANT!
|
||
FROM prs_perslidwerkplek pw, prs_werkplek wp, alg_v_onrgoed_boom ogb, alg_v_aanweziggebouw g
|
||
WHERE pw.prs_werkplek_key = wp.prs_werkplek_key
|
||
AND wp.prs_werkplek_virtueel = 0
|
||
AND wp.prs_alg_ruimte_key = ogb.alg_ruimte_key
|
||
AND ogb.alg_gebouw_key = g.alg_gebouw_key
|
||
GROUP BY pw.prs_perslid_key, g.alg_locatie_key) faclo1
|
||
ON hrmloc.prs_perslid_key = faclo1.prs_perslid_key
|
||
AND hrmloc.alg_locatie_key = faclo1.alg_locatie_key
|
||
LEFT JOIN (SELECT pw.prs_perslid_key,
|
||
g.alg_locatie_key,
|
||
pw.prs_perslidwerkplek_key pw_key, -- laagste/oudste PW!
|
||
pw.prs_perslidwerkplek_volgnr volgnr -- ter info: volgnr
|
||
FROM prs_perslidwerkplek pw, prs_werkplek wp, alg_v_onrgoed_boom ogb, alg_v_aanweziggebouw g
|
||
WHERE pw.prs_werkplek_key = wp.prs_werkplek_key
|
||
AND wp.prs_werkplek_virtueel = 0
|
||
AND wp.prs_alg_ruimte_key = ogb.alg_ruimte_key
|
||
AND ogb.alg_gebouw_key = g.alg_gebouw_key
|
||
AND NOT EXISTS
|
||
(SELECT 1
|
||
FROM prs_perslidwerkplek pw2, prs_werkplek wp2, alg_v_onrgoed_boom ogb2, alg_v_aanweziggebouw g2
|
||
WHERE pw2.prs_perslid_key = pw.prs_perslid_key
|
||
AND pw2.prs_werkplek_key = wp2.prs_werkplek_key
|
||
AND wp2.prs_werkplek_virtueel = 0
|
||
AND wp2.prs_alg_ruimte_key = ogb2.alg_ruimte_key
|
||
AND ogb2.alg_gebouw_key = g2.alg_gebouw_key
|
||
AND g2.alg_locatie_key = g.alg_locatie_key
|
||
AND COALESCE (pw2.prs_perslidwerkplek_volgnr, 10000 + pw2.prs_perslidwerkplek_key) <
|
||
COALESCE (pw.prs_perslidwerkplek_volgnr, 10000 + pw.prs_perslidwerkplek_key)))
|
||
faclo2
|
||
ON hrmloc.prs_perslid_key = faclo2.prs_perslid_key
|
||
AND hrmloc.alg_locatie_key = faclo2.alg_locatie_key
|
||
LEFT JOIN ( SELECT pw.prs_perslid_key,
|
||
COUNT ( * ) aant, -- >1 -> PW-key irrelevant
|
||
MAX (pw.prs_perslidwerkplek_key) pw_key
|
||
FROM prs_perslidwerkplek pw, prs_werkplek wp
|
||
WHERE pw.prs_werkplek_key = wp.prs_werkplek_key
|
||
AND wp.prs_werkplek_virtueel = 0
|
||
GROUP BY pw.prs_perslid_key) facall
|
||
ON hrmloc.prs_perslid_key = facall.prs_perslid_key
|
||
WHERE COALESCE (hrmall.aant, 0) != 1 -- geen/teveel HRM-WP
|
||
OR COALESCE (faclo1.aant, 0) != 1 -- geen/teveel WP op HRM-locatie
|
||
OR COALESCE (hrmall.pw_key, 0) != COALESCE (faclo2.pw_key, 0) -- niet dezelfde?
|
||
;
|
||
|
||
-- Gegeven een persoon (ABS-ID en perslid_key), bepaal op basis van de rollen
|
||
-- die deze persoon heeft, welke authorisatiegroepen verwijderd moeten worden.
|
||
-- UWVA#20021: negeer daarbij de groep 'Budgethouders' (key 1061); daar gaat ABS
|
||
-- niet over. (Die groep wordt onderaan de import door de voormalige budgethouder-
|
||
-- import geregeld.)
|
||
-- UWVA#30547: Ketenpartners (type K) hebben voortaan beperktere rechten dan 'normale'
|
||
-- medewerkers. Daarom alleen andere medewerkertypes in groep 'Medewerker' laten.
|
||
CURSOR c_groep (in_absid VARCHAR2, in_perslid_key NUMBER)
|
||
IS
|
||
SELECT fg.fac_groep_key, fg.fac_groep_omschrijving
|
||
FROM fac_gebruikersgroep fgg, fac_groep fg
|
||
WHERE fgg.fac_groep_key = fg.fac_groep_key
|
||
AND fgg.prs_perslid_key = in_perslid_key
|
||
AND fgg.fac_groep_key != c_grp_default_key
|
||
AND fgg.fac_groep_key != c_grp_budgh_key
|
||
MINUS
|
||
(SELECT DISTINCT fg.fac_groep_key, fg.fac_groep_omschrijving
|
||
FROM uwva_imp_abs uia, uwva_provisioning up, fac_groep fg
|
||
WHERE up.fac_groep_key = fg.fac_groep_key
|
||
AND up.uwva_rol_omschr = uia.grpfname
|
||
AND uia.id = in_absid
|
||
UNION
|
||
SELECT fac_groep_key, fac_groep_omschrijving
|
||
FROM fac_groep fg, prs_kenmerklink km, fac_usrdata ud
|
||
WHERE fg.fac_groep_key = c_grp_medewerker_key
|
||
AND km.prs_link_key = in_perslid_key
|
||
AND km.prs_kenmerk_key = c_employeetype_key
|
||
AND km.prs_kenmerklink_verwijder IS NULL
|
||
AND ud.fac_usrtab_key = c_usrtab_employeetype_key
|
||
AND ud.fac_usrdata_verwijder IS NULL
|
||
AND ud.fac_usrdata_key(+) = fac.safe_to_number(km.prs_kenmerklink_waarde)
|
||
AND ud.fac_usrdata_upper IN ('C', 'I', 'E', 'F', 'D', 'W'));
|
||
|
||
-- Gegeven een persoon (ABS-ID en perslid_key), bepaal op basis van de rollen
|
||
-- die deze persoon heeft, welke authorisatiegroepen nog ontbreken.
|
||
-- UWVA#30547: Ketenpartners (type K) hebben voortaan beperktere rechten dan 'normale'
|
||
-- medewerkers. Daarom alleen de andere medewerkertypes in groep 'Medewerker' zetten.
|
||
CURSOR c_rol (in_absid VARCHAR2, in_perslid_key NUMBER)
|
||
IS
|
||
(SELECT DISTINCT fg.fac_groep_key, fg.fac_groep_omschrijving
|
||
FROM uwva_imp_abs uia, uwva_provisioning up, fac_groep fg
|
||
WHERE up.fac_groep_key = fg.fac_groep_key
|
||
AND up.uwva_rol_omschr = uia.grpfname
|
||
AND uia.id = in_absid
|
||
UNION
|
||
SELECT fac_groep_key, fac_groep_omschrijving
|
||
FROM fac_groep fg, prs_kenmerklink km, fac_usrdata ud
|
||
WHERE fg.fac_groep_key = c_grp_medewerker_key
|
||
AND km.prs_link_key = in_perslid_key
|
||
AND km.prs_kenmerk_key = c_employeetype_key
|
||
AND km.prs_kenmerklink_verwijder IS NULL
|
||
AND ud.fac_usrtab_key = c_usrtab_employeetype_key
|
||
AND ud.fac_usrdata_verwijder IS NULL
|
||
AND ud.fac_usrdata_key(+) = fac.safe_to_number(km.prs_kenmerklink_waarde)
|
||
AND ud.fac_usrdata_upper IN ('C', 'I', 'E', 'F', 'D', 'W'))
|
||
MINUS
|
||
SELECT fg.fac_groep_key, fg.fac_groep_omschrijving
|
||
FROM fac_gebruikersgroep fgg, fac_groep fg
|
||
WHERE fgg.fac_groep_key = fg.fac_groep_key
|
||
AND fgg.prs_perslid_key = in_perslid_key;
|
||
|
||
-- Door ABS niet meer gebruikte rollen, die toch nog in de provisioning-tabel
|
||
-- voorkomen.
|
||
CURSOR c_rol_not_used
|
||
IS
|
||
SELECT DISTINCT uwva_rol_omschr rol FROM uwva_provisioning
|
||
MINUS
|
||
SELECT DISTINCT grpfname rol FROM uwva_imp_abs;
|
||
|
||
CURSOR c_functie
|
||
IS
|
||
SELECT DISTINCT sp.prs_srtperslid_key, uia.funcdscr
|
||
FROM prs_srtperslid sp, uwva_imp_abs uia
|
||
WHERE sp.prs_srtperslid_upper = UPPER (uia.funcdscr)
|
||
AND sp.prs_srtperslid_omschrijving != uia.funcdscr;
|
||
|
||
-- Personen met ABS-type waarvan het flexveld 'Regio' afwijkt van het
|
||
-- gebouw waar de zitten, of die nog geen flexveld hebben.
|
||
CURSOR c_prs_regio
|
||
IS
|
||
SELECT *
|
||
FROM (SELECT hpw.prs_perslid_key,
|
||
g.alg_gebouw_code,
|
||
COALESCE (rv.fac_usrdata_key, c_usrdata_onbekend_key)
|
||
fac_usrdata_key,
|
||
COALESCE (rv.fac_usrdata_omschr, c_usrdata_onbekend_omschr)
|
||
fac_usrdata_omschr
|
||
FROM prs_v_hoofdperslidwerkplek hpw,
|
||
prs_werkplek w,
|
||
alg_v_onrgoed_boom ogb,
|
||
alg_gebouw g,
|
||
fac_usrdata pcr,
|
||
fac_usrdata rv,
|
||
prs_kenmerklink emp
|
||
WHERE w.prs_werkplek_key = hpw.prs_werkplek_key
|
||
AND w.prs_alg_ruimte_key = ogb.alg_ruimte_key
|
||
AND g.alg_gebouw_key = ogb.alg_gebouw_key
|
||
AND pcr.fac_usrdata_code(+) = g.alg_gebouw_code
|
||
AND rv.fac_usrdata_omschr(+) = pcr.fac_usrdata_omschr
|
||
AND pcr.fac_usrtab_key(+) = c_usrtab_pandcoderegio_key
|
||
AND rv.fac_usrtab_key(+) = c_usrtab_regiovinder_key
|
||
AND emp.prs_link_key = hpw.prs_perslid_key
|
||
AND emp.prs_kenmerk_key = c_employeetype_key
|
||
AND fac.safe_to_number (emp.prs_kenmerklink_waarde) IN
|
||
(SELECT fac_usrdata_key
|
||
FROM fac_usrdata
|
||
WHERE fac_usrtab_key = c_usrtab_employeetype_key
|
||
AND fac_usrdata_upper IN
|
||
('C', 'I', 'E', 'F', 'D', 'K', 'W'))) wprv
|
||
LEFT OUTER JOIN
|
||
(SELECT prs_link_key, prs_kenmerklink_key, prs_kenmerklink_waarde
|
||
FROM prs_kenmerklink kl
|
||
WHERE prs_kenmerklink_verwijder IS NULL
|
||
AND kl.prs_kenmerk_key = c_regio_key) km
|
||
ON km.prs_link_key = wprv.prs_perslid_key
|
||
WHERE km.prs_kenmerklink_waarde != wprv.fac_usrdata_key
|
||
OR km.prs_kenmerklink_waarde IS NULL;
|
||
|
||
-- UWVA#23788: (tijdelijke) logging die de pandcodes in het importbestand uitlijst,
|
||
-- waarvoor geen kostenplaats danwel gebouw gevonden kan worden, met het aantal personen.
|
||
CURSOR c_pandcode_onbekend
|
||
IS
|
||
SELECT pandcode,
|
||
prs_kostenplaats_nr,
|
||
COUNT (account) aantal
|
||
FROM (SELECT DISTINCT account,
|
||
uia.pandcode,
|
||
kp.prs_kostenplaats_nr
|
||
FROM uwva_imp_abs uia,
|
||
prs_v_aanwezigkostenplaats kp,
|
||
alg_v_aanweziggebouw g
|
||
WHERE uia.pandcode IS NOT NULL
|
||
AND uia.pandcode = kp.prs_kostenplaats_nr(+)
|
||
AND kp.prs_kostenplaats_key = g.prs_kostenplaats_key(+)
|
||
AND g.alg_gebouw_key IS NULL)
|
||
GROUP BY pandcode, prs_kostenplaats_nr
|
||
ORDER BY 1;
|
||
|
||
-- UWVA#20021: voormalige budgethouderimport
|
||
-- Record for update: relatie kostenplaats en persoon (evt leeg) kan worden gelegd.
|
||
CURSOR c_budgethouder
|
||
IS
|
||
SELECT kpn.prs_kostenplaats_key,
|
||
kpn.prs_kostenplaats_nr,
|
||
p.prs_perslid_key,
|
||
imp.perslid_nr imp_perslid_nr,
|
||
imp.mandaatcode imp_mandaatcode
|
||
FROM uwva_imp_kpn imp,
|
||
prs_v_aanwezigkostenplaats kpn,
|
||
prs_v_aanwezigperslid p
|
||
WHERE imp.afdeling = kpn.prs_kostenplaats_nr
|
||
AND p.prs_perslid_nr(+) = imp.perslid_nr
|
||
ORDER BY 2;
|
||
|
||
-- Onbekende kostenplaats
|
||
CURSOR c_kpn_onbekend
|
||
IS
|
||
SELECT kpn.prs_kostenplaats_key,
|
||
imp.afdeling prs_kostenplaats_nr,
|
||
imp.perslid_nr prs_perslid_nr
|
||
FROM uwva_imp_kpn imp,
|
||
prs_v_aanwezigkostenplaats kpn
|
||
WHERE imp.afdeling = kpn.prs_kostenplaats_nr(+)
|
||
AND kpn.prs_kostenplaats_nr IS NULL
|
||
AND imp.afdeling IS NOT NULL
|
||
AND imp.status = 'A'
|
||
ORDER BY 2;
|
||
|
||
v_prs_omschr VARCHAR2 (150);
|
||
v_perslid prs_perslid%ROWTYPE;
|
||
v_perslid_key NUMBER (10);
|
||
v_perslid_type VARCHAR2 (10);
|
||
v_prs_key_cnt NUMBER (10);
|
||
v_srtperslid_key NUMBER (10);
|
||
v_srtperslid_db_oms VARCHAR2 (60);
|
||
v_afdeling_key NUMBER (10);
|
||
v_profiel_key NUMBER (10);
|
||
v_profiel_omschr VARCHAR2 (30);
|
||
v_limiet NUMBER (10);
|
||
v_groep_key NUMBER (10);
|
||
v_groep_omschr VARCHAR2 (30);
|
||
|
||
v_locatie_key NUMBER (10);
|
||
v_gebouw_key NUMBER (10);
|
||
v_verdieping_key NUMBER (10);
|
||
v_ruimte_key NUMBER (10);
|
||
v_ruimte_nr VARCHAR2 (10);
|
||
v_werkplek_key NUMBER (10);
|
||
v_new_werkplek_key NUMBER (10);
|
||
v_werkplek_volgnr NUMBER (10);
|
||
v_pwp_key NUMBER (10);
|
||
v_pwp_volgnr NUMBER (10);
|
||
v_gebouw_code VARCHAR2 (10);
|
||
v_srtperslid_omschr VARCHAR (60);
|
||
v_srtperslid_upper VARCHAR (60);
|
||
recl c_prs_no_type%ROWTYPE;
|
||
rec_id c_prs_no_absid%ROWTYPE;
|
||
rec_del c_prs_del%ROWTYPE;
|
||
rec_upd c_prs_upd%ROWTYPE;
|
||
rec_groep c_groep%ROWTYPE;
|
||
rec_rol c_rol%ROWTYPE;
|
||
rec_rnu c_rol_not_used%ROWTYPE;
|
||
rec_func c_functie%ROWTYPE;
|
||
rec_regio c_prs_regio%ROWTYPE;
|
||
rec_pcon c_pandcode_onbekend%ROWTYPE;
|
||
rec_budgh c_budgethouder%ROWTYPE;
|
||
rec_kpnon c_kpn_onbekend%ROWTYPE;
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (250);
|
||
v_errormsg VARCHAR2 (1024);
|
||
v_errorhint VARCHAR2 (1024);
|
||
v_action VARCHAR (10);
|
||
v_count NUMBER (10);
|
||
v_count_regio_edit NUMBER (10);
|
||
v_count_regio_add NUMBER (10);
|
||
v_update BOOLEAN;
|
||
v_aktie VARCHAR (10);
|
||
v_prsMatched BOOLEAN;
|
||
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;
|
||
o_afdeling_key NUMBER (10); -- huidige (oude) afdeling
|
||
l_nrkps NUMBER;
|
||
v_nr_werkplek NUMBER;
|
||
v_current_locatie_key NUMBER;
|
||
v_new_locatie_key NUMBER;
|
||
v_new_gebouw_key NUMBER;
|
||
v_prs_kenmerklink_key NUMBER;
|
||
v_imp_account VARCHAR2 (30);
|
||
v_imp_empnum VARCHAR2 (16);
|
||
v_imp_prefname VARCHAR2 (30);
|
||
v_imp_employeetype VARCHAR2 (30);
|
||
v_imp_absid NUMBER;
|
||
v_emptype VARCHAR2 (5);
|
||
v_validtype BOOLEAN;
|
||
v_budgh_key NUMBER;
|
||
v_achternaam VARCHAR2 (60);
|
||
|
||
PROCEDURE uwva_set_werknemertype(perslid_key IN NUMBER, perslid_naam IN VARCHAR2, werknemertype IN VARCHAR2, logstr IN VARCHAR2, logtype in VARCHAR2)
|
||
AS
|
||
BEGIN
|
||
-- Kijk of meegegeven werknemertype in Facilitor bestaat
|
||
SELECT COUNT (*)
|
||
INTO v_count
|
||
FROM fac_usrdata
|
||
WHERE fac_usrtab_key = c_usrtab_employeetype_key
|
||
AND fac_usrdata_upper = werknemertype;
|
||
|
||
IF (v_count = 0)
|
||
THEN
|
||
-- Geen bekend werknemertype --> ERROR
|
||
v_validtype := FALSE;
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
logstr || '. Naam: ' || perslid_naam,
|
||
'Onbekend werknemertype "' || werknemertype || '"! Graag toevoegen in Eigen tabel!');
|
||
ELSE
|
||
v_validtype := TRUE;
|
||
END IF;
|
||
|
||
-- Kijk of er al een werknemertype is gedefinieerd voor perslid
|
||
SELECT COUNT(*)
|
||
INTO v_count
|
||
FROM prs_perslid p,
|
||
prs_kenmerklink km
|
||
WHERE p.prs_perslid_key = km.prs_link_key
|
||
AND km.prs_kenmerk_key = c_employeetype_key
|
||
AND p.prs_perslid_key = perslid_key;
|
||
|
||
IF (v_count = 0)
|
||
THEN
|
||
---- Nog geen type --> maak aan (waarde: werknemertype)
|
||
INSERT INTO prs_kenmerklink
|
||
(prs_link_key,
|
||
prs_kenmerklink_niveau,
|
||
prs_kenmerk_key,
|
||
prs_kenmerklink_waarde
|
||
)
|
||
VALUES (perslid_key,
|
||
'P',
|
||
c_employeetype_key,
|
||
(SELECT fac_usrdata_key
|
||
FROM fac_usrdata
|
||
WHERE fac_usrtab_key = c_usrtab_employeetype_key
|
||
AND fac_usrdata_upper = werknemertype)
|
||
);
|
||
|
||
IF v_validtype
|
||
AND logstr IS NOT NULL AND logtype IS NOT NULL
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
UPPER (logtype),
|
||
logstr || '. Naam: ' || perslid_naam,
|
||
'Type ' || werknemertype || ' aangemaakt');
|
||
END IF;
|
||
ELSE
|
||
-- Al een type gedefinieerd --> dat wordt dan werknemertype
|
||
SELECT prs_kenmerklink_key
|
||
INTO v_prs_kenmerklink_key
|
||
FROM prs_perslid p,
|
||
prs_kenmerklink km
|
||
WHERE p.prs_perslid_key = km.prs_link_key
|
||
AND km.prs_kenmerk_key = c_employeetype_key
|
||
AND p.prs_perslid_key = perslid_key;
|
||
|
||
UPDATE prs_kenmerklink
|
||
SET prs_kenmerklink_waarde = (SELECT fac_usrdata_key
|
||
FROM fac_usrdata
|
||
WHERE fac_usrtab_key = c_usrtab_employeetype_key
|
||
AND fac_usrdata_upper = werknemertype)
|
||
WHERE prs_kenmerklink_key = v_prs_kenmerklink_key;
|
||
|
||
IF v_validtype
|
||
AND logstr IS NOT NULL AND logtype IS NOT NULL
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
UPPER (logtype),
|
||
logstr || '. Naam: ' || perslid_naam,
|
||
'Type gewijzigd naar ' || werknemertype);
|
||
END IF;
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
perslid_naam || ':',
|
||
'Fout bij toevoegen/wijzigen werknemertype');
|
||
END;
|
||
|
||
PROCEDURE uwva_set_flexveld(perslid_key IN NUMBER, perslid_naam IN VARCHAR2, flexkey IN NUMBER, flexval IN VARCHAR2)
|
||
AS
|
||
BEGIN
|
||
v_errormsg := perslid_naam || ': Fout bij toevoegen/wijzigen flexveld (key/waarde: '
|
||
|| flexkey || '/' || flexval || ')';
|
||
|
||
-- Bestaat flexkenmerk?
|
||
SELECT COUNT(*)
|
||
INTO v_count
|
||
FROM prs_kenmerk
|
||
WHERE prs_kenmerk_key = flexkey;
|
||
|
||
IF (v_count = 0)
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
'Onbekend flexkenmerk met key ' || flexkey,
|
||
'Graag aanmaken');
|
||
RETURN;
|
||
END IF;
|
||
|
||
-- Kijk of flexveld al is gedefinieerd voor perslid
|
||
SELECT COUNT(*)
|
||
INTO v_count
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = flexkey
|
||
AND prs_link_key = perslid_key;
|
||
|
||
IF (v_count = 0)
|
||
THEN
|
||
BEGIN
|
||
v_errormsg := perslid_naam || ': Fout bij toevoegen flexveld (key/waarde: '
|
||
|| flexkey || '/' || flexval || ')';
|
||
-- Flexveld nog niet gevuld --> maak aan (waarde: flexval)
|
||
INSERT INTO prs_kenmerklink
|
||
(prs_link_key,
|
||
prs_kenmerklink_niveau,
|
||
prs_kenmerk_key,
|
||
prs_kenmerklink_waarde
|
||
)
|
||
VALUES (perslid_key,
|
||
'P',
|
||
flexkey,
|
||
flexval
|
||
);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errorhint := 'ins_flex: (ORACLE error '
|
||
|| oracle_err_num
|
||
|| '/'
|
||
|| oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_errormsg,
|
||
v_errorhint);
|
||
END;
|
||
ELSE
|
||
BEGIN
|
||
v_errormsg := perslid_naam || ': Fout bij wijzigen flexveld (key/waarde: '
|
||
|| flexkey || '/' || flexval || ')';
|
||
-- Flexveld al gevuld --> overschrijven
|
||
SELECT prs_kenmerklink_key
|
||
INTO v_prs_kenmerklink_key
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = flexkey
|
||
AND prs_link_key = perslid_key;
|
||
|
||
UPDATE prs_kenmerklink
|
||
SET prs_kenmerklink_waarde = flexval
|
||
WHERE prs_kenmerklink_key = v_prs_kenmerklink_key;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errorhint := 'upd_flex: (ORACLE error '
|
||
|| oracle_err_num
|
||
|| '/'
|
||
|| oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_errormsg,
|
||
v_errorhint);
|
||
END;
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 130);
|
||
v_errorhint := 'set_flex: (ORACLE error '
|
||
|| oracle_err_num
|
||
|| '/'
|
||
|| oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_errormsg,
|
||
v_errorhint);
|
||
END;
|
||
|
||
PROCEDURE uwva_upsert_wp(in_perslid_key IN NUMBER,
|
||
in_ruimte_key IN NUMBER, in_ruimte_nr IN VARCHAR2,
|
||
in_wp_oud_key IN NUMBER)
|
||
AS
|
||
BEGIN
|
||
-- Persoon krijgt wp op fictieve of echte ruimte.
|
||
-- (Nieuwe werkplek aanmaken, eventuele oude wp daarna verwijderen)
|
||
v_errormsg := 'Fout bij bepalen volgnummer nieuwe werkplek in ruimte ' || in_ruimte_nr;
|
||
|
||
-- UWVA#21256: De werkplekvolgnummers worden hoger dan past in prs_werkplek_volgnr.
|
||
-- Voortaan dus het laagste beschikbare volgnummer gebruiken.
|
||
SELECT COALESCE (MIN (pw1.prs_werkplek_volgnr), 0) + 1
|
||
INTO v_werkplek_volgnr
|
||
FROM prs_werkplek pw1
|
||
WHERE pw1.prs_alg_ruimte_key = in_ruimte_key
|
||
AND NOT EXISTS
|
||
(SELECT 1
|
||
FROM prs_werkplek pw2
|
||
WHERE pw2.prs_alg_ruimte_key = pw1.prs_alg_ruimte_key
|
||
AND pw2.prs_werkplek_volgnr = pw1.prs_werkplek_volgnr + 1);
|
||
|
||
v_errormsg := 'Fout bij toevoegen nieuwe werkplek in ruimte ' || in_ruimte_nr;
|
||
INSERT INTO prs_werkplek (prs_werkplek_module,
|
||
prs_werkplek_volgnr,
|
||
prs_werkplek_omschrijving,
|
||
prs_werkplek_virtueel,
|
||
prs_alg_ruimte_key)
|
||
VALUES ('PRR',
|
||
v_werkplek_volgnr,
|
||
'',
|
||
0,
|
||
in_ruimte_key)
|
||
RETURNING prs_werkplek_key
|
||
INTO v_new_werkplek_key;
|
||
--fac.imp_writelog (p_import_key, 'D',
|
||
-- 'in_perslid_key/in_ruimte_key/in_wp_oud_key'
|
||
-- || '/' || in_perslid_key
|
||
-- || '/' || in_ruimte_key
|
||
-- || '/' || in_wp_oud_key,
|
||
-- 'upsert: Nieuwe wp #'||v_new_werkplek_key||' ('
|
||
-- ||'PRR, '||v_werkplek_volgnr||', ,0 , '||in_ruimte_key||')'
|
||
-- );
|
||
|
||
--UWVA#21256: ABS-werkplek heeft /altijd/ volgnr 2. (Da's hoger dan de Vinder-import (die heeft 3 en
|
||
-- 4 gebruikt), maar laat volgnr 1 over om met de hand een hoofdwerkplek in te stellen
|
||
IF (in_wp_oud_key IS NOT NULL)
|
||
THEN
|
||
-- Update
|
||
v_errormsg := 'Fout bij verplaatsen persoon naar nieuwe werkplek in ruimte ' || in_ruimte_nr;
|
||
UPDATE prs_perslidwerkplek
|
||
SET prs_perslidwerkplek_volgnr = 2,
|
||
prs_werkplek_key = v_new_werkplek_key
|
||
WHERE prs_werkplek_key = in_wp_oud_key
|
||
AND prs_perslid_key = in_perslid_key;
|
||
|
||
v_errormsg := 'Fout bij verwijderen oude werkplek (' || in_wp_oud_key || ')';
|
||
DELETE FROM prs_werkplek
|
||
WHERE prs_werkplek_key = in_wp_oud_key;
|
||
--fac.imp_writelog (p_import_key, 'D',
|
||
-- 'in_perslid_key/in_ruimte_key/in_wp_oud_key'
|
||
-- || '/' || in_perslid_key
|
||
-- || '/' || in_ruimte_key
|
||
-- || '/' || in_wp_oud_key,
|
||
-- 'upsert: pwp bijgewerkt ('
|
||
-- ||'volgnr='||v_pwp_volgnr||', wp_key='||v_new_werkplek_key||'), '
|
||
-- || 'wp #'||in_wp_oud_key||' verwijderd'
|
||
-- );
|
||
ELSE
|
||
-- Insert
|
||
v_errormsg := 'Fout bij koppelen persoon aan nieuwe werkplek in ruimte ' || in_ruimte_nr || '.';
|
||
INSERT INTO prs_perslidwerkplek ( prs_perslid_key,
|
||
prs_werkplek_key,
|
||
prs_perslidwerkplek_bezetting,
|
||
prs_perslidwerkplek_volgnr)
|
||
VALUES (in_perslid_key, v_new_werkplek_key, 100, 2);
|
||
--fac.imp_writelog (p_import_key, 'D',
|
||
-- 'in_perslid_key/in_ruimte_key/in_wp_oud_key'
|
||
-- || '/' || in_perslid_key
|
||
-- || '/' || in_ruimte_key
|
||
-- || '/' || in_wp_oud_key,
|
||
-- 'upsert: Nieuwe pwp ('
|
||
-- ||in_perslid_key||', '||v_new_werkplek_key||', 100, '||v_pwp_volgnr||')'
|
||
-- );
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 130);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_errormsg
|
||
|| ' set_wp: (ORACLE error ' || oracle_err_num
|
||
|| '/' || oracle_err_mes
|
||
|| ')',
|
||
v_errorhint
|
||
|| '/' || in_perslid_key
|
||
|| '/' || in_ruimte_key
|
||
|| '/' || in_wp_oud_key
|
||
);
|
||
END;
|
||
|
||
BEGIN
|
||
-- Rapportlogs van meer dan een maand geleden wegdoen
|
||
|
||
-- Klopt de eigen tabel Werknemertype?
|
||
SELECT COUNT (fac_usrdata_key)
|
||
INTO et_check
|
||
FROM fac_usrdata
|
||
WHERE fac_usrtab_key = c_usrtab_employeetype_key
|
||
AND fac_usrdata_upper IN ('C', 'I', 'E', 'F', 'D', 'K', 'W');
|
||
|
||
IF et_check != 6
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
'Gebruikerstabel werknemertype is onvolledig',
|
||
'$Revision$'
|
||
);
|
||
END IF;
|
||
|
||
-- Init
|
||
SELECT MAX (fac_module_version)
|
||
INTO currentversion
|
||
FROM fac_module;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Facilitor ABS import versie '
|
||
|| currentversion,
|
||
'$Revision$'
|
||
);
|
||
|
||
-- Aantal potentieel matchbare personen in importbestand
|
||
SELECT COUNT ( DISTINCT(id) )
|
||
INTO v_perslid_count_imp
|
||
FROM uwva_imp_abs
|
||
WHERE SUBSTR(empnum, 1, 1) IN ('C', 'I', 'E', 'F', 'D', 'K', 'W');
|
||
|
||
-- Aantal actieve, potentieel matchbare personen in Facilitor
|
||
-- (dus m<>t account en/of personeelsnummer en met een juist werknemertype)
|
||
-- (DECODE ivm vermijden deling door 0)
|
||
SELECT DECODE (COUNT (*), 0, 1, COUNT (*))
|
||
INTO v_perslid_count_fclt
|
||
FROM prs_perslid
|
||
WHERE ( prs_perslid_nr IS NOT NULL
|
||
OR prs_perslid_oslogin IS NOT NULL)
|
||
AND prs_perslid_verwijder IS NULL
|
||
AND uwva_abs.get_employeetype(p_import_key, prs_perslid_key, c_employeetype_key) IN ('C', 'I', 'E', 'F', 'D', 'K', 'W');
|
||
|
||
-- v_perslid_count_fclt is heel klein (<<100) bij de initiele situatie, omdat dan nog vrijwel niemand een type heeft.
|
||
IF ( v_perslid_count_fclt < 100 )
|
||
THEN
|
||
-- Check of het importbestand wel geldig is, om narigheden te voorkomen.
|
||
SELECT COUNT(*)
|
||
INTO v_count
|
||
FROM imp_log
|
||
WHERE imp_log_applicatie = 'ABS'
|
||
AND imp_log_omschrijving = 'Ongeldig importbestand';
|
||
|
||
IF (v_count > 0)
|
||
THEN
|
||
fac.imp_writelog (p_import_key, 'S',
|
||
'Ongeldig importbestand bij initi<74>le import',
|
||
'Verwerking wordt afgebroken.'
|
||
);
|
||
RETURN;
|
||
ELSE
|
||
fac.imp_writelog (p_import_key, 'S',
|
||
'Initi<EFBFBD>le import',
|
||
'Controle aantal personen wordt overgeslagen.'
|
||
);
|
||
END IF;
|
||
ELSE
|
||
IF ( (100 * ABS (v_perslid_count_imp - v_perslid_count_fclt) / v_perslid_count_fclt ) > c_maxvariation )
|
||
THEN
|
||
fac.imp_writelog (p_import_key, 'W',
|
||
'Het verschil tussen de actieve personen ('
|
||
|| TO_CHAR (v_perslid_count_fclt)
|
||
|| ') en te importeren aantallen ('
|
||
|| TO_CHAR (v_perslid_count_imp)
|
||
|| ') is te groot',
|
||
'Zie Specificaties: De afwijking is teveel en bedraagt '
|
||
|| TO_CHAR (100 * ABS (v_perslid_count_fclt - v_perslid_count_imp) / v_perslid_count_fclt, '9999999D9')
|
||
|| '%.'
|
||
);
|
||
RETURN;
|
||
END IF;
|
||
END IF;
|
||
|
||
-- *** Personen zonder ABS-ID *****************************************************************
|
||
FOR rec_id IN c_prs_no_absid
|
||
LOOP
|
||
BEGIN
|
||
v_errormsg := 'Personen zonder ABS-ID';
|
||
|
||
v_prs_omschr := 'Achternaam/persoonsnr/login: '
|
||
|| rec_id.prs_perslid_naam
|
||
|| '/' || rec_id.prs_perslid_nr
|
||
|| '/' || rec_id.prs_perslid_oslogin;
|
||
|
||
IF (rec_id.prs_perslid_oslogin IS NULL AND rec_id.prs_perslid_nr IS NULL)
|
||
THEN
|
||
-- Geen account en personeelsnummer --> probleemgeval --> werknemertype = P
|
||
v_errormsg := 'Probleemgevallen';
|
||
--uwva_set_werknemertype(rec_id.prs_perslid_key,
|
||
-- rec_id.prs_perslid_naam || '/' || rec_id.prs_perslid_nr,
|
||
-- 'P',
|
||
-- 'Probleemgeval: geen account en personeelsnummer',
|
||
-- 'W');
|
||
fac.imp_writelog (p_import_key, 'W', 'ABS-ID: geen account en geen persoonsnr', v_prs_omschr);
|
||
ELSE
|
||
-- Account en/of personeelsnummer --> probeer te matchen
|
||
v_errorhint := 'Bepalen uniek persoon. ' || v_prs_omschr;
|
||
-- Komt account van deze persoon uniek voor in het importbestand?
|
||
-- Een persoon kan vaker in het importbestandvoorkomen, met alle gegevens behalve de rol hetzelfde.
|
||
-- Daarom SELECT DISTINCT op alle gegevens behalve rol!
|
||
SELECT COUNT(*)
|
||
INTO v_count
|
||
FROM (SELECT DISTINCT account, empnum, prefname, id
|
||
FROM uwva_imp_abs
|
||
WHERE account = rec_id.prs_perslid_oslogin);
|
||
|
||
-- Uniek account gevonden --> update persoon
|
||
IF (v_count = 1)
|
||
THEN
|
||
v_errorhint := 'Update ID (adhv account)';
|
||
SELECT DISTINCT account, empnum, prefname, id
|
||
INTO v_imp_account, v_imp_empnum, v_imp_prefname, v_imp_absid
|
||
FROM uwva_imp_abs
|
||
WHERE account = rec_id.prs_perslid_oslogin;
|
||
|
||
-- ABS-ID
|
||
uwva_set_flexveld(rec_id.prs_perslid_key, rec_id.prs_perslid_naam, c_absid_key, v_imp_absid);
|
||
|
||
fac.imp_writelog (p_import_key, 'I', 'ABS-ID ' || v_imp_absid || ' gevuld obv account', v_prs_omschr);
|
||
-- Geen account gevonden --> Komt personeelsnummer uniek voor in het importbestand?
|
||
ELSIF (v_count = 0)
|
||
THEN
|
||
SELECT COUNT(*)
|
||
INTO v_count
|
||
FROM (SELECT DISTINCT account, empnum, prefname, id
|
||
FROM uwva_imp_abs
|
||
WHERE empnum = rec_id.prs_perslid_nr OR empnum_noprefix = rec_id.prs_perslid_nr);
|
||
|
||
-- Uniek personeelsnummer gevonden --> is dat nummer ook uniek in Facilitor?
|
||
IF (v_count = 1)
|
||
THEN
|
||
SELECT COUNT(*)
|
||
INTO v_count
|
||
FROM prs_v_aanwezigperslid
|
||
WHERE prs_perslid_nr = rec_id.prs_perslid_nr;
|
||
|
||
-- Uniek personeelsnummer in zowel importbestand als Facilitor. It's a match! --> update persoon
|
||
IF (v_count = 1)
|
||
THEN
|
||
v_errorhint := 'Update ID (adhv pers#)';
|
||
SELECT DISTINCT account, empnum, prefname, id
|
||
INTO v_imp_account, v_imp_empnum, v_imp_prefname, v_imp_absid
|
||
FROM uwva_imp_abs
|
||
WHERE empnum = rec_id.prs_perslid_nr OR empnum_noprefix = rec_id.prs_perslid_nr;
|
||
|
||
-- ABS-ID
|
||
uwva_set_flexveld(rec_id.prs_perslid_key, rec_id.prs_perslid_naam, c_absid_key, v_imp_absid);
|
||
|
||
fac.imp_writelog (p_import_key, 'I', 'ABS-ID ' || v_imp_absid || ' gevuld obv personeelsnr', v_prs_omschr);
|
||
ELSE
|
||
fac.imp_writelog (p_import_key, 'W', 'ABS-ID: geen match', v_prs_omschr);
|
||
END IF;
|
||
END IF;
|
||
END IF;
|
||
END IF;
|
||
|
||
-- Elke c_commitbuffer regels committen
|
||
v_buffercount := v_buffercount + 1;
|
||
IF (v_buffercount >= c_commitbuffer)
|
||
THEN
|
||
COMMIT;
|
||
v_buffercount := 0;
|
||
END IF;
|
||
END;
|
||
END LOOP;
|
||
|
||
COMMIT;
|
||
|
||
-- *** Personen zonder werknemertype *************************************************************
|
||
-- Probeer werknemertype van mensen zonder type te achterhalen en updaten
|
||
-- Matching: op ABS-ID.
|
||
-- Personen in de database z<>nder ABS-ID, kunnen niet gematcht worden met de personen in het
|
||
-- importbestand. Deze personen dienen werknemertype P te krijgen, zodat ze handmatig nagelopen
|
||
-- kunnen worden.
|
||
-- (Personen z<>nder ABS-ID, zijn <20>f al van een type dat nagekeken moet worden (D, L, O, P, U, X, Z),
|
||
-- <20>f van type I, E, C, F of W(?) zodat ze automatisch verwijderd worden.)
|
||
FOR recl IN c_prs_no_type
|
||
LOOP
|
||
BEGIN
|
||
v_errormsg := 'Personen zonder type';
|
||
|
||
v_prs_omschr := 'Achternaam/persoonsnr/login/ABS-ID: '
|
||
|| recl.prs_perslid_naam
|
||
|| '/' || recl.prs_perslid_nr
|
||
|| '/' || recl.prs_perslid_oslogin
|
||
|| '/' || recl.absid;
|
||
|
||
IF (recl.absid IS NULL)
|
||
THEN
|
||
-- Geen ABS-ID --> probleemgeval --> werknemertype = P
|
||
v_errormsg := 'Probleemgevallen';
|
||
uwva_set_werknemertype(recl.prs_perslid_key,
|
||
recl.prs_perslid_naam || '/' || recl.prs_perslid_nr,
|
||
'P',
|
||
'Probleemgeval: geen ABS-ID',
|
||
'W');
|
||
ELSE
|
||
-- ABS-ID --> probeer te matchen
|
||
v_errorhint := 'Bepalen uniek persoon. ' || v_prs_omschr;
|
||
-- Komt ABS-ID van deze persoon uniek voor in het importbestand?
|
||
-- Een persoon kan vaker in het importbestandvoorkomen, met alle gegevens behalve de rol hetzelfde.
|
||
-- Daarom SELECT DISTINCT op ABS-ID en (omdat die ook uniek moet zijn) accountnaam!
|
||
SELECT COUNT(*)
|
||
INTO v_count
|
||
FROM (SELECT DISTINCT id,
|
||
account
|
||
FROM uwva_imp_abs
|
||
WHERE id = recl.absid );
|
||
|
||
-- Uniek ABS-ID gevonden --> is dat nummer ook uniek in Facilitor?
|
||
IF (v_count = 1)
|
||
THEN
|
||
SELECT COUNT(*)
|
||
INTO v_count
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = c_absid_key
|
||
AND prs_kenmerklink_waarde = recl.absid
|
||
AND prs_kenmerklink_verwijder IS NULL;
|
||
|
||
-- Uniek ABS-ID in zowel importbestand als Facilitor. It's a match! --> update persoon
|
||
IF (v_count = 1)
|
||
THEN
|
||
v_errorhint := 'Update type';
|
||
SELECT DISTINCT id,
|
||
employeetype
|
||
INTO v_imp_absid, v_imp_employeetype
|
||
FROM uwva_imp_abs
|
||
WHERE id = recl.absid;
|
||
|
||
-- Werknemertype
|
||
uwva_set_werknemertype(recl.prs_perslid_key,
|
||
recl.prs_perslid_naam || '/' || recl.prs_perslid_nr,
|
||
v_imp_employeetype,
|
||
v_errorhint,
|
||
'I');
|
||
|
||
-- Geen uniek ABS-ID in Facilitor! Kan dus niet zeker weten of gegevens in importbestand
|
||
-- wel voor deze persoon zijn... --> ERROR
|
||
ELSE
|
||
v_errorhint := 'Ander persoon met hetzelfde ABS-ID in Facilitor';
|
||
uwva_set_werknemertype(recl.prs_perslid_key,
|
||
recl.prs_perslid_naam || '/' || recl.prs_perslid_nr,
|
||
'P',
|
||
v_errorhint,
|
||
'W');
|
||
END IF;
|
||
|
||
-- ABS-ID niet gevonden --> Persoon komt niet in import voor, dus type kan niet bepaald worden --> type 'O'
|
||
ELSIF (v_count = 0)
|
||
THEN
|
||
v_errorhint := 'Persoon niet gevonden in importbestand';
|
||
uwva_set_werknemertype(recl.prs_perslid_key,
|
||
recl.prs_perslid_naam || '/' || recl.prs_perslid_nr,
|
||
'O',
|
||
v_errorhint || ', account/ABS-ID: '
|
||
|| recl.prs_perslid_oslogin || '/' || recl.absid,
|
||
'W');
|
||
|
||
-- ABS-ID komt meermalen voor en is dus NIET uniek! --> ERROR (type probleemgeval)
|
||
ELSE
|
||
v_errorhint := 'Kan personeelsnummer niet eenduidig bepalen in importbestand';
|
||
uwva_set_werknemertype(recl.prs_perslid_key,
|
||
recl.prs_perslid_naam || '/' || recl.prs_perslid_nr,
|
||
'P',
|
||
v_errorhint,
|
||
'W');
|
||
END IF;
|
||
END IF;
|
||
|
||
-- Elke c_commitbuffer regels committen
|
||
v_buffercount := v_buffercount + 1;
|
||
IF (v_buffercount >= c_commitbuffer)
|
||
THEN
|
||
COMMIT;
|
||
v_buffercount := 0;
|
||
END IF;
|
||
END;
|
||
END LOOP;
|
||
|
||
COMMIT;
|
||
|
||
-- *** Personen verwijderen die niet in het importbestand voorkomen *****************************
|
||
-- Delete
|
||
v_errormsg := 'Try to open cursor';
|
||
v_action := 'DELETE';
|
||
|
||
FOR rec_del IN c_prs_del
|
||
LOOP
|
||
BEGIN
|
||
v_errormsg := 'Verwijderen van de persoon is NIET gelukt';
|
||
|
||
v_prs_omschr := 'Achternaam/persoonsnr/login/ABS-ID: '
|
||
|| rec_del.prs_perslid_naam
|
||
|| '/' || rec_del.prs_perslid_nr
|
||
|| '/' || rec_del.prs_perslid_oslogin
|
||
|| '/' || rec_del.absid;
|
||
|
||
v_perslid_key := rec_del.prs_perslid_key;
|
||
|
||
BEGIN
|
||
v_errorhint := 'SP zoeken';
|
||
-- Zoek welk SP verantwoordelijk is voor deze persoon
|
||
-- Deze wordt gerapporteerd, zodat vertek kan worden afgehandeld
|
||
SELECT MIN (alg_gebouw_key)
|
||
INTO v_gebouw_key
|
||
FROM prs_v_werkplek_gegevens w,
|
||
prs_perslidwerkplek pw
|
||
WHERE w.prs_werkplek_key = pw.prs_werkplek_key
|
||
AND pw.prs_perslid_key = v_perslid_key;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'R',
|
||
rec_del.prs_perslid_naam || '/' || rec_del.prs_perslid_nr,
|
||
v_gebouw_key
|
||
);
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
NULL;
|
||
END;
|
||
|
||
-- *** Budgethouderschap ***
|
||
v_errorhint := 'Budgethouderschap zoeken';
|
||
-- N.a.v. UWVA#16008: verwijder budgethouderschappen van persoon (budgethouderimport zou dit vanzelf weer moeten vullen).
|
||
-- Voor hoeveel kostenplaatsen is deze persoon budgethouder?
|
||
SELECT COUNT(*)
|
||
INTO v_count
|
||
FROM prs_kostenplaats
|
||
WHERE prs_perslid_key = rec_del.prs_perslid_key;
|
||
|
||
IF (v_count > 0)
|
||
THEN
|
||
v_errorhint := 'Budgethouderschap verwijderen';
|
||
UPDATE prs_kostenplaats
|
||
SET prs_perslid_key = NULL
|
||
WHERE prs_perslid_key = rec_del.prs_perslid_key;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
'Budgethouderschap van te verwijderen persoon ('||v_count||' stuks) vervallen.',
|
||
v_prs_omschr);
|
||
END IF;
|
||
|
||
-- *** Vervangers ***
|
||
v_errorhint := 'Vervangers zoeken';
|
||
-- N.a.v. UWVA#16617: koppelingen met vervangers dienen ook verwijderd te worden
|
||
SELECT COUNT(*)
|
||
INTO v_count
|
||
FROM prs_collega
|
||
WHERE prs_perslid_key = rec_del.prs_perslid_key
|
||
OR prs_perslid_key_alt = rec_del.prs_perslid_key;
|
||
|
||
IF (v_count > 0)
|
||
THEN
|
||
v_errorhint := 'Vervangers verwijderen';
|
||
DELETE FROM prs_collega
|
||
WHERE prs_perslid_key = rec_del.prs_perslid_key
|
||
OR prs_perslid_key_alt = rec_del.prs_perslid_key;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
'Te verwijderen persoon heeft vervanger(s). Koppeling(en) verwijderd.',
|
||
v_prs_omschr);
|
||
END IF;
|
||
|
||
-- *** Verplichtingen ***
|
||
v_errorhint := 'Verplichtingen zoeken';
|
||
SELECT COUNT (*)
|
||
INTO v_count
|
||
FROM (SELECT prs_perslid_key FROM prs_v_verplichting_refcheck
|
||
UNION ALL
|
||
SELECT cnt_prs_perslid_key prs_perslid_key
|
||
FROM cnt_v_aanwezigcontract
|
||
WHERE cnt_contract_status = 0 -- NIET Gesloten!
|
||
AND cnt_contract_looptijd_tot >= SYSDATE) vp
|
||
WHERE vp.prs_perslid_key = v_perslid_key;
|
||
|
||
IF v_count = 0
|
||
THEN
|
||
-- Persoon heeft geen enkele (actuele of historische) verplichting
|
||
v_errorhint := 'Verwijderen van persoon met key '
|
||
|| TO_CHAR (v_perslid_key);
|
||
|
||
-- UWVA#41099: Oplossen "audit-problemen"
|
||
--DELETE FROM prs_perslid
|
||
-- WHERE prs_perslid_key = v_perslid_key;
|
||
PRS.delete_perslid (p_import_key, v_perslid_key);
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
'Persoon verwijderd.',
|
||
v_prs_omschr);
|
||
ELSE
|
||
v_errorhint := 'Actuele verplichtingen zoeken';
|
||
-- Controleer of er ACTUELE verplichtingen zijn
|
||
SELECT COUNT (*)
|
||
INTO v_count
|
||
FROM (SELECT prs_perslid_key FROM prs_v_verplichting_keys
|
||
UNION ALL
|
||
SELECT cnt_prs_perslid_key prs_perslid_key
|
||
FROM cnt_v_aanwezigcontract
|
||
WHERE cnt_contract_status = 0 -- NIET Gesloten!
|
||
AND cnt_contract_looptijd_tot >= SYSDATE) vp
|
||
WHERE vp.prs_perslid_key = v_perslid_key;
|
||
|
||
IF v_count > 0
|
||
THEN
|
||
v_errorhint := 'Persoon inactief markeren';
|
||
-- Persoon inactief maken (alleen als nog niet inactief)
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_naam = SUBSTR ('INACTIEF:'|| prs_perslid_naam, 1, 30),
|
||
prs_perslid_oslogin = NULL,
|
||
prs_perslid_oslogin2 = NULL
|
||
WHERE prs_perslid_key = v_perslid_key
|
||
AND prs_perslid_naam NOT LIKE 'INACTIEF:%';
|
||
|
||
-- UWVA#20219: 'Toon in gids' uitzetten, ook als persoon al inactief is
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_ingids = NULL
|
||
WHERE prs_perslid_key = v_perslid_key;
|
||
|
||
fac.imp_writelog
|
||
(p_import_key,
|
||
'I',
|
||
'Persoon als INACTIEF gemarkeerd of was al INACTIEF gemarkeerd.',
|
||
v_prs_omschr);
|
||
|
||
-- UWA#249970: notificatie naar budgethouder
|
||
SELECT k.prs_perslid_key
|
||
INTO v_budgh_key
|
||
FROM prs_perslid p,
|
||
prs_afdeling a,
|
||
prs_kostenplaats k
|
||
WHERE a.prs_afdeling_key = p.prs_afdeling_key
|
||
AND k.prs_kostenplaats_key = a.prs_kostenplaats_key
|
||
AND p.prs_perslid_key = v_perslid_key;
|
||
|
||
fac.putnotificationsrtprio (88602, -- pfrom (UWVA#37656: Met usesenderasreplyto=true haalt psender niets uit en moet pfrom zijn gevuld: 88602=_EMAIL-user)
|
||
v_budgh_key, -- pto
|
||
'CUST21', -- pcode
|
||
1675, -- pref (naar UWVA_V_RAP_UITDIENST)
|
||
NULL, -- poptmessage
|
||
NULL, -- poptstatus
|
||
NULL, -- poptemail
|
||
NULL, -- poptmobile
|
||
v_perslid_key, -- pxref
|
||
2, -- pprio
|
||
'infobeheer.fi@uwv.nl'); -- psender
|
||
|
||
fac.trackaction ('PRSUPD', v_perslid_key, NULL, NULL, 'Persoon INACTIEF');
|
||
ELSE
|
||
BEGIN
|
||
v_errorhint := 'Persoon logisch verwijderen';
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_verwijder = SYSDATE
|
||
WHERE prs_perslid_key = v_perslid_key;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
'Persoon ge<67>nactiveerd.',
|
||
v_prs_omschr);
|
||
|
||
fac.trackaction ('PRSDEL', v_perslid_key, NULL, NULL, NULL);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
-- Kennelijk heeft de persoon toch ernstige verplichtingen
|
||
v_errorhint := 'Persoon heeft nog (max. '
|
||
|| TO_CHAR (v_count)
|
||
|| ') verplichtingen. ' || v_prs_omschr;
|
||
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 (DBMS_UTILITY.FORMAT_ERROR_BACKTRACE, 1, 100 )
|
||
|| '|'
|
||
|| SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg := '(ORACLE error '
|
||
|| oracle_err_num || '/' || oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
|
||
END;
|
||
END LOOP;
|
||
|
||
COMMIT;
|
||
|
||
-- UWVA#22892: Eerst alle bewaarde mandaten (eigen tabel met key=3) en
|
||
-- usrrap-relaties (hidden kenmerk met key=1111) uit voorgaande
|
||
-- import verwijderen. Per persoon die deze run naar een andere
|
||
-- afdeling verhuist, worden deze dan weer records toegevoegd.
|
||
DELETE FROM fac_usrdata
|
||
WHERE fac_usrtab_key = 3;
|
||
|
||
DELETE FROM prs_kenmerklink
|
||
WHERE prs_kenmerklink_niveau = 'P' AND prs_kenmerk_key = 1111;
|
||
|
||
-- *** Update ***********************************************************************************
|
||
v_errormsg := 'Try to open cursor';
|
||
v_action := 'UPDATE';
|
||
|
||
FOR rec_upd IN c_prs_upd
|
||
LOOP
|
||
BEGIN
|
||
v_errormsg := 'Update init';
|
||
|
||
v_prs_omschr := 'Achternaam/persoonsnr/login/ABS-ID: '
|
||
|| rec_upd.prs_perslid_naam
|
||
|| '/' || rec_upd.prs_perslid_nr
|
||
|| '/' || rec_upd.prs_perslid_oslogin
|
||
|| '/' || rec_upd.id;
|
||
|
||
-- Init
|
||
v_update := TRUE;
|
||
v_prsMatched := FALSE;
|
||
v_afdeling_key := 0;
|
||
v_srtperslid_key := NULL;
|
||
v_perslid := NULL;
|
||
v_perslid_key := 0;
|
||
|
||
-- *** Matching ***********************************
|
||
-- NB: zie uitleg bij cursor
|
||
IF v_update
|
||
THEN
|
||
-- *** Matching op ABS-ID ***
|
||
v_errormsg := 'Uniek ABS-ID';
|
||
|
||
-- Check of ABS-ID wel uniek is in importbestand
|
||
-- Een persoon kan vaker in het importbestandvoorkomen, met alle gegevens behalve de rol hetzelfde.
|
||
-- Daarom SELECT DISTINCT op ABS-ID en (omdat die ook uniek moet zijn) accountnaam!
|
||
SELECT COUNT(*)
|
||
INTO v_count
|
||
FROM (SELECT DISTINCT id,
|
||
account
|
||
FROM uwva_imp_abs
|
||
WHERE id = rec_upd.id );
|
||
|
||
-- Niet uniek --> error
|
||
IF (v_count != 1)
|
||
THEN
|
||
v_errorhint := 'ABS-ID is niet uniek in importbestand. ' || v_prs_omschr;
|
||
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
|
||
v_update := FALSE;
|
||
|
||
-- Wel uniek --> komt het ook (uniek) voor in Facilitor?
|
||
ELSE
|
||
v_errormsg := 'Matching op ABS-ID';
|
||
-- Probeer persoon op ABS-ID te matchen
|
||
-- NB: dit doorzoekt alleen personen in Facilitor met een ABS-type, maar een persoon
|
||
-- met een ander type kan best deze ABS-ID hebben (bijv. O of P).
|
||
-- Type buiten beschouwing laten?
|
||
-- Extragratis bonus is om die persoon-met-een-ander type dan te rapporteren,
|
||
-- of als P te markeren.
|
||
SELECT COUNT(*)
|
||
INTO v_count
|
||
FROM prs_v_aanwezigperslid ap,
|
||
prs_kenmerklink km
|
||
WHERE km.prs_link_key = ap.prs_perslid_key
|
||
AND km.prs_kenmerk_key = c_absid_key
|
||
AND km.prs_kenmerklink_waarde = rec_upd.id
|
||
AND uwva_abs.get_employeetype(p_import_key, prs_perslid_key, c_employeetype_key)
|
||
IN ('C', 'I', 'E', 'F', 'D', 'K', 'W');
|
||
|
||
-- Komt niet voor --> INSERT
|
||
IF (v_count = 0)
|
||
THEN
|
||
v_aktie := 'INSERT';
|
||
|
||
-- Komt uniek voor --> match! --> UPDATE
|
||
ELSIF (v_count = 1)
|
||
THEN
|
||
v_errormsg := 'Gegevens ophalen o.b.v. ABS-ID';
|
||
SELECT ap.*
|
||
INTO v_perslid
|
||
FROM prs_v_aanwezigperslid ap,
|
||
prs_kenmerklink km
|
||
WHERE km.prs_link_key = ap.prs_perslid_key
|
||
AND km.prs_kenmerk_key = c_absid_key
|
||
AND km.prs_kenmerklink_waarde = rec_upd.id
|
||
AND uwva_abs.get_employeetype(p_import_key, prs_perslid_key, c_employeetype_key)
|
||
IN ('C', 'I', 'E', 'F', 'D', 'K', 'W');
|
||
|
||
v_aktie := 'UPDATE';
|
||
|
||
-- ABS-ID gevonden. Klopt het type ook (of: nog)?
|
||
v_errormsg := 'Bepalen werknemertype';
|
||
v_perslid_type := uwva_abs.get_employeetype(p_import_key, v_perslid.prs_perslid_key, c_employeetype_key);
|
||
|
||
-- Als werknemertypes in ABS en Facilitor verschillen (maar wel beide C, I, E, F, D, K of W zijn),
|
||
-- dan type in Facilitor updaten.
|
||
IF (v_perslid_type != rec_upd.employeetype)
|
||
THEN
|
||
uwva_set_werknemertype(v_perslid.prs_perslid_key, rec_upd.prs_perslid_naam,
|
||
rec_upd.employeetype,
|
||
'Bijstellen werknemertype', 'I');
|
||
END IF;
|
||
|
||
-- Is niet uniek --> error
|
||
ELSE
|
||
v_errorhint := 'Kan ABS-ID niet eenduidig bepalen in Facilitor. ' || v_prs_omschr;
|
||
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
|
||
v_update := FALSE;
|
||
END IF; -- komt account (uniek) voor in FAC?
|
||
END IF; -- account uniek in ABS?
|
||
END IF;
|
||
|
||
-- *** Controle verplichte gegevens + ophalen extra informatie ***
|
||
v_errormsg := 'Ontbrekende of incorrecte verplichte gegevens. Persoon wordt overgeslagen.';
|
||
-- Controle: PRS_PERSLID_NAAM
|
||
IF v_update
|
||
AND rec_upd.prs_perslid_naam IS NULL
|
||
THEN
|
||
v_errorhint := 'Persoon heeft geen achternaam. Persoonsnummer/login/ABS-ID: '
|
||
|| rec_upd.prs_perslid_nr
|
||
|| '/' || rec_upd.prs_perslid_oslogin
|
||
|| '/' || rec_upd.id;
|
||
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
|
||
v_update := FALSE;
|
||
END IF;
|
||
|
||
---- Controle: PRS_PERSLID_OSLOGIN en PRS_PERSLID_NR
|
||
--IF v_update
|
||
-- AND rec_upd.prs_perslid_oslogin IS NULL
|
||
-- AND rec_upd.prs_perslid_nr IS NULL
|
||
--THEN
|
||
-- v_errorhint := 'Persoon heeft systeemaccount noch personeelsnummer. Achternaam: '
|
||
-- || rec_upd.prs_perslid_naam;
|
||
-- fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
|
||
-- v_update := FALSE;
|
||
--END IF;
|
||
|
||
-- Controle: PRS_AFDELING_NAAM
|
||
IF v_update
|
||
THEN
|
||
IF rec_upd.prs_afdeling_naam IS NULL
|
||
THEN
|
||
v_errorhint := 'Persoon heeft geen afdeling. ' || v_prs_omschr;
|
||
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
|
||
v_update := FALSE;
|
||
-- Check of afdelingscode wel 6 karakters lang is (ontbrekend voorloopnullen?)
|
||
ELSIF LENGTH(rec_upd.prs_afdeling_naam) != 6
|
||
THEN
|
||
v_errorhint := 'Afdeling moet 6 karakters lang zijn (' || rec_upd.prs_afdeling_naam || '). '
|
||
|| v_prs_omschr;
|
||
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
|
||
v_update := FALSE;
|
||
ELSE
|
||
BEGIN
|
||
-- Bepaal de afdelingskey; afdelingen worden met een andere import beheerd
|
||
SELECT prs_afdeling_key
|
||
INTO v_afdeling_key
|
||
FROM prs_afdeling
|
||
WHERE prs_afdeling_naam = rec_upd.prs_afdeling_naam
|
||
AND prs_afdeling_verwijder IS NULL;
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
v_errorhint := 'Afdeling ' || rec_upd.prs_afdeling_naam || ' bestaat niet. '
|
||
|| v_prs_omschr;
|
||
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
|
||
v_update := FALSE;
|
||
WHEN OTHERS
|
||
THEN
|
||
v_errorhint := 'Kan Afdeling ' || rec_upd.prs_afdeling_naam || ' niet eenduidig bepalen. '
|
||
|| v_prs_omschr;
|
||
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
|
||
v_update := FALSE;
|
||
END;
|
||
END IF;
|
||
END IF;
|
||
|
||
-- *** Controle niet-verplichte gegevens ***
|
||
-- Controle: PRS_SRTPERSLID_OMSCHRIJVING
|
||
IF v_update
|
||
THEN
|
||
-- Geen functie --> Geef standaardfunctie
|
||
IF rec_upd.prs_srtperslid_omschrijving IS NULL
|
||
THEN
|
||
v_errormsg := 'Functieomschrijving ontbreekt';
|
||
v_errorhint := 'Persoon heeft geen functieomschrijving. ' || v_prs_omschr
|
||
|| '. Persoon krijgt functie "' || c_functie_onbekend || '" toegewezen.';
|
||
fac.imp_writelog (p_import_key, 'I', v_errormsg, v_errorhint);
|
||
|
||
v_srtperslid_omschr := c_functie_onbekend;
|
||
ELSE
|
||
-- UWVA#20033: functienaam letterlijk overnemen uit ABS (afgezien van voor- en naloopspaties)
|
||
v_srtperslid_omschr := RTRIM (rec_upd.prs_srtperslid_omschrijving);
|
||
END IF;
|
||
|
||
BEGIN
|
||
v_srtperslid_upper := UPPER (v_srtperslid_omschr);
|
||
-- Bepaal de key van de functie
|
||
SELECT prs_srtperslid_key, prs_srtperslid_omschrijving
|
||
INTO v_srtperslid_key, v_srtperslid_db_oms
|
||
FROM prs_srtperslid
|
||
WHERE prs_srtperslid_upper = v_srtperslid_upper
|
||
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. ' || v_prs_omschr;
|
||
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
|
||
v_update := FALSE;
|
||
END;
|
||
END IF;
|
||
|
||
-- Controle: PRS_PERSLID_EMAIL
|
||
IF v_update
|
||
AND rec_upd.email IS NULL
|
||
THEN
|
||
v_errormsg := 'E-mailadres ontbreekt';
|
||
v_errorhint := v_prs_omschr;
|
||
--fac.imp_writelog (p_import_key, 'I', v_errormsg, v_errorhint);
|
||
END IF;
|
||
|
||
---- Controle: PRS_PERSLID_MOBIEL
|
||
--IF v_update
|
||
-- AND rec_upd.prs_perslid_mobiel IS NOT NULL
|
||
-- AND rec_upd.prs_perslid_mobiel NOT LIKE '00316________'
|
||
--THEN
|
||
-- v_errormsg := 'Incorrect formaat mobielnr (' || rec_upd.prs_perslid_mobiel || ')';
|
||
-- v_errorhint := v_prs_omschr;
|
||
-- fac.imp_writelog (p_import_key, 'I', v_errormsg, v_errorhint);
|
||
--END IF;
|
||
|
||
|
||
-- Kan persoon gereactiveerd worden of is er al een persoon met hetzelfde ABS-ID actief
|
||
IF v_update
|
||
AND v_aktie = 'UPDATE'
|
||
-- UWVA#27192: logisch verwijderde personen worden niet gereactiveerd, alleen inactieve personen ("INACTIEF: ...")
|
||
AND v_perslid.prs_perslid_upper LIKE 'INACTIEF%'
|
||
--AND v_perslid.prs_perslid_verwijder IS NOT NULL
|
||
THEN
|
||
BEGIN
|
||
-- Is er al een actieve persoon met dezelfde ABS-ID
|
||
SELECT COUNT (ap.prs_perslid_key)
|
||
INTO v_prs_key_cnt
|
||
FROM prs_v_aanwezigperslid ap,
|
||
prs_kenmerklink km
|
||
WHERE km.prs_link_key = ap.prs_perslid_key
|
||
AND km.prs_kenmerk_key = c_absid_key
|
||
AND km.prs_kenmerklink_waarde = rec_upd.id
|
||
AND ap.prs_perslid_key != v_perslid.prs_perslid_key;
|
||
|
||
IF v_prs_key_cnt > 0
|
||
THEN
|
||
-- (UWVA#13270)
|
||
-- Waarde(n) gevonden: Er is al een actieve persoon met dezelfde ABS-ID gevonden: Niet updaten!!!
|
||
--v_errormsg := 'Persoon hoeft niet gereactiveerd te worden; prs_perslid_nr: ' || rec_upd.prs_perslid_nr;
|
||
--v_errorhint := 'Er bestaat al een persoon met dezelfde persooneelsnummer die actief is, GEEN ACTIE NODIG; personeelsnummer: ' || rec_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 ABS-ID
|
||
-- Persoon kan gereactiveerd worden (naam en oslogin herstellen wordt bij UPDATE statement verderop gedaan)
|
||
-- v_update := TRUE;
|
||
-- UWVA#20219: bij inactiveren wordt persoon niet meer getoond in gids. Bij reactiveren dus weer wel.
|
||
v_errormsg := 'Persoon reactiveren: tonen in gids';
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_ingids = DECODE (rec_upd.employeetype, 'K', NULL, 1)
|
||
WHERE prs_perslid_key = v_perslid.prs_perslid_key;
|
||
|
||
v_errormsg := 'Persoon wordt gereactiveerd.';
|
||
fac.imp_writelog (p_import_key, 'I', v_errormsg, v_prs_omschr);
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_update := FALSE;
|
||
v_errorhint := 'Fout in het vinden aantal actieve personen. ' || v_prs_omschr;
|
||
END;
|
||
END IF;
|
||
|
||
-- *** Daadwerkelijk insert/update prs_perslid ***
|
||
IF v_update
|
||
THEN
|
||
BEGIN
|
||
-- UWVA#60530: Strippen (spouse)prefix uit prefname!
|
||
IF SUBSTR (rec_upd.prs_perslid_naam, 1, COALESCE (LENGTH (rec_upd.prs_perslid_tussenvoegsel), 60)) = rec_upd.prs_perslid_tussenvoegsel
|
||
THEN
|
||
v_achternaam := SUBSTR (TRIM (SUBSTR (rec_upd.prs_perslid_naam, LENGTH (rec_upd.prs_perslid_tussenvoegsel) + 1)), 1, 60);
|
||
ELSE
|
||
v_achternaam := SUBSTR (rec_upd.prs_perslid_naam, 1, 60);
|
||
END IF;
|
||
|
||
IF v_aktie = 'INSERT'
|
||
THEN
|
||
v_errormsg := 'Persoon kan niet worden toegevoegd';
|
||
|
||
-- Bestaat dit account al?
|
||
SELECT COUNT ( * )
|
||
INTO v_count
|
||
FROM prs_perslid
|
||
WHERE prs_perslid_oslogin = rec_upd.prs_perslid_oslogin;
|
||
|
||
-- Ja --> error
|
||
IF (v_count > 0)
|
||
THEN
|
||
v_errorhint := 'Account bestaat al.';
|
||
v_update := FALSE;
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
v_errormsg,
|
||
'Persoon toevoegen: account '
|
||
|| rec_upd.prs_perslid_oslogin
|
||
|| ' bestaat al. '
|
||
|| v_prs_omschr
|
||
);
|
||
-- Nee --> toevoegen
|
||
ELSE
|
||
-- JvdM_14-10-10: "In het sheet met specificaties staat bij een aantal velden,
|
||
-- waaronder TELNO, MOBNR, FAXNR, ALTACCNT, g<><67>n actie vermeld. Hiermee
|
||
-- is bedoeld dat deze velden niet gebruikt moeten worden en dus niet voor
|
||
-- mutaties in Facilitor mogen dienen."
|
||
-- UWVA#27483: gebruik/formatteer e-mail adres volgens schrijfwijzer
|
||
-- UWVA#30417: 'prs_perslid_ingids' voor K(etenpartners) initieel onzichtbaar
|
||
INSERT INTO prs_perslid (prs_perslid_naam,
|
||
prs_perslid_tussenvoegsel,
|
||
prs_perslid_voorletters,
|
||
prs_perslid_voornaam,
|
||
--prs_perslid_telefoonnr,
|
||
--prs_perslid_mobiel,
|
||
prs_perslid_nr,
|
||
prs_perslid_titel,
|
||
prs_perslid_email,
|
||
prs_perslid_oslogin,
|
||
prs_perslid_geslacht,
|
||
prs_perslid_ingids,
|
||
prs_srtperslid_key,
|
||
prs_afdeling_key)
|
||
VALUES (v_achternaam,
|
||
rec_upd.prs_perslid_tussenvoegsel,
|
||
rec_upd.prs_perslid_voorletters,
|
||
rec_upd.prs_perslid_voornaam,
|
||
--rec_upd.prs_perslid_telefoonnr,
|
||
--rec_upd.prs_perslid_mobiel,
|
||
rec_upd.prs_perslid_nr,
|
||
rec_upd.prs_perslid_titel,
|
||
rec_upd.sw_email, -- Volgens schrijfwijzer
|
||
rec_upd.prs_perslid_oslogin,
|
||
rec_upd.prs_perslid_geslacht,
|
||
DECODE (rec_upd.employeetype, 'K', NULL, 1),
|
||
v_srtperslid_key,
|
||
v_afdeling_key)
|
||
RETURNING prs_perslid_key INTO v_perslid_key;
|
||
|
||
-- *** Employee type ***
|
||
uwva_set_werknemertype (
|
||
v_perslid_key,
|
||
rec_upd.prs_perslid_naam
|
||
|| '/'
|
||
|| rec_upd.prs_perslid_nr,
|
||
rec_upd.employeetype,
|
||
NULL,
|
||
NULL
|
||
);
|
||
|
||
-- *** ABS-ID ***
|
||
uwva_set_flexveld (
|
||
v_perslid_key,
|
||
rec_upd.prs_perslid_naam
|
||
|| '/'
|
||
|| rec_upd.prs_perslid_nr,
|
||
c_absid_key,
|
||
rec_upd.id
|
||
);
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
'Persoon toegevoegd.',
|
||
v_prs_omschr);
|
||
END IF;
|
||
ELSE
|
||
v_errormsg := 'Persoon kan niet worden gewijzigd';
|
||
v_errorhint := 'Verwijderen budgetten en mandaten.';
|
||
|
||
-- Voor later gebruik bewaren (specifiek voor toevoegen werkplek)
|
||
-- (v_perslid_key wordt bij een nieuw persoon met bovenstaande INSERT gevuld
|
||
-- en wordt bij toevoegen werkplek gebruikt)
|
||
v_perslid_key := v_perslid.prs_perslid_key;
|
||
|
||
-- UWVA#687: Mandaten vervallen indien persoon naar andere afdeling verhuist
|
||
SELECT prs_afdeling_key
|
||
INTO o_afdeling_key
|
||
FROM prs_perslid
|
||
WHERE prs_perslid_key = v_perslid_key;
|
||
|
||
IF o_afdeling_key != v_afdeling_key
|
||
THEN
|
||
-- Voor hoeveel kostenplaatsen is deze budgethouder?
|
||
SELECT COUNT ( * )
|
||
INTO l_nrkps
|
||
FROM prs_kostenplaats
|
||
WHERE prs_perslid_key = v_perslid_key;
|
||
|
||
IF l_nrkps > 0
|
||
THEN
|
||
UPDATE prs_kostenplaats
|
||
SET prs_perslid_key = NULL
|
||
WHERE prs_perslid_key = v_perslid_key;
|
||
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'I',
|
||
'Budgethouderschap van persoon ('
|
||
|| l_nrkps
|
||
|| ' stuks) vervallen vanwege afdelingswijziging.',
|
||
v_prs_omschr
|
||
);
|
||
END IF;
|
||
|
||
-- En verwijder ook alle toegekende mandaten
|
||
SELECT COUNT ( * )
|
||
INTO l_nrkps
|
||
FROM prs_perslidkostenplaats
|
||
WHERE prs_perslid_key = v_perslid_key;
|
||
|
||
IF l_nrkps > 0
|
||
THEN
|
||
-- UWVA#22892: Bewaar -deze ABS-import!- verwijderde mandaten tbv.
|
||
-- CUST13-notificatie en leg relatie van persoon naar
|
||
-- rapport met deze verwijderde mandaten.
|
||
INSERT INTO fac_usrdata (fac_usrtab_key,
|
||
fac_usrdata_code,
|
||
fac_usrdata_omschr,
|
||
fac_usrdata_volgnr,
|
||
fac_usrdata_prijs)
|
||
SELECT 3, -- Bewaarde mandaten
|
||
TO_CHAR (pk.prs_perslid_key)
|
||
|| '-'
|
||
|| TO_CHAR (COALESCE (pk.prs_kostenplaats_key, 0)),
|
||
TO_CHAR (o_afdeling_key), -- Oude afdeling
|
||
COALESCE (pk.prs_perslidkostenplaats_boeken, 0),
|
||
COALESCE (pk.prs_perslidkostenplaats_inzage, 0)
|
||
FROM prs_perslidkostenplaats pk,
|
||
prs_kostenplaats k
|
||
WHERE pk.prs_perslid_key = v_perslid_key
|
||
AND pk.prs_kostenplaats_key =
|
||
k.prs_kostenplaats_key(+)
|
||
ORDER BY pk.prs_perslid_key,
|
||
pk.prs_kostenplaats_key;
|
||
|
||
INSERT INTO prs_kenmerklink (prs_link_key,
|
||
prs_kenmerklink_niveau,
|
||
prs_kenmerk_key,
|
||
prs_kenmerklink_waarde)
|
||
VALUES (v_perslid_key,
|
||
'P',
|
||
1111, -- usrrap-relatie
|
||
'555'); -- UWVA_V_RAP_GESCHOOND_MANDAAT-key
|
||
|
||
DELETE FROM prs_perslidkostenplaats
|
||
WHERE prs_perslid_key = v_perslid_key;
|
||
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'I',
|
||
'Mandaten van persoon ('
|
||
|| l_nrkps
|
||
|| ' stuks) vervallen vanwege afdelingswijziging.',
|
||
v_prs_omschr
|
||
);
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Bijwerken persoon.';
|
||
|
||
-- Kijk of persoon bijgewerkt moet worden
|
||
-- JvdM_14-10-10: "In het sheet met specificaties staat bij een aantal velden,
|
||
-- waaronder TELNO, MOBNR, FAXNR, ALTACCNT, g<><67>n actie vermeld. Hiermee
|
||
-- is bedoeld dat deze velden niet gebruikt moeten worden en dus niet voor
|
||
-- mutaties in Facilitor mogen dienen."
|
||
-- UWVA#19010: e-mail updaten als leeg in Facilitor (alleen aanvullen dus)!
|
||
-- UWVA#19189: voornaam updaten als leeg in Facilitor (alleen aanvullen dus)!
|
||
-- UWVA#19957: voornaam overschrijven als gevuld in ABS (geslacht ook)!
|
||
IF (v_perslid.prs_perslid_naam != v_achternaam
|
||
OR COALESCE (v_perslid.prs_perslid_nr, '-') !=
|
||
COALESCE (rec_upd.prs_perslid_nr, '-')
|
||
OR COALESCE (v_perslid.prs_perslid_oslogin, '-') !=
|
||
COALESCE (rec_upd.prs_perslid_oslogin, '-')
|
||
OR COALESCE (v_perslid.prs_perslid_tussenvoegsel, '-') !=
|
||
COALESCE (rec_upd.prs_perslid_tussenvoegsel, '-')
|
||
OR COALESCE (v_perslid.prs_perslid_voorletters, '-') !=
|
||
COALESCE (rec_upd.prs_perslid_voorletters, '-')
|
||
OR COALESCE (v_perslid.prs_perslid_voornaam, '-') !=
|
||
COALESCE (rec_upd.prs_perslid_voornaam, '-')
|
||
OR COALESCE (v_perslid.prs_perslid_titel, '-') !=
|
||
COALESCE (rec_upd.prs_perslid_titel, '-')
|
||
OR COALESCE (v_perslid.prs_perslid_email, '-') !=
|
||
COALESCE (v_perslid.prs_perslid_email,
|
||
rec_upd.email,
|
||
'-')
|
||
OR COALESCE (v_perslid.prs_perslid_geslacht, -1) !=
|
||
COALESCE (rec_upd.prs_perslid_geslacht, -1)
|
||
OR COALESCE (v_perslid.prs_srtperslid_key, 0) !=
|
||
COALESCE (v_srtperslid_key, 0)
|
||
OR v_perslid.prs_afdeling_key != v_afdeling_key
|
||
OR v_perslid.prs_perslid_verwijder IS NOT NULL)
|
||
THEN
|
||
BEGIN
|
||
-- Moet het account gewijzigd worden?
|
||
-- #UWVA20003: als v_perslid.- of rec_upd.prs_perslid_oslogin is NULL, was
|
||
-- onderstaande conditie altijd FALSE en werd account dus niet bijgewerkt.
|
||
-- Concateneren met een loze string lost dit op.
|
||
IF (v_perslid.prs_perslid_oslogin || '-' !=
|
||
rec_upd.prs_perslid_oslogin || '-')
|
||
THEN
|
||
v_errorhint := 'Bijwerken account.';
|
||
|
||
-- Ja --> Bestaat dit account al?
|
||
SELECT COUNT ( * )
|
||
INTO v_count
|
||
FROM prs_perslid
|
||
WHERE prs_perslid_oslogin =
|
||
rec_upd.prs_perslid_oslogin;
|
||
|
||
IF (v_count = 0)
|
||
THEN
|
||
-- Nee --> Update
|
||
v_errorhint := 'Update account.';
|
||
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_oslogin =
|
||
rec_upd.prs_perslid_oslogin
|
||
WHERE prs_perslid_key = v_perslid_key;
|
||
ELSE
|
||
-- Ja --> error
|
||
v_errorhint := 'Dubbel account.';
|
||
v_update := FALSE;
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
v_errormsg,
|
||
'Account bijwerken: '
|
||
|| rec_upd.prs_perslid_oslogin
|
||
|| ' bestaat al. Werknemertype P wordt gezet. '
|
||
|| v_prs_omschr
|
||
);
|
||
uwva_set_werknemertype (
|
||
v_perslid_key,
|
||
rec_upd.prs_perslid_naam
|
||
|| '/'
|
||
|| rec_upd.prs_perslid_nr,
|
||
'P',
|
||
NULL,
|
||
NULL
|
||
);
|
||
END IF;
|
||
END IF;
|
||
|
||
-- UWVA#19010: e-mail updaten als leeg in Facilitor (alleen aanvullen dus)!
|
||
-- UWVA#19957: voornaam overschrijven als gevuld in ABS (geslacht ook)!
|
||
-- UWVA#23124: kwaliteit gegevens in ABS is dusdanig dat ABS voor alles
|
||
-- leidend is, muv e-mail. Dat wordt soms handmatig aangepast in Facilitor,
|
||
-- dus alleen vullen, niet overschrijven.
|
||
-- Personen die al bestonden en veranderd zijn in Ketenpartner (K) krijgen geen vinkje ingids.
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_naam = v_achternaam,
|
||
prs_perslid_nr = rec_upd.prs_perslid_nr,
|
||
prs_perslid_tussenvoegsel = rec_upd.prs_perslid_tussenvoegsel,
|
||
prs_perslid_voorletters = rec_upd.prs_perslid_voorletters,
|
||
prs_perslid_voornaam = rec_upd.prs_perslid_voornaam,
|
||
prs_perslid_titel = rec_upd.prs_perslid_titel,
|
||
prs_perslid_email = COALESCE (prs_perslid_email, rec_upd.email),
|
||
prs_perslid_geslacht = rec_upd.prs_perslid_geslacht,
|
||
prs_perslid_ingids = DECODE (rec_upd.employeetype, 'K', NULL, 1),
|
||
prs_srtperslid_key = v_srtperslid_key,
|
||
prs_afdeling_key = v_afdeling_key,
|
||
prs_perslid_verwijder = NULL
|
||
WHERE prs_perslid_key = v_perslid_key;
|
||
|
||
-- *** Employee type ***
|
||
uwva_set_werknemertype (
|
||
v_perslid_key,
|
||
rec_upd.prs_perslid_naam
|
||
|| '/'
|
||
|| rec_upd.prs_perslid_nr,
|
||
rec_upd.employeetype,
|
||
NULL,
|
||
NULL
|
||
);
|
||
|
||
EXCEPTION
|
||
WHEN DUP_VAL_ON_INDEX
|
||
THEN
|
||
v_update := FALSE;
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
v_errormsg,
|
||
'Account '
|
||
|| rec_upd.prs_perslid_oslogin
|
||
|| ' bestaat al. Werknemertype P wordt gezet. '
|
||
|| v_prs_omschr
|
||
);
|
||
|
||
uwva_set_werknemertype (
|
||
v_perslid_key,
|
||
rec_upd.prs_perslid_naam
|
||
|| '/'
|
||
|| rec_upd.prs_perslid_nr,
|
||
'P',
|
||
NULL,
|
||
NULL
|
||
);
|
||
WHEN OTHERS
|
||
THEN
|
||
v_update := FALSE;
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
v_errormsg,
|
||
'Fout bij updaten persoon' || v_prs_omschr
|
||
);
|
||
END;
|
||
END IF;
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg :=
|
||
'update: '
|
||
|| SUBSTR (DBMS_UTILITY.FORMAT_ERROR_BACKTRACE, 1, 100);
|
||
v_errorhint :=
|
||
'(ORACLE error '
|
||
|| oracle_err_num
|
||
|| '/'
|
||
|| oracle_err_mes
|
||
|| '). '
|
||
|| v_prs_omschr;
|
||
v_update := FALSE;
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_errormsg,
|
||
v_errorhint);
|
||
END;
|
||
END IF;
|
||
|
||
-- *** Rol(len) ***************************************************************************
|
||
--v_update := FALSE;--TODO
|
||
IF v_update
|
||
THEN
|
||
BEGIN
|
||
-- *** Profiel/Limiet ***********************
|
||
-- Kan ik uit de rol(len) die deze persoon heeft een profiel/limiet afleiden?
|
||
-- (i.e. bepaal aantal rollen van persoon dat naar een profiel verwijst)
|
||
v_errormsg := 'Aantal profielen bepalen';
|
||
SELECT COUNT(*)
|
||
INTO v_count
|
||
FROM uwva_imp_abs uia,
|
||
prs_kenmerklink km,
|
||
uwva_provisioning up,
|
||
fac_profiel fp
|
||
WHERE fp.fac_profiel_key = up.fac_profiel_key
|
||
AND up.uwva_rol_omschr = uia.grpfname
|
||
AND km.prs_link_key = v_perslid_key
|
||
AND km.prs_kenmerk_key = c_absid_key
|
||
AND uia.id = km.prs_kenmerklink_waarde;
|
||
|
||
-- Ja --> bepaal profiel met hoogste limiet
|
||
IF (v_count > 0)
|
||
THEN
|
||
v_errormsg := 'Rol->Profiel+Limiet';
|
||
SELECT fac_profiel_key, fac_profiel_omschrijving, limiet
|
||
INTO v_profiel_key, v_profiel_omschr, v_limiet
|
||
FROM ( SELECT DISTINCT
|
||
fp.fac_profiel_key,
|
||
fp.fac_profiel_omschrijving,
|
||
COALESCE (fp.fac_profiel_limiet,
|
||
(SELECT MAX (fpw.fac_profielwaarde_limiet)
|
||
FROM fac_profielwaarde fpw
|
||
WHERE fp.fac_profiel_key = fpw.fac_profiel_key))
|
||
limiet
|
||
FROM uwva_imp_abs uia,
|
||
prs_kenmerklink km,
|
||
uwva_provisioning up,
|
||
fac_profiel fp
|
||
WHERE fp.fac_profiel_key = up.fac_profiel_key
|
||
AND up.uwva_rol_omschr = uia.grpfname
|
||
AND km.prs_link_key = v_perslid_key
|
||
AND km.prs_kenmerk_key = c_absid_key
|
||
AND uia.id = km.prs_kenmerklink_waarde
|
||
ORDER BY limiet DESC)
|
||
WHERE ROWNUM = 1;
|
||
|
||
v_errormsg := 'Wijzigen limiet';
|
||
UPDATE prs_perslid
|
||
SET fac_profiel_key = v_profiel_key
|
||
WHERE prs_perslid_key = v_perslid_key;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
v_prs_omschr,
|
||
'Profiel gewijzigd: '||v_profiel_omschr||' ('||v_profiel_key||'): E '||v_limiet||',-');
|
||
-- Nee --> Verwijder eventueel aanwezige profiel(limiet)en
|
||
ELSE
|
||
v_errormsg := 'Verwijderen profiel(-limiet)';
|
||
UPDATE prs_perslid
|
||
SET fac_profiel_key = NULL
|
||
WHERE prs_perslid_key = v_perslid_key;
|
||
|
||
--fac.imp_writelog (p_import_key,
|
||
-- 'I',
|
||
-- v_prs_omschr,
|
||
-- 'Profiel verwijderd.');
|
||
END IF; -- v_count>0
|
||
|
||
-- *** Authorisatiegroepen *********************
|
||
-- Verwijder alle rechten, die iemand volgens ABS niet heeft.
|
||
FOR rec_groep IN c_groep (rec_upd.id, v_perslid_key)
|
||
LOOP
|
||
v_errormsg := 'Rol->Authgroep verwijderen';
|
||
DELETE FROM fac_gebruikersgroep
|
||
WHERE fac_groep_key = rec_groep.fac_groep_key
|
||
AND prs_perslid_key = v_perslid_key;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
v_prs_omschr,
|
||
'Groep verwijderd: ' || rec_groep.fac_groep_omschrijving||' (#'||rec_groep.fac_groep_key||')');
|
||
END LOOP;
|
||
|
||
-- Voeg alle rechten-volgens-ABS toe, die iemand nog niet heeft.
|
||
FOR rec_rol IN c_rol (rec_upd.id, v_perslid_key)
|
||
LOOP
|
||
v_errormsg := 'Rol->Authgroep toevoegen';
|
||
INSERT INTO fac_gebruikersgroep
|
||
(fac_groep_key, prs_perslid_key)
|
||
VALUES (rec_rol.fac_groep_key, v_perslid_key);
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
v_prs_omschr,
|
||
'Groep toegevoegd: ' || rec_rol.fac_groep_omschrijving||' (#'||rec_rol.fac_groep_key||')');
|
||
END LOOP;
|
||
|
||
-- Iedereen uit ABS met een oslogin moet ook groep _default krijgen, als 'ie die nog niet heeft
|
||
IF (rec_upd.prs_perslid_oslogin IS NOT NULL)
|
||
THEN
|
||
v_errormsg := '_default toevoegen?';
|
||
SELECT COUNT (*)
|
||
INTO v_count
|
||
FROM fac_gebruikersgroep fgg
|
||
WHERE fgg.prs_perslid_key = v_perslid_key
|
||
AND fac_groep_key = c_grp_default_key;
|
||
|
||
IF (v_count = 0)
|
||
THEN
|
||
v_errormsg := '_default toevoegen';
|
||
INSERT INTO fac_gebruikersgroep
|
||
(fac_groep_key, prs_perslid_key)
|
||
VALUES (c_grp_default_key, v_perslid_key);
|
||
END IF;
|
||
END IF;
|
||
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
'Rollen: ' || v_errormsg,
|
||
v_prs_omschr);
|
||
END;
|
||
END IF; -- v_update
|
||
|
||
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 := v_errorhint
|
||
|| ' {' || v_errormsg || '}';
|
||
v_errormsg := '(ORACLE error '
|
||
|| oracle_err_num || '/' || oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
|
||
END;
|
||
END LOOP;
|
||
|
||
COMMIT;
|
||
|
||
-- UWVA#30547: Ketenpartners krijgen geen (zelden een) werkplek mee vanuit ABS, maar moeten wel een werkplek
|
||
-- in AMSG3 krijgen, met in basis dezelfde voorwaarden als een normale HRM-werkplek. Verschil is dat een normale
|
||
-- HRM-werkplek wordt toegewezen in het eerste gebouw op de locatie (hier AMSG0), terwijl dat hier expliciet AMSG3
|
||
-- moet zijn. Daarom in de importtabel voor alle personen met type K 'GAMSG3' als pandcode invullen, zodat de
|
||
-- locatie klopt, en daarna bij het bepalen van het gebouw 'hard' AMSG3 gebruiken ipv 'het eerste gebouw'. De rest
|
||
-- gaat daarna vanzelf.
|
||
UPDATE uwva_imp_abs
|
||
SET pandcode = c_def_pandcode_ketenpartner
|
||
WHERE employeetype = 'K'
|
||
AND pandcode IS NULL;
|
||
|
||
-- *** Update HRM-WP voor personen **************************************************************
|
||
v_errormsg := 'Try to open cursor c_prs_wp ';
|
||
|
||
-- Cursor levert alleen personen waarvoor iets moet gebeuren!
|
||
FOR rec_wp IN c_prs_wp
|
||
LOOP
|
||
BEGIN
|
||
v_aktie := 'NONE';
|
||
v_errormsg := 'NONE';
|
||
|
||
-- Eerst eens de huidige HRM-WP(s) opruimen, tenzij dit toevallig
|
||
-- de laagste/oudste WP op beoogde HRM-locatie is (dan behouden).
|
||
-- Per 5.3.2/FSN#26947 verdwijnt via trigger vanzelf de bezetting!
|
||
v_errormsg := 'Fout bij verwijderen (oude) HRM-WP(s)';
|
||
|
||
DELETE FROM prs_werkplek wp
|
||
WHERE EXISTS
|
||
(SELECT 1
|
||
FROM prs_perslidwerkplek pw
|
||
WHERE pw.prs_perslid_key = rec_wp.prs_perslid_key
|
||
AND pw.prs_werkplek_key = wp.prs_werkplek_key
|
||
AND pw.prs_perslidwerkplek_volgnr = 2
|
||
AND pw.prs_perslidwerkplek_key != COALESCE (rec_wp.facloc_pw_key, 0));
|
||
|
||
-- Gekke situatie (zou niet mogen voorkomen), maar even loggen.
|
||
IF (rec_wp.hrmall_wp_aant > 1)
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key, 'I',
|
||
rec_wp.aanduiding || ': >1 HRM-WP; opruiming uitgevoerd!',
|
||
'WP'
|
||
);
|
||
END IF;
|
||
|
||
-- Het aantal WP(s) op HRM-locatie bepaalt wat er moet gebeuren.
|
||
IF (rec_wp.facloc_wp_aant = 0) -- Geen enkele WP op HRM-locatie!
|
||
THEN
|
||
-- Als persoon totaal maar 1 WP had, dan "verhuist" die nu naar de
|
||
-- nieuwe HRM-WP (en blijft het totaal bij 1 WP).
|
||
-- Was die ene WP een HRM-WP, dan is die hierboven reeds opgeruimd
|
||
-- (en hoeft dat hier niet nog eens).
|
||
IF (rec_wp.facall_wp_aant = 1 AND rec_wp.hrmall_wp_aant <> 1)
|
||
THEN
|
||
-- Per 5.3.2 verdwijnt via trigger vanzelf de bezetting!
|
||
v_errormsg := 'Fout bij verwijderen enige WP op andere locatie';
|
||
|
||
DELETE FROM prs_werkplek wp
|
||
WHERE prs_werkplek_key =
|
||
(SELECT prs_werkplek_key
|
||
FROM prs_perslidwerkplek
|
||
WHERE prs_perslidwerkplek_key = rec_wp.facall_pw_key);
|
||
END IF;
|
||
|
||
v_aktie := 'INSERT';
|
||
ELSE -- Een of meer WP op HRM-locatie!
|
||
v_errormsg := 'Fout bij promoveren WP op HRM-locatie';
|
||
|
||
UPDATE prs_perslidwerkplek
|
||
SET prs_perslidwerkplek_volgnr = 2
|
||
WHERE prs_perslidwerkplek_key = rec_wp.facloc_pw_key;
|
||
|
||
fac.imp_writelog (
|
||
p_import_key, 'I',
|
||
rec_wp.aanduiding || ': Bestaande WP op HRM-locatie naar 2',
|
||
'WP'
|
||
);
|
||
|
||
IF (rec_wp.facloc_wp_aant > 1) -- Teveel WP op HRM-locatie!
|
||
THEN
|
||
-- Per 5.3.2 verdwijnt via trigger vanzelf de bezetting!
|
||
v_errormsg := 'Fout bij verwijderen overige WP op HRM-locatie';
|
||
|
||
DELETE FROM prs_werkplek wp
|
||
WHERE EXISTS
|
||
(SELECT 1
|
||
FROM prs_perslidwerkplek pw
|
||
WHERE pw.prs_perslid_key = rec_wp.prs_perslid_key
|
||
AND pw.prs_werkplek_key = wp.prs_werkplek_key
|
||
AND pw.prs_perslidwerkplek_key != rec_wp.facloc_pw_key);
|
||
|
||
fac.imp_writelog (
|
||
p_import_key, 'I',
|
||
rec_wp.aanduiding || ': Overige WP(s) op HRM-locatie weg',
|
||
'WP'
|
||
);
|
||
END IF;
|
||
END IF;
|
||
|
||
v_update := TRUE;
|
||
|
||
IF (v_aktie = 'INSERT')
|
||
THEN
|
||
-- Dan hebben we hier dus te maken met een persoon die nog geen
|
||
-- HRM-WP heeft op de via pandcode voorgeschreven HRM-locatie. Hier
|
||
-- moeten we een gebouw, verdieping, ruimte en werkplek bij zoeken.
|
||
BEGIN
|
||
IF (rec_wp.employeetype = 'K')
|
||
THEN
|
||
-- UWVA#30547: Voor ketenpartners niet het 'eerste' gebouw kiezen,
|
||
-- maar het gebouw bij de pandcode (AMGS3). Dat is al bepaald in de cursor.
|
||
v_new_gebouw_key := rec_wp.alg_gebouw_key;
|
||
ELSE
|
||
v_errormsg :=
|
||
'Fout bij bepalen gebouw op locatie/pandcode '
|
||
|| rec_wp.alg_locatie_key
|
||
|| '/'
|
||
|| rec_wp.pandcode;
|
||
|
||
SELECT MIN (alg_gebouw_code)
|
||
INTO v_gebouw_code
|
||
FROM alg_v_aanweziggebouw
|
||
WHERE alg_locatie_key = rec_wp.alg_locatie_key
|
||
AND COALESCE (alg_gebouw_vervaldatum, SYSDATE) > TRUNC (SYSDATE);
|
||
|
||
SELECT alg_gebouw_key
|
||
INTO v_new_gebouw_key
|
||
FROM alg_v_aanweziggebouw
|
||
WHERE alg_locatie_key = rec_wp.alg_locatie_key
|
||
AND alg_gebouw_code = v_gebouw_code;
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
v_errormsg :=
|
||
'Fout bij toevoegen gebouw op locatie/pandcode '
|
||
|| rec_wp.alg_locatie_key
|
||
|| '/'
|
||
|| rec_wp.pandcode;
|
||
|
||
v_gebouw_code := '0';
|
||
|
||
INSERT INTO alg_gebouw (alg_locatie_key,
|
||
alg_srtgebouw_key,
|
||
alg_gebouw_code,
|
||
alg_gebouw_naam)
|
||
VALUES (rec_wp.alg_locatie_key,
|
||
c_srtgebouw_default,
|
||
v_gebouw_code,
|
||
'Onbekend')
|
||
RETURNING alg_gebouw_key INTO v_new_gebouw_key;
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (p_import_key, 'W',
|
||
rec_wp.aanduiding || v_errormsg,
|
||
'WP');
|
||
v_update := FALSE;
|
||
END;
|
||
|
||
IF v_update
|
||
THEN
|
||
BEGIN
|
||
v_errormsg :=
|
||
'Fout bij bepalen verdieping in gebouw '
|
||
|| v_gebouw_code;
|
||
|
||
SELECT alg_verdieping_key
|
||
INTO v_verdieping_key
|
||
FROM alg_v_aanwezigverdieping
|
||
WHERE alg_gebouw_key = v_new_gebouw_key
|
||
AND alg_verdieping_volgnr = 0; -- Begane grond!
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
v_errormsg :=
|
||
'Fout bij toevoegen verdieping in gebouw '
|
||
|| v_gebouw_code;
|
||
|
||
INSERT INTO alg_verdieping (alg_gebouw_key,
|
||
alg_verdieping_omschrijving,
|
||
alg_verdieping_volgnr,
|
||
alg_verdieping_code)
|
||
VALUES (v_new_gebouw_key,
|
||
c_verdieping_omschr_default,
|
||
0,
|
||
'0')
|
||
RETURNING alg_verdieping_key
|
||
INTO v_verdieping_key;
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (p_import_key, 'W',
|
||
rec_wp.aanduiding || v_errormsg,
|
||
'WP');
|
||
v_update := FALSE;
|
||
END;
|
||
END IF;
|
||
|
||
IF v_update
|
||
THEN
|
||
BEGIN
|
||
v_errormsg :=
|
||
'Fout bij bepalen ruimte in gebouw '
|
||
|| v_gebouw_code
|
||
|| ' (verdieping '
|
||
|| TO_CHAR (v_verdieping_key)
|
||
|| ').';
|
||
|
||
SELECT alg_ruimte_key, alg_ruimte_nr
|
||
INTO v_ruimte_key, v_ruimte_nr
|
||
FROM alg_v_aanwezigruimte
|
||
WHERE alg_verdieping_key = v_verdieping_key
|
||
AND alg_ruimte_nr = c_ruimte_code;
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
v_errormsg :=
|
||
'Fout bij toevoegen ruimte in gebouw '
|
||
|| v_gebouw_code
|
||
|| ' (verdieping '
|
||
|| TO_CHAR (v_verdieping_key)
|
||
|| ').';
|
||
|
||
INSERT INTO alg_ruimte (alg_verdieping_key,
|
||
alg_ruimte_nr,
|
||
alg_ruimte_omschrijving)
|
||
VALUES (v_verdieping_key,
|
||
c_ruimte_code,
|
||
c_ruimte_omschr_default)
|
||
RETURNING alg_ruimte_key, alg_ruimte_nr
|
||
INTO v_ruimte_key, v_ruimte_nr;
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (p_import_key, 'W',
|
||
rec_wp.aanduiding || v_errormsg,
|
||
'WP');
|
||
v_update := FALSE;
|
||
END;
|
||
END IF;
|
||
|
||
IF v_update
|
||
THEN
|
||
uwva_upsert_wp (rec_wp.prs_perslid_key,
|
||
v_ruimte_key, v_ruimte_nr,
|
||
NULL);
|
||
|
||
fac.imp_writelog (p_import_key, 'I',
|
||
rec_wp.aanduiding || ': HRM-WP aangemaakt',
|
||
'WP');
|
||
END IF;
|
||
END IF;
|
||
|
||
--UWVA#23124: Verhuisbericht naar intermediair Abonnementen
|
||
--UWVA#39432: Per overgang Infotrading naar P&C ongewijzigd
|
||
--UWVA#58768: Opschonen ABO-funtionaliteit
|
||
|
||
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 := 'WP {' || v_errormsg || '}';
|
||
v_errormsg :=
|
||
rec_wp.aanduiding
|
||
|| '(ORACLE error '
|
||
|| oracle_err_num
|
||
|| '/'
|
||
|| oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_errormsg,
|
||
v_errorhint);
|
||
END;
|
||
END LOOP;
|
||
|
||
COMMIT;
|
||
|
||
-- UWVA#20232: Tijdelijk(!) flexveld (Vinder-)Regio bijwerken/toevoegen
|
||
-- a.d.h.v. gebouw waar persoon werkplek heeft.
|
||
v_count_regio_edit := 0;
|
||
v_count_regio_add := 0;
|
||
FOR rec_regio IN c_prs_regio
|
||
LOOP
|
||
BEGIN
|
||
v_errorhint := 'Regio: fout! ('||rec_regio.prs_perslid_key||' in '||rec_regio.alg_gebouw_code
|
||
||': '||rec_regio.prs_kenmerklink_key||'/'||rec_regio.prs_kenmerklink_waarde||'->'||rec_regio.fac_usrdata_key
|
||
||'/'||rec_regio.fac_usrdata_omschr||')';
|
||
IF (rec_regio.prs_kenmerklink_key IS NULL)
|
||
THEN
|
||
INSERT INTO prs_kenmerklink
|
||
(prs_link_key,
|
||
prs_kenmerklink_niveau, prs_kenmerk_key,
|
||
prs_kenmerklink_waarde)
|
||
VALUES (rec_regio.prs_perslid_key,
|
||
'P', c_regio_key,
|
||
rec_regio.fac_usrdata_key);
|
||
|
||
v_count_regio_add := v_count_regio_add + 1;
|
||
ELSE
|
||
UPDATE prs_kenmerklink
|
||
SET prs_kenmerklink_waarde = rec_regio.fac_usrdata_key
|
||
WHERE prs_kenmerklink_key = rec_regio.prs_kenmerklink_key;
|
||
|
||
v_count_regio_edit := v_count_regio_edit + 1;
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errorhint := v_errorhint
|
||
|| ' {' || v_errormsg || '}';
|
||
v_errormsg := 'Regio: (ORACLE error '
|
||
|| oracle_err_num || '/' || oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
|
||
END;
|
||
END LOOP;
|
||
|
||
COMMIT;
|
||
|
||
fac.imp_writelog (p_import_key, 'S',
|
||
'Regio: ' || v_count_regio_add || ' flexvelden toegevoegd, '
|
||
|| v_count_regio_edit || ' flexvelden bijgewerkt.',
|
||
'');
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_perslid_newcount_fclt
|
||
FROM prs_perslid
|
||
WHERE ( prs_perslid_nr IS NOT NULL
|
||
OR prs_perslid_oslogin IS NOT NULL)
|
||
AND prs_perslid_verwijder IS NULL
|
||
AND uwva_abs.get_employeetype(p_import_key, prs_perslid_key, c_employeetype_key) IN ('C', 'I', 'E', 'F', 'D', 'K', 'W');
|
||
|
||
-- Vergelijking aantal personen voor en na import
|
||
-- (zelfde query als v<><76>r, anders vergelijk je appels met peren)
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Aantal actieve personen (met account/personeelsnr en type) vooraf: '
|
||
|| TO_CHAR (v_perslid_count_fclt)
|
||
|| ' nu: '
|
||
|| TO_CHAR (v_perslid_newcount_fclt),
|
||
''
|
||
);
|
||
|
||
-- Aantal personen zonder login <20>n personeelsnummer
|
||
SELECT COUNT (*)
|
||
INTO v_perslid_newcount_fclt -- hergebruik (misbruik) variabele
|
||
FROM prs_perslid
|
||
WHERE prs_perslid_oslogin IS NULL
|
||
AND prs_perslid_nr IS NULL
|
||
AND prs_perslid_verwijder IS NULL;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Aantal actieve personen zonder account <20>n personeelsnr: '
|
||
|| TO_CHAR (v_perslid_newcount_fclt),
|
||
''
|
||
);
|
||
|
||
-- Ongebruikte rollen
|
||
SELECT COUNT(*)
|
||
INTO v_count
|
||
FROM (SELECT DISTINCT uwva_rol_omschr rol FROM uwva_provisioning
|
||
MINUS
|
||
SELECT DISTINCT grpfname rol FROM uwva_imp_abs);
|
||
|
||
IF (v_count > 0)
|
||
THEN
|
||
BEGIN
|
||
FOR rec_rnu IN c_rol_not_used
|
||
LOOP
|
||
fac.imp_writelog (p_import_key, 'S', 'Ongebruikte rol in provisioning-tabel', rec_rnu.rol);
|
||
END LOOP;
|
||
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, 'W', v_errormsg, v_errorhint);
|
||
END;
|
||
END IF;
|
||
|
||
-- *** Ongebruikte functieomschrijvingen verwijderen ********************************************
|
||
-- Functies die niemand meer heeft, compleet verwijderen
|
||
DELETE FROM prs_srtperslid sp
|
||
WHERE NOT EXISTS
|
||
(SELECT 1
|
||
FROM prs_perslid p
|
||
WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key);
|
||
-- UWVA#23714: Functies die alleen verwijderde mensen nog hebben, logisch verwijderen
|
||
UPDATE prs_srtperslid sp
|
||
SET prs_srtperslid_verwijder = SYSDATE
|
||
WHERE prs_srtperslid_verwijder IS NULL
|
||
AND NOT EXISTS
|
||
(SELECT 1
|
||
FROM prs_v_aanwezigperslid
|
||
WHERE prs_srtperslid_key = sp.prs_srtperslid_key);
|
||
|
||
-- Ook kenmerken 'Alternatieve functie' (key 1192) verwijderen die naar niet-meer-bestaande
|
||
-- functies verwijzen.
|
||
DELETE FROM prs_kenmerklink kl
|
||
WHERE prs_kenmerk_key = 1192
|
||
AND NOT EXISTS
|
||
(SELECT 1
|
||
FROM prs_srtperslid
|
||
WHERE prs_srtperslid_verwijder IS NULL
|
||
AND prs_srtperslid_key = fac.safe_to_number(kl.prs_kenmerklink_waarde) );
|
||
|
||
-- UWVA#20033: Functienamen uit ABS overnemen (hoofdletters matchen)
|
||
FOR rec_func IN c_functie
|
||
LOOP
|
||
BEGIN
|
||
v_errorhint := rec_func.funcdscr;
|
||
v_errormsg := 'Functienamen bijwerken';
|
||
|
||
UPDATE prs_srtperslid
|
||
SET prs_srtperslid_omschrijving = rec_func.funcdscr
|
||
WHERE prs_srtperslid_key = rec_func.prs_srtperslid_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, 'W', v_errormsg, v_errorhint);
|
||
END;
|
||
END LOOP;
|
||
|
||
-- UWVA#23788: Onbekende pandcodes
|
||
FOR rec_pcon IN c_pandcode_onbekend
|
||
LOOP
|
||
BEGIN
|
||
v_errorhint := rec_pcon.pandcode;
|
||
v_errormsg := 'Onbekende pandcodes uitlijsten';
|
||
|
||
-- Kennen we de kostenplaats niet, of het gebouw niet?
|
||
IF (rec_pcon.prs_kostenplaats_nr IS NULL)
|
||
THEN
|
||
fac.imp_writelog (p_import_key, 'W',
|
||
'Pandcode ' || rec_pcon.pandcode
|
||
|| ': onbekende kostenplaats.',
|
||
'Betreft ' || rec_pcon.aantal || ' personen.');
|
||
ELSE
|
||
fac.imp_writelog (p_import_key, 'W',
|
||
'Pandcode ' || rec_pcon.pandcode
|
||
|| ': geen gebouw bij kostenplaats.',
|
||
'Betreft ' || rec_pcon.aantal || ' personen.');
|
||
END IF;
|
||
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, 'W', v_errormsg, v_errorhint);
|
||
END;
|
||
END LOOP;
|
||
|
||
-- *** Budgethouders ****************************************************************************
|
||
-- UWVA#20021: Onderstaande was voorheen een aparte budgethouder-import. Sinds het smoelenboek
|
||
-- zijn de importbestanden voor de KPN- en budgethouderimports samengevoegd tot <20><>n bestand met
|
||
-- de mandateringsboom, inclusief volledige organisatiestructuur. De KPN-import 'maakt' voortaan
|
||
-- de afdelingen en kostenplaatsen (PRS <20>n PRJ), terwijl de ABS-import eerst de personeelsleden
|
||
-- aanmaakt en rechten geeft en vervolgens de taken van de budgethouder-import uitvoert:
|
||
-- budgethouders instellen, mandaat (profiel) instellen en personen aan de Budgethouder-autori-
|
||
-- satiegroep (key 1061) toevoegen.
|
||
-- (NB: budgethouderimport moet n<> KPN en ABS, omdat KPN de kostenplaatsen en ABS de personen
|
||
-- importeert die de budgethouderimport nodig heeft)
|
||
|
||
-- UWVA#23269: Eerst dezelfde check als in uwva_update_kpn(), want als die is overgeslagen, dan
|
||
-- ook hier overslaan (ie. geen budgethouders wijzigen)!
|
||
-- UWVA#75874: Check op 50% voortaan tegen alleen actieve/niet verlopen KPN.
|
||
-- How many active records are now present?
|
||
SELECT COUNT ( * )
|
||
INTO l_oldcount
|
||
FROM prs_kostenplaats
|
||
WHERE prs_kostenplaats_verwijder IS NULL
|
||
AND prs_kostenplaats_omschrijving NOT LIKE 'INACTIEF:%'
|
||
AND COALESCE (prs_kostenplaats_eind, SYSDATE + 1) > TRUNC (SYSDATE);
|
||
|
||
-- How many (in)active records are imported?
|
||
SELECT COUNT ( * )
|
||
INTO l_impcount
|
||
FROM uwva_imp_kpn
|
||
WHERE status = 'A';
|
||
|
||
SELECT COUNT ( * )
|
||
INTO l_impcount_prj
|
||
FROM uwva_imp_kpn_prj
|
||
WHERE status = 'A';
|
||
|
||
IF (ABS ((l_impcount + l_impcount_prj) - l_oldcount) > c_kpn_maxvariation * l_oldcount)
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'E',
|
||
'Het verschil tussen de actieve kostenplaatsen ('
|
||
|| TO_CHAR (l_oldcount)
|
||
|| ') en geimporteerde aantallen ('
|
||
|| TO_CHAR (l_impcount + l_impcount_prj)
|
||
|| ') is te groot',
|
||
'Budgethouders niet bijgewerkt!');
|
||
ELSE
|
||
FOR rec_budgh IN c_budgethouder
|
||
LOOP
|
||
BEGIN
|
||
v_errormsg :=
|
||
'Fout bij wijzigen kostenplaats "'
|
||
|| rec_budgh.prs_kostenplaats_nr
|
||
|| '" met budgethouder "'
|
||
|| rec_budgh.imp_perslid_nr
|
||
|| '" ';
|
||
|
||
-- Ken budgethouder toe aan kostenplaats (of verwijder als NULL)
|
||
UPDATE prs_kostenplaats
|
||
SET prs_perslid_key = rec_budgh.prs_perslid_key
|
||
WHERE prs_kostenplaats_key = rec_budgh.prs_kostenplaats_key
|
||
AND prs_kostenplaats_verwijder IS NULL;
|
||
|
||
-- Als de kostenplaats een budgethouder heeft, stel hiervoor dan mandaat
|
||
-- en autorisatiegroep in
|
||
IF (rec_budgh.prs_perslid_key IS NOT NULL)
|
||
THEN
|
||
v_errormsg :=
|
||
'Fout bij zetten profiel budgethouder "'
|
||
|| rec_budgh.imp_perslid_nr
|
||
|| '" voor KPN "'
|
||
|| rec_budgh.prs_kostenplaats_nr
|
||
|| '" ';
|
||
|
||
-- Mandaatcode bepaalt welk profiel een budgethouder heeft
|
||
-- *lege mandaatcode --> E500,- ('Budgethouder 500', key 81)
|
||
-- *code '23bd' --> E500,-
|
||
-- *code '23m' --> E500,-
|
||
-- *overige codes --> E7000,- ('Budgethouder', key 22)
|
||
--UPDATE prs_perslid
|
||
-- SET fac_profiel_key =
|
||
-- DECODE (rec_budgh.imp_mandaatcode,
|
||
-- NULL, 81,
|
||
-- '23bd', 81,
|
||
-- '23m', 81,
|
||
-- 22)
|
||
-- WHERE prs_perslid_key = rec_budgh.prs_perslid_key;
|
||
--UWVA#36421: Flexibel - via Eigen tabel met key=1342 - toekennen van profiel aan budgethouders, als
|
||
-- geen entry wordt gevonden, dan wordt profiel met key=81 toegekend!
|
||
UPDATE prs_perslid
|
||
SET fac_profiel_key = COALESCE ((SELECT MAX (fac.safe_to_number (ud.fac_usrdata_omschr))
|
||
FROM fac_v_aanwezigusrdata ud
|
||
WHERE ud.fac_usrtab_key = 1342 AND ud.fac_usrdata_code = rec_budgh.imp_mandaatcode),
|
||
81)
|
||
WHERE prs_perslid_key = rec_budgh.prs_perslid_key;
|
||
|
||
-- UWVA#21163: Budgethouders ook mandaat geven op hun kostenplaats
|
||
-- Eerst kijken of er al een mandaat voor die kostenplaats is. Zoniet, dan toevoegen.
|
||
-- NB: bij een lege kostenplaats_key heeft de persoon al mandaat op alle kostenplaatsen!
|
||
v_errormsg :=
|
||
'Fout bij tellen mandaten van "'
|
||
|| rec_budgh.imp_perslid_nr
|
||
|| '" voor KPN "'
|
||
|| rec_budgh.prs_kostenplaats_nr
|
||
|| '" ';
|
||
|
||
SELECT COUNT ( * )
|
||
INTO v_count
|
||
FROM prs_perslidkostenplaats
|
||
WHERE prs_perslid_key = rec_budgh.prs_perslid_key
|
||
AND (prs_kostenplaats_key = rec_budgh.prs_kostenplaats_key
|
||
OR prs_kostenplaats_key IS NULL);
|
||
|
||
-- Nog geen mandaat --> toevoegen
|
||
IF (v_count = 0)
|
||
THEN
|
||
v_errormsg :=
|
||
'Fout bij toekennen mandaat voor KPN "'
|
||
|| rec_budgh.prs_kostenplaats_nr
|
||
|| '" aan budgethouder "'
|
||
|| rec_budgh.imp_perslid_nr
|
||
|| '"';
|
||
|
||
INSERT INTO prs_perslidkostenplaats (
|
||
prs_perslid_key,
|
||
prs_kostenplaats_key,
|
||
prs_perslidkostenplaats_boeken,
|
||
prs_perslidkostenplaats_inzage
|
||
)
|
||
VALUES (rec_budgh.prs_perslid_key,
|
||
rec_budgh.prs_kostenplaats_key,
|
||
1,
|
||
1);
|
||
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'I',
|
||
'Mandaat voor budgethouder "'
|
||
|| rec_budgh.imp_perslid_nr
|
||
|| '" op KPN "'
|
||
|| rec_budgh.prs_kostenplaats_nr
|
||
|| '"',
|
||
''
|
||
);
|
||
END IF;
|
||
|
||
-- UWVA#17365: Zorg dat alle budgethouders en alleen budgethouders in
|
||
-- de groep van budgethouders zit (1/2)
|
||
v_errormsg :=
|
||
'Fout bij toekennen budgethouder "'
|
||
|| rec_budgh.imp_perslid_nr
|
||
|| '" aan autorisatiegroep budgethouders ('
|
||
|| TO_CHAR (c_grp_budgh_key)
|
||
|| ')';
|
||
|
||
INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
|
||
SELECT c_grp_budgh_key, rec_budgh.prs_perslid_key
|
||
FROM DUAL
|
||
WHERE NOT EXISTS
|
||
(SELECT 'x'
|
||
FROM fac_gebruikersgroep
|
||
WHERE prs_perslid_key =
|
||
rec_budgh.prs_perslid_key
|
||
AND fac_groep_key = c_grp_budgh_key);
|
||
ELSE
|
||
-- Wel een budgethouder gegeven in importbestand (perslid_nr), maar
|
||
-- persoon niet gevonden in Facilitor (geen perslid_key).
|
||
IF (rec_budgh.imp_perslid_nr IS NOT NULL)
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Onbekende budgethouder "'
|
||
|| rec_budgh.imp_perslid_nr
|
||
|| '" bij kostenplaats '
|
||
|| rec_budgh.prs_kostenplaats_nr,
|
||
''
|
||
);
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errormsg := '';
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg :=
|
||
v_errormsg
|
||
|| ' (error '
|
||
|| oracle_err_num
|
||
|| '/'
|
||
|| oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_errormsg,
|
||
'');
|
||
END;
|
||
END LOOP;
|
||
|
||
FOR rec_kpnon IN c_kpn_onbekend
|
||
LOOP
|
||
BEGIN
|
||
v_errormsg :=
|
||
'Fout bij wijzigen kostenplaats "'
|
||
|| rec_kpnon.prs_kostenplaats_nr
|
||
|| '" met budgethouder "'
|
||
|| rec_kpnon.prs_perslid_nr
|
||
|| '": kostenplaats komt niet voor';
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_errormsg,
|
||
'');
|
||
v_errormsg := '';
|
||
END;
|
||
END LOOP;
|
||
|
||
SELECT COUNT ( * )
|
||
INTO nrbh1
|
||
FROM fac_gebruikersgroep
|
||
WHERE fac_groep_key = c_grp_budgh_key;
|
||
|
||
-- UWVA#17365: Zorg dat alle budgethouders en alleen budgethouders in
|
||
-- de groep van budgethouders zit (2/2)
|
||
DELETE FROM fac_gebruikersgroep
|
||
WHERE fac_groep_key = c_grp_budgh_key
|
||
AND prs_perslid_key NOT IN
|
||
(SELECT p.prs_perslid_key
|
||
FROM uwva_imp_kpn imp,
|
||
prs_v_aanwezigperslid p
|
||
WHERE p.prs_perslid_nr = imp.perslid_nr);
|
||
|
||
SELECT COUNT ( * )
|
||
INTO nrbh2
|
||
FROM fac_gebruikersgroep
|
||
WHERE fac_groep_key = c_grp_budgh_key;
|
||
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'S',
|
||
nrbh1 - nrbh2
|
||
|| ' budgethouder(s) uit autorisatiegroep '
|
||
|| TO_CHAR (c_grp_budgh_key)
|
||
|| ' verwijderd.',
|
||
''
|
||
);
|
||
-- Einde voormalige budgethoudersimport
|
||
END IF;
|
||
|
||
COMMIT;
|
||
|
||
-- Mooie plek om de telefoonnummers, faxnummers en mobiele nummers te formatteren.
|
||
uwva.format_telefoonnummers (p_import_key);
|
||
|
||
SELECT TO_CHAR ( SYSDATE, 'YYYYMMDDHH24MISS' )
|
||
INTO v_time
|
||
FROM DUAL;
|
||
fac.imp_writelog (p_import_key, 'S', 'Import voltooid', v_time);
|
||
|
||
COMMIT;
|
||
|
||
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 uwva_update_abs;
|
||
/
|
||
|
||
-- Persoonsgegevens met werknemertype, login en rollen (UWVA#18115)
|
||
CREATE OR REPLACE VIEW uwva_v_rap_prs_abs
|
||
(
|
||
fclt_f_type,
|
||
fclt_f_account,
|
||
persnr,
|
||
fclt_f_naam,
|
||
last_login,
|
||
aantal_rollen
|
||
)
|
||
AS
|
||
(SELECT COALESCE(emptype.fac_usrdata_omschr, '<geen type>'),
|
||
pers.prs_perslid_oslogin,
|
||
pers.prs_perslid_nr,
|
||
pers.prs_perslid_naam_full,
|
||
pers.prs_perslid_login,
|
||
TO_CHAR (0)
|
||
FROM ( (SELECT p.*, pf.prs_perslid_naam_full
|
||
FROM prs_v_perslid_fullnames_all pf, prs_perslid p
|
||
WHERE p.prs_perslid_key = pf.prs_perslid_key
|
||
AND p.prs_perslid_verwijder IS NULL) pers
|
||
LEFT OUTER JOIN
|
||
(SELECT p.prs_perslid_key, ud.fac_usrdata_omschr
|
||
FROM prs_perslid p,
|
||
prs_kenmerklink km,
|
||
fac_usrdata ud
|
||
WHERE p.prs_perslid_key = km.prs_link_key
|
||
AND km.prs_kenmerk_key = 1040
|
||
AND ud.fac_usrdata_key =
|
||
km.prs_kenmerklink_waarde
|
||
AND km.prs_kenmerklink_verwijder IS NULL
|
||
AND ud.fac_usrdata_verwijder IS NULL) emptype
|
||
ON pers.prs_perslid_key = emptype.prs_perslid_key) );
|
||
|
||
-- Inhoud eigen tabel pandcodes (UWVA#18115)
|
||
CREATE OR REPLACE VIEW uwva_v_rap_abs_pandcodes
|
||
(
|
||
key,
|
||
fclt_f_locatie,
|
||
fclt_f_pandcode
|
||
)
|
||
AS
|
||
(SELECT TO_CHAR (fac_usrdata_key), fac_usrdata_omschr, fac_usrdata_code
|
||
FROM fac_usrdata
|
||
WHERE fac_usrtab_key = 1
|
||
AND fac_usrdata_verwijder IS NULL);
|
||
|
||
COMMIT;
|
||
|
||
-- *** Oude PVIEW-rapportages, maar nu in een ABS-jasje ***
|
||
|
||
-- Toon verplichtingen van de personen die vervallen zijn volgens abs.
|
||
CREATE OR REPLACE VIEW uwva_v_imp_abs_01_verpl
|
||
(
|
||
fclt_f_servicepunt,
|
||
fclt_f_locatie,
|
||
personeelsnr,
|
||
prs_perslid_naam,
|
||
omschrijving,
|
||
verplichting,
|
||
fclt_3d_locatie_key
|
||
)
|
||
AS
|
||
SELECT di.alg_district_omschrijving fclt_f_servicepunt,
|
||
l.alg_locatie_code fclt_f_locatie,
|
||
p.prs_perslid_nr,
|
||
p.prs_perslid_naam,
|
||
COALESCE (t.fac_message_text, vp.fac_message_code) omschrijving,
|
||
vp.item verplichting,
|
||
vp.locatie_key
|
||
FROM prs_v_aanwezigperslid p,
|
||
prs_v_verplichting vp,
|
||
alg_locatie l,
|
||
alg_district di,
|
||
fac_message t
|
||
WHERE p.prs_perslid_naam LIKE 'INACTIEF:%'
|
||
AND p.prs_perslid_key = vp.prs_perslid_key
|
||
AND vp.locatie_key = l.alg_locatie_key
|
||
AND l.alg_district_key = di.alg_district_key
|
||
AND vp.fac_message_code = t.fac_message_code(+);
|
||
|
||
|
||
-- Personen die bij de laatste import zijn verwijderd (o.b.v. prs_perslid_verwijder).
|
||
CREATE OR REPLACE VIEW uwva_v_imp_abs_02_verwijderd
|
||
(
|
||
fclt_f_personeelsnummer,
|
||
fclt_f_naam,
|
||
fclt_3d_locatie_key,
|
||
fclt_f_locatie,
|
||
fclt_f_afdeling,
|
||
verwijderd,
|
||
key
|
||
)
|
||
AS
|
||
SELECT p.prs_perslid_nr,
|
||
pf.prs_perslid_naam_full,
|
||
l.alg_locatie_key,
|
||
l.alg_locatie_code,
|
||
d.prs_afdeling_naam,
|
||
TO_CHAR (p.prs_perslid_verwijder, 'YYYY-MM-DD') verwijderd,
|
||
TO_CHAR (p.prs_perslid_key)
|
||
FROM prs_perslid p,
|
||
prs_v_perslid_fullnames_all pf,
|
||
prs_afdeling d,
|
||
prs_v_werkplek_gegevens w,
|
||
prs_perslidwerkplek pw,
|
||
alg_locatie l
|
||
WHERE p.prs_perslid_nr IS NOT NULL
|
||
AND p.prs_perslid_key = pf.prs_perslid_key
|
||
AND w.prs_werkplek_key(+) = pw.prs_werkplek_key
|
||
AND p.prs_perslid_key = pw.prs_perslid_key(+)
|
||
AND w.alg_locatie_key = l.alg_locatie_key(+)
|
||
AND d.prs_afdeling_key(+) = p.prs_afdeling_key
|
||
AND SYSDATE - p.prs_perslid_verwijder < 31;
|
||
|
||
-- Personen die bij de laatste import zijn toegevoegd (o.b.v. prs_perslid_aanmaak).
|
||
CREATE OR REPLACE VIEW uwva_v_imp_abs_03_toegevoegd
|
||
(
|
||
fclt_f_personeelsnummer,
|
||
fclt_f_naam,
|
||
fclt_f_afdeling,
|
||
aanmaak,
|
||
key
|
||
)
|
||
AS
|
||
SELECT p.prs_perslid_nr,
|
||
pf.prs_perslid_naam_full,
|
||
d.prs_afdeling_naam,
|
||
TO_CHAR (p.prs_perslid_aanmaak, 'YYYY-MM-DD') aanmaak,
|
||
TO_CHAR(p.prs_perslid_key)
|
||
FROM prs_v_aanwezigperslid p,
|
||
prs_v_perslid_fullnames_all pf,
|
||
prs_afdeling d
|
||
WHERE p.prs_perslid_nr IS NOT NULL
|
||
AND d.prs_afdeling_key = p.prs_afdeling_key
|
||
AND SYSDATE - p.prs_perslid_aanmaak < 31;
|
||
|
||
-- Onbekende pandcodes in de importfile, met aantal personen
|
||
CREATE OR REPLACE VIEW uwva_v_abs_05_pponbekendloc
|
||
(
|
||
locatiecode,
|
||
aantal_personen
|
||
)
|
||
AS
|
||
SELECT ab.pandcode, COUNT (*)
|
||
FROM uwva_imp_abs ab
|
||
WHERE ab.pandcode IS NOT NULL
|
||
AND NOT EXISTS (SELECT 'x'
|
||
FROM fac_usrdata fu
|
||
WHERE ab.pandcode = fu.fac_usrdata_code)
|
||
GROUP BY ab.pandcode;
|
||
|
||
---- Personen die geimporteerd worden maar die ondertussen handmatig zijn verwijderd UWVA#679 (OBSOLETE?)
|
||
--CREATE OR REPLACE VIEW uwva_v_imp_abs_06_verwijderd
|
||
--(
|
||
-- fclt_f_personeelsnr,
|
||
-- naam,
|
||
-- voorletters,
|
||
-- fclt_3d_locatie_key,
|
||
-- fclt_f_locatie,
|
||
-- verwijderdatum,
|
||
-- importdatum,
|
||
-- KEY
|
||
--)
|
||
--AS
|
||
-- SELECT p.prs_perslid_nr, p.prs_perslid_naam, p.prs_perslid_voorletters,
|
||
-- l.alg_locatie_key, l.alg_locatie_code,
|
||
-- p.prs_perslid_verwijder verwijderdatum,
|
||
-- ab.uwva_imp_abs_aanmaak importdatum,
|
||
-- p.prs_perslid_key
|
||
-- FROM prs_perslid p,
|
||
-- uwva_imp_abs ab,
|
||
-- prs_v_werkplek_gegevens w,
|
||
-- prs_perslidwerkplek pw,
|
||
-- alg_locatie l
|
||
-- WHERE p.prs_perslid_nr = ab.empnum
|
||
-- AND p.prs_perslid_verwijder IS NOT NULL
|
||
-- AND w.prs_werkplek_key(+) = pw.prs_werkplek_key
|
||
-- AND p.prs_perslid_key = pw.prs_perslid_key(+)
|
||
-- AND w.alg_locatie_key = l.alg_locatie_key(+)
|
||
-- ORDER BY p.prs_perslid_verwijder DESC;
|
||
|
||
-- Verwijderde personen per SP en per pand (UWVA#12158)
|
||
CREATE OR REPLACE VIEW uwva_v_imp_abs_07_verwijderd
|
||
AS
|
||
SELECT d.alg_district_omschrijving fclt_f_servicepunt,
|
||
g.alg_gebouw_omschrijving gebouw,
|
||
l.imp_log_omschrijving fclt_f_medewerker,
|
||
TO_CHAR (MIN(l.imp_log_datum), 'YYYY-MM-DD') datum,
|
||
l.imp_log_hint fclt_3d_gebouw_key
|
||
FROM IMP_LOG l, ALG_GEBOUW g, ALG_LOCATIE ll, ALG_DISTRICT d
|
||
WHERE l.imp_log_applicatie = 'ABS0'
|
||
AND l.imp_log_hint = g.alg_gebouw_key
|
||
AND g.alg_locatie_key = ll.alg_locatie_key
|
||
AND ll.alg_district_key = d.alg_district_key
|
||
GROUP BY d.alg_district_omschrijving, g.alg_gebouw_omschrijving, l.imp_log_omschrijving, l.imp_log_hint;
|
||
|
||
|
||
CREATE OR REPLACE VIEW uwva_v_export_vinderdump (result, result_order)
|
||
AS
|
||
SELECT '"volledige naam";' ||
|
||
'"achternaam";' ||
|
||
'"tussenvoegsel";' ||
|
||
'"voorletters";' ||
|
||
'"voornaam";' ||
|
||
'"divisie";' ||
|
||
'"afdeling";' ||
|
||
'"functie";' ||
|
||
'"alt_divisie";' ||
|
||
'"alt_afdeling";' ||
|
||
'"alt_functie";' ||
|
||
'"persoonsnr";' ||
|
||
'"account";' ||
|
||
'"werknemertype";' ||
|
||
'"regio";' ||
|
||
'"locatie";' ||
|
||
'"gebouw";' ||
|
||
'"verdieping";' ||
|
||
'"ruimte";' ||
|
||
'"e-mail";' ||
|
||
'"telefoon";' ||
|
||
'"mobiel";' ||
|
||
'"faxnummer";' ||
|
||
'"maandag";' ||
|
||
'"dinsdag";' ||
|
||
'"woensdag";' ||
|
||
'"donderdag";' ||
|
||
'"vrijdag";' ||
|
||
'"geslacht";' ||
|
||
'"toon in gids"' result,
|
||
0 result_order
|
||
FROM DUAL
|
||
UNION ALL
|
||
SELECT '"' || prs_perslid_naam_full || '";"' ||
|
||
prs_perslid_naam || '";"' ||
|
||
prs_perslid_tussenvoegsel || '";"' ||
|
||
prs_perslid_voorletters || '";"' ||
|
||
prs_perslid_voornaam || '";"' ||
|
||
divisie || '";"' ||
|
||
afdeling || '";"' ||
|
||
prs_srtperslid_omschrijving || '";"' ||
|
||
alt_divisie || '";"' ||
|
||
alt_afdeling || '";"' ||
|
||
alt_functie || '";"' ||
|
||
prs_perslid_nr || '";"' ||
|
||
prs_perslid_oslogin || '";"' ||
|
||
emptype || '";"' ||
|
||
regio || '";"' ||
|
||
alg_locatie_code || '";"' ||
|
||
alg_gebouw_code || '";"' ||
|
||
alg_verdieping_code || '";"' ||
|
||
alg_ruimte_nr || '";"' ||
|
||
prs_perslid_email || '";"' ||
|
||
prs_perslid_telefoonnr || '";"' ||
|
||
prs_perslid_mobiel || '";"' ||
|
||
faxnr || '";"' ||
|
||
maandag || '";"' ||
|
||
dinsdag || '";"' ||
|
||
woensdag || '";"' ||
|
||
donderdag || '";"' ||
|
||
vrijdag || '";"' ||
|
||
DECODE (prs_perslid_geslacht, 0, 'V', 1, 'M', 'O') || '";"' ||
|
||
DECODE (prs_perslid_ingids, 0, 'Nee', 1, 'Ja', 'O') || '"' result,
|
||
1 result_order
|
||
FROM (SELECT apl.*,
|
||
wpg.*,
|
||
pfn.prs_perslid_naam_full,
|
||
afd.prs_afdeling_naam6 afdeling,
|
||
div.prs_afdeling_naam6 divisie,
|
||
aspl.prs_srtperslid_omschrijving
|
||
FROM prs_v_aanwezigperslid apl,
|
||
prs_v_perslid_fullnames pfn,
|
||
prs_v_aanwezigafdeling afd,
|
||
prs_v_afdeling_boom ab,
|
||
prs_v_aanwezigafdeling div,
|
||
prs_v_aanwezigsrtperslid aspl,
|
||
prs_v_hoofdperslidwerkplek hpwp,
|
||
prs_v_werkplek_gegevens wpg
|
||
WHERE pfn.prs_perslid_key = apl.prs_perslid_key
|
||
AND apl.prs_afdeling_key = afd.prs_afdeling_key
|
||
AND afd.prs_afdeling_key = ab.prs_afdeling_key
|
||
AND ab.prs_afdeling_key1 = div.prs_afdeling_key
|
||
AND apl.prs_srtperslid_key = aspl.prs_srtperslid_key
|
||
AND apl.prs_perslid_key = hpwp.prs_perslid_key(+)
|
||
AND hpwp.prs_werkplek_key = wpg.prs_werkplek_key(+)
|
||
ORDER BY prs_perslid_ingids, prs_perslid_naam_full, prs_perslid_nr) pl
|
||
--1040 = Type Medewerker (R)
|
||
-- 301 = Type_medewerker (fac_usrtab)
|
||
LEFT OUTER JOIN (SELECT prs_link_key, fac_usrdata_omschr emptype
|
||
FROM fac_usrdata, prs_kenmerklink
|
||
WHERE fac_usrtab_key = 301
|
||
AND prs_kenmerk_key = 1040
|
||
AND prs_kenmerklink_waarde = fac_usrdata_key
|
||
AND fac_usrdata_verwijder IS NULL
|
||
AND prs_kenmerklink_verwijder IS NULL) f1
|
||
ON pl.prs_perslid_key = f1.prs_link_key
|
||
--1193 = Regio (R)
|
||
-- 783 = RegioVinder (fac_usrtab)
|
||
LEFT OUTER JOIN (SELECT prs_link_key, fac_usrdata_omschr regio
|
||
FROM fac_usrdata, prs_kenmerklink
|
||
WHERE fac_usrtab_key = 783
|
||
AND prs_kenmerk_key = 1193
|
||
AND prs_kenmerklink_waarde = fac_usrdata_key
|
||
AND fac_usrdata_verwijder IS NULL
|
||
AND prs_kenmerklink_verwijder IS NULL) f2
|
||
ON pl.prs_perslid_key = f2.prs_link_key
|
||
--1173 = Alternatieve afdeling (S)
|
||
LEFT OUTER JOIN (SELECT prs_link_key,
|
||
afd.prs_afdeling_naam6 alt_afdeling,
|
||
div.prs_afdeling_naam6 alt_divisie
|
||
FROM prs_kenmerklink,
|
||
prs_v_aanwezigafdeling afd,
|
||
prs_v_afdeling_boom ab,
|
||
prs_v_aanwezigafdeling div
|
||
WHERE prs_kenmerk_key = 1173
|
||
AND afd.prs_afdeling_key = fac.safe_to_number(prs_kenmerklink_waarde)
|
||
AND ab.prs_afdeling_key = afd.prs_afdeling_key
|
||
AND div.prs_afdeling_key = ab.prs_afdeling_key1
|
||
AND prs_kenmerklink_verwijder IS NULL) f3
|
||
ON pl.prs_perslid_key = f3.prs_link_key
|
||
--1192 = Alternatieve functie (S)
|
||
LEFT OUTER JOIN (SELECT prs_link_key,
|
||
prs_srtperslid_omschrijving alt_functie
|
||
FROM prs_kenmerklink, prs_v_aanwezigsrtperslid
|
||
WHERE prs_kenmerk_key = 1192
|
||
AND prs_srtperslid_key = prs_kenmerklink_waarde
|
||
AND prs_kenmerklink_verwijder IS NULL) f4
|
||
ON pl.prs_perslid_key = f4.prs_link_key
|
||
-- 7 = Faxnr (C)
|
||
LEFT OUTER JOIN (SELECT prs_link_key, prs_kenmerklink_waarde faxnr
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 7
|
||
AND prs_kenmerklink_verwijder IS NULL) f7
|
||
ON pl.prs_perslid_key = f7.prs_link_key
|
||
--1163 = Maandag (R)
|
||
-- 761 = AanwezigOp (fac_usrtab)
|
||
LEFT OUTER JOIN (SELECT prs_link_key, fac_usrdata_omschr maandag
|
||
FROM fac_usrdata, prs_kenmerklink
|
||
WHERE fac_usrtab_key = 761
|
||
AND prs_kenmerk_key = 1163
|
||
AND prs_kenmerklink_waarde = fac_usrdata_key
|
||
AND fac_usrdata_verwijder IS NULL
|
||
AND prs_kenmerklink_verwijder IS NULL) f8
|
||
ON pl.prs_perslid_key = f8.prs_link_key
|
||
--1164 = Dinsdag (R)
|
||
-- 761 = AanwezigOp (fac_usrtab)
|
||
LEFT OUTER JOIN (SELECT prs_link_key, fac_usrdata_omschr dinsdag
|
||
FROM fac_usrdata, prs_kenmerklink
|
||
WHERE fac_usrtab_key = 761
|
||
AND prs_kenmerk_key = 1164
|
||
AND prs_kenmerklink_waarde = fac_usrdata_key
|
||
AND fac_usrdata_verwijder IS NULL
|
||
AND prs_kenmerklink_verwijder IS NULL) f9
|
||
ON pl.prs_perslid_key = f9.prs_link_key
|
||
--1165 = Woensdag (R)
|
||
-- 761 = AanwezigOp (fac_usrtab)
|
||
LEFT OUTER JOIN (SELECT prs_link_key, fac_usrdata_omschr woensdag
|
||
FROM fac_usrdata, prs_kenmerklink
|
||
WHERE fac_usrtab_key = 761
|
||
AND prs_kenmerk_key = 1165
|
||
AND prs_kenmerklink_waarde = fac_usrdata_key
|
||
AND fac_usrdata_verwijder IS NULL
|
||
AND prs_kenmerklink_verwijder IS NULL) f10
|
||
ON pl.prs_perslid_key = f10.prs_link_key
|
||
--1166 = Donderdag (R)
|
||
-- 761 = AanwezigOp (fac_usrtab)
|
||
LEFT OUTER JOIN (SELECT prs_link_key, fac_usrdata_omschr donderdag
|
||
FROM fac_usrdata, prs_kenmerklink
|
||
WHERE fac_usrtab_key = 761
|
||
AND prs_kenmerk_key = 1166
|
||
AND prs_kenmerklink_waarde = fac_usrdata_key
|
||
AND fac_usrdata_verwijder IS NULL
|
||
AND prs_kenmerklink_verwijder IS NULL) f11
|
||
ON pl.prs_perslid_key = f11.prs_link_key
|
||
--1167 = Vrijdag (R)
|
||
-- 761 = AanwezigOp (fac_usrtab)
|
||
LEFT OUTER JOIN (SELECT prs_link_key, fac_usrdata_omschr vrijdag
|
||
FROM fac_usrdata, prs_kenmerklink
|
||
WHERE fac_usrtab_key = 761
|
||
AND prs_kenmerk_key = 1167
|
||
AND prs_kenmerklink_waarde = fac_usrdata_key
|
||
AND fac_usrdata_verwijder IS NULL
|
||
AND prs_kenmerklink_verwijder IS NULL) f12
|
||
ON pl.prs_perslid_key = f12.prs_link_key;
|
||
|
||
|
||
-- View voor phonebook, met contactgegevens per afdeling
|
||
CREATE OR REPLACE VIEW uwva_v_rap_afd_contact
|
||
(
|
||
fclt_f_afdeling,
|
||
fclt_f_telefoonnummer,
|
||
fclt_f_emailadres,
|
||
fclt_3d_afdeling_key
|
||
)
|
||
AS
|
||
SELECT afdeling,
|
||
telefoonnummer,
|
||
mail,
|
||
prs_afdeling_key
|
||
FROM (SELECT afd.prs_afdeling_naam6 afdeling,
|
||
kml_tel.prs_kenmerklink_waarde telefoonnummer,
|
||
kml_mail.prs_kenmerklink_waarde mail,
|
||
afd.prs_afdeling_key
|
||
FROM prs_v_aanwezigafdeling afd,
|
||
prs_kenmerklink kml_tel,
|
||
prs_kenmerklink kml_mail
|
||
WHERE kml_tel.prs_link_key(+) = afd.prs_afdeling_key
|
||
AND kml_mail.prs_link_key(+) = afd.prs_afdeling_key
|
||
AND kml_tel.prs_kenmerk_key(+) = 1212 --PROD
|
||
AND kml_mail.prs_kenmerk_key(+) = 1213) --PROD
|
||
WHERE telefoonnummer IS NOT NULL OR mail IS NOT NULL;
|
||
|
||
|
||
-- UWVA#19010: Importfuncties voor provisioning met ABS
|
||
-- (mapping van ABS-rollen op Facilitor authorisatiegroepen en profielen)
|
||
CREATE OR REPLACE PROCEDURE uwva_import_rolprofiel (p_import_key IN NUMBER)
|
||
AS
|
||
CURSOR c1
|
||
IS
|
||
SELECT *
|
||
FROM fac_imp_file
|
||
WHERE fac_import_key = p_import_key
|
||
ORDER BY fac_imp_file_index;
|
||
|
||
v_newline VARCHAR2 (1000); -- Import line
|
||
v_field VARCHAR2 (100); -- Import field
|
||
v_fielddelimitor VARCHAR2 (1) := ';'; -- Field seperator
|
||
v_count_import NUMBER (10);
|
||
v_count NUMBER;
|
||
v_errormsg VARCHAR2 (200);
|
||
v_errorhint VARCHAR2 (200);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_buffercount NUMBER := 0;
|
||
c_commitbuffer NUMBER := 5; -- om de zoveel committen
|
||
-- De importvelden
|
||
v_rol VARCHAR2 (100);
|
||
v_profiel VARCHAR2 (100);
|
||
header_found BOOLEAN := FALSE;
|
||
BEGIN
|
||
-- Clear my previous imported rows
|
||
DELETE FROM uwva_imp_provisioning;
|
||
|
||
v_count_import := 0;
|
||
|
||
FOR rec1 IN c1
|
||
LOOP
|
||
BEGIN
|
||
v_newline := rec1.fac_imp_file_line;
|
||
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_rol); -- rol
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_profiel); -- profiel
|
||
|
||
-- Skip until the header is found
|
||
IF (header_found = FALSE)
|
||
THEN
|
||
IF UPPER (v_rol) = 'ROL'
|
||
AND UPPER (v_profiel) = 'PROFIELNAAM'
|
||
THEN
|
||
header_found := TRUE;
|
||
END IF;
|
||
ELSE
|
||
INSERT INTO uwva_imp_provisioning (rol,
|
||
naam)
|
||
VALUES (SUBSTR ( TRIM (v_rol), 1, 50),
|
||
SUBSTR ( TRIM (v_profiel), 1, 30));
|
||
|
||
v_count_import := v_count_import + 1;
|
||
END IF;
|
||
|
||
-- Elke c_commitbuffer regels committen
|
||
v_buffercount := v_buffercount + 1;
|
||
IF (v_buffercount >= c_commitbuffer)
|
||
THEN
|
||
COMMIT;
|
||
v_buffercount := 0;
|
||
END IF;
|
||
END;
|
||
END LOOP;
|
||
|
||
IF (header_found = FALSE)
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
'Ongeldig importbestand',
|
||
'Geen header of header niet volgens specificatie!'
|
||
);
|
||
ELSE
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Aantal ingelezen regels: '
|
||
|| TO_CHAR (v_count_import),
|
||
''
|
||
);
|
||
END IF;
|
||
|
||
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,
|
||
'W',
|
||
v_errormsg,
|
||
'');
|
||
END;
|
||
/
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE uwva_import_rolgroep (p_import_key IN NUMBER)
|
||
AS
|
||
CURSOR c1
|
||
IS
|
||
SELECT *
|
||
FROM fac_imp_file
|
||
WHERE fac_import_key = p_import_key
|
||
ORDER BY fac_imp_file_index;
|
||
|
||
v_newline VARCHAR2 (1000); -- Import line
|
||
v_field VARCHAR2 (100); -- Import field
|
||
v_fielddelimitor VARCHAR2 (1) := ';'; -- Field seperator
|
||
v_count_import NUMBER (10);
|
||
v_count NUMBER;
|
||
v_errormsg VARCHAR2 (200);
|
||
v_errorhint VARCHAR2 (200);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_buffercount NUMBER := 0;
|
||
c_commitbuffer NUMBER := 5; -- om de zoveel committen
|
||
-- De importvelden
|
||
v_rol VARCHAR2 (100);
|
||
v_groep VARCHAR2 (100);
|
||
header_found BOOLEAN := FALSE;
|
||
BEGIN
|
||
-- Clear my previous imported rows
|
||
DELETE FROM uwva_imp_provisioning;
|
||
|
||
v_count_import := 0;
|
||
|
||
FOR rec1 IN c1
|
||
LOOP
|
||
BEGIN
|
||
v_newline := rec1.fac_imp_file_line;
|
||
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_rol); -- rol
|
||
fac.imp_getfield (v_newline, v_fielddelimitor, v_groep); -- groep
|
||
|
||
-- Skip until the header is found
|
||
IF (header_found = FALSE)
|
||
THEN
|
||
IF UPPER (v_rol) = 'ROL'
|
||
AND UPPER (v_groep) = 'AUTHORISATIEGROEPNAAM'
|
||
THEN
|
||
header_found := TRUE;
|
||
END IF;
|
||
ELSE
|
||
INSERT INTO uwva_imp_provisioning (rol,
|
||
naam)
|
||
VALUES (SUBSTR ( TRIM (v_rol), 1, 50),
|
||
SUBSTR ( TRIM (v_groep), 1, 30));
|
||
|
||
v_count_import := v_count_import + 1;
|
||
END IF;
|
||
|
||
-- Elke c_commitbuffer regels committen
|
||
v_buffercount := v_buffercount + 1;
|
||
IF (v_buffercount >= c_commitbuffer)
|
||
THEN
|
||
COMMIT;
|
||
v_buffercount := 0;
|
||
END IF;
|
||
END;
|
||
END LOOP;
|
||
|
||
IF (header_found = FALSE)
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
'Ongeldig importbestand',
|
||
'Geen header of header niet volgens specificatie!'
|
||
);
|
||
ELSE
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Aantal ingelezen regels: '
|
||
|| TO_CHAR (v_count_import),
|
||
''
|
||
);
|
||
END IF;
|
||
|
||
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,
|
||
'W',
|
||
v_errormsg,
|
||
'');
|
||
END;
|
||
/
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE uwva_update_rolprofiel (p_import_key IN NUMBER)
|
||
AS
|
||
-- Constanten
|
||
c_num_rows NUMBER := 10;
|
||
c_maxvariation NUMBER := 20;
|
||
c_commitbuffer NUMBER := 5;
|
||
-- om de zoveel committen
|
||
v_buffercount NUMBER := 0;
|
||
|
||
CURSOR c_rol
|
||
IS
|
||
SELECT rol,
|
||
naam
|
||
FROM uwva_imp_provisioning
|
||
WHERE naam IS NOT NULL;
|
||
|
||
v_rol_omschr VARCHAR2 (100);
|
||
recl c_rol%ROWTYPE;
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_errormsg VARCHAR2 (1024);
|
||
v_errorhint VARCHAR2 (1024);
|
||
v_count NUMBER (10);
|
||
v_update BOOLEAN;
|
||
v_aktie VARCHAR (10);
|
||
currentversion fac_module.fac_module_version%TYPE;
|
||
|
||
v_rol_naam VARCHAR2 (100);
|
||
v_profiel_key NUMBER (10);
|
||
|
||
BEGIN
|
||
-- Init
|
||
SELECT MAX (fac_module_version)
|
||
INTO currentversion
|
||
FROM fac_module;
|
||
|
||
-- Zinnige data in importbestand?
|
||
SELECT COUNT(*)
|
||
INTO v_count
|
||
FROM uwva_imp_provisioning
|
||
WHERE naam IS NOT NULL;
|
||
|
||
IF (v_count = 0)
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
'Importtabel is leeg!',
|
||
currentversion || ', $Revision$'
|
||
);
|
||
RETURN;
|
||
END IF;
|
||
|
||
-- Huidige mappings rol-->profiel verwijderen (dus alle regels zonder fac_groep_key)
|
||
SELECT COUNT(*)
|
||
INTO v_count
|
||
FROM uwva_provisioning
|
||
WHERE fac_groep_key IS NULL;
|
||
|
||
DELETE FROM uwva_provisioning
|
||
WHERE fac_groep_key IS NULL;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Provisioning-tabel (profielen): ' || v_count || ' regels verwijderd',
|
||
currentversion || ', $Revision$'
|
||
);
|
||
|
||
-- *** Rol-->Profiel ****************************************************************************
|
||
FOR recl IN c_rol
|
||
LOOP
|
||
BEGIN
|
||
v_errormsg := 'Zoek groep';
|
||
|
||
v_rol_omschr := 'Rol/Profiel: '
|
||
|| recl.rol
|
||
|| '/' || recl.naam;
|
||
|
||
v_update := TRUE;
|
||
|
||
-- Bestaat profiel in fac_profiel?
|
||
SELECT COUNT(*)
|
||
INTO v_count
|
||
FROM fac_profiel
|
||
WHERE UPPER(fac_profiel_omschrijving) = UPPER(recl.naam);
|
||
|
||
-- Nee --> error
|
||
IF (v_count = 0)
|
||
THEN
|
||
v_update := FALSE;
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
'Profiel "' || recl.naam || '" bestaat niet!',
|
||
v_rol_omschr
|
||
);
|
||
ELSIF (v_count > 1)
|
||
THEN
|
||
v_update := FALSE;
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Kan profiel "' || recl.naam || '" niet uniek bepalen!',
|
||
v_rol_omschr
|
||
);
|
||
END IF;
|
||
|
||
IF (v_update)
|
||
THEN
|
||
v_errormsg := 'Key profiel ophalen';
|
||
-- Haal profiel_key op uit fac_profiel
|
||
SELECT fac_profiel_key
|
||
INTO v_profiel_key
|
||
FROM fac_profiel
|
||
WHERE UPPER(fac_profiel_omschrijving) = UPPER(recl.naam);
|
||
|
||
v_errormsg := 'Toevoegen rol-->profiel';
|
||
-- Voeg rol-->profiel toe aan uwva_provisioning
|
||
INSERT INTO uwva_provisioning
|
||
(uwva_rol_omschr,
|
||
fac_profiel_key,
|
||
fac_groep_key)
|
||
VALUES (recl.rol,
|
||
v_profiel_key,
|
||
NULL);
|
||
END IF;
|
||
|
||
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, 'W', v_errormsg, v_errorhint);
|
||
END;
|
||
END LOOP;
|
||
|
||
SELECT COUNT(*)
|
||
INTO v_count
|
||
FROM uwva_provisioning
|
||
WHERE fac_groep_key IS NULL;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Provisioning-tabel (profielen): ' || v_count || ' regels toegevoegd',
|
||
currentversion || ', $Revision$'
|
||
);
|
||
|
||
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, 'W', v_errormsg, v_errorhint);
|
||
END;
|
||
/
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE uwva_update_rolgroep (p_import_key IN NUMBER)
|
||
AS
|
||
-- Constanten
|
||
c_num_rows NUMBER := 10;
|
||
c_maxvariation NUMBER := 20;
|
||
c_commitbuffer NUMBER := 5;
|
||
-- om de zoveel committen
|
||
v_buffercount NUMBER := 0;
|
||
|
||
CURSOR c_rol
|
||
IS
|
||
SELECT rol,
|
||
naam
|
||
FROM uwva_imp_provisioning
|
||
WHERE naam IS NOT NULL;
|
||
|
||
v_rol_omschr VARCHAR2 (100);
|
||
recl c_rol%ROWTYPE;
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_errormsg VARCHAR2 (1024);
|
||
v_errorhint VARCHAR2 (1024);
|
||
v_count NUMBER (10);
|
||
v_update BOOLEAN;
|
||
v_aktie VARCHAR (10);
|
||
currentversion fac_module.fac_module_version%TYPE;
|
||
|
||
v_rol_naam VARCHAR2 (100);
|
||
v_groep_key NUMBER (10);
|
||
|
||
BEGIN
|
||
-- Init
|
||
SELECT MAX (fac_module_version)
|
||
INTO currentversion
|
||
FROM fac_module;
|
||
|
||
-- Zinnige data in importbestand?
|
||
SELECT COUNT(*)
|
||
INTO v_count
|
||
FROM uwva_imp_provisioning
|
||
WHERE naam IS NOT NULL;
|
||
|
||
IF (v_count = 0)
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
'Importtabel is leeg!',
|
||
currentversion || ', $Revision$'
|
||
);
|
||
RETURN;
|
||
END IF;
|
||
|
||
-- Huidige mappings rol-->groep verwijderen (dus alle regels zonder fac_groep_key)
|
||
SELECT COUNT(*)
|
||
INTO v_count
|
||
FROM uwva_provisioning
|
||
WHERE fac_profiel_key IS NULL;
|
||
|
||
DELETE FROM uwva_provisioning
|
||
WHERE fac_profiel_key IS NULL;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Provisioning-tabel (groepen): ' || v_count || ' regels verwijderd',
|
||
currentversion || ', $Revision$'
|
||
);
|
||
|
||
-- *** Rol-->Groep ****************************************************************************
|
||
FOR recl IN c_rol
|
||
LOOP
|
||
BEGIN
|
||
v_errormsg := 'Zoek groep';
|
||
|
||
v_rol_omschr := 'Rol/Groep: '
|
||
|| recl.rol
|
||
|| '/' || recl.naam;
|
||
|
||
v_update := TRUE;
|
||
|
||
-- Bestaat groep in fac_groep?
|
||
SELECT COUNT(*)
|
||
INTO v_count
|
||
FROM fac_groep
|
||
WHERE UPPER(fac_groep_omschrijving) = UPPER(recl.naam);
|
||
|
||
-- Nee --> error
|
||
IF (v_count = 0)
|
||
THEN
|
||
v_update := FALSE;
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
'Groep "' || recl.naam || '" bestaat niet!',
|
||
v_rol_omschr
|
||
);
|
||
ELSIF (v_count > 1)
|
||
THEN
|
||
v_update := FALSE;
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Kan groep "' || recl.naam || '" niet uniek bepalen!',
|
||
v_rol_omschr
|
||
);
|
||
END IF;
|
||
|
||
IF (v_update)
|
||
THEN
|
||
v_errormsg := 'Key groep ophalen';
|
||
-- Haal groep_key op uit fac_groep
|
||
SELECT fac_groep_key
|
||
INTO v_groep_key
|
||
FROM fac_groep
|
||
WHERE UPPER(fac_groep_omschrijving) = UPPER(recl.naam);
|
||
|
||
v_errormsg := 'Toevoegen rol-->groep';
|
||
-- Voeg rol-->groep toe aan uwva_provisioning
|
||
INSERT INTO uwva_provisioning
|
||
(uwva_rol_omschr,
|
||
fac_profiel_key,
|
||
fac_groep_key)
|
||
VALUES (recl.rol,
|
||
NULL,
|
||
v_groep_key);
|
||
END IF;
|
||
|
||
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, 'W', v_errormsg, v_errorhint);
|
||
END;
|
||
END LOOP;
|
||
|
||
SELECT COUNT(*)
|
||
INTO v_count
|
||
FROM uwva_provisioning
|
||
WHERE fac_profiel_key IS NULL;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Provisioning-tabel (groepen): ' || v_count || ' regels toegevoegd',
|
||
currentversion || ', $Revision$'
|
||
);
|
||
|
||
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, 'W', v_errormsg, v_errorhint);
|
||
END;
|
||
/
|
||
|
||
|
||
CREATE OR REPLACE VIEW uwva_v_rap_provisioning
|
||
AS
|
||
SELECT up.uwva_rol_omschr fclt_f_rol,
|
||
fp.fac_profiel_omschrijving fclt_f_profiel,
|
||
fg.fac_groep_omschrijving fclt_f_authorisatiegroep
|
||
FROM uwva_provisioning up, fac_profiel fp, fac_groep fg
|
||
WHERE up.fac_profiel_key = fp.fac_profiel_key(+)
|
||
AND up.fac_groep_key = fg.fac_groep_key(+)
|
||
ORDER BY 1, 2, 3;
|
||
|
||
|
||
-- UWVA#21045: Vinder-export voor ABS
|
||
-- UWVA#24931: ABS-id met voorloopnullen
|
||
-- UWVA#40346: Toestel-kolom zomder data
|
||
CREATE OR REPLACE VIEW uwva_v_export_vinder2abs
|
||
(
|
||
RESULT,
|
||
result_order
|
||
)
|
||
AS
|
||
SELECT '"ABS-ID","Telefoon","Mobielnr","Toestel"', 0 FROM DUAL
|
||
UNION ALL
|
||
SELECT '"'
|
||
|| LPAD( kl1.prs_kenmerklink_waarde, 8, '0' )
|
||
|| '","'
|
||
|| p.prs_perslid_telefoonnr
|
||
|| '","'
|
||
|| p.prs_perslid_mobiel
|
||
|| '","'
|
||
|| '"',
|
||
1
|
||
FROM (SELECT *
|
||
FROM prs_perslid
|
||
WHERE prs_perslid_verwijder IS NULL) p
|
||
LEFT OUTER JOIN (SELECT *
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 1232) kl1
|
||
ON kl1.prs_link_key = p.prs_perslid_key;
|
||
|
||
|
||
-- UWVA#22892: Noti geschoond mandaat naar (onder)gemandateerde bij wijziging
|
||
-- van afdeling op basis van gegevens uit eigen tabel zoals gevuld
|
||
-- tijdens ABS-import (via rapportage), zo is dat!
|
||
/* Formatted on 12-6-2012 16:18:12 (QP5 v5.115.810.9015) */
|
||
CREATE OR REPLACE VIEW uwva_v_rap_geschoond_mandaat
|
||
(
|
||
hide_f_prs_key,
|
||
fclt_f_prs_naam_full,
|
||
cur_afd_naam,
|
||
cur_afd_oms,
|
||
cur_kpn_nr,
|
||
cur_kpn_oms,
|
||
old_afd_naam,
|
||
old_afd_oms,
|
||
old_kpn_nr,
|
||
old_kpn_oms,
|
||
hide_f_kpn_key,
|
||
kpn_nr,
|
||
kpn_oms,
|
||
kpn_boeken,
|
||
kpn_inzage,
|
||
budgethouder
|
||
)
|
||
AS
|
||
SELECT pf.prs_perslid_key,
|
||
pf.prs_perslid_naam_full,
|
||
cur_a.prs_afdeling_naam,
|
||
cur_a.prs_afdeling_omschrijving,
|
||
cur_k.prs_kostenplaats_nr,
|
||
cur_k.prs_kostenplaats_omschrijving,
|
||
old_a.prs_afdeling_naam,
|
||
old_a.prs_afdeling_omschrijving,
|
||
old_k.prs_kostenplaats_nr,
|
||
old_k.prs_kostenplaats_omschrijving,
|
||
k.prs_kostenplaats_key,
|
||
k.prs_kostenplaats_nr,
|
||
k.prs_kostenplaats_omschrijving,
|
||
ud.boeken,
|
||
ud.inzage,
|
||
bh.prs_perslid_naam_full
|
||
FROM (SELECT fac.safe_to_number(SUBSTR (
|
||
fac_usrdata_code,
|
||
1,
|
||
INSTR (fac_usrdata_code, '-') - 1
|
||
))
|
||
prs_perslid_key,
|
||
fac.safe_to_number (fac_usrdata_omschr)
|
||
prs_afdeling_key,
|
||
fac.safe_to_number(SUBSTR (
|
||
fac_usrdata_code,
|
||
INSTR (fac_usrdata_code, '-') + 1
|
||
))
|
||
prs_kostenplaats_key,
|
||
fac_usrdata_volgnr boeken,
|
||
fac_usrdata_prijs inzage
|
||
FROM fac_v_aanwezigusrdata
|
||
WHERE fac_usrtab_key = 3
|
||
AND TRUNC (fac_usrdata_aanmaak) = TRUNC (SYSDATE)) ud,
|
||
prs_v_aanwezigperslid p,
|
||
prs_v_perslid_fullnames_all pf,
|
||
prs_afdeling cur_a,
|
||
prs_afdeling old_a,
|
||
prs_kostenplaats cur_k,
|
||
prs_kostenplaats old_k,
|
||
prs_kostenplaats k,
|
||
prs_v_perslid_fullnames_all bh
|
||
WHERE ud.prs_perslid_key = p.prs_perslid_key
|
||
AND p.prs_perslid_key = pf.prs_perslid_key
|
||
AND p.prs_afdeling_key = cur_a.prs_afdeling_key
|
||
AND cur_a.prs_kostenplaats_key = cur_k.prs_kostenplaats_key(+)
|
||
AND ud.prs_afdeling_key = old_a.prs_afdeling_key
|
||
AND old_a.prs_kostenplaats_key = old_k.prs_kostenplaats_key(+)
|
||
AND ud.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
|
||
AND k.prs_perslid_key = bh.prs_perslid_key(+);
|
||
|
||
/* Formatted on 11-6-2012 15:26:45 (QP5 v5.115.810.9015) */
|
||
CREATE OR REPLACE VIEW uwva_v_noti_geschoond_mandaat
|
||
(
|
||
code,
|
||
sender,
|
||
receiver,
|
||
text,
|
||
KEY,
|
||
par1,
|
||
par2,
|
||
xkey
|
||
)
|
||
AS
|
||
SELECT DISTINCT
|
||
sn.fac_srtnotificatie_code,
|
||
NULL,
|
||
x.hide_f_prs_key,
|
||
sn.fac_srtnotificatie_oms,
|
||
x.hide_f_prs_key,
|
||
NULL,
|
||
NULL,
|
||
NULL
|
||
FROM uwva_v_rap_geschoond_mandaat x, fac_srtnotificatie sn
|
||
WHERE sn.fac_srtnotificatie_code = 'CUST13';
|
||
|
||
CREATE OR REPLACE VIEW uwva_v_noti_prs_inactalg
|
||
(
|
||
code,
|
||
sender,
|
||
receiver,
|
||
text,
|
||
key,
|
||
par1,
|
||
par2,
|
||
xkey
|
||
)
|
||
AS
|
||
SELECT 'CUST26',
|
||
NULL,
|
||
p2.prs_perslid_key,
|
||
'Medewerker gekoppeld aan gesloten pand ('
|
||
|| pf.prs_perslid_naam_friendly
|
||
|| ')',
|
||
p.prs_perslid_key,
|
||
NULL,
|
||
NULL,
|
||
NULL
|
||
FROM prs_perslidwerkplek pw,
|
||
prs_werkplek w,
|
||
alg_v_allonrgoed_gegevens aog,
|
||
alg_gebouw g,
|
||
alg_srtgebouw sg,
|
||
prs_v_aanwezigperslid p,
|
||
prs_afdeling a,
|
||
prs_kostenplaats k,
|
||
prs_v_aanwezigperslid p2,
|
||
prs_v_perslid_fullnames pf
|
||
WHERE pw.prs_werkplek_key = w.prs_werkplek_key
|
||
AND w.prs_alg_ruimte_key = aog.alg_ruimte_key
|
||
AND aog.alg_gebouw_key = g.alg_gebouw_key
|
||
AND g.alg_srtgebouw_key = sg.alg_srtgebouw_key
|
||
AND sg.alg_srtgebouw_passief = 1
|
||
AND p.prs_perslid_key = pw.prs_perslid_key
|
||
AND p.prs_afdeling_key = a.prs_afdeling_key
|
||
AND a.prs_kostenplaats_key = k.prs_kostenplaats_key
|
||
AND k.prs_perslid_key = p2.prs_perslid_key
|
||
AND p.prs_perslid_key = pf.prs_perslid_key
|
||
AND pw.prs_perslidwerkplek_volgnr = 2
|
||
UNION
|
||
SELECT 'CUST27',
|
||
NULL,
|
||
p.prs_perslid_key,
|
||
'Account gekoppeld aan gesloten pand',
|
||
p.prs_perslid_key,
|
||
NULL,
|
||
NULL,
|
||
NULL
|
||
FROM prs_perslidwerkplek pw,
|
||
prs_werkplek w,
|
||
alg_v_allonrgoed_gegevens aog,
|
||
alg_gebouw g,
|
||
alg_srtgebouw sg,
|
||
prs_v_aanwezigperslid p
|
||
WHERE pw.prs_werkplek_key = w.prs_werkplek_key
|
||
AND w.prs_alg_ruimte_key = aog.alg_ruimte_key
|
||
AND aog.alg_gebouw_key = g.alg_gebouw_key
|
||
AND g.alg_srtgebouw_key = sg.alg_srtgebouw_key
|
||
AND sg.alg_srtgebouw_passief = 1
|
||
AND p.prs_perslid_key = pw.prs_perslid_key
|
||
AND pw.prs_perslidwerkplek_volgnr = 2;
|
||
|
||
------ payload end ------
|
||
|
||
SET DEFINE OFF
|
||
BEGIN adm.systrackscriptId ('$Id$', 0); END;
|
||
/
|
||
|
||
COMMIT;
|
||
SET ECHO OFF
|
||
SPOOL OFF
|
||
SET DEFINE ON
|
||
PROMPT Logfile of this upgrade is: &fcltlogfile
|