1360 lines
55 KiB
SQL
1360 lines
55 KiB
SQL
CREATE OR REPLACE PACKAGE AAXX
|
||
AS
|
||
-- PACKAGES voor de perslid import functions
|
||
|
||
PROCEDURE set_prs_kenmerk (p_import_key IN NUMBER,
|
||
p_niveau IN VARCHAR2,
|
||
p_kenmerk_key IN NUMBER,
|
||
p_link_key IN NUMBER,
|
||
p_kenmerk_waarde IN VARCHAR2);
|
||
|
||
PROCEDURE prs_set_werkplek (p_perslid_key IN NUMBER,
|
||
p_ruimte_key IN NUMBER,
|
||
p_werkplek_volgnr IN NUMBER,
|
||
p_werkplek_omschrijving IN VARCHAR2,
|
||
p_wp_expliciet IN NUMBER,
|
||
p_errormsg OUT VARCHAR2,
|
||
p_errorhint OUT VARCHAR2);
|
||
|
||
PROCEDURE prs_update_werkplek (p_locatie_code IN VARCHAR2,
|
||
p_gebouw_code IN VARCHAR2,
|
||
p_verdieping_volgnr IN VARCHAR2,
|
||
p_ruimte_nr IN VARCHAR2,
|
||
p_werkplek_volgnr IN NUMBER,
|
||
p_werkplek_omschrijving IN VARCHAR2,
|
||
p_perslid_key IN NUMBER,
|
||
p_wp_expliciet IN NUMBER,
|
||
p_std_wp_ruimte_nr IN VARCHAR2,
|
||
p_errormsg OUT VARCHAR2,
|
||
p_errorhint OUT VARCHAR2);
|
||
|
||
PROCEDURE fac_gen_update_perslid (p_import_key IN NUMBER,
|
||
p_sleutelkolom IN VARCHAR2,
|
||
p_wp_mode IN NUMBER,
|
||
p_std_wp_ruimte_nr IN VARCHAR2);
|
||
|
||
PROCEDURE prs_del_perslid (p_import_key IN NUMBER,
|
||
p_perslid_key IN NUMBER,
|
||
p_wp_expliciet IN NUMBER,
|
||
p_delete IN NUMBER);
|
||
|
||
PROCEDURE insert_perslid_from_mld (p_applname IN VARCHAR2,
|
||
p_applrun IN VARCHAR2);
|
||
|
||
FUNCTION count_Work_Days_InclTime( pdate1 IN DATE , pdate2 IN DATE ) RETURN NUMBER;
|
||
|
||
FUNCTION count_Work_Days( pdate1 IN DATE , pdate2 IN DATE ) RETURN NUMBER;
|
||
END;
|
||
/
|
||
|
||
|
||
/* Formatted on 3/18/2011 10:07:59 AM (QP5 v5.136.908.31019) */
|
||
CREATE OR REPLACE PACKAGE BODY AAXX
|
||
AS
|
||
-- PACKAGE voor de perslid import functions
|
||
|
||
|
||
|
||
PROCEDURE set_prs_kenmerk (p_import_key IN NUMBER,
|
||
p_niveau IN VARCHAR2,
|
||
p_kenmerk_key IN NUMBER,
|
||
p_link_key IN NUMBER,
|
||
p_kenmerk_waarde IN VARCHAR2)
|
||
AS
|
||
v_count NUMBER;
|
||
v_hint VARCHAR2 (100);
|
||
v_aktie VARCHAR2 (100);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_errormsg VARCHAR2 (200);
|
||
BEGIN
|
||
v_hint :=
|
||
' kenmerk '
|
||
|| p_niveau
|
||
|| ' kenmerk_key: '
|
||
|| p_kenmerk_key
|
||
|| ' link: '
|
||
|| p_link_key
|
||
|| ' waarde: '
|
||
|| p_kenmerk_waarde;
|
||
v_aktie := 'Toevoegen';
|
||
|
||
SELECT COUNT ( * )
|
||
INTO v_count
|
||
FROM prs_kenmerklink
|
||
WHERE prs_link_key = p_link_key
|
||
AND prs_kenmerklink_niveau = p_niveau
|
||
AND prs_kenmerk_key = p_kenmerk_key
|
||
AND prs_kenmerklink_verwijder IS NULL;
|
||
|
||
IF v_count = 1
|
||
THEN
|
||
IF p_kenmerk_waarde IS NULL
|
||
THEN
|
||
v_aktie := 'Verwijder';
|
||
|
||
DELETE prs_kenmerklink
|
||
WHERE prs_link_key = p_link_key
|
||
AND prs_kenmerklink_niveau = p_niveau
|
||
AND prs_kenmerk_key = p_kenmerk_key
|
||
AND prs_kenmerklink_verwijder IS NULL;
|
||
ELSE
|
||
v_aktie := 'Wijzigen';
|
||
|
||
UPDATE prs_kenmerklink
|
||
SET prs_kenmerklink_waarde = p_kenmerk_waarde
|
||
WHERE prs_link_key = p_link_key
|
||
AND prs_kenmerklink_niveau = p_niveau
|
||
AND prs_kenmerk_key = p_kenmerk_key
|
||
AND prs_kenmerklink_verwijder IS NULL;
|
||
END IF;
|
||
ELSE
|
||
v_aktie := 'Toevoegen';
|
||
|
||
IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL
|
||
THEN
|
||
INSERT INTO PRS_KENMERKLINK (PRS_KENMERK_KEY,
|
||
PRS_LINK_KEY,
|
||
PRS_KENMERKLINK_NIVEAU,
|
||
PRS_KENMERKLINK_WAARDE)
|
||
VALUES (p_kenmerk_key,
|
||
p_link_key,
|
||
p_niveau,
|
||
p_kenmerk_waarde);
|
||
END IF;
|
||
END IF;
|
||
--fac.imp_writelog (p_import_key, 'I', 'Verwerken kenmerk ' || v_aktie || ' kenmerk_key:' || p_kenmerk_key || ' waarde:'|| p_kenmerk_waarde || '-','');
|
||
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,
|
||
v_aktie || ' - ' || v_hint);
|
||
END;
|
||
|
||
|
||
PROCEDURE prs_set_werkplek (p_perslid_key IN NUMBER,
|
||
p_ruimte_key IN NUMBER,
|
||
p_werkplek_volgnr IN NUMBER,
|
||
p_werkplek_omschrijving IN VARCHAR2,
|
||
p_wp_expliciet IN NUMBER,
|
||
p_errormsg OUT VARCHAR2,
|
||
p_errorhint OUT VARCHAR2)
|
||
IS
|
||
v_ruimte_nr VARCHAR2 (10);
|
||
v_werkplek_volgnr NUMBER (3);
|
||
v_werkplek_omschrijving VARCHAR2 (30);
|
||
v_werkplek_key NUMBER (10);
|
||
v_perslidwerkplek_key NUMBER (10);
|
||
v_huidige_ruimte_key NUMBER (10);
|
||
v_huidige_pwp_key NUMBER (10);
|
||
v_huidige_wp_key NUMBER (10);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
BEGIN
|
||
-- bepaal het ruimte_nummer voor de omschrijving van de werkplek
|
||
p_errorhint := 'Fout bij bepalen nieuwe ruimte ruimte_key:' || p_ruimte_key;
|
||
SELECT alg_ruimte_nr
|
||
INTO v_ruimte_nr
|
||
FROM alg_ruimte
|
||
WHERE alg_ruimte_key = p_ruimte_key;
|
||
|
||
-- vind de huidige hoofdwerkplek
|
||
p_errorhint := 'Fout bij zoeken naar de hoofdwerkplek.';
|
||
SELECT MAX (pwp.prs_perslidwerkplek_key)
|
||
INTO v_huidige_pwp_key
|
||
FROM prs_perslid p, prs_perslidwerkplek pwp, prs_werkplek wp
|
||
WHERE p.prs_perslid_key = p_perslid_key
|
||
AND p.prs_perslid_key = pwp.prs_perslid_key
|
||
AND pwp.prs_werkplek_key = wp.prs_werkplek_key
|
||
AND COALESCE (wp.prs_werkplek_virtueel, 0) <> '1'
|
||
AND pwp.prs_perslidwerkplek_volgnr = 1;
|
||
|
||
-- met de bijbehorende werkplek
|
||
IF v_huidige_pwp_key IS NOT NULL
|
||
THEN
|
||
p_errorhint := 'Fout bij bepalen of persoon al een werkplek heeft';
|
||
|
||
SELECT pwp.prs_werkplek_key
|
||
INTO v_huidige_wp_key
|
||
FROM prs_perslidwerkplek pwp
|
||
WHERE pwp.prs_perslidwerkplek_key = v_huidige_pwp_key;
|
||
END IF;
|
||
|
||
|
||
IF p_wp_expliciet = 1
|
||
THEN
|
||
IF p_werkplek_omschrijving IS NULL
|
||
THEN
|
||
v_werkplek_omschrijving :=
|
||
v_ruimte_nr || '/' || TO_CHAR (v_werkplek_volgnr);
|
||
ELSE
|
||
v_werkplek_omschrijving := p_werkplek_omschrijving;
|
||
END IF;
|
||
|
||
p_errorhint := 'Fout bij bepalen werkplekvolgnr.';
|
||
|
||
IF (p_werkplek_volgnr IS NOT NULL)
|
||
THEN
|
||
BEGIN
|
||
-- expliciete werkplekken
|
||
SELECT prs_werkplek_key
|
||
INTO v_werkplek_key
|
||
FROM prs_werkplek
|
||
WHERE prs_alg_ruimte_key = p_ruimte_key
|
||
AND prs_werkplek_volgnr = p_werkplek_volgnr;
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
-- voeg werkplek maar toe
|
||
INSERT INTO prs_werkplek (prs_werkplek_module,
|
||
prs_werkplek_volgnr,
|
||
prs_werkplek_omschrijving,
|
||
prs_alg_ruimte_key)
|
||
VALUES ('PRR',
|
||
v_werkplek_volgnr,
|
||
v_werkplek_omschrijving,
|
||
p_ruimte_key)
|
||
RETURNING prs_werkplek_key
|
||
INTO v_werkplek_key;
|
||
END;
|
||
|
||
IF v_huidige_wp_key <> v_werkplek_key OR v_huidige_wp_key IS NULL
|
||
THEN
|
||
IF v_huidige_pwp_key IS NOT NULL
|
||
THEN
|
||
p_errorhint := 'Omhangen perslidwerkplek record.';
|
||
|
||
-- verplaatsen van de persoon
|
||
UPDATE prs_perslidwerkplek
|
||
SET prs_werkplek_key = v_werkplek_key
|
||
WHERE prs_perslidwerkplek_key = v_huidige_pwp_key;
|
||
|
||
v_perslidwerkplek_key := v_huidige_pwp_key;
|
||
ELSE
|
||
-- toevoegen van perslidwerkplek record
|
||
p_errorhint := 'Toevoegen perslidwerkplek record.';
|
||
|
||
INSERT INTO prs_perslidwerkplek (prs_perslid_key,
|
||
prs_werkplek_key,
|
||
prs_perslidwerkplek_volgnr)
|
||
VALUES (p_perslid_key, v_werkplek_key, 1)
|
||
RETURNING prs_perslidwerkplek_key
|
||
INTO v_perslidwerkplek_key;
|
||
END IF;
|
||
END IF;
|
||
ELSE
|
||
p_errormsg :=
|
||
'Geen werkplekvolgnummer gevonden bij expliciete werkplekken';
|
||
END IF;
|
||
ELSE -- impliciete werkplekken
|
||
-- kijk of de ruimte gelijk is aan de huidige ruimte
|
||
p_errorhint := 'Bepalen huidige ruimte.';
|
||
|
||
SELECT MAX (prs_alg_ruimte_key)
|
||
INTO v_huidige_ruimte_key
|
||
FROM prs_werkplek
|
||
WHERE prs_werkplek_key = v_huidige_wp_key;
|
||
|
||
IF v_huidige_ruimte_key <> p_ruimte_key
|
||
OR v_huidige_ruimte_key IS NULL
|
||
THEN
|
||
-- geen lege werkplekken gevonden.
|
||
-- maak een nieuwe werkplek aan met als volgnummer het hoogste gevonden nummmer + 1
|
||
p_errorhint := 'Maak een nieuwe werkplek aan';
|
||
|
||
SELECT COALESCE (MAX (prs_werkplek_volgnr), 0) + 1
|
||
INTO v_werkplek_volgnr
|
||
FROM prs_werkplek
|
||
WHERE prs_alg_ruimte_key = p_ruimte_key;
|
||
|
||
INSERT INTO prs_werkplek (prs_werkplek_module,
|
||
prs_werkplek_volgnr,
|
||
prs_werkplek_omschrijving,
|
||
prs_alg_ruimte_key)
|
||
VALUES ('PRR',
|
||
v_werkplek_volgnr,
|
||
v_ruimte_nr || '/' || TO_CHAR (v_werkplek_volgnr),
|
||
p_ruimte_key)
|
||
RETURNING prs_werkplek_key
|
||
INTO v_werkplek_key;
|
||
|
||
-- nu hebben we een vrije werkplek
|
||
|
||
IF v_huidige_pwp_key IS NOT NULL
|
||
THEN
|
||
p_errorhint := 'Omhangen perslidwerkplek record.';
|
||
|
||
-- verplaatsen van de persoon
|
||
UPDATE prs_perslidwerkplek
|
||
SET prs_werkplek_key = v_werkplek_key
|
||
WHERE prs_perslidwerkplek_key = v_huidige_pwp_key;
|
||
|
||
v_perslidwerkplek_key := v_huidige_pwp_key;
|
||
ELSE
|
||
-- toevoegen van perslidwerkplek record
|
||
p_errorhint := 'Toevoegen perslidwerkplek record.';
|
||
|
||
INSERT INTO prs_perslidwerkplek (prs_perslid_key,
|
||
prs_werkplek_key,
|
||
prs_perslidwerkplek_volgnr)
|
||
VALUES (p_perslid_key, v_werkplek_key, 1)
|
||
RETURNING prs_perslidwerkplek_key
|
||
INTO v_perslidwerkplek_key;
|
||
END IF;
|
||
END IF;
|
||
END IF;
|
||
|
||
-- check of we nog iets moeten weggooien
|
||
-- FSN#26947/MvdH: hierboven wordt altijd een nieuwe werkplek aangemaakt
|
||
-- en die wordt gekoppeld aan een bestaande of nieuwe perslidwerkplek
|
||
-- (indien bestaand dan huidige_pwp_key:=v_perslidwerkplek_key en indien
|
||
-- nieuw dan huidige_pwp_key IS NULL) => beide if-condities nooit waar!
|
||
--IF v_huidige_pwp_key <> v_perslidwerkplek_key
|
||
-- OR (v_perslidwerkplek_key IS NULL AND v_huidige_pwp_key IS NOT NULL)
|
||
--THEN
|
||
-- DELETE prs_perslidwerkplek
|
||
-- WHERE prs_perslidwerkplek_key = v_huidige_pwp_key;
|
||
--END IF;
|
||
|
||
-- FSN#26947/MvdH: hierboven wordt altijd een nieuwe werkplek aangemaakt
|
||
-- en, alleen als er ook al een was, dan is onderstaande conditie waar!
|
||
-- => alleen igv. impliciet in dat geval de oude verwijderen!
|
||
--IF p_wp_expliciet <> 1
|
||
-- AND (v_huidige_wp_key <> v_werkplek_key
|
||
-- OR (v_werkplek_key IS NULL AND v_huidige_wp_key IS NOT NULL))
|
||
--THEN
|
||
-- UPDATE prs_werkplek
|
||
-- SET prs_werkplek_verwijder = SYSDATE
|
||
-- WHERE prs_werkplek_key = v_huidige_wp_key;
|
||
--END IF;
|
||
IF p_wp_expliciet <> 1 AND v_huidige_wp_key IS NOT NULL
|
||
THEN
|
||
DELETE FROM prs_werkplek
|
||
WHERE prs_werkplek_key = v_huidige_wp_key;
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
p_errormsg :=
|
||
' (ORACLE error number = <'
|
||
|| ORACLE_err_num
|
||
|| '> ORACLE error message = <'
|
||
|| ORACLE_err_mes
|
||
|| '>)';
|
||
END prs_set_werkplek;
|
||
|
||
|
||
PROCEDURE prs_update_werkplek (p_locatie_code IN VARCHAR2,
|
||
p_gebouw_code IN VARCHAR2,
|
||
p_verdieping_volgnr IN VARCHAR2,
|
||
p_ruimte_nr IN VARCHAR2,
|
||
p_werkplek_volgnr IN NUMBER,
|
||
p_werkplek_omschrijving IN VARCHAR2,
|
||
p_perslid_key IN NUMBER,
|
||
p_wp_expliciet IN NUMBER,
|
||
p_std_wp_ruimte_nr IN VARCHAR2,
|
||
p_errormsg OUT VARCHAR2,
|
||
p_errorhint OUT VARCHAR2)
|
||
IS
|
||
v_ruimte_key NUMBER (10);
|
||
v_locatie_key NUMBER (10);
|
||
v_gebouw_key NUMBER (10);
|
||
v_verdieping_key NUMBER (10);
|
||
v_ruimte_onveranderd NUMBER (1);
|
||
v_count NUMBER (10);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
BEGIN
|
||
p_errorhint :=
|
||
'Fout bij bepalen of persoon al een perslidwerkplek heeft';
|
||
v_ruimte_key := -1;
|
||
v_ruimte_onveranderd := 0;
|
||
|
||
-- laten we eerst maar even zoeken welke gegevens er boven tafel te krijgen zijn.
|
||
IF p_locatie_code IS NOT NULL
|
||
THEN
|
||
p_errorhint := 'Fout bij bepalen locatie [' || p_locatie_code || ']';
|
||
|
||
SELECT alg_locatie_key
|
||
INTO v_locatie_key
|
||
FROM alg_locatie
|
||
WHERE UPPER (alg_locatie_code) = UPPER (p_locatie_code)
|
||
AND alg_locatie_verwijder IS NULL;
|
||
|
||
IF p_gebouw_code IS NOT NULL
|
||
THEN
|
||
p_errorhint := 'Fout bij bepalen gebouw [' || p_gebouw_code || ']';
|
||
|
||
SELECT alg_gebouw_key
|
||
INTO v_gebouw_key
|
||
FROM alg_gebouw
|
||
WHERE UPPER (alg_gebouw_code) = UPPER (p_gebouw_code)
|
||
AND alg_gebouw_verwijder IS NULL
|
||
AND alg_locatie_key = v_locatie_key;
|
||
|
||
IF p_verdieping_volgnr IS NOT NULL
|
||
THEN
|
||
p_errorhint := 'Fout bij bepalen verdieping';
|
||
|
||
SELECT alg_verdieping_key
|
||
INTO v_verdieping_key
|
||
FROM alg_verdieping
|
||
WHERE alg_gebouw_key = v_gebouw_key
|
||
AND alg_verdieping_volgnr = p_verdieping_volgnr
|
||
AND alg_verdieping_verwijder IS NULL;
|
||
|
||
IF p_ruimte_nr IS NOT NULL
|
||
THEN
|
||
p_errorhint :=
|
||
'Fout bij bepalen ruimte ['
|
||
|| TO_CHAR (p_ruimte_nr)
|
||
|| ']';
|
||
|
||
SELECT alg_ruimte_key
|
||
INTO v_ruimte_key
|
||
FROM alg_ruimte
|
||
WHERE alg_verdieping_key = v_verdieping_key
|
||
AND alg_ruimte_verwijder IS NULL
|
||
AND UPPER (alg_ruimte_nr) = UPPER (p_ruimte_nr);
|
||
|
||
-- kijk of ik al een werkplek heb in deze kamer
|
||
SELECT COUNT (wp.prs_werkplek_key)
|
||
INTO v_count
|
||
FROM prs_werkplek wp, prs_perslidwerkplek pwp
|
||
WHERE pwp.prs_perslid_key = p_perslid_key
|
||
AND wp.prs_werkplek_key = pwp.prs_werkplek_key
|
||
AND wp.prs_alg_ruimte_key = v_ruimte_key
|
||
AND COALESCE (wp.prs_werkplek_virtueel, 0) = 0;
|
||
|
||
IF v_count = 0
|
||
THEN
|
||
v_ruimte_onveranderd := 0;
|
||
ELSE
|
||
v_ruimte_onveranderd := 1;
|
||
END IF;
|
||
ELSE
|
||
-- kijk of ik al een werkplek heb op deze verdieping
|
||
SELECT COUNT (wp.prs_werkplek_key)
|
||
INTO v_count
|
||
FROM prs_werkplek wp,
|
||
prs_perslidwerkplek pwp,
|
||
alg_ruimte r
|
||
WHERE pwp.prs_perslid_key = p_perslid_key
|
||
AND wp.prs_werkplek_key = pwp.prs_werkplek_key
|
||
AND wp.prs_alg_ruimte_key = r.alg_ruimte_key
|
||
AND COALESCE (wp.prs_werkplek_virtueel, 0) = 0
|
||
AND r.alg_verdieping_key = v_verdieping_key;
|
||
|
||
IF v_count = 0
|
||
THEN
|
||
-- vind de standaardruimte binnen de gevonden verdieping
|
||
SELECT MAX (alg_ruimte_key)
|
||
INTO v_ruimte_key
|
||
FROM alg_ruimte
|
||
WHERE alg_verdieping_key = v_verdieping_key
|
||
AND alg_ruimte_verwijder IS NULL
|
||
AND alg_ruimte_nr = p_std_wp_ruimte_nr;
|
||
ELSE
|
||
v_ruimte_onveranderd := 1;
|
||
END IF;
|
||
END IF;
|
||
ELSE
|
||
-- kijk of ik al een werkplek heb in dit gebouw
|
||
SELECT COUNT (wp.prs_werkplek_key)
|
||
INTO v_count
|
||
FROM prs_werkplek wp,
|
||
prs_perslidwerkplek pwp,
|
||
alg_ruimte r,
|
||
alg_verdieping v
|
||
WHERE pwp.prs_perslid_key = p_perslid_key
|
||
AND wp.prs_werkplek_key = pwp.prs_werkplek_key
|
||
AND wp.prs_alg_ruimte_key = r.alg_ruimte_key
|
||
AND COALESCE (wp.prs_werkplek_virtueel, 0) = 0
|
||
AND r.alg_verdieping_key = v.alg_verdieping_key
|
||
AND v.alg_gebouw_key = v_gebouw_key;
|
||
|
||
IF v_count = 0
|
||
THEN
|
||
-- vind de standaardruimte binnen het gevonden gebouw
|
||
SELECT MAX (alg_ruimte_key)
|
||
INTO v_ruimte_key
|
||
FROM alg_ruimte r, alg_verdieping v
|
||
WHERE v.alg_gebouw_key = v_gebouw_key
|
||
AND v.alg_verdieping_key = r.alg_verdieping_key
|
||
AND r.alg_ruimte_verwijder IS NULL
|
||
AND r.alg_ruimte_nr = p_std_wp_ruimte_nr;
|
||
ELSE
|
||
v_ruimte_onveranderd := 1;
|
||
END IF;
|
||
END IF;
|
||
ELSE
|
||
-- kijk of ik al een werkplek heb op deze locatie
|
||
SELECT COUNT (wp.prs_werkplek_key)
|
||
INTO v_count
|
||
FROM prs_werkplek wp,
|
||
prs_perslidwerkplek pwp,
|
||
alg_ruimte r,
|
||
alg_verdieping v,
|
||
alg_gebouw g
|
||
WHERE pwp.prs_perslid_key = p_perslid_key
|
||
AND wp.prs_werkplek_key = pwp.prs_werkplek_key
|
||
AND wp.prs_alg_ruimte_key = r.alg_ruimte_key
|
||
AND COALESCE (wp.prs_werkplek_virtueel, 0) = 0
|
||
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;
|
||
|
||
IF v_count = 0
|
||
THEN
|
||
-- vind de standaardruimte binnen de gevonden locatie
|
||
SELECT MAX (alg_ruimte_key)
|
||
INTO v_ruimte_key
|
||
FROM alg_ruimte r, alg_verdieping v, alg_gebouw g
|
||
WHERE g.alg_locatie_key = v_locatie_key
|
||
AND g.alg_gebouw_key = v.alg_gebouw_key
|
||
AND v.alg_verdieping_key = r.alg_verdieping_key
|
||
AND r.alg_ruimte_verwijder IS NULL
|
||
AND r.alg_ruimte_nr = p_std_wp_ruimte_nr;
|
||
ELSE
|
||
v_ruimte_onveranderd := 1;
|
||
END IF;
|
||
END IF;
|
||
|
||
-- we hebben nu een ruimte_key voor de nieuwe werkplek
|
||
IF v_ruimte_onveranderd = 0
|
||
THEN
|
||
IF v_ruimte_key IS NOT NULL
|
||
THEN
|
||
prs_set_werkplek (p_perslid_key,
|
||
v_ruimte_key,
|
||
p_werkplek_volgnr,
|
||
p_werkplek_omschrijving,
|
||
p_wp_expliciet,
|
||
p_errormsg,
|
||
p_errorhint);
|
||
ELSE
|
||
p_errormsg := 'Kan geen standaardruimte met ruimtenr:<' || p_std_wp_ruimte_nr || '> vinden';
|
||
END IF;
|
||
END IF;
|
||
END IF;
|
||
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
p_errormsg :=
|
||
' (ORACLE error number = <'
|
||
|| ORACLE_err_num
|
||
|| '> ORACLE error message = <'
|
||
|| ORACLE_err_mes
|
||
|| '>)';
|
||
END prs_update_werkplek;
|
||
|
||
|
||
--
|
||
-- p_wp_mode (0 geen werkplekken 1, impliciet 2 expliciet)
|
||
--
|
||
PROCEDURE fac_gen_update_perslid (p_import_key IN NUMBER,
|
||
p_sleutelkolom IN VARCHAR2,
|
||
p_wp_mode IN NUMBER,
|
||
p_std_wp_ruimte_nr IN VARCHAR2)
|
||
IS
|
||
c_fielddelimitor VARCHAR2 (1) := ';';
|
||
|
||
v_newline VARCHAR2 (1000); -- Input line
|
||
v_errormsg VARCHAR2 (1000);
|
||
v_errorhint VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_aanduiding VARCHAR2 (200);
|
||
|
||
v_count NUMBER (10);
|
||
v_ongeldig NUMBER (1);
|
||
v_count_update NUMBER (10);
|
||
v_count_error NUMBER (10);
|
||
v_count_tot NUMBER (10);
|
||
v_wpcount_error NUMBER (10);
|
||
v_wp_expliciet NUMBER (10);
|
||
|
||
--
|
||
v_perslid_key NUMBER (10);
|
||
v_afdeling_key NUMBER (10);
|
||
v_srtperslid_key NUMBER (10);
|
||
|
||
|
||
CURSOR cSPERSLID
|
||
IS
|
||
SELECT MIN (prs_srtperslid_omschrijving) prs_srtperslid_omschrijving
|
||
FROM fac_imp_perslid i
|
||
WHERE NOT EXISTS
|
||
(SELECT prs_srtperslid_key
|
||
FROM prs_srtperslid sp
|
||
WHERE UPPER (sp.prs_srtperslid_omschrijving) =
|
||
UPPER (i.prs_srtperslid_omschrijving))
|
||
GROUP BY UPPER (prs_srtperslid_omschrijving);
|
||
|
||
recSPersLid cSPersLid%ROWTYPE;
|
||
|
||
CURSOR cPERSLID
|
||
IS
|
||
SELECT * FROM FAC_IMP_PERSLID;
|
||
|
||
recPersLid cPersLid%ROWTYPE;
|
||
BEGIN
|
||
|
||
v_count_update := 0;
|
||
v_count_tot := 0;
|
||
v_count_error := 0;
|
||
v_wpcount_error := 0;
|
||
|
||
FOR recSPersLid IN cSPersLid
|
||
LOOP
|
||
BEGIN
|
||
v_aanduiding := '';
|
||
v_errormsg := '';
|
||
v_errorhint := '';
|
||
v_count_tot := v_count_tot + 1;
|
||
|
||
v_aanduiding := recSPersLid.PRS_SRTPERSLID_OMSCHRIJVING;
|
||
|
||
v_errorhint := 'Fout bij toevoegen functie';
|
||
|
||
INSERT INTO prs_srtperslid (prs_srtperslid_omschrijving)
|
||
VALUES (recSPersLid.prs_srtperslid_omschrijving);
|
||
|
||
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 :=
|
||
' (ORACLE error number = <'
|
||
|| ORACLE_err_num
|
||
|| '> ORACLE error message = <'
|
||
|| ORACLE_err_mes
|
||
|| '>)';
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
|
||
COMMIT; -- tbv logging
|
||
END;
|
||
END LOOP;
|
||
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'S',
|
||
'Personeelsfunctie: toegevoegde regels zonder foutmelding: '
|
||
|| TO_CHAR (v_count_tot - v_count_error),
|
||
'');
|
||
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'S',
|
||
'Personeelsfunctie: toegevoegde regels met foutmelding: '
|
||
|| TO_CHAR (v_count_error),
|
||
'');
|
||
COMMIT; -- logging
|
||
|
||
|
||
v_count_update := 0;
|
||
v_count_tot := 0;
|
||
v_count_error := 0;
|
||
|
||
FOR recPersLid IN cPersLid
|
||
LOOP
|
||
BEGIN
|
||
v_aanduiding := '';
|
||
v_errormsg := '';
|
||
v_errorhint := '';
|
||
v_count_tot := v_count_tot + 1;
|
||
|
||
v_aanduiding :=
|
||
recPersLid.prs_perslid_naam
|
||
|| '|'
|
||
|| recPersLid.prs_perslid_voornaam
|
||
|| '| ';
|
||
v_errormsg := '';
|
||
|
||
v_errorhint := 'Fout bij bepalen functie';
|
||
|
||
SELECT prs_srtperslid_key
|
||
INTO v_srtperslid_key
|
||
FROM prs_srtperslid
|
||
WHERE prs_srtperslid_verwijder IS NULL
|
||
AND UPPER (prs_srtperslid_omschrijving) =
|
||
UPPER (recPersLid.prs_srtperslid_omschrijving);
|
||
|
||
v_errorhint :=
|
||
'Afdeling niet gevonden ['
|
||
|| recPersLid.prs_afdeling_naam
|
||
|| ']';
|
||
|
||
SELECT prs_afdeling_key
|
||
INTO v_afdeling_key
|
||
FROM prs_afdeling
|
||
WHERE UPPER (prs_afdeling_naam) =
|
||
UPPER (recPersLid.prs_afdeling_naam)
|
||
AND prs_afdeling_verwijder IS NULL;
|
||
|
||
-- p_sleutelkolom
|
||
-- NR = prs_perslid_nr
|
||
-- EMAIL = prs_perslid_email
|
||
-- LOGIN = prs_perslid_oslogin
|
||
v_errorhint := 'Kijken of de persoon al bestaat';
|
||
|
||
SELECT MAX (prs_perslid_key), COUNT ( * )
|
||
INTO v_perslid_key, v_count
|
||
FROM prs_perslid
|
||
WHERE prs_perslid_verwijder IS NULL
|
||
AND ( (p_sleutelkolom IS NULL
|
||
AND UPPER (prs_perslid_naam) =
|
||
UPPER (recPersLid.prs_perslid_naam)
|
||
AND UPPER (prs_perslid_voornaam) =
|
||
UPPER (recPersLid.prs_perslid_voornaam))
|
||
OR (UPPER (p_sleutelkolom) = 'NR'
|
||
AND UPPER (prs_perslid_nr) =
|
||
UPPER (recPersLid.prs_perslid_nr)
|
||
OR UPPER (p_sleutelkolom) = 'EMAIL'
|
||
AND UPPER (prs_perslid_email) =
|
||
UPPER (recPersLid.prs_perslid_email)
|
||
OR UPPER (p_sleutelkolom) = 'LOGIN'
|
||
AND UPPER (prs_perslid_oslogin) =
|
||
UPPER (recPersLid.prs_perslid_oslogin)));
|
||
|
||
IF (v_count = 0)
|
||
THEN
|
||
v_errorhint := 'Fout bij toevoegen persoon';
|
||
|
||
INSERT INTO prs_perslid (prs_perslid_module,
|
||
prs_srtperslid_key,
|
||
prs_afdeling_key,
|
||
prs_perslid_naam,
|
||
prs_perslid_voorletters,
|
||
prs_perslid_tussenvoegsel,
|
||
prs_perslid_voornaam,
|
||
prs_perslid_telefoonnr,
|
||
prs_perslid_mobiel,
|
||
prs_perslid_email,
|
||
prs_perslid_nr,
|
||
prs_perslid_titel,
|
||
prs_perslid_oslogin)
|
||
VALUES ('PRS',
|
||
v_srtperslid_key,
|
||
v_afdeling_key,
|
||
recPersLid.prs_perslid_naam,
|
||
recPersLid.prs_perslid_voorletters,
|
||
recPersLid.prs_perslid_tussenvoegsel,
|
||
recPersLid.prs_perslid_voornaam,
|
||
recPersLid.prs_perslid_telefoonnr,
|
||
recPersLid.prs_perslid_mobiel,
|
||
recPersLid.prs_perslid_email,
|
||
recPersLid.prs_perslid_nr,
|
||
recPersLid.prs_perslid_titel,
|
||
recPersLid.prs_perslid_oslogin)
|
||
RETURNING prs_perslid_key
|
||
INTO v_perslid_key;
|
||
|
||
prs.setpassword(v_perslid_key, recPersLid.prs_perslid_wachtwoord);
|
||
|
||
COMMIT;
|
||
v_count_update := v_count_update + 1;
|
||
ELSIF v_count = 1
|
||
THEN
|
||
UPDATE prs_perslid
|
||
SET prs_srtperslid_key = v_srtperslid_key,
|
||
prs_afdeling_key = v_afdeling_key,
|
||
prs_perslid_naam = recPersLid.prs_perslid_naam,
|
||
prs_perslid_voorletters =
|
||
recPersLid.prs_perslid_voorletters,
|
||
prs_perslid_tussenvoegsel =
|
||
recPersLid.prs_perslid_tussenvoegsel,
|
||
prs_perslid_voornaam = recPersLid.prs_perslid_voornaam,
|
||
prs_perslid_nr = recPersLid.prs_perslid_nr,
|
||
prs_perslid_titel = recPersLid.prs_perslid_titel
|
||
WHERE prs_perslid_key = v_perslid_key;
|
||
|
||
IF recPersLid.prs_perslid_telefoonnr IS NOT NULL OR aaxx_get_user = 'ENEXIS'
|
||
THEN
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_telefoonnr =
|
||
recPersLid.prs_perslid_telefoonnr
|
||
WHERE prs_perslid_key = v_perslid_key;
|
||
END IF;
|
||
|
||
IF recPersLid.prs_perslid_mobiel IS NOT NULL OR aaxx_get_user = 'ENEXIS'
|
||
THEN
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_mobiel = recPersLid.prs_perslid_mobiel
|
||
WHERE prs_perslid_key = v_perslid_key;
|
||
END IF;
|
||
|
||
IF recPersLid.prs_perslid_email IS NOT NULL OR aaxx_get_user = 'ENEXIS'
|
||
THEN
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_email = recPersLid.prs_perslid_email
|
||
WHERE prs_perslid_key = v_perslid_key;
|
||
END IF;
|
||
|
||
IF recPersLid.prs_perslid_oslogin IS NOT NULL OR aaxx_get_user = 'ENEXIS'
|
||
THEN
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_oslogin = recPersLid.prs_perslid_oslogin
|
||
WHERE prs_perslid_key = v_perslid_key;
|
||
END IF;
|
||
|
||
IF recPersLid.prs_perslid_wachtwoord IS NOT NULL
|
||
THEN
|
||
prs.setpassword(v_perslid_key, recPersLid.prs_perslid_wachtwoord);
|
||
END IF;
|
||
END IF;
|
||
|
||
COMMIT; -- persoon in ieder geval toegevoegd.
|
||
|
||
IF p_wp_mode <> 0
|
||
THEN
|
||
IF p_wp_mode = 1
|
||
THEN
|
||
v_wp_expliciet := 0;
|
||
ELSE
|
||
v_wp_expliciet := 1;
|
||
END IF;
|
||
|
||
-- Werkplekken
|
||
v_aanduiding :=
|
||
recPersLid.PRS_PERSLID_NAAM
|
||
|| '|'
|
||
|| recPersLid.PRS_PERSLID_VOORNAAM
|
||
|| '|'
|
||
|| recPersLid.alg_locatie_code
|
||
|| '|'
|
||
|| recPersLid.alg_gebouw_code
|
||
|| '|'
|
||
|| recPersLid.alg_verdieping_volgnr
|
||
|| '|'
|
||
|| recPersLid.alg_ruimte_nr
|
||
|| '| ';
|
||
v_errormsg := '';
|
||
|
||
prs_update_werkplek (recPersLid.alg_locatie_code,
|
||
recPersLid.alg_gebouw_code,
|
||
recPersLid.alg_verdieping_volgnr,
|
||
recPersLid.alg_ruimte_nr,
|
||
recPersLid.prs_werkplek_volgnr,
|
||
recPersLid.prs_werkplek_omschrijving,
|
||
v_perslid_key,
|
||
v_wp_expliciet,
|
||
p_std_wp_ruimte_nr,
|
||
v_errormsg,
|
||
v_errorhint);
|
||
|
||
IF v_errormsg IS NOT NULL
|
||
THEN
|
||
v_wpcount_error := v_wpcount_error + 1;
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
END IF;
|
||
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 :=
|
||
' (ORACLE error number = <'
|
||
|| ORACLE_err_num
|
||
|| '> ORACLE error message = <'
|
||
|| ORACLE_err_mes
|
||
|| '>)';
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
|
||
COMMIT; -- tbv logging
|
||
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),
|
||
'');
|
||
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'S',
|
||
'Werkplek: verwerkte regels met foutmelding: '
|
||
|| TO_CHAR (v_wpcount_error),
|
||
'');
|
||
END fac_gen_update_perslid;
|
||
|
||
|
||
PROCEDURE prs_del_perslid (p_import_key IN NUMBER,
|
||
p_perslid_key IN NUMBER,
|
||
p_wp_expliciet IN NUMBER,
|
||
p_delete IN NUMBER) -- verwijderen we de persoon (1) of zette we de verwijdervlag(0)
|
||
IS
|
||
v_newline VARCHAR2 (1000); -- Input line
|
||
v_errormsg VARCHAR2 (1000);
|
||
v_errorhint VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
|
||
v_count NUMBER (10);
|
||
|
||
--
|
||
v_perslid_key NUMBER (10);
|
||
v_perslid_naam VARCHAR (100);
|
||
v_perslid_nr VARCHAR (30);
|
||
BEGIN
|
||
BEGIN
|
||
v_errormsg := 'Verwijderen van de persoon is NIET gelukt';
|
||
v_errorhint :=
|
||
'Heeft de persoon met prs_perslid_key '
|
||
|| TO_CHAR (p_perslid_key)
|
||
|| ' historie?';
|
||
|
||
SELECT prs_perslid_naam_full, prs_perslid_nr
|
||
INTO v_perslid_naam, v_perslid_nr
|
||
FROM prs_perslid p, prs_v_perslid_fullnames pf
|
||
WHERE p.prs_perslid_key = pf.prs_perslid_key
|
||
AND p.prs_perslid_key = p_perslid_key;
|
||
|
||
-- *** Budgethouderschap ***
|
||
-- Voor hoeveel kostenplaatsen is deze persoon budgethouder?
|
||
SELECT COUNT ( * )
|
||
INTO v_count
|
||
FROM prs_kostenplaats
|
||
WHERE prs_perslid_key = p_perslid_key;
|
||
|
||
IF (v_count > 0)
|
||
THEN
|
||
UPDATE prs_kostenplaats
|
||
SET prs_perslid_key = NULL
|
||
WHERE prs_perslid_key = p_perslid_key;
|
||
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'I',
|
||
'Budgethouderschap van te verwijderen persoon ('
|
||
|| v_count
|
||
|| ' stuks) vervallen.',
|
||
'Naam/persoonsnr: ' || v_perslid_naam || '/' || v_perslid_nr);
|
||
END IF;
|
||
|
||
-- *** Vervangers ***
|
||
-- koppelingen met vervangers dienen ook verwijderd te worden
|
||
SELECT COUNT ( * )
|
||
INTO v_count
|
||
FROM prs_collega
|
||
WHERE prs_perslid_key = p_perslid_key
|
||
OR prs_perslid_key_alt = p_perslid_key;
|
||
|
||
IF (v_count > 0)
|
||
THEN
|
||
DELETE FROM prs_collega
|
||
WHERE prs_perslid_key = p_perslid_key
|
||
OR prs_perslid_key_alt = p_perslid_key;
|
||
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'I',
|
||
'Te verwijderen persoon heeft vervanger(s). Koppeling(en) verwijderd.',
|
||
'Naam/persoonsnr: ' || v_perslid_naam || '/' || v_perslid_nr);
|
||
END IF;
|
||
|
||
-- *** werkplekken ***
|
||
-- per 5.3.2 worden impliciete werkplekken via trigger verwijderd!
|
||
|
||
DELETE prs_perslidwerkplek
|
||
WHERE prs_perslid_key = p_perslid_key;
|
||
|
||
-- *** Verplichtingen ***
|
||
SELECT COUNT ( * )
|
||
INTO v_count
|
||
FROM prs_v_verplichting_refcheck vp
|
||
WHERE vp.prs_perslid_key = p_perslid_key;
|
||
|
||
IF v_count = 0 AND p_delete = 1
|
||
THEN
|
||
-- Persoon heeft geen enkele (actuele of historische) verplichting
|
||
v_errorhint :=
|
||
'Verwijderen van persoon met key ' || TO_CHAR (v_perslid_key);
|
||
|
||
DELETE FROM prs_perslid
|
||
WHERE prs_perslid_key = p_perslid_key;
|
||
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'I',
|
||
'Persoon verwijderd.',
|
||
'Achternaam/persoonsnr: '
|
||
|| v_perslid_naam
|
||
|| '/'
|
||
|| v_perslid_nr);
|
||
ELSE
|
||
-- Controleer of er ACTUELE verplichtingen zijn
|
||
SELECT COUNT ( * )
|
||
INTO v_count
|
||
FROM prs_v_verplichting_keys vp
|
||
WHERE vp.prs_perslid_key = p_perslid_key;
|
||
|
||
IF v_count > 0
|
||
THEN
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_naam =
|
||
SUBSTR ('INACTIEF:' || prs_perslid_naam, 1, 60),
|
||
prs_perslid_oslogin = DECODE(aaxx_get_user, 'IT', prs_perslid_oslogin, NULL),
|
||
prs_perslid_oslogin2 = NULL
|
||
WHERE prs_perslid_key = p_perslid_key
|
||
AND prs_perslid_naam NOT LIKE 'INACTIEF:%';
|
||
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'I',
|
||
'Persoon als INACTIEF gemarkeerd of was al INACTIEF gemarkeerd.',
|
||
'Achternaam/persoonsnr: '
|
||
|| v_perslid_naam
|
||
|| '/'
|
||
|| v_perslid_nr);
|
||
ELSE
|
||
BEGIN
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_verwijder = SYSDATE
|
||
WHERE prs_perslid_key = p_perslid_key;
|
||
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'I',
|
||
'Persoon ge<67>nactiveerd.',
|
||
'Achternaam/persoonsnr: '
|
||
|| v_perslid_naam
|
||
|| '/'
|
||
|| v_perslid_nr);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
-- Kennelijk heeft de persoon toch ernstige verplichtingen
|
||
v_errorhint :=
|
||
'Persoon heeft nog (max. '
|
||
|| TO_CHAR (v_count)
|
||
|| ') verplichtingen. Naam/persoonsnr: '
|
||
|| v_perslid_naam
|
||
|| '/'
|
||
|| v_perslid_nr;
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
'Inactiveren persoon is niet gelukt',
|
||
v_errorhint);
|
||
END;
|
||
END IF;
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg :=
|
||
'(ORACLE error '
|
||
|| oracle_err_num
|
||
|| '/'
|
||
|| oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_errormsg,
|
||
v_errorhint);
|
||
END;
|
||
END prs_del_perslid;
|
||
|
||
PROCEDURE insert_perslid_from_mld (p_applname IN VARCHAR2,
|
||
p_applrun IN VARCHAR2)
|
||
IS
|
||
|
||
CURSOR C
|
||
IS
|
||
SELECT (SELECT mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km, mld_kenmerk k
|
||
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
|
||
AND km.mld_melding_key = m.mld_melding_key
|
||
AND k.mld_srtkenmerk_key = 201)
|
||
achternaam,
|
||
(SELECT UPPER(SUBSTR(fac_usrdata_omschr,1,1))
|
||
FROM mld_kenmerkmelding km, mld_kenmerk k, fac_usrdata ud
|
||
WHERE km.mld_kenmerkmelding_waarde = ud.fac_usrdata_key
|
||
AND km.mld_kenmerk_key = k.mld_kenmerk_key
|
||
AND km.mld_melding_key = m.mld_melding_key
|
||
AND k.mld_srtkenmerk_key = 202)
|
||
geslacht,
|
||
(SELECT mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km, mld_kenmerk k
|
||
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
|
||
AND km.mld_melding_key = m.mld_melding_key
|
||
AND k.mld_srtkenmerk_key = 203)
|
||
tussenvoegsel,
|
||
(SELECT mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km, mld_kenmerk k
|
||
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
|
||
AND km.mld_melding_key = m.mld_melding_key
|
||
AND k.mld_srtkenmerk_key = 204)
|
||
voorletters,
|
||
(SELECT mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km, mld_kenmerk k
|
||
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
|
||
AND km.mld_melding_key = m.mld_melding_key
|
||
AND k.mld_srtkenmerk_key = 205)
|
||
voornaam,
|
||
(SELECT mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km, mld_kenmerk k
|
||
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
|
||
AND km.mld_melding_key = m.mld_melding_key
|
||
AND k.mld_srtkenmerk_key = 206)
|
||
titel,
|
||
(SELECT mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km, mld_kenmerk k
|
||
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
|
||
AND km.mld_melding_key = m.mld_melding_key
|
||
AND k.mld_srtkenmerk_key = 208)
|
||
telefoon,
|
||
(SELECT mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km, mld_kenmerk k
|
||
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
|
||
AND km.mld_melding_key = m.mld_melding_key
|
||
AND k.mld_srtkenmerk_key = 209)
|
||
mobiel,
|
||
(SELECT mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km, mld_kenmerk k
|
||
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
|
||
AND km.mld_melding_key = m.mld_melding_key
|
||
AND k.mld_srtkenmerk_key = 210)
|
||
email,
|
||
(SELECT mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km, mld_kenmerk k
|
||
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
|
||
AND km.mld_melding_key = m.mld_melding_key
|
||
AND k.mld_srtkenmerk_key = 211)
|
||
login,
|
||
(SELECT mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km, mld_kenmerk k
|
||
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
|
||
AND km.mld_melding_key = m.mld_melding_key
|
||
AND k.mld_srtkenmerk_key = 212)
|
||
organisatie,
|
||
mld_melding_key
|
||
FROM mld_melding m
|
||
WHERE mld_stdmelding_key = 221 AND mld_melding_status IN (2, 3);
|
||
v_prs_srtperslid_key NUMBER(10);
|
||
v_count NUMBER(10);
|
||
v_prs_afdeling_key NUMBER(10);
|
||
v_fac_profiel_key NUMBER(10);
|
||
v_facilitor_key NUMBER(10);
|
||
v_prs_perslid_key NUMBER(10);
|
||
v_error_msg VARCHAR2(1000);
|
||
|
||
BEGIN
|
||
v_prs_srtperslid_key := 1; -- onbekend
|
||
v_fac_profiel_key := 1; -- 500 euro
|
||
v_facilitor_key := 4; -- key van Facilitor user
|
||
v_error_msg := NULL;
|
||
|
||
FOR rec IN c
|
||
LOOP
|
||
BEGIN
|
||
BEGIN
|
||
SELECT MIN(prs_afdeling_key)
|
||
INTO v_prs_afdeling_key
|
||
FROM prs_afdeling
|
||
WHERE prs_kostenplaats_key = rec.organisatie
|
||
AND prs_afdeling_verwijder IS NULL;
|
||
|
||
IF v_prs_afdeling_key IS NULL THEN
|
||
v_error_msg := 'Geen geldige afdeling gevonden';
|
||
ELSE
|
||
SELECT COUNT(prs_perslid_key)
|
||
INTO v_count
|
||
FROM prs_perslid
|
||
WHERE prs_perslid_oslogin = UPPER(rec.login)
|
||
AND prs_perslid_verwijder IS NULL;
|
||
|
||
IF v_count <> 0 THEN
|
||
v_error_msg := 'Persoon met deze login komt al voor.';
|
||
ELSE
|
||
|
||
INSERT INTO prs_perslid (prs_perslid_module,
|
||
prs_srtperslid_key,
|
||
prs_afdeling_key,
|
||
prs_perslid_naam,
|
||
prs_perslid_voorletters,
|
||
prs_perslid_tussenvoegsel,
|
||
prs_perslid_voornaam,
|
||
prs_perslid_telefoonnr,
|
||
prs_perslid_mobiel,
|
||
prs_perslid_email,
|
||
prs_perslid_titel,
|
||
prs_perslid_geslacht,
|
||
fac_profiel_key,
|
||
prs_perslid_oslogin)
|
||
VALUES ('PRS',
|
||
v_prs_srtperslid_key,
|
||
v_prs_afdeling_key,
|
||
substr(rec.achternaam,1,30),
|
||
substr(rec.voorletters,1,10),
|
||
substr(rec.tussenvoegsel,1,15),
|
||
substr(rec.voornaam,1,30),
|
||
substr(rec.telefoon,1,15),
|
||
substr(rec.mobiel,1,15),
|
||
substr(rec.email,1,200),
|
||
substr(rec.titel,1,15),
|
||
DECODE (rec.geslacht, 'M', 1, 0),
|
||
v_fac_profiel_key,
|
||
substr(rec.login,1,30))
|
||
RETURNING prs_perslid_key
|
||
INTO v_prs_perslid_key;
|
||
END IF;
|
||
END IF;
|
||
EXCEPTION WHEN OTHERS THEN
|
||
v_error_msg := 'Onbekende fout opgetreden tijdens het toevoegen van de persoon.\nNeem contact op met de beheerder.';
|
||
v_error_msg := v_error_msg + SUBSTR (SQLERRM, 1, 200);
|
||
END;
|
||
|
||
IF v_error_msg IS NULL THEN
|
||
BEGIN
|
||
-- accepteren van de melding.
|
||
mld.setmeldingstatus(rec.mld_melding_key, 4, v_facilitor_key);
|
||
mld.setmeldingstatus(rec.mld_melding_key, 5, v_facilitor_key);
|
||
UPDATE mld_melding
|
||
SET mld_melding_opmerking = 'Persoon is aangemaakt.'
|
||
WHERE mld_melding_key = rec.mld_melding_key;
|
||
mld.mld_nextworkflowstep (rec.mld_melding_key, 0);
|
||
END;
|
||
ELSE
|
||
BEGIN
|
||
mld.setmeldingstatus(rec.mld_melding_key, 1, v_facilitor_key);
|
||
UPDATE mld_melding
|
||
SET mld_melding_opmerking = v_error_msg
|
||
WHERE mld_melding_key = rec.mld_melding_key;
|
||
END;
|
||
END IF;
|
||
END;
|
||
END LOOP;
|
||
END insert_perslid_from_mld;
|
||
|
||
-- Return number of workdays between two dates, not including the startdate, weekends and holidays
|
||
FUNCTION count_Work_Days0( pdate1 IN DATE , pdate2 IN DATE, pInclTime IN BOOLEAN ) RETURN NUMBER IS
|
||
eikdag NUMBER;
|
||
v_date_from DATE;
|
||
v_date_to DATE;
|
||
v_time_from NUMBER;
|
||
v_time_to NUMBER;
|
||
v_extra_day NUMBER;
|
||
lbackwards BOOLEAN;
|
||
v_week NUMBER;
|
||
v_mod NUMBER;
|
||
v_day_from NUMBER;
|
||
v_day_to NUMBER;
|
||
v_holidays NUMBER;
|
||
BEGIN
|
||
|
||
-- Remove time-part from dates (ie. set to 0:00) and set dates chronologically
|
||
IF pdate1 > pdate2 THEN
|
||
v_date_from := TRUNC(pdate2);
|
||
v_date_to := TRUNC(pdate1);
|
||
v_time_from := to_char(pdate2,'sssss');
|
||
v_time_to := to_char(pdate1,'sssss');
|
||
lbackwards := TRUE;
|
||
ELSE
|
||
v_date_from := TRUNC(pdate1);
|
||
v_date_to := TRUNC(pdate2);
|
||
v_time_from := to_char(pdate1,'sssss');
|
||
v_time_to := to_char(pdate2,'sssss');
|
||
lbackwards := FALSE;
|
||
END IF;
|
||
|
||
-- Determine whole weeks (v_week) and remaining days (v_mod) between FROM and TO
|
||
v_week := trunc((v_date_to - v_date_from)/7);
|
||
v_mod := mod((v_date_to - v_date_from),7);
|
||
|
||
-- Correct remaining days (v_mod) depending on the FROM and TO "day-number"
|
||
v_day_from := MOD (TO_CHAR (v_date_from, 'J') + 1, 7) + 1;
|
||
v_day_to := MOD (TO_CHAR (v_date_to, 'J') + 1, 7) + 1;
|
||
IF v_day_from = 1 THEN /* FROM is sunday */
|
||
IF v_day_to = 7 THEN /* TO is saturday */
|
||
v_mod := v_mod - 1; /* should always be 5! */
|
||
END IF;
|
||
ELSIF v_day_from = 7 THEN /* FROM is saturday */
|
||
IF v_day_to != 7 THEN /* TO is not saturday */
|
||
v_mod := v_mod - 1; /* exclude sunday succeding FROM-saturday */
|
||
END IF;
|
||
ELSE /* FROM is workday */
|
||
IF v_day_to = 7 THEN /* TO is saturday */
|
||
v_mod := v_mod - 1; /* exclude TO-saturday */
|
||
ELSIF v_day_to < v_day_from THEN /* weekend between FROM and TO */
|
||
v_mod := v_mod - 2; /* exclude weekend */
|
||
END IF;
|
||
END IF;
|
||
|
||
v_extra_day := 0;
|
||
IF pInclTime THEN
|
||
IF v_time_to > v_time_from THEN
|
||
v_extra_day := 1;
|
||
END IF;
|
||
END IF;
|
||
|
||
-- Determine the registered holidays between FROM+1 (excluding startdate!) and TO
|
||
SELECT count(*)
|
||
INTO v_holidays
|
||
FROM MLD_VRIJE_DAGEN
|
||
WHERE MLD_VRIJE_DAGEN_DATUM BETWEEN v_date_from+1 AND v_date_to;
|
||
|
||
IF lbackwards THEN
|
||
RETURN 0 - (5 * v_week + v_mod + v_extra_day - v_holidays);
|
||
ELSE
|
||
RETURN 5 * v_week + v_mod + v_extra_day - v_holidays;
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS THEN RETURN NULL;
|
||
END;
|
||
|
||
FUNCTION count_Work_Days_InclTime( pdate1 IN DATE , pdate2 IN DATE ) RETURN NUMBER IS
|
||
BEGIN
|
||
RETURN count_Work_Days0(pdate1,pdate2, TRUE);
|
||
END;
|
||
|
||
FUNCTION count_Work_Days( pdate1 IN DATE , pdate2 IN DATE ) RETURN NUMBER IS
|
||
BEGIN
|
||
RETURN count_Work_Days0(pdate1,pdate2, FALSE);
|
||
END;
|
||
|
||
END;
|
||
/ |