2501 lines
108 KiB
Plaintext
2501 lines
108 KiB
Plaintext
#ifdef PRS
|
||
/*
|
||
* $Revision$
|
||
* $Id$
|
||
*/
|
||
|
||
CREATE OR REPLACE PACKAGE aut AS
|
||
FUNCTION fac_get_prs_same_level(userkey IN NUMBER, perslidkey IN NUMBER) RETURN NUMBER;
|
||
END aut;
|
||
/
|
||
|
||
CREATE OR REPLACE PACKAGE BODY aut AS
|
||
|
||
FUNCTION fac_get_prs_same_level(userkey IN NUMBER, perslidkey IN NUMBER) RETURN NUMBER IS
|
||
CURSOR usr_deps IS
|
||
SELECT paf.prs_afdeling_key, prs_afdeling_elder_key, niveau
|
||
FROM prs_v_afdeling_familie paf, prs_perslid pp
|
||
WHERE paf.prs_afdeling_key = pp.prs_afdeling_key
|
||
AND pp.prs_perslid_key=userkey
|
||
ORDER BY niveau DESC;
|
||
|
||
CURSOR pers_deps IS
|
||
SELECT paf.prs_afdeling_key, prs_afdeling_elder_key, niveau
|
||
FROM prs_v_afdeling_familie paf, prs_perslid pp
|
||
WHERE paf.prs_afdeling_key = pp.prs_afdeling_key
|
||
AND pp.prs_perslid_key=perslidkey
|
||
ORDER BY niveau DESC;
|
||
|
||
usr_orglevel NUMBER(1);
|
||
pers_orglevel NUMBER(1);
|
||
samelevelFound BOOLEAN;
|
||
samelevel NUMBER(1);
|
||
|
||
BEGIN
|
||
BEGIN
|
||
samelevelFound := FALSE;
|
||
FOR c1 IN usr_deps
|
||
LOOP
|
||
FOR c2 IN pers_deps
|
||
LOOP
|
||
IF c1.prs_afdeling_elder_key = c2.prs_afdeling_elder_key
|
||
THEN
|
||
samelevelFound := TRUE;
|
||
samelevel := c2.niveau;
|
||
EXIT;
|
||
END IF;
|
||
END LOOP;
|
||
IF samelevelFound
|
||
THEN
|
||
EXIT;
|
||
END IF;
|
||
END LOOP;
|
||
IF NOT samelevelFound
|
||
THEN
|
||
samelevel := 0; -- no same level found,then assume same company
|
||
END IF; -- multi_company will be detected in ASP so no problem here
|
||
EXCEPTION
|
||
WHEN OTHERS THEN
|
||
samelevel:= 9;
|
||
END;
|
||
RETURN samelevel;
|
||
END;
|
||
END aut;
|
||
/
|
||
|
||
/* Formatted on 3-11-2010 11:50:08 (QP5 v5.136.908.31019) */
|
||
CREATE OR REPLACE PACKAGE prs
|
||
AS
|
||
FUNCTION getkpverantwoordelijke (pkostenplaats_key IN NUMBER,
|
||
pmethode IN NUMBER,
|
||
pexcludekey IN NUMBER)
|
||
RETURN NUMBER;
|
||
|
||
FUNCTION getkostenplaats (pperslid_key IN NUMBER, pmethode IN NUMBER, pexcludekey IN NUMBER)
|
||
RETURN NUMBER;
|
||
|
||
FUNCTION getprofiellimiet (pperslidkey IN NUMBER, pdisckey IN NUMBER)
|
||
RETURN NUMBER;
|
||
|
||
FUNCTION getlimietagb (pkostenplaatskey IN NUMBER, pmethode IN NUMBER, pdisckey IN NUMBER)
|
||
RETURN NUMBER;
|
||
|
||
FUNCTION getfiatteur (pkostenplaats_key IN NUMBER,
|
||
pexcludekey IN NUMBER,
|
||
pondergrens IN NUMBER,
|
||
pdisckey IN NUMBER,
|
||
pfiatbedrag IN NUMBER DEFAULT -1
|
||
)
|
||
RETURN NUMBER;
|
||
|
||
FUNCTION nextfiatteur (pkey IN NUMBER,
|
||
pmodule IN VARCHAR2,
|
||
pexcludekey IN NUMBER DEFAULT -1)
|
||
RETURN NUMBER;
|
||
|
||
PROCEDURE setpassword(pperslidkey IN NUMBER, pwachtwoord IN VARCHAR2);
|
||
|
||
FUNCTION testpassword(pperslidkey IN NUMBER, pwachtwoord IN VARCHAR2)
|
||
RETURN NUMBER;
|
||
|
||
PROCEDURE upsertkenmerk (p_kenmerk_key IN NUMBER, p_prs_key IN NUMBER, p_waarde IN VARCHAR2);
|
||
|
||
PROCEDURE movetoruimte (p_prs_key IN NUMBER, p_ruimte_key IN NUMBER, p_alg_type IN VARCHAR2, p_virtual IN NUMBER DEFAULT 0);
|
||
|
||
PROCEDURE import_perslid (p_import_key IN NUMBER, p_seq_of_columns IN VARCHAR2, p_header IN VARCHAR2);
|
||
|
||
PROCEDURE update_perslid (p_import_key IN NUMBER, p_sleutelkolom IN VARCHAR2, p_alg_type IN VARCHAR2);
|
||
|
||
PROCEDURE delete_perslid (p_import_key IN NUMBER, p_perslid_key IN NUMBER);
|
||
|
||
FUNCTION combinatievalidatie (p_kp_key IN NUMBER, p_ksrt_key IN NUMBER, p_disc_key IN NUMBER) RETURN BOOLEAN;
|
||
END prs;
|
||
/
|
||
|
||
CREATE OR REPLACE PACKAGE BODY prs
|
||
AS
|
||
-- Levert de prs_perslid_key op van de budgethouder van een kostenplaats
|
||
-- Simpele versie van getfiatteur: hij negeert limieten
|
||
FUNCTION getkpverantwoordelijke (pkostenplaats_key IN NUMBER,
|
||
pmethode IN NUMBER, -- deze gebruiken we eigenlijk niet meer sinds 2017.2
|
||
pexcludekey IN NUMBER)
|
||
RETURN NUMBER
|
||
IS
|
||
BEGIN
|
||
IF pmethode = 3 THEN
|
||
raise_application_error (-20001, 'Cannot use prs.getkpverantwoordelijke with prs_approvemethod = 3');
|
||
END IF;
|
||
RETURN getfiatteur (pkostenplaats_key,
|
||
pexcludekey,
|
||
NULL,
|
||
NULL
|
||
);
|
||
END;
|
||
|
||
-- Levert de prs_kostenplaats_key op van de persoon volgens
|
||
-- de door ons gedefinieerde regels.
|
||
-- Levert -1 op indien er geen gevonden wordt.
|
||
-- Controleert niet of de meegegeven persoon nog wel actief is
|
||
-- pmethode geeft .. inderdaad, waarbij
|
||
-- methode 1 = 1-laagsmethode via eigen afdeling - kostenplaats
|
||
-- methode 2 = n-laagsmethode via afdelingsboom
|
||
-- Met pexcludekey kan een kostenplaats_key worden opgegeven die je niet wilt
|
||
-- Dat leek me wel een aardige feature. Geef -1 mee als je geen kostenplaats wilt excluden
|
||
FUNCTION getkostenplaats (pperslid_key IN NUMBER, pmethode IN NUMBER, pexcludekey IN NUMBER)
|
||
RETURN NUMBER
|
||
IS
|
||
lkostenplaatskey prs_afdeling.prs_kostenplaats_key%TYPE;
|
||
lparentafdkey prs_afdeling.prs_afdeling_parentkey%TYPE;
|
||
BEGIN
|
||
BEGIN
|
||
SELECT COALESCE (a.prs_kostenplaats_key, -1),
|
||
a.prs_afdeling_parentkey
|
||
INTO lkostenplaatskey,
|
||
lparentafdkey
|
||
FROM prs_perslid p,
|
||
prs_afdeling a
|
||
WHERE p.prs_afdeling_key = a.prs_afdeling_key
|
||
AND p.prs_perslid_key = pperslid_key;
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
-- persoon bestaat niet
|
||
RETURN -1;
|
||
END;
|
||
|
||
IF (lkostenplaatskey = -1 OR lkostenplaatskey = pexcludekey) AND pmethode = 2
|
||
-- doorloop de boom naar boven, met allerlei aannames
|
||
THEN
|
||
WHILE (lkostenplaatskey = -1 OR lkostenplaatskey = pexcludekey) AND lparentafdkey IS NOT NULL
|
||
LOOP
|
||
SELECT COALESCE (a.prs_kostenplaats_key, -1),
|
||
a.prs_afdeling_parentkey
|
||
INTO lkostenplaatskey,
|
||
lparentafdkey
|
||
FROM prs_afdeling a
|
||
WHERE a.prs_afdeling_verwijder IS NULL
|
||
AND a.prs_afdeling_key = lparentafdkey;
|
||
END LOOP;
|
||
-- nu heb ik er een of kan ik er geen vinden
|
||
END IF;
|
||
|
||
RETURN lkostenplaatskey;
|
||
END;
|
||
|
||
-- Levert de limiet (maximaal bestelbedrag) van persoon pperslidkey,
|
||
-- eventueel specifiek voor pdisckey indien dat gedefinieerd zou zijn.
|
||
FUNCTION getprofiellimiet (pperslidkey IN NUMBER, pdisckey IN NUMBER)
|
||
RETURN NUMBER
|
||
IS
|
||
llimiet fac_profiel.fac_profiel_limiet%TYPE;
|
||
BEGIN
|
||
-- de algemene limiet telt het zwaarst indien ingevuld
|
||
IF pperslidkey IS NULL
|
||
THEN
|
||
RETURN NULL;
|
||
END IF;
|
||
-- persoon wordt geacht te bestaan, profiel is optioneel
|
||
SELECT fp.fac_profiel_limiet
|
||
INTO llimiet
|
||
FROM prs_perslid p, fac_profiel fp
|
||
WHERE p.fac_profiel_key = fp.fac_profiel_key(+) AND p.prs_perslid_key = pperslidkey;
|
||
|
||
IF llimiet IS NULL AND pdisckey IS NOT NULL
|
||
THEN
|
||
-- geen algemene limiet; zoek de disciplineafhankelijke (max() to prevent no data found)
|
||
SELECT MAX (fpw.fac_profielwaarde_limiet)
|
||
INTO llimiet
|
||
FROM prs_perslid p, fac_profielwaarde fpw
|
||
WHERE p.fac_profiel_key = fpw.fac_profiel_key
|
||
AND fpw.ins_discipline_key = pdisckey
|
||
AND p.prs_perslid_key = pperslidkey;
|
||
END IF;
|
||
|
||
RETURN llimiet;
|
||
END;
|
||
|
||
-- Levert de limiet (maximaal bestelbedrag) van persoon pperslidkey i.v.m. Afdelings Gebonden Budget (AGB),
|
||
FUNCTION getlimietagb (pkostenplaatskey IN NUMBER, pmethode IN NUMBER, pdisckey IN NUMBER)
|
||
RETURN NUMBER
|
||
IS
|
||
llimiet prs_kostenplaats.prs_kostenplaats_limiet%TYPE;
|
||
BEGIN
|
||
IF pkostenplaatskey > 0
|
||
THEN
|
||
-- Er is een kostenplaats meegegeven
|
||
SELECT k.prs_kostenplaats_limiet
|
||
INTO llimiet
|
||
FROM prs_kostenplaats k
|
||
WHERE k.prs_kostenplaats_key = pkostenplaatskey;
|
||
-- AGB per kostenplaats of catalogus
|
||
IF llimiet IS NULL
|
||
THEN
|
||
BEGIN
|
||
SELECT prs_kostenplaatsdisc_limiet
|
||
INTO llimiet
|
||
FROM prs_kostenplaatsdisc
|
||
WHERE prs_kostenplaats_key = pkostenplaatskey
|
||
AND ins_discipline_key = pdisckey;
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
-- er is geen limiet voor deze kostenplaats-discipline.
|
||
RETURN NULL;
|
||
END;
|
||
END IF;
|
||
ELSE
|
||
RETURN NULL;
|
||
END IF;
|
||
|
||
RETURN llimiet;
|
||
END;
|
||
|
||
-- De functie levert de prs_perslid_key op van de perslid die een item (opdracht/bestelling) van
|
||
-- discipline pdisckey boven bedrag COALESCE(pfiatbedrag, pondergrens) mag fiatteren
|
||
-- volgens de door ons gedefinieerde regels. Werkt analoog aan getkpverantwoordelijke
|
||
-- Maar houdt hierbij rekening met de profielen van de budgethouders als prs_approvemethod == 3
|
||
--
|
||
-- 1) Levert dus in eerste instantie de kostenplaatsverantwoordelijke (budgethouder) op.
|
||
-- 2) Levert de kostenplaatsgroepverantwoordelijke op indien geen goede budgethouder wordt gevonden.
|
||
-- Afhankelijk van de pfiatbedrag levert de functie dan de kostenplaatsgroepverantwoordelijke op
|
||
-- die boven het bedrag van COALESCE(pfiatbedrag, pondergrens) mag fiatteren.
|
||
-- Als er in dat geval WEL een pfiatbedrag wordt meegegeven dan wordt de VOLGENDE (kpg) fiatteur opgeleverd.
|
||
-- Als er in dat geval GEEN pfiatbedrag wordt meegegeven dan wordt de LAATSTE (kpg) fiatteur opgeleverd.
|
||
-- De parameter pondergrens wordt ook gebruikt voor mode 3 om het profiel van de budgethouder te controleren. Daarom extra parameter pfiatbedrag nodig.
|
||
--
|
||
-- Als pexcludekey gevuld is, dan is dit de kp verantwoordelijke. Niet vullen met een kpGROEP verantwoordelijke, want dan wordt de kp verantwoordelijke teruggegeven.
|
||
-- Het fiatbedrag (of pondergrens) zorgt er wel voor dat je juiste kpg verantwoordelijke wordt teruggegeven.
|
||
--
|
||
FUNCTION getfiatteur (pkostenplaats_key IN NUMBER,
|
||
pexcludekey IN NUMBER,
|
||
pondergrens IN NUMBER,
|
||
pdisckey IN NUMBER,
|
||
pfiatbedrag IN NUMBER DEFAULT -1
|
||
)
|
||
RETURN NUMBER
|
||
IS
|
||
lkpverantwkey prs_kostenplaats.prs_perslid_key%TYPE;
|
||
lkpgverantwkey prs_kostenplaatsgrp.prs_perslid_key%TYPE;
|
||
lkpgverantwkey1 prs_kostenplaatsgrp.prs_perslid_key%TYPE;
|
||
lkpgverantwkey2 prs_kostenplaatsgrp.prs_kostenplaatsgrp_fiat2_key%TYPE;
|
||
lkpgverantwkey3 prs_kostenplaatsgrp.prs_kostenplaatsgrp_fiat3_key%TYPE;
|
||
lexcludeisvervanger NUMBER;
|
||
lexcludeiskpgverantw NUMBER;
|
||
lkpverantwlimiet fac_profiel.fac_profiel_limiet%TYPE;
|
||
afdkey prs_afdeling.prs_afdeling_key%TYPE;
|
||
parentafdkey prs_afdeling.prs_afdeling_parentkey%TYPE;
|
||
lmethode NUMBER;
|
||
lteller NUMBER;
|
||
lfoundfiatteur NUMBER;
|
||
lfiatteur prs_kostenplaats.prs_perslid_key%TYPE;
|
||
llastfiat BOOLEAN;
|
||
lgrens NUMBER;
|
||
BEGIN
|
||
BEGIN
|
||
lkpverantwkey := -1;
|
||
SELECT COALESCE (prs_perslid_key, -1)
|
||
INTO lkpverantwkey
|
||
FROM prs_kostenplaats
|
||
WHERE prs_kostenplaats_key = pkostenplaats_key;
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
-- Kostenplaats bestaat niet.
|
||
RETURN -1;
|
||
END;
|
||
dbms_output.put_line('Budgethouder: '||lkpverantwkey);
|
||
-- De lkpverantwkey is (mits gedefinieerd) de budgethouder van de kp. Het is nog niet gezegd of dit de gevraagde fiatteur is.
|
||
-- Is de meegegeven pexcludekey wellicht een vervanger van kostenplaatsverantwoordelijke van de kostenplaats?
|
||
-- Zo ja, dan is in dat geval lkpverantwkey de pexcludekey.
|
||
IF pexcludekey > 0 AND lkpverantwkey <> pexcludekey THEN
|
||
SELECT COUNT(prs_perslid_key)
|
||
INTO lexcludeisvervanger
|
||
FROM prs_collega
|
||
WHERE prs_perslid_key_alt = pexcludekey
|
||
AND prs_perslid_key = lkpverantwkey;
|
||
END IF;
|
||
dbms_output.put_line('ExcludeIsVervanger: '||lexcludeisvervanger);
|
||
lmethode := fac.getSetting('prs_approvemethod');
|
||
dbms_output.put_line('Approvemethod: '||lmethode);
|
||
dbms_output.put_line('Ondergrens: '||pondergrens);
|
||
|
||
IF lmethode = 3 THEN -- ook profiel budgethouder controleren
|
||
lkpverantwlimiet := prs.getprofiellimiet (lkpverantwkey, pdisckey);
|
||
dbms_output.put_line('Zijn limiet: '||lkpverantwlimiet);
|
||
IF (lkpverantwlimiet < pondergrens) -- lkpverantwkey != -1 is impliciet in die limiet
|
||
THEN -- het profiel van deze budgethouder is niet genoeg
|
||
lkpverantwkey := -1; -- Niet meer interessant wie dit was.
|
||
END IF;
|
||
END IF;
|
||
|
||
IF (lkpverantwkey = -1 OR lkpverantwkey = pexcludekey OR lexcludeisvervanger = 1)
|
||
AND (lmethode = 2 OR lmethode = 3)
|
||
-- Doorloop de boom naar boven, met allerlei aannames.
|
||
THEN
|
||
dbms_output.put_line('We gaan de boom in');
|
||
-- Waar hoort deze kp bij?
|
||
BEGIN
|
||
SELECT prs_afdeling_key, prs_afdeling_parentkey
|
||
INTO afdkey, parentafdkey
|
||
FROM prs_afdeling
|
||
WHERE prs_kostenplaats_key = pkostenplaats_key AND prs_afdeling_verwijder IS NULL;
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
-- De kostenplaats is niet aan een afdeling gerelateerd, dan weet ik het met deze methode niet.
|
||
RETURN -1;
|
||
END;
|
||
-- Zolang nog geen goede en we kunnen hogerop.
|
||
WHILE (lkpverantwkey = -1 OR lkpverantwkey = pexcludekey OR lexcludeisvervanger = 1)
|
||
AND parentafdkey IS NOT NULL
|
||
LOOP
|
||
SELECT COALESCE (k.prs_perslid_key, -1), prs_afdeling_parentkey
|
||
INTO lkpverantwkey, parentafdkey
|
||
FROM prs_kostenplaats k, prs_afdeling a
|
||
WHERE k.prs_kostenplaats_key(+) = a.prs_kostenplaats_key
|
||
AND a.prs_afdeling_verwijder IS NULL
|
||
AND a.prs_afdeling_key = parentafdkey;
|
||
dbms_output.put_line('Volgende budgethouder: '||lkpverantwkey);
|
||
|
||
IF lmethode = 3 THEN -- Ook profiel budgethouder controleren.
|
||
lkpverantwlimiet := prs.getprofiellimiet (lkpverantwkey, pdisckey);
|
||
dbms_output.put_line('Zijn limiet B: '||lkpverantwlimiet);
|
||
IF (lkpverantwlimiet < pondergrens)
|
||
THEN -- het profiel van deze budgethouder is niet genoeg
|
||
lkpverantwkey := -1; -- Niet meer interessant wie dit was.
|
||
END IF;
|
||
END IF;
|
||
|
||
IF pexcludekey > 0 AND lkpverantwkey <> pexcludekey THEN
|
||
SELECT COUNT(prs_perslid_key)
|
||
INTO lexcludeisvervanger
|
||
FROM prs_collega
|
||
WHERE prs_perslid_key_alt = pexcludekey
|
||
AND prs_perslid_key = lkpverantwkey;
|
||
END IF;
|
||
END LOOP;
|
||
-- Nu heb ik er een of kan ik er geen vinden.
|
||
END IF;
|
||
dbms_output.put_line('Gevonden budgethouder voor de kpgroep-tak: '||lkpverantwkey);
|
||
-- Als 1) de methode 1 is of
|
||
-- 2) de methode 2 of 3 is en dit niemand opleverde (ondanks afdelingskostenplaats) of
|
||
-- 3) de opgeleverde kostenplaatsverandwoordelijke de exclude(vervanger) is
|
||
-- dan kpngroepverantwoordelijken opvragen en kijken wie van hen de gevraagde fiatteur is.
|
||
IF lkpverantwkey = -1 OR lkpverantwkey = pexcludekey OR lexcludeisvervanger = 1
|
||
THEN
|
||
-- Vindt de kostenplaatsGROEPverantwoordelijken van de altijd meegegeven kostenplaats.
|
||
BEGIN
|
||
SELECT COALESCE(kg.prs_perslid_key, -1),
|
||
COALESCE(kg.prs_kostenplaatsgrp_fiat2_key, -1),
|
||
COALESCE(kg.prs_kostenplaatsgrp_fiat3_key, -1)
|
||
INTO lkpgverantwkey1,
|
||
lkpgverantwkey2,
|
||
lkpgverantwkey3
|
||
FROM prs_kostenplaats k,
|
||
prs_kostenplaatsgrp kg
|
||
WHERE prs_kostenplaats_key = pkostenplaats_key
|
||
AND kg.prs_kostenplaatsgrp_key = k.prs_kostenplaatsgrp_key;
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
-- Er is geen kpgroep bij.
|
||
RETURN -1;
|
||
END;
|
||
|
||
lteller := 1;
|
||
lfoundfiatteur := 0;
|
||
lfiatteur := -1;
|
||
|
||
-- Als er WEL een fiatbedrag is meegegeven dan de VOLGENDE fiatteur opleveren. De ondergrens is dan het fiatbedrag (pfiatbedrag).
|
||
-- Als er GEEN fiatbedrag is meegegeven dan de LAATSTE fiatteur opleveren. De ondergrens is dan pondergrens (normaalgesproken het totale opdrachtbedrag).
|
||
IF pfiatbedrag >= 0
|
||
THEN
|
||
lgrens := pfiatbedrag; // De volgende fiatteur opleveren.
|
||
ELSE
|
||
lgrens := pondergrens; // De laatste fiatteur opleveren.
|
||
END IF;
|
||
|
||
WHILE lteller <= 3 AND lfoundfiatteur = 0
|
||
LOOP
|
||
CASE
|
||
WHEN lteller = 1
|
||
THEN
|
||
lkpgverantwkey := lkpgverantwkey1;
|
||
llastfiat := lgrens < fac.getsetting ('mld_opdr_kpg_fin_limit1');
|
||
WHEN lteller = 2
|
||
THEN
|
||
lkpgverantwkey := lkpgverantwkey2;
|
||
llastfiat := lgrens < fac.getsetting ('mld_opdr_kpg_fin_limit2');
|
||
WHEN lteller = 3
|
||
THEN
|
||
lkpgverantwkey := lkpgverantwkey3;
|
||
llastfiat := lgrens >= fac.getsetting ('mld_opdr_kpg_fin_limit2') OR
|
||
lexcludeiskpgverantw = 1; -- Als de 2de fiatteur de exclude is dan moet de 3de fiatteur toch nog fiatteren.
|
||
END CASE;
|
||
|
||
IF lkpgverantwkey = pexcludekey
|
||
THEN
|
||
lexcludeiskpgverantw := 1;
|
||
ELSE
|
||
SELECT CASE
|
||
WHEN COUNT(prs_perslid_key) > 0
|
||
THEN 1
|
||
ELSE 0
|
||
END
|
||
INTO lexcludeiskpgverantw
|
||
FROM prs_collega
|
||
WHERE prs_perslid_key_alt = pexcludekey
|
||
AND prs_perslid_key = lkpgverantwkey;
|
||
END IF;
|
||
|
||
IF lexcludeiskpgverantw = 0 AND llastfiat
|
||
THEN
|
||
lfiatteur := lkpgverantwkey;
|
||
lfoundfiatteur := 1;
|
||
END IF;
|
||
lteller := lteller + 1;
|
||
END LOOP;
|
||
ELSE
|
||
lfiatteur := lkpverantwkey;
|
||
END IF;
|
||
dbms_output.put_line('Resultaat budgethouder: '||lfiatteur);
|
||
RETURN lfiatteur;
|
||
END;
|
||
|
||
-- Levert de volgende fiatteur in de rij op. Indien geen volgende fiatteur gevonden kan worden wordt -1 teruggegeven.
|
||
-- Er wordt hier niet gecontroleerd of de opdracht gefiatteerd dient te worden. Dat dien je voor de aanroep te bepalen.
|
||
FUNCTION nextfiatteur (pkey IN NUMBER,
|
||
pmodule IN VARCHAR2,
|
||
pexcludekey IN NUMBER DEFAULT -1)
|
||
RETURN NUMBER
|
||
IS
|
||
lnextfiatteur prs_kostenplaats.prs_perslid_key%TYPE;
|
||
BEGIN
|
||
CASE pmodule
|
||
WHEN 'MLD'
|
||
THEN
|
||
SELECT CASE
|
||
WHEN mld_opdr_fiatbedrag IS NULL
|
||
-- I.v.m. herfiattering hier niet meer met de 'ORDFOK' tracking gecontroleerd of de kp verantvoordelijke al gefiatteerd heeft,
|
||
-- maar hier kijken naar het gefiatteerde bedrag die is opgeslagen in het veld mld_opdr.mld_opdr_fiatbedrag.
|
||
-- Met Melding AASA#55601 wordt het veld mld_opdr.mld_opdr_fiatbedrag leeg gemaakt als de setting "mld_opdr_refiat_preference" op 1 staat
|
||
-- en de goedkeurder heeft aangegeven dat de opdracht opnieuw als een nieuwe opdracht moet worden gefiatteerd.
|
||
-- Er kan dan in dat geval nagegaan worden tot welk bedrag er is gefiatteerd.
|
||
THEN
|
||
prs.getfiatteur(o.prs_kostenplaats_key, pexcludekey, mld_opdr_kosten, std.mld_ins_discipline_key, COALESCE(mld_opdr_fiatbedrag, -1))
|
||
WHEN mld_opdr_fiatbedrag >= fac.getsetting ('mld_opdr_kpg_fin_limit2')
|
||
THEN
|
||
COALESCE(prs_kostenplaatsgrp_fiat3_key, -1)
|
||
WHEN mld_opdr_fiatbedrag >= fac.getsetting ('mld_opdr_kpg_fin_limit1')
|
||
THEN
|
||
COALESCE(prs_kostenplaatsgrp_fiat2_key, -1)
|
||
ELSE
|
||
COALESCE(kpg.prs_perslid_key, -1)
|
||
END nextfiatteur
|
||
INTO lnextfiatteur
|
||
FROM mld_opdr o,
|
||
mld_melding m,
|
||
mld_stdmelding std,
|
||
prs_kostenplaats kp,
|
||
prs_kostenplaatsgrp kpg
|
||
WHERE o.mld_melding_key = m.mld_melding_key
|
||
AND m.mld_stdmelding_key = std.mld_stdmelding_key
|
||
AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
|
||
AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
|
||
AND o.mld_opdr_key = pkey;
|
||
WHEN 'BES'
|
||
THEN
|
||
SELECT CASE
|
||
WHEN NOT EXISTS
|
||
(SELECT prs_perslid_key
|
||
FROM fac_tracking t,
|
||
fac_srtnotificatie st
|
||
WHERE t.fac_srtnotificatie_key = st.fac_srtnotificatie_key
|
||
AND st.fac_srtnotificatie_code = 'BESFIT'
|
||
AND fac_tracking_refkey = b.bes_bestelling_key)
|
||
THEN
|
||
prs.getfiatteur(b.prs_kostenplaats_key, pexcludekey, binfo.totaal, binfo.ins_discipline_key, COALESCE(bes_bestelling_fiatbedrag, -1))
|
||
WHEN bes_bestelling_fiatbedrag >= fac.getsetting('mld_opdr_kpg_fin_limit2')
|
||
THEN
|
||
COALESCE(prs_kostenplaatsgrp_fiat3_key, -1)
|
||
WHEN bes_bestelling_fiatbedrag >= fac.getsetting('mld_opdr_kpg_fin_limit1')
|
||
THEN
|
||
COALESCE(prs_kostenplaatsgrp_fiat2_key, -1)
|
||
ELSE
|
||
COALESCE(kpg.prs_perslid_key, -1)
|
||
END
|
||
nextfiatteur
|
||
INTO lnextfiatteur
|
||
FROM bes_bestelling b,
|
||
(SELECT MAX(bsg.ins_discipline_key) ins_discipline_key,
|
||
SUM(bi.bes_bestelling_item_aantal * bi.bes_bestelling_item_prijs) totaal
|
||
FROM bes_bestelling_item bi,
|
||
bes_srtdeel bsd,
|
||
bes_srtgroep bsg
|
||
WHERE bi.bes_srtdeel_key = bsd.bes_srtdeel_key
|
||
AND bsd.bes_srtgroep_key = bsg.bes_srtgroep_key
|
||
AND bes_bestelling_key = pkey) binfo,
|
||
prs_kostenplaats kp,
|
||
prs_kostenplaatsgrp kpg
|
||
WHERE b.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
|
||
AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
|
||
AND b.bes_bestelling_key = pkey;
|
||
END CASE;
|
||
RETURN lnextfiatteur;
|
||
END;
|
||
|
||
PROCEDURE setpassword(pperslidkey IN NUMBER, pwachtwoord IN VARCHAR2)
|
||
IS
|
||
BEGIN
|
||
IF pwachtwoord IS NULL
|
||
THEN
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_salt = NULL,
|
||
prs_perslid_wachtwoord_hash = NULL,
|
||
prs_perslid_wachtwoord_exp = NULL,
|
||
prs_perslid_otpsecret = NULL
|
||
WHERE prs_perslid_key = pperslidkey;
|
||
ELSE
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_salt = DBMS_RANDOM.string ('a', 32)
|
||
WHERE prs_perslid_key = pperslidkey;
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_wachtwoord_hash = fac.makehash(prs_perslid_salt || pwachtwoord),
|
||
prs_perslid_wachtwoord_exp = CASE WHEN fac.getsetting ('prs_password_expiration') > 0
|
||
THEN SYSDATE + fac.getsetting ('prs_password_expiration')
|
||
ELSE NULL
|
||
END
|
||
WHERE prs_perslid_key = pperslidkey;
|
||
END IF;
|
||
END;
|
||
|
||
FUNCTION testpassword(pperslidkey IN NUMBER, pwachtwoord IN VARCHAR2)
|
||
RETURN NUMBER
|
||
IS
|
||
perslid_key prs_perslid.prs_perslid_key%TYPE;
|
||
BEGIN
|
||
IF pwachtwoord IS NULL
|
||
THEN
|
||
RETURN 0;
|
||
END IF;
|
||
BEGIN
|
||
SELECT prs_perslid_key
|
||
INTO perslid_key
|
||
FROM prs_perslid
|
||
WHERE fac.testhash(prs_perslid_wachtwoord_hash, prs_perslid_salt || pwachtwoord) = 1
|
||
AND prs_perslid_key = pperslidkey;
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN RETURN 0;
|
||
END;
|
||
RETURN 1;
|
||
END;
|
||
|
||
-- Er wordt nu niet getrackt (wat eigenlijk niet zo goed is)
|
||
PROCEDURE upsertkenmerk (p_kenmerk_key IN NUMBER,
|
||
p_prs_key IN NUMBER,
|
||
p_waarde IN VARCHAR2)
|
||
IS
|
||
v_count NUMBER;
|
||
v_niveau VARCHAR2 (1);
|
||
BEGIN
|
||
-- niveau van prs_kenmerk ophalen, omdat deze ook in prs_kenmerklink wordt opgeslagen
|
||
SELECT prs_kenmerk_niveau
|
||
INTO v_niveau
|
||
FROM prs_kenmerk
|
||
WHERE prs_kenmerk_key = p_kenmerk_key;
|
||
|
||
SELECT COUNT ( * )
|
||
INTO v_count
|
||
FROM prs_kenmerklink
|
||
WHERE prs_link_key = p_prs_key
|
||
AND prs_kenmerk_key = p_kenmerk_key
|
||
AND prs_kenmerklink_verwijder IS NULL;
|
||
|
||
IF v_count = 1
|
||
THEN
|
||
IF p_waarde IS NULL
|
||
THEN
|
||
DELETE prs_kenmerklink
|
||
WHERE prs_link_key = p_prs_key
|
||
AND prs_kenmerk_key = p_kenmerk_key
|
||
AND prs_kenmerklink_verwijder IS NULL;
|
||
ELSE
|
||
UPDATE prs_kenmerklink
|
||
SET prs_kenmerklink_waarde = p_waarde
|
||
WHERE prs_link_key = p_prs_key
|
||
AND prs_kenmerk_key = p_kenmerk_key
|
||
AND prs_kenmerklink_verwijder IS NULL;
|
||
END IF;
|
||
ELSE
|
||
IF p_kenmerk_key IS NOT NULL AND p_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_prs_key,
|
||
v_niveau,
|
||
p_waarde);
|
||
END IF;
|
||
END IF;
|
||
END;
|
||
-- Verhuist een persoon p_prs_key naar een werkplek in p_ruimte_key
|
||
-- Als er al vaste werkplekken waren binnen het niveau van p_alg_type (R,V,G,L,D,NULL,A)
|
||
-- dan worden die geleegd/gewist. Bij NULL wordt niks gewist, bij A wordt altijd gewist.
|
||
PROCEDURE movetoruimte (p_prs_key IN NUMBER,
|
||
p_ruimte_key IN NUMBER,
|
||
p_alg_type IN VARCHAR2,
|
||
p_virtual IN NUMBER DEFAULT 0)
|
||
IS
|
||
v_count NUMBER;
|
||
v_wp_key NUMBER (10);
|
||
v_wp_volgnr prs_werkplek.prs_werkplek_volgnr%TYPE;
|
||
v_ruimte_nr alg_ruimte.alg_ruimte_nr%TYPE;
|
||
v_wp_oms prs_werkplek.prs_werkplek_omschrijving%TYPE;
|
||
v_alg_key NUMBER (10);
|
||
BEGIN
|
||
-- Bepalen of werkplek gewijzigd is tov de huidige situatie
|
||
-- door te tellen hoe vaak (1) we al in de nieuwe situatie zitten
|
||
SELECT COUNT ( * )
|
||
INTO v_count
|
||
FROM prs_perslidwerkplek pw, prs_werkplek wp
|
||
WHERE pw.prs_perslid_key = p_prs_key
|
||
AND pw.prs_werkplek_key = wp.prs_werkplek_key
|
||
AND wp.prs_alg_ruimte_key = p_ruimte_key
|
||
AND wp.prs_werkplek_type = 0 -- alleen vaste plekken
|
||
AND wp.prs_werkplek_virtueel = p_virtual;
|
||
|
||
IF (v_count = 0)
|
||
THEN
|
||
-- Persoon zit nog niet op de bestemming
|
||
-- Verwijderen oude -vaste- werkplek(ken) op meegegeven niveau.
|
||
SELECT MIN(DECODE (p_alg_type,
|
||
'R', alg_ruimte_key,
|
||
'V', alg_verdieping_key,
|
||
'G', alg_gebouw_key,
|
||
'L', alg_locatie_key,
|
||
'D', alg_district_key,
|
||
NULL))
|
||
INTO v_alg_key
|
||
FROM alg_v_ruimte_gegevens_all
|
||
WHERE alg_ruimte_key = p_ruimte_key;
|
||
|
||
IF fac.getsetting ('prs_werkplek_implicit') = '0' --expliciet
|
||
THEN
|
||
-- Wis de bezetting maar laat de werkplek bestaan
|
||
DELETE FROM prs_perslidwerkplek pw
|
||
WHERE pw.prs_perslid_key = p_prs_key
|
||
AND EXISTS
|
||
(SELECT 1
|
||
FROM prs_werkplek wp,
|
||
(SELECT alg_ruimte_key,
|
||
DECODE (p_alg_type,
|
||
'R', alg_ruimte_key,
|
||
'V', alg_verdieping_key,
|
||
'G', alg_gebouw_key,
|
||
'L', alg_locatie_key,
|
||
'D', alg_district_key,
|
||
NULL)
|
||
alg_key
|
||
FROM alg_v_ruimte_gegevens_all) og
|
||
WHERE wp.prs_werkplek_key = pw.prs_werkplek_key
|
||
AND wp.prs_werkplek_virtueel = p_virtual
|
||
AND wp.prs_werkplek_type = 0 -- alleen vaste plekken
|
||
AND wp.prs_alg_ruimte_key = og.alg_ruimte_key
|
||
AND (og.alg_key = v_alg_key OR p_alg_type = 'A'));
|
||
ELSE
|
||
-- Wis de werkplek, automatisch inclusief de bezetting
|
||
DELETE FROM prs_werkplek wp
|
||
WHERE wp.prs_werkplek_virtueel = p_virtual
|
||
AND wp.prs_werkplek_type = 0 -- alleen vaste plekken
|
||
AND EXISTS
|
||
(SELECT 1
|
||
FROM prs_perslidwerkplek pw,
|
||
(SELECT alg_ruimte_key,
|
||
DECODE (p_alg_type,
|
||
'R', alg_ruimte_key,
|
||
'V', alg_verdieping_key,
|
||
'G', alg_gebouw_key,
|
||
'L', alg_locatie_key,
|
||
'D', alg_district_key,
|
||
NULL)
|
||
alg_key
|
||
FROM alg_v_ruimte_gegevens_all) og
|
||
WHERE pw.prs_perslid_key = p_prs_key
|
||
AND pw.prs_werkplek_key = wp.prs_werkplek_key
|
||
AND wp.prs_alg_ruimte_key = og.alg_ruimte_key
|
||
AND (og.alg_key = v_alg_key OR p_alg_type = 'A'));
|
||
END IF;
|
||
|
||
-- Persoon krijgt wp op de meegegeven ruimte.
|
||
IF p_ruimte_key IS NOT NULL
|
||
THEN
|
||
-- Bepalen vrije werkplek (kan alleen igv expliciete werkplekken).
|
||
IF fac.getsetting ('prs_werkplek_implicit') = '0' --expliciet
|
||
THEN
|
||
SELECT MIN (wp.prs_werkplek_key)
|
||
INTO v_wp_key
|
||
FROM prs_werkplek wp
|
||
WHERE wp.prs_alg_ruimte_key = p_ruimte_key
|
||
AND wp.prs_werkplek_virtueel = p_virtual
|
||
AND wp.prs_werkplek_type = 0 -- alleen vaste plekken
|
||
AND NOT EXISTS (SELECT 1
|
||
FROM prs_perslidwerkplek pw
|
||
WHERE pw.prs_werkplek_key = wp.prs_werkplek_key);
|
||
END IF;
|
||
|
||
IF v_wp_key IS NULL
|
||
THEN
|
||
-- Er is geen vrije (kan ook omdat we impliciet zijn), maak dan een nieuwe vrije werkplek.
|
||
SELECT MIN (ll) eerstvrije
|
||
INTO v_wp_volgnr
|
||
FROM ( SELECT LEVEL ll
|
||
FROM DUAL
|
||
CONNECT BY LEVEL <= 9999
|
||
MINUS
|
||
SELECT prs_werkplek_volgnr
|
||
FROM prs_werkplek
|
||
WHERE prs_alg_ruimte_key = p_ruimte_key);
|
||
|
||
SELECT alg_ruimte_nr
|
||
INTO v_ruimte_nr
|
||
FROM alg_ruimte
|
||
WHERE alg_ruimte_key = p_ruimte_key;
|
||
|
||
v_wp_oms := v_ruimte_nr || '/' || TO_CHAR (v_wp_volgnr);
|
||
|
||
-- Toevoegen nieuwe werkplek in meegegeven ruimte.
|
||
INSERT INTO prs_werkplek (prs_werkplek_volgnr,
|
||
prs_werkplek_omschrijving,
|
||
prs_alg_ruimte_key,
|
||
prs_werkplek_type,
|
||
prs_werkplek_virtueel)
|
||
VALUES (v_wp_volgnr, v_wp_oms, p_ruimte_key, 0, p_virtual)
|
||
RETURNING prs_werkplek_key
|
||
INTO v_wp_key;
|
||
END IF;
|
||
|
||
-- Koppelen persoon aan de (nieuwe of bestaande) vrije werkplek
|
||
INSERT INTO prs_perslidwerkplek (prs_perslid_key,
|
||
prs_werkplek_key,
|
||
prs_perslidwerkplek_bezetting)
|
||
VALUES (p_prs_key, v_wp_key, 100);
|
||
END IF;
|
||
END IF;
|
||
END;
|
||
|
||
-- Procedure om op een standaard wijze de import tabel voor personen te vullen
|
||
-- p_import_key
|
||
-- p_seq_of_columns string met puntkomma gescheiden reeks van kolomnummers waar onderstaande kolom
|
||
-- in het import bestand gevonden kan worden.
|
||
--
|
||
-- Naar analogie met de factuur import.
|
||
-- v_seq_of_columns ListOfInteger := (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 .....,46);
|
||
-- Het getal op een bepaalde postitie geeft aan in welke kolom dit veld in de csv staat
|
||
-- Voorbeeld: Als de derde waarde een 8 bevat betekent dit dat de verdieping volgnummer in kolom 8 van de csv staat.
|
||
--
|
||
-- Dus dan maar via een string, en ook op slimme wijze, nl alsof het een ingelezen perslid-record is met p_fielddelimitor
|
||
--
|
||
-- Afwijkingen op deze volgorde zijn in eigen cust_import_perslid te regelen.
|
||
--
|
||
-- Als locatiecode en gebouwcode b.v. zijn omgedraaid in het CSV-formaat,
|
||
-- dan perslid import ListOfInteger := (2,1,3,4,5,6,7,8,9,10,11,12);
|
||
-- v_seq_of_columns := '2;1;3;4;5;6;7;8;9;10;11;12';
|
||
--
|
||
-- Als locatiecode NIET in CSV staat, dan perslid import ListOfInteger := (0,2,3,4,5,6,7,8,9,10,11,12);
|
||
-- v_seq_of_columns := '0;2;3;4;5;6;7;8;9;10;11;12';
|
||
-- M.a.w. waar een 0 staat, wordt de variabele niet ingelezen en blijft LEEG.
|
||
--
|
||
-- p_header header waarop gecontroleerd moet worden. Indien null dan wordt er niet op een header gecontroleerd.
|
||
-- Het is mogelijk om wildcards in de string op te geven.
|
||
-- Standaard volgorde van de kolommen in het CSV-formaat)
|
||
-- Variabelelijst
|
||
-- v_alg_locatie_code 1
|
||
-- v_alg_gebouw_code 2
|
||
-- v_alg_verdieping_volgnr 3
|
||
-- v_alg_ruimte_nr 4
|
||
-- v_prs_werkplek_volgnr 5
|
||
-- v_prs_werkplek_omschrijving 6
|
||
-- v_prs_afdeling_naam 7
|
||
-- v_prs_perslid_naam 8
|
||
-- v_prs_perslid_tussenvoegsel 9
|
||
-- v_prs_perslid_voornaam 10
|
||
-- v_prs_perslid_voorletters 11
|
||
-- v_prs_perslid_partner_naam 12
|
||
-- v_prs_perslid_partner_tussenv 13
|
||
-- v_prs_naamgebruik_code 14 0 (default) perslid_naam en perslid_tussenvoegsel worden gebruikt
|
||
-- 1 personen die de geboortenaam van de partner icm de eigen naam willen gebruiken
|
||
-- 2 personen die de geboortenaam van de partner willen gebruiken
|
||
-- 3 personen die de eigen naam icm de geboortenaam van de partner willen gebruiken
|
||
-- v_prs_perslid_geslacht 15 Gebruik 'man', 'm' of 1 voor man en 'vrouw', 'v' of 0 voor vrouw case insensitive geen default
|
||
-- v_prs_perslid_telefoonnr 16
|
||
-- v_prs_perslid_mobiel 17
|
||
-- v_prs_perslid_email 18
|
||
-- v_prs_perslid_dienstverband 19
|
||
-- v_prs_perslid_nr 20
|
||
-- v_prs_srtperslid_omschrijving 21
|
||
-- v_prs_perslid_oslogin 22
|
||
-- v_prs_perslid_wachtwoord 23
|
||
-- v_prs_perslid_titel 24
|
||
-- v_prs_perslid_apikey 25
|
||
-- v_dummy 26
|
||
-- v_prs_kenmerk1 27
|
||
-- v_prs_kenmerk2 28
|
||
-- v_prs_kenmerk3 29
|
||
-- v_prs_kenmerk4 30
|
||
-- v_prs_kenmerk5 31
|
||
-- v_prs_kenmerk6 32
|
||
-- v_prs_kenmerk7 33
|
||
-- v_prs_kenmerk8 34
|
||
-- v_prs_kenmerk9 35
|
||
-- v_prs_kenmerk10 36
|
||
-- v_prs_kenmerk11 37
|
||
-- v_prs_kenmerk12 38
|
||
-- v_prs_kenmerk13 39
|
||
-- v_prs_kenmerk14 40
|
||
-- v_prs_kenmerk15 41
|
||
-- v_prs_kenmerk16 42
|
||
-- v_prs_kenmerk17 43
|
||
-- v_prs_kenmerk18 44
|
||
-- v_prs_kenmerk19 45
|
||
-- v_prs_kenmerk20 46
|
||
PROCEDURE import_perslid (
|
||
p_import_key IN NUMBER,
|
||
p_seq_of_columns IN VARCHAR2,
|
||
p_header IN VARCHAR2)
|
||
AS
|
||
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
|
||
v_field VARCHAR2 (100);
|
||
v_fielddelimitor VARCHAR2 (1);
|
||
v_aanduiding VARCHAR2 (400);
|
||
v_errormsg VARCHAR (200);
|
||
v_errorhint VARCHAR2 (200);
|
||
v_count NUMBER (10) := 0;
|
||
v_count_tot NUMBER (10) := 0;
|
||
v_count_import NUMBER (10) := 0;
|
||
v_index NUMBER (10);
|
||
v_ongeldig NUMBER (10);
|
||
v_header_is_valid NUMBER (1) := 0;
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
|
||
-- De importvelden
|
||
v_empty VARCHAR2 (100);
|
||
v_alg_locatie_code VARCHAR2 (256);
|
||
v_alg_gebouw_code VARCHAR2 (256);
|
||
v_alg_verdieping_volgnr VARCHAR2 (256);
|
||
v_alg_ruimte_nr VARCHAR2 (256);
|
||
v_prs_werkplek_volgnr VARCHAR2 (256);
|
||
v_prs_werkplek_omschrijving VARCHAR2 (256);
|
||
v_prs_afdeling_naam VARCHAR2 (256);
|
||
v_prs_perslid_naam VARCHAR2 (256);
|
||
v_prs_perslid_tussenvoegsel VARCHAR2 (256);
|
||
v_prs_perslid_voornaam VARCHAR2 (256);
|
||
v_prs_perslid_voorletters VARCHAR2 (256);
|
||
v_prs_perslid_partner_naam VARCHAR2 (256);
|
||
v_prs_perslid_partner_tussenv VARCHAR2 (256);
|
||
v_prs_naamgebruik_code VARCHAR2 (256);
|
||
v_prs_perslid_geslacht VARCHAR2 (256);
|
||
v_prs_perslid_telefoonnr VARCHAR2 (256);
|
||
v_prs_perslid_mobiel VARCHAR2 (256);
|
||
v_prs_perslid_email VARCHAR2 (256);
|
||
v_prs_perslid_dienstverband VARCHAR2 (256);
|
||
v_prs_perslid_nr VARCHAR2 (256);
|
||
v_prs_srtperslid_omschrijving VARCHAR2 (256);
|
||
v_prs_perslid_titel VARCHAR2 (256);
|
||
v_prs_perslid_oslogin VARCHAR2 (256);
|
||
v_prs_perslid_wachtwoord VARCHAR2 (256);
|
||
v_prs_perslid_apikey VARCHAR2 (256);
|
||
v_prs_kenmerk1 VARCHAR2 (256);
|
||
v_prs_kenmerk2 VARCHAR2 (256);
|
||
v_prs_kenmerk3 VARCHAR2 (256);
|
||
v_prs_kenmerk4 VARCHAR2 (256);
|
||
v_prs_kenmerk5 VARCHAR2 (256);
|
||
v_prs_kenmerk6 VARCHAR2 (256);
|
||
v_prs_kenmerk7 VARCHAR2 (256);
|
||
v_prs_kenmerk8 VARCHAR2 (256);
|
||
v_prs_kenmerk9 VARCHAR2 (256);
|
||
v_prs_kenmerk10 VARCHAR2 (256);
|
||
v_prs_kenmerk11 VARCHAR2 (256);
|
||
v_prs_kenmerk12 VARCHAR2 (256);
|
||
v_prs_kenmerk13 VARCHAR2 (256);
|
||
v_prs_kenmerk14 VARCHAR2 (256);
|
||
v_prs_kenmerk15 VARCHAR2 (256);
|
||
v_prs_kenmerk16 VARCHAR2 (256);
|
||
v_prs_kenmerk17 VARCHAR2 (256);
|
||
v_prs_kenmerk18 VARCHAR2 (256);
|
||
v_prs_kenmerk19 VARCHAR2 (256);
|
||
v_prs_kenmerk20 VARCHAR2 (256);
|
||
v_alg_verdieping_volgnr_num NUMBER;
|
||
v_prs_werkplek_volgnr_num NUMBER;
|
||
v_prs_perslid_dienstv_num NUMBER;
|
||
|
||
v_seq_of_columns VARCHAR2 (200);
|
||
|
||
TYPE array_t IS VARRAY (46) OF NUMBER (10);
|
||
|
||
v_colnr array_t := array_t ();
|
||
|
||
CURSOR c
|
||
IS
|
||
SELECT *
|
||
FROM fac_imp_file
|
||
WHERE fac_import_key = p_import_key
|
||
ORDER BY fac_imp_file_index;
|
||
BEGIN
|
||
// JGL: Ik zou graag een WHERE fac_import_key = p_import_key hieronder
|
||
// toevoegen zodat het script ook multi-user veilig is,
|
||
// Heel veel klant-specifieke imports(/aanvullingen) controleren
|
||
// echter niet op de fac_import_key en zouden flink de fout in gaan.
|
||
// Daarom vooralsnog hier toch maar alles verwijderen
|
||
DELETE FROM fac_imp_perslid;
|
||
|
||
SELECT COALESCE (MAX (fac_imp_file_index), 0) + 1
|
||
INTO v_count
|
||
FROM fac_imp_factuur;
|
||
|
||
-- Init
|
||
v_fielddelimitor := ';';
|
||
v_seq_of_columns := p_seq_of_columns;
|
||
v_errorhint := 'Bepalen volgorde kolommen';
|
||
|
||
FOR v_index IN 1 .. 46
|
||
LOOP
|
||
v_colnr.EXTEND;
|
||
-- De volgorde de te importeren kolommen in de CSV uitlezen uit v_seq_of_columns
|
||
fac.imp_getfield (v_seq_of_columns,
|
||
v_fielddelimitor,
|
||
v_colnr (v_index));
|
||
END LOOP;
|
||
|
||
-- Indien geen header check is opgegeven, gaan we niet op zoek naar een geldige header
|
||
IF p_header IS NULL
|
||
THEN
|
||
v_header_is_valid := 1;
|
||
END IF;
|
||
|
||
FOR rec1 IN c
|
||
LOOP
|
||
BEGIN
|
||
v_errormsg := 'Fout FETCH te importeren rij';
|
||
|
||
v_newline := rec1.fac_imp_file_line;
|
||
v_errormsg := '';
|
||
v_errorhint := 'Fout opvragen te importeren rij';
|
||
v_aanduiding := '';
|
||
v_ongeldig := 0;
|
||
|
||
IF v_header_is_valid = 0
|
||
THEN
|
||
IF UPPER (v_newline) LIKE UPPER (p_header)
|
||
THEN
|
||
v_header_is_valid := 1;
|
||
END IF;
|
||
ELSE
|
||
-- Lees alle veldwaarden
|
||
v_errorhint := 'Inlezen alg_locatie_code kolom:' || v_colnr (1);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (1),
|
||
v_alg_locatie_code);
|
||
v_errorhint := 'Inlezen alg_lcoatie_code kolom:' || v_colnr (2);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (2),
|
||
v_alg_gebouw_code);
|
||
v_errorhint := 'Inlezen alg_verdieping_volgnr kolom:' || v_colnr (3);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (3),
|
||
v_alg_verdieping_volgnr);
|
||
v_errorhint := 'Inlezen alg_ruimte_nr kolom:' || v_colnr (4);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (4),
|
||
v_alg_ruimte_nr);
|
||
v_errorhint := 'Inlezen prs_werkplek_volgnr kolom:' || v_colnr (5);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (5),
|
||
v_prs_werkplek_volgnr);
|
||
v_errorhint := 'Inlezen prs_werkplek_omschrijving kolom:' || v_colnr (6);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (6),
|
||
v_prs_werkplek_omschrijving);
|
||
v_errorhint := 'Inlezen prs_afdeling_naam kolom:' || v_colnr (7);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (7),
|
||
v_prs_afdeling_naam);
|
||
v_errorhint := 'Inlezen prs_perslid_naam kolom:' || v_colnr (8);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (8),
|
||
v_prs_perslid_naam);
|
||
v_errorhint := 'Inlezen prs_perslid_tussenvoegsel kolom:' || v_colnr (9);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (9),
|
||
v_prs_perslid_tussenvoegsel);
|
||
v_errorhint := 'Inlezen prs_perslid_voornaam kolom:' || v_colnr (10);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (10),
|
||
v_prs_perslid_voornaam);
|
||
v_errorhint := 'Inlezen prs_perslid_voorletters kolom:' || v_colnr (11);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (11),
|
||
v_prs_perslid_voorletters);
|
||
v_errorhint := 'Inlezen prs_perslid_partner_naam kolom:' || v_colnr (12);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (12),
|
||
v_prs_perslid_partner_naam);
|
||
v_errorhint := 'Inlezen prs_perslid_partner_tussenv kolom:' || v_colnr (13);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (13),
|
||
v_prs_perslid_partner_tussenv);
|
||
v_errorhint := 'Inlezen prs_perslid_geslacht kolom:' || v_colnr (14);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (14),
|
||
v_prs_naamgebruik_code);
|
||
v_errorhint := 'Inlezen alg_lcoatie_code kolom:' || v_colnr (15);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (15),
|
||
v_prs_perslid_geslacht);
|
||
v_errorhint := 'Inlezen prs_perslid_telefoonnr kolom:' || v_colnr (16);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (16),
|
||
v_prs_perslid_telefoonnr);
|
||
v_errorhint := 'Inlezen prs_perslid_mobiel kolom:' || v_colnr (17);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (17),
|
||
v_prs_perslid_mobiel);
|
||
v_errorhint := 'Inlezen prs_perslid_email kolom:' || v_colnr (18);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (18),
|
||
v_prs_perslid_email);
|
||
v_errorhint := 'Inlezen prs_perslid_dienstverband kolom:' || v_colnr (19);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (19),
|
||
v_prs_perslid_dienstverband);
|
||
v_errorhint := 'Inlezen prs_perslid_nr kolom:' || v_colnr (20);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (20),
|
||
v_prs_perslid_nr);
|
||
v_errorhint := 'Inlezen prs_srtperslid_omschrijving kolom:' || v_colnr (21);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (21),
|
||
v_prs_srtperslid_omschrijving);
|
||
v_errorhint := 'Inlezen prs_perslid_oslogin kolom:' || v_colnr (22);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (22),
|
||
v_prs_perslid_oslogin);
|
||
v_errorhint := 'Inlezen prs_perslid_wachtwoord kolom:' || v_colnr (23);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (23),
|
||
v_prs_perslid_wachtwoord);
|
||
v_errorhint := 'Inlezen prs_perslid_titel kolom:' || v_colnr (24);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (24),
|
||
v_prs_perslid_titel);
|
||
v_errorhint := 'Inlezen prs_perslid_apikey kolom:' || v_colnr (25);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (25),
|
||
v_prs_perslid_apikey);
|
||
v_errorhint := 'Inlezen prs_kenmerk1 kolom:' || v_colnr (27);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (27),
|
||
v_prs_kenmerk1);
|
||
v_errorhint := 'Inlezen prs_kenmerk2 kolom:' || v_colnr (28);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (28),
|
||
v_prs_kenmerk2);
|
||
v_errorhint := 'Inlezen prs_kenmerk3 kolom:' || v_colnr (29);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (29),
|
||
v_prs_kenmerk3);
|
||
v_errorhint := 'Inlezen prs_kenmerk4 kolom:' || v_colnr (30);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (30),
|
||
v_prs_kenmerk4);
|
||
v_errorhint := 'Inlezen prs_kenmerk5 kolom:' || v_colnr (31);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (31),
|
||
v_prs_kenmerk5);
|
||
v_errorhint := 'Inlezen prs_kenmerk6 kolom:' || v_colnr (32);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (32),
|
||
v_prs_kenmerk6);
|
||
v_errorhint := 'Inlezen prs_kenmerk7 kolom:' || v_colnr (33);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (33),
|
||
v_prs_kenmerk7);
|
||
v_errorhint := 'Inlezen prs_kenmerk8 kolom:' || v_colnr (34);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (34),
|
||
v_prs_kenmerk8);
|
||
v_errorhint := 'Inlezen prs_kenmerk9 kolom:' || v_colnr (35);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (35),
|
||
v_prs_kenmerk9);
|
||
v_errorhint := 'Inlezen prs_kenmerk10 kolom:' || v_colnr (36);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (36),
|
||
v_prs_kenmerk10);
|
||
v_errorhint := 'Inlezen prs_kenmerk11 kolom:' || v_colnr (37);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (37),
|
||
v_prs_kenmerk11);
|
||
v_errorhint := 'Inlezen prs_kenmerk12 kolom:' || v_colnr (38);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (38),
|
||
v_prs_kenmerk12);
|
||
v_errorhint := 'Inlezen prs_kenmerk13 kolom:' || v_colnr (39);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (39),
|
||
v_prs_kenmerk13);
|
||
v_errorhint := 'Inlezen prs_kenmerk14 kolom:' || v_colnr (40);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (40),
|
||
v_prs_kenmerk14);
|
||
v_errorhint := 'Inlezen prs_kenmerk15 kolom:' || v_colnr (41);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (41),
|
||
v_prs_kenmerk15);
|
||
v_errorhint := 'Inlezen prs_kenmerk16 kolom:' || v_colnr (42);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (42),
|
||
v_prs_kenmerk16);
|
||
v_errorhint := 'Inlezen prs_kenmerk17 kolom:' || v_colnr (43);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (43),
|
||
v_prs_kenmerk17);
|
||
v_errorhint := 'Inlezen prs_kenmerk18 kolom:' || v_colnr (44);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (44),
|
||
v_prs_kenmerk18);
|
||
v_errorhint := 'Inlezen prs_kenmerk19 kolom:' || v_colnr (45);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (45),
|
||
v_prs_kenmerk19);
|
||
v_errorhint := 'Inlezen prs_kenmerk20 kolom:' || v_colnr (46);
|
||
fac.imp_getfield_nr (v_newline,
|
||
v_fielddelimitor,
|
||
v_colnr (46),
|
||
v_prs_kenmerk20);
|
||
|
||
v_aanduiding :=
|
||
v_prs_perslid_naam || '|' || v_prs_perslid_voornaam || '| ';
|
||
|
||
v_count_tot := v_count_tot + 1;
|
||
v_errorhint := 'Ongeldige locatiecode';
|
||
v_alg_locatie_code := TRIM (v_alg_locatie_code);
|
||
|
||
IF LENGTH (v_alg_locatie_code) > 10
|
||
THEN
|
||
v_alg_locatie_code := SUBSTR (v_alg_locatie_code, 1, 10);
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Locatie-aanduiding is te lang',
|
||
'Aanduiding wordt afgebroken tot ['
|
||
|| v_alg_locatie_code
|
||
|| ']');
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldige gebouw code';
|
||
v_alg_gebouw_code := TRIM (v_alg_gebouw_code);
|
||
|
||
IF LENGTH (v_alg_gebouw_code) > 12
|
||
THEN
|
||
v_alg_gebouw_code := SUBSTR (v_alg_gebouw_code, 1, 12);
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Gebouw-aanduiding is te lang',
|
||
'Aanduiding wordt afgebroken tot ['
|
||
|| v_alg_gebouw_code
|
||
|| ']');
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldig verdieping volgnummer';
|
||
v_alg_verdieping_volgnr := TRIM (v_alg_verdieping_volgnr);
|
||
|
||
IF (v_alg_verdieping_volgnr IS NULL)
|
||
THEN
|
||
v_alg_verdieping_volgnr_num :=
|
||
TO_NUMBER (v_alg_verdieping_volgnr);
|
||
ELSE
|
||
BEGIN
|
||
v_alg_verdieping_volgnr_num :=
|
||
TO_NUMBER (v_alg_verdieping_volgnr);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_ongeldig := 1;
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg :=
|
||
'Error ' || oracle_err_num || '/' || oracle_err_mes;
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
END;
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldige ruimte nr';
|
||
v_alg_ruimte_nr := TRIM (v_alg_ruimte_nr);
|
||
|
||
IF LENGTH (v_alg_ruimte_nr) > 20
|
||
THEN
|
||
v_alg_ruimte_nr := SUBSTR (v_alg_ruimte_nr, 1, 20);
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Ruimtenr-aanduiding is te lang',
|
||
'Aanduiding wordt afgebroken tot ['
|
||
|| v_alg_ruimte_nr
|
||
|| ']');
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldig werkplek volgnummer';
|
||
v_prs_werkplek_volgnr := TRIM (v_prs_werkplek_volgnr);
|
||
|
||
IF (v_prs_werkplek_volgnr IS NULL)
|
||
THEN
|
||
v_prs_werkplek_volgnr_num := TO_NUMBER (v_prs_werkplek_volgnr);
|
||
ELSE
|
||
BEGIN
|
||
v_alg_verdieping_volgnr_num :=
|
||
TO_NUMBER (v_alg_verdieping_volgnr);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_ongeldig := 1;
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg :=
|
||
'Error ' || oracle_err_num || '/' || oracle_err_mes;
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
END;
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldige werkplek omschrijving';
|
||
v_prs_werkplek_omschrijving := TRIM (v_prs_werkplek_omschrijving);
|
||
|
||
IF LENGTH (v_prs_werkplek_omschrijving) > 30
|
||
THEN
|
||
v_prs_werkplek_omschrijving :=
|
||
SUBSTR (v_prs_werkplek_omschrijving, 1, 30);
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Werkplek-aanduiding is te lang',
|
||
'Aanduiding wordt afgebroken tot ['
|
||
|| v_prs_werkplek_omschrijving
|
||
|| ']');
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldige afdelingscode';
|
||
v_prs_afdeling_naam := TRIM (v_prs_afdeling_naam);
|
||
|
||
IF LENGTH (v_prs_afdeling_naam) > 15
|
||
THEN
|
||
v_prs_afdeling_naam := SUBSTR (v_prs_afdeling_naam, 1, 15);
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Afdelingscode is te lang',
|
||
'Aanduiding wordt afgebroken tot ['
|
||
|| v_prs_afdeling_naam
|
||
|| ']');
|
||
ELSE
|
||
IF (v_prs_afdeling_naam IS NULL)
|
||
THEN
|
||
v_ongeldig := 1;
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || 'Afdelingscode onbekend',
|
||
'Afdelingscode moet worden opgegeven');
|
||
END IF;
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldige naam persoon';
|
||
v_prs_perslid_naam := TRIM (v_prs_perslid_naam);
|
||
|
||
IF LENGTH (v_prs_perslid_naam) > 60
|
||
THEN
|
||
v_prs_perslid_naam := SUBSTR (v_prs_perslid_naam, 1, 60);
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Naam persoon is te lang',
|
||
'Aanduiding wordt afgebroken tot ['
|
||
|| v_prs_perslid_naam
|
||
|| ']');
|
||
ELSE
|
||
IF (v_prs_perslid_naam IS NULL)
|
||
THEN
|
||
v_ongeldig := 1;
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || 'Naam persoon onbekend',
|
||
'Naam persoon moet worden opgegeven');
|
||
END IF;
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldige tussenvoegsel persoon';
|
||
v_prs_perslid_tussenvoegsel := TRIM (v_prs_perslid_tussenvoegsel);
|
||
|
||
IF LENGTH (v_prs_perslid_tussenvoegsel) > 10
|
||
THEN
|
||
v_prs_perslid_tussenvoegsel :=
|
||
SUBSTR (v_prs_perslid_tussenvoegsel, 1, 10);
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Tussenvoegsel persoon is te lang',
|
||
'Aanduiding wordt afgebroken tot ['
|
||
|| v_prs_perslid_tussenvoegsel
|
||
|| ']');
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldige voorletters persoon';
|
||
v_prs_perslid_voorletters := TRIM (v_prs_perslid_voorletters);
|
||
|
||
IF LENGTH (v_prs_perslid_voorletters) > 15
|
||
THEN
|
||
v_prs_perslid_voorletters :=
|
||
SUBSTR (v_prs_perslid_voorletters, 1, 15);
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Voorletters persoon zijn te lang',
|
||
'Aanduiding wordt afgebroken tot ['
|
||
|| v_prs_perslid_voorletters
|
||
|| ']');
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Voornaam persoon';
|
||
v_prs_perslid_voornaam := TRIM (v_prs_perslid_voornaam);
|
||
|
||
IF LENGTH (v_prs_perslid_voornaam) > 30
|
||
THEN
|
||
v_prs_perslid_voornaam :=
|
||
SUBSTR (v_prs_perslid_voornaam, 1, 30);
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Voornaam persoon is te lang',
|
||
'Aanduiding wordt afgebroken tot ['
|
||
|| v_prs_perslid_voornaam
|
||
|| ']');
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldige partnernaam persoon';
|
||
v_prs_perslid_partner_naam := TRIM (v_prs_perslid_partner_naam);
|
||
|
||
--
|
||
IF LENGTH (v_prs_perslid_partner_naam) > 60
|
||
THEN
|
||
v_prs_perslid_partner_naam := SUBSTR (v_prs_perslid_partner_naam, 1, 60);
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Partnernaam is te lang',
|
||
'Aanduiding wordt afgebroken tot ['
|
||
|| v_prs_perslid_partner_naam
|
||
|| ']');
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldige tussenvoegsel partner';
|
||
v_prs_perslid_partner_tussenv := TRIM (v_prs_perslid_partner_tussenv);
|
||
|
||
IF LENGTH (v_prs_perslid_partner_tussenv) > 10
|
||
THEN
|
||
v_prs_perslid_partner_tussenv :=
|
||
SUBSTR (v_prs_perslid_partner_tussenv, 1, 10);
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Tussenvoegsel partner is te lang',
|
||
'Aanduiding wordt afgebroken tot ['
|
||
|| v_prs_perslid_partner_tussenv
|
||
|| ']');
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldig geslacht';
|
||
v_prs_perslid_geslacht := TRIM (v_prs_perslid_geslacht);
|
||
|
||
IF LENGTH (v_prs_perslid_geslacht) > 1
|
||
THEN
|
||
SELECT DECODE(UPPER(v_prs_perslid_geslacht), 'MAN', '1', 'VROUW', '0', NULL)
|
||
INTO v_prs_perslid_geslacht
|
||
FROM DUAL;
|
||
ELSE
|
||
IF fac.safe_to_number(v_prs_perslid_geslacht) IS NULL
|
||
THEN
|
||
SELECT DECODE(UPPER(v_prs_perslid_geslacht), 'M', '1', 'V', '0', NULL)
|
||
INTO v_prs_perslid_geslacht
|
||
FROM DUAL;
|
||
END IF;
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldig dienstverband';
|
||
v_prs_perslid_dienstverband := TRIM (v_prs_perslid_dienstverband);
|
||
|
||
IF (v_prs_perslid_dienstverband IS NOT NULL)
|
||
THEN
|
||
BEGIN
|
||
v_prs_perslid_dienstv_num :=
|
||
TO_NUMBER (v_prs_perslid_dienstverband);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_ongeldig := 1;
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg :=
|
||
'Error ' || oracle_err_num || '/' || oracle_err_mes;
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
END;
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldige titel persoon';
|
||
v_prs_perslid_titel := TRIM (v_prs_perslid_titel);
|
||
|
||
IF LENGTH (v_prs_perslid_titel) > 15
|
||
THEN
|
||
v_prs_perslid_titel := SUBSTR (v_prs_perslid_titel, 1, 15);
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Titel persoon is te lang',
|
||
'Aanduiding wordt afgebroken tot ['
|
||
|| v_prs_perslid_titel
|
||
|| ']');
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldige telefoonnr. persoon';
|
||
v_prs_perslid_telefoonnr := TRIM (v_prs_perslid_telefoonnr);
|
||
|
||
IF LENGTH (v_prs_perslid_telefoonnr) > 15
|
||
THEN
|
||
v_prs_perslid_telefoonnr :=
|
||
SUBSTR (v_prs_perslid_telefoonnr, 1, 15);
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Telefoonnr. persoon is te lang',
|
||
'Aanduiding wordt afgebroken tot ['
|
||
|| v_prs_perslid_telefoonnr
|
||
|| ']');
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldige mobielnr. persoon';
|
||
v_prs_perslid_mobiel := TRIM (v_prs_perslid_mobiel);
|
||
|
||
IF LENGTH (v_prs_perslid_mobiel) > 15
|
||
THEN
|
||
v_prs_perslid_mobiel := SUBSTR (v_prs_perslid_mobiel, 1, 15);
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Mobielnr. persoon is te lang',
|
||
'Aanduiding wordt afgebroken tot ['
|
||
|| v_prs_perslid_mobiel
|
||
|| ']');
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldige email persoon';
|
||
v_prs_perslid_email := TRIM (v_prs_perslid_email);
|
||
|
||
IF LENGTH (v_prs_perslid_email) > 200
|
||
THEN
|
||
v_prs_perslid_email := SUBSTR (v_prs_perslid_email, 1, 200);
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Email persoon is te lang',
|
||
'Aanduiding wordt afgebroken tot ['
|
||
|| v_prs_perslid_email
|
||
|| ']');
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldige functie persoon';
|
||
v_prs_srtperslid_omschrijving :=
|
||
TRIM (v_prs_srtperslid_omschrijving);
|
||
|
||
IF LENGTH (v_prs_srtperslid_omschrijving) > 60
|
||
THEN
|
||
v_prs_srtperslid_omschrijving :=
|
||
SUBSTR (v_prs_srtperslid_omschrijving, 1, 60);
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Functie-aanduiding persoon is te lang',
|
||
'Aanduiding wordt afgebroken tot ['
|
||
|| v_prs_srtperslid_omschrijving
|
||
|| ']');
|
||
ELSE
|
||
IF (v_prs_srtperslid_omschrijving IS NULL)
|
||
THEN
|
||
v_ongeldig := 1;
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'E',
|
||
v_aanduiding || 'Functie persoon onbekend',
|
||
'Functie persoon moet worden opgegeven');
|
||
END IF;
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldige persoonnr.';
|
||
v_prs_perslid_nr := TRIM (v_prs_perslid_nr);
|
||
|
||
IF LENGTH (v_prs_perslid_nr) > 16
|
||
THEN
|
||
v_prs_perslid_nr := SUBSTR (v_prs_perslid_nr, 1, 16);
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Persoonnr. persoon is te lang',
|
||
'Aanduiding wordt afgebroken tot ['
|
||
|| v_prs_perslid_nr
|
||
|| ']');
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldige loginnaam';
|
||
v_prs_perslid_oslogin := TRIM (v_prs_perslid_oslogin);
|
||
|
||
IF LENGTH (v_prs_perslid_oslogin) > 30
|
||
THEN
|
||
v_prs_perslid_oslogin := SUBSTR (v_prs_perslid_oslogin, 1, 30);
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Loginnaam persoon is te lang',
|
||
'Aanduiding wordt afgebroken tot ['
|
||
|| v_prs_perslid_oslogin
|
||
|| ']');
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldig wachtwoord';
|
||
v_prs_perslid_wachtwoord := TRIM (v_prs_perslid_wachtwoord);
|
||
|
||
--
|
||
-- Insert geformatteerde import record
|
||
IF v_ongeldig = 0
|
||
THEN
|
||
v_errorhint := 'Toevoegen record';
|
||
v_errormsg :=
|
||
'Fout bij toevoegen te impoteren bedrijf/afdeling ['
|
||
|| v_prs_afdeling_naam
|
||
|| ']';
|
||
|
||
INSERT INTO fac_imp_perslid (alg_locatie_code,
|
||
alg_gebouw_code,
|
||
alg_verdieping_volgnr,
|
||
alg_ruimte_nr,
|
||
prs_werkplek_volgnr,
|
||
prs_werkplek_omschrijving,
|
||
prs_afdeling_naam,
|
||
prs_perslid_naam,
|
||
prs_perslid_tussenvoegsel,
|
||
prs_perslid_voornaam,
|
||
prs_perslid_voorletters,
|
||
prs_perslid_partner_naam,
|
||
prs_perslid_partner_tussenv,
|
||
prs_perslid_naamgebruik_code,
|
||
prs_perslid_geslacht,
|
||
prs_perslid_telefoonnr,
|
||
prs_perslid_mobiel,
|
||
prs_perslid_email,
|
||
prs_perslid_dienstverband,
|
||
prs_perslid_nr,
|
||
prs_srtperslid_omschrijving,
|
||
prs_perslid_oslogin,
|
||
prs_perslid_wachtwoord,
|
||
prs_perslid_titel,
|
||
prs_perslid_apikey,
|
||
prs_kenmerk1,
|
||
prs_kenmerk2,
|
||
prs_kenmerk3,
|
||
prs_kenmerk4,
|
||
prs_kenmerk5,
|
||
prs_kenmerk6,
|
||
prs_kenmerk7,
|
||
prs_kenmerk8,
|
||
prs_kenmerk9,
|
||
prs_kenmerk10,
|
||
prs_kenmerk11,
|
||
prs_kenmerk12,
|
||
prs_kenmerk13,
|
||
prs_kenmerk14,
|
||
prs_kenmerk15,
|
||
prs_kenmerk16,
|
||
prs_kenmerk17,
|
||
prs_kenmerk18,
|
||
prs_kenmerk19,
|
||
prs_kenmerk20,
|
||
fac_import_key,
|
||
fac_imp_file_index)
|
||
VALUES (v_alg_locatie_code,
|
||
v_alg_gebouw_code,
|
||
v_alg_verdieping_volgnr,
|
||
v_alg_ruimte_nr,
|
||
v_prs_werkplek_volgnr,
|
||
v_prs_werkplek_omschrijving,
|
||
v_prs_afdeling_naam,
|
||
v_prs_perslid_naam,
|
||
v_prs_perslid_tussenvoegsel,
|
||
v_prs_perslid_voornaam,
|
||
v_prs_perslid_voorletters,
|
||
v_prs_perslid_partner_naam,
|
||
v_prs_perslid_partner_tussenv,
|
||
COALESCE(fac.safe_to_number(v_prs_naamgebruik_code), 0),
|
||
v_prs_perslid_geslacht,
|
||
v_prs_perslid_telefoonnr,
|
||
v_prs_perslid_mobiel,
|
||
v_prs_perslid_email,
|
||
v_prs_perslid_dienstverband,
|
||
v_prs_perslid_nr,
|
||
v_prs_srtperslid_omschrijving,
|
||
v_prs_perslid_oslogin,
|
||
v_prs_perslid_wachtwoord,
|
||
v_prs_perslid_titel,
|
||
v_prs_perslid_apikey,
|
||
v_prs_kenmerk1,
|
||
v_prs_kenmerk2,
|
||
v_prs_kenmerk3,
|
||
v_prs_kenmerk4,
|
||
v_prs_kenmerk5,
|
||
v_prs_kenmerk6,
|
||
v_prs_kenmerk7,
|
||
v_prs_kenmerk8,
|
||
v_prs_kenmerk9,
|
||
v_prs_kenmerk10,
|
||
v_prs_kenmerk11,
|
||
v_prs_kenmerk12,
|
||
v_prs_kenmerk13,
|
||
v_prs_kenmerk14,
|
||
v_prs_kenmerk15,
|
||
v_prs_kenmerk16,
|
||
v_prs_kenmerk17,
|
||
v_prs_kenmerk18,
|
||
v_prs_kenmerk19,
|
||
v_prs_kenmerk20,
|
||
rec1.fac_import_key,
|
||
rec1.fac_imp_file_index);
|
||
|
||
v_count_import := v_count_import + 1;
|
||
END IF;
|
||
END IF;
|
||
END;
|
||
END LOOP;
|
||
|
||
IF v_header_is_valid = 0
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || 'Ongeldig importbestand',
|
||
'Geen geldige headerregel aanwezig');
|
||
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 := 'Error ' || oracle_err_num || '/' || oracle_err_mes;
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
END;
|
||
|
||
-- Procedure om generiek personen in te lezen of aan te passen.
|
||
-- p_sleutelkolom Bevat het veld die als sleutel bij de import dient.
|
||
-- NR - personeelsnummer
|
||
-- EMAIL - emailadres
|
||
-- LOGIN - logincode
|
||
-- APIKEY - API-key voor distributie van persoonsgegevens over FACILITORs
|
||
-- p_alg_type Werkplekken binnen dit niveau verwijderen
|
||
-- NULL - geen werkplekken verwijderen
|
||
-- A - altijd vaste werkplek verwijderen
|
||
-- R,V,G,L,D - werkplek(en) op dit niveau verwijderen
|
||
PROCEDURE update_perslid (p_import_key IN NUMBER,
|
||
p_sleutelkolom IN VARCHAR2,
|
||
p_alg_type IN VARCHAR2)
|
||
IS
|
||
c_fielddelimitor VARCHAR2 (1) := ';';
|
||
|
||
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_perslid_key NUMBER (10);
|
||
v_afdeling_key NUMBER (10);
|
||
v_srtperslid_key NUMBER (10);
|
||
v_prs_perslid_naam VARCHAR2(200);
|
||
v_prs_perslid_tussenvoegsel VARCHAR2(200);
|
||
|
||
v_locatie_key NUMBER (10);
|
||
v_gebouw_key NUMBER (10);
|
||
v_verdieping_key NUMBER (10);
|
||
v_ruimte_key NUMBER (10);
|
||
v_space VARCHAR2(1);
|
||
|
||
|
||
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)
|
||
AND prs_srtperslid_verwijder IS NULL)
|
||
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 := 'Zoek in verwijderde functies';
|
||
SELECT MAX(prs_srtperslid_key)
|
||
INTO v_srtperslid_key
|
||
FROM prs_srtperslid sp
|
||
WHERE UPPER (sp.prs_srtperslid_omschrijving) = UPPER (recSPersLid.prs_srtperslid_omschrijving);
|
||
|
||
IF v_srtperslid_key IS NULL
|
||
THEN
|
||
v_errorhint := 'Fout bij toevoegen functie';
|
||
|
||
INSERT INTO prs_srtperslid (prs_srtperslid_omschrijving)
|
||
VALUES (recSPersLid.prs_srtperslid_omschrijving);
|
||
ELSE
|
||
v_errorhint := 'Reanimeer functie';
|
||
UPDATE prs_srtperslid SET prs_srtperslid_verwijder = NULL WHERE prs_srtperslid_key = v_srtperslid_key;
|
||
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 :=
|
||
' (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 a.prs_afdeling_key
|
||
INTO v_afdeling_key
|
||
FROM prs_v_aanwezigafdeling_boom b, prs_afdeling a
|
||
WHERE UPPER (a.prs_afdeling_naam) = UPPER (recPersLid.prs_afdeling_naam)
|
||
AND a.prs_afdeling_verwijder IS NULL
|
||
AND a.prs_afdeling_key = b.prs_afdeling_key;
|
||
|
||
v_space := '';
|
||
-- kijk hoe we met partnernamen moeten omgaan:
|
||
IF recPersLid.prs_perslid_naamgebruik_code = 0
|
||
THEN
|
||
-- normaal gebruik van naam. Eigen naam wordt gebruikt
|
||
v_prs_perslid_naam := recPersLid.prs_perslid_naam;
|
||
v_prs_perslid_tussenvoegsel := recPersLid.prs_perslid_tussenvoegsel;
|
||
ELSIF recPersLid.prs_perslid_naamgebruik_code = 1
|
||
THEN
|
||
-- personen die de geboortenaam van de partner icm de eigen naam willen gebruiken
|
||
IF recPersLid.prs_perslid_tussenvoegsel IS NOT NULL
|
||
THEN
|
||
v_space := ' ';
|
||
END IF;
|
||
v_prs_perslid_naam := recPersLid.prs_perslid_partner_naam || ' - ' || recPersLid.prs_perslid_tussenvoegsel || v_space || recPersLid.prs_perslid_naam;
|
||
v_prs_perslid_tussenvoegsel := recPersLid.prs_perslid_partner_tussenv;
|
||
ELSIF recPersLid.prs_perslid_naamgebruik_code = 2
|
||
THEN
|
||
-- personen die de geboortenaam van de partner willen gebruiken
|
||
v_prs_perslid_naam := recPersLid.prs_perslid_partner_naam;
|
||
v_prs_perslid_tussenvoegsel := recPersLid.prs_perslid_partner_tussenv;
|
||
ELSIF recPersLid.prs_perslid_naamgebruik_code = 3
|
||
THEN
|
||
-- personen die de eigen naam icm de geboortenaam van de partner willen gebruiken
|
||
IF recPersLid.prs_perslid_partner_tussenv IS NOT NULL
|
||
THEN
|
||
v_space := ' ';
|
||
END IF;
|
||
v_prs_perslid_naam := recPersLid.prs_perslid_naam || ' - ' || recPersLid.prs_perslid_partner_tussenv || v_space || recPersLid.prs_perslid_partner_naam;
|
||
v_prs_perslid_tussenvoegsel := recPersLid.prs_perslid_tussenvoegsel;
|
||
END IF;
|
||
|
||
IF length(v_prs_perslid_naam) > 60
|
||
THEN
|
||
v_prs_perslid_naam := SUBSTR(v_prs_perslid_naam, 1,60);
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
recPersLid.prs_perslid_naam || '|' || recPersLid.prs_perslid_voornaam || '| ' || 'Samengestelde achternaam is te lang',
|
||
'Aanduiding wordt afgebroken tot ['
|
||
|| v_prs_perslid_naam
|
||
|| ']');
|
||
END IF;
|
||
|
||
-- p_sleutelkolom
|
||
-- NR = prs_perslid_nr
|
||
-- EMAIL = prs_perslid_email
|
||
-- LOGIN = prs_perslid_oslogin
|
||
-- APIKEY = prs_perslid_apikey
|
||
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)
|
||
OR UPPER (p_sleutelkolom) = 'APIKEY'
|
||
AND UPPER (prs_perslid_apikey) =
|
||
UPPER (recPersLid.prs_perslid_apikey)));
|
||
|
||
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_geslacht,
|
||
prs_perslid_titel,
|
||
prs_perslid_dienstverband,
|
||
prs_perslid_oslogin,
|
||
prs_perslid_apikey)
|
||
VALUES ('PRS',
|
||
v_srtperslid_key,
|
||
v_afdeling_key,
|
||
v_prs_perslid_naam,
|
||
recPersLid.prs_perslid_voorletters,
|
||
v_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_geslacht,
|
||
recPersLid.prs_perslid_titel,
|
||
recPersLid.prs_perslid_dienstverband,
|
||
recPersLid.prs_perslid_oslogin,
|
||
recPersLid.prs_perslid_apikey)
|
||
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 = v_prs_perslid_naam,
|
||
prs_perslid_voorletters =
|
||
recPersLid.prs_perslid_voorletters,
|
||
prs_perslid_tussenvoegsel =
|
||
v_prs_perslid_tussenvoegsel,
|
||
prs_perslid_voornaam = recPersLid.prs_perslid_voornaam,
|
||
prs_perslid_nr = recPersLid.prs_perslid_nr,
|
||
prs_perslid_dienstverband = recPersLid.prs_perslid_dienstverband,
|
||
prs_perslid_geslacht = recPersLid.prs_perslid_geslacht,
|
||
prs_perslid_titel = recPersLid.prs_perslid_titel,
|
||
prs_perslid_telefoonnr = recPersLid.prs_perslid_telefoonnr,
|
||
prs_perslid_mobiel = recPersLid.prs_perslid_mobiel,
|
||
prs_perslid_email = recPersLid.prs_perslid_email,
|
||
prs_perslid_oslogin = recPersLid.prs_perslid_oslogin,
|
||
prs_perslid_apikey = recPersLid.prs_perslid_apikey
|
||
WHERE prs_perslid_key = v_perslid_key;
|
||
|
||
IF recPersLid.prs_perslid_wachtwoord IS NOT NULL
|
||
THEN
|
||
prs.setpassword(v_perslid_key, recPersLid.prs_perslid_wachtwoord);
|
||
END IF;
|
||
END IF;
|
||
|
||
-- Voor CUST-postprocessing (van de kenmerken) is het handig te onthouden:
|
||
UPDATE fac_imp_perslid
|
||
SET prs_perslid_key = v_perslid_key
|
||
WHERE fac_import_key = recPersLid.fac_import_key
|
||
AND fac_imp_file_index = recPersLid.fac_imp_file_index;
|
||
|
||
COMMIT; -- persoon in ieder geval toegevoegd.
|
||
|
||
v_aanduiding :=
|
||
recPersLid.prs_perslid_nr
|
||
|| '|'
|
||
|| 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_locatie_key := NULL;
|
||
v_gebouw_key := NULL;
|
||
v_verdieping_key := NULL;
|
||
v_ruimte_key := NULL;
|
||
|
||
v_errorhint := 'Fout bij bepalen locatie';
|
||
SELECT MAX(alg_locatie_key)
|
||
INTO v_locatie_key
|
||
FROM alg_v_aanweziglocatie
|
||
WHERE UPPER (alg_locatie_code) = UPPER (recPersLid.alg_locatie_code);
|
||
|
||
v_errorhint := 'Fout bij bepalen gebouw';
|
||
SELECT MAX(alg_gebouw_key)
|
||
INTO v_gebouw_key
|
||
FROM alg_v_aanweziggebouw
|
||
WHERE UPPER (alg_gebouw_code) = UPPER (recPersLid.alg_gebouw_code)
|
||
AND alg_locatie_key = v_locatie_key;
|
||
|
||
v_errorhint := 'Fout bij bepalen verdieping';
|
||
SELECT MAX(alg_verdieping_key)
|
||
INTO v_verdieping_key
|
||
FROM alg_v_aanwezigverdieping
|
||
WHERE UPPER (alg_verdieping_volgnr) = UPPER (recPersLid.alg_verdieping_volgnr)
|
||
AND alg_gebouw_key = v_gebouw_key;
|
||
|
||
v_errorhint := 'Fout bij bepalen beoogde ruimte';
|
||
SELECT MAX(alg_ruimte_key)
|
||
INTO v_ruimte_key
|
||
FROM alg_v_aanwezigruimte r
|
||
WHERE r.alg_ruimte_upper_nr = UPPER (recPersLid.alg_ruimte_nr)
|
||
AND r.alg_verdieping_key = v_verdieping_key;
|
||
|
||
-- standaard ruimte moet door cust gedeelte van deFout bij bepalen beoogde ruimte import ingevuld worden.
|
||
|
||
-- als er een locatie ingevuld is willen we ook een ruimte vinden.
|
||
IF v_ruimte_key IS NULL AND recPersLid.alg_locatie_code IS NOT NULL
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || ' Ruimte kan niet gevonden worden',
|
||
'Controleer locatie,gebouw en verdieping');
|
||
END IF;
|
||
|
||
-- fouten bij het bepalen van de werkplek worden als waarschuwing weergegeven.
|
||
BEGIN
|
||
v_errorhint := 'Fout bij het aanpassen van de werkplek';
|
||
PRS.movetoruimte (v_perslid_key, v_ruimte_key, p_alg_type);
|
||
EXCEPTION WHEN OTHERS
|
||
THEN
|
||
v_wpcount_error := v_wpcount_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, 'W', v_aanduiding || v_errormsg, v_errorhint);
|
||
END;
|
||
|
||
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 update_perslid;
|
||
|
||
|
||
PROCEDURE delete_perslid (p_import_key IN NUMBER,
|
||
p_perslid_key IN NUMBER)
|
||
IS
|
||
v_errormsg VARCHAR2 (1000);
|
||
v_errorhint VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
|
||
v_count 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
|
||
THEN
|
||
-- Persoon heeft geen enkele (actuele of historische) verplichting
|
||
v_errorhint :=
|
||
'Verwijderen van persoon met key ' || TO_CHAR (p_perslid_key);
|
||
|
||
-- Referenties in tabellen naar deze pers_perslid_key moeten eerst verwijderd worden.
|
||
-- Door cascade verwijderen van deze record onstaan audits op die tabellen die audit tracking hebben.
|
||
-- Daardoor onstaan "ORxA-04091:table VLKC.FAC_AUDIT is mutating, trigger/function may not see it" foutmeldingen
|
||
-- op de delete van de prs_perslid_key uit de prs_perslid tabel.
|
||
-- De tabellen prs_kostenplaats, prs_kostenplaatsgrp, prs_perslidkostenplaats en fac_gebruikersgroep hebben een prs_perslid_key referentie en audit tracking.
|
||
DELETE FROM prs_kostenplaats
|
||
WHERE prs_perslid_key = p_perslid_key;
|
||
DELETE FROM prs_kostenplaatsgrp
|
||
WHERE prs_perslid_key = p_perslid_key;
|
||
DELETE FROM prs_perslidkostenplaats
|
||
WHERE prs_perslid_key = p_perslid_key;
|
||
DELETE FROM fac_gebruikersgroep
|
||
WHERE prs_perslid_key = p_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 = 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 delete_perslid;
|
||
|
||
FUNCTION combinatievalidatie (p_kp_key IN NUMBER, p_ksrt_key IN NUMBER, p_disc_key IN NUMBER)
|
||
RETURN BOOLEAN
|
||
AS
|
||
l_dummy prs_kostencombinatie.prs_kostencombinatie_key%TYPE;
|
||
l_kp_key prs_kostenplaats.prs_kostenplaats_key%TYPE;
|
||
l_ksrt_key prs_kostensoort.prs_kostensoort_key%TYPE;
|
||
l_disc_key mld_stdmelding.mld_ins_discipline_key%TYPE;
|
||
l_combination_OK BOOLEAN DEFAULT FALSE; -- Start de afvalrace met FALSE.
|
||
l_kpgrp_key prs_kostenplaatsgrp.prs_kostenplaatsgrp_key%TYPE DEFAULT -1;
|
||
BEGIN
|
||
l_kp_key := p_kp_key;
|
||
l_ksrt_key := p_ksrt_key;
|
||
l_disc_key := p_disc_key;
|
||
|
||
-- Als de kostensoort niet werd meegegeven dan deze proberen zelf te bepalen.
|
||
IF l_ksrt_key IS NULL AND l_disc_key IS NOT NULL
|
||
THEN
|
||
SELECT prs_kostensoort_key
|
||
INTO l_ksrt_key
|
||
FROM ins_tab_discipline
|
||
WHERE ins_discipline_key = l_disc_key;
|
||
END IF;
|
||
|
||
-- Start de afvalrace.
|
||
IF l_kp_key IS NULL OR l_ksrt_key IS NULL
|
||
THEN
|
||
l_combination_OK := TRUE;
|
||
END IF;
|
||
|
||
IF NOT l_combination_OK
|
||
THEN
|
||
BEGIN
|
||
SELECT prs_kostenplaatsgrp_key
|
||
INTO l_kpgrp_key
|
||
FROM prs_kostenplaats
|
||
WHERE prs_kostenplaats_key = l_kp_key;
|
||
-- het is goed als er geen groep gedefinieerd is
|
||
l_combination_OK := l_kpgrp_key IS NULL;
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
NULL;
|
||
END;
|
||
END IF;
|
||
|
||
IF NOT l_combination_OK
|
||
THEN
|
||
BEGIN
|
||
-- Geldt er uberhaupt een restrictie op deze kostensoort?
|
||
SELECT DISTINCT 1
|
||
INTO l_dummy
|
||
FROM prs_kostencombinatie kc
|
||
WHERE kc.prs_kostensoort_key = l_ksrt_key;
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
l_combination_OK := TRUE;
|
||
END;
|
||
END IF;
|
||
|
||
IF NOT l_combination_OK
|
||
THEN
|
||
BEGIN
|
||
SELECT prs_kostencombinatie_key
|
||
INTO l_dummy
|
||
FROM prs_kostencombinatie kc
|
||
WHERE kc.prs_kostenplaatsgrp_key = l_kpgrp_key
|
||
AND kc.prs_kostensoort_key = l_ksrt_key;
|
||
-- Er is een geldige combinatie gevonden.
|
||
l_combination_OK := TRUE;
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
NULL;
|
||
END;
|
||
END IF;
|
||
|
||
RETURN l_combination_OK;
|
||
END;
|
||
|
||
END prs;
|
||
/
|
||
|
||
REGISTERRUN('$Id$')
|
||
#endif // PRS
|