Files
Customer/HMOD/hmod.sql
Jos Migo 424f20efaf HMOD#58494 -- Implementatie Humanitas Onder Dak - cust sql import prs
svn path=/Customer/trunk/; revision=45633
2020-01-30 14:53:50 +00:00

3240 lines
140 KiB
SQL

--
-- $Id$
--
-- Script containing customer specific db-configuration for SVRZ.
DEFINE thisfile = 'HMOD.SQL'
DEFINE dbuser = '^HMOD'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
WHENEVER SQLERROR EXIT;
SELECT adm.scriptspoolfile('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL;
WHENEVER SQLERROR CONTINUE;
SPOOL &fcltlogfile
SET DEFINE OFF
------ payload begin ------
CREATE OR REPLACE PROCEDURE hmod_import_koffer (p_import_key IN NUMBER)
AS
c_fielddelimitor VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count NUMBER;
v_ongeldig NUMBER (1);
v_mode NUMBER (1);
v_aanduiding VARCHAR2 (200);
-- v_all_null BOOLEAN;
v_count_error NUMBER (10);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
-- De importvelden:
v_versiedatum VARCHAR2 (15);
v_omschrijving VARCHAR2 (250);
v_code VARCHAR2 (30);
v_token VARCHAR2 (20);
v_mob VARCHAR2 (20);
v_hit VARCHAR2 (20);
v_lap_en_sim VARCHAR2 (20);
v_lapt VARCHAR2 (20);
v_tnc VARCHAR2 (20);
v_tnc_omschrijving VARCHAR2 (100);
v_facilitor VARCHAR2 (20);
v_adp VARCHAR2 (20);
v_absentiemanager VARCHAR2 (20);
v_regas VARCHAR2 (20);
v_checks VARCHAR2 (20);
v_accountview VARCHAR2 (20);
v_elvy VARCHAR2 (20);
v_hodnet VARCHAR2 (20);
v_proactive VARCHAR2 (20);
v_opmerking VARCHAR2 (1000);
v_volgnr NUMBER (10);
v_lettercode VARCHAR2 (30);
CURSOR c
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Vorige inlees eerst verwijderen
---- Voor hmod_koffersysteem geldt dat je inlezen op dezelfde dag mag/kunt overschrijven. Voorgaande versiedatums blijven staan.
DELETE FROM hmod_imp_koffersysteem
WHERE versiedatum = TO_CHAR(TRUNC (SYSDATE),'DD-MM-YYYY');
COMMIT;
header_is_valid := 0;
v_ongeldig := 0;
v_count_error := 0;
header_is_valid := 0;
v_count_tot := 0;
v_count_import := 0;
FOR rec IN c
LOOP
BEGIN
v_newline := rec.fac_imp_file_line;
v_errormsg := 'Fout opvragen te importeren rij';
v_aanduiding := '';
-- Lees alle veldwaarden: omschrijving;code;token;mob;hit;lap_en_sim;lapt;tnc;tnc omschrijving;facilitor;adp;absentiemanager;regas;checks;accountview;elvy;hodnet;proactive;opmerking
v_errormsg := 'Fout opvragen te importeren kolom/rij 1';
fac.imp_getfield (v_newline, c_fielddelimitor, v_omschrijving);
v_errormsg := 'Fout opvragen te importeren kolom/rij 2';
fac.imp_getfield (v_newline, c_fielddelimitor, v_code);
fac.imp_getfield (v_newline, c_fielddelimitor, v_lettercode);
fac.imp_getfield (v_newline, c_fielddelimitor, v_token);
fac.imp_getfield (v_newline, c_fielddelimitor, v_mob);
fac.imp_getfield (v_newline, c_fielddelimitor, v_hit);
fac.imp_getfield (v_newline, c_fielddelimitor, v_lap_en_sim);
fac.imp_getfield (v_newline, c_fielddelimitor, v_lapt);
fac.imp_getfield (v_newline, c_fielddelimitor, v_tnc);
fac.imp_getfield (v_newline, c_fielddelimitor, v_tnc_omschrijving);
fac.imp_getfield (v_newline, c_fielddelimitor, v_facilitor);
fac.imp_getfield (v_newline, c_fielddelimitor, v_adp);
fac.imp_getfield (v_newline, c_fielddelimitor, v_absentiemanager);
fac.imp_getfield (v_newline, c_fielddelimitor, v_regas);
fac.imp_getfield (v_newline, c_fielddelimitor, v_checks);
fac.imp_getfield (v_newline, c_fielddelimitor, v_accountview);
fac.imp_getfield (v_newline, c_fielddelimitor, v_elvy);
fac.imp_getfield (v_newline, c_fielddelimitor, v_hodnet);
fac.imp_getfield (v_newline, c_fielddelimitor, v_proactive);
fac.imp_getfield (v_newline, c_fielddelimitor, v_opmerking);
v_aanduiding :=
v_versiedatum || '|' || v_omschrijving || '|' || v_code;
v_count_tot := v_count_tot + 1;
-- Skip until the header is found
IF header_is_valid = 0
THEN
IF v_omschrijving = 'omschrijving'
AND v_code = 'code'
AND v_lettercode = 'lettercode'
AND v_token = 'token'
AND v_mob = 'mob'
AND v_hit = 'hit'
AND v_lap_en_sim = 'lap_en_sim'
AND v_lapt = 'lapt'
AND v_tnc = 'tnc'
AND v_tnc_omschrijving = 'tnc omschrijving'
AND v_facilitor = 'facilitor'
AND v_adp = 'adp'
AND v_absentiemanager = 'absentiemanager'
AND v_regas = 'regas'
AND v_checks = 'checks'
AND v_accountview = 'accountview'
AND v_elvy = 'elvy'
AND v_hodnet = 'hodnet'
AND v_proactive = 'proactive'
AND v_opmerking = 'opmerking'
THEN
header_is_valid := 1;
END IF;
ELSE -- Header OK. Vanaf hier in de LOOP eventueel variabele vullen.
BEGIN
v_errormsg := 'Versiedatum wordt sysdatum ';
SELECT TO_CHAR (TRUNC (SYSDATE), 'DD-MM-YYYY')
INTO v_versiedatum
FROM DUAL;
-- volgnr vullen - dit numerieke veld gebruiken we voor kenmerkdomein-key..
---- dit zou ik ook kunnen vullen buiten de LOOP, toch?
SELECT COALESCE (MAX (volgnr), 0)
INTO v_volgnr
FROM hmod_imp_koffersysteem;
v_volgnr := v_volgnr + 1 ;
END;
INSERT INTO hmod_imp_koffersysteem (versiedatum,
omschrijving,
code,
lettercode,
token,
mob,
hit,
lap_en_sim,
lapt,
tnc,
tnc_omschrijving,
facilitor,
adp,
absentiemanager,
regas,
checks,
accountview,
elvy,
hodnet,
proactive,
volgnr,
opmerking)
VALUES (v_versiedatum,
v_omschrijving,
v_code,
v_lettercode,
v_token,
v_mob,
v_hit,
v_lap_en_sim,
v_lapt,
v_tnc,
v_tnc_omschrijving,
v_facilitor,
v_adp,
v_absentiemanager,
v_regas,
v_checks,
v_accountview,
v_elvy,
v_hodnet,
v_proactive,
v_volgnr,
v_opmerking);
END IF;
END;
END LOOP;
IF header_is_valid = 0
THEN
fac.imp_writelog (p_import_key,
'E',
'Ongeldig importbestand',
'Geen header of header niet volgens specificatie!');
ELSE
-- Afsluiting: Rollback/Delete tabel als er fouten in csv zitten. Initieel voor import koffersysteem nog zonder foutcheck opgezet, dus ook geen v_ongeldig aan het vullen...
IF v_ongeldig > 0
THEN
ROLLBACK;
-- Met rollback haalt hij ook al mijn errors en waarschuwingen weg!?? Daarom een DELETE
-- delete from hmod_imp_contractscope where <alleen de ingelzen versiedatum ;
COMMIT;
fac.imp_writelog (
p_import_key,
'E',
'Niet ingelezen. Staan aantal ongeldige regels in csv-bestand. Zie bovenstaande ERRORS. Pas deze eerst aan!',
'');
ELSE
COMMIT;
fac.imp_writelog (
p_import_key,
'S',
'Aantal ingelezen regels: ' || TO_CHAR (v_count_import),
'');
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_errormsg || ' - Check !!!! : ' || v_aanduiding,
'');
END hmod_import_koffer;
/
CREATE OR REPLACE PROCEDURE hmod_update_koffer (p_import_key IN NUMBER)
AS
v_errormsg VARCHAR (200);
v_errorhint VARCHAR (200);
oracle_err_mes VARCHAR2 (150);
currentversion fac_module.fac_module_version%TYPE;
v_aanduiding VARCHAR (100);
v_count NUMBER;
BEGIN
-- hmod_update_koffer (p_import_key);
NULL;
END hmod_update_koffer;
/
-- Voor UDR-rapportage.
-- Later stadium nog aanvullen met personen-koppeling zodat men goed overzicht heeft van wat er per persoon is uitgereikt. Bij herziening van de koffer oook direct in beeld heeft waar eventuele vervolgacties gedaan moeten worden.
CREATE OR REPLACE VIEW hmod_v_koffersysteem
(
OMSCHRIJVING_TOTAAL,
VERSIEDATUM,
OMSCHRIJVING,
CODE,
LETTERCODE,
TOKEN,
MOB,
HIT,
LAP_EN_SIM,
LAPT,
TNC,
TNC_OMSCHRIJVING,
FACILITOR,
ADP,
ABSENTIEMANAGER,
REGAS,
CHECKS,
ACCOUNTVIEW,
ELVY,
HODNET,
PROACTIVE,
VOLGNR,
OPMERKING
)
AS
SELECT OMSCHRIJVING || ' (' || code || ')' AS omschrijving_totaal,
versiedatum,
omschrijving,
code,
lettercode,
token,
mob,
hit,
lap_en_sim,
lapt,
tnc,
tnc_omschrijving,
facilitor,
adp,
absentiemanager,
regas,
checks,
accountview,
elvy,
hodnet,
proactive,
volgnr,
opmerking
FROM hmod_imp_koffersysteem;
-- Voor keuzelijst (kenmerk domein)
CREATE OR REPLACE VIEW hmod_v_koffersysteem_huidig
(
VOLGNR,
OMSCHRIJVING,
VERSIEDATUM
)
AS
SELECT
VOLGNR,
OMSCHRIJVING_TOTAAL,
VERSIEDATUM
FROM hmod_v_koffersysteem
WHERE versiedatum = (select max(versiedatum) from hmod_v_koffersysteem)
ORDER BY omschrijving, versiedatum DESC
;
-- Basisview en rapportview voor de telefoon-objecten mobiel en vast per persoon
CREATE OR REPLACE VIEW HMOD_V_TELEFOONNR_KLANTOBJECT
(
PRS_PERSLID_KEY,
PRS_NAAM,
SOORT,
NUMMER_OBJECT,
INS_DEEL_KEY, -- KEY 1
INS_DEEL_AANMAAK,
INS_DEEL_KEY2, -- KEY2 voor MOBIEL-SIM-OBJECT
VASTNR_HUIDIG,
MOBIELNR_HUIDIG
)
AS
SELECT p.prs_perslid_key,
prs_perslid_naam || ' (' || prs_perslid_voornaam || ')'
AS naam_werknemer,
sd.ins_srtdeel_omschrijving,
d.ins_deel_upper,
d.ins_deel_key
key1,
d.ins_deel_aanmaak,
NULL
key2,
p.prs_perslid_telefoonnr,
p.prs_perslid_mobiel
FROM prs_perslid p,
ins_deel d,
ins_srtdeel sd,
prs_v_aanwezigafdeling v
WHERE p.prs_perslid_key = d.ins_alg_ruimte_key
AND d.ins_srtdeel_key = 70 -- Telefooncentralenummers
AND d.ins_alg_ruimte_type = 'P'
AND d.ins_deel_verwijder IS NULL
AND d.ins_deel_actief = 1
AND ( d.ins_deel_vervaldatum IS NULL
OR TRUNC (d.ins_deel_vervaldatum) > TRUNC (SYSDATE))
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND p.prs_perslid_verwijder IS NULL
AND p.prs_afdeling_key = v.prs_afdeling_key
AND v.prs_bedrijf_key = 41 -- Personen binnen bedrijf Humanitas onder Dak
AND p.prs_perslid_key NOT IN (721) -- M.u.v. perslid voor met nr '999001' (bestemd voor objecten nog uit te lenen...)
UNION ALL
SELECT p.prs_perslid_key,
prs_perslid_naam || ' (' || prs_perslid_voornaam || ')'
AS Naam_werknemer,
sd.ins_srtdeel_omschrijving,
dd.ins_deel_upper,
d.ins_deel_key
Key1,
d.ins_deel_aanmaak,
dd.ins_deel_key
Key2,
p.prs_perslid_telefoonnr,
p.prs_perslid_mobiel
FROM prs_perslid p,
ins_deel d,
ins_srtdeel sd,
prs_v_aanwezigafdeling v,
ins_kenmerkdeel kd,
ins_deel dd
WHERE p.prs_perslid_key = d.ins_alg_ruimte_key
AND d.ins_srtdeel_key = 69 -- Mobieltelefoon
AND d.ins_alg_ruimte_type = 'P'
AND d.ins_deel_verwijder IS NULL
AND d.ins_deel_actief = 1
AND ( d.ins_deel_vervaldatum IS NULL
OR TRUNC (d.ins_deel_vervaldatum) > TRUNC (SYSDATE))
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND p.prs_perslid_verwijder IS NULL
AND p.prs_afdeling_key = v.prs_afdeling_key
AND v.prs_bedrijf_key = 41 -- afdeling binnen bedrijf Humanitas..
AND p.prs_perslid_key NOT IN (721) -- perslid voor met nr '999001' voor objecten nog uit te lenen...
AND d.ins_deel_key = kd.ins_deel_key
AND kd.ins_kenmerk_key = 152
AND kd.ins_kenmerkdeel_verwijder IS NULL
AND fac.safe_to_number (kd.ins_kenmerkdeel_waarde) =
dd.ins_deel_key
AND dd.ins_srtdeel_key = 341 -- SIM-kaarten en nummers
AND dd.ins_deel_verwijder IS NULL
AND dd.ins_deel_actief = 1
AND ( dd.ins_deel_vervaldatum IS NULL
OR TRUNC (dd.ins_deel_vervaldatum) > TRUNC (SYSDATE)) ;
CREATE OR REPLACE PROCEDURE hmod_prs_telefoonnummers (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2
)
AS
CURSOR c_vast
IS
SELECT PRS_PERSLID_KEY, PRS_NAAM, SOORT, NUMMER_OBJECT, INS_DEEL_KEY, INS_DEEL_AANMAAK, INS_DEEL_KEY2, VASTNR_HUIDIG, MOBIELNR_HUIDIG
FROM HMOD_V_TELEFOONNR_KLANTOBJECT
WHERE SOORT = 'Telefooncentralenummers' AND (VASTNR_HUIDIG<>NUMMER_OBJECT OR VASTNR_HUIDIG is null) ;
CURSOR c_mob
IS
SELECT PRS_PERSLID_KEY, PRS_NAAM, SOORT, NUMMER_OBJECT, INS_DEEL_KEY, INS_DEEL_AANMAAK, INS_DEEL_KEY2, VASTNR_HUIDIG, MOBIELNR_HUIDIG
FROM HMOD_V_TELEFOONNR_KLANTOBJECT
WHERE SOORT = 'Mobieletelefoon' AND (MOBIELNR_HUIDIG<>NUMMER_OBJECT OR MOBIELNR_HUIDIG is null) ;
CURSOR c_delvast
IS
SELECT p.prs_perslid_key, p.prs_perslid_telefoonnr
FROM prs_perslid p
WHERE
p.prs_perslid_key not in (select v.prs_perslid_key from HMOD_V_TELEFOONNR_KLANTOBJECT v where v.soort = 'Telefooncentralenummers')
and p.prs_afdeling_key in (select v.prs_afdeling_key from prs_v_aanwezigafdeling v where v.prs_bedrijf_key = 41 and v.prs_afdeling_verwijder is null) -- Onderdeel bedrijf Humanitas...
and p.prs_perslid_telefoonnr is not null ;
CURSOR c_delmob
IS
SELECT p.prs_perslid_key, p.prs_perslid_mobiel
FROM prs_perslid p
WHERE
p.prs_perslid_key not in (select v.prs_perslid_key from HMOD_V_TELEFOONNR_KLANTOBJECT v where v.soort = 'Mobieletelefoon')
and p.prs_afdeling_key in (select v.prs_afdeling_key from prs_v_aanwezigafdeling v where v.prs_bedrijf_key = 41 and v.prs_afdeling_verwijder is null) -- Onderdeel bedrijf Humanitas...
and p.prs_perslid_mobiel is not null ;
v_telefoon_vast VARCHAR2(15);
v_telefoon_mobiel VARCHAR2(15);
v_errormsg VARCHAR (200);
v_errorhint VARCHAR (200);
oracle_err_mes VARCHAR2 (150);
currentversion fac_module.fac_module_version%TYPE;
v_aanduiding VARCHAR (100);
v_count NUMBER;
BEGIN
v_count:=0;
FOR rec IN c_vast
LOOP
v_aanduiding :=
'Vast nummer gewijzigd, ' || CHR(10)
|| 'van ' || COALESCE(rec.vastnr_huidig,'<leeg>') || ' naar ' || rec.nummer_object ;
v_errorhint := 'telefoonnr vast aanpassen';
UPDATE prs_perslid p
SET prs_perslid_telefoonnr = rec.nummer_object
WHERE p.prs_perslid_key = rec.prs_perslid_key ;
fac.trackaction (
'PRSUPD',
rec.prs_perslid_key,
3,
SYSDATE,
v_aanduiding);
END LOOP;
FOR rec IN c_mob
LOOP
v_aanduiding :=
'Mobielnummer gewijzigd, ' || CHR(10)
|| 'van ' || COALESCE(rec.mobielnr_huidig,'<leeg>') || ' naar ' || rec.nummer_object ;
v_errorhint := 'telefoonnr mobiel aanpassen';
UPDATE prs_perslid p
SET prs_perslid_mobiel = rec.nummer_object
WHERE p.prs_perslid_key = rec.prs_perslid_key ;
fac.trackaction (
'PRSUPD',
rec.prs_perslid_key,
3,
SYSDATE,
v_aanduiding);
END LOOP;
FOR rec IN c_delvast
LOOP
v_aanduiding :=
'Vast nummer verwijderd ' || CHR(10)
|| 'Was ' || rec.prs_perslid_telefoonnr ;
v_errorhint := 'vast nummer verwijderen';
UPDATE prs_perslid p
SET p.prs_perslid_telefoonnr = ''
WHERE p.prs_perslid_key = rec.prs_perslid_key ;
fac.trackaction (
'PRSUPD',
rec.prs_perslid_key,
3,
SYSDATE,
v_aanduiding);
END LOOP;
FOR rec IN c_delmob
LOOP
v_aanduiding :=
'Mobielnummer verwijderd ' || CHR(10)
|| 'Was ' || rec.prs_perslid_mobiel ;
v_errorhint := 'mobielnummer verwijderen';
UPDATE prs_perslid p
SET p.prs_perslid_mobiel = ''
WHERE p.prs_perslid_key = rec.prs_perslid_key ;
fac.trackaction (
'PRSUPD',
rec.prs_perslid_key,
3,
SYSDATE,
v_aanduiding);
END LOOP;
END;
/
-- script om dagelijks terugkerende scripts aan te roepen.
CREATE OR REPLACE PROCEDURE hmod_select_daily_task (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
BEGIN
-- job om de telefoonnummers in persoonkaart te synchroniseren met de eigendommen (gekoppelde telefoonobjecten vast en mobiel)
hmod_prs_telefoonnummers (p_applname, p_applrun);
END;
/
-- Rapport van de import-personen ADP.
---- Zowel te gebruiken bij LEZEN als bij VERWERKEN
---- Deze view wordt tevens gebruikt als cursor voor de import-proceduren
CREATE OR REPLACE VIEW hmod_v_prsimport
(
PRS_PERSLID_KEY,
PRS_PERSLID_NR,
PRS_PERSLID_NAAM,
PRS_PERSLID_VOORNAAM,
PRS_PERSLID_OSLOGIN,
PRS_DATUM_UITDIENST,
PRS_STATUS,
FORMATIEPLAATS_HUIDIG,
FORMATIEPLAATS_CSV,
LETTERCODE,
TOKEN,
MOB,
HIT,
LAP_EN_SIM,
LAPT,
TNC,
TNC_OMSCHRIJVING,
FACILITOR,
ADP,
ABSENTIEMANAGER,
REGAS,
CHECKS,
ACCOUNTVIEW,
ELVY,
HODNET,
PROACTIVE,
OPMERKING_KOFFERSYSTEEM,
DATUM_GELEZEN,
DATUM_VERWERKT
)
AS -- Bestaande personen die ook weer in deze PRS-import zitten
SELECT basis.prs_perslid_key,
basis.prs_perslid_nr,
basis.prs_perslid_naam,
i.prs_perslid_voornaam,
basis.prs_perslid_oslogin,
basis.DatumUitDienst,
CASE
WHEN d.datum_verwerkt is not null THEN i.prs_perslid_partner_naam -- Deze vul ik tijdens de import met de prs_status
WHEN d.datum_verwerkt is null and k.code is null THEN 'Basis - Fout'
ELSE basis.koffersysteem_status
END as prs_status,
COALESCE(basis.formatieplaats_huidig,'nvt'),
COALESCE (k.code, i.prs_kenmerk3 || ' LET OP! formatieplaats uit CSV staat niet in actueel koffersysteem') AS formatieplaats_CSV,
k.lettercode,
k.token,
k.mob,
k.hit,
k.lap_en_sim,
k.lapt,
k.tnc,
k.tnc_omschrijving,
k.facilitor,
k.adp,
k.absentiemanager,
k.regas,
k.checks,
k.accountview,
k.elvy,
k.hodnet,
k.proactive,
k.opmerking,
d.datum_gelezen,
d.datum_verwerkt
FROM (SELECT p.prs_perslid_key,
p.prs_perslid_nr,
p.prs_perslid_naam,
p.prs_perslid_oslogin,
a.prs_bedrijf_key,
b.prs_bedrijf_naam,
(SELECT prs_kenmerklink_waarde
FROM prs_kenmerklink
WHERE prs_link_key = p.prs_perslid_key
AND prs_kenmerk_key = 1025
AND prs_kenmerklink_niveau = 'P'
AND prs_kenmerklink_verwijder IS NULL)
AS formatieplaats_huidig,
(SELECT prs_kenmerklink_waarde
FROM prs_kenmerklink
WHERE prs_link_key = p.prs_perslid_key
AND prs_kenmerk_key = 1100
AND prs_kenmerklink_niveau = 'P'
AND prs_kenmerklink_verwijder IS NULL)
AS DatumUitDienst,
(SELECT kd.fac_usrdata_omschr
FROM prs_kenmerklink k, fac_usrdata kd
WHERE k.prs_link_key = p.prs_perslid_key
AND k.prs_kenmerk_key = 1081 -- Kenmerkveld Status
AND k.prs_kenmerklink_niveau = 'P'
AND k.prs_kenmerklink_verwijder IS NULL
AND k.prs_kenmerklink_waarde = kd.fac_usrdata_key
AND kd.fac_usrtab_key = 82) as Koffersysteem_status
FROM prs_perslid p,
prs_v_afdeling a,
prs_bedrijf b
WHERE p.prs_afdeling_key = a.prs_afdeling_key
AND a.prs_bedrijf_key = b.prs_bedrijf_key
AND p.prs_perslid_verwijder IS NULL) basis,
fac_imp_perslid i,
hmod_imp_koffersysteem k,
(SELECT i.fac_import_key,
MAX (f.fac_import_datum_gelezen) AS datum_gelezen,
MAX (f.fac_import_datum_verwerkt) AS datum_verwerkt
FROM fac_import f, fac_imp_perslid i
WHERE f.fac_import_key = i.fac_import_key AND f.fac_import_app_key = 41
GROUP BY i.fac_import_key,
f.fac_import_datum_gelezen,
f.fac_import_datum_verwerkt) d
WHERE basis.prs_perslid_nr = i.prs_perslid_nr
AND i.prs_kenmerk3 = k.code (+)
AND basis.prs_bedrijf_key = 41 -- Alleen voor Humanitas onder Dak mensen
UNION ALL -- NIEUWE PERSONEN die nog niet in BEDRIJF HUMANITAS zitten en die dus bij import toegevoegd gaan worden en met juiste koffersysteem gevuld moet worden...
---- Nieuwe personen zitten bij INLEZEN aan deze kant (omdat ze nog geen prs_perslid_key hebben). Bij verwerken hebben ze dit wel en dan zitten de NIEUWE personen in bovenstaande union..
SELECT -1 AS prs_perslid_key,
i.prs_perslid_nr,
i.prs_perslid_naam,
i.prs_perslid_voornaam,
NULL as prs_perslid_oslogin, -- Nieuwe mensen krijgen handmatig via voorkant een login
'' as DatumUitDienst,
CASE
WHEN k.code is null THEN 'Nieuw - Fout'
ELSE 'Nieuw'
END as prs_status,
'nvt' AS formatieplaats_huidig,
COALESCE (k.code, i.prs_kenmerk3 || ' LET OP! formatieplaats uit CSV staat niet in actueel koffersysteem') AS formatieplaats_CSV,
k.lettercode,
k.token,
k.mob,
k.hit,
k.lap_en_sim,
k.lapt,
k.tnc,
k.tnc_omschrijving,
k.facilitor,
k.adp,
k.absentiemanager,
k.regas,
k.checks,
k.accountview,
k.elvy,
k.hodnet,
k.proactive,
k.opmerking,
d.datum_gelezen,
d.datum_verwerkt
FROM fac_imp_perslid i, hmod_imp_koffersysteem k,
(SELECT i.fac_import_key,
MAX (f.fac_import_datum_gelezen) AS datum_gelezen,
MAX (f.fac_import_datum_verwerkt) AS datum_verwerkt
FROM fac_import f, fac_imp_perslid i
WHERE f.fac_import_key = i.fac_import_key AND f.fac_import_app_key = 41
GROUP BY i.fac_import_key,
f.fac_import_datum_gelezen,
f.fac_import_datum_verwerkt) d
WHERE i.prs_kenmerk3 = k.code(+)
AND i.fac_import_key = d.fac_import_key
AND UPPER(i.prs_perslid_nr) NOT IN
(SELECT UPPER(p.prs_perslid_nr)
FROM prs_perslid p,
prs_bedrijf b,
prs_v_afdeling a
WHERE p.prs_afdeling_key = a.prs_afdeling_key
AND a.prs_bedrijf_key = b.prs_bedrijf_key
AND p.prs_perslid_nr IS NOT NULL
AND p.prs_perslid_verwijder IS NULL
AND b.prs_bedrijf_key = 41 -- Humanitas onder Dak
)
UNION ALL -- Alle HUMANITAS medewerkers die wel in Facilitor staan, maar niet in CSV-import zitten - Indien nodig handmatig te verwijderen
SELECT basis.prs_perslid_key,
basis.prs_perslid_nr,
basis.prs_perslid_naam,
basis.prs_perslid_voornaam,
basis.prs_perslid_oslogin,
basis.DatumUitDienst,
'Verwijderen' AS prs_status,
basis.formatieplaats_huidig,
'nvt' AS formatieplaats_CSV,
k.lettercode,
k.token,
k.mob,
k.hit,
k.lap_en_sim,
k.lapt,
k.tnc,
k.tnc_omschrijving,
k.facilitor,
k.adp,
k.absentiemanager,
k.regas,
k.checks,
k.accountview,
k.elvy,
k.hodnet,
k.proactive,
k.opmerking,
d.datum_gelezen,
d.datum_verwerkt
FROM (SELECT p.prs_perslid_key,
COALESCE(p.prs_perslid_nr,'999') as prs_perslid_nr,
p.prs_perslid_naam,
p.prs_perslid_voornaam,
p.prs_perslid_oslogin,
a.prs_bedrijf_key,
b.prs_bedrijf_naam,
(SELECT prs_kenmerklink_waarde
FROM prs_kenmerklink
WHERE prs_link_key = p.prs_perslid_key
AND prs_kenmerk_key = 1025
AND prs_kenmerklink_niveau = 'P'
AND prs_kenmerklink_verwijder IS NULL)
AS formatieplaats_huidig,
(SELECT prs_kenmerklink_waarde
FROM prs_kenmerklink
WHERE prs_link_key = p.prs_perslid_key
AND prs_kenmerk_key = 1100
AND prs_kenmerklink_niveau = 'P'
AND prs_kenmerklink_verwijder IS NULL)
AS DatumUitDienst,
(SELECT kd.fac_usrdata_omschr
FROM prs_kenmerklink k, fac_usrdata kd
WHERE k.prs_link_key = p.prs_perslid_key
AND k.prs_kenmerk_key = 1081 -- Kenmerkveld Status
AND k.prs_kenmerklink_niveau = 'P'
AND k.prs_kenmerklink_verwijder IS NULL
AND k.prs_kenmerklink_waarde = kd.fac_usrdata_key
AND kd.fac_usrtab_key = 82) as Koffersysteem_status
FROM prs_perslid p,
prs_v_afdeling a,
prs_bedrijf b
WHERE p.prs_afdeling_key = a.prs_afdeling_key
AND a.prs_bedrijf_key = b.prs_bedrijf_key
AND b.prs_bedrijf_key = 41
AND p.prs_perslid_verwijder IS NULL) basis,
hmod_imp_koffersysteem k,
( SELECT i.fac_import_key,
MAX (f.fac_import_datum_gelezen) AS datum_gelezen,
MAX (f.fac_import_datum_verwerkt) AS datum_verwerkt
FROM fac_import f, fac_imp_perslid i
WHERE f.fac_import_key = i.fac_import_key
AND f.fac_import_app_key = 41
GROUP BY i.fac_import_key,
f.fac_import_datum_gelezen,
f.fac_import_datum_verwerkt) d
WHERE basis.formatieplaats_huidig = k.code(+)
AND basis.Koffersysteem_status != 'Nvt'
AND basis.prs_perslid_nr NOT IN (SELECT i.prs_perslid_nr
FROM fac_imp_perslid i) ;
CREATE OR REPLACE PROCEDURE hmod_import_perslid (p_import_key IN NUMBER)
AS
v_errormsg VARCHAR2 (1000) := '-';
v_errorhint VARCHAR2 (1000) := '-';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (1000);
v_count NUMBER;
v_count_leeg NUMBER;
v_count_fout NUMBER;
v_count_nieuw NUMBER;
v_count_verwijder NUMBER;
v_count_codeverschilt NUMBER;
CURSOR c -- Alle medewerkers HUMANITAS die in aangeleverde ADP-personen-bestand zitten
IS
SELECT prs_perslid_key,
prs_perslid_nr,
prs_perslid_voornaam,
prs_perslid_oslogin,
prs_status,
formatieplaats_huidig,
formatieplaats_csv,
lettercode,
token,
mob,
hit,
lap_en_sim,
lapt,
tnc,
tnc_omschrijving,
facilitor,
adp,
absentiemanager,
regas,
checks,
accountview,
elvy,
hodnet,
proactive
FROM
hmod_v_prsimport WHERE instr(prs_status,'Verwijderen') = 0 and prs_status is not null ;
BEGIN
v_errorhint := 'Generieke import';
-- Standaard Import. De sequence array staat beschreven in PRS_PAC.SRC bij de import_perslid-PROCEDURE.
prs.import_perslid (
p_import_key,
'0;0;0;0;0;0;1;2;0;3;0;0;0;0;0;0;0;5;0;7;6;0;0;4;0;0;8;9;10;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0',
'Afdelingscode;Volbrief;Roepnaam;Geslacht;Zakelijk e-mailadres;Omschrijving verkort;Werknemernummer;Geboortenaam;Aanhef brief;Formatie code%');
-- DEF2: Afdelingscode;Volbrief;Roepnaam;Geslacht;Zakelijk e-mailadres;Omschrijving verkort;Werknemernummer;Geboortenaam;Aanhef brief;Formatie code'
----- 1 2 3 4 5 6 7 8 9 10
COMMIT;
FOR rec IN c
LOOP
BEGIN
-- Koffersysteem-kenmerken vullen
IF rec.prs_status = 'Basis' or rec.prs_status = 'Nieuw' -- Dan alle koffersysteemvelden naar personenkaart wegschrijven...
THEN
UPDATE fac_imp_perslid p
SET prs_kenmerk6 = rec.token, -- Token
prs_kenmerk7 = rec.mob, -- Mobiel
prs_kenmerk8 = rec.hit, -- Hit
prs_kenmerk9 = rec.lap_en_sim, -- Lap+Sim
prs_kenmerk10 = rec.lapt, -- Lapt
prs_kenmerk11 = rec.tnc, -- Toegangsniveau
prs_kenmerk12 = rec.facilitor, -- Facilitor
prs_kenmerk13 = rec.adp, -- ADP
prs_kenmerk14 = rec.absentiemanager, -- Absentiemanager
prs_kenmerk15 = rec.regas, -- Regas
prs_kenmerk16 = rec.checks, -- Checks
prs_kenmerk17 = rec.accountview, -- Accountview
prs_kenmerk18 = rec.elvy, -- Elvy
prs_kenmerk19 = rec.hodnet, -- HodNet
prs_kenmerk20 = rec.proactive -- Proactive
WHERE p.prs_perslid_nr = rec.prs_perslid_nr;
END IF;
-- De prs_status (= status voor deze import) ook wegschrijven in fac_imp_perslid.
---- Om updateprocedure mee te sturen... + om rapport import prs goed mee te vullen..
---- Omdat er voor koffersysteem al 20 kenmerken gevuld worden, moet ik hier ander veld voor (mis)bruiken.
UPDATE fac_imp_perslid p
SET prs_perslid_partner_naam = rec.prs_status -- Partner_naam voor misbruiken. Wordt in standaard update niet gebruikt (omdat PRS_PERSLID_NAAMGEBRUIK_CODE op 0 meegaat..)
WHERE p.prs_perslid_nr = rec.prs_perslid_nr;
-- Voorletter vullen vanuit Roepnaam
UPDATE fac_imp_perslid p
SET prs_perslid_voorletters = substr(rec.prs_perslid_voornaam,1,1)
WHERE p.prs_perslid_nr = rec.prs_perslid_nr and rec.prs_perslid_voornaam is not null;
-- Basiskoffer - Lettercode vullen -
UPDATE fac_imp_perslid p
SET prs_kenmerk4 = rec.lettercode
WHERE p.prs_perslid_nr = rec.prs_perslid_nr;
-- Loginnaam vullen vanuit huidige personenkaart
UPDATE fac_imp_perslid p
SET prs_perslid_oslogin = rec.prs_perslid_oslogin
WHERE p.prs_perslid_nr = rec.prs_perslid_nr ;
END;
END LOOP;
BEGIN
v_errormsg := 'Checks op importbestand ';
v_aanduiding := 'Raadpleeg rapport en pas csv-bestand aan en lees opnieuw in';
v_count := 0;
v_count_leeg:=0;
v_count_fout := 0;
v_count_nieuw := 0;
v_count_verwijder :=0;
v_count_codeverschilt := 0;
-- Nog even alles tellen. NOG NAGAAN/AFSPREKEN wanneer de import moet doorlopen en wanneer men het eerst wil raadplegen..
SELECT count (*) INTO v_count FROM hmod_v_prsimport;
SELECT count (*) INTO v_count_nieuw FROM fac_imp_perslid WHERE (prs_perslid_partner_naam = 'Nieuw' or prs_perslid_partner_naam = 'Nieuw - Fout') ;
SELECT count (*) INTO v_count_fout FROM fac_imp_perslid WHERE INSTR (prs_perslid_partner_naam, 'Fout') > 0 ;
SELECT count (*) INTO v_count_verwijder FROM hmod_v_prsimport WHERE INSTR (prs_status, 'Verwijderen') > 0 ;
SELECT count (*) INTO v_count_leeg FROM fac_imp_perslid WHERE prs_perslid_partner_naam is null ;
SELECT count (*) INTO v_count_codeverschilt FROM hmod_v_prsimport WHERE prs_status = 'Basis' and formatieplaats_huidig <> formatieplaats_csv ;
IF v_count_leeg > 0 THEN
fac.imp_writelog (
p_import_key, 'W', 'Aantal personen zonder import-status is: ' || v_count_leeg,
'ACTIE: ' || v_aanduiding);
END IF;
IF v_count_fout > 0 THEN
fac.imp_writelog (
p_import_key, 'W', 'Aantal personen zonder gekoppelde formatieplaats is: ' || v_count_fout,
'ACTIE: ' || v_aanduiding);
END IF;
IF v_count_codeverschilt > 0 THEN
fac.imp_writelog (
p_import_key, 'W', 'Aantal personen die op BASIS staan, hebben in csv andere formatieplaats dan nu in Facilitor: ' || v_count_codeverschilt,
'ACTIE: ' || v_aanduiding);
END IF;
IF v_count_verwijder > 0 THEN
fac.imp_writelog (
p_import_key, 'W', 'Aantal te verwijderen personen is: '|| v_count_verwijder,
'Ter info');
END IF;
IF v_count_nieuw > 0 THEN
fac.imp_writelog (
p_import_key, 'W', 'Aantal nieuw in te lezen personen is: '|| v_count_nieuw,
'Ter info');
END IF;
IF v_count > 0 THEN
fac.imp_writelog (
p_import_key, 'W', 'Aantal totaal te muteren personen is: '|| v_count,
'Ter info');
END IF;
END;
-- Nog wat updates uitvoeren op tussentabel...
UPDATE fac_imp_perslid
SET prs_perslid_geslacht =
CASE
WHEN prs_perslid_titel = 'Man' THEN 1
WHEN prs_perslid_titel = 'Vrouw' THEN 0
ELSE NULL
END,
prs_kenmerk1 = -- Meisjesnaam leegmaken indien man
CASE
WHEN prs_perslid_titel = 'Man' THEN ''
ELSE prs_kenmerk1
END
;
-- Titel kan nu leeggemaakt worden..
UPDATE fac_imp_perslid
SET prs_perslid_titel = '' ;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ') ';
fac.imp_writelog (p_import_key, 'E', v_errormsg || v_errorhint, 'Inleesproces personen afgebroken!');
END hmod_import_perslid;
/
-- DE UPDATE
CREATE OR REPLACE PROCEDURE hmod_update_perslid (p_import_key IN NUMBER)
IS
CURSOR c_flex -- Alle records pakken. O.a. voor updaten van de algemene flex-kenmerkvelden
IS
SELECT p.prs_perslid_key, p.prs_perslid_nr, i.prs_perslid_partner_naam,i.prs_kenmerk1, i.prs_kenmerk2, i.prs_kenmerk3
FROM prs_v_aanwezigperslid p, fac_imp_perslid i
WHERE p.prs_perslid_nr = i.prs_perslid_nr
ORDER BY 2;
CURSOR c_flex_koffer -- De flexkenmerken koffersysteem - alleen updaten voor die gevuld zijn
IS
SELECT p.prs_perslid_key, p.prs_perslid_nr, i.prs_perslid_partner_naam, i.prs_kenmerk4, i.prs_kenmerk6,i.prs_kenmerk7,i.prs_kenmerk8,i.prs_kenmerk9,i.prs_kenmerk10,i.prs_kenmerk11,i.prs_kenmerk12,i.prs_kenmerk13,i.prs_kenmerk14,i.prs_kenmerk15,i.prs_kenmerk16,i.prs_kenmerk17,i.prs_kenmerk18,i.prs_kenmerk19,i.prs_kenmerk20
FROM prs_v_aanwezigperslid p, fac_imp_perslid i
WHERE p.prs_perslid_nr = i.prs_perslid_nr AND (i.prs_perslid_partner_naam = 'Basis' or i.prs_perslid_partner_naam = 'Nieuw')
ORDER BY 2;
-- CURSOR DELETE
----- Goed standaard voorbeeld van STANDAARD DELETE bij Vesteda (VEST)
---- Voor HMOD: <NOG VASTSTELLEN! HOE/WAT !!!>
---- Indien er clienten in Faciltior zitten, deze sowieso uitsluiten van verwijderactie
---- Handmatig aangemaakte persoon 'Beumer applicatiebeheer' en 'Claudia ten Cate' + ......?
---- Omdat er via HRM-workflow wordt gewerkt, beste om dit via kenmerkveld te laten lopen met CHECK ADP-import
CURSOR c_del -- Alle medewerkers van bedrijf HUMANITAS die niet in aangeleverde ADP-personen-bestand zitten
IS
SELECT prs_perslid_key,
prs_perslid_nr,
prs_status
FROM
hmod_v_prsimport WHERE prs_status = 'Verwijderen' ;
v_errorhint VARCHAR2 (1000) := '';
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (1000);
v_count NUMBER;
v_count_leeg NUMBER;
v_count_fout NUMBER;
v_count_nieuw NUMBER;
v_count_verwijder NUMBER;
v_count_codeverschilt NUMBER;
BEGIN
-- Generieke update.
v_errorhint :='Fout in generieke update';
-- Nog even alles tellen. NOG NAGAAN/AFSPREKEN wanneer de import moet doorlopen en wanneer men het eerst wil raadplegen..
v_aanduiding := 'Import afgebroken (conform afspraak) - Zie rapport voor specificaties';
SELECT count (*) INTO v_count FROM hmod_v_prsimport;
SELECT count (*) INTO v_count_nieuw FROM fac_imp_perslid WHERE (prs_perslid_partner_naam = 'Nieuw' or prs_perslid_partner_naam = 'Nieuw - Fout');
SELECT count (*) INTO v_count_fout FROM fac_imp_perslid WHERE INSTR (prs_perslid_partner_naam, 'Fout') > 0 ;
SELECT count (*) INTO v_count_verwijder FROM hmod_v_prsimport WHERE INSTR (prs_status, 'Verwijderen') > 0 ;
SELECT count (*) INTO v_count_leeg FROM fac_imp_perslid WHERE prs_perslid_partner_naam is null ;
SELECT count (*) INTO v_count_codeverschilt FROM hmod_v_prsimport WHERE prs_status = 'Basis' and formatieplaats_huidig <> formatieplaats_csv ;
IF v_count < 10
THEN
fac.imp_writelog (p_import_key, 'E', 'Het aantal te importeren personen is te klein: ' || TO_CHAR (v_count), v_aanduiding);
RETURN;
END IF;
IF v_count_fout > 3
THEN
fac.imp_writelog (p_import_key, 'E', 'Er zitten in import teveel medewerkers met prs_status FOUT: ' || TO_CHAR (v_count_fout), v_aanduiding);
RETURN;
END IF;
IF v_count_nieuw > 10 -- Bijvoorbeeld als alle personeelsnr's in csv zonder vooloopnull zijn... (NOG CHECKEN in KPN)
THEN
fac.imp_writelog (p_import_key, 'E', 'Er zijn teveel NIEUWE medewerkers in import, kan niet kloppen: ' || TO_CHAR (v_count_nieuw), v_aanduiding);
RETURN;
END IF;
IF v_count_leeg > 0
THEN
fac.imp_writelog (p_import_key, 'E', 'Er zitten in import medewerkers ZONDER prs_status: ' || TO_CHAR (v_count_leeg), v_aanduiding);
RETURN;
END IF;
IF v_count_codeverschilt > 10 THEN -- Zou 0 moeten zijn straks in praktijk!!!!!
fac.imp_writelog (p_import_key, 'E', 'Er zijn (teveel) personen die op BASIS staan, maar in csv andere formatieplaats hebben dan nu in Facilitor: ' || TO_CHAR (v_count_codeverschilt), v_aanduiding);
RETURN;
END IF;
-- Generieke update. NR - key personeelsnr - NULL is geen werkplekken verwijderd
prs.update_perslid (p_import_key, 'NR', 'NULL');
-- Update flexvelden algemeen
FOR rec IN c_flex
LOOP
BEGIN
v_aanduiding := 'Import prs - ' || TO_CHAR(sysdate, 'dd/mm/yyyy - hh:mi:ss') || ' - status: ' || rec.prs_perslid_partner_naam;
v_errorhint:='Fout bijwerken meisjes';
PRS.upsertkenmerk (1023, rec.prs_perslid_key, rec.prs_kenmerk1); -- Meisjesnaam
v_errorhint:='Fout bijwerken briefaanhef';
PRS.upsertkenmerk (1024, rec.prs_perslid_key, rec.prs_kenmerk2); -- Brief aanhef
v_errorhint:='Fout bijwerken formatieplaats';
PRS.upsertkenmerk (1025, rec.prs_perslid_key, rec.prs_kenmerk3); -- Formatieplaats
-- Nog paar kenmerkvelden bijwerken
DELETE FROM prs_kenmerklink
WHERE prs_link_key = rec.prs_perslid_key
AND prs_kenmerk_key = 1082 -- Veld om aan te geven dat persoon verwijderd kan worden. Voor de personen die meekomen in de fac_imp_perslid moet deze leeggemaakt worden...
AND prs_kenmerklink_niveau = 'P'
AND prs_kenmerklink_verwijder IS NULL;
IF rec.prs_perslid_partner_naam = 'Nieuw' or rec.prs_perslid_partner_naam = 'Nieuw - Fout'
THEN
v_errorhint:='Nieuwe personen krijgen altijd basiskoffer mee';
PRS.upsertkenmerk (1081, rec.prs_perslid_key, '143'); -- Koffersysteem (status) = key 143
-- Toevoegen nieuwe personen aan de autorisatiegroep Werknemer - key 79
INSERT INTO fac_gebruikersgroep (fac_groep_key, fac_gebruikersgroep_aanmaak, prs_perslid_key)
VALUES (79, sysdate, rec.prs_perslid_key);
END IF;
fac.trackaction ('PRSUPD', rec.prs_perslid_key, 3,sysdate, v_aanduiding) ;
END;
END LOOP;
-- Update flexvelden Koffersysteem
FOR rec IN c_flex_koffer
LOOP
BEGIN
v_errorhint:='Fout bijwerken Token';
PRS.upsertkenmerk (1068, rec.prs_perslid_key, rec.prs_kenmerk6); -- Token, 6 , 1068
v_errorhint:='Fout bijwerken Mobiel';
PRS.upsertkenmerk (1067, rec.prs_perslid_key, rec.prs_kenmerk7); -- Mobiel 7 , 1067
v_errorhint:='Fout bijwerken Hit';
PRS.upsertkenmerk (1069, rec.prs_perslid_key, rec.prs_kenmerk8); -- Hit 8 , 1069
v_errorhint:='Fout bijwerken Lap+Sim';
PRS.upsertkenmerk (1063, rec.prs_perslid_key, rec.prs_kenmerk9); -- Lap+Sim 9 , 1063
v_errorhint:='Fout bijwerken Lapt';
PRS.upsertkenmerk (1065, rec.prs_perslid_key, rec.prs_kenmerk10); -- Lapt 10, 1065
v_errorhint:='Fout bijwerken Toegangsniveau';
PRS.upsertkenmerk (1061, rec.prs_perslid_key, rec.prs_kenmerk11); -- Toegangsniveau 11, 1061
v_errorhint:='Fout bijwerken Facilitor';
PRS.upsertkenmerk (1072, rec.prs_perslid_key, rec.prs_kenmerk12); -- Facilitor 12 , 1072
v_errorhint:='Fout bijwerken ADP';
PRS.upsertkenmerk (1073, rec.prs_perslid_key, rec.prs_kenmerk13); -- ADP 13 , 1073
v_errorhint:='Fout bijwerken Absentiemanager';
PRS.upsertkenmerk (1074, rec.prs_perslid_key, rec.prs_kenmerk14); -- Absentiemanager 14, 1074
v_errorhint:='Fout bijwerken Regas';
PRS.upsertkenmerk (1075, rec.prs_perslid_key, rec.prs_kenmerk15); -- Regas 15, 1075
v_errorhint:='Fout bijwerken Checks';
PRS.upsertkenmerk (1076, rec.prs_perslid_key, rec.prs_kenmerk16); -- Checks 15, 1076
v_errorhint:='Fout bijwerken Accountview';
PRS.upsertkenmerk (1077, rec.prs_perslid_key, rec.prs_kenmerk17); -- Accountview 17, 1077
v_errorhint:='Fout bijwerken Elvy';
PRS.upsertkenmerk (1078, rec.prs_perslid_key, rec.prs_kenmerk18); -- Elvy 18, 1078
v_errorhint:='Fout bijwerken HodNet';
PRS.upsertkenmerk (1079, rec.prs_perslid_key, rec.prs_kenmerk19); -- HodNet 19, 1079
v_errorhint:='Fout bijwerken Proactive';
PRS.upsertkenmerk (1080, rec.prs_perslid_key, rec.prs_kenmerk20); -- Proactive 20, 1080
v_errorhint:='Fout bijwerken Basiskoffer';
PRS.upsertkenmerk (1028, rec.prs_perslid_key, rec.prs_kenmerk4); -- Basiskoffer
END;
END LOOP;
FOR rec IN c_del
LOOP
-- prs.delete_perslid (p_import_key, rec.prs_perslid_key); -- Deze niet draaien voor HMOD ivm de workflow HRM die men in Facilitor uitvoert...?
-- wel vullen van een kenmerkveld ADP-import 1082
BEGIN
v_aanduiding := 'Import prs - ' || TO_CHAR(sysdate, 'dd/mm/yyyy - hh:mi:ss') || ' - status: ' || rec.prs_status;
v_errorhint:='Bijwerken veld verwijderen';
PRS.upsertkenmerk (1082, rec.prs_perslid_key,'let op: verwijderen' );
fac.trackaction ('PRSUPD', rec.prs_perslid_key, 3,sysdate, v_aanduiding) ;
END;
END LOOP;
BEGIN
-- Telefoongegevens komen niet mee met de ADP-import. Deze velden worden dus bij deze prs-import leeggegooid.
-- De telefoonnummers worden gevuld vanuit de aan de persoon gekoppelde telefoonobjecten (vast en mobiel)
-- Daarom aan eind van deze prs-import deze telefoonvelden weer vullen door het dagelijks script wat hiervoor 's nachts draait, nogmaals te runnen.
hmod_prs_telefoonnummers (null, null);
END;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ') ';
fac.imp_writelog (p_import_key, 'E', v_errormsg || v_errorhint, 'Importproces personen afgebroken!');
END hmod_update_perslid;
/
-- Hieronder de standaard import voor Objecten. Vanaf versie 2020.1 komt hier revisie op waardoor er ook direct op organisatie/afdeling ingelezen kan worden.
-- Dit inlezen p organsiatie/afdeling is per direct al voor HMOD van toepassing. Daarom deze procedure al via deze cust opgeleverd.
-- Indien versie 2020.1 draait op SAAS dan deze procedure verwijderen en droppen.
CREATE OR REPLACE PROCEDURE fac_import_ins2 (p_import_key IN NUMBER)
IS
c_delim VARCHAR2 (1) := ';';
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR (400);
v_ins_srtkenmerk_key1 VARCHAR2 (255);
v_ins_srtkenmerk_key2 VARCHAR2 (255);
v_ins_srtkenmerk_key3 VARCHAR2 (255);
v_ins_srtkenmerk_key4 VARCHAR2 (255);
v_ins_srtkenmerk_key5 VARCHAR2 (255);
v_ins_srtkenmerk_key6 VARCHAR2 (255);
v_ins_srtkenmerk_key7 VARCHAR2 (255);
v_ins_srtkenmerk_key8 VARCHAR2 (255);
v_ins_srtkenmerk_key9 VARCHAR2 (255);
v_ins_srtkenmerk_key10 VARCHAR2 (255);
v_ins_srtkenmerk_key11 VARCHAR2 (255);
v_ins_srtkenmerk_key12 VARCHAR2 (255);
v_ins_srtkenmerk_key13 VARCHAR2 (255);
v_ins_srtkenmerk_key14 VARCHAR2 (255);
v_ins_srtkenmerk_key15 VARCHAR2 (255);
v_ins_srtkenmerk_key16 VARCHAR2 (255);
v_ins_srtkenmerk_key17 VARCHAR2 (255);
v_ins_srtkenmerk_key18 VARCHAR2 (255);
v_ins_srtkenmerk_key19 VARCHAR2 (255);
v_ins_srtkenmerk_key20 VARCHAR2 (255);
-- De importvelden
v_ins_discipline_omschrijving VARCHAR2 (255); -- C60
v_ins_discipline_kostensoort VARCHAR2 (255); --C60
v_ins_srtgroep_omschrijving VARCHAR2 (255); -- C60
v_ins_srtdeel_code VARCHAR2 (255); -- C10
v_ins_srtdeel_omschrijving VARCHAR2 (255); -- C100
v_ins_deel_omschrijving VARCHAR2 (255); -- C60
v_ins_deel_opmerking VARCHAR2 (1000); -- C320
v_reserveerbaar VARCHAR2 (255); -- C1
v_reserveerbaar_n NUMBER (1); -- N1
v_res_deel_eenheid VARCHAR2 (255); -- C10
v_res_deel_prijs VARCHAR2 (255); -- N7,2
v_res_deel_prijs_n NUMBER (7, 2); -- N7,2
v_alg_locatie_code VARCHAR2 (255); -- C10
v_alg_gebouw_code VARCHAR2 (255); -- C12
v_alg_verdieping_volgnr VARCHAR2 (255); -- N3
v_alg_verdieping_volgnr_n NUMBER (3); -- N3
v_alg_ruimte_nr VARCHAR2 (255); -- C10
v_res_deel_alg_level VARCHAR2 (255); -- C1 (naar -1 t/m 5)
v_res_deel_alg_level_n NUMBER (1); -- N1
v_res_discipline_omschrijving VARCHAR2 (255); -- C60
v_res_discipline_kostensoort VARCHAR2 (255); -- C60
v_prs_perslid_matchcode VARCHAR2 (4000);
v_prs_perslid_matchwaarde VARCHAR2 (4000);
v_ins_kenmerkwaarde1 VARCHAR2 (4000);
v_ins_kenmerkwaarde2 VARCHAR2 (4000);
v_ins_kenmerkwaarde3 VARCHAR2 (4000);
v_ins_kenmerkwaarde4 VARCHAR2 (4000);
v_ins_kenmerkwaarde5 VARCHAR2 (4000);
v_ins_kenmerkwaarde6 VARCHAR2 (4000);
v_ins_kenmerkwaarde7 VARCHAR2 (4000);
v_ins_kenmerkwaarde8 VARCHAR2 (4000);
v_ins_kenmerkwaarde9 VARCHAR2 (4000);
v_ins_kenmerkwaarde10 VARCHAR2 (4000);
v_ins_kenmerkwaarde11 VARCHAR2 (4000);
v_ins_kenmerkwaarde12 VARCHAR2 (4000);
v_ins_kenmerkwaarde13 VARCHAR2 (4000);
v_ins_kenmerkwaarde14 VARCHAR2 (4000);
v_ins_kenmerkwaarde15 VARCHAR2 (4000);
v_ins_kenmerkwaarde16 VARCHAR2 (4000);
v_ins_kenmerkwaarde17 VARCHAR2 (4000);
v_ins_kenmerkwaarde18 VARCHAR2 (4000);
v_ins_kenmerkwaarde19 VARCHAR2 (4000);
v_ins_kenmerkwaarde20 VARCHAR2 (4000);
v_ins_deel_aanmaak VARCHAR2 (255); -- DATE
v_ins_deel_aanmaak_d DATE;
v_ins_deel_vervaldatum VARCHAR2 (255); -- DATE
v_ins_deel_vervaldatum_d DATE;
v_ins_deel_aantal VARCHAR2 (255); -- N8,2
v_ins_deel_aantal_n NUMBER(8, 2);
v_file_index NUMBER;
-- Overige velden:
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
-- Controleer tijdens import-fase alleen op bestaan van kenmerksoort (of
-- deze - via een kenmerk - wel is gedefinieerd voor de betreffende object-
-- discipline/groep/soort, volgt pas tijdens de update-fase)!
--
-- kw is bijvoorbeeld 'Parkeercode' of 'Parkeercode|3' waarbij de laatste in groep 3 zit
-- het resultaat is NULL (als niet gevonden) of 234|3 voor strkenmer_key 234 in groep 3
-- Als geen groep is meegegeven wordt 234|0 opgeleverd (de default groep)
FUNCTION bepaal_srtkenmerk_key (p_kw IN VARCHAR)
RETURN VARCHAR
IS
v_srtkenmerk_key NUMBER;
v_kenmerk_groep NUMBER;
v_kw VARCHAR(250);
BEGIN
v_kenmerk_groep := 0;
v_kw := p_kw;
IF INSTR (v_kw, '|') > 1
THEN
v_kenmerk_groep := SUBSTR (v_kw, INSTR (v_kw, '|') + 1);
v_kw := SUBSTR (v_kw, 1, INSTR (v_kw, '|') - 1);
END IF;
IF fac.safe_to_number (v_kw) IS NULL
THEN -- kenmerkwaarde is alfanumeriek (dus omschrijving)!
SELECT ins_srtkenmerk_key
INTO v_srtkenmerk_key
FROM ins_v_aanwezigsrtkenmerk
WHERE ins_srtkenmerk_upper = UPPER (v_kw)
AND ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B', 'V');
ELSE -- kenmerkwaarde is numeriek (dus key)!
SELECT ins_srtkenmerk_key
INTO v_srtkenmerk_key
FROM ins_v_aanwezigsrtkenmerk
WHERE ins_srtkenmerk_key = fac.safe_to_number (v_kw)
AND ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B', 'V');
END IF;
RETURN TO_CHAR(v_srtkenmerk_key) || '|' || TO_CHAR(v_kenmerk_groep);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
IF p_kw IS NULL OR UPPER (p_kw) LIKE 'KENMERK%'
THEN
RETURN NULL;
ELSE
fac.imp_writelog (p_import_key,
'W',
'Fout bij bepalen kenmerksoort [' || p_kw || ']',
'Bestaat niet of type ongeldig');
COMMIT;
RETURN NULL;
END IF;
END;
BEGIN
-- Eerst opruiming
DELETE FROM fac_imp_ins;
COMMIT;
v_count_tot := 0;
v_count_import := 0;
header_is_valid := 0;
v_prs_perslid_matchcode := '';
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_file_index := rec1.fac_imp_file_index;
v_errormsg := 'Fout bij opvragen importregel';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_delim, v_ins_discipline_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_ins_discipline_kostensoort);
fac.imp_getfield (v_newline, c_delim, v_ins_srtgroep_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_ins_srtdeel_code);
fac.imp_getfield (v_newline, c_delim, v_ins_srtdeel_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_ins_deel_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_ins_deel_opmerking);
fac.imp_getfield (v_newline, c_delim, v_reserveerbaar);
fac.imp_getfield (v_newline, c_delim, v_res_deel_eenheid);
fac.imp_getfield (v_newline, c_delim, v_res_deel_prijs);
fac.imp_getfield (v_newline, c_delim, v_alg_locatie_code);
fac.imp_getfield (v_newline, c_delim, v_alg_gebouw_code);
fac.imp_getfield (v_newline, c_delim, v_alg_verdieping_volgnr);
fac.imp_getfield (v_newline, c_delim, v_alg_ruimte_nr);
fac.imp_getfield (v_newline, c_delim, v_res_deel_alg_level);
fac.imp_getfield (v_newline, c_delim, v_res_discipline_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_res_discipline_kostensoort);
fac.imp_getfield (v_newline, c_delim, v_prs_perslid_matchcode);
fac.imp_getfield (v_newline, c_delim, v_prs_perslid_matchwaarde);
fac.imp_getfield (v_newline, c_delim, v_ins_deel_aanmaak);
fac.imp_getfield (v_newline, c_delim, v_ins_deel_vervaldatum);
fac.imp_getfield (v_newline, c_delim, v_ins_deel_aantal);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde1);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde2);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde3);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde4);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde5);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde6);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde7);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde8);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde9);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde10);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde11);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde12);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde13);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde14);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde15);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde16);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde17);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde18);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde19);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde20);
v_aanduiding :=
'['
|| v_ins_discipline_omschrijving
|| '|'
|| v_ins_srtgroep_omschrijving
|| '|'
|| v_ins_srtdeel_code
|| '|'
|| v_ins_srtdeel_omschrijving
|| '|'
|| v_ins_deel_omschrijving
|| '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij alle NIET-kenmerk kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (v_ins_discipline_omschrijving) = 'DISCIPLINEOMSCHRIJVING'
AND UPPER (v_ins_discipline_kostensoort) = 'DISCIPLINEKOSTENSOORT'
AND UPPER (v_ins_srtgroep_omschrijving) = 'GROEPSOORTOMSCHRIJVING'
AND UPPER (v_ins_srtdeel_code) = 'OBJECTSOORTCODE'
AND UPPER (v_ins_srtdeel_omschrijving) = 'OBJECTSOORTOMSCHRIJVING'
AND UPPER (v_ins_deel_omschrijving) = 'OBJECTIDENTIFICATIE'
AND UPPER (v_ins_deel_opmerking) = 'OBJECTOPMERKING'
AND UPPER (v_reserveerbaar) = 'RESERVEERBAAR'
AND UPPER (v_res_deel_eenheid) = 'EENHEID'
AND UPPER (v_res_deel_prijs) = 'PRIJS'
AND UPPER (v_alg_locatie_code) = 'LOCATIECODE'
AND UPPER (v_alg_gebouw_code) = 'GEBOUWCODE'
AND UPPER (v_alg_verdieping_volgnr) = 'BOUWLAAGVOLGNUMMER'
AND UPPER (v_alg_ruimte_nr) = 'RUIMTENUMMER'
AND UPPER (v_res_deel_alg_level) = 'RESERVERINGSCOPE'
AND UPPER (v_res_discipline_omschrijving) = 'CATALOGUSNAAM'
AND UPPER (v_res_discipline_kostensoort) = 'CATALOGUSKOSTENSOORT'
AND UPPER (v_prs_perslid_matchcode) = 'PERSOONMATCHCODE'
AND UPPER (v_prs_perslid_matchwaarde) = 'PERSOONMATCHWAARDE'
AND UPPER (v_ins_deel_aanmaak) = 'INGANGSDATUM'
AND UPPER (v_ins_deel_vervaldatum) = 'VERVALDATUM'
AND UPPER (v_ins_deel_aantal) = 'AANTAL'
THEN
v_ins_srtkenmerk_key1 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde1);
v_ins_srtkenmerk_key2 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde2);
v_ins_srtkenmerk_key3 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde3);
v_ins_srtkenmerk_key4 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde4);
v_ins_srtkenmerk_key5 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde5);
v_ins_srtkenmerk_key6 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde6);
v_ins_srtkenmerk_key7 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde7);
v_ins_srtkenmerk_key8 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde8);
v_ins_srtkenmerk_key9 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde9);
v_ins_srtkenmerk_key10 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde10);
v_ins_srtkenmerk_key11 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde11);
v_ins_srtkenmerk_key12 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde12);
v_ins_srtkenmerk_key13 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde13);
v_ins_srtkenmerk_key14 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde14);
v_ins_srtkenmerk_key15 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde15);
v_ins_srtkenmerk_key16 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde16);
v_ins_srtkenmerk_key17 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde17);
v_ins_srtkenmerk_key18 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde18);
v_ins_srtkenmerk_key19 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde19);
v_ins_srtkenmerk_key20 := bepaal_srtkenmerk_key (v_ins_kenmerkwaarde20);
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errormsg := 'Disciplineomschrijving ongeldig';
v_ins_discipline_omschrijving :=
TRIM (v_ins_discipline_omschrijving);
IF v_ins_discipline_omschrijving IS NULL
OR LENGTH (v_ins_discipline_omschrijving) > 60
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Kostensoort ongeldig';
v_ins_discipline_kostensoort :=
TRIM (v_ins_discipline_kostensoort);
IF LENGTH (v_ins_discipline_kostensoort) > 60
THEN
v_ins_discipline_kostensoort :=
SUBSTR (v_ins_discipline_kostensoort, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Disciplinekostensoort wordt afgebroken tot ['
|| v_ins_discipline_kostensoort
|| ']'
);
END IF;
--
v_errormsg := 'Groepsoortomschrijving ongeldig';
v_ins_srtgroep_omschrijving := TRIM (v_ins_srtgroep_omschrijving);
IF v_ins_srtgroep_omschrijving IS NULL
OR LENGTH (v_ins_srtgroep_omschrijving) > 60
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Objectsoortcode ongeldig';
v_ins_srtdeel_code := TRIM (v_ins_srtdeel_code);
IF v_ins_srtdeel_code IS NULL OR LENGTH (v_ins_srtdeel_code) > 10
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Objectsoortomschrijving ongeldig';
v_ins_srtdeel_omschrijving := TRIM (v_ins_srtdeel_omschrijving);
IF v_ins_srtdeel_omschrijving IS NULL
OR LENGTH (v_ins_srtdeel_omschrijving) > 100
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Objectomschrijving ongeldig';
v_ins_deel_omschrijving := TRIM (v_ins_deel_omschrijving);
IF v_ins_deel_omschrijving IS NULL
OR LENGTH (v_ins_deel_omschrijving) > 60
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
v_errormsg := 'Objectopmerking ongeldig';
v_ins_deel_opmerking := TRIM (v_ins_deel_opmerking);
IF LENGTH (v_ins_deel_opmerking) > 320
THEN
v_ins_deel_opmerking := SUBSTR (v_ins_deel_opmerking, 1, 320);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Objectopmerking wordt afgebroken tot ['
|| v_ins_deel_opmerking
|| ']'
);
END IF;
-- Verder geen foutdetectie; kan dus stricter?
SELECT DECODE (SUBSTR (TRIM (UPPER (v_reserveerbaar)), 1, 1),
'J', 1,
0)
INTO v_reserveerbaar_n
FROM DUAL;
--
v_errormsg := 'Eenheid ongeldig';
v_res_deel_eenheid := TRIM (v_res_deel_eenheid);
IF LENGTH (v_res_deel_eenheid) > 10
THEN
v_res_deel_eenheid := SUBSTR (v_res_deel_eenheid, 1, 10);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Eenheid wordt afgebroken tot ['
|| v_res_deel_eenheid
|| ']'
);
END IF;
--
v_errormsg := 'Prijs ongeldig; maximale grootte 99999.99';
v_res_deel_prijs := TRIM (v_res_deel_prijs);
v_res_deel_prijs_n := NULL;
IF (v_res_deel_prijs IS NOT NULL)
THEN
IF (fac.safe_to_number (v_res_deel_prijs) IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
ELSE
v_res_deel_prijs_n := fac.safe_to_number (v_res_deel_prijs);
END IF;
END IF;
--
v_errormsg := 'Locatiecode ongeldig';
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 || v_errormsg,
'Locatiecode wordt afgebroken tot ['
|| v_alg_locatie_code
|| ']'
);
END IF;
--
v_errormsg := 'Gebouwcode ongeldig';
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 || v_errormsg,
'Gebouwcode wordt afgebroken tot ['
|| v_alg_gebouw_code
|| ']'
);
END IF;
--
v_errormsg := 'Bouwlaagvolgnummer ongeldig';
v_alg_verdieping_volgnr := TRIM (v_alg_verdieping_volgnr);
v_alg_verdieping_volgnr_n := NULL;
IF (v_alg_verdieping_volgnr IS NOT NULL)
THEN
v_alg_verdieping_volgnr_n :=
ROUND (fac.safe_to_number (v_alg_verdieping_volgnr));
IF v_alg_verdieping_volgnr_n NOT BETWEEN -999 AND 999
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
ELSE
v_alg_verdieping_volgnr_n :=
fac.safe_to_number (v_alg_verdieping_volgnr);
END IF;
END IF;
--
v_errormsg := 'Ruimtenummer ongeldig';
v_alg_ruimte_nr := TRIM (v_alg_ruimte_nr);
IF LENGTH (v_alg_ruimte_nr) > 10
THEN
v_alg_ruimte_nr := SUBSTR (v_alg_ruimte_nr, 1, 10);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Ruimtenummer wordt afgebroken tot ['
|| v_alg_ruimte_nr
|| ']'
);
END IF;
-- Verder geen foutdetectie; kan dus stricter?
SELECT DECODE (SUBSTR (TRIM (v_res_deel_alg_level), 1, 1),
'E', 0,
'D', 1,
'L', 2,
'G', 3,
'V', 4,
'R', 5,
-1)
INTO v_res_deel_alg_level_n
FROM DUAL;
--
v_errormsg := 'Catalogusnaam ongeldig';
v_res_discipline_omschrijving :=
TRIM (v_res_discipline_omschrijving);
IF LENGTH (v_res_discipline_omschrijving) > 60
THEN
v_res_discipline_omschrijving :=
SUBSTR (TRIM (v_res_discipline_omschrijving), 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Catalogusnaam wordt afgebroken tot ['
|| v_res_discipline_omschrijving
|| ']'
);
END IF;
--
v_errormsg := 'Cataloguskostensoort ongeldig';
v_res_discipline_kostensoort :=
TRIM (v_res_discipline_kostensoort);
IF LENGTH (v_res_discipline_kostensoort) > 60
THEN
v_res_discipline_kostensoort :=
SUBSTR (TRIM (v_res_discipline_kostensoort), 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Cataloguskostensoort wordt afgebroken tot ['
|| v_res_discipline_kostensoort
|| ']'
);
END IF;
--
v_errormsg := 'Aantal ongeldig; maximale grootte 999999.99';
v_ins_deel_aantal := TRIM (v_ins_deel_aantal);
v_ins_deel_aantal := REPLACE (v_ins_deel_aantal, ',', '.');
v_ins_deel_aantal_n := NULL;
IF (v_ins_deel_aantal IS NOT NULL AND fac.getSetting('ins_explode_objects') = 0)
THEN
IF (fac.safe_to_number (v_ins_deel_aantal) IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
ELSE
v_ins_deel_aantal_n := fac.safe_to_number (v_ins_deel_aantal);
END IF;
ELSE
v_ins_deel_aantal_n := 1;
END IF;
--
IF v_ins_deel_aanmaak IS NOT NULL
THEN
BEGIN
v_ins_deel_aanmaak_d :=
TO_DATE (v_ins_deel_aanmaak, 'dd-mm-yyyy');
EXCEPTION
WHEN OTHERS
THEN
v_ongeldig := 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!'
);
COMMIT;
END;
ELSE
v_ins_deel_aanmaak_d := NULL;
END IF;
--
IF v_ins_deel_vervaldatum IS NOT NULL
THEN
BEGIN
v_ins_deel_vervaldatum_d :=
TO_DATE (v_ins_deel_vervaldatum, 'dd-mm-yyyy');
EXCEPTION
WHEN OTHERS
THEN
v_ongeldig := 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!'
);
COMMIT;
END;
ELSE
v_ins_deel_vervaldatum_d := NULL;
END IF;
-- De rest alleen ff trimmen.
v_prs_perslid_matchcode := TRIM (v_prs_perslid_matchcode);
v_prs_perslid_matchwaarde := TRIM (v_prs_perslid_matchwaarde);
v_ins_kenmerkwaarde1 := TRIM (v_ins_kenmerkwaarde1);
v_ins_kenmerkwaarde2 := TRIM (v_ins_kenmerkwaarde2);
v_ins_kenmerkwaarde3 := TRIM (v_ins_kenmerkwaarde3);
v_ins_kenmerkwaarde4 := TRIM (v_ins_kenmerkwaarde4);
v_ins_kenmerkwaarde5 := TRIM (v_ins_kenmerkwaarde5);
v_ins_kenmerkwaarde6 := TRIM (v_ins_kenmerkwaarde6);
v_ins_kenmerkwaarde7 := TRIM (v_ins_kenmerkwaarde7);
v_ins_kenmerkwaarde8 := TRIM (v_ins_kenmerkwaarde8);
v_ins_kenmerkwaarde9 := TRIM (v_ins_kenmerkwaarde9);
v_ins_kenmerkwaarde10 := TRIM (v_ins_kenmerkwaarde10);
v_ins_kenmerkwaarde11 := TRIM (v_ins_kenmerkwaarde11);
v_ins_kenmerkwaarde12 := TRIM (v_ins_kenmerkwaarde12);
v_ins_kenmerkwaarde13 := TRIM (v_ins_kenmerkwaarde13);
v_ins_kenmerkwaarde14 := TRIM (v_ins_kenmerkwaarde14);
v_ins_kenmerkwaarde15 := TRIM (v_ins_kenmerkwaarde15);
v_ins_kenmerkwaarde16 := TRIM (v_ins_kenmerkwaarde16);
v_ins_kenmerkwaarde17 := TRIM (v_ins_kenmerkwaarde17);
v_ins_kenmerkwaarde18 := TRIM (v_ins_kenmerkwaarde18);
v_ins_kenmerkwaarde19 := TRIM (v_ins_kenmerkwaarde19);
v_ins_kenmerkwaarde20 := TRIM (v_ins_kenmerkwaarde20);
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errormsg := 'Fout bij wegschrijven importregel';
-- Als uit kenmerkheader een geldige kenmerksoort-key volgt,
-- dan is kenmerkwaarde<n> gevuld met <key>=<waarde>; zoniet,
-- dan is kenmerkwaarde<n> gevuld met <waarde>!
-- NB. Een NULL-waarde resulteert NIET in het wissen van een
-- kenmerkveld (bijwerken kan wel, maar wissen dus niet)!
INSERT INTO fac_imp_ins (
ins_discipline_omschrijving,
ins_discipline_kostensoort,
ins_srtgroep_omschrijving,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
ins_deel_omschrijving,
ins_deel_opmerking,
reserveerbaar,
res_deel_eenheid,
res_deel_prijs,
alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr,
res_deel_alg_level,
res_discipline_omschrijving,
res_discipline_kostensoort,
prs_perslid_matchcode,
prs_perslid_matchwaarde,
ins_kenmerkwaarde1,
ins_kenmerkwaarde2,
ins_kenmerkwaarde3,
ins_kenmerkwaarde4,
ins_kenmerkwaarde5,
ins_kenmerkwaarde6,
ins_kenmerkwaarde7,
ins_kenmerkwaarde8,
ins_kenmerkwaarde9,
ins_kenmerkwaarde10,
ins_kenmerkwaarde11,
ins_kenmerkwaarde12,
ins_kenmerkwaarde13,
ins_kenmerkwaarde14,
ins_kenmerkwaarde15,
ins_kenmerkwaarde16,
ins_kenmerkwaarde17,
ins_kenmerkwaarde18,
ins_kenmerkwaarde19,
ins_kenmerkwaarde20,
ins_deel_aanmaak,
ins_deel_vervaldatum,
ins_deel_aantal
)
VALUES (
v_ins_discipline_omschrijving,
v_ins_discipline_kostensoort,
v_ins_srtgroep_omschrijving,
v_ins_srtdeel_code,
v_ins_srtdeel_omschrijving,
v_ins_deel_omschrijving,
v_ins_deel_opmerking,
v_reserveerbaar_n,
v_res_deel_eenheid,
v_res_deel_prijs_n,
v_alg_locatie_code,
v_alg_gebouw_code,
v_alg_verdieping_volgnr_n,
v_alg_ruimte_nr,
v_res_deel_alg_level_n,
v_res_discipline_omschrijving,
v_res_discipline_kostensoort,
v_prs_perslid_matchcode,
v_prs_perslid_matchwaarde,
DECODE (v_ins_srtkenmerk_key1,
NULL, v_ins_kenmerkwaarde1,
TO_CHAR (v_ins_srtkenmerk_key1)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde1, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key2,
NULL, v_ins_kenmerkwaarde2,
TO_CHAR (v_ins_srtkenmerk_key2)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde2, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key3,
NULL, v_ins_kenmerkwaarde3,
TO_CHAR (v_ins_srtkenmerk_key3)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde3, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key4,
NULL, v_ins_kenmerkwaarde4,
TO_CHAR (v_ins_srtkenmerk_key4)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde4, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key5,
NULL, v_ins_kenmerkwaarde5,
TO_CHAR (v_ins_srtkenmerk_key5)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde5, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key6,
NULL, v_ins_kenmerkwaarde6,
TO_CHAR (v_ins_srtkenmerk_key6)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde6, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key7,
NULL, v_ins_kenmerkwaarde7,
TO_CHAR (v_ins_srtkenmerk_key7)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde7, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key8,
NULL, v_ins_kenmerkwaarde8,
TO_CHAR (v_ins_srtkenmerk_key8)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde8, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key9,
NULL, v_ins_kenmerkwaarde9,
TO_CHAR (v_ins_srtkenmerk_key9)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde9, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key10,
NULL, v_ins_kenmerkwaarde10,
TO_CHAR (v_ins_srtkenmerk_key10)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde10, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key11,
NULL, v_ins_kenmerkwaarde11,
TO_CHAR (v_ins_srtkenmerk_key11)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde11, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key12,
NULL, v_ins_kenmerkwaarde12,
TO_CHAR (v_ins_srtkenmerk_key12)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde12, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key13,
NULL, v_ins_kenmerkwaarde13,
TO_CHAR (v_ins_srtkenmerk_key13)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde13, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key14,
NULL, v_ins_kenmerkwaarde14,
TO_CHAR (v_ins_srtkenmerk_key14)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde14, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key15,
NULL, v_ins_kenmerkwaarde15,
TO_CHAR (v_ins_srtkenmerk_key15)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde15, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key16,
NULL, v_ins_kenmerkwaarde16,
TO_CHAR (v_ins_srtkenmerk_key16)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde16, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key17,
NULL, v_ins_kenmerkwaarde17,
TO_CHAR (v_ins_srtkenmerk_key17)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde17, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key18,
NULL, v_ins_kenmerkwaarde18,
TO_CHAR (v_ins_srtkenmerk_key18)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde18, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key19,
NULL, v_ins_kenmerkwaarde19,
TO_CHAR (v_ins_srtkenmerk_key19)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde19, 1, 3900)
),
DECODE (
v_ins_srtkenmerk_key20,
NULL, v_ins_kenmerkwaarde20,
TO_CHAR (v_ins_srtkenmerk_key20)
|| '='
|| SUBSTR (v_ins_kenmerkwaarde20, 1, 3900)
),
v_ins_deel_aanmaak_d,
v_ins_deel_vervaldatum_d,
v_ins_deel_aantal_n
);
COMMIT;
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
COMMIT;
END;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
'Ongeldig importbestand',
'Geen header of header niet volgens specificatie!');
ELSE
fac.imp_writelog (
p_import_key,
'S',
'Objecten/aantal ingelezen importregels: ' || TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (
p_import_key,
'S',
'Objecten/aantal ongeldige niet ingelezen importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Inleesproces objecten afgebroken! regel:' || v_file_index);
END fac_import_ins2;
/
CREATE OR REPLACE PROCEDURE fac_update_ins2 (p_import_key IN NUMBER)
AS
v_errormsg VARCHAR2 (1000) := '-';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
-- SUBPROC
PROCEDURE add_kostensoort (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT prs_kostensoort_upper,
MAX (prs_kostensoort_omschrijving) prs_kostensoort_omschrijving
FROM ( SELECT UPPER (ins_discipline_kostensoort) prs_kostensoort_upper,
MAX (ins_discipline_kostensoort) prs_kostensoort_omschrijving
FROM fac_imp_ins
WHERE ins_discipline_kostensoort IS NOT NULL
GROUP BY UPPER (ins_discipline_kostensoort)
UNION ALL
SELECT UPPER (res_discipline_kostensoort) prs_kostensoort_upper,
MAX (res_discipline_kostensoort) prs_kostensoort_omschrijving
FROM fac_imp_ins
WHERE reserveerbaar = 1 AND res_discipline_kostensoort IS NOT NULL
GROUP BY UPPER (res_discipline_kostensoort))
GROUP BY prs_kostensoort_upper;
v_kostensoort_key NUMBER (10);
ccount NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errormsg :=
'Fout bij toevoegen kostensoort [' || rec.prs_kostensoort_omschrijving || ']';
SELECT COUNT ( * )
INTO ccount
FROM prs_kostensoort
WHERE TRIM (prs_kostensoort_upper) = rec.prs_kostensoort_upper;
IF ccount = 0
THEN
INSERT INTO prs_kostensoort (prs_kostensoort_oms)
VALUES (rec.prs_kostensoort_omschrijving);
v_count_update := v_count_update + 1;
END IF;
COMMIT;
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_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Kostensoorten/aantal ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'Kostensoorten/aantal toegevoegd: ' || TO_CHAR (v_count_update),
'');
COMMIT;
END;
-- SUBPROC
PROCEDURE add_insdiscipline (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT UPPER (ins_discipline_omschrijving) ins_discipline_upper,
UPPER (ins_discipline_kostensoort) ins_kostensoort_upper,
MAX (ins_discipline_omschrijving) ins_discipline_omschrijving
FROM fac_imp_ins
GROUP BY UPPER (ins_discipline_omschrijving), UPPER (ins_discipline_kostensoort);
v_discipline_key NUMBER (10);
v_kostensoort_key NUMBER (10);
ccount NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errormsg :=
'Fout bij toevoegen INS-discipline [' || rec.ins_discipline_omschrijving || ']';
SELECT COUNT ( * )
INTO ccount
FROM ins_tab_discipline
WHERE ins_discipline_verwijder IS NULL
AND ins_discipline_module = 'INS'
AND UPPER (TRIM (ins_discipline_omschrijving)) = rec.ins_discipline_upper;
IF ccount = 0
THEN
IF rec.ins_kostensoort_upper IS NULL
THEN
v_kostensoort_key := NULL;
ELSE
SELECT prs_kostensoort_key
INTO v_kostensoort_key
FROM prs_kostensoort
WHERE TRIM (prs_kostensoort_upper) = rec.ins_kostensoort_upper;
END IF;
INSERT INTO ins_tab_discipline (ins_discipline_module,
ins_discipline_omschrijving,
ins_discipline_min_level,
ins_discipline_kpnverplicht,
prs_kostensoort_key)
VALUES ('INS',
SUBSTR (rec.ins_discipline_omschrijving, 1, 60),
1,
0,
v_kostensoort_key)
RETURNING ins_discipline_key
INTO v_discipline_key;
INSERT INTO ins_disc_params (ins_discipline_key, ins_disc_params_type)
VALUES (v_discipline_key, 0);
v_count_update := v_count_update + 1;
END IF;
COMMIT;
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_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'INS-Disciplines/aantal ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'INS-Disciplines/aantal toegevoegd: ' || TO_CHAR (v_count_update),
'');
COMMIT;
END;
-- SUBPROC
PROCEDURE add_resdiscipline (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT UPPER (res_discipline_omschrijving) res_discipline_upper,
UPPER (res_discipline_kostensoort) res_kostensoort_upper,
MAX (res_discipline_omschrijving) res_discipline_omschrijving
FROM fac_imp_ins
WHERE reserveerbaar = 1
GROUP BY UPPER (res_discipline_omschrijving), UPPER (res_discipline_kostensoort);
v_discipline_key NUMBER (10);
v_kostensoort_key NUMBER (10);
ccount NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errormsg :=
'Fout bij toevoegen RES-discipline [' || rec.res_discipline_omschrijving || ']';
SELECT COUNT ( * )
INTO ccount
FROM ins_tab_discipline
WHERE ins_discipline_verwijder IS NULL
AND ins_discipline_module = 'RES'
AND UPPER (TRIM (ins_discipline_omschrijving)) = rec.res_discipline_upper;
IF ccount = 0
THEN
IF rec.res_kostensoort_upper IS NULL
THEN
v_kostensoort_key := NULL;
ELSE
SELECT prs_kostensoort_key
INTO v_kostensoort_key
FROM prs_kostensoort
WHERE TRIM (prs_kostensoort_upper) = rec.res_kostensoort_upper;
END IF;
INSERT INTO ins_tab_discipline (ins_discipline_module,
ins_discipline_omschrijving,
ins_discipline_min_level,
ins_discipline_kpnverplicht,
prs_kostensoort_key)
VALUES ('RES',
SUBSTR (rec.res_discipline_omschrijving, 1, 60),
1,
0,
v_kostensoort_key)
RETURNING ins_discipline_key
INTO v_discipline_key;
INSERT INTO res_disc_params (res_ins_discipline_key)
VALUES (v_discipline_key);
v_count_update := v_count_update + 1;
END IF;
COMMIT;
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_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'RES-Disciplines/aantal ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'RES-Disciplines/aantal toegevoegd: ' || TO_CHAR (v_count_update),
'');
COMMIT;
END;
-- SUBPROC
PROCEDURE add_srtgroep (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT UPPER (ins_discipline_omschrijving) ins_discipline_upper,
UPPER (ins_srtgroep_omschrijving) ins_srtgroep_upper,
MAX (ins_discipline_omschrijving) ins_discipline_omschrijving,
MAX (ins_srtgroep_omschrijving) ins_srtgroep_omschrijving
FROM fac_imp_ins
GROUP BY UPPER (ins_discipline_omschrijving), UPPER (ins_srtgroep_omschrijving);
v_discipline_key NUMBER (10);
ccount NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errormsg := 'Fout bij bepalen discipline';
SELECT ins_discipline_key
INTO v_discipline_key
FROM ins_tab_discipline
WHERE ins_discipline_verwijder IS NULL
AND ins_discipline_module = 'INS'
AND UPPER (TRIM (ins_discipline_omschrijving)) = rec.ins_discipline_upper;
v_errormsg :=
'Fout bij toevoegen groepsoort [' || rec.ins_srtgroep_omschrijving || '] ';
SELECT COUNT ( * )
INTO ccount
FROM ins_srtgroep
WHERE ins_srtgroep_verwijder IS NULL
AND ins_srtgroep_module = 'INS'
AND ins_discipline_key = v_discipline_key
AND TRIM (ins_srtgroep_upper) = rec.ins_srtgroep_upper;
IF ccount = 0
THEN
INSERT INTO ins_srtgroep (ins_discipline_key,
ins_srtgroep_module,
ins_srtgroep_omschrijving)
VALUES (v_discipline_key,
'INS',
SUBSTR (TRIM (rec.ins_srtgroep_omschrijving), 1, 60));
v_count_update := v_count_update + 1;
END IF;
COMMIT;
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_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Groepsoorten/aantal ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'Groepsoorten/aantal toegevoegd: ' || TO_CHAR (v_count_update),
'');
COMMIT;
END;
-- SUBPROC
PROCEDURE add_srtdeel (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT UPPER (ins_discipline_omschrijving) ins_discipline_upper,
UPPER (ins_srtgroep_omschrijving) ins_srtgroep_upper,
UPPER (ins_srtdeel_code) ins_srtdeel_code_upper,
UPPER (ins_srtdeel_omschrijving) ins_srtdeel_upper,
MAX (ins_discipline_omschrijving) ins_discipline_omschrijving,
MAX (ins_srtgroep_omschrijving) ins_srtgroep_omschrijving,
MAX (ins_srtdeel_code) ins_srtdeel_code,
MAX (ins_srtdeel_omschrijving) ins_srtdeel_omschrijving
FROM fac_imp_ins
GROUP BY UPPER (ins_discipline_omschrijving),
UPPER (ins_srtgroep_omschrijving),
UPPER (ins_srtdeel_code),
UPPER (ins_srtdeel_omschrijving);
v_discipline_key NUMBER (10);
v_srtgroep_key NUMBER (10);
ccount NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errormsg := 'Fout bij bepalen discipline';
SELECT ins_discipline_key
INTO v_discipline_key
FROM ins_tab_discipline
WHERE ins_discipline_verwijder IS NULL
AND ins_discipline_module = 'INS'
AND UPPER (TRIM (ins_discipline_omschrijving)) = rec.ins_discipline_upper;
v_errormsg := 'Fout bij bepalen groepsoort';
SELECT ins_srtgroep_key
INTO v_srtgroep_key
FROM ins_srtgroep
WHERE ins_srtgroep_verwijder IS NULL
AND ins_srtgroep_module = 'INS'
AND ins_discipline_key = v_discipline_key
AND TRIM (ins_srtgroep_upper) = rec.ins_srtgroep_upper;
v_errormsg :=
'Fout bij toevoegen objectsoort [' || rec.ins_srtdeel_omschrijving || ']';
SELECT COUNT ( * )
INTO ccount
FROM ins_srtdeel
WHERE ins_srtdeel_verwijder IS NULL
AND ins_srtdeel_module = 'INS'
AND ins_srtgroep_key = v_srtgroep_key
AND TRIM (ins_srtdeel_upper) = rec.ins_srtdeel_upper;
IF ccount = 0
THEN
-- binding 17 betekent ruimtegebonden of persoonsgebonden
INSERT INTO ins_srtdeel (ins_srtgroep_key,
ins_srtdeel_module,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
ins_srtdeel_binding)
VALUES (v_srtgroep_key,
'INS',
rec.ins_srtdeel_code,
rec.ins_srtdeel_omschrijving,
17);
v_count_update := v_count_update + 1;
END IF;
COMMIT;
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_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Objectsoorten/aantal ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'Objectsoorten/aantal toegevoegd: ' || TO_CHAR (v_count_update),
'');
COMMIT;
END;
-- SUBPROC
-- p_srtkenmerkgroepwaarde = '234|1=37-ZB-DR'
-- Ofwel: srtkenmerk_key|groep=waarde
PROCEDURE upsert_inskenmerk (p_deel_key IN NUMBER,
p_srtkenmerkgroepwaarde IN VARCHAR2)
AS
v_kenmerk_key NUMBER;
v_srtkenmerk_key NUMBER;
v_groep NUMBER;
v_waarde VARCHAR(4000);
v_srtkenmerk_type VARCHAR2 (1);
ccount NUMBER;
v_objectnaam VARCHAR2 (30);
v_kolomnaam VARCHAR2 (30);
v_kolomtxt VARCHAR2 (30);
sql_stmt VARCHAR2 (1000);
v_kenmerkdeel_key NUMBER;
l_cursor_1 INTEGER;
l_rowsprocessed NUMBER DEFAULT 0;
BEGIN
IF p_srtkenmerkgroepwaarde IS NOT NULL
THEN
v_errormsg := 'Fout bij bepalen kenmerk van soort [' || p_srtkenmerkgroepwaarde || ']';
v_srtkenmerk_key := fac.safe_to_number (
SUBSTR (p_srtkenmerkgroepwaarde, 1, INSTR (p_srtkenmerkgroepwaarde, '|') - 1));
v_groep := fac.safe_to_number (
SUBSTR (p_srtkenmerkgroepwaarde,
INSTR (p_srtkenmerkgroepwaarde, '|') + 1,
INSTR (p_srtkenmerkgroepwaarde, '=') - 1 - INSTR (p_srtkenmerkgroepwaarde, '|')));
v_waarde := SUBSTR (p_srtkenmerkgroepwaarde, INSTR (p_srtkenmerkgroepwaarde, '=') + 1);
SELECT k.ins_kenmerk_key, sk.ins_srtkenmerk_kenmerktype
INTO v_kenmerk_key, v_srtkenmerk_type
FROM ins_deel d,
ins_srtdeel sd,
ins_srtgroep sg,
ins_v_aanwezigkenmerk k,
ins_v_aanwezigsrtkenmerk sk
WHERE d.ins_deel_key = p_deel_key
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND k.ins_srtkenmerk_key = v_srtkenmerk_key
AND k.ins_kenmerk_groep = v_groep
AND ( (k.ins_srtinstallatie_key = sd.ins_srtdeel_key
AND k.ins_kenmerk_niveau = 'S')
OR (k.ins_srtinstallatie_key = sg.ins_srtgroep_key
AND k.ins_kenmerk_niveau = 'G')
OR (k.ins_srtinstallatie_key = sg.ins_discipline_key
AND k.ins_kenmerk_niveau = 'D'))
AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key;
IF v_waarde IS NOT NULL
THEN
IF v_srtkenmerk_type IN ('R', 'S')
THEN
v_errormsg := 'Fout bij bepalen eigen tabel';
SELECT COUNT ( * )
INTO ccount
FROM ins_srtkenmerk sk, fac_kenmerkdomein d
WHERE sk.ins_srtkenmerk_key = v_srtkenmerk_key
AND sk.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key IS NOT NULL;
v_errormsg := 'Fout bij bepalen nieuwe waarde [' || v_waarde || ']';
IF ccount = 1
THEN -- Eigen tabel
SELECT TO_CHAR (ud.fac_usrdata_key)
INTO v_waarde
FROM ins_srtkenmerk sk, fac_kenmerkdomein d, fac_v_aanwezigusrdata ud
WHERE sk.ins_srtkenmerk_key = v_srtkenmerk_key
AND sk.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_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 ins_srtkenmerk sk, fac_kenmerkdomein d
WHERE sk.ins_srtkenmerk_key = v_srtkenmerk_key
AND sk.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key IS NULL;
sql_stmt :=
'SELECT MAX ('
|| v_kolomnaam
|| ') FROM '
|| v_objectnaam
|| ' WHERE UPPER (TRIM ('
|| v_kolomtxt
|| ')) = UPPER (:pwaarde)';
l_cursor_1 := DBMS_SQL.open_cursor;
DBMS_SQL.parse (l_cursor_1, sql_stmt, DBMS_SQL.native);
DBMS_SQL.BIND_VARIABLE(l_cursor_1,':pwaarde', v_waarde);
DBMS_SQL.define_column(l_cursor_1, 1, v_waarde, 255);
l_rowsprocessed := DBMS_SQL.execute_and_fetch (l_cursor_1);
DBMS_SQL.column_value (l_cursor_1, 1, v_waarde);
DBMS_SQL.close_cursor(l_cursor_1);
END IF;
ELSE -- C(Karakter)/D(Datum)/N(Numeriek)/X(Bestandsnaam)
NULL; -- v_waarde := p_waarde;
END IF;
v_errormsg := 'Fout bij bepalen huidige waarde';
SELECT COUNT ( * ), MAX (ins_kenmerkdeel_key)
INTO ccount, v_kenmerkdeel_key
FROM ins_v_aanwezigkenmerkdeel
WHERE ins_deel_key = p_deel_key AND ins_kenmerk_key = v_kenmerk_key;
IF v_srtkenmerk_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 || ']';
INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde)
VALUES (p_deel_key, v_kenmerk_key, v_waarde);
ELSE
v_errormsg := 'Fout bij bijwerken waarde [' || v_waarde || ']';
UPDATE ins_kenmerkdeel
SET ins_kenmerkdeel_waarde = v_waarde
WHERE ins_kenmerkdeel_key = v_kenmerkdeel_key;
END IF;
ELSE
-- Verwijder kenmerken die als bestaan maar met de nieuwe import leeg zijn.
DELETE ins_kenmerkdeel
WHERE ins_kenmerk_key = v_kenmerk_key
AND ins_deel_key = p_deel_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,
'upsert_inskenmerk');
END;
-- SUBPROC
PROCEDURE add_deel (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT ins_discipline_omschrijving,
ins_srtgroep_omschrijving,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
ins_deel_omschrijving,
ins_deel_opmerking,
alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr,
reserveerbaar,
res_discipline_omschrijving,
res_deel_eenheid,
res_deel_prijs,
res_deel_alg_level,
prs_perslid_matchcode,
prs_perslid_matchwaarde,
ins_kenmerkwaarde1,
ins_kenmerkwaarde2,
ins_kenmerkwaarde3,
ins_kenmerkwaarde4,
ins_kenmerkwaarde5,
ins_kenmerkwaarde6,
ins_kenmerkwaarde7,
ins_kenmerkwaarde8,
ins_kenmerkwaarde9,
ins_kenmerkwaarde10,
ins_kenmerkwaarde11,
ins_kenmerkwaarde12,
ins_kenmerkwaarde13,
ins_kenmerkwaarde14,
ins_kenmerkwaarde15,
ins_kenmerkwaarde16,
ins_kenmerkwaarde17,
ins_kenmerkwaarde18,
ins_kenmerkwaarde19,
ins_kenmerkwaarde20,
ins_deel_aanmaak,
ins_deel_vervaldatum,
ins_deel_aantal
FROM fac_imp_ins;
v_discipline_key NUMBER (10);
v_rdiscipline_key NUMBER (10);
v_srtgroep_key NUMBER (10);
v_srtdeel_key NUMBER (10);
v_locatie_key NUMBER (10);
v_gebouw_key NUMBER (10);
v_verdieping_key NUMBER (10);
v_ruimte_key NUMBER (10);
v_matchkolom VARCHAR2 (255);
sql_stmt VARCHAR2 (1000);
v_ruimte_type VARCHAR2 (10);
v_deel_key NUMBER (10);
ccount NUMBER (10);
pcount NUMBER (10);
v_count_tot NUMBER (10);
v_count_insnew NUMBER (10);
v_count_insupd NUMBER (10);
v_count_resnew NUMBER (10);
v_srtnoti_code VARCHAR2 (6);
l_cursor_1 INTEGER;
l_rowsprocessed NUMBER DEFAULT 0;
v_ins_deel_aanmaak_d DATE;
v_ins_deel_vervaldatum_d DATE;
v_ins_deel_aantal_n NUMBER(8,2);
BEGIN
v_count_tot := 0;
v_count_insnew := 0;
v_count_insupd := 0;
v_count_resnew := 0;
v_aanduiding := '';
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_ins_deel_aanmaak_d := rec.ins_deel_aanmaak;
v_ins_deel_vervaldatum_d := rec.ins_deel_vervaldatum;
v_ins_deel_aantal_n := rec.ins_deel_aantal;
v_aanduiding :=
'['
|| rec.ins_discipline_omschrijving
|| '|'
|| rec.ins_srtgroep_omschrijving
|| '|'
|| rec.ins_srtdeel_code
|| '|'
|| rec.ins_srtdeel_omschrijving
|| '|'
|| rec.ins_deel_omschrijving
|| '] ';
v_errormsg := 'Fout bij bepalen discipline';
SELECT ins_discipline_key
INTO v_discipline_key
FROM ins_tab_discipline
WHERE ins_discipline_verwijder IS NULL AND ins_discipline_module = 'INS'
AND UPPER (TRIM (ins_discipline_omschrijving)) =
UPPER (rec.ins_discipline_omschrijving);
v_errormsg := 'Fout bij bepalen groepsoort';
SELECT ins_srtgroep_key
INTO v_srtgroep_key
FROM ins_srtgroep
WHERE ins_srtgroep_verwijder IS NULL
AND ins_srtgroep_module = 'INS'
AND ins_discipline_key = v_discipline_key
AND TRIM (ins_srtgroep_upper) = UPPER (rec.ins_srtgroep_omschrijving);
v_errormsg := 'Fout bij bepalen objectsoort';
SELECT ins_srtdeel_key
INTO v_srtdeel_key
FROM ins_srtdeel
WHERE ins_srtdeel_verwijder IS NULL
AND ins_srtdeel_module = 'INS'
AND ins_srtgroep_key = v_srtgroep_key
AND TRIM (UPPER(ins_srtdeel_code)) = UPPER (rec.ins_srtdeel_code)
AND TRIM (ins_srtdeel_upper) = UPPER (rec.ins_srtdeel_omschrijving);
v_locatie_key := NULL;
IF rec.alg_locatie_code IS NOT NULL
THEN -- ruimtegebonden object
v_errormsg := 'Fout bij bepalen locatie [' || rec.alg_locatie_code || ']';
SELECT alg_locatie_key
INTO v_locatie_key
FROM alg_v_aanweziglocatie
WHERE UPPER (TRIM (alg_locatie_code)) = UPPER (rec.alg_locatie_code);
v_errormsg := 'Fout bij bepalen gebouw [' || rec.alg_gebouw_code || ']';
SELECT alg_gebouw_key
INTO v_gebouw_key
FROM alg_v_aanweziggebouw
WHERE alg_locatie_key = v_locatie_key
AND UPPER (TRIM (alg_gebouw_code)) = UPPER (rec.alg_gebouw_code);
v_errormsg :=
'Fout bij bepalen verdieping [' || rec.alg_verdieping_volgnr || ']';
SELECT alg_verdieping_key
INTO v_verdieping_key
FROM alg_v_aanwezigverdieping
WHERE alg_gebouw_key = v_gebouw_key
AND alg_verdieping_volgnr = rec.alg_verdieping_volgnr;
v_errormsg := 'Fout bij bepalen ruimte [' || rec.alg_ruimte_nr || ']';
SELECT alg_ruimte_key
INTO v_ruimte_key
FROM alg_v_aanwezigruimte
WHERE alg_verdieping_key = v_verdieping_key
AND TRIM (alg_ruimte_upper_nr) = UPPER (rec.alg_ruimte_nr);
v_ruimte_type := 'R';
-- ruimtegebonden objecten hebben een unieke ID binnen locatie
SELECT COUNT ( * )
INTO ccount
FROM ins_v_aanwezigdeel
WHERE ins_deel_module = 'INS'
AND ins_srtdeel_key = v_srtdeel_key
AND ins_alg_ruimte_type = v_ruimte_type -- R
AND ins_alg_locatie_key = v_locatie_key
AND TRIM (ins_deel_upper) = UPPER (rec.ins_deel_omschrijving);
ELSE -- persoonsgebonden object
v_matchkolom := '';
CASE rec.prs_perslid_matchcode
WHEN '1'
THEN
v_matchkolom := 'PRS_PERSLID_EMAIL';
WHEN '10'
THEN
v_matchkolom := 'PRS_PERSLID_EMAIL';
WHEN '2'
THEN
v_matchkolom := 'PRS_PERSLID_OSLOGIN';
WHEN '20'
THEN
v_matchkolom := 'PRS_PERSLID_OSLOGIN';
WHEN '3'
THEN
v_matchkolom := 'PRS_PERSLID_KEY';
WHEN '30'
THEN
v_matchkolom := 'PRS_PERSLID_KEY';
WHEN '4'
THEN
v_matchkolom := 'PRS_PERSLID_NR';
WHEN '40'
THEN
v_matchkolom := 'PRS_PERSLID_NR';
WHEN '5'
THEN
v_matchkolom := 'PRS_PERSLID_VOORNAAM || '' '' || PRS_PERSLID_NAAM';
WHEN '50'
THEN
v_matchkolom := 'PRS_PERSLID_VOORNAAM || '' '' || PRS_PERSLID_NAAM';
ELSE
-- voor developers only: indien geen code wordt gebruikt,
-- kan als persoonmatchcode een kolom uit de perslid-tabel
-- worden ingevoerd, bijvoorbeeld: prs_perslid_oslogin2
v_matchkolom := rec.prs_perslid_matchcode;
END CASE;
v_errormsg := 'Fout bij bepalen persoon [' || rec.prs_perslid_matchwaarde || ']';
sql_stmt :=
'SELECT MIN (prs_perslid_key), COUNT (prs_perslid_key) '
|| ' FROM prs_v_aanwezigperslid '
|| ' WHERE UPPER ('
|| v_matchkolom
|| ') = UPPER (:pwaarde) '
|| 'GROUP BY prs_perslid_key';
--dbms_output.put_line(rec.prs_perslid_matchwaarde);
l_cursor_1 := DBMS_SQL.open_cursor;
DBMS_SQL.parse (l_cursor_1, sql_stmt, DBMS_SQL.native);
DBMS_SQL.BIND_VARIABLE(l_cursor_1,':pwaarde', rec.prs_perslid_matchwaarde);
DBMS_SQL.define_column(l_cursor_1, 1, v_ruimte_key);
DBMS_SQL.define_column(l_cursor_1, 2, pcount);
l_rowsprocessed := DBMS_SQL.execute_and_fetch (l_cursor_1);
-- Bij no rows gaat-ie naar de exception. Moet daar dan nog een cursor dicht??
DBMS_SQL.column_value (l_cursor_1, 1, v_ruimte_key);
DBMS_SQL.column_value (l_cursor_1, 2, pcount);
DBMS_SQL.close_cursor(l_cursor_1);
--dbms_output.put_line(pcount);
IF pcount != 1
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Kan persoon niet 1-duidig bepalen');
END IF;
v_errormsg := 'Fout bij bepalen type koppeling';
IF rec.prs_perslid_matchcode in ('10','20','30','40','50') THEN
v_ruimte_type := 'A' ;
-- Koppeling aan Afdeling van desbetreffende
SELECT prs_afdeling_key
INTO v_ruimte_key
FROM prs_v_aanwezigperslid
WHERE prs_perslid_key = v_ruimte_key;
ELSE
v_ruimte_type := 'P' ;
END IF;
-- persoonsgebonden objecten hebben een unieke ID
SELECT COUNT ( * )
INTO ccount
FROM ins_v_aanwezigdeel
WHERE ins_deel_module = 'INS'
AND ins_srtdeel_key = v_srtdeel_key
AND ins_alg_ruimte_type = v_ruimte_type -- P
AND ins_alg_locatie_key IS NULL
AND TRIM (ins_deel_upper) = UPPER (rec.ins_deel_omschrijving);
END IF;
IF ccount = 0
THEN -- toevoegen object!
v_errormsg := 'Fout bij toevoegen INS-object';
INSERT INTO ins_deel (ins_discipline_key,
ins_srtdeel_key,
ins_deel_module,
ins_deel_omschrijving,
ins_deel_opmerking,
ins_alg_ruimte_key,
ins_alg_ruimte_type,
ins_alg_locatie_key,
ins_deel_aanmaak,
ins_deel_vervaldatum,
ins_deel_aantal)
VALUES (v_discipline_key,
v_srtdeel_key,
'INS',
rec.ins_deel_omschrijving,
rec.ins_deel_opmerking,
v_ruimte_key,
v_ruimte_type,
v_locatie_key,
v_ins_deel_aanmaak_d,
v_ins_deel_vervaldatum_d,
v_ins_deel_aantal_n)
RETURNING ins_deel_key
INTO v_deel_key;
-- Overslaan als reserveerbaar en geen RES-discipline of andersom,
-- dus verder geen controle op eventuele inconsistentie!
IF (rec.reserveerbaar = 1 AND rec.res_discipline_omschrijving IS NOT NULL)
THEN
v_errormsg :=
'Fout bij bepalen RES-discipline ['
|| rec.res_discipline_omschrijving
|| ']';
SELECT ins_discipline_key
INTO v_rdiscipline_key
FROM res_discipline
WHERE ins_discipline_verwijder IS NULL AND ins_discipline_module = 'RES'
AND UPPER (TRIM (ins_discipline_omschrijving)) =
UPPER (rec.res_discipline_omschrijving);
v_errormsg := 'Fout bij toevoegen RES-object';
INSERT INTO res_deel (res_ins_deel_key,
res_deel_omschrijving,
res_deel_opmerking,
res_deel_eenheid,
res_deel_prijs,
res_discipline_key,
res_deel_alg_level)
VALUES (v_deel_key,
rec.ins_deel_omschrijving,
rec.ins_deel_opmerking,
rec.res_deel_eenheid,
rec.res_deel_prijs,
v_rdiscipline_key,
rec.res_deel_alg_level);
v_count_resnew := v_count_resnew + 1;
END IF;
v_srtnoti_code := 'INSNEW';
v_count_insnew := v_count_insnew + 1;
ELSE -- bijwerken object!
v_errormsg := 'Fout bij bepalen INS-object';
SELECT ins_deel_key
INTO v_deel_key
FROM ins_v_aanwezigdeel
WHERE ins_deel_module = 'INS'
AND ins_srtdeel_key = v_srtdeel_key
AND ins_alg_ruimte_type = v_ruimte_type -- R/P
AND COALESCE (ins_alg_locatie_key, -1) = COALESCE (v_locatie_key, -1) -- gevuld/NULL
AND TRIM (ins_deel_upper) = UPPER (rec.ins_deel_omschrijving);
v_srtnoti_code := 'INSUPD';
v_count_insupd := v_count_insupd + 1;
END IF;
-- NULL-waarden resulteren NIET in het wissen van kenmerkvelden
-- (bijwerken kan wel, maar wissen dus niet)! ins_kenmerkwaarde1
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde1);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde2);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde3);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde4);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde5);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde6);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde7);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde8);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde9);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde10);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde11);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde12);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde13);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde14);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde15);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde16);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde17);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde18);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde19);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde20);
fac.trackaction (v_srtnoti_code,
v_deel_key,
sys_context('USERENV', 'CLIENT_IDENTIFIER'),
NULL,
NULL);
COMMIT;
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,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'INS-objecten/aantal ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'INS-objecten/aantal toegevoegd: ' || TO_CHAR (v_count_insnew),
'');
fac.imp_writelog (p_import_key,
'S',
'INS-objecten/aantal bijgewerkt: ' || TO_CHAR (v_count_insupd),
'');
fac.imp_writelog (p_import_key,
'S',
'RES-objecten/aantal toegevoegd: ' || TO_CHAR (v_count_resnew),
'');
COMMIT;
END;
-- MAIN
BEGIN
add_kostensoort (p_import_key);
add_insdiscipline (p_import_key);
add_resdiscipline (p_import_key);
add_srtgroep (p_import_key);
add_srtdeel (p_import_key);
add_deel (p_import_key);
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,
'E',
v_errormsg,
'Importproces objecten afgebroken!');
END fac_update_ins2;
/
------ payload end ------
SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 0); END;
/
COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile