Files
Database/PRS/PRS_PAC.SRC
Erik Groener 8f24a2aacc BLST#77421 Lengte veld telefoonnummer in bezoekafspraak
svn path=/Database/trunk/; revision=60363
2023-05-10 11:51:31 +00:00

2770 lines
126 KiB
Plaintext
Raw Blame History

#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, p_import_kenmerk IN NUMBER DEFAULT 0);
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;
lkpgfinlimit1 prs_kostenplaatsgrp.prs_kostenplaatsgrp_fin_limit1%TYPE;
lkpgfinlimit2 prs_kostenplaatsgrp.prs_kostenplaatsgrp_fin_limit2%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),
COALESCE(kg.prs_kostenplaatsgrp_fin_limit1, fac.safe_To_Number(fac.getsetting ('mld_opdr_kpg_fin_limit1'))),
COALESCE(kg.prs_kostenplaatsgrp_fin_limit2, fac.safe_To_Number(fac.getsetting ('mld_opdr_kpg_fin_limit2')))
INTO lkpgverantwkey1,
lkpgverantwkey2,
lkpgverantwkey3,
lkpgfinlimit1,
lkpgfinlimit2
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 < lkpgfinlimit1;
WHEN lteller = 2
THEN
lkpgverantwkey := lkpgverantwkey2;
llastfiat := lgrens < lkpgfinlimit2;
WHEN lteller = 3
THEN
lkpgverantwkey := lkpgverantwkey3;
llastfiat := lgrens >= lkpgfinlimit2 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, 0))
WHEN mld_opdr_fiatbedrag >= COALESCE(kpg.prs_kostenplaatsgrp_fin_limit2, fac.safe_To_Number(fac.getsetting ('mld_opdr_kpg_fin_limit2')))
THEN
COALESCE(prs_kostenplaatsgrp_fiat3_key, -1)
WHEN mld_opdr_fiatbedrag >= COALESCE(kpg.prs_kostenplaatsgrp_fin_limit1, fac.safe_To_Number(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 >= COALESCE(kpg.prs_kostenplaatsgrp_fin_limit2, fac.safe_To_Number(fac.getsetting ('mld_opdr_kpg_fin_limit2')))
THEN
COALESCE(prs_kostenplaatsgrp_fiat3_key, -1)
WHEN bes_bestelling_fiatbedrag >= COALESCE(kpg.prs_kostenplaatsgrp_fin_limit1, fac.safe_To_Number(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 prs_kenmerk.prs_kenmerk_niveau%TYPE;
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 COALESCE(MIN (ll), 1) eerstvrije
INTO v_wp_volgnr
FROM ( SELECT prs_werkplek_volgnr +1 AS ll
FROM prs_werkplek
WHERE prs_alg_ruimte_key = p_ruimte_key
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 (2);
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_prs_kenmerk_key1 VARCHAR2 (255);
v_prs_kenmerk_key2 VARCHAR2 (255);
v_prs_kenmerk_key3 VARCHAR2 (255);
v_prs_kenmerk_key4 VARCHAR2 (255);
v_prs_kenmerk_key5 VARCHAR2 (255);
v_prs_kenmerk_key6 VARCHAR2 (255);
v_prs_kenmerk_key7 VARCHAR2 (255);
v_prs_kenmerk_key8 VARCHAR2 (255);
v_prs_kenmerk_key9 VARCHAR2 (255);
v_prs_kenmerk_key10 VARCHAR2 (255);
v_prs_kenmerk_key11 VARCHAR2 (255);
v_prs_kenmerk_key12 VARCHAR2 (255);
v_prs_kenmerk_key13 VARCHAR2 (255);
v_prs_kenmerk_key14 VARCHAR2 (255);
v_prs_kenmerk_key15 VARCHAR2 (255);
v_prs_kenmerk_key16 VARCHAR2 (255);
v_prs_kenmerk_key17 VARCHAR2 (255);
v_prs_kenmerk_key18 VARCHAR2 (255);
v_prs_kenmerk_key19 VARCHAR2 (255);
v_prs_kenmerk_key20 VARCHAR2 (255);
v_alg_verdieping_volgnr_num NUMBER;
v_prs_werkplek_volgnr_num NUMBER;
v_prs_perslid_dienstv_num NUMBER;
v_seq_of_columns VARCHAR2 (200);
v_lim_header VARCHAR2(4000);
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;
FUNCTION bepaal_kenmerk_key (kw IN VARCHAR)
RETURN NUMBER
IS
v_kenmerk_key NUMBER;
BEGIN
IF fac.safe_to_number (kw) IS NULL
THEN -- kenmerkwaarde is alfanumeriek (dus omschrijving)!
SELECT prs_kenmerk_key
INTO v_kenmerk_key
FROM prs_kenmerk
WHERE prs_kenmerk_upper = UPPER (kw)
AND prs_kenmerk_verwijder IS NULL
AND prs_kenmerk_niveau = 'P'
AND prs_kenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B', 'V');
ELSE -- kenmerkwaarde is numeriek (dus key)!
SELECT prs_kenmerk_key
INTO v_kenmerk_key
FROM prs_kenmerk
WHERE prs_kenmerk_key = fac.safe_to_number (kw)
AND prs_kenmerk_verwijder IS NULL
AND prs_kenmerk_niveau = 'P'
AND prs_kenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B', 'V');
END IF;
RETURN v_kenmerk_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
IF kw IS NULL OR UPPER (kw) LIKE 'KENMERK%'
THEN
RETURN NULL;
ELSE
fac.imp_writelog (p_import_key,
'W',
'Fout bij bepalen kenmerk [' || kw || ']',
'Bestaat niet of type ongeldig');
COMMIT;
RETURN NULL;
END IF;
END;
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
-- NB: In fac_import_perslid worden v_seq_of_columns en p_header gezet!
DELETE FROM fac_imp_perslid;
SELECT COALESCE (MAX (fac_imp_file_index), 0) + 1
INTO v_count
FROM fac_imp_factuur;
-- Init
v_fielddelimitor := fac.import_delimiter(p_import_key);
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 van de te importeren kolommen in de CSV uitlezen uit v_seq_of_columns
-- De field delimiter is hier altijd ";"
fac.imp_getfield (v_seq_of_columns,
';',
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
v_lim_header := REPLACE(p_header, ';', v_fielddelimitor);
IF UPPER(v_newline) LIKE UPPER(v_lim_header)
THEN
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 27, v_prs_kenmerk1);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 28, v_prs_kenmerk2);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 29, v_prs_kenmerk3);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 30, v_prs_kenmerk4);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 31, v_prs_kenmerk5);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 32, v_prs_kenmerk6);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 33, v_prs_kenmerk7);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 34, v_prs_kenmerk8);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 35, v_prs_kenmerk9);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 36, v_prs_kenmerk10);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 37, v_prs_kenmerk11);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 38, v_prs_kenmerk12);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 39, v_prs_kenmerk13);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 40, v_prs_kenmerk14);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 41, v_prs_kenmerk15);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 42, v_prs_kenmerk16);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 43, v_prs_kenmerk17);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 44, v_prs_kenmerk18);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 45, v_prs_kenmerk19);
fac.imp_getfield_nr(v_newline, v_fielddelimitor, 46, v_prs_kenmerk20);
v_prs_kenmerk_key1 := bepaal_kenmerk_key (v_prs_kenmerk1);
v_prs_kenmerk_key2 := bepaal_kenmerk_key (v_prs_kenmerk2);
v_prs_kenmerk_key3 := bepaal_kenmerk_key (v_prs_kenmerk3);
v_prs_kenmerk_key4 := bepaal_kenmerk_key (v_prs_kenmerk4);
v_prs_kenmerk_key5 := bepaal_kenmerk_key (v_prs_kenmerk5);
v_prs_kenmerk_key6 := bepaal_kenmerk_key (v_prs_kenmerk6);
v_prs_kenmerk_key7 := bepaal_kenmerk_key (v_prs_kenmerk7);
v_prs_kenmerk_key8 := bepaal_kenmerk_key (v_prs_kenmerk8);
v_prs_kenmerk_key9 := bepaal_kenmerk_key (v_prs_kenmerk9);
v_prs_kenmerk_key10 := bepaal_kenmerk_key (v_prs_kenmerk10);
v_prs_kenmerk_key11 := bepaal_kenmerk_key (v_prs_kenmerk11);
v_prs_kenmerk_key12 := bepaal_kenmerk_key (v_prs_kenmerk12);
v_prs_kenmerk_key13 := bepaal_kenmerk_key (v_prs_kenmerk13);
v_prs_kenmerk_key14 := bepaal_kenmerk_key (v_prs_kenmerk14);
v_prs_kenmerk_key15 := bepaal_kenmerk_key (v_prs_kenmerk15);
v_prs_kenmerk_key16 := bepaal_kenmerk_key (v_prs_kenmerk16);
v_prs_kenmerk_key17 := bepaal_kenmerk_key (v_prs_kenmerk17);
v_prs_kenmerk_key18 := bepaal_kenmerk_key (v_prs_kenmerk18);
v_prs_kenmerk_key19 := bepaal_kenmerk_key (v_prs_kenmerk19);
v_prs_kenmerk_key20 := bepaal_kenmerk_key (v_prs_kenmerk20);
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) > 20
THEN
v_prs_perslid_telefoonnr :=
SUBSTR (v_prs_perslid_telefoonnr, 1, 20);
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) > 20
THEN
v_prs_perslid_mobiel := SUBSTR (v_prs_perslid_mobiel, 1, 20);
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,
DECODE(v_prs_kenmerk_key1, NULL, v_prs_kenmerk1, TO_CHAR(v_prs_kenmerk_key1) || '=' || SUBSTR(v_prs_kenmerk1, 1, 200)),
DECODE(v_prs_kenmerk_key2, NULL, v_prs_kenmerk2, TO_CHAR(v_prs_kenmerk_key2) || '=' || SUBSTR(v_prs_kenmerk2, 1, 200)),
DECODE(v_prs_kenmerk_key3, NULL, v_prs_kenmerk3, TO_CHAR(v_prs_kenmerk_key3) || '=' || SUBSTR(v_prs_kenmerk3, 1, 200)),
DECODE(v_prs_kenmerk_key4, NULL, v_prs_kenmerk4, TO_CHAR(v_prs_kenmerk_key4) || '=' || SUBSTR(v_prs_kenmerk4, 1, 200)),
DECODE(v_prs_kenmerk_key5, NULL, v_prs_kenmerk5, TO_CHAR(v_prs_kenmerk_key5) || '=' || SUBSTR(v_prs_kenmerk5, 1, 200)),
DECODE(v_prs_kenmerk_key6, NULL, v_prs_kenmerk6, TO_CHAR(v_prs_kenmerk_key6) || '=' || SUBSTR(v_prs_kenmerk6, 1, 200)),
DECODE(v_prs_kenmerk_key7, NULL, v_prs_kenmerk7, TO_CHAR(v_prs_kenmerk_key7) || '=' || SUBSTR(v_prs_kenmerk7, 1, 200)),
DECODE(v_prs_kenmerk_key8, NULL, v_prs_kenmerk8, TO_CHAR(v_prs_kenmerk_key8) || '=' || SUBSTR(v_prs_kenmerk8, 1, 200)),
DECODE(v_prs_kenmerk_key9, NULL, v_prs_kenmerk9, TO_CHAR(v_prs_kenmerk_key9) || '=' || SUBSTR(v_prs_kenmerk9, 1, 200)),
DECODE(v_prs_kenmerk_key10, NULL, v_prs_kenmerk10, TO_CHAR(v_prs_kenmerk_key10) || '=' || SUBSTR(v_prs_kenmerk10, 1, 200)),
DECODE(v_prs_kenmerk_key11, NULL, v_prs_kenmerk11, TO_CHAR(v_prs_kenmerk_key11) || '=' || SUBSTR(v_prs_kenmerk11, 1, 200)),
DECODE(v_prs_kenmerk_key12, NULL, v_prs_kenmerk12, TO_CHAR(v_prs_kenmerk_key12) || '=' || SUBSTR(v_prs_kenmerk12, 1, 200)),
DECODE(v_prs_kenmerk_key13, NULL, v_prs_kenmerk13, TO_CHAR(v_prs_kenmerk_key13) || '=' || SUBSTR(v_prs_kenmerk13, 1, 200)),
DECODE(v_prs_kenmerk_key14, NULL, v_prs_kenmerk14, TO_CHAR(v_prs_kenmerk_key14) || '=' || SUBSTR(v_prs_kenmerk14, 1, 200)),
DECODE(v_prs_kenmerk_key15, NULL, v_prs_kenmerk15, TO_CHAR(v_prs_kenmerk_key15) || '=' || SUBSTR(v_prs_kenmerk15, 1, 200)),
DECODE(v_prs_kenmerk_key16, NULL, v_prs_kenmerk16, TO_CHAR(v_prs_kenmerk_key16) || '=' || SUBSTR(v_prs_kenmerk16, 1, 200)),
DECODE(v_prs_kenmerk_key17, NULL, v_prs_kenmerk17, TO_CHAR(v_prs_kenmerk_key17) || '=' || SUBSTR(v_prs_kenmerk17, 1, 200)),
DECODE(v_prs_kenmerk_key18, NULL, v_prs_kenmerk18, TO_CHAR(v_prs_kenmerk_key18) || '=' || SUBSTR(v_prs_kenmerk18, 1, 200)),
DECODE(v_prs_kenmerk_key19, NULL, v_prs_kenmerk19, TO_CHAR(v_prs_kenmerk_key19) || '=' || SUBSTR(v_prs_kenmerk19, 1, 200)),
DECODE(v_prs_kenmerk_key20, NULL, v_prs_kenmerk20, TO_CHAR(v_prs_kenmerk_key20) || '=' || SUBSTR(v_prs_kenmerk20, 1, 200)),
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,
p_import_kenmerk IN NUMBER DEFAULT 0)
IS
c_fielddelimitor VARCHAR2 (2) := fac.import_delimiter(p_import_key);
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;
-- SUBPROC
PROCEDURE upsertkenmerk_imp(p_perslid_key IN NUMBER,
p_kenmerkwaarde IN VARCHAR2)
AS
ccount NUMBER;
v_sql VARCHAR2(1000);
v_cursor INTEGER;
v_rowsprocessed NUMBER DEFAULT 0;
v_waarde prs_kenmerklink.prs_kenmerklink_waarde%TYPE;
v_kenmerk_key prs_kenmerk.prs_kenmerk_key%TYPE;
v_kenmerk_type prs_kenmerk.prs_kenmerk_kenmerktype%TYPE;
v_kenmerk_niveau prs_kenmerk.prs_kenmerk_niveau%TYPE;
v_kenmerk_waarde prs_kenmerklink.prs_kenmerklink_waarde%TYPE;
v_objectnaam fac_kenmerkdomein.fac_kenmerkdomein_objectnaam%TYPE;
v_kolomnaam fac_kenmerkdomein.fac_kenmerkdomein_kolomnaam%TYPE;
v_kolomtxt fac_kenmerkdomein.fac_kenmerkdomein_kolomtxt%TYPE;
v_kenmerklink_key prs_kenmerklink.prs_kenmerklink_key%TYPE;
BEGIN
v_kenmerk_key := fac.safe_to_number(SUBSTR (p_kenmerkwaarde, 1, INSTR (p_kenmerkwaarde, '=') - 1));
v_kenmerk_waarde := SUBSTR (p_kenmerkwaarde, INSTR (p_kenmerkwaarde, '=') + 1);
IF v_kenmerk_key IS NOT NULL AND v_kenmerk_waarde IS NOT NULL
THEN
v_errormsg := 'Fout bij bepalen kenmerk [' || v_kenmerk_key || ']';
SELECT prs_kenmerk_niveau
, prs_kenmerk_kenmerktype
INTO v_kenmerk_niveau
, v_kenmerk_type
FROM prs_kenmerk
WHERE prs_kenmerk_key = v_kenmerk_key
AND prs_kenmerk_verwijder IS NULL;
IF p_kenmerkwaarde IS NOT NULL
THEN
IF v_kenmerk_type IN ('R', 'S')
THEN
v_errormsg := 'Fout bij bepalen eigen tabel';
SELECT COUNT (*)
INTO ccount
FROM prs_kenmerk k,
fac_kenmerkdomein d
WHERE k.prs_kenmerk_key = v_kenmerk_key
AND k.prs_kenmerk_niveau = v_kenmerk_niveau
AND k.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key IS NOT NULL;
v_errormsg := 'Fout bij bepalen nieuwe waarde [' || p_kenmerkwaarde || ']';
IF ccount = 1
THEN -- Eigen tabel
SELECT TO_CHAR(ud.fac_usrdata_key)
INTO v_waarde
FROM prs_kenmerk k,
fac_kenmerkdomein d,
fac_v_aanwezigusrdata ud
WHERE k.prs_kenmerk_key = v_kenmerk_key
AND k.prs_kenmerk_niveau = v_kenmerk_niveau
AND k.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key = ud.fac_usrtab_key
AND UPPER(TRIM(ud.fac_usrdata_omschr)) = UPPER(v_kenmerk_waarde);
ELSE -- FACILITOR view/tabel
SELECT d.fac_kenmerkdomein_objectnaam,
d.fac_kenmerkdomein_kolomnaam,
d.fac_kenmerkdomein_kolomtxt
INTO v_objectnaam,
v_kolomnaam,
v_kolomtxt
FROM prs_kenmerk k,
fac_kenmerkdomein d
WHERE k.prs_kenmerk_key = v_kenmerk_key
AND k.prs_kenmerk_niveau = v_kenmerk_niveau
AND k.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key IS NULL;
v_sql := 'SELECT MAX(' || v_kolomnaam || ')'
|| ' FROM ' || v_objectnaam
|| ' WHERE UPPER(TRIM(' || v_kolomtxt || ')) = UPPER(:pwaarde)';
v_cursor := DBMS_SQL.open_cursor;
DBMS_SQL.parse (v_cursor, v_sql, DBMS_SQL.native);
DBMS_SQL.BIND_VARIABLE(v_cursor, ':pwaarde', v_kenmerk_waarde);
DBMS_SQL.define_column(v_cursor, 1, v_waarde, 255);
v_rowsprocessed := DBMS_SQL.execute_and_fetch (v_cursor);
DBMS_SQL.column_value (v_cursor, 1, v_waarde);
DBMS_SQL.close_cursor(v_cursor);
END IF;
ELSE -- C(Karakter)/D(Datum)/N(Numeriek)/X(Bestandsnaam)
v_waarde := v_kenmerk_waarde;
END IF;
v_errormsg := 'Fout bij bepalen huidige waarde';
SELECT COUNT(*),
MAX(prs_kenmerklink_key)
INTO ccount,
v_kenmerklink_key
FROM prs_v_aanwezigkenmerklink
WHERE prs_link_key = p_perslid_key
AND prs_kenmerk_key = v_kenmerk_key
and prs_kenmerklink_niveau = v_kenmerk_niveau;
IF v_kenmerk_type = 'N' -- Alleen voor numerieke waarden de decimale komma vervangen door punt.
THEN
v_waarde := REPLACE (v_waarde, ',', '.');
END IF;
IF ccount = 0
THEN
v_errormsg := 'Fout bij toevoegen waarde [' || v_waarde || ']'
|| ' voor perslid_key=' || TO_CHAR(p_perslid_key)
|| ', kenmerk_key=' || TO_CHAR(v_kenmerk_key)
|| ', link_niveau=' || v_kenmerk_niveau;
INSERT INTO prs_kenmerklink (prs_link_key,
prs_kenmerk_key,
prs_kenmerklink_niveau,
prs_kenmerklink_waarde)
VALUES (p_perslid_key,
v_kenmerk_key,
v_kenmerk_niveau,
v_waarde);
ELSE
v_errormsg := 'Fout bij bijwerken waarde [' || v_waarde || ']'
|| ' voor kenmerklink_key=' || TO_CHAR(v_kenmerklink_key);
UPDATE prs_kenmerklink
SET prs_kenmerklink_waarde = v_waarde
WHERE prs_kenmerklink_key = v_kenmerklink_key;
END IF;
ELSE
-- Verwijder kenmerken die al bestaan maar met de nieuwe import leeg zijn.
DELETE prs_kenmerklink
WHERE prs_kenmerk_key = v_kenmerk_key
AND prs_link_key = p_perslid_key;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR(SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'upsertkenmerk_imp');
END; -- upsertkenmerk_imp
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.
IF (p_import_kenmerk = 1)
THEN
upsertkenmerk_imp(v_perslid_key, recPersLid.prs_kenmerk1);
upsertkenmerk_imp(v_perslid_key, recPersLid.prs_kenmerk2);
upsertkenmerk_imp(v_perslid_key, recPersLid.prs_kenmerk3);
upsertkenmerk_imp(v_perslid_key, recPersLid.prs_kenmerk4);
upsertkenmerk_imp(v_perslid_key, recPersLid.prs_kenmerk5);
upsertkenmerk_imp(v_perslid_key, recPersLid.prs_kenmerk6);
upsertkenmerk_imp(v_perslid_key, recPersLid.prs_kenmerk7);
upsertkenmerk_imp(v_perslid_key, recPersLid.prs_kenmerk8);
upsertkenmerk_imp(v_perslid_key, recPersLid.prs_kenmerk9);
upsertkenmerk_imp(v_perslid_key, recPersLid.prs_kenmerk10);
upsertkenmerk_imp(v_perslid_key, recPersLid.prs_kenmerk11);
upsertkenmerk_imp(v_perslid_key, recPersLid.prs_kenmerk12);
upsertkenmerk_imp(v_perslid_key, recPersLid.prs_kenmerk13);
upsertkenmerk_imp(v_perslid_key, recPersLid.prs_kenmerk14);
upsertkenmerk_imp(v_perslid_key, recPersLid.prs_kenmerk15);
upsertkenmerk_imp(v_perslid_key, recPersLid.prs_kenmerk16);
upsertkenmerk_imp(v_perslid_key, recPersLid.prs_kenmerk17);
upsertkenmerk_imp(v_perslid_key, recPersLid.prs_kenmerk18);
upsertkenmerk_imp(v_perslid_key, recPersLid.prs_kenmerk19);
upsertkenmerk_imp(v_perslid_key, recPersLid.prs_kenmerk20);
END IF;
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