Files
Customer/SCHG/schg.sql
2025-06-02 10:20:42 +00:00

3567 lines
166 KiB
SQL
Raw Blame History

--
-- $Id$
--
-- Script containing customer specific sql statements for the FACILITOR database SCHG
DEFINE thisfile = 'SCHG.SQL'
DEFINE dbuser = 'SCHG'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT;
WHENEVER SQLERROR CONTINUE;
SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL;
SPOOL &fcltlogfile
WHENEVER SQLERROR EXIT;
SELECT adm.checkscriptcust('&dbuser') AS fcltcusttxt FROM DUAL;
WHENEVER SQLERROR CONTINUE;
---------------------------------------
PROMPT &fcltcusttxt
---------------------------------------
SET DEFINE OFF
------ payload begin ------
-------------------------------
--- DOMEINVIEWS ---------------
-------------------------------
-- Lijst van mederwerkers
CREATE OR REPLACE VIEW schg_v_medewerkers
(
PRS_PERSLID_KEY,
PRS_PERSLID_NAAM,
PRS_PERSLID_NR,
PRS_PERSLID_EMAIL,
PRS_PERSLID_MOBIEL,
PRS_PERSLID_VERWIJDER
)
AS
SELECT
p.prs_perslid_key,
CASE WHEN p.prs_perslid_tussenvoegsel IS NULL
THEN p.prs_perslid_voornaam || ' ' || p.prs_perslid_naam || ' (' || sp.prs_srtperslid_omschrijving || ')'
ELSE p.prs_perslid_voornaam || ' ' || p.prs_perslid_tussenvoegsel || ' ' || p.prs_perslid_naam || ' (' || sp.prs_srtperslid_omschrijving || ')'
END
prs_perslid_naam,
p.prs_perslid_nr,
p.prs_perslid_email,
p.prs_perslid_mobiel,
p.prs_perslid_verwijder
FROM
prs_perslid p,
prs_srtperslid sp,
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 = 21 -- bedrijfs_key Scharenborggroep -
AND p.prs_srtperslid_key = sp.prs_srtperslid_key
ORDER BY sp.prs_srtperslid_omschrijving, p.prs_perslid_voornaam, p.prs_perslid_naam ;
CREATE OR REPLACE VIEW schg_v_businessunits
(
PRS_AFDELING_KEY,
PRS_AFDELING_NAAM,
PRS_BEDRIJF_NAAM,
PRS_AFDELING_VERWIJDER
)
AS
SELECT a.prs_afdeling_key,
a.prs_afdeling_naam3,
b.prs_bedrijf_naam,
a.prs_afdeling_verwijder
FROM prs_v_afdeling a, prs_bedrijf b
WHERE a.prs_bedrijf_key = b.prs_bedrijf_key
AND a.niveau = 1
AND a.prs_afdeling_verwijder IS NULL
AND a.prs_bedrijf_key = 21 ;
CREATE OR REPLACE VIEW schg_v_leveranciers
(
PRS_BEDRIJF_KEY,
PRS_BEDRIJF_NAAM,
PRS_BEDRIJF_PLAATS,
PRS_BEDRIJF_VERWIJDER
)
AS
SELECT
b.prs_bedrijf_key,
b.prs_bedrijf_naam,
b.prs_bedrijf_bezoek_plaats,
b.prs_bedrijf_verwijder
FROM prs_bedrijf b
WHERE prs_bedrijf_intern IS NULL
AND b.prs_bedrijf_leverancier = 1
ORDER BY b.prs_bedrijf_naam;
CREATE OR REPLACE VIEW schg_v_contractanten
(
PRS_BEDRIJF_KEY,
PRS_BEDRIJF_NAAM,
PRS_BEDRIJF_PLAATS,
PRS_BEDRIJF_VERWIJDER
)
AS
SELECT
b.prs_bedrijf_key,
b.prs_bedrijf_naam,
b.prs_bedrijf_bezoek_plaats,
b.prs_bedrijf_verwijder
FROM prs_bedrijf b
WHERE prs_bedrijf_intern IS NULL
AND b.prs_bedrijf_contract = 1
ORDER BY b.prs_bedrijf_naam;
CREATE OR REPLACE VIEW schg_v_simkaarten
(
INS_DEEL_KEY,
SIMKAART
)
AS
SELECT
v.ins_deel_key,
CASE
WHEN d.ins_deel_vervaldatum IS NOT NULL THEN v.ins_deel_upper || ' (vervaldatum ' || to_char(d.ins_deel_vervaldatum,'dd-mm-yyyy') || ')'
ELSE v.ins_deel_upper END
simkaart
FROM ins_v_deel_gegevens v, ins_deel d
WHERE v.ins_discipline_key = 182 -- SIM-kaarten
AND v.ins_srtdeel_key = 5 -- SIM-kaarten
AND v.ins_deel_key = d.ins_deel_key
AND d.ins_deel_verwijder IS NULL
AND (d.ins_deel_vervaldatum IS NULL OR TRUNC(d.ins_deel_vervaldatum) > TRUNC(sysdate) ) ;
CREATE OR REPLACE VIEW schg_v_contracten_vh -- verkoop huur
(
CNT_CONTRACT_KEY,
OMSCHRIJVING, -- Soort - Nr.versie - Omschrijving
CONTRACTANT, -- Voor extra_tekstkolom
VERVALDATUM -- Alle contracten die al meer dan 2 maanden verlopen zijn, worden niet meer getoond in keuzelijst
)
AS
SELECT c.cnt_contract_key,
c.cnt_contract_nummer_intern
|| DECODE (c.cnt_contract_versie,
NULL, '.0',
'.' || c.cnt_contract_versie)
|| ' - '
|| c.cnt_contract_omschrijving
|| ' (' || TO_CHAR(c.cnt_contract_looptijd_tot, 'dd-mm-yyyy') || ')'
omschrijving,
(SELECT prs_bedrijf_naam
FROM prs_bedrijf
WHERE prs_bedrijf_key = c.cnt_prs_bedrijf_key)
contractant,
c.cnt_contract_looptijd_tot + 60
vervaldatum
FROM cnt_contract c, ins_tab_discipline d
WHERE c.ins_discipline_key = d.ins_discipline_key
AND d.ins_discipline_module = 'CNT'
AND d.ins_discipline_key = 22 -- huurcontract verkoop extern
;
CREATE OR REPLACE VIEW schg_v_contracten_ih --intern huurcontract
(
CNT_CONTRACT_KEY,
OMSCHRIJVING, -- Soort - Nr.versie - Omschrijving
CONTRACTANT, -- Voor extra_tekstkolom
VERVALDATUM -- Alle contracten die al meer dan 2 maanden verlopen zijn, worden niet meer getoond in keuzelijst
)
AS
SELECT c.cnt_contract_key,
c.cnt_contract_nummer_intern
|| DECODE (c.cnt_contract_versie,
NULL, '.0',
'.' || c.cnt_contract_versie)
|| ' - '
|| c.cnt_contract_omschrijving
|| ' (' || TO_CHAR(c.cnt_contract_looptijd_tot, 'dd-mm-yyyy') || ')'
omschrijving,
(SELECT prs_bedrijf_naam
FROM prs_bedrijf
WHERE prs_bedrijf_key = c.cnt_prs_bedrijf_key)
contractant,
c.cnt_contract_looptijd_tot + 60
vervaldatum
FROM cnt_contract c, ins_tab_discipline d,
(
SELECT prs_bedrijf_key,
prs_bedrijf_naam,
CASE WHEN flx.getflex ('PRS', 1000, b.prs_bedrijf_key, 'B') IS NULL THEN 0 ELSE 1 END
contract_partij_intern
FROM prs_bedrijf b
) bi -- bedrijf_intern
WHERE c.ins_discipline_key = d.ins_discipline_key
AND d.ins_discipline_module = 'CNT'
AND d.ins_discipline_key = 21 -- huurcontract vg
AND c.cnt_prs_bedrijf_key = bi.prs_bedrijf_key
AND bi.contract_partij_intern = 1
;
-------------------------------
--- RAPPORTAGES - DWH ---------
-------------------------------
CREATE OR REPLACE VIEW SCHG_V_CNT_DWH_HUURVG
(
CONTRACTSOORT,
CONTRACTTYPE, -- inkoop / verkoop
CONTRACT_NR,
CONTRACT_KEY,
ORGANISATIE_CODE,
ORGANISATIE_NAAM,
ORGANISATIE_BU_NAAM,
CONTRACT_KOSTENPLAATS_CODE,
CONTRACT_KOSTENPLAATS_OMS,
CONTRACT_PARTIJ,
CONTRACT_PARTIJ_INTERN,
CONTRACT_LOOPTIJD_VAN,
CONTRACT_LOOPTIJD_TOT,
CONTRACT_FASE_ACTIEF,
CONTRACT_STATUS,
CONTRACT_STATUS_SCHG,
CONTRACT_OPGEZEGD,
BESTEDING_CONTRACTUEEL,
BESTEDING_AVOND,
BESTEDING_DAGDEEL_BEHANDELING,
BESTEDING_DAGDEEL_OVERIG,
POD_AGENDA_AANTAL, -- aantal agenda's gekoppeld
LOCATIE_GEKOPPELD,
OH_ONDERHUUR_AANTAL -- aantal onderhuur-contracten gekoppeld
)
AS
SELECT d.ins_discipline_omschrijving
contractsoort,
CASE
WHEN dp.cnt_disc_params_verkoopcontr = 1 THEN 'verkoop'
ELSE 'inkoop'
END
contracttype,
c.cnt_contract_nummer_intern
|| '.'
|| DECODE (c.cnt_contract_versie,
NULL, '0',
c.cnt_contract_versie)
contract_nr,
c.cnt_contract_key,
cbu.prs_afdeling_naam2
organisatie_code,
cbu.prs_afdeling_naam3
organisatie_naam,
cbu.bu_naam
organisatie_bedrijfsnaam, -- BU-Scharenborggroep
kp.prs_kostenplaats_nr
contract_kostenplaats_code,
kp.prs_kostenplaats_omschrijving
contract_kostenplaats_oms,
b.prs_bedrijf_naam
contract_partij,
CASE WHEN flx.getflex ('PRS', 1000, b.prs_bedrijf_key, 'B') IS NULL THEN 0 ELSE 1 END
contract_partij_intern,
c.cnt_contract_looptijd_van
contract_looptijd_van,
c.cnt_contract_looptijd_tot
contract_looptijd_tot,
DECODE (cnt.cnt_contract_status (
c.cnt_contract_looptijd_van,
cnt.cnt_getrappeldatum (c.cnt_contract_key),
cnt.cnt_getopzegdatum (c.cnt_contract_key),
c.cnt_contract_looptijd_tot),
0, lcl.l ('lcl_cnt_future'),
1, lcl.l ('lcl_cnt_topical'),
2, lcl.l ('lcl_cnt_warn'),
3, lcl.l ('lcl_cnt_cancel'),
4, lcl.l ('lcl_cnt_past'))
contract_fase_actief,
DECODE (
c.cnt_contract_status,
0, DECODE (fac.getsetting ('cnt_contract_approval'),
1, lcl.l ('lcl_cnt_active_approval'),
lcl.l ('lcl_cnt_active')),
1, lcl.l ('lcl_cnt_inactive'),
2, lcl.l ('lcl_cnt_new'),
3, lcl.l ('lcl_cnt_forapproval'))
contract_status,
flx.getdomeinwaarde(2,
flx.getflex ('CNT',
COALESCE(
(SELECT MAX(k.cnt_kenmerk_key)
FROM cnt_kenmerk k
WHERE k.cnt_srtkenmerk_key = 22
AND k.cnt_kenmerk_verwijder IS NULL
AND k.cnt_srtcontract_key IS NULL), -1),
c.cnt_contract_key)
)
contract_status_schg,
flx.getflex ('CNT', 19, c.cnt_contract_key)
contract_opgezegd,
flx.getdomeinwaarde(5,
flx.getflex ('CNT',
COALESCE(
(SELECT MAX(k.cnt_kenmerk_key)
FROM cnt_kenmerk k
WHERE k.cnt_srtkenmerk_key = 25
AND k.cnt_kenmerk_omschrijving = 'Contractueel?'
AND k.cnt_kenmerk_verwijder IS NULL
AND k.cnt_srtcontract_key = c.ins_discipline_key), -1),
c.cnt_contract_key)
)
besteding_contractueel,
flx.getdomeinwaarde(5,
flx.getflex ('CNT',
COALESCE(
(SELECT MAX(k.cnt_kenmerk_key)
FROM cnt_kenmerk k
WHERE k.cnt_srtkenmerk_key = 25
AND k.cnt_kenmerk_omschrijving = 'Avonduren mogelijk?'
AND k.cnt_kenmerk_verwijder IS NULL
AND k.cnt_srtcontract_key = c.ins_discipline_key), -1),
c.cnt_contract_key)
)
besteding_avond,
flx.getflex (
'CNT',
COALESCE(
(SELECT MAX(k.cnt_kenmerk_key)
FROM cnt_kenmerk k
WHERE k.cnt_srtkenmerk_key = 12
AND k.cnt_kenmerk_omschrijving = 'Dagdeel - behandeling'
AND k.cnt_kenmerk_verwijder IS NULL
AND k.cnt_srtcontract_key = c.ins_discipline_key), -1),
c.cnt_contract_key)
besteding_dagdeel_behandeling,
flx.getflex (
'CNT',
COALESCE(
(SELECT MAX(k.cnt_kenmerk_key)
FROM cnt_kenmerk k
WHERE k.cnt_srtkenmerk_key = 12
AND k.cnt_kenmerk_omschrijving = 'Dagdeel - overig'
AND k.cnt_kenmerk_verwijder IS NULL
AND k.cnt_srtcontract_key = c.ins_discipline_key), -1),
c.cnt_contract_key)
besteding_dagdeel_overig,
am.agenda_aantal,
cl.locatie_gekoppeld,
oh.oh_aantal
FROM cnt_contract c,
prs_kostenplaats kp,
ins_tab_discipline d,
cnt_disc_params dp,
(SELECT a.prs_afdeling_key,
a.prs_afdeling_naam2,
a.prs_afdeling_naam3,
a1.prs_afdeling_naam3
bu_naam,
b.prs_bedrijf_naam
FROM prs_v_afdeling a, prs_bedrijf b, prs_v_afdeling_boom ab, prs_v_afdeling a1
WHERE a.prs_bedrijf_key = b.prs_bedrijf_key AND a.prs_afdeling_key = ab.prs_afdeling_key AND ab.prs_afdeling_key1 = a1.prs_afdeling_key
AND a.prs_afdeling_verwijder IS NULL) cbu, -- bu_contract_afdeling
prs_bedrijf b,
( SELECT c.cnt_contract_key,
COUNT (kc.cnt_kenmerkcontract_key)
agenda_aantal,
MAX (kc.cnt_kenmerkcontract_waarde)
agenda_key_fac
FROM cnt_contract c, cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE c.cnt_contract_key = kc.cnt_contract_key
AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND kc.cnt_kenmerkcontract_verwijder IS NULL
AND k.cnt_kenmerk_verwijder IS NULL
AND k.cnt_srtkenmerk_key = 26 -- POD_AGENDA
GROUP BY c.cnt_contract_key) am, -- agenda_max, - detailgegevens in SCHG_V_CNT_DWH_HUURVG2
( SELECT c.cnt_contract_key,
COUNT (kc.cnt_kenmerkcontract_key)
oh_aantal,
MAX (kc.cnt_kenmerkcontract_waarde)
oh_contract_key
FROM cnt_contract c, cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE c.cnt_contract_key = kc.cnt_contract_key
AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND kc.cnt_kenmerkcontract_verwijder IS NULL
AND k.cnt_kenmerk_verwijder IS NULL
AND k.cnt_srtkenmerk_key IN (23, 24) -- Onderhuur - gekoppelde interne en extern huurcontracten
GROUP BY c.cnt_contract_key) oh, -- Tonen er eentje MAX - detailgegevens in SCHG_V_CNT_DWH_HUURVG3
( SELECT cp.cnt_contract_key,
LISTAGG (
l.alg_locatie_omschrijving
|| ' - '
|| l.alg_locatie_plaats,
', ')
WITHIN GROUP (ORDER BY cp.cnt_contract_plaats_key) AS locatie_gekoppeld
FROM cnt_contract_plaats cp, alg_locatie l
WHERE cp.cnt_alg_plaats_code = 'L'
AND cp.cnt_alg_plaats_key = l.alg_locatie_key
GROUP BY cp.cnt_contract_key) cl -- contract_locatie(s)
WHERE c.prs_kostenplaats_key = kp.prs_kostenplaats_key
AND c.ins_discipline_key = d.ins_discipline_key
AND c.ins_discipline_key IN (21, 22) -- Alleen alle huurcontracten VG en alle huurcontracten VG EXTERNE VERKOOP. De contracten ANDERS sluiten we vooralsnog uit. ACTIE IN PROD KEY 21 en 22
AND d.ins_discipline_key = dp.cnt_ins_discipline_key(+)
AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
AND c.prs_afdeling_key_eig = cbu.prs_afdeling_key
AND c.cnt_contract_key = am.cnt_contract_key(+)
AND c.cnt_contract_key = oh.cnt_contract_key(+)
AND c.cnt_contract_key = cl.cnt_contract_key(+);
CREATE OR REPLACE VIEW SCHG_V_CNT_DWH_HUURVG2
(
CONTRACT_NR,
CONTRACT_KEY,
ORGANISATIE_CODE,
POD_AGENDA_KEY,
VERVALDATUM
)
AS
SELECT c.cnt_contract_nummer_intern
|| '.'
|| DECODE (c.cnt_contract_versie,
NULL, '0',
c.cnt_contract_versie)
contract_nr,
c.cnt_contract_key
contract_key,
cbu.prs_afdeling_naam2
organisatie_code,
t.agenda_key_fac
pod_agenda_key,
t.fac_usrdata_vervaldatum
vervaldatum
FROM cnt_contract c,
prs_kostenplaats kp,
ins_tab_discipline d,
cnt_disc_params dp,
(SELECT a.prs_afdeling_key,
a.prs_afdeling_naam2,
a.prs_afdeling_naam3,
a1.prs_afdeling_naam3
bu_naam,
b.prs_bedrijf_naam
FROM prs_v_afdeling a, prs_bedrijf b, prs_v_afdeling_boom ab, prs_v_afdeling a1
WHERE a.prs_bedrijf_key = b.prs_bedrijf_key AND a.prs_afdeling_key = ab.prs_afdeling_key AND ab.prs_afdeling_key1 = a1.prs_afdeling_key
AND a.prs_afdeling_verwijder IS NULL) cbu, -- bu_contract_afdeling
prs_bedrijf b,
( SELECT c.cnt_contract_key,
kc.cnt_kenmerkcontract_waarde agenda_key_fac
FROM cnt_contract c, cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE c.cnt_contract_key = kc.cnt_contract_key
AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND kc.cnt_kenmerkcontract_verwijder IS NULL
AND k.cnt_kenmerk_verwijder IS NULL
AND k.cnt_srtkenmerk_key = 26 -- POD_AGENDA
) ag, -- agenda,
(
SELECT ud.fac_usrdata_key, SUBSTR (ud.fac_usrdata_code, 5) agenda_key_fac, ud.fac_usrdata_vervaldatum
FROM fac_usrtab ut, fac_usrdata ud
WHERE ut.fac_usrtab_key = ud.fac_usrtab_key
AND ut.fac_usrtab_key = 24 -- eigen tabel POD_AGENDA_2
AND ud.fac_usrdata_verwijder IS NULL
) t -- eigen tabel waar agendas in opgenomen zijn
WHERE c.prs_kostenplaats_key = kp.prs_kostenplaats_key
AND c.ins_discipline_key = d.ins_discipline_key
AND c.ins_discipline_key IN (21) -- Alleen alle huurcontracten VG
AND d.ins_discipline_key = dp.cnt_ins_discipline_key(+)
AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
AND c.prs_afdeling_key_eig = cbu.prs_afdeling_key
AND c.cnt_contract_key = ag.cnt_contract_key(+)
AND ag.agenda_key_fac = t.fac_usrdata_key (+) ;
-- Onderhuur - alle gekoppelde onderhuurcontracten per contract_key
CREATE OR REPLACE VIEW SCHG_V_CNT_DWH_HUURVG3
(
CONTRACT_NR,
CONTRACT_KEY,
ORGANISATIE_CODE,
OH_CONTRACT_KEY,
OH_CONTRACT_SOORT
)
AS
SELECT c.cnt_contract_nummer_intern
|| '.'
|| DECODE (c.cnt_contract_versie,
NULL, '0',
c.cnt_contract_versie)
contract_nr,
c.cnt_contract_key
contract_key,
cbu.prs_afdeling_naam2
organisatie_code,
oh.oh_contract_key
oh_contract_key,
oh.oh_contract_soort
FROM cnt_contract c,
prs_kostenplaats kp,
ins_tab_discipline d,
cnt_disc_params dp,
(SELECT a.prs_afdeling_key,
a.prs_afdeling_naam2,
a.prs_afdeling_naam3,
a1.prs_afdeling_naam3
bu_naam,
b.prs_bedrijf_naam
FROM prs_v_afdeling a, prs_bedrijf b, prs_v_afdeling_boom ab, prs_v_afdeling a1
WHERE a.prs_bedrijf_key = b.prs_bedrijf_key AND a.prs_afdeling_key = ab.prs_afdeling_key AND ab.prs_afdeling_key1 = a1.prs_afdeling_key
AND a.prs_afdeling_verwijder IS NULL) cbu, -- bu_contract_afdeling
prs_bedrijf b,
( SELECT c.cnt_contract_key,
kc.cnt_kenmerkcontract_waarde
oh_contract_key,
CASE WHEN k.cnt_srtkenmerk_key = 23 THEN 'Inkoop Intern'
WHEN k.cnt_srtkenmerk_key = 24 THEN 'Inkoop Extern'
ELSE ''
END
oh_contract_soort
FROM cnt_contract c, cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE c.cnt_contract_key = kc.cnt_contract_key
AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND kc.cnt_kenmerkcontract_verwijder IS NULL
AND k.cnt_kenmerk_verwijder IS NULL
AND k.cnt_srtkenmerk_key IN (23, 24)
) oh -- Onderhuur - gekoppelde interne en extern huurcontracten
WHERE c.prs_kostenplaats_key = kp.prs_kostenplaats_key
AND c.ins_discipline_key = d.ins_discipline_key
AND c.ins_discipline_key IN (21) -- Alleen op Huurcontracten VG
AND d.ins_discipline_key = dp.cnt_ins_discipline_key(+)
AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
AND c.prs_afdeling_key_eig = cbu.prs_afdeling_key
AND c.cnt_contract_key = oh.cnt_contract_key(+)
ORDER BY c.cnt_contract_key;
-------------------------------
--- RAPPORTAGE ---------------
-------------------------------
-- Dit rapport toont alle fouten van vandaag die in de tracking tabel zijn gelogd
CREATE OR REPLACE VIEW SCHG_V_RAP_TOPDESK_LOG
(
TRACKING_KEY,
MELDINGNR,
OPDR_NR,
TRACKING_DATUM,
TRACKING_OMS,
RESPONSE,
AANTAL_X
)
AS
SELECT tracking_key,
meldingnr,
opdr_nr,
tracking_datum,
tracking_oms,
response,
RANK () OVER (PARTITION BY meldingnr ORDER BY tracking_key) aantal_x
FROM (SELECT m.mld_melding_externnr
topdesknr,
TO_CHAR (m.mld_melding_key)
meldingnr,
m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr
opdr_nr,
t.fac_tracking_key
tracking_key,
t.fac_tracking_datum
tracking_datum,
t.fac_tracking_oms
tracking_oms,
CASE
WHEN UPPER (t.fac_tracking_oms) LIKE
'%CREATING CHANGE TOPDESK%'
THEN
fac.safe_to_number (
SUBSTR (t.fac_tracking_oms, 34))
WHEN UPPER (t.fac_tracking_oms) LIKE
'%CREATING INCIDENT TOPDESK%'
THEN
fac.safe_to_number (
SUBSTR (t.fac_tracking_oms, 36))
WHEN UPPER (t.fac_tracking_oms) LIKE
'%UPDATING CHANGE TOPDESK%'
THEN
fac.safe_to_number (
SUBSTR (t.fac_tracking_oms, 34))
WHEN UPPER (t.fac_tracking_oms) LIKE
'%UPDATING INCIDENT TOPDESK%'
THEN
fac.safe_to_number (
SUBSTR (t.fac_tracking_oms, 36))
END
response
FROM fac_tracking t, mld_opdr o, mld_melding m
WHERE t.fac_tracking_refkey = o.mld_opdr_key
AND o.mld_melding_key = m.mld_melding_key
AND ( UPPER (fac_tracking_oms) LIKE
'%CREATING CHANGE TOPDESK%'
OR UPPER (fac_tracking_oms) LIKE
'%CREATING INCIDENT TOPDESK%'
OR UPPER (fac_tracking_oms) LIKE
'%UPDATING CHANGE TOPDESK%'
OR UPPER (fac_tracking_oms) LIKE
'%UPDATING INCIDENT TOPDESK%')
/*
UNION ALL
SELECT m.mld_melding_externnr
topdesknr,
TO_CHAR (m.mld_melding_key)
meldingnr,
m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr
opdr_nr,
t.fac_tracking_key
tracking_key,
t.fac_tracking_datum
tracking_datum,
t.fac_tracking_oms
tracking_oms,
999
response
FROM fac_tracking t, mld_opdr o, mld_melding m
WHERE t.fac_tracking_refkey = o.mld_opdr_key
AND o.mld_melding_key = m.mld_melding_key
AND UPPER (fac_tracking_oms) LIKE '%TOPDESK%'
AND t.fac_srtnotificatie_key IN (225, 228, 59) -- MLDTRK, ORDTRK, MLDDOO
*/
)
WHERE response >= 400 AND TRUNC (SYSDATE) = TRUNC (tracking_datum)
GROUP BY tracking_key,
meldingnr,
opdr_nr,
tracking_datum,
tracking_oms,
response
ORDER BY meldingnr, tracking_datum DESC;
-------------------------------
--- PROCEDURES ---------------
-------------------------------
CREATE OR REPLACE PROCEDURE schg_import_perslid (p_import_key IN NUMBER)
AS
v_seq_of_columns VARCHAR (255);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (200);
v_errorhint VARCHAR2 (200);
-- overige variabelen
v_prs_afdeling_key NUMBER(10);
CURSOR c_afd
IS
SELECT i.fac_imp_file_index, i.prs_perslid_email, i.prs_afdeling_naam,
p.prs_perslid_key,
CASE WHEN p.prs_perslid_key IS NOT NULL
THEN (SELECT a.prs_afdeling_naam FROM prs_perslid pp, prs_afdeling a WHERE pp.prs_afdeling_key = a.prs_afdeling_key AND pp.prs_perslid_key = p.prs_perslid_key )
ELSE NULL
END
prs_afdeling_naam_huidig
FROM fac_imp_perslid i, prs_v_aanwezigperslid p
WHERE fac_import_key = p_import_key
AND i.prs_perslid_email = p.prs_perslid_email (+) ;
-- unieke oslogin binnen deze tenant
CURSOR c_oslogin
IS
SELECT i.fac_imp_file_index,
prs_perslid_email,
prs_perslid_nr,
prs_perslid_oslogin,
prs_perslid_voornaam,
prs_srtperslid_omschrijving,
prs_perslid_key,
( SELECT COUNT (*)
FROM fac_imp_perslid
WHERE prs_perslid_oslogin = i.prs_perslid_oslogin
AND fac_imp_file_index < i.fac_imp_file_index
GROUP BY prs_perslid_oslogin) check_dubbel
FROM fac_imp_perslid i
ORDER BY fac_imp_file_index;
-- unieke oslogin buiten deze tenant
CURSOR c_oslogin_b
IS
SELECT w.fac_imp_file_index,
w.prs_perslid_oslogin,
w.prs_perslid_email,
w.prs_perslid_nr,
w.tenant_import,
v.tenant_prskaart
FROM (
SELECT i.fac_imp_file_index, i.prs_perslid_oslogin, i.prs_perslid_nr, i.prs_perslid_email, i.prs_kenmerk13 tenant_import FROM fac_imp_perslid i WHERE i.prs_afdeling_naam IS NOT NULL AND i.prs_perslid_oslogin IS NOT NULL
) w,
(
SELECT p.prs_perslid_key,
p.prs_perslid_oslogin,
p.prs_perslid_email,
(SELECT kw.prs_kenmerklink_waarde
FROM prs_kenmerklink kw
WHERE kw.prs_kenmerk_key = 1060
AND kw.prs_kenmerklink_niveau = 'P'
AND kw.prs_link_key = p.prs_perslid_key)
tenant_prskaart -- het importbestand_schg in personenkaart
FROM prs_v_aanwezigperslid p,
prs_v_afdeling_boom ab
WHERE p.prs_afdeling_key = ab.prs_afdeling_key
AND ab.prs_bedrijf_key = 21 -- bedrijf Scharenborg Groep
AND prs_perslid_oslogin IS NOT NULL
) v
WHERE w.prs_perslid_oslogin = v.prs_perslid_oslogin
AND w.tenant_import <> tenant_prskaart
ORDER BY w.fac_imp_file_index;
BEGIN
-- Import csv formaat - kolommen:
-- 1. User Principal Name
-- 2. Display Name
-- 3. Given Name
-- 4. Surname
-- 5. Job Title
-- 6. Department
-- 7. Employee ID
-- 8. Office Location
-- 9. Mobile Phone
-- 10. Business Phone
-- 11. Street Address
-- 12. City
-- 13. State
-- 14. Postal Code
-- 15. Country
-- 16. Account Enabled
-- 17. Manager Email
-- 18. Object ID
-- 19. User Type
-- 20. Creation Type
-- 21. Usage Location
-- 22. Sign-In Names
-- 23. Other Mails
v_seq_of_columns := '0;0;0;0;0;0;19;19;0;3;'
-- 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 -- VERPLICHT BIJ IMPORT - Initieel vullen met User type (want department is nog niet altijd gevuld..)
-- v_prs_perslid_naam 8 -- VERPLICHT BIJ IMPORT - Initieel vullen met User type (want naam is niet altijd gevuld..)
-- v_prs_perslid_tussenvoegsel 9
-- v_prs_perslid_voornaam 10
|| '0;0;0;0;0;0;0;1;0;7;'
-- 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
|| '19;0;0;0;0;0;1;2;3;4;'
-- v_prs_srtperslid_omschrijving 21 -- VERPLICHT BIJ IMPORT - Initieel vullen met User type (want Job Title is nog niet altijd gevuld..)
-- 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
|| '5;6;8;9;10;17;23;7;24;0;'
|| '0;0;0;0;0;20';
-- Het aangeleverde bestand heeft de gegevens komma gescheiden ipv punt-komma
v_errorhint := 'Delimiter goed zetten';
UPDATE fac_imp_file
SET fac_imp_file_line = REPLACE (fac_imp_file_line, ',', ';')
WHERE fac_import_key = p_import_key;
-- header aanvullen met bestand
-- deze voeg ik voor import toe omdat men meerdere bestanden, cq entra_id's heeft aan scharenborg_kant
UPDATE fac_imp_file i
SET i.fac_imp_file_line =
fac_imp_file_line
|| ';'
|| 'importbestand_schg'
WHERE fac_import_key = p_import_key AND fac_imp_file_index = 1;
-- regels
UPDATE fac_imp_file i
SET i.fac_imp_file_line =
fac_imp_file_line
|| ';'
|| (SELECT CASE WHEN INSTR(fac_import_filenaam, 'API')>0
THEN SUBSTR(fac_import_filenaam, 16) -- import via api1 en gen_import.asp..
ELSE UPPER(TRIM(SUBSTR(fac_import_filenaam, 1, 3))) -- handmatig import met bestandsnamen KO tenant export.csv en VCW tenant export.csv
END
FROM fac_import WHERE fac_import_key = p_import_key)
WHERE fac_import_key = p_import_key AND fac_imp_file_index > 1;
-- csv verwerken naar de fac_imp_perslid-tabel
prs.import_perslid(p_import_key, v_seq_of_columns, '"User Principal Name";"Display Name";"Given Name";"Surname";"Job Title";"Department";"Employee ID";"Office Location";"Mobile Phone";"Business Phone";"Street Address";"City";"State";"Postal Code";"Country";"Account Enabled";"Manager Email";"Object ID";"User Type";"Creation Type";"Usage Location";"Sign-In Names";"Other Mails";importbestand_schg%');
-- POST-UPDATES op data in fac_imp_perslid-tabel doen om verwerking goed/volledig/cust-specifiek te laten verlopen
-- Delete records uit importbestand SCHG
---- 1. Alle records zonder EMPLOYEE ID
---- 2. Alle records waar CREATION TYPE gevuld met Invitation
DELETE
FROM fac_imp_perslid
WHERE prs_perslid_nr IS NULL ;
DELETE
FROM fac_imp_perslid
WHERE UPPER(prs_kenmerk20) = 'INVITATION' ;
-- Vullen achternaam
UPDATE fac_imp_perslid
SET prs_perslid_naam = COALESCE(prs_kenmerk4, 'naam - onbekend') ;
-- Loginnaam afleiden van emailadres
UPDATE fac_imp_perslid
SET prs_perslid_oslogin =
UPPER((SUBSTR (prs_perslid_email,
0,
INSTR (prs_perslid_email, '@') - 1))) ;
-- Functie moet bekend zijn
-- Functie is niet altijd gevuld, functie eerst gevuld met achternaam, nu vullen met kenmerk (of 'Onbekend').
UPDATE fac_imp_perslid
SET prs_srtperslid_omschrijving =
DECODE (prs_kenmerk5, NULL, 'Onbekend', prs_kenmerk5);
v_errorhint := 'Afdeling bepalen en vullen';
-- Afdeling bepalen waar persoon onder komt te vallen
--- Structuur SCHG:
----- Per BU is er een AFD-2 waarin de afdelingsomschrijving de domeinnaam is. Bijvoorbeeld voor BU Kievit Pedicures is dit kievitpedicures.nl
----- Indien het email-domein van de NIEUWE persoon niet onder een BU-afd-2 gevonden kan worden dan laten we deze onder BU-scharenborggroep op de fallback-afdeling AD_ONBEKEND landen
----- BESTAANDE personen laten we onder de Afdelingen staan waar ze in Facilitor op gezet zijn..
FOR rec IN c_afd
LOOP
BEGIN
v_errorhint := 'Persoon aan Afdeling koppelen';
-- Als er al een afdeling aan de persoon gekoppeld is, dan wordt deze genomen.
IF rec.prs_afdeling_naam_huidig IS NOT NULL
THEN
UPDATE fac_imp_perslid
SET prs_afdeling_naam = rec.prs_afdeling_naam_huidig
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
END IF;
-- Als de persoon nog onbekend is, dan koppelen we deze aan de aangemaakte AD_afdeling behorende onder dat domein
IF rec.prs_afdeling_naam_huidig IS NULL
THEN
SELECT min(prs_afdeling_key)
INTO v_prs_afdeling_key
FROM prs_v_afdeling
WHERE UPPER(prs_afdeling_omschrijving) = UPPER(SUBSTR (rec.prs_perslid_email, INSTR (rec.prs_perslid_email, '@') + 1))
AND prs_afdeling_verwijder IS NULL ;
IF v_prs_afdeling_key IS NOT NULL THEN
UPDATE fac_imp_perslid
SET prs_afdeling_naam = (SELECT a.prs_afdeling_upper FROM prs_afdeling a WHERE a.prs_afdeling_key = v_prs_afdeling_key)
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
ELSE
-- fallback_afdeling
UPDATE fac_imp_perslid
SET prs_afdeling_naam = 'AD_ONBEKEND'
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
END IF;
END IF;
END;
END LOOP;
-- De oslogin leiden we af van emailadres echter moet bij uitvoer van de import wel uniek zijn
-- Voor SCHG geldt dat omdat er vanuit verschillende azure-omgevingen en BU-units (domein-namen) de bestanden en records volgen en dat dus oslogin niet altijd uniek is.
-- Omdat de import-verwerking op OSLOGIN gaat (vanaf 2025-mei) zal bij dezelfde oslogin Facilitor dus 1 personenkaart aanmaken/updaten. Zie voorbeeld hieronder. Dit is niet wenselijk
--- Gaan we oplossen door in onderstaande cursor bij meerdere dezelfde OSLOGIN's alleen de eerste te importeren/verwerken + de overige via fac_tracking als waarschuwing in import-run op te nemen.
----- Voorbeeld: prs_perslid_key
------- 365 j.smit@podotherapeut.nl J.SMIT Jose Administratief Medewerker 1246
-------- 1151 j.smit@podo-it.nl J.SMIT Jay Onbekend 1246
FOR rec IN c_oslogin
LOOP
BEGIN
v_errorhint := 'Dubbele oslogin checken - BINNEN ingelezen tenant';
IF rec.check_dubbel IS NOT NULL
THEN
v_errormsg := rec.prs_perslid_email || ' (' || rec.prs_perslid_nr || ') - Niet aangemaakt ivm GEEN UNIEKE LOGIN' ;
UPDATE fac_imp_perslid
SET prs_kenmerk20 = 'oslogin_dubbel',
prs_afdeling_naam = NULL -- zodat bij prs.update_perslid dit record niet verwerkt wordt en nog aparte error-melding krijgt
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
-- tracking
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
END IF;
END;
END LOOP;
FOR rec IN c_oslogin_b
LOOP
BEGIN
v_errorhint := 'Dubbele oslogin checken - BUITEN ingelezen tenant';
v_errormsg := rec.prs_perslid_email || ' (' || rec.prs_perslid_nr || ') - Niet aangemaakt ivm GEEN UNIEKE LOGIN' ;
UPDATE fac_imp_perslid
SET prs_kenmerk20 = 'oslogin_dubbel - andere tenant',
prs_afdeling_naam = NULL -- zodat bij prs.update_perslid dit record niet verwerkt wordt en nog aparte error-melding krijgt
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
-- tracking
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
END;
END LOOP;
END schg_import_perslid;
/
CREATE OR REPLACE PROCEDURE schg_update_perslid (p_import_key IN NUMBER)
IS
-- Omdat er 2 tenant's zijn moet je bij de DELETE actie niet 'zomaar checken op 'Niet bekend, dus verwijderen'.
---- Ik heb import_bestands_naam toegevoegd en dus in DELETE alleen binnen het personenbestand in Facilitor wat uit die tenant_id komt checken.
---- We checken/matchen op OSLOGIN voor SCHG want de personeelsnummer die op Azure via Nmbrs-pakket worden gesynct blijken niet uniek te zijn.
CURSOR c_del
IS
SELECT p.prs_perslid_key,
p.prs_perslid_email,
i.prs_perslid_email
prs_perslid_email_import,
p.prs_perslid_nr,
i.prs_perslid_nr
prs_perslid_nr_import,
pf.prs_perslid_naam_full,
p.prs_perslid_oslogin,
i.prs_perslid_oslogin
prs_perslid_oslogin_import,
ib.huidige_importbestand_schg,
p.prs_importbestand_schg,
i.prs_kenmerk13,
p.prs_perslid_inactief,
p.prs_perslid_verwijder
FROM fac_imp_perslid i,
(SELECT p.prs_perslid_key,
p.prs_perslid_email,
p.prs_perslid_nr,
p.prs_perslid_oslogin,
p.prs_perslid_inactief,
p.prs_perslid_verwijder,
p.prs_afdeling_key,
(SELECT kw.prs_kenmerklink_waarde
FROM prs_kenmerklink kw
WHERE kw.prs_kenmerk_key = 1060
AND kw.prs_kenmerklink_niveau = 'P'
AND kw.prs_link_key = p.prs_perslid_key)
prs_importbestand_schg -- het importbestand_schg in personenkaart
FROM prs_perslid p) p,
prs_v_perslid_fullnames_all pf,
prs_v_afdeling_boom ab,
prs_afdeling a,
(SELECT MAX (prs_kenmerk13)
huidige_importbestand_schg
FROM fac_imp_perslid) ib -- importbestand_schg in deze run
WHERE pf.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_verwijder IS NULL
AND p.prs_afdeling_key = ab.prs_afdeling_key
AND ab.prs_afdeling_key = a.prs_afdeling_key
AND p.prs_importbestand_schg = ib.huidige_importbestand_schg
AND ab.prs_bedrijf_key = 21 -- bedrijf Scharenborg Groep
AND p.prs_perslid_nr IS NOT NULL
-- MATCH en DELETE op OSLOGING
AND p.prs_perslid_oslogin = i.prs_perslid_oslogin(+)
AND i.prs_perslid_oslogin IS NULL
-- MATCH en DELETE op PRS_PERLID_NR
-- AND p.prs_perslid_nr = i.prs_perslid_nr(+)
-- AND i.prs_perslid_nr IS NULL
-- MATCH en DELETE op EMAIL
-- AND p.prs_perslid_email = i.prs_perslid_email(+)
-- AND i.prs_perslid_email IS NULL
;
CURSOR c_flex -- Voor updaten van de algemene flex-kenmerkvelden op actuele medewerkers
IS
SELECT p.prs_perslid_key, i.prs_kenmerk1, i.prs_kenmerk2, i.prs_kenmerk3, i.prs_kenmerk4, i.prs_kenmerk5, i.prs_kenmerk6, i.prs_kenmerk7, i.prs_kenmerk8, i.prs_kenmerk9, i.prs_kenmerk10, i.prs_kenmerk11, i.prs_kenmerk12, i.prs_kenmerk13
FROM prs_v_aanwezigperslid p, fac_imp_perslid i
WHERE p.prs_perslid_key = i.prs_perslid_key
ORDER BY 1;
CURSOR c_verantw
IS
SELECT p.prs_perslid_key,
p.prs_perslid_email,
p.prs_perslid_nr,
p.prs_perslid_oslogin,
p.manager_email_azure,
CASE WHEN p.manager_email_azure <> '<geen Manager Email>'
THEN (SELECT prs_perslid_email FROM prs_perslid WHERE UPPER(prs_perslid_email) = UPPER(p.manager_email_azure) AND prs_perslid_verwijder IS NULL)
ELSE NULL
END
manager_email_azure_fac,
CASE WHEN p.prs_perslid_key_verantw IS NOT NULL
THEN (SELECT prs_perslid_email FROM prs_perslid WHERE prs_perslid_key = p.prs_perslid_key_verantw)
ELSE NULL
END
prs_perslid_verantw_email
FROM fac_imp_perslid i,
(SELECT p.prs_perslid_key,
p.prs_perslid_email,
p.prs_perslid_nr,
p.prs_perslid_oslogin,
p.prs_perslid_key_verantw,
(SELECT kw.prs_kenmerklink_waarde
FROM prs_kenmerklink kw
WHERE kw.prs_kenmerk_key = 1030
AND kw.prs_kenmerklink_niveau = 'P'
AND kw.prs_link_key = p.prs_perslid_key)
manager_email_azure
FROM prs_perslid p) p
WHERE p.prs_perslid_key = i.prs_perslid_key ;
v_count NUMBER;
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (400);
v_errorhint VARCHAR2 (400);
-- overige variabelen
v_prs_perslid_key_verantw NUMBER(10);
BEGIN
v_errorhint := 'Niet genoeg personen in bestand, import afgebroken';
SELECT COUNT ( * ) INTO v_count FROM fac_imp_perslid;
IF v_count >= 50
THEN
v_errorhint := 'Verwerken persoonsgegevens';
-- Geldig importbestand wat betreft aantal personen
-- Nu kunnen we de standaard facilitor-update doorvoeren
-- generic update
-- 'EMAIL' betekent dat op basis van Email wordt gematched.
-- 'NR' op basis personeelsnummer.
-- 'LOGIN' op basis logincode
-- 'NULL' betekent altijd geen werkplekken verwijderen
prs.update_perslid (p_import_key, 'LOGIN', NULL);
-- Na de update gaan we de mensen verwijderen die niet in dit importbestand_schg meer zitten
FOR rec IN c_del
LOOP
BEGIN
v_errorhint :=
'Verwijderen persoon: '
|| rec.prs_perslid_key
|| '-'
|| rec.prs_perslid_email
|| '-'
|| rec.prs_perslid_oslogin;
prs.delete_perslid (p_import_key, rec.prs_perslid_key);
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_errormsg,
v_errorhint);
END;
END LOOP;
-- En dan gaan we de kenmmerken bijwerken op de actuele medewerkers
FOR rec IN c_flex
LOOP
BEGIN
-- User Principal Name;Display Name;Given Name;Surname;Job Title;Department;Employee ID;Office Location;Mobile Phone;Business Phone;Street Address;City;State;Postal Code;Country;Account Enabled;Manager Email;Object ID;User Type;Creation Type;Usage Location;Sign-In Names;Other Mails;importbestand_schg%';
v_errorhint:='Fout bijwerken kenmerkvelden';
PRS.upsertkenmerk (1021, rec.prs_perslid_key, COALESCE(rec.prs_kenmerk1, '<geen User Principal Name>')); -- User Principal Name
PRS.upsertkenmerk (1022, rec.prs_perslid_key, COALESCE(rec.prs_kenmerk2, '<geen Display Name>')); -- Display Name
PRS.upsertkenmerk (1023, rec.prs_perslid_key, COALESCE(rec.prs_kenmerk3, '<geen Given Name>')); -- Given Name
PRS.upsertkenmerk (1024, rec.prs_perslid_key, COALESCE(rec.prs_kenmerk4, '<geen Surname>')); -- Surname
PRS.upsertkenmerk (1025, rec.prs_perslid_key, COALESCE(rec.prs_kenmerk5, '<geen Job Title>')); -- Job Title
PRS.upsertkenmerk (1026, rec.prs_perslid_key, COALESCE(rec.prs_kenmerk6, '<geen Department>')); -- Department
PRS.upsertkenmerk (1027, rec.prs_perslid_key, COALESCE(rec.prs_kenmerk7, '<geen Office Location>')); -- Office Location
PRS.upsertkenmerk (1028, rec.prs_perslid_key, COALESCE(rec.prs_kenmerk8, '<geen Mobile Phone>')); -- Mobile Phone
PRS.upsertkenmerk (1029, rec.prs_perslid_key, COALESCE(rec.prs_kenmerk9, '<geen Business Phone>')); -- Business Phone
PRS.upsertkenmerk (1030, rec.prs_perslid_key, COALESCE(rec.prs_kenmerk10, '<geen Manager Email>')); -- Manager Email
PRS.upsertkenmerk (1031, rec.prs_perslid_key, COALESCE(rec.prs_kenmerk11, '<geen Other Mails>')); -- Other Mails
PRS.upsertkenmerk (1032, rec.prs_perslid_key, COALESCE(rec.prs_kenmerk12, '<geen Employee ID>')); -- Employee ID
PRS.upsertkenmerk (1060, rec.prs_perslid_key, rec.prs_kenmerk13); -- importbestand_schg
END;
END LOOP;
-- En de verantwoordelijk manager updaten in de personenkaart indien nodig
FOR rec IN c_verantw
LOOP
BEGIN
v_errorhint:='Fout bijwerken verantwoordelijke';
-- als de aangeboden waarde uit azure anders is dan de huidige verantwoordelijke in de personenkaart dan gaan we personenkaart updaten
IF COALESCE(rec.manager_email_azure_fac, '<leeg>') <> COALESCE(rec.prs_perslid_verantw_email, '<leeg>')
THEN
-- geen gevonden facilitor-manager dan gevulde verantwoordelijke verwijderen
IF rec.manager_email_azure_fac IS NULL
THEN
UPDATE prs_perslid
SET prs_perslid_key_verantw = ''
WHERE prs_perslid_key = rec.prs_perslid_key ;
END IF;
-- wel gevonden facilitor-manager dan bijbehorende verantwoordelijke_key in personenkaart vullen
IF rec.manager_email_azure_fac IS NOT NULL
THEN
SELECT prs_perslid_key
INTO v_prs_perslid_key_verantw
FROM prs_perslid
WHERE prs_perslid_email = rec.manager_email_azure_fac ;
UPDATE prs_perslid
SET prs_perslid_key_verantw = v_prs_perslid_key_verantw
WHERE prs_perslid_key = rec.prs_perslid_key ;
END IF;
END IF;
END;
END LOOP;
ELSE
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_errorhint);
COMMIT;
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_errormsg,
v_errorhint);
END schg_update_perslid;
/
-- TIJDELIJK CUST op CNT_UPDATE 2025.1
CREATE OR REPLACE PROCEDURE schg_import_cnt_schg (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT fac_imp_csv_index
, fac_imp_csv_col01 CONTRACTNR
, fac_imp_csv_col02 VERSIE
, fac_imp_csv_col03 EXTERNNR
, fac_imp_csv_col04 CONTRACTSOORT
, fac_imp_csv_col05 BESCHRIJVING
, fac_imp_csv_col06 MANTELNR
, fac_imp_csv_col07 MANTELNR_VERSIE
, fac_imp_csv_col08 OMSCHRIJVING
, fac_imp_csv_col09 DIENST
, fac_imp_csv_col10 EIGENAAR_AFD
, fac_imp_csv_col11 EIGENAAR_EMAIL
, fac_imp_csv_col12 BEHEERDER_EMAIL
, fac_imp_csv_col13 OPMERKING
, fac_imp_csv_col14 INGANGSDATUM
, fac_imp_csv_col15 RAPPELDATUM
, fac_imp_csv_col16 OPZEGDATUM
, fac_imp_csv_col17 EINDDATUM
, fac_imp_csv_col18 SOORT_CONTACTPARTIJ
, fac_imp_csv_col19 BEDRIJFNAAM
, fac_imp_csv_col20 CONTACTNAAM
, fac_imp_csv_col21 KOSTENPLAATSCODE
, fac_imp_csv_col22 KOSTENSOORTCODE
, fac_imp_csv_col23 CONTRACTBEDRAG
, fac_imp_csv_col24 TERMIJNBEDRAG
, fac_imp_csv_col25 UURTARIEF
, fac_imp_csv_col26 KORTING
, fac_imp_csv_col27 SCOPETYPE
, fac_imp_csv_col28 LOCATIEGEBOUW_CODE
, fac_imp_csv_col29 VERLENGEN
, fac_imp_csv_col30 flex_01
, fac_imp_csv_col31 flex_02
, fac_imp_csv_col32 flex_03
, fac_imp_csv_col33 flex_04
, fac_imp_csv_col34 flex_05
, fac_imp_csv_col35 flex_06
, fac_imp_csv_col36 flex_07
, fac_imp_csv_col37 flex_08
, fac_imp_csv_col38 flex_09
, fac_imp_csv_col39 flex_10
, fac_imp_csv_col40 flex_11
, fac_imp_csv_col41 flex_12
, fac_imp_csv_col42 flex_13
, fac_imp_csv_col43 flex_14
, fac_imp_csv_col44 flex_15
, fac_imp_csv_col45 flex_16
, fac_imp_csv_col46 flex_17
, fac_imp_csv_col47 flex_18
, fac_imp_csv_col48 flex_19
, fac_imp_csv_col49 flex_20
, fac_imp_csv_col50 flex_21
, fac_imp_csv_col51 flex_22
, fac_imp_csv_col52 flex_23
, fac_imp_csv_col53 flex_24
, fac_imp_csv_col54 flex_25
FROM fac_imp_csv
WHERE fac_imp_csv_index > 1
AND fac_import_key = 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_header_is_valid NUMBER(1) := 0;
v_ongeldig NUMBER(1) := 0;
v_count_rec NUMBER(10) := 0;
v_count_imp NUMBER(10) := 0;
v_ref_key NUMBER(10);
-- De importvelden
v_nummer_intern cnt_contract.cnt_contract_nummer_intern%TYPE; --VARCHAR2(30)
v_versie cnt_contract.cnt_contract_versie%TYPE; --VARCHAR2(10)
v_nummer_extern cnt_contract.cnt_contract_nummer%TYPE; --VARCHAR2(30)
v_cnt_soort ins_tab_discipline.ins_discipline_omschrijving%TYPE; --VARCHAR2(60) --> cnt_contract.ins_discipline_key
v_beschrijving cnt_contract.cnt_contract_omschrijving%TYPE; --VARCHAR2(50)
v_mantel_nr cnt_contract.cnt_contract_nummer_intern%TYPE; --VARCHAR2(30) |-> cnt_contract.cnt_contract_mantel_key
v_mantel_nr_versie cnt_contract.cnt_contract_versie%TYPE; --VARCHAR2(10) |
v_omschrijving cnt_contract.cnt_contract_document%TYPE; --VARCHAR2(2048)
v_dienst prs_dienst.prs_dienst_omschrijving%TYPE; --VARCHAR2(60) --> cnt_contract.prs_dienst_key
v_afdeling prs_afdeling.prs_afdeling_naam%TYPE; --VARCHAR2(15) --> cnt_contract.prs_afdeling_key_eig
v_perslid_eig prs_perslid.prs_perslid_email%TYPE; --VARCHAR2(200) --> cnt_contract.prs_perslid_key_eig
v_perslid_beh prs_perslid.prs_perslid_email%TYPE; --VARCHAR2(200) --> cnt_contract.prs_perslid_key_beh
v_opmerking cnt_contract.cnt_contract_opmerking%TYPE; --VARCHAR2(4000)
v_ingangsdatum cnt_contract.cnt_contract_looptijd_van%TYPE; --DATE
v_rappeldatum cnt_contract.cnt_contract_aanmaak%TYPE; --DATE --> cnt_contact.cnt_contract_rappeltermijn
v_opzegdatum cnt_contract.cnt_contract_aanmaak%TYPE; --DATE --> cnt_contract.cnt_contract_opzegtermijn
v_einddatum cnt_contract.cnt_contract_looptijd_tot%TYPE; --DATE
v_srtcontact VARCHAR2 (1); --P of B
v_bedrijfnaam prs_perslid.prs_perslid_email%TYPE; --VARCHAR (200) --> cnt_contract.cnt_prs_bedrijf_key
v_contactnaam prs_contactpersoon.prs_contactpersoon_email%TYPE; --VARCHAR2(200) --> cnt_contract.prs_contactpersoon_key
v_kpn_code prs_kostenplaats.prs_kostenplaats_nr%TYPE; --VARCHAR2(30) --> cnt_contract.prs_kostenplaats_key
v_kostensoort_code prs_kostensoort.prs_kostensoort_oms%TYPE; --VARCHAR2(60) --> cnt_contract.prs_kostensoort_key
v_bedrag cnt_contract.cnt_contract_kosten%TYPE; --NUMBER(11,2)
v_bedrag_termijn cnt_contract.cnt_contract_termijnkosten%TYPE; --NUMBER(11,2)
v_uurtarief cnt_contract.cnt_contract_uurloon%TYPE; --NUMBER(6,2)
v_korting cnt_contract.cnt_contract_korting%TYPE; --NUMBER(5,2)
v_scope_type cnt_contract_plaats.cnt_alg_plaats_code%TYPE; --VARCHAR2(1) --> cnt_contract_plaats.cnt_alg_plaats_code
v_gebouwcode alg_gebouw.alg_gebouw_code%TYPE; --VARCHAR2(12) --> cnt_contract_plaats.cnt_alg_plaats_key
v_verlengen cnt_contract.cnt_contract_verlenging%TYPE; --NUMBER(1)
v_cnt_kenmerk_01 fac_imp_cnt.flex1%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_02 fac_imp_cnt.flex2%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_03 fac_imp_cnt.flex3%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_04 fac_imp_cnt.flex4%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_05 fac_imp_cnt.flex5%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_06 fac_imp_cnt.flex6%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_07 fac_imp_cnt.flex7%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_08 fac_imp_cnt.flex8%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_09 fac_imp_cnt.flex9%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_10 fac_imp_cnt.flex10%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_11 fac_imp_cnt.flex11%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_12 fac_imp_cnt.flex12%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_13 fac_imp_cnt.flex13%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_14 fac_imp_cnt.flex14%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_15 fac_imp_cnt.flex15%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_16 fac_imp_cnt.flex16%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_17 fac_imp_cnt.flex17%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_18 fac_imp_cnt.flex18%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_19 fac_imp_cnt.flex19%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_20 fac_imp_cnt.flex20%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_21 fac_imp_cnt.flex21%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_22 fac_imp_cnt.flex22%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_23 fac_imp_cnt.flex23%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_24 fac_imp_cnt.flex24%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_25 fac_imp_cnt.flex25%TYPE; --VARCHAR2(255);
v_header VARCHAR2(500) := 'CONTRACTNR;VERSIE;EXTERNNR;CONTRACTSOORT;BESCHRIJVING;'
|| 'MANTELNR;MANTELNR_VERSIE;OMSCHRIJVING;DIENST;EIGENAAR_AFD;'
|| 'EIGENAAR_EMAIL;BEHEERDER_EMAIL;OPMERKING;INGANGSDATUM;RAPPELDATUM;'
|| 'OPZEGDATUM;EINDDATUM;SOORT_CONTACTPARTIJ;BEDRIJFSNAAM;CONTACTNAAM;'
|| 'KOSTENPLAATSCODE;KOSTENSOORTCODE;CONTRACTBEDRAG;TERMIJNBEDRAG;UURTARIEF;'
|| 'KORTING;SCOPETYPE;LOCATIEGEBOUW_CODE;VERLENGEN';
v_header_csv VARCHAR2(500);
v_flex_naam_01 fac_imp_cnt.flex1%TYPE;
v_flex_naam_02 fac_imp_cnt.flex2%TYPE;
v_flex_naam_03 fac_imp_cnt.flex3%TYPE;
v_flex_naam_04 fac_imp_cnt.flex4%TYPE;
v_flex_naam_05 fac_imp_cnt.flex5%TYPE;
v_flex_naam_06 fac_imp_cnt.flex6%TYPE;
v_flex_naam_07 fac_imp_cnt.flex7%TYPE;
v_flex_naam_08 fac_imp_cnt.flex8%TYPE;
v_flex_naam_09 fac_imp_cnt.flex9%TYPE;
v_flex_naam_10 fac_imp_cnt.flex10%TYPE;
v_flex_naam_11 fac_imp_cnt.flex11%TYPE;
v_flex_naam_12 fac_imp_cnt.flex12%TYPE;
v_flex_naam_13 fac_imp_cnt.flex13%TYPE;
v_flex_naam_14 fac_imp_cnt.flex14%TYPE;
v_flex_naam_15 fac_imp_cnt.flex15%TYPE;
v_flex_naam_16 fac_imp_cnt.flex16%TYPE;
v_flex_naam_17 fac_imp_cnt.flex17%TYPE;
v_flex_naam_18 fac_imp_cnt.flex18%TYPE;
v_flex_naam_19 fac_imp_cnt.flex19%TYPE;
v_flex_naam_20 fac_imp_cnt.flex20%TYPE;
v_flex_naam_21 fac_imp_cnt.flex21%TYPE;
v_flex_naam_22 fac_imp_cnt.flex22%TYPE;
v_flex_naam_23 fac_imp_cnt.flex23%TYPE;
v_flex_naam_24 fac_imp_cnt.flex24%TYPE;
v_flex_naam_25 fac_imp_cnt.flex25%TYPE;
-- Controleer tijdens import-fase alleen op het bestaan van een kenmerk met de meegegeven omschrijving of kenmerk key.
-- De omschrijving (header van kolom) kan de omschrijving zijn van het kenmerksoort of het kenmerk.
-- De omschrijving van het kenmerksoort kan namelijk overruled worden door de omschrijving van het kenmerk.
-- Daarnaast kan hetzelfde kenmerk vaker voorkomen voor verschillende groepen.
-- Of het kenmerksoort/kenmerk wel is gedefinieerd voor de betreffende
-- object-discipline/groep/soort, volgt pas tijdens de update-fase)!
--
-- p_kw is bijvoorbeeld 'Looptijd Maximaal', 'Looptijd Maximaal|3', 1049 of 1049|3 waarbij de tweede en laatste in groep 3 zitten
-- het resultaat is NULL (als niet gevonden) of Looptijd Maximaal|3 of 1049|3 voor kenmer_key 1049 in groep 3
-- Als geen groep is meegegeven dan wordt 'Looptijd Maximaal|0' opgeleverd (de default groep)
FUNCTION bepaal_kenmerk (p_kw IN VARCHAR2)
RETURN VARCHAR
IS
v_kenmerk_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 MIN(k.cnt_kenmerk_key)
INTO v_kenmerk_key
FROM cnt_kenmerk k,
cnt_srtkenmerk sk
WHERE k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key
AND k.cnt_kenmerk_groep = v_kenmerk_groep
AND COALESCE(UPPER(k.cnt_kenmerk_omschrijving), sk.cnt_srtkenmerk_upper) = UPPER(v_kw)
AND sk.cnt_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'r', 'S', 'X', 'V')
AND k.cnt_kenmerk_verwijder IS NULL
AND sk.cnt_srtkenmerk_verwijder IS NULL;
ELSE -- kenmerkwaarde is numeriek (dus key)!
SELECT k.cnt_kenmerk_key
INTO v_kenmerk_key
FROM cnt_kenmerk k,
cnt_srtkenmerk sk
WHERE k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key
AND k.cnt_kenmerk_groep = v_kenmerk_groep
AND k.cnt_kenmerk_key = fac.safe_to_number(v_kw)
AND sk.cnt_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'r', 'S', 'X', 'V')
AND k.cnt_kenmerk_verwijder IS NULL
AND sk.cnt_srtkenmerk_verwijder IS NULL;
END IF;
IF v_kenmerk_key IS NULL
THEN
RETURN NULL;
ELSE
-- Er is een kenmerksoort of kenmerk aanwezig met de omschrijving/kenmerk_key (v_kw)
RETURN v_kw || '|' || TO_CHAR(v_kenmerk_groep);
END IF;
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 kenmerk [' || p_kw || ']'
, 'Bestaat niet of type ongeldig');
COMMIT;
RETURN NULL;
END IF;
END; -- bepaal_kenmerk
FUNCTION kenmerk_waarde( p_import_key IN NUMBER
, p_import_index IN NUMBER
, p_aanduiding IN VARCHAR2
, p_flex_naam IN VARCHAR2
, p_flex_waarde IN VARCHAR2)
RETURN VARCHAR
IS
v_flexval VARCHAR2(200);
v_flx VARCHAR2(255);
BEGIN
v_flx := bepaal_kenmerk(p_flex_naam);
IF v_flx IS NULL
THEN
v_flexval := SUBSTR(TRIM(p_flex_waarde), 1, 255);
ELSE
v_flexval := SUBSTR(TRIM(p_flex_waarde), 1, 200);
IF LENGTH(TRIM(p_flex_waarde)) > 200
THEN
fac.imp_writelog( p_import_key, 'W'
, p_aanduiding || p_flex_naam || ' - Aangepast ivm lengte groter dan 255'
, p_import_index
);
END IF;
v_flexval := TO_CHAR(v_flx) || '=' || v_flexval;
END IF;
RETURN v_flexval;
END; -- kenmerk_waarde
BEGIN
v_errormsg := 'Fout inlezen header ';
SELECT REPLACE(UPPER(fac_imp_csv_col01 ||';'|| fac_imp_csv_col02 ||';'|| fac_imp_csv_col03 ||';'|| fac_imp_csv_col04 ||';'|| fac_imp_csv_col05 ||';'||
fac_imp_csv_col06 ||';'|| fac_imp_csv_col07 ||';'|| fac_imp_csv_col08 ||';'|| fac_imp_csv_col09 ||';'|| fac_imp_csv_col10 ||';'||
fac_imp_csv_col11 ||';'|| fac_imp_csv_col12 ||';'|| fac_imp_csv_col13 ||';'|| fac_imp_csv_col14 ||';'|| fac_imp_csv_col15 ||';'||
fac_imp_csv_col16 ||';'|| fac_imp_csv_col17 ||';'|| fac_imp_csv_col18 ||';'|| fac_imp_csv_col19 ||';'|| fac_imp_csv_col20 ||';'||
fac_imp_csv_col21 ||';'|| fac_imp_csv_col22 ||';'|| fac_imp_csv_col23 ||';'|| fac_imp_csv_col24 ||';'|| fac_imp_csv_col25 ||';'||
fac_imp_csv_col26 ||';'|| fac_imp_csv_col27 ||';'|| fac_imp_csv_col28 ||';'|| fac_imp_csv_col29
), ' ', '')
, fac_imp_csv_col30, fac_imp_csv_col31, fac_imp_csv_col32, fac_imp_csv_col33, fac_imp_csv_col34
, fac_imp_csv_col35, fac_imp_csv_col36, fac_imp_csv_col37, fac_imp_csv_col38, fac_imp_csv_col39
, fac_imp_csv_col40, fac_imp_csv_col41, fac_imp_csv_col42, fac_imp_csv_col43, fac_imp_csv_col44
, fac_imp_csv_col45, fac_imp_csv_col46, fac_imp_csv_col47, fac_imp_csv_col48, fac_imp_csv_col49
, fac_imp_csv_col50, fac_imp_csv_col51, fac_imp_csv_col52, fac_imp_csv_col53, fac_imp_csv_col54
INTO v_header_csv -- standaard header
, v_flex_naam_01, v_flex_naam_02, v_flex_naam_03, v_flex_naam_04, v_flex_naam_05 -- kenmerk kolom namen
, v_flex_naam_06, v_flex_naam_07, v_flex_naam_08, v_flex_naam_09, v_flex_naam_10
, v_flex_naam_11, v_flex_naam_12, v_flex_naam_13, v_flex_naam_14, v_flex_naam_15
, v_flex_naam_16, v_flex_naam_17, v_flex_naam_18, v_flex_naam_19, v_flex_naam_20
, v_flex_naam_21, v_flex_naam_22, v_flex_naam_23, v_flex_naam_24, v_flex_naam_25
FROM fac_imp_csv
WHERE fac_imp_csv_index = 1
AND fac_import_key = p_import_key;
-- Eerst opruiming
DELETE FROM fac_imp_cnt;
IF (v_header LIKE v_header_csv || '%')
THEN
v_header_is_valid := 1;
FOR rec IN c1
LOOP
BEGIN
v_ongeldig := 0;
v_count_rec := v_count_rec + 1;
v_aanduiding := '[' || rec.contractnr || '|' || rec.versie || '] ';
-- CSV-kolom A: Controleer het contractnummer op lengte
v_nummer_intern := SUBSTR(TRIM(rec.contractnr), 1, 30);
IF LENGTH(TRIM(rec.contractnr)) > 30
THEN
fac.imp_writelog( p_import_key, 'W', v_aanduiding || 'ContractRr - Aangepast ivm lengte groter dan 30'
, rec.fac_imp_csv_index || ' - ' || rec.contractnr || ' wordt: ' || v_nummer_intern
);
END IF;
-- CSV-kolom B: Controleer de versie op lengte
v_versie := SUBSTR(TRIM(rec.versie), 1, 10);
IF LENGTH(TRIM(rec.versie)) > 10
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Versie - Aangepast ivm lengte groter dan 10'
, rec.fac_imp_csv_index || ' - ' || rec.versie || ' wordt: ' || v_versie
);
END IF;
-- CSV-kolom C: Controleer het extern contractnummer op lengte
v_nummer_extern := SUBSTR(TRIM(rec.externnr), 1, 30);
IF LENGTH(TRIM(rec.externnr)) > 30
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'ExternNr - Aangepast ivm lengte groter dan 30'
, rec.fac_imp_csv_index || ' - ' || rec.externnr || ' wordt: ' || v_nummer_extern
);
END IF;
-- CSV-kolom D: Controleer de lengte van het contractsoort en of het ingevuld is
v_cnt_soort := SUBSTR(TRIM(rec.contractsoort), 1, 60);
BEGIN
SELECT ins_discipline_key
INTO v_ref_key
FROM cnt_discipline
WHERE ins_discipline_omschrijving = v_cnt_soort
AND ins_discipline_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Contractsoort - Is onbekend'
, rec.fac_imp_csv_index || ' - ' || v_cnt_soort || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END;
-- CSV-kolom E: Controleer de lengte van de contract beschrijving
v_beschrijving := SUBSTR(TRIM(rec.beschrijving),1,50);
IF LENGTH(TRIM(rec.beschrijving)) > 50
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Beschrijving - Aangepast ivm lengte groter dan 50'
, rec.fac_imp_csv_index || ' - ' || rec.beschrijving || ' wordt: ' || v_beschrijving
);
ELSE
IF v_beschrijving IS NULL
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Beschrijving - Is niet ingevuld'
, rec.fac_imp_csv_index || ' - Regel wordt overgeslagen'
);
v_ongeldig := 1;
END IF;
END IF;
-- CSV-kolom F: Controleer de lengte van het mantelcontract nummer
v_mantel_nr := SUBSTR(TRIM(rec.mantelnr), 1, 30);
IF LENGTH(TRIM(rec.mantelnr)) > 30
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'MantelNr - Aangepast ivm lengte groter dan 30'
, rec.fac_imp_csv_index || ' - ' || rec.mantelnr || ' wordt: ' || v_mantel_nr
);
END IF;
-- CSV-kolom G: Controleer de lengte van het mantelcontract versie
v_mantel_nr_versie := SUBSTR(TRIM(v_mantel_nr_versie), 1, 10);
IF LENGTH(TRIM(rec.mantelnr_versie)) > 10
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'MantelNr_versie - Aangepast ivm lengte groter dan 10'
, rec.fac_imp_csv_index || ' - ' || rec.mantelnr_versie || ' wordt: ' || v_mantel_nr_versie
);
END IF;
-- CSV-kolom H: Controleer de lengte van contract omschrijving
v_omschrijving := SUBSTR(TRIM(rec.omschrijving), 1, 1000);
IF LENGTH(TRIM(rec.omschrijving)) > 1000
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Omschrijving - Lengte (' || TO_CHAR(LENGTH(TRIM(rec.omschrijving))) || ') aangepast tot 1000'
, rec.fac_imp_csv_index
);
END IF;
-- CSV-kolom I: Controleer of er een geldige dienst is ingevuld (geen dienst is ook goed)
v_dienst := SUBSTR(TRIM(rec.dienst), 1, 60);
IF v_dienst IS NOT NULL
THEN
BEGIN
SELECT prs_dienst_key
INTO v_ref_key
FROM prs_dienst
WHERE prs_dienst_omschrijving = v_dienst;
EXCEPTION
WHEN NO_DATA_FOUND THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Dienst - Is onbekend'
, rec.fac_imp_csv_index || ' - ' || v_dienst || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END;
END IF;
-- CSV-kolom J: Controleer of de afdelingscode bestaat
v_afdeling := SUBSTR(TRIM(rec.eigenaar_afd), 1, 15);
BEGIN
SELECT prs_afdeling_key
INTO v_ref_key
FROM prs_afdeling
WHERE prs_afdeling_upper = UPPER(v_afdeling)
AND prs_afdeling_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Eigenaar_afd - Is onbekend'
, rec.fac_imp_csv_index || ' - ' || v_afdeling || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END;
-- CSV-kolom K: Controleer of er een geldig eigenaar mailadres is ingevuld (mag leeg zijn)
v_perslid_eig := SUBSTR(TRIM(rec.eigenaar_email), 1, 200);
IF v_perslid_eig IS NOT NULL
THEN
BEGIN
SELECT prs_perslid_key
INTO v_ref_key
FROM prs_perslid
WHERE prs_perslid_email = v_perslid_eig;
EXCEPTION
WHEN NO_DATA_FOUND THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Eigenaar_email - Is onbekend'
, rec.fac_imp_csv_index || ' - ' || v_perslid_eig || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END;
END IF;
-- CSV-kolom L: Controleer of er een geldig beheerder mailadres is ingevuld (mag niet leeg zijn)
v_perslid_beh := SUBSTR(TRIM(rec.beheerder_email), 1, 200);
IF v_perslid_beh IS NULL
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Beheerder_email - Is niet ingevuld'
, rec.fac_imp_csv_index || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
ELSE
BEGIN
SELECT prs_perslid_key
INTO v_ref_key
FROM prs_perslid
WHERE prs_perslid_email = v_perslid_beh;
EXCEPTION
WHEN NO_DATA_FOUND THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Beheerder_email - Is onbekend'
, rec.fac_imp_csv_index || ' - ' || v_perslid_beh || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END;
END IF;
-- CSV-kolom M: Controleeer de lengte van contract opmerking
v_opmerking := SUBSTR(TRIM(rec.opmerking), 1, 1000);
IF LENGTH(TRIM(rec.opmerking)) > 1000
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Opmerking - Lengte (' || TO_CHAR(LENGTH(TRIM(rec.opmerking))) || ') aangepast tot 1000'
, rec.fac_imp_csv_index
);
END IF;
-- CSV-kolom N: Controleer ingangsdatum op geldig format en aanwezigheid
v_ingangsdatum := fac.safe_to_date(TRIM(rec.ingangsdatum), 'dd-mm-yyyy');
IF v_ingangsdatum IS NULL
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Ingangsdatum - Is niet aanwezig of ongeldig'
, rec.fac_imp_csv_index || ' - ' || rec.ingangsdatum || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END IF;
-- CSV-kolom O: Controleer rappeldatum op geldig format
v_rappeldatum := fac.safe_to_date(TRIM(rec.rappeldatum), 'dd-mm-yyyy');
IF v_rappeldatum IS NULL AND rec.rappeldatum IS NOT NULL
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Rappeldatum - Is ongeldig'
, rec.fac_imp_csv_index || ' - ' || rec.rappeldatum || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END IF;
-- CSV-kolom P: Controleer opzegdatum op geldig format
v_opzegdatum := fac.safe_to_date(TRIM(rec.opzegdatum), 'dd-mm-yyyy');
IF v_opzegdatum IS NULL AND rec.opzegdatum IS NOT NULL
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Opzegdatum - Is ongeldig'
, rec.fac_imp_csv_index || ' - ' || rec.opzegdatum || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END IF;
-- CSV-kolom Q: Controleer einddatum op geldig format en aanwezigheid
v_einddatum := fac.safe_to_date(TRIM(rec.einddatum), 'dd-mm-yyyy');
IF v_einddatum IS NULL
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Einddatum - Is niet aanwezig of ongeldig'
, rec.fac_imp_csv_index || ' - ' || rec.einddatum || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END IF;
-- CSV-kolom R: Controle soort contractpartij
v_srtcontact := SUBSTR(TRIM(rec.soort_contactpartij), 1, 1);
IF v_srtcontact IS NULL OR v_srtcontact NOT IN ('B','P')
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Soort_contactpartij - Is niet aanwezig of ongeldig'
, rec.fac_imp_csv_index || ' - ' || rec.soort_contactpartij || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END IF;
-- CSV-kolom S: Controle lengte bedrijfsnaam
IF v_srtcontact = 'B'
THEN
v_bedrijfnaam := SUBSTR(TRIM(rec.bedrijfnaam), 1, 60); -- naam van bedrijf: prs_bedrijf.prs_bedrijf_naam
IF LENGTH(TRIM(rec.bedrijfnaam)) > 60
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Bedrijfnaam - Aangepast ivm lengte groter dan 60'
, rec.fac_imp_csv_index || ' - ' || rec.bedrijfnaam || ' wordt: ' || v_bedrijfnaam
);
END IF;
ELSE
v_bedrijfnaam := SUBSTR(TRIM(rec.bedrijfnaam), 1, 200); -- emailadres van persoon: prs_perslid.prs_perslid_email
IF LENGTH(TRIM(rec.bedrijfnaam)) > 200
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Bedrijfnaam - Aangepast ivm lengte groter dan 200'
, rec.fac_imp_csv_index || ' - ' || rec.bedrijfnaam
);
END IF;
END IF;
IF v_bedrijfnaam IS NULL
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Bedrijfnaam - Is niet aanwezig'
, rec.fac_imp_csv_index
);
v_ongeldig := 1;
END IF;
IF v_bedrijfnaam IS NOT NULL AND v_srtcontact = 'B'
THEN
BEGIN
SELECT prs_bedrijf_key
INTO v_ref_key
FROM prs_bedrijf
WHERE UPPER(prs_bedrijf_naam) = UPPER(v_bedrijfnaam)
AND prs_bedrijf_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Debiteur - Is onbekend'
, rec.fac_imp_csv_index || ' - ' || v_bedrijfnaam || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END;
END IF;
-- CSV-kolom T: Controle contact mailadres
v_contactnaam := SUBSTR(TRIM(rec.contactnaam), 1, 200);
IF LENGTH(TRIM(rec.contactnaam)) > 200
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Contactnaam - Aangepast ivm lengte groter dan 200'
, rec.fac_imp_csv_index
);
END IF;
-- CSV-kolom U: Controle Kostenplaatscode
v_kpn_code := SUBSTR(TRIM(rec.kostenplaatscode), 1, 30);
BEGIN
SELECT prs_kostenplaats_key
INTO v_ref_key
FROM prs_kostenplaats
WHERE prs_kostenplaats_nr = v_kpn_code
AND prs_kostenplaats_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'KostenplaatsCode - Is onbekend of niet ingevuld'
, rec.fac_imp_csv_index || ' - ' || v_kpn_code || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END;
-- CSV-kolom V: Controle Kostensoortcode
v_kostensoort_code := SUBSTR(TRIM(rec.kostensoortcode), 1, 60);
IF LENGTH(TRIM(rec.kostensoortcode)) IS NOT NULL
THEN
BEGIN
SELECT prs_kostensoort_key
INTO v_ref_key
FROM prs_kostensoort
WHERE prs_kostensoort_upper = UPPER(v_kostensoort_code)
AND prs_kostensoort_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'KostensoortCode - Is onbekend of niet ingevuld'
, rec.fac_imp_csv_index || ' - ' || v_kostensoort_code || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END;
END IF;
-- CSV-kolom W: Controle of contractbedrag geldig is
v_bedrag := fac.safe_to_number(rec.contractbedrag);
IF v_bedrag IS NULL AND rec.contractbedrag IS NOT NULL
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Contractbedrag - Wordt genegeerd'
, rec.fac_imp_csv_index || ' - ' || rec.contractbedrag
);
END IF;
-- CSV-kolom X: Controle of termijnbedrag geldig is
v_bedrag_termijn := fac.safe_to_number(rec.termijnbedrag);
IF v_bedrag_termijn IS NULL AND rec.termijnbedrag IS NOT NULL
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Termijnbedrag - Wordt genegeerd'
, rec.fac_imp_csv_index || ' - ' || rec.termijnbedrag
);
END IF;
-- CSV-kolom Y: Controle of uurtarief geldig is
v_uurtarief := fac.safe_to_number(rec.uurtarief);
IF v_uurtarief IS NULL AND rec.uurtarief IS NOT NULL
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Uurtrief - Wordt genegeerd'
, rec.fac_imp_csv_index || ' - ' || rec.uurtarief
);
END IF;
-- CSV-kolom Z: Controle of korting geldig is
v_korting := fac.safe_to_number(rec.korting);
IF v_korting IS NULL AND rec.korting IS NOT NULL
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Korting - Wordt genegeerd'
, rec.fac_imp_csv_index || ' - ' || rec.korting
);
END IF;
-- CSV-kolom AA: Controle ScopeType
IF TRIM(rec.locatiegebouw_code) IS NULL
THEN
v_scope_type := NULL;
ELSE
v_scope_type := SUBSTR(TRIM(rec.scopetype), 1, 1);
IF v_scope_type IS NULL OR v_scope_type NOT IN ('L', 'G')
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'ScopeType - Is niet aanwezig of ongeldig'
, rec.fac_imp_csv_index || ' - ' || v_scope_type || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END IF;
END IF;
-- CSV-kolom AB: Controle Locatiegebouw_code
IF v_scope_type IS NOT NULL
THEN
IF v_scope_type = 'L'
THEN
v_gebouwcode := SUBSTR(TRIM(rec.locatiegebouw_code), 1, 10);
IF LENGTH(TRIM(rec.locatiegebouw_code)) > 10
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Locatiegebouw_code - Aangepast ivm lengte groter dan 10 voor locatie'
, rec.fac_imp_csv_index || ' - ' || rec.locatiegebouw_code || ' wordt: ' || v_gebouwcode
);
END IF;
END IF;
IF v_scope_type = 'G'
THEN
v_gebouwcode := SUBSTR(TRIM(rec.locatiegebouw_code), 1, 12);
IF LENGTH(TRIM(rec.locatiegebouw_code)) > 12
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Locatiegebouw_code - Aangepast ivm lengte groter dan 12 voor gebouw'
, rec.fac_imp_csv_index || ' - ' || rec.locatiegebouw_code || ' wordt: ' || v_gebouwcode
);
END IF;
END IF;
ELSE
v_gebouwcode := NULL;
END IF;
-- CSV-kolom AC: Controle op geldige waarde voor verlengen
v_verlengen := fac.safe_to_number(rec.verlengen);
IF v_verlengen NOT IN (0,1,2,3,5)
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Verlengen - Ongeldige waarde'
, rec.fac_imp_csv_index || ' - ' || rec.verlengen || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END IF;
-- De flexkenmerkwaarden
/*
v_cnt_kenmerk_01 := v_flex_naam_01 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_01, rec.flex_01);
v_cnt_kenmerk_02 := v_flex_naam_02 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_02, rec.flex_02);
v_cnt_kenmerk_03 := v_flex_naam_03 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_03, rec.flex_03);
v_cnt_kenmerk_04 := v_flex_naam_04 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_04, rec.flex_04);
v_cnt_kenmerk_05 := v_flex_naam_05 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_05, rec.flex_05);
v_cnt_kenmerk_06 := v_flex_naam_06 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_06, rec.flex_06);
v_cnt_kenmerk_07 := v_flex_naam_07 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_07, rec.flex_07);
v_cnt_kenmerk_08 := v_flex_naam_08 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_08, rec.flex_08);
v_cnt_kenmerk_09 := v_flex_naam_09 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_09, rec.flex_09);
v_cnt_kenmerk_10 := v_flex_naam_10 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_10, rec.flex_10);
v_cnt_kenmerk_11 := v_flex_naam_11 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_11, rec.flex_11);
v_cnt_kenmerk_12 := v_flex_naam_12 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_12, rec.flex_12);
v_cnt_kenmerk_13 := v_flex_naam_13 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_13, rec.flex_13);
v_cnt_kenmerk_14 := v_flex_naam_14 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_14, rec.flex_14);
v_cnt_kenmerk_15 := v_flex_naam_15 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_15, rec.flex_15);
v_cnt_kenmerk_16 := v_flex_naam_16 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_16, rec.flex_16);
v_cnt_kenmerk_17 := v_flex_naam_17 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_17, rec.flex_17);
v_cnt_kenmerk_18 := v_flex_naam_18 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_18, rec.flex_18);
v_cnt_kenmerk_19 := v_flex_naam_19 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_19, rec.flex_19);
v_cnt_kenmerk_20 := v_flex_naam_20 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_20, rec.flex_20);
v_cnt_kenmerk_21 := v_flex_naam_21 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_21, rec.flex_21);
v_cnt_kenmerk_22 := v_flex_naam_22 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_22, rec.flex_22);
v_cnt_kenmerk_23 := v_flex_naam_23 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_23, rec.flex_23);
v_cnt_kenmerk_24 := v_flex_naam_24 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_24, rec.flex_24);
v_cnt_kenmerk_25 := v_flex_naam_25 || '|0=' || kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_25, rec.flex_25);
*/
v_cnt_kenmerk_01 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_01, rec.flex_01);
v_cnt_kenmerk_02 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_02, rec.flex_02);
v_cnt_kenmerk_03 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_03, rec.flex_03);
v_cnt_kenmerk_04 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_04, rec.flex_04);
v_cnt_kenmerk_05 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_05, rec.flex_05);
v_cnt_kenmerk_06 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_06, rec.flex_06);
v_cnt_kenmerk_07 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_07, rec.flex_07);
v_cnt_kenmerk_08 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_08, rec.flex_08);
v_cnt_kenmerk_09 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_09, rec.flex_09);
v_cnt_kenmerk_10 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_10, rec.flex_10);
v_cnt_kenmerk_11 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_11, rec.flex_11);
v_cnt_kenmerk_12 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_12, rec.flex_12);
v_cnt_kenmerk_13 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_13, rec.flex_13);
v_cnt_kenmerk_14 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_14, rec.flex_14);
v_cnt_kenmerk_15 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_15, rec.flex_15);
v_cnt_kenmerk_16 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_16, rec.flex_16);
v_cnt_kenmerk_17 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_17, rec.flex_17);
v_cnt_kenmerk_18 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_18, rec.flex_18);
v_cnt_kenmerk_19 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_19, rec.flex_19);
v_cnt_kenmerk_20 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_20, rec.flex_20);
v_cnt_kenmerk_21 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_21, rec.flex_21);
v_cnt_kenmerk_22 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_22, rec.flex_22);
v_cnt_kenmerk_23 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_23, rec.flex_23);
v_cnt_kenmerk_24 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_24, rec.flex_24);
v_cnt_kenmerk_25 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_25, rec.flex_25);
-- 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 flex<n> gevuld met <key>=<waarde>; zoniet, dan is
-- flex<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_cnt
( nummer_intern
, versie
, nummer_extern
, cnt_soort
, beschrijving
, mantel_nr
, mantel_nr_versie
, omschrijving
, dienst
, afdeling
, perslid_eig
, perslid_beh
, opmerking
, datum_ingang
, datum_rappel
, datum_opzeg
, datum_eind
, soortcontact
, bedrijf_naam
, contact_naam
, kpn_code
, kostensoort
, bedrag
, bedrag_termijn
, uurtarief
, korting
, scope
, gebouwcode
, verlengen
, flex1, flex2, flex3, flex4, flex5
, flex6, flex7, flex8, flex9, flex10
, flex11, flex12, flex13, flex14, flex15
, flex16, flex17, flex18, flex19, flex20
, flex21, flex22, flex23, flex24, flex25
)
VALUES ( v_nummer_intern
, v_versie
, v_nummer_extern
, v_cnt_soort
, v_beschrijving
, v_mantel_nr
, v_mantel_nr_versie
, v_omschrijving
, v_dienst
, v_afdeling
, v_perslid_eig
, v_perslid_beh
, v_opmerking
, v_ingangsdatum
, v_rappeldatum
, v_opzegdatum
, v_einddatum
, v_srtcontact
, v_bedrijfnaam
, v_contactnaam
, v_kpn_code
, v_kostensoort_code
, v_bedrag
, v_bedrag_termijn
, v_uurtarief
, v_korting
, v_scope_type
, v_gebouwcode
, v_verlengen
, v_cnt_kenmerk_01, v_cnt_kenmerk_02, v_cnt_kenmerk_03, v_cnt_kenmerk_04, v_cnt_kenmerk_05
, v_cnt_kenmerk_06, v_cnt_kenmerk_07, v_cnt_kenmerk_08, v_cnt_kenmerk_09, v_cnt_kenmerk_10
, v_cnt_kenmerk_11, v_cnt_kenmerk_12, v_cnt_kenmerk_13, v_cnt_kenmerk_14, v_cnt_kenmerk_15
, v_cnt_kenmerk_16, v_cnt_kenmerk_17, v_cnt_kenmerk_18, v_cnt_kenmerk_19, v_cnt_kenmerk_20
, v_cnt_kenmerk_21, v_cnt_kenmerk_22, v_cnt_kenmerk_23, v_cnt_kenmerk_24, v_cnt_kenmerk_25
);
COMMIT;
v_count_imp := v_count_imp + 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;
END LOOP;
END IF;
IF (v_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'
, 'Contracten/#ingelezen importregels: ' || TO_CHAR (v_count_rec)
, '');
fac.imp_writelog ( p_import_key, 'S'
, 'Contracten/#ongeldige niet ingelezen importregels: ' || TO_CHAR (v_count_rec - v_count_imp)
, '');
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 contracten afgebroken!');
END schg_import_cnt_schg;
/
CREATE OR REPLACE PROCEDURE schg_update_cnt_schg (p_import_key IN NUMBER)
AS
-- Cursor zoekt direct alle afgeleide gegevens.
-- Een leeg veld betekent dus: <20>f deze regel overslaan, <20>f nieuwe data toevoegen.
CURSOR c1
IS
WITH imp_cnt AS
( SELECT i.nummer_intern
, i.versie
, i.nummer_extern
, i.cnt_soort
, i.beschrijving
, i.mantel_nr
, i.mantel_nr_versie
, i.omschrijving
, i.dienst
, i.afdeling
, i.perslid_eig
, i.perslid_beh
, i.opmerking
, i.datum_ingang
, i.datum_rappel
, i.datum_opzeg
, i.datum_eind
, i.soortcontact
, i.bedrijf_naam
, i.contact_naam
, i.kpn_code
, i.kostensoort
, i.bedrag
, i.bedrag_termijn
, i.uurtarief
, i.korting
, i.scope
, i.gebouwcode
, i.verlengen
, disc.ins_discipline_key
, mntl.cnt_contract_key mantel_key
, d.prs_dienst_key
, afd.prs_afdeling_key
, eig.prs_afdeling_key prs_afdeling_key_eig
, eig.prs_perslid_key prs_perslid_key_eig
, beh.prs_perslid_key prs_perslid_key_beh
, CASE WHEN i.soortcontact = 'P'
THEN (SELECT prs_perslid_key
FROM prs_perslid
WHERE LOWER(TRIM(prs_perslid_email)) = LOWER(i.bedrijf_naam)
)
ELSE (SELECT MIN (prs_bedrijf_key)
FROM prs_bedrijf
WHERE (1=1) --prs_bedrijf_contract IS NOT NULL
AND ( TRIM(prs_bedrijf_naam_upper) = UPPER (i.bedrijf_naam)
OR UPPER(TRIM(prs_leverancier_nr)) = UPPER (i.bedrijf_naam)
)
)
END prs_bedrijf_key
, kpn.prs_kostenplaats_key
, ksr.prs_kostensoort_key
, i.flex1, i.flex2, i.flex3, i.flex4, i.flex5
, i.flex6, i.flex7, i.flex8, i.flex9, i.flex10
, i.flex11, i.flex12, i.flex13, i.flex14, i.flex15
, i.flex16, i.flex17, i.flex18, i.flex19, i.flex20
, i.flex21, i.flex22, i.flex23, i.flex24, i.flex25
FROM fac_imp_cnt i
, (SELECT *
FROM cnt_discipline
WHERE ins_discipline_verwijder IS NULL
) disc
, (SELECT c.*
FROM cnt_v_aanwezigcontract c
, cnt_disc_params dp
WHERE c.ins_discipline_key = dp.cnt_ins_discipline_key
AND dp.cnt_srtcontract_type = 6
) mntl
, prs_dienst d
, (SELECT *
FROM prs_afdeling
WHERE prs_afdeling_verwijder IS NULL
) afd
, prs_v_aanwezigperslid eig
, prs_v_aanwezigperslid beh
, prs_v_aanwezigkostenplaats kpn
, prs_kostensoort ksr
WHERE UPPER(i.cnt_soort) = UPPER(TRIM(disc.ins_discipline_omschrijving(+)))
AND UPPER(i.mantel_nr) = UPPER(TRIM(mntl.cnt_contract_nummer_intern(+)))
AND UPPER(i.dienst) = UPPER(TRIM(d.prs_dienst_omschrijving(+)))
AND UPPER(i.afdeling) = TRIM(afd.prs_afdeling_upper(+))
AND UPPER(i.perslid_eig) = UPPER(TRIM(eig.prs_perslid_email(+)))
AND UPPER(i.perslid_beh) = UPPER(TRIM(beh.prs_perslid_email(+)))
AND UPPER(i.kpn_code) = TRIM(kpn.prs_kostenplaats_upper(+))
AND UPPER(i.kostensoort) = TRIM(ksr.prs_kostensoort_upper(+))
)
SELECT a.nummer_intern
, a.nummer_extern
, a.cnt_soort
, dp.cnt_srtcontract_type
, a.ins_discipline_key
, a.beschrijving
, a.mantel_nr
, a.mantel_nr_versie
, a.mantel_key
, a.omschrijving
, a.versie
, a.dienst
, a.prs_dienst_key
, a.afdeling
, a.prs_afdeling_key
, a.perslid_eig
, a.prs_perslid_key_eig
, a.prs_afdeling_key_eig
, a.perslid_beh
, a.prs_perslid_key_beh
, a.opmerking
, a.datum_ingang
, a.datum_eind
, a.datum_opzeg
, a.datum_rappel
, a.soortcontact
, a.bedrijf_naam
, a.prs_bedrijf_key
, a.contact_naam
, cp.prs_contactpersoon_key
, a.kpn_code
, a.prs_kostenplaats_key
, a.kostensoort
, a.prs_kostensoort_key
, a.bedrag
, a.bedrag_termijn
, a.uurtarief
, a.korting
, a.scope locgeb_scope
, a.gebouwcode locgeb_code
, gg.plaats_scope
, gg.plaats_key
, a.verlengen
, a.flex1 cnt_kenmerkwaarde1
, a.flex2 cnt_kenmerkwaarde2
, a.flex3 cnt_kenmerkwaarde3
, a.flex4 cnt_kenmerkwaarde4
, a.flex5 cnt_kenmerkwaarde5
, a.flex6 cnt_kenmerkwaarde6
, a.flex7 cnt_kenmerkwaarde7
, a.flex8 cnt_kenmerkwaarde8
, a.flex9 cnt_kenmerkwaarde9
, a.flex10 cnt_kenmerkwaarde10
, a.flex11 cnt_kenmerkwaarde11
, a.flex12 cnt_kenmerkwaarde12
, a.flex13 cnt_kenmerkwaarde13
, a.flex14 cnt_kenmerkwaarde14
, a.flex15 cnt_kenmerkwaarde15
, a.flex16 cnt_kenmerkwaarde16
, a.flex17 cnt_kenmerkwaarde17
, a.flex18 cnt_kenmerkwaarde18
, a.flex19 cnt_kenmerkwaarde19
, a.flex20 cnt_kenmerkwaarde20
, a.flex21 cnt_kenmerkwaarde21
, a.flex22 cnt_kenmerkwaarde22
, a.flex23 cnt_kenmerkwaarde23
, a.flex24 cnt_kenmerkwaarde24
, a.flex25 cnt_kenmerkwaarde25
FROM imp_cnt a
, cnt_disc_params dp
, prs_contactpersoon cp
, (SELECT 'L' plaats_scope
, alg_locatie_key plaats_key
, alg_locatie_code plaats_code
FROM alg_v_aanweziglocatie
UNION
SELECT 'G'
, alg_gebouw_key
, alg_gebouw_code
FROM alg_v_aanweziggebouw
) gg
WHERE a.ins_discipline_key = dp.cnt_ins_discipline_key
AND UPPER(a.contact_naam) = UPPER(TRIM(cp.prs_contactpersoon_email(+)))
AND a.prs_bedrijf_key = cp.prs_bedrijf_key(+)
AND a.scope = gg.plaats_scope(+)
AND a.gebouwcode = gg.plaats_code(+);
-- Constanten
c_contract_type NUMBER := 5; -- Leverancier (met scope)
v_errormsg VARCHAR2(1000) := '-';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2(200);
v_aanduiding VARCHAR2(200);
v_geldig NUMBER(1);
v_facilitor_key NUMBER;
v_perslid_key_eig NUMBER;
v_perslid_key_beh NUMBER;
v_typecontract_key NUMBER;
v_cnt_discipline_key NUMBER;
v_contactpersoon_key NUMBER;
v_cnt_status NUMBER;
v_termijn_type VARCHAR2(1);
v_termijn_aantal NUMBER;
v_termijn_key_opzeg NUMBER;
v_termijn_key_rappel NUMBER;
v_contract_key NUMBER;
v_count NUMBER;
v_count_tot NUMBER;
v_count_cntnew NUMBER;
v_count_cntupd NUMBER;
v_srtnoti_code VARCHAR2(6);
v_fulltext varchar2(2000);
-- SUBPROC
PROCEDURE bepaal_termijn( p_start IN DATE
, p_eind IN DATE
, p_termijn_type OUT VARCHAR2
, p_termijn_aantal OUT NUMBER
, p_afronden IN BOOLEAN
)
AS
v_type VARCHAR2(1) := 'W';
v_aantal NUMBER := 0;
v_zelfde_dag BOOLEAN;
v_zelfde_weekdag BOOLEAN;
v_zelfde_maand BOOLEAN;
min_jaar NUMBER := 3; -- Afronden op jaren als het aantal dagen groter is dan dit aantal jaren
min_maand NUMBER := 3; -- Afronden op maanden als het aantal dagen groter is dan dit aantal maanden.
min_week NUMBER := 4; -- Afronden op weken als het aantal dagen groter is dan dit aantal weken.
BEGIN
IF p_start IS NOT NULL AND p_eind > p_start
THEN
v_zelfde_weekdag := (TO_CHAR(p_start, 'D') = TO_CHAR(p_eind, 'D'));
v_zelfde_dag := (TO_CHAR(p_start, 'dd') = TO_CHAR(p_eind, 'dd'));
v_zelfde_maand := (TO_CHAR(p_start, 'mm') = TO_CHAR(p_eind, 'mm'));
CASE WHEN (v_zelfde_dag AND v_zelfde_maand)
THEN
v_type := 'Y';
v_aantal := TO_NUMBER(TO_CHAR(p_eind, 'yyyy')) - TO_NUMBER(TO_CHAR(p_start, 'yyyy'));
WHEN (v_zelfde_dag AND NOT v_zelfde_maand)
THEN
v_type := 'M';
v_aantal := ROUND(MONTHS_BETWEEN(p_eind, p_start));
WHEN (v_zelfde_weekdag)
THEN
v_type := 'W';
v_aantal := ROUND((p_eind - p_start) / 7);
ELSE
v_type := 'D';
v_aantal := p_eind - p_start;
IF p_afronden
THEN
CASE WHEN v_aantal > (365 * min_jaar)
THEN -- afronden op jaren
v_type := 'Y';
v_aantal := ROUND(v_aantal / 365);
WHEN v_aantal > (30 * min_maand)
THEN -- afronden op maanden
v_type := 'M';
v_aantal := ROUND(v_aantal / 30);
WHEN v_aantal > (7 * min_week)
THEN -- afronden op weken
v_type := 'W';
v_aantal := ROUND(v_aantal / 7);
END CASE;
END IF;
END CASE;
END IF;
--
v_aantal := LEAST(v_aantal, 999);
IF v_aantal < 0
THEN
v_aantal := 0;
v_type := 'W';
END IF;
--
p_termijn_type := v_type;
p_termijn_aantal := v_aantal;
END; -- SUBPROC bepaal_termijn
-- SUBPROC
-- p_kenmerkwaarde = 'Looptijd Maximaal|1=24'. Ofwel: kenmerk_omschrijving|groep=waarde.
-- p_kenmerkwaarde = '1049|1=24'. Ofwel: kenmerk_key|groep=waarde.
PROCEDURE upsert_cntkenmerk( p_cnt_key IN NUMBER
, p_kenmerkwaarde IN VARCHAR2)
AS
v_kenmerk_key NUMBER;
v_srtkenmerk_type cnt_srtkenmerk.cnt_srtkenmerk_kenmerktype%TYPE;
ccount NUMBER;
v_srtkenmerk_key NUMBER;
v_groep NUMBER;
v_kenmerk VARCHAR2 (50);
v_waarde VARCHAR2 (255);
v_objectnaam fac_kenmerkdomein.fac_kenmerkdomein_objectnaam%TYPE;
v_kolomnaam fac_kenmerkdomein.fac_kenmerkdomein_kolomnaam%TYPE;
v_kolomtxt fac_kenmerkdomein.fac_kenmerkdomein_kolomtxt%TYPE;
sql_stmt VARCHAR2 (1000);
v_kenmerkdeel_key NUMBER;
l_cursor_1 INTEGER;
l_rowsprocessed NUMBER DEFAULT 0;
BEGIN
IF p_kenmerkwaarde IS NOT NULL
THEN
v_errormsg := 'Fout bij bepalen kenmerk [' || SUBSTR(p_kenmerkwaarde, 1, 200) || ']';
v_kenmerk := SUBSTR (p_kenmerkwaarde, 1, INSTR (p_kenmerkwaarde, '|') - 1);
v_groep := fac.safe_to_number(SUBSTR( p_kenmerkwaarde
, INSTR(p_kenmerkwaarde, '|') + 1
, INSTR(p_kenmerkwaarde, '=') - 1 - INSTR(p_kenmerkwaarde, '|')
)
);
v_waarde := SUBSTR(p_kenmerkwaarde, INSTR(p_kenmerkwaarde, '=') + 1);
IF fac.safe_to_number(v_kenmerk) IS NULL
THEN
-- Er kunnen drie kenmerken met dezelfde omschrijving gedefinieerd worden voor een object,
-- namenlijk op drie niveaus discipline (D), 0bjectgroep (G) en objectsoort (S).
-- Bij meerdere dezelfde kenmerken nemen we het kenmerk met de laagste volgnummer.
SELECT MAX(cnt_kenmerk_key)
, MAX(cnt_srtkenmerk_key)
, MAX(cnt_srtkenmerk_kenmerktype)
INTO v_kenmerk_key
, v_srtkenmerk_key
, v_srtkenmerk_type
FROM ( SELECT k.cnt_kenmerk_key
, sk.cnt_srtkenmerk_key
, sk.cnt_srtkenmerk_kenmerktype
, k.cnt_kenmerk_volgnummer
FROM cnt_v_aanwezigcontract c
, cnt_kenmerk k
, cnt_srtkenmerk sk
WHERE ( c.ins_discipline_key = k.cnt_srtcontract_key
or k.cnt_srtcontract_key IS NULL
)
AND k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key
AND c.cnt_contract_key = p_cnt_key
AND k.cnt_kenmerk_groep = v_groep
AND COALESCE(UPPER(k.cnt_kenmerk_omschrijving), sk.cnt_srtkenmerk_upper) = UPPER(v_kenmerk)
AND k.cnt_kenmerk_verwijder IS NULL
AND sk.cnt_srtkenmerk_verwijder IS NULL
ORDER BY k.cnt_kenmerk_volgnummer
)
WHERE ROWNUM = 1;
ELSE
SELECT k.cnt_kenmerk_key
, sk.cnt_srtkenmerk_key
, sk.cnt_srtkenmerk_kenmerktype
INTO v_kenmerk_key
, v_srtkenmerk_key
, v_srtkenmerk_type
FROM cnt_kenmerk k
, cnt_srtkenmerk sk
WHERE k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key
AND k.cnt_kenmerk_groep = v_groep
AND k.cnt_kenmerk_key = v_kenmerk
ORDER BY k.cnt_kenmerk_volgnummer;
END IF;
IF v_waarde IS NOT NULL
THEN
IF v_srtkenmerk_type IN ('R', 'r', 'S')
THEN
v_errormsg := 'Fout bij bepalen eigen tabel';
SELECT COUNT (*)
INTO ccount
FROM cnt_srtkenmerk sk
, fac_kenmerkdomein d
WHERE sk.cnt_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 [' || SUBSTR(v_waarde, 1, 200) || ']';
IF ccount = 1
THEN
-- Eigen tabel
SELECT TO_CHAR (ud.fac_usrdata_key)
INTO v_waarde
FROM cnt_srtkenmerk sk
, fac_kenmerkdomein d
, fac_v_aanwezigusrdata ud
WHERE sk.cnt_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 cnt_srtkenmerk sk
, fac_kenmerkdomein d
WHERE sk.cnt_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(cnt_kenmerkcontract_key)
INTO ccount
, v_kenmerkdeel_key
FROM cnt_kenmerkcontract
WHERE cnt_contract_key = p_cnt_key
AND cnt_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 AND v_kenmerk_key IS NOT NULL
THEN
v_errormsg := 'Fout bij toevoegen waarde [' || SUBSTR(v_waarde, 1, 200) || ']';
INSERT INTO cnt_kenmerkcontract
( cnt_contract_key
, cnt_kenmerk_key
, cnt_kenmerkcontract_waarde
)
VALUES ( p_cnt_key
, v_kenmerk_key
, v_waarde
);
ELSE
v_errormsg := 'Fout bij bijwerken waarde [' || SUBSTR(v_waarde, 1, 200) || ']';
UPDATE cnt_kenmerkcontract
SET cnt_kenmerkcontract_waarde = v_waarde
WHERE cnt_kenmerkcontract_key = v_kenmerkdeel_key;
END IF;
ELSE
-- Verwijder kenmerken die al bestaan maar met de nieuwe import leeg zijn.
DELETE cnt_kenmerkcontract
WHERE cnt_kenmerk_key = v_kenmerk_key
AND cnt_contract_key = p_cnt_key;
END IF;
END IF;
EXCEPTION
WHEN OTHERS THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || v_errormsg
, 'upsert_cntkenmerk'
);
END; -- SUBPROC upsert_cntkenmerk
BEGIN
v_count_tot := 0;
v_count_cntnew := 0;
v_count_cntupd := 0;
v_aanduiding := '';
v_errormsg := 'Fout bij bepalen user: _FACILITOR';
SELECT prs_perslid_key
INTO v_facilitor_key
FROM prs_perslid
WHERE prs_perslid_oslogin = '_FACILITOR';
FOR rec IN c1
LOOP
BEGIN
v_geldig := 1;
v_count_tot := v_count_tot + 1;
v_aanduiding := '['|| rec.cnt_soort ||'|'|| rec.nummer_intern ||'|'|| rec.nummer_extern ||'|'|| rec.beschrijving ||'] ';
-- Eerst controleren of de ingevulde gegevens wel zinning/geldig zijn.
-- Voor -ontbrekende- verplichte gegevens proberen we wat zinnigs (en
-- geldigs!) te bedenken.
-- Toevoegen/bijwerken wordt pas gedaan als alles zinnig is bevonden.
-- Verplichte velden (via interface) zijn bij import al gecontroleerd!
-- Afdeling: moet geldig zijn!
v_errormsg := 'Fout bij bepalen afdeling: ' || rec.afdeling;
IF (rec.prs_afdeling_key IS NULL)
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || v_errormsg
, 'Contract wordt overgeslagen'
);
v_geldig := 0;
END IF;
-- Eigenaar (als meegegeven)
-- In geval van abonnement verplicht.
IF (rec.perslid_eig IS NOT NULL AND rec.prs_perslid_key_eig IS NULL)
THEN -- *niet gevonden, wel meegegeven
v_errormsg := 'Fout bij bepalen eigenaar: ' || rec.perslid_eig;
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || v_errormsg
, 'leeg gelaten'
);
ELSIF (rec.prs_perslid_key_eig IS NOT NULL)
THEN -- *wel gevonden (impliceert meegegeven)
v_perslid_key_eig := rec.prs_perslid_key_eig;
ELSE -- *niet meegegeven, dus niet gevonden
IF (rec.ins_discipline_key IS NOT NULL)
THEN -- Speciaal geval abonnementen: abonnee (eigenaar) is dan verplicht.
-- Contract is een abonnement, als de contractsoort aan een catalogus
-- gekoppeld is.
-- Is er een (actuele) catalogus aan deze contractsoort gekoppeld?
SELECT COUNT(*)
INTO v_count
FROM bes_disc_params p
, bes_discipline b
WHERE p.bes_disc_params_cnt_disckey = rec.ins_discipline_key
AND p.bes_ins_discipline_key = b.ins_discipline_key
AND b.ins_discipline_verwijder IS NULL;
IF (v_count > 0)
THEN -- dit is een abonnement, dus de eigenaar is verplicht
v_errormsg := 'Fout bij bepalen eigenaar-abonnee';
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || v_errormsg
, 'Contract wordt overgeslagen'
);
v_geldig := 0;
END IF;
END IF;
END IF;
-- Beheerder: backup _FACILITOR.
v_errormsg := 'Fout bij bepalen beheerder: ' || rec.perslid_beh;
IF (rec.prs_perslid_key_beh IS NULL)
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || v_errormsg
, '_FACILITOR gebruikt'
);
v_perslid_key_beh := v_facilitor_key;
ELSE
v_perslid_key_beh := rec.prs_perslid_key_beh;
END IF;
-- Bedrijf: moet geldig zijn!
v_errormsg := 'Fout bij bepalen bedrijf: ' || rec.bedrijf_naam;
IF (rec.prs_bedrijf_key IS NULL)
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || v_errormsg
, 'Contract wordt overgeslagen'
);
v_geldig := 0;
END IF;
-- Kostenplaats: moet bestaan.
v_errormsg := 'Fout bij bepalen kostenplaats: ' || rec.kpn_code;
IF (rec.prs_kostenplaats_key IS NULL)
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || v_errormsg
, 'Contract wordt overgeslagen'
);
v_geldig := 0;
END IF;
-- Locatie/gebouw (als meegegeven): moet bestaan en ook passen bij de
-- contractsoort (type_key 3=Ondersteuning of 5=Leverancier).
IF (rec.locgeb_scope IS NOT NULL)
THEN
v_errormsg := 'Fout bij bepalen locatie/gebouw: ' || rec.locgeb_scope ||'|'|| rec.locgeb_code;
IF (rec.plaats_key IS NULL)
THEN -- Geen locatie/gebouw gevonden.
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || v_errormsg
, 'Contract/scope wordt overgeslagen'
);
v_geldig := 0;
END IF;
v_errormsg := 'Fout bij matchen contractsoort-scope';
IF (rec.cnt_srtcontract_type NOT IN (3, 5))
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || v_errormsg
, 'Contract/scope wordt overgeslagen'
);
v_geldig := 0;
END IF;
END IF;
-- Mantel: niet verplicht, wel rapporteren als niets gevonden.
v_errormsg := 'Fout bij bepalen mantel: ' || rec.mantel_nr;
IF (rec.mantel_nr IS NOT NULL AND rec.mantel_key IS NULL)
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || v_errormsg
, 'Contract niet aan mantel gekoppeld'
);
END IF;
-- Dienst: niet verplicht, wel rapporteren als niets gevonden.
v_errormsg := 'Fout bij bepalen dienst: ' || rec.dienst;
IF (rec.dienst IS NOT NULL AND rec.prs_dienst_key IS NULL)
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || v_errormsg
, 'Contract niet aan dienst gekoppeld'
);
END IF;
-- Alleen verder gaan als alles zinnig bevonden is.
IF (v_geldig = 1)
THEN
-- Contractsoort: toevoegen (type Leverancier).
IF (rec.ins_discipline_key IS NULL)
THEN
-- Misschien is de contractsoort tijdens import al toegevoegd?
-- (dan was 'ie er voor de cursor nog niet.)
BEGIN
v_errormsg := 'Fout bij bepalen contractsoort';
SELECT ins_discipline_key
INTO v_cnt_discipline_key
FROM cnt_discipline
WHERE ins_discipline_verwijder IS NULL
AND UPPER(ins_discipline_omschrijving) = UPPER(rec.cnt_soort);
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- Contractsoort bestaat gewoon niet; toevoegen.
v_errormsg := 'Fout bij toevoegen contractsoort:' || rec.cnt_soort;
INSERT INTO ins_tab_discipline
( ins_discipline_module
, ins_discipline_omschrijving
)
VALUES ( 'CNT'
, rec.cnt_soort
)
RETURNING ins_discipline_key
INTO v_cnt_discipline_key;
-- Type Leverancier, geen kostensoort, geen factuurmarges.
INSERT INTO cnt_disc_params
( cnt_ins_discipline_key
, cnt_srtcontract_type
)
VALUES ( v_cnt_discipline_key
, c_contract_type
);
fac.imp_writelog( p_import_key, 'I'
, v_aanduiding || 'Contractsoort "' || rec.cnt_soort || '" aangemaakt'
, 'Nieuwe contractsoort'
);
END;
ELSE
v_cnt_discipline_key := rec.ins_discipline_key;
END IF;
-- Contactpersoon (als meegegeven): bepalen/toevoegen bij bedrijf.
IF (rec.contact_naam IS NOT NULL AND rec.prs_contactpersoon_key IS NULL)
THEN
-- Misschien is de contractsoort tijdens import al toegevoegd?
-- (dan was 'ie er voor de cursor nog niet.)
BEGIN
v_errormsg := 'Fout bij bepalen contactpersoon';
SELECT prs_contactpersoon_key
INTO v_contactpersoon_key
FROM prs_contactpersoon
WHERE prs_contactpersoon_verwijder IS NULL
AND prs_bedrijf_key = rec.prs_bedrijf_key
AND UPPER(prs_contactpersoon_naam) = UPPER(rec.contact_naam);
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- Contactpersoon bestaat gewoon niet; toevoegen.
v_errormsg := 'Fout bij toevoegen contactpersoon:' || rec.contact_naam;
INSERT INTO prs_contactpersoon
( prs_contactpersoon_naam
, prs_bedrijf_key
)
VALUES ( rec.contact_naam
, rec.prs_bedrijf_key
)
RETURNING prs_contactpersoon_key
INTO v_contactpersoon_key;
fac.imp_writelog( p_import_key, 'I'
, v_aanduiding || 'Contactpersoon "' || rec.contact_naam || '" aangemaakt'
, 'Nieuwe contactpersoon'
);
END;
ELSE
v_contactpersoon_key := rec.prs_contactpersoon_key;
END IF;
-- Opzegtermijn: bepalen/toevoegen.
-- Als geen opzegtermijn ingevuld, dan is er geen opzegtermijn: 'Geen' = 0 weken.
v_errormsg := 'Fout bij bepalen opzegtermijn';
bepaal_termijn(rec.datum_opzeg, rec.datum_eind, v_termijn_type, v_termijn_aantal, true);
-- Bestaat de termijn al?
BEGIN
v_errormsg := 'Fout bij bepalen opzegtermijn';
SELECT cnt_termijn_key
INTO v_termijn_key_opzeg
FROM cnt_termijn
WHERE cnt_termijn_type = v_termijn_type
AND cnt_termijn_aantal = v_termijn_aantal;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_errormsg := 'Fout bij toevoegen opzegtermijn';
INSERT INTO cnt_termijn
( cnt_termijn_omschrijving
, cnt_termijn_type
, cnt_termijn_aantal
)
VALUES ( TO_CHAR(v_termijn_aantal) || CASE WHEN v_termijn_type = 'Y' THEN 'Jaar'
WHEN v_termijn_type = 'M' THEN 'Maand(en)'
WHEN v_termijn_type = 'D' THEN 'Dage(en)'
END
, v_termijn_type
, v_termijn_aantal
)
RETURNING cnt_termijn_key
INTO v_termijn_key_opzeg;
END;
-- Rappeltermijn: bepalen/toevoegen.
-- Als geen rappeltermijn ingevuld, dan is er geen rappeltermijn: 'Geen' = 0 weken.
v_errormsg := 'Fout bij bepalen rappeltermijn';
-- Als geen opzegdatum, dan einddatum.
bepaal_termijn(rec.datum_rappel, COALESCE(rec.datum_opzeg, rec.datum_eind), v_termijn_type, v_termijn_aantal, true);
-- Bestaat de termijn al?
BEGIN
v_errormsg := 'Bepalen rappeltermijn';
SELECT cnt_termijn_key
INTO v_termijn_key_rappel
FROM cnt_termijn
WHERE cnt_termijn_type = v_termijn_type
AND cnt_termijn_aantal = v_termijn_aantal;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_errormsg := 'Toevoegen rappeltermijn';
INSERT INTO cnt_termijn
( cnt_termijn_omschrijving
, cnt_termijn_type
, cnt_termijn_aantal
)
VALUES ( TO_CHAR(v_termijn_aantal) || CASE WHEN v_termijn_type = 'Y' THEN 'Jaar'
WHEN v_termijn_type = 'M' THEN 'Maand(en)'
WHEN v_termijn_type = 'D' THEN 'Dage(en)'
END
, v_termijn_type
, v_termijn_aantal
)
RETURNING cnt_termijn_key
INTO v_termijn_key_rappel;
END;
-- Controleren of er al een contract met hetzelfde nummer en versie;
-- bestaat; toevoegen vs. bijwerken.
v_errormsg := 'Fout bij bepalen contract';
SELECT COUNT(*)
INTO v_count
FROM cnt_v_aanwezigcontract
WHERE TRIM(cnt_contract_nummer_intern) = rec.nummer_intern
AND COALESCE(cnt_contract_versie, '0') = COALESCE(rec.versie, '0');
IF (v_count = 0) -- Contract bestaat nog niet --> toevoegen.
THEN
-- Als rec.nummer_intern is NULL, dan wordt door FACILITOR een
-- nummer bepaald (= cnt_contract_key)!
v_errormsg := 'Fout bij toevoegen contract.';
-- Status van nieuwe melding is afhankelijk van of het contract approval mechanisme actief is en
-- het bedrag moet groter zijn als limiet 1 anders hoeft er <20>berhaupt niet gefiatteerd te worden en kan het contract direct actief (0) worden.
IF fac.getSetting('cnt_contract_approval') = 1 AND rec.bedrag > fac.getSetting('cnt_contract_limit1')
THEN
v_cnt_status := 2;
ELSE
v_cnt_status := 0;
END IF;
INSERT INTO cnt_contract
( cnt_contract_nummer
, cnt_contract_omschrijving
, cnt_contract_looptijd_tot
, cnt_contract_kosten
, cnt_contract_uurloon
, cnt_prs_bedrijf_key
, cnt_contract_nummer_intern
, cnt_contract_korting
, prs_contactpersoon_key
, ins_discipline_key
, cnt_contract_document
, prs_perslid_key_eig
, prs_perslid_key_beh
, prs_afdeling_key_eig
, cnt_contract_status
, cnt_contract_looptijd_van
, prs_kostenplaats_key
, prs_kostensoort_key
, cnt_contract_termijnkosten
, cnt_contract_opmerking
, cnt_contract_mantel_key
, cnt_contract_opzegtermijn
, cnt_contract_rappeltermijn
, cnt_contract_versie
, prs_dienst_key
, cnt_contract_verlenging
)
VALUES ( rec.nummer_extern
, rec.beschrijving
, rec.datum_eind
, rec.bedrag
, rec.uurtarief
, rec.prs_bedrijf_key
, rec.nummer_intern
, rec.korting
, v_contactpersoon_key
, v_cnt_discipline_key
, rec.omschrijving
, v_perslid_key_eig
, v_perslid_key_beh
, rec.prs_afdeling_key
, v_cnt_status
, rec.datum_ingang
, rec.prs_kostenplaats_key
, rec.prs_kostensoort_key
, rec.bedrag_termijn
, rec.opmerking
, rec.mantel_key
, v_termijn_key_opzeg
, v_termijn_key_rappel
, rec.versie
, rec.prs_dienst_key
, rec.verlengen
)
RETURNING cnt_contract_key
INTO v_contract_key;
v_srtnoti_code := 'CNTNEW';
v_count_cntnew := v_count_cntnew + 1;
ELSE -- Contract bestaat al --> bijwerken.
SELECT c.cnt_contract_key
INTO v_contract_key
FROM cnt_contract c
WHERE TRIM(c.cnt_contract_nummer_intern) = rec.nummer_intern
AND COALESCE(c.cnt_contract_versie, '0') = COALESCE(rec.versie, '0')
AND c.cnt_contract_verwijder IS NULL
AND c.cnt_contract_looptijd_tot = (SELECT MAX(d.cnt_contract_looptijd_tot)
FROM cnt_contract d
WHERE d.cnt_contract_nummer_intern = c.cnt_contract_nummer_intern
AND COALESCE(d.cnt_contract_versie, '0') = COALESCE(c.cnt_contract_versie, '0')
);
v_errormsg := 'Fout bij bijwerken contract.';
UPDATE cnt_contract
SET cnt_contract_nummer = rec.nummer_extern
, cnt_contract_omschrijving = rec.beschrijving
, cnt_contract_looptijd_tot = rec.datum_eind
, cnt_contract_kosten = rec.bedrag
, cnt_contract_uurloon = rec.uurtarief
, cnt_prs_bedrijf_key = rec.prs_bedrijf_key
, cnt_contract_korting = rec.korting
, prs_contactpersoon_key = v_contactpersoon_key
, ins_discipline_key = v_cnt_discipline_key
, cnt_contract_document = rec.omschrijving
, prs_perslid_key_eig = v_perslid_key_eig
, prs_perslid_key_beh = v_perslid_key_beh
, prs_afdeling_key_eig = rec.prs_afdeling_key
, cnt_contract_looptijd_van = rec.datum_ingang
, prs_kostenplaats_key = rec.prs_kostenplaats_key
, prs_kostensoort_key = rec.prs_kostensoort_key
, cnt_contract_termijnkosten = rec.bedrag_termijn
, cnt_contract_opmerking = rec.opmerking
, cnt_contract_mantel_key = rec.mantel_key
, cnt_contract_opzegtermijn = v_termijn_key_opzeg
, cnt_contract_rappeltermijn = v_termijn_key_rappel
, cnt_contract_versie = rec.versie
, prs_dienst_key = rec.prs_dienst_key
, cnt_contract_verlenging = rec.verlengen
WHERE cnt_contract_key = v_contract_key;
v_srtnoti_code := 'CNTUPD';
v_count_cntupd := v_count_cntupd + 1;
END IF;
-- Upsert gebouwscope: bij UPDATE eerst kijken of scope al bestaat.
-- Zo niet, dan toevoegen (bij INSERT altijd toevoegen).
-- NB. Op deze manier kan een contract meerdere keren voorkomen in
-- het importbestand, met verschillende gebouwen.
IF (rec.plaats_key IS NOT NULL)
THEN -- Komt deze scope al voor?
SELECT COUNT(*)
INTO v_count
FROM cnt_contract_plaats
WHERE cnt_contract_key = v_contract_key
AND cnt_alg_plaats_key = rec.plaats_key
AND cnt_alg_plaats_code = rec.plaats_scope;
IF (v_count = 0) -- Scope komt nog niet voor, dus toevoegen.
THEN
v_errormsg := 'Fout bij toevoegen scope';
INSERT INTO cnt_contract_plaats
( cnt_contract_key
, cnt_alg_plaats_key
, cnt_alg_plaats_code
)
VALUES ( v_contract_key
, rec.plaats_key
, rec.plaats_scope
);
END IF;
END IF;
-- NULL-waarden resulteren NIET in het wissen van kenmerkvelden
-- (bijwerken kan wel, maar wissen dus niet)!
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde1);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde2);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde3);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde4);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde5);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde6);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde7);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde8);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde9);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde10);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde11);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde12);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde13);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde14);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde15);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde16);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde17);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde18);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde19);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde20);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde21);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde22);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde23);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde24);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde25);
fac.trackaction(v_srtnoti_code, v_contract_key, NULL, NULL, NULL);
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR(SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
COMMIT;
END;
END LOOP;
fac.imp_writelog( p_import_key, 'S', 'CNT-contracten/#ingelezen: ' || TO_CHAR (v_count_tot), '');
fac.imp_writelog( p_import_key, 'S', 'CNT-contracten/#toegevoegd: ' || TO_CHAR (v_count_cntnew), '');
fac.imp_writelog( p_import_key, 'S', 'CNT-contracten/#bijgewerkt: ' || TO_CHAR (v_count_cntupd), '');
COMMIT;
EXCEPTION
WHEN OTHERS THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog( p_import_key, 'E'
, v_errormsg
, 'Importproces contracten afgebroken!'
);
END schg_update_cnt_schg;
/
-------------------------------
--- NOTI-JOBS ---------------
-------------------------------
-- Contract-Rappel
--- Notificatie op contractbeheerder en/of verantwoordelijke
--- Onderstaand rapport is basisview en deze fungeert als bron voor de rappel-notificatie
CREATE OR REPLACE VIEW schg_v_cnt_rappel_basis
AS
SELECT d.ins_discipline_omschrijving,
c.cnt_contract_key,
c.cnt_contract_nummer_intern
|| DECODE (c.cnt_contract_versie,
NULL, '',
'.' || c.cnt_contract_versie)
cnt_contract_nr,
c.cnt_contract_looptijd_van begindatum,
c.cnt_contract_looptijd_tot einddatum,
cnt.cnt_getopzegdatum (c.cnt_contract_key) cnt_opzegdatum,
cnt.cnt_getrappeldatum (c.cnt_contract_key) cnt_rappeldatum,
DECODE (cnt.cnt_contract_status (c.cnt_contract_looptijd_van,
cnt.cnt_getrappeldatum (c.cnt_contract_key),
cnt.cnt_getopzegdatum (c.cnt_contract_key),
c.cnt_contract_looptijd_tot),
0, lcl.l ('lcl_cnt_future'),
1, lcl.l ('lcl_cnt_topical'),
2, lcl.l ('lcl_cnt_warn'),
3, lcl.l ('lcl_cnt_cancel'),
4, lcl.l ('lcl_cnt_past'))
fase_actief,
DECODE (
c.cnt_contract_status,
0,
DECODE (fac.getsetting ('cnt_contract_approval'),
1, lcl.l ('lcl_cnt_active_approval'),
lcl.l ('lcl_cnt_active')),
1,
lcl.l ('lcl_cnt_inactive'),
2,
lcl.l ('lcl_cnt_new'),
3,
lcl.l ('lcl_cnt_forapproval'))
cnt_contract_status,
(SELECT kc.cnt_kenmerkcontract_waarde
FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE k.cnt_kenmerk_key = kc.cnt_kenmerk_key
AND kc.cnt_contract_key = c.cnt_contract_key
AND k.cnt_kenmerk_key = 17) -- contractbeheerder
vink_beheerder,
(SELECT p.prs_perslid_email
FROM prs_perslid p
WHERE p.prs_perslid_key = c.prs_perslid_key_beh
AND p.prs_perslid_verwijder IS NULL)
beheerder_email,
(SELECT kc.cnt_kenmerkcontract_waarde
FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE k.cnt_kenmerk_key = kc.cnt_kenmerk_key
AND kc.cnt_contract_key = c.cnt_contract_key
AND k.cnt_kenmerk_key = 16) -- contractverantwoordelijke
vink_verantwoordelijke,
(SELECT p.prs_perslid_email
FROM prs_perslid p
WHERE p.prs_perslid_key = c.prs_perslid_key_eig
AND p.prs_perslid_verwijder IS NULL)
veantwoordelijke_email
FROM cnt_v_aanwezigcontract c, ins_tab_discipline d
WHERE c.ins_discipline_key = d.ins_discipline_key
AND d.ins_discipline_module = 'CNT';
-- SCHG: Contractbeheerder(_eig) is Beheerder/Administrateur en de Contractverantwoordelijke (_beh) is 1e aanspreekpunt die beslist over wel/niet verlengen.
CREATE OR REPLACE VIEW schg_v_noti_cntreminder
(
code,
sender,
receiver,
text,
key,
xkey,
xemail,
xmobile
)
AS -- Op rappel-datum TER INFO-mail naar de Beheerder/Administrateur sturen
SELECT 'CNTMAI',
NULL,
c.prs_perslid_key_beh,
'TER INFO: Rappel verstuurd voor contract ' || c.cnt_contract_nummer_intern
|| DECODE (c.cnt_contract_versie, NULL, '', '.' || c.cnt_contract_versie)
|| ' (' || c.cnt_contract_omschrijving || ' ' || b.prs_bedrijf_naam || ')'
|| ' - Moet uiterlijk per ' || TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key), 'dd-mm-yyyy')
|| ' worden verlengd of opgezegd.',
c.cnt_contract_key,
NULL,
NULL,
NULL
FROM schg_v_cnt_rappel_basis v, cnt_v_aanwezigcontract c, prs_bedrijf b
WHERE c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
AND v.cnt_contract_key = c.cnt_contract_key
AND v.vink_beheerder = 1
AND c.cnt_contract_status = 0
AND cnt.cnt_getrappeldatum (c.cnt_contract_key) = TRUNC (SYSDATE)
AND c.prs_perslid_key_beh <> COALESCE(c.prs_perslid_key_eig, -1) -- als administrateur gelijk aan 1e aanspreekpunt dan dan sturen we de info-mail niet uit
AND NOT EXISTS -- kenmerkveld 'Opgezegd' staat uit
(SELECT km.cnt_contract_key
FROM cnt_kenmerkcontract km, cnt_kenmerk k
WHERE km.cnt_contract_key = c.cnt_contract_key AND km.cnt_kenmerk_key = k.cnt_kenmerk_key AND k.cnt_kenmerk_key = 19)
UNION ALL -- Op rappel-datum ACTIE-mail naar het 1e aanspreekpunt sturen (contractverantwoordelijke)
SELECT 'CUST01',
NULL,
c.prs_perslid_key_eig,
'ACTIE: Rappel verstuurd voor contract ' || c.cnt_contract_nummer_intern
|| DECODE (c.cnt_contract_versie, NULL, '', '.' || c.cnt_contract_versie)
|| ' (' || c.cnt_contract_omschrijving || ' ' || b.prs_bedrijf_naam || ')'
|| ' - Moet uiterlijk per ' || TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key), 'dd-mm-yyyy')
|| ' worden verlengd of opgezegd.',
c.cnt_contract_key,
NULL,
NULL,
NULL
FROM schg_v_cnt_rappel_basis v, cnt_v_aanwezigcontract c, prs_bedrijf b
WHERE c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
AND v.cnt_contract_key = c.cnt_contract_key
AND v.vink_verantwoordelijke = 1
AND c.cnt_contract_status = 0
AND cnt.cnt_getrappeldatum (c.cnt_contract_key) = TRUNC (SYSDATE)
AND c.prs_perslid_key_eig IS NOT NULL
AND NOT EXISTS -- kenmerkveld 'Opgezegd' staat uit
(SELECT km.cnt_contract_key
FROM cnt_kenmerkcontract km, cnt_kenmerk k
WHERE km.cnt_contract_key = c.cnt_contract_key AND km.cnt_kenmerk_key = k.cnt_kenmerk_key AND k.cnt_kenmerk_key = 19)
;
-------------------------------
--- RAPPORTAGES ---------------
-------------------------------
-- Rapportage beheer simkaarten en mobiel
CREATE OR REPLACE VIEW schg_v_simkaarten_man
(
SIMKAART_NUMMER,
MOBIEL_NUMMER,
PUK_CODE,
STATUS,
OBJECT_IDENTIFICATIE,
OBJECT_VERVALDATUM,
GEKOPPELD_AAN_TYPE,
GEKOPPELD_AAN,
NR_INS_DEEL_KEY,
OBJ_INS_DEEL_KEY
)
AS
SELECT nr.ins_deel_upper,
flx.getflex ('INS', 12, nr.ins_deel_key) tel_nummer,
flx.getflex ('INS', 11, nr.ins_deel_key) puk_code,
CASE
WHEN d.ins_deel_upper IS NOT NULL THEN 'Gekoppeld'
ELSE 'Vrij'
END status,
d.ins_deel_upper,
d.ins_deel_vervaldatum,
d.gekoppeld_aan_type,
d.gekoppeld_aan,
nr.ins_deel_key,
d.ins_deel_key
FROM (SELECT v.ins_deel_key, v.ins_deel_upper
FROM ins_v_deel_gegevens v, ins_deel d
WHERE v.ins_discipline_key = 182 -- SIM-kaarten
AND v.ins_srtdeel_key = 5 -- SIM-kaarten
AND v.ins_deel_key = d.ins_deel_key
AND d.ins_deel_verwijder IS NULL
AND ( d.ins_deel_vervaldatum IS NULL
OR TRUNC (d.ins_deel_vervaldatum) > TRUNC (SYSDATE))) nr,
(SELECT d.ins_deel_key,
d.ins_deel_upper,
kw.ins_kenmerkdeel_waarde,
num.ins_deel_upper
nummer_gekoppeld,
DECODE (d.ins_alg_ruimte_type,
'R', 'Locatie',
'A', 'Afdeling',
'P', 'Persoon/Teamaccount',
'') gekoppeld_aan_type,
v.alg_plaatsaanduiding,
d.ins_deel_vervaldatum,
DECODE (d.ins_alg_ruimte_type,
'R', l.alg_locatie_omschrijving,
v.alg_plaatsaanduiding) gekoppeld_aan
FROM ins_deel d,
ins_kenmerkdeel kw,
ins_kenmerk k,
ins_deel num,
ins_v_deel_gegevens v,
alg_locatie l
WHERE d.ins_deel_key = kw.ins_deel_key
AND kw.ins_kenmerk_key = k.ins_kenmerk_key
AND k.ins_srtkenmerk_key = 25 -- SIM_kaart gekoppeld bij Pinapparaat
AND kw.ins_kenmerkdeel_verwijder IS NULL
AND kw.ins_kenmerkdeel_verwijder IS NULL
AND fac.safe_to_number (kw.ins_kenmerkdeel_waarde) =
num.ins_deel_key
AND d.ins_deel_key = v.ins_deel_key
AND d.ins_alg_locatie_key = l.alg_locatie_key(+)
) d
WHERE
nr.ins_deel_upper = d.nummer_gekoppeld(+) ;
CREATE OR REPLACE VIEW schg_v_rap_opdrachten
(
INTERN,
TYPE,
MLD_OPDR_KEY,
MLD_UITVOERENDE_KEY,
OPDRACHTNR,
STATUS,
MELDING,
BEHANDELAAR,
LOCATIE_PLAATS,
LOCATIE_OMSCHRIJVING,
GEBOUW_ADRES,
OPDRACHT_AANMAAKDATUM,
GEPLANDE_AANVANG,
GEPLANDE_AANVANG_B, -- berekend voor kalenderweergave
GEPLANDE_EINDDATUM,
GEPLANDE_EINDDATUM_B, -- berekend voor kalenderweergave
OPDRACHT_EINDDATUM,
MELDING_EINDDATUM,
OMSCHRIJVING,
PRS_PERSLID_KEY,
NAAM_UITVOERDER,
AFMELD_DATUM,
OPDRACHT_TYPE,
TD_NAAM,
PRIORITEIT,
STATUS_KALENDER, -- t.b.v. kalenderweergave
INS_SRTDISCIPLINE_KEY
)
AS
SELECT mu.intern,
CASE
WHEN mu.TYPE = 'B' AND mu.intern = 1 THEN 'Poule-opdracht'
WHEN mu.TYPE = 'P' AND mu.intern = 1 THEN 'Klus-opdracht'
WHEN mu.intern = 0 THEN 'Externe opdracht'
ELSE '<?>'
END
TYPE,
o.mld_opdr_key,
CASE
WHEN mu.TYPE = 'B' AND mu.intern = 1 THEN mu.mld_uitvoerende_key
WHEN mu.TYPE = 'P' AND mu.intern = 1 THEN o.prs_perslid_key
WHEN mu.intern = 0 THEN mu.mld_uitvoerende_key
ELSE NULL
END
mld_uitvoerende_key,
TO_CHAR (o.mld_melding_key)
|| '/'
|| o.mld_opdr_bedrijfopdr_volgnr
opdrachtnummer,
DECODE (
os.mld_statusopdr_key,
8, DECODE (o.mld_opdr_halted,
1, 'Onderbroken',
os.mld_statusopdr_omschrijving),
os.mld_statusopdr_omschrijving)
status,
std.mld_stdmelding_omschrijving,
COALESCE (p.prs_perslid_naam_full, '<nog geen behandelaar>')
behandelaar,
l.alg_locatie_plaats,
l.alg_locatie_omschrijving,
(SELECT g.alg_gebouw_naam || ' - ' || g.alg_gebouw_adres
FROM alg_v_onroerendgoed_gegevens v, alg_gebouw g
WHERE v.alg_gebouw_key = g.alg_gebouw_key
AND v.alg_onroerendgoed_keys = m.mld_alg_onroerendgoed_keys)
gebouw_adres,
o.mld_opdr_datumbegin,
o.mld_opdr_plandatum
geplande_aanvang,
CASE WHEN o.mld_opdr_plandatum IS NOT NULL THEN o.mld_opdr_plandatum ELSE o.mld_opdr_datumbegin END
geplande_aanvang_b,
o.mld_opdr_plandatum2
geplande_einddatum,
CASE WHEN o.mld_opdr_plandatum2 IS NOT NULL AND o.mld_opdr_plandatum IS NOT NULL THEN o.mld_opdr_plandatum2
WHEN o.mld_opdr_plandatum2 IS NULL AND o.mld_opdr_plandatum IS NOT NULL THEN o.mld_opdr_plandatum + 2/24
ELSE o.mld_opdr_datumbegin + 2/24
END
geplande_einddatum_b,
o.mld_opdr_einddatum,
m.mld_melding_einddatum,
TRIM (
REGEXP_REPLACE (
REGEXP_SUBSTR (o.mld_opdr_omschrijving,
'(([^ ]*)( |$)*){10}'),
'[[:space:]]',
' '))
|| '...'
omschrijving,
p.prs_perslid_key,
mu.naam
naam_uitvoerder,
(SELECT MAX (ft.fac_tracking_datum)
FROM fac_tracking ft
WHERE ft.fac_tracking_refkey = o.mld_opdr_key
AND ft.fac_srtnotificatie_key = 80) -- ORDAFM
afmeld_datum,
ot.mld_typeopdr_omschrijving,
CASE
WHEN mu.TYPE = 'B' AND mu.intern = 1 THEN COALESCE (p.prs_perslid_naam_full, '<nog geen behandelaar>')
WHEN mu.TYPE = 'P' AND mu.intern = 1 THEN mu.naam
ELSE ''
END td_naam,
COALESCE(v.prioriteit,'3 - NORMAAL')
prioriteit,
CASE
WHEN os.mld_statusopdr_omschrijving = 'Afgemeld' THEN 'Afgemeld'
WHEN os.mld_statusopdr_omschrijving = 'Afgewezen' THEN 'Afgewezen'
WHEN os.mld_statusopdr_omschrijving = 'Afgerond' THEN 'Afgerond'
WHEN mu.intern = 1 AND os.mld_statusopdr_omschrijving = 'Toegekend' AND o.mld_opdr_plandatum IS NULL THEN 'Nog inplannen'
WHEN mu.intern = 1 AND os.mld_statusopdr_omschrijving = 'Toegekend' AND o.mld_opdr_plandatum IS NOT NULL THEN 'Ingepland'
WHEN mu.intern = 0 AND os.mld_statusopdr_omschrijving = 'Toegekend' AND o.mld_opdr_plandatum IS NULL THEN 'Nog niet bevestigd'
WHEN mu.intern = 0 AND os.mld_statusopdr_omschrijving = 'Toegekend' AND o.mld_opdr_plandatum IS NOT NULL THEN 'Bevestigd'
ELSE ''
END status_kalender,
d.ins_srtdiscipline_key
FROM mld_opdr o,
mld_melding m,
mld_typeopdr ot,
prs_v_perslid_fullnames p,
ins_tab_discipline d,
mld_stdmelding std,
alg_locatie l,
alg_district d,
mld_v_uitvoerende mu,
mld_statusopdr os,
(
SELECT ko.mld_opdr_key, ud.fac_usrdata_code || ' - ' || ud.fac_usrdata_omschr prioriteit
FROM mld_kenmerkopdr ko, fac_usrdata ud
WHERE fac.safe_to_number(ko.mld_kenmerkopdr_waarde) = ud.fac_usrdata_key
AND fac_usrtab_key = 81 -- keuzelijst eigen tabel Prioriteit
AND ko.mld_kenmerk_key IN (23, 28) -- kenmerk Prioriteit
) v
WHERE o.mld_melding_key = m.mld_melding_key(+)
AND o.prs_perslid_key = p.prs_perslid_key(+)
AND o.mld_typeopdr_key = ot.mld_typeopdr_key
AND ot.mld_typeopdr_isofferte = 0 -- Alleen werkopdrachten
AND m.mld_stdmelding_key = std.mld_stdmelding_key(+)
AND std.mld_ins_discipline_key = d.ins_discipline_key(+)
AND m.mld_alg_locatie_key = l.alg_locatie_key -- alle std-meldingen hebben verplicht-niveau locatie/gebouw
AND l.alg_district_key = d.alg_district_key
AND o.mld_uitvoerende_keys = mu.mld_uitvoerende_key
AND os.mld_statusopdr_key = o.mld_statusopdr_key
AND o.mld_opdr_key = v.mld_opdr_key(+);
CREATE OR REPLACE VIEW schg_v_cal_opdrachten
(
USER_KEY,
TITLE,
VAN,
TOT,
ITEM_KEY,
COLOR,
TEXTCOLOR,
NAAM_UITVOERRDER,
LOCATIE_PLAATS,
STATUS_KALENDER,
INTERN,
OPDRACHT_TYPE,
INS_SRTDISCIPLINE_KEY
)
AS
SELECT mld_uitvoerende_key,
' - ' || opdrachtnr || CHR(10)
|| naam_uitvoerder || CHR(10)
|| gebouw_adres || CHR(10)
|| 'Status: ' || status_kalender || CHR(10)
|| CASE
WHEN geplande_aanvang IS NOT NULL AND geplande_einddatum IS NOT NULL THEN 'Bevestigd van ' || TO_CHAR(geplande_aanvang_b) || ' tot ' || TO_CHAR(geplande_einddatum_b)
WHEN geplande_aanvang IS NOT NULL AND geplande_einddatum IS NULL THEN 'Bevestigde aanvang: ' || TO_CHAR(geplande_aanvang_b)
WHEN geplande_aanvang IS NULL AND geplande_einddatum IS NOT NULL THEN 'Bevestigde einddatum: ' || TO_CHAR(geplande_einddatum_b)
ELSE '<nog te plannen>' END
|| CHR(10) || 'Prio: ' || prioriteit
title,
geplande_aanvang_b
van,
geplande_einddatum_b
tot,
mld_opdr_key,
DECODE (intern, 1,
DECODE (status_kalender,
'Afgewezen', '#C0C0C0', -- grijs
'Afgemeld', '#C0C0C0', -- grijs
'Afgerond', '#C0C0C0', -- grijs
'Nog inplannen', '#f58a20', -- oranje
'Ingepland', '#20b2f5', -- lichtblauw
'#0000FF'),
0,
DECODE (status_kalender,
'Afgewezen', '#C0C0C0', -- grijs
'Afgemeld', '#C0C0C0', -- grijs
'Afgerond', '#C0C0C0', -- grijs
'Nog niet bevestigd', '#F5ED5D', -- lichtgeel
'Bevestigd', '#DED304', -- donkergeel
'#0000FF'),
'#0000FF'
) color, --
DECODE (intern, 1,
DECODE (status_kalender,
'Afgewezen', '#bf0b3b', -- rood
'Afgemeld', '#000000', -- zwart
'Afgerond', '#000000', -- zwart
'Nog inplannen', '#FFFFFF', -- wit,
'Ingepland',
DECODE (LOWER(prioriteit),
'3 - normaal', '#FFFFFF', -- wit
'4 - laag', '#FFFFFF', -- wit
'2 - hoog', '#f58a20', -- oranje
'1 - kritiek', '#bf0b3b', -- rood
'#000000'),
'#000000'),
0,
DECODE (status_kalender,
'Afgewezen', '#bf0b3b', -- rood
'Afgemeld', '#000000', -- zwart
'Afgerond', '#000000', -- zwart
'Nog niet bevestigd', '#000000', -- zwart
'Bevestigd', '#000000', -- zwart
'Toegekend', '#FFFFFF', -- wit,
'#0000FF'),
'#000000'
) textcolor,
naam_uitvoerder,
locatie_plaats,
status_kalender,
intern,
opdracht_type,
ins_srtdiscipline_key
FROM schg_v_rap_opdrachten
ORDER BY geplande_aanvang_b ;
---------------------
-- SCHEDULES --------
---------------------
CREATE OR REPLACE PROCEDURE SCHG_PRE_PUTORDERS
AS
BEGIN
NULL;
END SCHG_PRE_PUTORDERS;
/
-- Dagelijkse taak
CREATE OR REPLACE PROCEDURE schg_daily
AS
BEGIN
NULL;
END;
/
------ 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