Files
Customer/UWVA/uwva_prs.sql
Maarten van der Heide a08e39ed5e UWVA#79055 ABS-import/Vervangen door 2 nieuwe imports
svn path=/Customer/trunk/; revision=66362
2024-09-27 22:12:31 +00:00

6258 lines
264 KiB
SQL
Raw Blame History

--
-- $Id$
--
-- Script containing customer specific db-configuration for UWVA.
-- 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;
COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT;
WHENEVER SQLERROR CONTINUE;
SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL;
SPOOL &fcltlogfile
WHENEVER SQLERROR EXIT;
SELECT adm.checkscriptcust('&dbuser') AS fcltcusttxt FROM DUAL;
WHENEVER SQLERROR CONTINUE;
---------------------------------------
PROMPT &fcltcusttxt
---------------------------------------
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', 'W', 'P', 'S')) ip -- W is P geworden en S is nieuw! Komen C, D en K nog voor???
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', 'P', 'S')) -- W is P geworden en S is nieuw! Komen C, D en K nog voor???
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';
/*** NIEUW: ABS-import ombutsen naar PSHCM-import! ***/
-- PSHCM importfunctie, herziene versie volgens UWVA#79055.
-- Werkn.ID|Roepnaam|Initialen|Voorkeur achternaam|Achternaam|Tussenvoegsel|Achternaam partner|Voorvoegsel|Geslacht|Type medewerker|Kostenplaatscode|Functienaam |LocatieID|KA-account|E-mailadres
-- 055406 |Pieter |PCM |Foortse |Foortse | | | |M |I |430132 |sr. functioneelbeheerder CC|GAMSG0 |PFO006 |Pieter.Foortse@uwv.nl
-- IIQ
-- EMPNUM,GRPFNAME,GRPID,ACCNT
-- Type medewerker hetzelfde behalve W=P en S is nieuw!
-- prefname nickname titel accnt altaccnt funcdscr telno mobnr faxnr email initials prefix empnum costcent gender type location id grpfname grpid lastname spousename spouseprefix
/*
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)
SELECT prs_perslid_naam, prs_kenmerk11, prs_perslid_tussenvoegsel
FROM fac_imp_perslid
WHERE prs_perslid_naam != prs_kenmerk11;
SELECT x.prs_srtperslid_omschrijving, COUNT ( * )
FROM fac_imp_perslid x
WHERE NOT EXISTS
(SELECT 1
FROM prs_v_aanwezigsrtperslid
WHERE prs_srtperslid_omschrijving = x.prs_srtperslid_omschrijving)
GROUP BY x.prs_srtperslid_omschrijving;
SELECT x.prs_afdeling_naam, COUNT ( * )
FROM fac_imp_perslid x
WHERE NOT EXISTS
(SELECT 1
FROM prs_afdeling
WHERE prs_afdeling_verwijder IS NULL
AND prs_afdeling_naam = x.prs_afdeling_naam)
GROUP BY x.prs_afdeling_naam;
SELECT COUNT (fac_usrdata_key) et_check
FROM fac_v_aanwezigusrdata
WHERE fac_usrtab_key = 301 -- c_usrtab_employeetype_key
AND fac_usrdata_upper IN ('C', 'I', 'E', 'F', 'D', 'K', 'W');
SELECT COUNT (DISTINCT (prs_kenmerk1)) v_perslid_count_imp
FROM fac_imp_perslid
WHERE SUBSTR (prs_kenmerk1, 1, 1) IN ('C', 'I', 'E', 'F', 'D', 'K', 'W');
SELECT COUNT ( * ) FROM fac_imp_perslid;
SELECT DISTINCT prs_kenmerk1 FROM fac_imp_perslid;
SELECT COUNT (DISTINCT prs_perslid_nr) v_perslid_count_imp
FROM fac_imp_perslid
WHERE prs_kenmerk1 IN ('C', 'I', 'E', 'F', 'D', 'K', 'P', 'S') -- W is P geworden en S is nieuw! Komen C, D en K nog voor???
;
SELECT COUNT ( * ) v_perslid_count_fac
FROM prs_v_aanwezigperslid p,
prs_v_aanwezigkenmerklink kl,
fac_v_aanwezigusrdata ud
WHERE (p.prs_perslid_nr IS NOT NULL OR p.prs_perslid_oslogin IS NOT NULL)
AND p.prs_perslid_key = kl.prs_link_key
AND kl.prs_kenmerk_key = 1040
AND kl.prs_kenmerklink_waarde = ud.fac_usrdata_key
AND ud.fac_usrtab_key = 301
AND ud.fac_usrdata_code IN ('C', 'I', 'E', 'F', 'D', 'K', 'P', 'S');
SELECT (24792 / 24538) FROM DUAL;
-- Zet 'Type medewerker'-letter in personeelsnummer voor alle personen in
-- importbestand!
--UPDATE fac_imp_perslid
-- SET prs_perslid_nr = COALESCE (prs_kenmerk1, '?') || '-' || prs_perslid_nr;
-- Wis 'Type medewerker'-letter in personeelsnummer voor alle personen in
-- Facilitor! Of beter via eenmalig script?
--SELECT prs_perslid_nr, SUBSTR (prs_perslid_nr, 3)
-- FROM prs_perslid
-- WHERE prs_perslid_verwijder IS NULL
-- AND prs_perslid_nr IS NOT NULL
-- AND SUBSTR (prs_perslid_nr, 1, 2) IN ('C-', 'I-', 'E-', 'F-', 'D-', 'K-', 'W-', 'S-');
--UPDATE prs_perslid
-- SET prs_perslid_nr = SUBSTR (prs_perslid_nr, 3) --, prs_perslid_tussenvoegsel = NULL???
-- WHERE prs_perslid_verwijder IS NULL
-- AND prs_perslid_nr IS NOT NULL
-- AND SUBSTR (prs_perslid_nr, 1, 2) IN ('C-', 'I-', 'E-', 'F-', 'D-', 'K-', 'W-', 'S-');
*/
--Werkn.ID|Roepnaam|Initialen|Voorkeur achternaam|Achternaam|Tussenvoegsel|Achternaam partner|Voorvoegsel|Geslacht|Type medewerker|Kostenplaatscode|Functienaam|LocatieID|KA-account|E-mailadres
--1=219997|2=Florian|3=FR|4=ten Hagen|5=Hagen|6=ten|7|8|9=M|10=I|11=430132|12=sr. functioneelbeheerder CC|13=GAMSG0|14=FHA038|15=Florian.tenHagen@uwv.nl
CREATE OR REPLACE PROCEDURE uwva_import_pshcm (p_import_key IN NUMBER)
AS
v_errormsg VARCHAR2 (1000) := '-';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
BEGIN
-- Geslacht-kolom op F wijzigen naar V!
v_errormsg := 'Fout bijwerken geslacht (F->V)';
UPDATE fac_imp_file
SET fac_imp_file_line =
SUBSTR (fac_imp_file_line, 1, INSTR (fac_imp_file_line, '|', 1, 8))
|| 'V'
|| SUBSTR (fac_imp_file_line, INSTR (fac_imp_file_line, '|', 1, 9))
WHERE fac_import_key = p_import_key AND fac_imp_file_index > 1 AND SUBSTR (fac_imp_file_line, INSTR (fac_imp_file_line, '|', 1, 8) + 1, 1) = 'F';
-- Generieke import.
-- De sequence array staat beschreven in PRS_PAC.SRC bij de import_perslid-PROCEDURE.
--'%Werkn.ID|Roepnaam|Initialen|Voorkeur achternaam|Achternaam|Tussenvoegsel|Achternaam partner|Voorvoegsel|Geslacht|Type medewerker|Kostenplaatscode|Functienaam|LocatieID|KA-account|E-mailadres%'
v_errormsg := 'Fout inlezen PSHCM-bestand';
prs.import_perslid (
p_import_key,
'0;0;0;0;0;0;11;4;0;2;' -- 11=Kostenplaatscode[63 nieuwe afdelingen???]/4=Voorkeur achternaam/2=Roepnaam
|| '3;0;0;0;9;0;0;15;0;1;' -- 3=Initialen/9=Geslacht/15=E-mailadres/1=Werkn.ID
|| '12;14;0;0;0;0;10;13;5;6;' -- 12=Functienaam[41 nieuwe functies???]/14=KA-account/10=Type medewerker/13=LocatieID[altijd gevuld???]/5=Achternaam/6=Tussenvoegsel
|| '7;8;0;0;0;0;0;0;0;0;' -- 7=Achternaam partner/8=Voorvoegsel [partner]
|| '0;0;0;0;0;0',
'%Werkn.ID|Roepnaam|Initialen|Voorkeur achternaam|Achternaam|Tussenvoegsel|Achternaam partner|Voorvoegsel|Geslacht|Type medewerker|Kostenplaatscode|Functienaam|LocatieID|KA-account|E-mailadres%');
-- prs_perslid_naam = Voorkeur achternaam (voorheen Prefname)
-- prs_perslid_tussenvoegsel = [initieel leeg!]
-- prs_kenmerk3 = Achternaam (voorheen Lastname)
-- prs_kenmerk4 = Tussenvoegsel (voorheen Prefix)
-- prs_kenmerk5 = Achternaam partner (voorheen Spousename)
-- prs_kenmerk6 = Voorvoegsel (voorheen Spouseprefix)
/*
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,
*/
v_errormsg := 'Fout bijwerken tussenvoegsel';
UPDATE fac_imp_perslid i
SET i.prs_perslid_tussenvoegsel =
DECODE (
COALESCE (INSTR (i.prs_perslid_naam, i.prs_kenmerk5), 0),
0, TRIM (i.prs_kenmerk4),
DECODE (
INSTR (i.prs_perslid_naam, i.prs_kenmerk3),
0, TRIM (i.prs_kenmerk6),
CASE
WHEN INSTR (i.prs_perslid_naam, i.prs_kenmerk3) <= INSTR (i.prs_perslid_naam, i.prs_kenmerk5)
THEN
TRIM (i.prs_kenmerk4)
ELSE
TRIM (i.prs_kenmerk6)
END))
WHERE i.fac_import_key = p_import_key;
v_errormsg := 'Fout bijwerken achternaam';
UPDATE fac_imp_perslid i
SET i.prs_perslid_naam =
DECODE (
SUBSTR (i.prs_perslid_naam, 1, COALESCE (LENGTH (i.prs_perslid_tussenvoegsel), 60)),
i.prs_perslid_tussenvoegsel, TRIM(SUBSTR (i.prs_perslid_naam, LENGTH (i.prs_perslid_tussenvoegsel) + 1)),
i.prs_perslid_naam)
WHERE i.fac_import_key = p_import_key;
v_errormsg := 'Fout bijwerken rest';
UPDATE fac_imp_perslid i
SET i.prs_perslid_oslogin = (SELECT MIN (COALESCE (prs_perslid_oslogin, i.prs_perslid_oslogin)) FROM prs_v_aanwezigperslid WHERE prs_perslid_nr = i.prs_perslid_nr),
i.prs_perslid_dienstverband = (SELECT MIN (COALESCE (prs_perslid_dienstverband, i.prs_perslid_dienstverband)) FROM prs_v_aanwezigperslid WHERE prs_perslid_nr = i.prs_perslid_nr),
i.prs_perslid_telefoonnr = (SELECT MIN (COALESCE (prs_perslid_telefoonnr, i.prs_perslid_telefoonnr)) FROM prs_v_aanwezigperslid WHERE prs_perslid_nr = i.prs_perslid_nr),
i.prs_perslid_mobiel = (SELECT MIN (COALESCE (prs_perslid_mobiel, i.prs_perslid_mobiel)) FROM prs_v_aanwezigperslid WHERE prs_perslid_nr = i.prs_perslid_nr),
i.prs_perslid_email = (SELECT MIN (COALESCE (prs_perslid_email, i.prs_perslid_email)) FROM prs_v_aanwezigperslid WHERE prs_perslid_nr = i.prs_perslid_nr)
WHERE i.fac_import_key = p_import_key
AND EXISTS (SELECT 1 FROM prs_v_aanwezigperslid WHERE prs_perslid_nr = i.prs_perslid_nr);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Inleesproces personen afgebroken!');
END uwva_import_pshcm;
/
CREATE OR REPLACE PROCEDURE uwva_update_pshcm (p_import_key IN NUMBER)
AS
c_employeetype_key NUMBER (10) := 1040; -- Type Medewerker/C(ontract), I(ntern), E(xtern), F(lexplek), D(ummy), K(etenpartner), W(onga)=P en S(?)
c_usrtab_employeetype_key NUMBER (10) := 301; -- Type_medewerker
c_usrdata_onbekend_key NUMBER (10) := 4889;
c_usrdata_onbekend_omschr VARCHAR2 (60) := 'ONBEKEND';
c_usrtab_pandcoderegio_key NUMBER (10) := 782;
c_usrtab_regiovinder_key NUMBER (10) := 783;
c_regio_key NUMBER (10) := 1193;
c_maxvariation NUMBER := 20;
c_def_pandcode_ketenpartner VARCHAR2 (6) := 'GAMSG3';
c_srtgebouw_default NUMBER := 1;
c_verdieping_omschr_default VARCHAR2 (30) := 'BG';
c_ruimte_code VARCHAR2 (12) := '_000';
c_ruimte_omschr_default VARCHAR2 (30) := 'Onbekend';
c_commitbuffer NUMBER (10) := 5000; -- Om de zoveel committen
-- Voor budgethouders (uit voormalige budgethouderimport)
c_kpn_maxvariation NUMBER := 0.5; -- Max new/old ratio to prevent undesired changes
c_grp_budgh_key NUMBER := 1061;
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER;
v_count_cursor NUMBER;
currentversion fac_module.fac_module_version%TYPE;
v_perslid_count_imp NUMBER;
v_perslid_count_fac NUMBER;
v_budgethouder_key NUMBER (10);
v_aktie VARCHAR2 (10);
v_update BOOLEAN;
v_new_gebouw_key NUMBER (10);
v_gebouw_code VARCHAR2 (12);
v_verdieping_key NUMBER (10);
v_ruimte_key NUMBER (10);
v_ruimte_nr VARCHAR2 (20);
-- Voor budgethouders (uit voormalige budgethouderimport)
l_oldcount NUMBER;
l_impcount NUMBER;
l_impcount_prj NUMBER;
nrbh1 NUMBER;
nrbh2 NUMBER;
v_time VARCHAR2 (50);
-- Verwijderen personen die niet meer in importbestand voorkomen.
-- Dubbele nummers? Dan wordt iemand mogelijk niet verwijderd/INACTIEF!
CURSOR c_prs_del
IS
SELECT p.prs_perslid_key,
pf.prs_perslid_naam_full,
p.prs_perslid_nr,
COUNT (vp.prs_perslid_key) verplichtingen
FROM prs_v_aanwezigperslid p,
prs_v_perslid_fullnames_all pf,
prs_v_aanwezigkenmerklink tm,
fac_v_aanwezigusrdata tm_ud,
prs_v_verplichting_keys vp
WHERE p.prs_perslid_apikey IS NULL -- Voor de zekerheid!
AND p.prs_perslid_key = pf.prs_perslid_key
AND p.prs_perslid_key = tm.prs_link_key
AND tm.prs_kenmerk_key = c_employeetype_key
AND fac.safe_to_number (tm.prs_kenmerklink_waarde) = tm_ud.fac_usrdata_key
AND tm_ud.fac_usrtab_key = c_usrtab_employeetype_key
AND tm_ud.fac_usrdata_code IN ('C', 'I', 'E', 'F', 'D', 'W', 'P', 'S') -- W is P geworden en S is nieuw! Komen C, D en K nog voor??? K wordt niet verwijderd (en via PSHCM vooralsnog ook niet meer aangeleverd)!
AND p.prs_perslid_key = vp.prs_perslid_key(+)
AND NOT EXISTS
(SELECT 1
FROM fac_imp_perslid
WHERE UPPER (prs_perslid_nr) = UPPER (p.prs_perslid_nr))
GROUP BY p.prs_perslid_key,
pf.prs_perslid_naam_full,
p.prs_perslid_nr
ORDER BY 1;
-- Wijzigen kenmerkveld=Type medewerker.
CURSOR c_prs_upd_typemdw
IS
SELECT p.prs_perslid_key,
pf.prs_perslid_naam_full,
p.prs_perslid_nr,
tm_ud.fac_usrdata_code old_type,
x.prs_kenmerk1 new_type,
(SELECT fac_usrdata_key
FROM fac_v_aanwezigusrdata
WHERE fac_usrtab_key = c_usrtab_employeetype_key
AND fac_usrdata_code = x.prs_kenmerk1)
new_type_key
FROM fac_imp_perslid x,
prs_v_aanwezigperslid p,
prs_v_perslid_fullnames_all pf,
(SELECT *
FROM prs_v_aanwezigkenmerklink
WHERE prs_kenmerk_key = c_employeetype_key) tm,
(SELECT *
FROM fac_v_aanwezigusrdata
WHERE fac_usrtab_key = c_usrtab_employeetype_key
AND fac_usrdata_code IN ('C', 'I', 'E', 'F', 'D', 'K', 'W', 'P', 'S')) tm_ud -- W is P geworden en S is nieuw! Komen C, D en K nog voor???
WHERE x.prs_perslid_nr = p.prs_perslid_nr
AND p.prs_perslid_apikey IS NULL -- Voor de zekerheid!
AND p.prs_perslid_key = pf.prs_perslid_key
AND p.prs_perslid_key = tm.prs_link_key(+)
AND fac.safe_to_number (tm.prs_kenmerklink_waarde) = tm_ud.fac_usrdata_key(+)
AND COALESCE (tm_ud.fac_usrdata_code, '#') != x.prs_kenmerk1
ORDER BY 1;
-- Afnemen budgethouderschap/mandaat als afdeling gewijzigd.
CURSOR c_prs_upd_mandaat
IS
SELECT '[' || x.prs_perslid_naam_full || '|' || x.prs_perslid_nr || '] '
aanduiding,
x.prs_perslid_key,
fac.safe_to_number (x.prs_kenmerk7) old_afdeling_key,
kp.budgethouderschap,
pk.mandaat
FROM (SELECT p.prs_perslid_key,
pf.prs_perslid_naam_full,
p.prs_perslid_nr,
x.prs_kenmerk7
FROM fac_imp_perslid x,
prs_v_aanwezigperslid p,
prs_v_perslid_fullnames_all pf,
prs_v_aanwezigkenmerklink tm,
fac_v_aanwezigusrdata tm_ud
WHERE x.prs_perslid_nr = p.prs_perslid_nr
AND p.prs_perslid_apikey IS NULL -- Voor de zekerheid!
AND p.prs_perslid_key = pf.prs_perslid_key
AND p.prs_perslid_key = tm.prs_link_key
AND tm.prs_kenmerk_key = c_employeetype_key
AND fac.safe_to_number (tm.prs_kenmerklink_waarde) = tm_ud.fac_usrdata_key
AND tm_ud.fac_usrtab_key = c_usrtab_employeetype_key
AND tm_ud.fac_usrdata_code IN ('C', 'I', 'E', 'F', 'D', 'K', 'W', 'P', 'S') -- W is P geworden en S is nieuw! Komen C, D en K nog voor???
AND p.prs_afdeling_key != fac.safe_to_number (x.prs_kenmerk7)) x
LEFT JOIN ( SELECT prs_perslid_key, COUNT ( * ) budgethouderschap
FROM prs_v_aanwezigkostenplaats
GROUP BY prs_perslid_key) kp
ON x.prs_perslid_key = kp.prs_perslid_key
LEFT JOIN ( SELECT prs_perslid_key, COUNT ( * ) mandaat
FROM prs_perslidkostenplaats
GROUP BY prs_perslid_key) pk
ON x.prs_perslid_key = pk.prs_perslid_key
WHERE kp.budgethouderschap > 0 OR pk.mandaat > 0
ORDER BY 1;
-- Bijwerken HRM-WP van personen uit import volgens ontvangen pandcode.
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,
prs_kenmerk2 pandcode, -- LocatieID=Gebouwkostenplaats!
tm_ud.fac_usrdata_code employeetype,
'[' || p.prs_perslid_naam || '|' || p.prs_perslid_nr || '|' || p.prs_perslid_oslogin || '|' || l.alg_locatie_code || '] '
aanduiding
FROM fac_imp_perslid x,
prs_v_aanwezigperslid p,
prs_v_aanwezigkostenplaats kp,
alg_v_aanweziggebouw g,
alg_locatie l,
prs_v_aanwezigkenmerklink tm,
fac_v_aanwezigusrdata tm_ud
WHERE x.prs_perslid_nr = p.prs_perslid_nr
AND x.prs_kenmerk2 = kp.prs_kostenplaats_nr
AND kp.prs_kostenplaats_key = g.prs_kostenplaats_key
AND g.alg_locatie_key = l.alg_locatie_key
AND p.prs_perslid_key = tm.prs_link_key
AND tm.prs_kenmerk_key = c_employeetype_key
AND fac.safe_to_number (tm.prs_kenmerklink_waarde) = tm_ud.fac_usrdata_key
AND tm_ud.fac_usrtab_key = c_usrtab_employeetype_key
AND tm_ud.fac_usrdata_code IN ('C', 'I', 'E', 'F', 'D', 'K', 'W', 'P', 'S')) hrmloc -- W is P geworden en S is nieuw! Komen C, D en K nog voor???
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?
;
-- UWVA#20232: Bijwerken Regio-kenmerkveld van personen uit import als deze
-- leeg is of afwijkt van het gebouw waar ze zitten (hun HRM-WP
-- hebben).
CURSOR c_prs_regio
IS
SELECT '[' || TO_CHAR (hpw.prs_perslid_key) || '|' || r.prs_kenmerklink_waarde || '|' || COALESCE (rv.fac_usrdata_omschr, c_usrdata_onbekend_omschr) || '] '
aanduiding,
hpw.prs_perslid_key,
g.alg_gebouw_code,
r.prs_kenmerklink_key,
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_v_aanwezigkenmerklink tm, -- Type Medwerker
fac_v_aanwezigusrdata tm_ud,
(SELECT * FROM prs_v_aanwezigkenmerklink WHERE prs_kenmerk_key = c_regio_key) r, -- WAS
prs_werkplek w,
alg_v_onrgoed_boom ogb,
alg_gebouw g,
(SELECT * FROM fac_v_aanwezigusrdata WHERE fac_usrtab_key = c_usrtab_pandcoderegio_key) pcr,
(SELECT * FROM fac_v_aanwezigusrdata WHERE fac_usrtab_key = c_usrtab_regiovinder_key) rv -- WORDT
WHERE hpw.prs_perslid_key = tm.prs_link_key
AND tm.prs_kenmerk_key = c_employeetype_key
AND fac.safe_to_number (tm.prs_kenmerklink_waarde) = tm_ud.fac_usrdata_key
AND tm_ud.fac_usrtab_key = c_usrtab_employeetype_key
AND tm_ud.fac_usrdata_code IN ('C', 'I', 'E', 'F', 'D', 'K', 'W', 'P', 'S') -- W is P geworden en S is nieuw! Komen C, D en K nog voor???
AND hpw.prs_perslid_key = r.prs_link_key(+)
AND hpw.prs_werkplek_key = w.prs_werkplek_key
AND w.prs_alg_ruimte_key = ogb.alg_ruimte_key
AND ogb.alg_gebouw_key = g.alg_gebouw_key
AND g.alg_gebouw_code = pcr.fac_usrdata_code(+)
AND pcr.fac_usrdata_omschr = rv.fac_usrdata_omschr(+)
AND (r.prs_kenmerklink_waarde IS NULL OR fac.safe_to_number (r.prs_kenmerklink_waarde) != COALESCE (rv.fac_usrdata_key, c_usrdata_onbekend_key))
ORDER BY 1;
-- UWVA#20033: Bijwerken functienamen (hoofdletters matchen).
CURSOR c_functie
IS
SELECT DISTINCT sp.prs_srtperslid_key, x.prs_srtperslid_omschrijving funcdscr
FROM prs_srtperslid sp, fac_imp_perslid x
WHERE sp.prs_srtperslid_upper = UPPER (x.prs_srtperslid_omschrijving)
AND sp.prs_srtperslid_omschrijving != x.prs_srtperslid_omschrijving;
-- UWVA#23788: Loggen pandcodes (incl. aantal personen) in importbestand,
-- waarvoor geen kostenplaats en/of gebouw kan worden bepaald.
CURSOR c_pandcode_onbekend
IS
SELECT x.prs_kenmerk2 pandcode, kp.prs_kostenplaats_nr, COUNT (*) aantal
FROM fac_imp_perslid x, prs_v_aanwezigkostenplaats kp, alg_v_aanweziggebouw g
WHERE x.prs_kenmerk2 IS NOT NULL
AND x.prs_kenmerk2 = kp.prs_kostenplaats_nr(+)
AND kp.prs_kostenplaats_key = g.prs_kostenplaats_key(+)
AND g.alg_gebouw_key IS NULL
GROUP BY x.prs_kenmerk2, kp.prs_kostenplaats_nr
ORDER BY 1;
/*
-- UWVA#20021: Voormalige budgethouderimport, zover de relatie kostenplaats
-- en persoon (evt. leeg) kan worden gelegd.
CURSOR c_budgethouder
IS
SELECT kp.prs_kostenplaats_key,
imp.afdeling 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 kp, prs_v_aanwezigperslid p
WHERE imp.afdeling = kp.prs_kostenplaats_nr
AND imp.perslid_nr = p.prs_perslid_nr(+)
ORDER BY 2;
-- Logging onbekende kostenplaatsen.
CURSOR c_kpn_onbekend
IS
SELECT kp.prs_kostenplaats_key,
imp.afdeling prs_kostenplaats_nr,
imp.perslid_nr prs_perslid_nr
FROM uwva_imp_kpn imp, prs_v_aanwezigkostenplaats kp
WHERE imp.afdeling = kp.prs_kostenplaats_nr(+)
AND kp.prs_kostenplaats_nr IS NULL
AND imp.afdeling IS NOT NULL
AND imp.status = 'A'
ORDER BY 2;
*/
-- Nieuwe werkplek aanmaken voor persoon en eventuele oude werkplek daarna
-- verwijderen.
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
v_werkplek_volgnr NUMBER (10);
v_new_werkplek_key NUMBER (10);
BEGIN
-- UWVA#21256: Bepaal laagst beschikbare WP-volgnr (om te voorkomen dat
-- WP-volgnr hoger wordt dan past in prs_werkplek_volgnr).
v_errormsg := 'Fout bepalen volgnummer nieuwe werkplek in ruimte ' || in_ruimte_nr;
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 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;
-- UWVA#21256: ABS-werkplek heeft altijd bezettingvolgnr 2.
-- Da's hoger dan Vinder-import (die gebruikt 3 en 4), maar laat 1 over
-- om handmatig een hoofdwerkplek in te stellen.
IF in_wp_oud_key IS NULL
THEN
-- Insert
v_errormsg := 'Fout 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);
ELSE
-- Update
v_errormsg := 'Fout 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 verwijderen oude werkplek (' || in_wp_oud_key || ')';
DELETE FROM prs_werkplek
WHERE prs_werkplek_key = in_wp_oud_key;
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, 'W', v_errormsg, 'uwva_upsert_wp');
END;
BEGIN
v_errormsg := 'Fout controleren inhoud';
-- Init
SELECT MAX (fac_module_version)
INTO currentversion
FROM fac_module;
fac.imp_writelog (p_import_key, 'S', 'Facilitor PSHCM-import versie ' || currentversion, '$Revision$');
-- Aantal potentieel matchbare personen in importbestand!
SELECT COUNT (DISTINCT prs_perslid_nr)
INTO v_perslid_count_imp
FROM fac_imp_perslid
-- WHERE prs_kenmerk1 IN ('C', 'I', 'E', 'F', 'D', 'K', 'P', 'S') -- W is P geworden en S is nieuw! Komen C, D en K nog voor???
;
-- Aantal potentieel matchbare personen in Facilitor!
-- WEG:Dus m<>t personeelsnummer en/of account en met juiste werknemertype.
-- Dus m<>t personeelsnummer en met juiste werknemertype.
SELECT DECODE (COUNT ( * ), 0, 1, COUNT ( * ))
INTO v_perslid_count_fac
FROM prs_v_aanwezigperslid p, prs_v_aanwezigkenmerklink tm, fac_v_aanwezigusrdata tm_ud
WHERE --WEG:(p.prs_perslid_nr IS NOT NULL OR p.prs_perslid_oslogin IS NOT NULL)
p.prs_perslid_nr IS NOT NULL
AND p.prs_perslid_key = tm.prs_link_key
AND tm.prs_kenmerk_key = c_employeetype_key
AND fac.safe_to_number (tm.prs_kenmerklink_waarde) = tm_ud.fac_usrdata_key
AND tm_ud.fac_usrtab_key = c_usrtab_employeetype_key
AND tm_ud.fac_usrdata_code IN ('C', 'I', 'E', 'F', 'D', 'K', 'W', 'P', 'S') -- W is P geworden en S is nieuw! Komen C, D en K nog voor???
;
IF ((100 * ABS (v_perslid_count_imp - v_perslid_count_fac) / v_perslid_count_fac) > c_maxvariation)
THEN
fac.imp_writelog (p_import_key, 'W',
'Verschil tussen te importeren ('
|| TO_CHAR (v_perslid_count_fac)
|| ') en actieve ('
|| TO_CHAR (v_perslid_count_imp)
|| ') personen te groot',
'Afwijking bedraagt '
|| TO_CHAR (100 * ABS (v_perslid_count_imp - v_perslid_count_fac) / v_perslid_count_fac, '9999999D9')
|| '%'
);
RETURN;
END IF;
-- Verwijderen personen (onder import-regime) niet meer in importbestand!
FOR rec IN c_prs_del
LOOP
BEGIN
v_errormsg := 'Fout verwijderen persoon ' || rec.prs_perslid_naam_full || '/' || rec.prs_perslid_nr;
prs.delete_perslid (p_import_key, rec.prs_perslid_key);
IF rec.verplichtingen > 0 -- Actuele verplichtingen?
THEN
-- UWVA#20219: 'Toon in gids' uitvinken, ook als persoon al INACTIEF.
v_errormsg := 'Fout verwijderen gidsvermelding van ' || rec.prs_perslid_naam_full || '/' || rec.prs_perslid_nr;
UPDATE prs_perslid
SET prs_perslid_ingids = NULL
WHERE prs_perslid_key = rec.prs_perslid_key;
-- UWA#249970: Notificatie naar budgethouder.
v_errormsg := 'Fout notificeren budgethouder van ' || rec.prs_perslid_naam_full || '/' || rec.prs_perslid_nr;
SELECT kp.prs_perslid_key
INTO v_budgethouder_key
FROM prs_perslid p, prs_afdeling a, prs_kostenplaats kp
WHERE p.prs_perslid_key = rec.prs_perslid_key
AND p.prs_afdeling_key = a.prs_afdeling_key
AND a.prs_kostenplaats_key = kp.prs_kostenplaats_key;
fac.putnotificationsrtprio (88602, -- pfrom (UWVA#37656: Met usesenderasreplyto=true haalt psender niets uit en moet pfrom zijn gevuld: 88602=_EMAIL-user)
v_budgethouder_key, -- pto
'CUST21', -- pcode
1675, -- pref (naar UWVA_V_RAP_UITDIENST)
NULL, -- poptmessage
NULL, -- poptstatus
NULL, -- poptemail
NULL, -- poptmobile
rec.prs_perslid_key, -- pxref
2, -- pprio
'infobeheer.fi@uwv.nl'); -- psender
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, 'W', v_errormsg, 'Verwijderen personen');
END;
END LOOP;
/*
-- Markeren nieuwe medewerkers in fac_imp_perslid/prs_kenmerk2 voordat deze
-- worden aangemaakt via prs.update_perslid() en niet te onderscheiden zijn
-- van bijgewerkte medewerkers (behalve op datum?)!
UPDATE fac_imp_perslid x
SET x.prs_kenmerkx = 'Nieuw'
WHERE NOT EXISTS
(SELECT 1
FROM prs_v_aanwezigperslid p, prs_v_aanwezigkenmerklink kl, fac_v_aanwezigusrdata ud, prs_afdeling a
WHERE p.prs_perslid_key = kl.prs_link_key
AND kl.prs_kenmerk_key = c_employeetype_key
AND fac.safe_to_number (kl.prs_kenmerklink_waarde) = ud.fac_usrdata_key
AND ud.fac_usrtab_key = c_usrtab_employeetype_key
AND ud.fac_usrdata_code IN ('C', 'I', 'E', 'F', 'D', 'K', 'W', 'P', 'S') -- W is P geworden en S is nieuw! Komen C, D en K nog voor???
AND p.prs_afdeling_key = a.prs_afdeling_key
AND a.prs_afdeling_verwijder IS NULL
AND p.prs_perslid_nr = x.prs_perslid_nr);
-- TODO:Logging???
*/
-- Bewaren huidige afdeling in fac_imp_perslid/prs_kenmerk7 voordat deze
-- zou kunnen worden gewijzigd via prs.update_perslid()!
v_errormsg := 'Fout bewaren huidige afdeling';
UPDATE fac_imp_perslid x
SET x.prs_kenmerk7 =
(SELECT TO_CHAR (a.prs_afdeling_key)
FROM prs_v_aanwezigperslid p, prs_v_aanwezigkenmerklink kl, fac_v_aanwezigusrdata ud, prs_afdeling a
WHERE p.prs_perslid_key = kl.prs_link_key
AND kl.prs_kenmerk_key = c_employeetype_key
AND fac.safe_to_number (kl.prs_kenmerklink_waarde) = ud.fac_usrdata_key
AND ud.fac_usrtab_key = c_usrtab_employeetype_key
AND ud.fac_usrdata_code IN ('C', 'I', 'E', 'F', 'D', 'K', 'W', 'P', 'S') -- W is P geworden en S is nieuw! Komen C, D en K nog voor???
AND p.prs_afdeling_key = a.prs_afdeling_key
AND a.prs_afdeling_verwijder IS NULL
AND p.prs_perslid_nr = x.prs_perslid_nr)
WHERE EXISTS
(SELECT 1
FROM prs_v_aanwezigperslid p, prs_v_aanwezigkenmerklink kl, fac_v_aanwezigusrdata ud, prs_afdeling a
WHERE p.prs_perslid_key = kl.prs_link_key
AND kl.prs_kenmerk_key = c_employeetype_key
AND fac.safe_to_number (kl.prs_kenmerklink_waarde) = ud.fac_usrdata_key
AND ud.fac_usrtab_key = c_usrtab_employeetype_key
AND ud.fac_usrdata_code IN ('C', 'I', 'E', 'F', 'D', 'K', 'W', 'P', 'S') -- W is P geworden en S is nieuw! Komen C, D en K nog voor???
AND p.prs_afdeling_key = a.prs_afdeling_key
AND a.prs_afdeling_verwijder IS NULL
AND p.prs_perslid_nr = x.prs_perslid_nr);
-- TODO:Logging???
-- Generieke update op personeelsnummer (NR), geen WPs verwijderen (NULL)
-- en incl. kenmerkvelden (1)!
v_errormsg := 'Fout generieke update';
prs.update_perslid (p_import_key, 'NR', NULL, 1);
-- *** Bijwerken persoonsgegevens (niet ondersteund door standaard import).
-- Wijzigen persoonskenmerk=Type medewerker.
v_count_cursor := 0;
v_errormsg := 'Fout bijwerken Type medewerker';
FOR rec IN c_prs_upd_typemdw
LOOP
BEGIN
v_errormsg := '[' || rec.prs_perslid_naam_full || '|' || rec.prs_perslid_nr || '] Fout bijwerken kenmerk=Type medewerker';
prs.upsertkenmerk (c_employeetype_key, rec.prs_perslid_key, rec.new_type_key); -- Type medewerker
v_count_cursor := v_count_cursor + 1;
END;
END LOOP;
fac.imp_writelog (p_import_key, 'S', 'Type medewerker/#bijgewerkt: ' || TO_CHAR (v_count_cursor), '');
-- Afnemen gidsvermelding voor - nieuw aangemaakte! - K(etenpartners).
-- TODO:Alleen initieel???
v_errormsg := 'Fout afnemen gidsvermelding voor K(etenpartners)';
UPDATE prs_perslid p
SET prs_perslid_ingids = NULL
WHERE p.prs_perslid_aanmaak > SYSDATE - (1 / 24) -- Afgelopen uur aangemaakt (beetje sketchy, maar vooruit)
AND EXISTS -- In importbestand
(SELECT 1
FROM fac_imp_perslid
WHERE prs_perslid_nr = p.prs_perslid_nr)
AND EXISTS -- K(etenpartner)
(SELECT 1
FROM prs_v_aanwezigkenmerklink kl, fac_v_aanwezigusrdata ud
WHERE kl.prs_kenmerk_key = c_employeetype_key
AND kl.prs_kenmerklink_waarde = ud.fac_usrdata_key
AND ud.fac_usrtab_key = c_usrtab_employeetype_key
AND ud.fac_usrdata_code = 'K'
AND kl.prs_link_key = p.prs_perslid_key);
-- TODO:Logging???
-- Afnemen/toekennen Medewerker-groep (key=1601) aan iedereen met een Type
-- medewerker gezet op 'C', 'I', 'E', 'F', 'D', 'K', 'W', 'P' of 'S'!
v_errormsg := 'Fout afnemen Medewerker-autorisatiegroep';
DELETE FROM fac_gebruikersgroep gg
WHERE gg.fac_groep_key = 1601 -- Medewerker-autorisatiegroep
AND NOT EXISTS
(SELECT 1
FROM fac_imp_perslid x, prs_v_aanwezigperslid p, prs_v_aanwezigkenmerklink tm, fac_v_aanwezigusrdata tm_ud
WHERE x.prs_perslid_nr = p.prs_perslid_nr
AND p.prs_perslid_key = tm.prs_link_key
AND tm.prs_kenmerk_key = c_employeetype_key
AND fac.safe_to_number (tm.prs_kenmerklink_waarde) = tm_ud.fac_usrdata_key
AND tm_ud.fac_usrtab_key = c_usrtab_employeetype_key
AND tm_ud.fac_usrdata_code IN ('C', 'I', 'E', 'F', 'D', 'K', 'W', 'P', 'S') -- W is P geworden en S is nieuw! Komen C, D en K nog voor???
AND p.prs_perslid_key = x.prs_perslid_key);
-- TODO:Logging???
v_errormsg := 'Fout toekennen Medewerker-autorisatiegroep';
INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
SELECT 1601, p.prs_perslid_key -- Medewerker-autorisatiegroep
FROM fac_imp_perslid x, prs_v_aanwezigperslid p, prs_v_aanwezigkenmerklink tm, fac_v_aanwezigusrdata tm_ud
WHERE x.prs_perslid_nr = p.prs_perslid_nr
AND p.prs_perslid_key = tm.prs_link_key
AND tm.prs_kenmerk_key = c_employeetype_key
AND fac.safe_to_number (tm.prs_kenmerklink_waarde) = tm_ud.fac_usrdata_key
AND tm_ud.fac_usrtab_key = c_usrtab_employeetype_key
AND tm_ud.fac_usrdata_code IN ('C', 'I', 'E', 'F', 'D', 'K', 'W', 'P', 'S') -- W is P geworden en S is nieuw! Komen C, D en K nog voor???
AND NOT EXISTS -- Niet al in Medewerker-autorisatiegroep!
(SELECT 1
FROM fac_gebruikersgroep
WHERE fac_groep_key = 1601 -- Medewerker-autorisatiegroep
AND prs_perslid_key = p.prs_perslid_key);
-- TODO:Logging???
-- Afnemen budgethouderschap/mandaat als afdeling gewijzigd en voorbereiden
-- CUST13.
-- UWVA#22892: Verwijder eerst de bewaarde mandaten (Eigen tabel met key=3)
-- en rapportage-links (hidden kenmerk met key=1111) uit
-- voorgaande import. Per persoon die deze run naar een andere
-- afdeling verhuist, worden weer nieuwe records toegevoegd.
v_errormsg := 'Fout afnemen budgethouderschap/mandaat';
DELETE FROM fac_usrdata
WHERE fac_usrtab_key = 3;
DELETE FROM prs_kenmerklink
WHERE prs_kenmerklink_niveau = 'P' AND prs_kenmerk_key = 1111;
v_count_cursor := 0;
FOR rec IN c_prs_upd_mandaat
LOOP
BEGIN
v_errormsg := 'Fout verwijderen budgethouderschap';
IF COALESCE (rec.budgethouderschap, 0) > 0
THEN
UPDATE prs_kostenplaats
SET prs_perslid_key = NULL
WHERE prs_perslid_key = rec.prs_perslid_key;
fac.imp_writelog (p_import_key, 'I', rec.aanduiding || 'Budgethouderschap/#vervallen: ' || TO_CHAR (rec.budgethouderschap), 'Mandaatschoning');
END IF;
v_errormsg := 'Fout verwijderen mandaat';
IF COALESCE (rec.mandaat, 0) > 0
THEN
-- UWVA#22892: Bewaren - deze PSHCM-import! - verwijderde mandaten
-- tbv. CUST13-noti en link persoon aan rapportage met
-- verwijderde mandaten (met key=555).
INSERT INTO fac_usrdata (fac_usrtab_key,
fac_usrdata_code,
fac_usrdata_omschr,
fac_usrdata_volgnr,
fac_usrdata_prijs)
SELECT 3, -- MANDAATREMINDER
TO_CHAR (pk.prs_perslid_key) || '-' || TO_CHAR (COALESCE (pk.prs_kostenplaats_key, 0)),
TO_CHAR (rec.old_afdeling_key), -- Oude afdeling
COALESCE (pk.prs_perslidkostenplaats_boeken, 0),
COALESCE (pk.prs_perslidkostenplaats_inzage, 0)
FROM prs_perslidkostenplaats pk, prs_kostenplaats kp
WHERE pk.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
AND pk.prs_perslid_key = rec.prs_perslid_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 (rec.prs_perslid_key,
'P',
1111, -- MANDAATREMINDER
'555'); -- UWVA_V_RAP_GESCHOOND_MANDAAT
DELETE FROM prs_perslidkostenplaats
WHERE prs_perslid_key = rec.prs_perslid_key;
fac.imp_writelog (p_import_key, 'I', rec.aanduiding || 'Mandaat/#vervallen: ' || TO_CHAR (rec.mandaat), 'Mandaatschoning');
END IF;
v_count_cursor := v_count_cursor + 1;
END;
END LOOP;
fac.imp_writelog (p_import_key, 'S', 'Mandaatschoning/#personen: ' || TO_CHAR (v_count_cursor), '');
-- UWVA#30547: K(etenpartners) krijgen geen (zelden een) locatie mee vanuit
-- PSHCM, 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 K-personen GAMSG3 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.
v_errormsg := 'Fout toewijzen AMSG3-werkplek voor K(etenpartners)';
UPDATE fac_imp_perslid
SET prs_kenmerk2 = c_def_pandcode_ketenpartner
WHERE prs_kenmerk1 = 'K' AND prs_kenmerk2 IS NULL;
-- Bijwerken HRM-WP van personen uit import volgens ontvangen pandcode.
-- Cursor levert alleen personen waarvoor iets moet gebeuren!
v_count_cursor := 0;
v_errormsg := 'Fout bijwerken HRM-WP';
FOR rec_wp IN c_prs_wp
LOOP
BEGIN
v_errormsg := 'NONE';
v_aktie := '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 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 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 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 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 K(etenpartners) niet 'het eerste gebouw'
-- kiezen, maar het gebouw volgens de cursor (AMGS3).
v_new_gebouw_key := rec_wp.alg_gebouw_key;
ELSE
v_errormsg := 'Fout 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_gebouw_code := '0';
v_errormsg := 'Fout toevoegen gebouw op locatie/pandcode ' || rec_wp.alg_locatie_key || '/' || rec_wp.pandcode;
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 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 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 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 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_count_cursor := v_count_cursor + 1;
IF MOD (v_count_cursor, c_commitbuffer) = 0 THEN COMMIT; 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, 'W', rec_wp.aanduiding || v_errormsg, 'WP');
END;
END LOOP;
fac.imp_writelog (p_import_key, 'S', 'WP/#bijgewerkt: ' || TO_CHAR (v_count_cursor), '');
-- UWVA#20232: Bijwerken Regio-kenmerkveld van personen uit import als deze
-- leeg is of afwijkt van het gebouw waar ze zitten (hun HRM-WP
-- hebben).
v_count_cursor := 0;
FOR rec_regio IN c_prs_regio
LOOP
BEGIN
IF (rec_regio.prs_kenmerklink_key IS NULL)
THEN
v_errormsg := 'Fout toevoegen Regio-kenmerkveld';
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,
TO_CHAR (rec_regio.fac_usrdata_key));
ELSE
v_errormsg := 'Fout bijwerken Regio-kenmerkveld';
UPDATE prs_kenmerklink
SET prs_kenmerklink_waarde = TO_CHAR (rec_regio.fac_usrdata_key)
WHERE prs_kenmerklink_key = rec_regio.prs_kenmerklink_key;
END IF;
v_count_cursor := v_count_cursor + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := v_errormsg || '( ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'W', rec_regio.aanduiding || v_errormsg, 'Regio');
END;
END LOOP;
fac.imp_writelog (p_import_key, 'S', 'Regio/#bijgewerkt: ' || TO_CHAR (v_count_cursor), '');
COMMIT;
-- Loggen aantal personen voor en na import.
SELECT COUNT ( * )
INTO v_count
FROM prs_v_aanwezigperslid p, prs_v_aanwezigkenmerklink tm, fac_v_aanwezigusrdata tm_ud
WHERE p.prs_perslid_nr IS NOT NULL
AND p.prs_perslid_key = tm.prs_link_key
AND tm.prs_kenmerk_key = c_employeetype_key
AND fac.safe_to_number (tm.prs_kenmerklink_waarde) = tm_ud.fac_usrdata_key
AND tm_ud.fac_usrtab_key = c_usrtab_employeetype_key
AND tm_ud.fac_usrdata_code IN ('C', 'I', 'E', 'F', 'D', 'K', 'W', 'P', 'S') -- W is P geworden en S is nieuw! Komen C, D en K nog voor???
;
fac.imp_writelog (p_import_key, 'S', 'PSHCM-personen/#voor: ' || TO_CHAR (v_perslid_count_fac) || ' => #na: ' || TO_CHAR (v_count), '');
-- Loggen aantal personen zonder personeelsnummer.
SELECT COUNT ( * )
INTO v_count
FROM prs_v_aanwezigperslid
WHERE prs_perslid_nr IS NULL;
fac.imp_writelog (p_import_key, 'S', 'Personen/#zonder personeelsnummer: ' || TO_CHAR (v_count), '');
-- Verwijderen ongebruikte functies.
v_errormsg := 'Fout verwijderen functies';
DELETE FROM prs_srtperslid sp
WHERE NOT EXISTS (SELECT 1
FROM prs_perslid
WHERE prs_srtperslid_key = sp.prs_srtperslid_key);
-- UWVA#23714: Logisch verwijderen functies die alleen verwijderde personen
-- nog hebben.
v_errormsg := 'Fout logisch verwijderen functies';
UPDATE prs_srtperslid sp
SET sp.prs_srtperslid_verwijder = SYSDATE
WHERE sp.prs_srtperslid_verwijder IS NULL
AND NOT EXISTS (SELECT 1
FROM prs_v_aanwezigperslid
WHERE prs_srtperslid_key = sp.prs_srtperslid_key);
-- Ook verwijderen 'Alternatieve functie'-kenmerkvelden (key=1192) die naar
-- niet-meer-bestaande functies verwijzen.
DELETE FROM prs_kenmerklink kl
WHERE prs_kenmerk_key = 1192 -- Alternatieve functie
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: Bijwerken functieomschrijvingen (hoofdletters matchen).
FOR rec_func IN c_functie
LOOP
BEGIN
v_errormsg := 'Fout bijwerken functie: ' || rec_func.funcdscr;
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, 200);
v_errormsg := v_errormsg || ' (ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'W', v_errormsg, 'Functie');
END;
END LOOP;
-- UWVA#23788: Loggen pandcodes (incl. aantal personen) in importbestand,
-- waarvoor geen kostenplaats en/of gebouw kan worden bepaald.
FOR rec IN c_pandcode_onbekend
LOOP
BEGIN
v_errormsg := 'Fout loggen onbekende pandcodes';
IF (rec.prs_kostenplaats_nr IS NULL) -- Kostenplaats onbekend?
THEN
fac.imp_writelog (p_import_key, 'W', 'Kostenplaats onbekend: ' || rec.pandcode || ' (' || TO_CHAR (rec.aantal) || ' personen)', 'Pandcode onbekend');
ELSE
fac.imp_writelog (p_import_key, 'W', 'Geen gebouw met kostenplaats: ' || rec.pandcode || ' (' || TO_CHAR (rec.aantal) || ' personen)', 'Pandcode onbekend');
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, 'W', v_errormsg, 'Pandcode onbekend');
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;
*/
-- 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', 'Importproces PSHCM voltooid', v_time);
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 PSHCM afgebroken!');
END uwva_update_pshcm;
/
-- 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;
/
-- Functie om werknemertype te bepalen.
CREATE OR REPLACE PACKAGE uwva_abs
AS
FUNCTION get_employeetype (perslid_key IN NUMBER,
employeetype_key IN NUMBER)
RETURN VARCHAR2;
END uwva_abs;
/
CREATE OR REPLACE PACKAGE BODY uwva_abs
AS
FUNCTION get_employeetype (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_kenmerklink km, fac_usrdata ud
WHERE km.prs_link_key = perslid_key
AND km.prs_kenmerk_key = employeetype_key
AND fac.safe_to_number (km.prs_kenmerklink_waarde) = ud.fac_usrdata_key;
RETURN vf_employeetype;
EXCEPTION
WHEN OTHERS
THEN
RETURN '';
END get_employeetype;
END uwva_abs;
/
-- UWVA#18115: ABS-import herzien (en met UWVA#19010 nog Vinder-aanvullingen).
-- UWVA#79055: ABS-import gesplitst. Meeste verhuisd naar PSHCM-import en wat
-- overblijft op basis van de personeelsnummer (ipv. ABS-ID)!
CREATE OR REPLACE PROCEDURE uwva_update_abs (p_import_key IN NUMBER)
AS
-- Constanten
--c_absid_key NUMBER (10) := 1232; -- VERVALLEN per UWVA#79055
c_grp_default_key NUMBER (10) := 241;
c_grp_budgh_key NUMBER := 1061;
c_grp_medewerker_key NUMBER := 1601;
c_employeetype_key NUMBER (10) := 1040; -- Het flexkenmerk dat het employeetype registreert [W is P geworden en S is nieuw!]
-- C(contract), I(intern), E(extern), F(flexplek), D(dummy), K(ketenpartner), W(wonga), P(?), S(?)
c_usrtab_employeetype_key NUMBER (10) := 301; -- Dat is een referentiekenmerk naar fac_userdata die we opzoeken
-- Voor budgethouders (uit voormalige budgethouderimport)
l_oldcount NUMBER;
l_impcount NUMBER;
l_impcount_prj NUMBER;
c_kpn_maxvariation NUMBER := 0.5; -- Max new/old ratio to prevent undesired changes
nrbh1 NUMBER;
nrbh2 NUMBER;
c_maxvariation NUMBER := 20;
c_commitbuffer NUMBER := 5000; -- Om de zoveel committen
v_buffercount NUMBER := 0;
v_time VARCHAR2 (50);
-- 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', 'P', 'S')) ip -- W is P geworden en S is nieuw! Komen C, D en K nog voor???
LEFT JOIN -- UWVA#27483: E-mail volgens schrijfwijzer (INSERT-only)!
uwva_v_email_schrijfwijzer sw
ON ip.id = sw.imp_id;
*/
CURSOR c_prs_upd
IS
SELECT x.id,
x.account prs_perslid_oslogin,
x.funcdscr prs_srtperslid_omschrijving,
x.email prs_perslid_email,
x.empnum imp_perslid_nr_prefix, -- Alleen nog voor logging!
x.empnum_noprefix imp_perslid_nr_noprefix,
x.costcent prs_afdeling_naam,
p.prs_perslid_key,
COUNT (*) aantal
FROM uwva_imp_abs x, prs_v_aanwezigperslid p
WHERE SUBSTR (x.empnum, 1, 1) IN ('C', 'I', 'E', 'F', 'D', 'K', 'W', 'P', 'S') -- W is P geworden en S is nieuw! Komen C, D en K nog voor???
AND x.empnum_noprefix != '000000' -- Of K helemaal uitsluiten?
AND x.empnum_noprefix = p.prs_perslid_nr(+)
GROUP BY x.id,
x.account,
x.funcdscr,
x.email,
x.empnum,
x.empnum_noprefix,
x.costcent,
p.prs_perslid_key;
-- Gegeven persoon (Personeelsnummer en perslid_key), bepaal op basis van de rollen
-- die deze persoon heeft, welke autorisatiegroepen 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_persnr 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.empnum_noprefix = in_persnr
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', 'P', 'S')) -- W is P geworden en S is nieuw! Komen C, D en K nog voor???
;
-- Gegeven persoon (Personeelsnummer en perslid_key), bepaal op basis van de rollen
-- die deze persoon heeft, welke autorisatiegroepen 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_persnr 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.empnum_noprefix = in_persnr
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', 'P', 'S')) -- W is P geworden en S is nieuw! Komen C, D en K nog voor???
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;
-- 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 SUBSTR (imp.perslid_nr, 3) = p.prs_perslid_nr(+) -- TODO:Prefix!
ORDER BY 2;
-- Onbekende kostenplaats
CURSOR c_kpn_onbekend
IS
SELECT kpn.prs_kostenplaats_key,
imp.afdeling prs_kostenplaats_nr,
imp.perslid_nr imp_perslid_nr
FROM uwva_imp_kpn imp,
prs_v_aanwezigkostenplaats kpn
WHERE imp.afdeling IS NOT NULL
AND imp.status = 'A'
AND imp.afdeling = kpn.prs_kostenplaats_nr(+)
AND kpn.prs_kostenplaats_nr IS NULL
ORDER BY 2;
rec_upd c_prs_upd%ROWTYPE;
rec_groep c_groep%ROWTYPE;
rec_rol c_rol%ROWTYPE;
rec_rnu c_rol_not_used%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);
currentversion fac_module.fac_module_version%TYPE;
v_perslid_count_imp NUMBER;
v_perslid_count_fclt NUMBER;
v_count NUMBER (10);
v_update BOOLEAN;
v_perslid_key NUMBER (10);
v_prs_omschr VARCHAR2 (150);
v_profiel_key NUMBER (10);
v_profiel_omschr VARCHAR2 (30);
v_limiet NUMBER (10);
BEGIN
-- 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', 'P', 'S') -- W is P geworden en S is nieuw! Komen C, D en K nog voor???
;
-- 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_v_aanwezigperslid
WHERE (prs_perslid_nr IS NOT NULL OR prs_perslid_oslogin IS NOT NULL)
AND uwva_abs.get_employeetype (prs_perslid_key, c_employeetype_key) IN ('C', 'I', 'E', 'F', 'D', 'K', 'W', 'P', 'S') -- W is P geworden en S is nieuw! Komen C, D en K nog voor???
;
-- 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;
-- *** Update ***
FOR rec_upd IN c_prs_upd
LOOP
BEGIN
-- Init
v_errormsg := 'Update init';
v_update := TRUE;
v_perslid_key := 0;
v_prs_omschr := 'Personeelsnummer/Login/E-mail/ABS-ID: '
|| rec_upd.imp_perslid_nr_prefix
|| '/' || rec_upd.prs_perslid_oslogin
|| '/' || rec_upd.prs_perslid_email
|| '/' || rec_upd.id;
-- *** Matching ***********************************
-- NB: zie uitleg bij cursor
IF v_update
THEN
-- *** Matching op Personeelsnummer ***
v_errormsg := 'Uniek Personeelsnummer';
-- Check of Personeelsnummer wel uniek is in importbestand
-- Een persoon kan vaker in het importbestandvoorkomen, met alle gegevens behalve de rol hetzelfde.
-- Daarom SELECT DISTINCT op Personeelsnummer en (omdat die ook uniek moet zijn) accountnaam!
SELECT COUNT(*)
INTO v_count
FROM (SELECT DISTINCT empnum_noprefix,
account
FROM uwva_imp_abs
WHERE empnum_noprefix = rec_upd.imp_perslid_nr_noprefix );
-- Niet uniek --> error
IF (v_count != 1)
THEN
v_errorhint := 'Personeelsnummer 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 Personeelsnummer';
-- 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 Personeelsnummer 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
WHERE prs_perslid_nr = rec_upd.imp_perslid_nr_noprefix
AND uwva_abs.get_employeetype (prs_perslid_key, c_employeetype_key)
IN ('C', 'I', 'E', 'F', 'D', 'K', 'W', 'P', 'S') -- W is P geworden en S is nieuw! Komen C, D en K nog voor???
;
-- Persoon zou met PSHCM-import reeds moeten zijn aangemaakt!
IF (v_count = 1)
THEN
v_errormsg := 'Fout bepalen persoon (obv. Personeelsnummer)';
SELECT prs_perslid_key
INTO v_perslid_key
FROM prs_v_aanwezigperslid
WHERE prs_perslid_nr = rec_upd.imp_perslid_nr_noprefix
AND uwva_abs.get_employeetype (prs_perslid_key, c_employeetype_key)
IN ('C', 'I', 'E', 'F', 'D', 'K', 'W', 'P', 'S') -- W is P geworden en S is nieuw! Komen C, D en K nog voor???
;
-- Is niet uniek --> error
ELSE
v_errorhint := 'Kan Personeelsnummer 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;
-- *** Rol(len) ***************************************************************************
-- Als persoon uniek bepaald (v_perslid_key gevuld), dan v_update=TRUE!
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, uwva_provisioning up, fac_profiel fp
WHERE uia.empnum_noprefix = rec_upd.imp_perslid_nr_noprefix
AND uia.grpfname = up.uwva_rol_omschr
AND up.fac_profiel_key = fp.fac_profiel_key;
-- 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, uwva_provisioning up, fac_profiel fp
WHERE uia.empnum_noprefix = rec_upd.imp_perslid_nr_noprefix
AND uia.grpfname = up.uwva_rol_omschr
AND up.fac_profiel_key = fp.fac_profiel_key
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
-- *** Autorisatiegroepen *********************
-- Verwijder alle rechten, die iemand volgens ABS niet heeft.
FOR rec_groep IN c_groep (rec_upd.imp_perslid_nr_noprefix, v_perslid_key)
LOOP
v_errormsg := 'Rol->Autgroep 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.imp_perslid_nr_noprefix, v_perslid_key)
LOOP
v_errormsg := 'Rol->Autgroep 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;
-- 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;
COMMIT;
-- *** 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.imp_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 = SUBSTR (imp.perslid_nr, 3)) -- TODO:Prefix!
;
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;
fac.imp_writelog (p_import_key, 'S', 'Import voltooid', v_time);
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 autorisatiegroepen 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