Files
Customer/SCHG/schg.sql

2298 lines
104 KiB
SQL

--
-- $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;
-------------------------------
--- 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 vullen
CURSOR c_oslogin
IS
SELECT v.fac_imp_file_index,
v.prs_perslid_email,
v.prs_perslid_oslogin_email,
v.prs_perslid_key,
v.prs_perslid_oslogin_huidig,
(SELECT COUNT (*)
FROM prs_v_aanwezigperslid
WHERE prs_perslid_oslogin = prs_perslid_oslogin_email)
oslogin_facilitor_aantal,
(SELECT COUNT (*)
FROM fac_imp_perslid
WHERE prs_perslid_oslogin = v.prs_perslid_oslogin_email)
oslogin_import_aantal
FROM (SELECT i.fac_imp_file_index,
i.prs_perslid_email,
UPPER (
(SUBSTR (i.prs_perslid_email,
0,
INSTR (i.prs_perslid_email, '@') - 1)))
prs_perslid_oslogin_email,
p.prs_perslid_key,
p.prs_perslid_oslogin
prs_perslid_oslogin_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(+)
) v
ORDER BY 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 fac_import_filenaam 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 de bestanden volgen dat we in onderstaande cursor er voor zorgen dat oslogin-namen wel uniek zijn.
FOR rec IN c_oslogin
LOOP
BEGIN
v_errorhint := 'Dubbele oslogin checken en aanpassen';
-- Als het een bestaande persoon is in Facilitor dan nemen we de huidige login over
IF rec.prs_perslid_key IS NOT NULL AND rec.prs_perslid_oslogin_huidig IS NOT NULL
THEN
UPDATE fac_imp_perslid
SET prs_perslid_oslogin = rec.prs_perslid_oslogin_huidig
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
END IF;
-- Als de persoon nieuw geimporteerd wordt echter de oslogin bestaat al in Facilitor dan moeten we deze in importbestand aanpassen
IF rec.prs_perslid_key IS NULL AND rec.oslogin_facilitor_aantal > 0
THEN
UPDATE fac_imp_perslid
SET prs_perslid_oslogin = prs_perslid_oslogin || rec.fac_imp_file_index
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
END IF;
-- Als er in het zelfde importbestand nieuwe personen worden geimporteerd met eenzelfde oslogin dan moeten we deze ook aanpassen
IF rec.prs_perslid_key IS NULL AND rec.oslogin_facilitor_aantal = 0 AND rec.oslogin_import_aantal > 1
THEN
UPDATE fac_imp_perslid
SET prs_perslid_oslogin = prs_perslid_oslogin || rec.fac_imp_file_index
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
END IF;
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 EMAIL 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,
p.prs_perslid_nr,
pf.prs_perslid_naam_full,
p.prs_perslid_oslogin,
ib.huidige_importbestand_schg,
p.prs_importbestand_schg,
i.prs_kenmerk13
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_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 p.prs_perslid_email = i.prs_perslid_email(+)
AND 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
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.
-- 'NULL' betekent altijd geen werkplekken verwijderen
prs.update_perslid (p_import_key, 'EMAIL', 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;
/
-- Procedure uit PRNB om de notities uit Facilitor van de aanvrager door te zetten naar Topdesk_PLT
---- exportfunctie die kenmerkveld vult in opdracht en opdracht op herverzenden zet en via de topdesk.asp met een patch ipv insert doorzet.
CREATE OR REPLACE PROCEDURE SCHG_export_topdesk (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2)
AS
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errorhint VARCHAR2 (100);
v_aanduiding VARCHAR2 (100);
v_locatie_key NUMBER;
v_lengte NUMBER;
v_status_SCHG VARCHAR2 (200);
v_status_SCHG_new VARCHAR2 (200);
v_status_SCHG_key NUMBER;
v_new_note VARCHAR2 (4000);
-- Dit haalt het externnummer op uit de opdrachtomschrijving indien externnr bij de melding nog leeg is
-- De syncstate moet gezet worden om te bepalen wat wanneer gesynchroniseerd is
-- Na het aanmaken van de opdracht zetten we de sync state gelijk aan de order date
CURSOR externnr IS
SELECT DISTINCT
m.mld_melding_key,
o.mld_opdr_key,
o.mld_statusopdr_key,
MAX (o.mld_opdr_datumbegin),
o.mld_opdr_externnr
AS externnr,
SUBSTR (o.mld_opdr_omschrijving,
INSTR (o.mld_opdr_omschrijving, 'TOPdesk nr:') + 12)
topdesknr,
km.mld_kenmerk_key,
fac.safe_to_number (
TO_CHAR (o.mld_opdr_datumbegin, 'yyyymmddhh24miss'))
AS sync_date_new
FROM mld_melding m,
mld_opdr o,
mld_stdmelding sm,
mld_kenmerk km,
mld_srtkenmerk sk
WHERE m.mld_melding_key = o.mld_melding_key
AND sm.mld_stdmelding_key = m.mld_stdmelding_key
AND o.mld_opdr_externnr IS NOT NULL
AND km.mld_stdmelding_key = sm.mld_ins_discipline_key
AND sk.mld_srtkenmerk_key = km.mld_srtkenmerk_key
AND UPPER (sk.mld_srtkenmerk_omschrijving) = 'SYNC_SCHG' -- AANGEMAAKT IN SCHG_TEST EN KENMERKEN OP VAKGROEPNIVEAU - !!!!
AND sm.mld_ins_discipline_key IN (246) -- Enkel voor de vakgroepen die met Topdesk gekoppeld worden.
AND o.mld_statusopdr_key NOT IN (1,
2,
6,
7,
9)
AND ( m.mld_melding_externnr IS NULL
OR m.mld_melding_externnr <>
SUBSTR (
o.mld_opdr_omschrijving,
INSTR (o.mld_opdr_omschrijving, 'TOPdesk nr:')
+ 12))
-- TEST
-- AND o.mld_opdr_key = 53
GROUP BY m.mld_melding_key,
o.mld_opdr_key,
o.mld_statusopdr_key,
o.mld_opdr_externnr,
SUBSTR (o.mld_opdr_omschrijving,
INSTR (o.mld_opdr_omschrijving, 'TOPdesk nr:') + 12),
km.mld_kenmerk_key,
fac.safe_to_number (
TO_CHAR (o.mld_opdr_datumbegin, 'yyyymmddhh24miss'));
-- Onderstaande cursor verzamelt de meldingen die status 'Actie aanvrager' (actie code = 2) moeten krijgen
-- Dit is wanneer SCHG 321 een notitie heeft aangemaakt
-- Wacht op klant (voorheen: Pending customer) is gezet na de laatste sync state of de sync state was nog leeg
/*
CURSOR actie_cust IS
SELECT m.mld_melding_key,
o.mld_opdr_key,
o.mld_statusopdr_key
opdr_status,
sm.mld_ins_discipline_key,
m.prs_perslid_key_voor,
pm.prs_perslid_email
email_melder,
pr.prs_perslid_email
email_registreerder,
DECODE (sm.mld_ins_discipline_key,
--38, 'XXXXX', --welk email adres moet hier komen te staan
40, pr.prs_perslid_email)
email_opdrrej,
n.mld_melding_note_aanmaak,
fac.safe_to_number (TO_CHAR (SYSDATE, 'yyyymmddhh24miss'))
AS sync_date_new,
n.prs_perslid_key,
syncdate.syncdate,
syncdate.mld_kenmerkmelding_key,
km.mld_kenmerk_key
FROM mld_melding m,
mld_opdr o,
prs_perslid pm, -- melder
prs_perslid pr, -- registreerder
mld_stdmelding sm,
mld_melding_note n,
mld_kenmerk km,
(SELECT fac.safe_to_number (mld_kenmerkmelding_waarde)
syncdate,
mld.mld_melding_key,
sync.mld_kenmerkmelding_key
FROM mld_kenmerkmelding sync,
mld_kenmerk km,
mld_srtkenmerk skm,
mld_melding mld
WHERE mld.mld_melding_key = sync.mld_melding_key
AND km.mld_kenmerk_key = sync.mld_kenmerk_key
AND skm.mld_srtkenmerk_key = km.mld_srtkenmerk_key
AND UPPER (skm.mld_srtkenmerk_omschrijving) = 'SYNC_SCHG') syncdate
WHERE sm.mld_stdmelding_key = m.mld_stdmelding_key
AND sm.mld_ins_discipline_key IN (190, 261) --- alleen vakgroepen SCHG en ICT wijziging
-- AND sm.mld_stdmelding_key <> 11121 --moeten er meldingen worden uitgesloten?
AND n.mld_melding_key = m.mld_melding_key
AND o.mld_melding_key = m.mld_melding_key
AND n.prs_perslid_key = 321
AND m.prs_perslid_key_voor = pm.prs_perslid_key
AND m.prs_perslid_key = pr.prs_perslid_key
AND syncdate.mld_melding_key(+) = m.mld_melding_key
AND km.mld_stdmelding_key = sm.mld_ins_discipline_key --- let op: kenmerk zit gekoppeld op discipline niveau
--- AND m.mld_melding_status NOT IN (1, 2, 6, 7, 9) na overleg met Menno: status doet er niet toe
AND km.mld_srtkenmerk_key = 101
AND ( fac.safe_to_number (
TO_CHAR (mld_melding_note_aanmaak,
'yyyymmddhh24miss')) >
syncdate.syncdate
OR syncdate.syncdate IS NULL);
*/
-- Onderstaande cursor verzamelt de gegevens om te bepalen welke meldingen nieuwe opmerkingen heeft en die verzonden kunnen worden naar Topdesk
-- Alle notities bij een melding die niet al eerder zijn verstuurd en niet door SCHG zijn gemaakt mogen verstuurd worden
CURSOR sync IS
SELECT n.mld_melding_key,
n.mld_opdr_key,
n.mld_ins_discipline_key,
n.notitie,
n.mld_melding_note_aanmaak,
fac.safe_to_number (
TO_CHAR (n.mld_melding_note_aanmaak, 'yyyymmddhh24miss'))
AS note,
n.sync,
n.sync_key
FROM ( SELECT mld.mld_melding_key,
o.mld_opdr_key,
sm.mld_ins_discipline_key,
LISTAGG (
prs.prs_perslid_naam_friendly
|| '/'
|| mn.mld_melding_note_aanmaak
|| ' '
|| mn.mld_melding_note_omschrijving,
'; ')
WITHIN GROUP (ORDER BY mld.mld_melding_key)
notitie,
MAX (mn.mld_melding_note_aanmaak)
mld_melding_note_aanmaak,
(SELECT fac.safe_to_number (
sync.mld_kenmerkmelding_waarde)
FROM mld_kenmerkmelding sync,
mld_kenmerk km,
mld_srtkenmerk skm,
mld_melding m
WHERE m.mld_melding_key = sync.mld_melding_key
AND m.mld_melding_key = mld.mld_melding_key
AND km.mld_kenmerk_key = sync.mld_kenmerk_key
AND skm.mld_srtkenmerk_key =
km.mld_srtkenmerk_key
AND skm.mld_srtkenmerk_key = 61)
AS sync,
(SELECT sync.mld_kenmerkmelding_key
FROM mld_kenmerkmelding sync,
mld_kenmerk km,
mld_srtkenmerk skm,
mld_melding m
WHERE m.mld_melding_key = sync.mld_melding_key
AND m.mld_melding_key = mld.mld_melding_key
AND km.mld_kenmerk_key = sync.mld_kenmerk_key
AND skm.mld_srtkenmerk_key =
km.mld_srtkenmerk_key
AND skm.mld_srtkenmerk_key = 61)
AS sync_key
FROM mld_melding mld,
mld_melding_note mn,
mld_stdmelding sm,
mld_opdr o,
prs_v_perslid_fullnames_all prs
WHERE mn.mld_melding_key = mld.mld_melding_key
AND sm.mld_stdmelding_key = mld.mld_stdmelding_key
AND mn.prs_perslid_key = prs.prs_perslid_key
AND mn.prs_perslid_key <> 881 --- we gaan de notities van API user SCHG niet naar hen terug sturen
AND mld.mld_melding_key = o.mld_melding_key -- Enkel Sync_SCHG bijwerken indien er ook een opdracht is.
AND o.mld_uitvoerende_keys = 861 -- We doen dit alleen voor opdrachten die bij PLT liggen
AND o.mld_statusopdr_key IN (5, 8)
AND fac.safe_to_number (
TO_CHAR (mld_melding_note_aanmaak,
'yyyymmddhh24miss')) >
fac.safe_to_number (
TO_CHAR (o.mld_opdr_datumbegin,
'yyyymmddhh24miss'))
AND ( (SELECT fac.safe_to_number (
sync.mld_kenmerkmelding_waarde)
FROM mld_kenmerkmelding sync,
mld_kenmerk km,
mld_srtkenmerk skm,
mld_melding m
WHERE m.mld_melding_key =
sync.mld_melding_key
AND m.mld_melding_key =
mld.mld_melding_key
AND km.mld_kenmerk_key =
sync.mld_kenmerk_key
AND skm.mld_srtkenmerk_key =
km.mld_srtkenmerk_key
AND skm.mld_srtkenmerk_key = 61) <
fac.safe_to_number (
TO_CHAR (mld_melding_note_aanmaak,
'yyyymmddhh24miss'))
OR ((SELECT fac.safe_to_number (
sync.mld_kenmerkmelding_waarde)
FROM mld_kenmerkmelding sync,
mld_kenmerk km,
mld_srtkenmerk skm,
mld_melding m
WHERE m.mld_melding_key =
sync.mld_melding_key
AND m.mld_melding_key =
mld.mld_melding_key
AND km.mld_kenmerk_key =
sync.mld_kenmerk_key
AND skm.mld_srtkenmerk_key =
km.mld_srtkenmerk_key
AND skm.mld_srtkenmerk_key = 61)
IS NULL))
GROUP BY mld.mld_melding_key,
o.mld_opdr_key,
sm.mld_ins_discipline_key
ORDER BY mld_melding_key, mld_melding_note_aanmaak DESC) n,
(SELECT mld_melding_key, aant_char FROM (SELECT mld.mld_melding_key,
SUM (LENGTH (mn.mld_melding_note_omschrijving)) aant_char
FROM mld_melding mld,
mld_melding_note mn,
mld_stdmelding sm,
mld_opdr o,
prs_v_perslid_fullnames_all prs
WHERE mn.mld_melding_key = mld.mld_melding_key
AND sm.mld_stdmelding_key = mld.mld_stdmelding_key
AND mn.prs_perslid_key = prs.prs_perslid_key
AND mn.prs_perslid_key <> 881 --- we gaan de notities van API user SCHG niet naar hen terug sturen
AND mld.mld_melding_key = o.mld_melding_key -- Enkel Sync_SCHG bijwerken indien er ook een opdracht is.
AND o.mld_uitvoerende_keys = 861 -- We doen dit alleen voor opdrachten die bij PLT liggen
AND o.mld_statusopdr_key IN (5, 8)
AND fac.safe_to_number (
TO_CHAR (mld_melding_note_aanmaak, 'yyyymmddhh24miss')) >
fac.safe_to_number (
TO_CHAR (o.mld_opdr_datumbegin, 'yyyymmddhh24miss'))
AND ( (SELECT fac.safe_to_number (sync.mld_kenmerkmelding_waarde)
FROM mld_kenmerkmelding sync,
mld_kenmerk km,
mld_srtkenmerk skm,
mld_melding m
WHERE m.mld_melding_key = sync.mld_melding_key
AND m.mld_melding_key = mld.mld_melding_key
AND km.mld_kenmerk_key = sync.mld_kenmerk_key
AND skm.mld_srtkenmerk_key = km.mld_srtkenmerk_key
AND skm.mld_srtkenmerk_key = 61) <
fac.safe_to_number (
TO_CHAR (mld_melding_note_aanmaak, 'yyyymmddhh24miss'))
OR ((SELECT fac.safe_to_number (sync.mld_kenmerkmelding_waarde)
FROM mld_kenmerkmelding sync,
mld_kenmerk km,
mld_srtkenmerk skm,
mld_melding m
WHERE m.mld_melding_key = sync.mld_melding_key
AND m.mld_melding_key = mld.mld_melding_key
AND km.mld_kenmerk_key = sync.mld_kenmerk_key
AND skm.mld_srtkenmerk_key = km.mld_srtkenmerk_key
AND skm.mld_srtkenmerk_key = 61)
IS NULL))
GROUP BY mld.mld_melding_key)
WHERE aant_char < 4000) t
where t.mld_melding_key = n.mld_melding_key;
--- meldingen waarbij het totaal te versturen notities de 4000 karakters overschrijdt
--- deze zetten we in de tracking zodat functioneel beheer genotificeerd wordt
--- en zo waarschuwen dat de notitie velden opgeschoond moeten worden
/*
CURSOR large IS
SELECT mld_melding_key, mld_opdr_key, aant_char
FROM ( SELECT mld.mld_melding_key,
o.mld_opdr_key,
SUM (LENGTH (mn.mld_melding_note_omschrijving)) aant_char
FROM mld_melding mld,
mld_melding_note mn,
mld_stdmelding sm,
mld_opdr o,
prs_v_perslid_fullnames_all prs
WHERE mn.mld_melding_key = mld.mld_melding_key
AND sm.mld_stdmelding_key = mld.mld_stdmelding_key
AND mn.prs_perslid_key = prs.prs_perslid_key
AND mn.prs_perslid_key <> 321 --- we gaan de notities van API user SCHG niet naar hen terug sturen
AND mld.mld_melding_key = o.mld_melding_key -- Enkel Sync_SCHG bijwerken indien er ook een opdracht is.
AND o.mld_uitvoerende_keys = 241 -- We doen dit alleen voor opdrachten die bij SCHG liggen
AND o.mld_statusopdr_key IN (5, 8)
AND fac.safe_to_number (
TO_CHAR (mld_melding_note_aanmaak, 'yyyymmddhh24miss')) >
fac.safe_to_number (
TO_CHAR (o.mld_opdr_datumbegin, 'yyyymmddhh24miss'))
AND ( (SELECT fac.safe_to_number (
sync.mld_kenmerkmelding_waarde)
FROM mld_kenmerkmelding sync,
mld_kenmerk km,
mld_srtkenmerk skm,
mld_melding m
WHERE m.mld_melding_key = sync.mld_melding_key
AND m.mld_melding_key = mld.mld_melding_key
AND km.mld_kenmerk_key = sync.mld_kenmerk_key
AND skm.mld_srtkenmerk_key =
km.mld_srtkenmerk_key
AND skm.mld_srtkenmerk_key = 101) <
fac.safe_to_number (
TO_CHAR (mld_melding_note_aanmaak,
'yyyymmddhh24miss'))
OR ((SELECT fac.safe_to_number (
sync.mld_kenmerkmelding_waarde)
FROM mld_kenmerkmelding sync,
mld_kenmerk km,
mld_srtkenmerk skm,
mld_melding m
WHERE m.mld_melding_key = sync.mld_melding_key
AND m.mld_melding_key = mld.mld_melding_key
AND km.mld_kenmerk_key = sync.mld_kenmerk_key
AND skm.mld_srtkenmerk_key =
km.mld_srtkenmerk_key
AND skm.mld_srtkenmerk_key = 101)
IS NULL))
GROUP BY mld.mld_melding_key, o.mld_opdr_key)
WHERE aant_char > 4000;
*/
-- Extern nr als kenmerk toevoegen
-- Hier vullen we het externnr van changes in bij de melding, zodra deze bij de opdracht binnenkomt vanuit Topdesk
CURSOR externnr_opdr IS
SELECT m.mld_melding_key,
SUBSTR (o.mld_opdr_omschrijving,
INSTR (o.mld_opdr_omschrijving, 'TOPdesk nr:') + 12) topdesknr
FROM mld_melding m,
mld_stdmelding sm,
ins_tab_discipline vg,
ins_srtdiscipline vgt,
mld_opdr o,
prs_bedrijf b
WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key
AND vg.ins_discipline_key = sm.mld_ins_discipline_key
AND vgt.ins_srtdiscipline_key = vg.ins_srtdiscipline_key
AND vgt.ins_srtdiscipline_key = 21 --- IT-stroom
AND o.mld_melding_key = m.mld_melding_key
AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
AND b.prs_bedrijf_key = 861 --- PLT
AND INSTR (o.mld_opdr_omschrijving, 'TOPdesk nr:') > 0
AND m.mld_melding_externnr IS NULL;
BEGIN
v_errorhint := 'init';
v_lengte := 0;
-- Hier vullen we het externnr bij de melding, zodra deze (als kenmerk) bij de opdracht binnenkomt vanuit Topdesk
FOR rec IN externnr
LOOP
BEGIN
v_aanduiding :=
'Topdesknr zetten bij melding: ' || rec.mld_melding_key;
v_errorhint :=
'Melding vullen met externnr voor melding '
|| rec.mld_melding_key;
UPDATE mld_melding
SET mld_melding_externnr = rec.topdesknr
WHERE mld_melding_key = rec.mld_melding_key;
-- Vervolgens zetten we de sync state zodat we weten vanaf wanneer de sync van notities en bijlagen mag gaan lopen
mld.upsertmeldingkenmerk (rec.mld_kenmerk_key,
rec.mld_melding_key,
rec.sync_date_new);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
-- aanmaken mldtrk in fac_tracking
INSERT INTO fac_tracking (fac_srtnotificatie_key,
fac_tracking_refkey,
fac_tracking_oms)
VALUES (
225,
rec.mld_melding_key,
v_aanduiding
|| '/'
|| oracle_err_num
|| ': '
|| oracle_err_mes);
END;
END LOOP;
-- We zetten de status van de melding nog op respectievelijk 'Actie aanvrager', 'Attentie' indien Topdesk na laatste bericht vanuit Facilitor hierom vraagt.
-- DEZE KAN/MOET WEG VOLGENS MIJ
/*
FOR rec IN actie_cust
LOOP
BEGIN
v_aanduiding :=
'Topdesk actie naar aanvr mld: ' || rec.mld_melding_key;
SELECT COALESCE (mld_kenmerkopdr_waarde, 'Wacht op klant')
INTO v_status_SCHG
FROM (SELECT o.mld_melding_key,
o.mld_opdr_key,
ko.mld_kenmerkopdr_waarde
FROM mld_kenmerkopdr ko,
mld_kenmerk k,
mld_srtkenmerk sk,
mld_opdr o
WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND o.mld_opdr_key = ko.mld_opdr_key
AND sk.mld_srtkenmerk_key = 101
AND o.mld_statusopdr_key IN (5, 8)
AND ko.mld_kenmerkopdr_verwijder IS NULL) status,
mld_melding m
WHERE m.mld_melding_key = status.mld_melding_key(+)
AND m.mld_melding_key = rec.mld_melding_key;
IF rec.opdr_status = 1
THEN
-- de opdracht is door SCHG afgewezen, de melding krijgt een attentie belletje
UPDATE mld_melding
SET mld_melding_actiecode = 129
WHERE mld_melding_key = rec.mld_melding_key;
-- we sturen ook een notificatie naar DPL of de melder
INSERT INTO fac_notificatie (fac_srtnotificatie_key,
fac_notificatie_status,
prs_perslid_key_receiver,
fac_notificatie_receiver_email,
fac_notificatie_oms,
fac_notificatie_refkey,
fac_notificatie_prioriteit)
VALUES (
57, --- ordrej
2,
NULL,
rec.email_opdrrej,
'Opdracht bij melding '
|| rec.mld_melding_key
|| ' is afgewezen door SCHG',
rec.mld_opdr_key,
2);
-- Als vanuit Topdesk een status wordt meegestuurd dan moet er genotificeerd worden
ELSE
IF UPPER (v_status_SCHG) = 'WACHT OP KLANT' --- voorheen: PENDING CUSTOMER
THEN
v_aanduiding := 'Melding: ' || rec.mld_melding_key;
v_errorhint :=
'Status melding naar Actie aanvrager voor melding '
|| rec.mld_melding_key;
UPDATE mld_melding
SET mld_melding_actiecode = 2
WHERE mld_melding_key = rec.mld_melding_key;
INSERT INTO fac_notificatie (
fac_srtnotificatie_key,
fac_notificatie_status,
prs_perslid_key_receiver,
fac_notificatie_receiver_email,
fac_notificatie_oms,
fac_notificatie_refkey,
fac_notificatie_prioriteit)
VALUES (
161, --- mldnot
2,
rec.prs_perslid_key_voor,
rec.email_melder,
'Notitie toegevoegd door SCHG bij melding '
|| rec.mld_melding_key,
rec.mld_melding_key,
2);
ELSE
IF UPPER (v_status_SCHG) =
'MELDING KWALITATIEF ONVOLDOENDE'
THEN
v_aanduiding := 'Melding: ' || rec.mld_melding_key;
v_errorhint :=
'Status melding naar Attentie voor melding '
|| rec.mld_melding_key;
UPDATE mld_melding
SET mld_melding_actiecode = 129
WHERE mld_melding_key = rec.mld_melding_key;
UPDATE mld_melding
SET mld_melding_flag = 5
WHERE mld_melding_key = rec.mld_melding_key;
INSERT INTO fac_notificatie (
fac_srtnotificatie_key,
fac_notificatie_status,
prs_perslid_key_receiver,
fac_notificatie_receiver_email,
fac_notificatie_oms,
fac_notificatie_refkey,
fac_notificatie_prioriteit)
VALUES (
282, --- mldnob gaat altijd naar DPL
2,
NULL,
'onsloket@brabant.nl',
'Melding '
|| rec.mld_melding_key
|| ' is incompleet bevonden door SCHG',
rec.mld_melding_key,
2);
END IF;
END IF;
END IF;
-- Vervolgens zetten we de sync date zodat we weten dat we weten tot hoever de notities al verwerkt zijn
mld.upsertmeldingkenmerk (rec.mld_kenmerk_key,
rec.mld_melding_key,
rec.sync_date_new);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
-- aanmaken mldtrk in fac_tracking
INSERT INTO fac_tracking (fac_srtnotificatie_key,
fac_tracking_refkey,
fac_tracking_oms)
VALUES (
655,
rec.mld_melding_key,
v_aanduiding
|| '/'
|| oracle_err_num
|| ': '
|| oracle_err_mes);
END;
END LOOP;
*/
FOR rec IN sync
LOOP
BEGIN
-- Eerst verzamelen we alle nieuwe notities en zetten deze klaar in een kenmerk voor verzending
v_aanduiding :=
'Note naar Topdesk voor melding: ' || rec.mld_melding_key;
v_errorhint :=
'Notities verzamelen voor verzending ' || rec.mld_melding_key;
-- Daarvoor moeten we de juiste kenmerkkey bepalen
SELECT k.mld_kenmerk_key
INTO v_new_note
FROM mld_opdr o, mld_kenmerk k, mld_srtkenmerk sk
WHERE o.mld_typeopdr_key = k.mld_typeopdr_key
AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
AND UPPER (sk.mld_srtkenmerk_omschrijving) =
'UPDATE_NOTITIES'
AND o.mld_opdr_key = rec.mld_opdr_key;
-- De oude notitie gooien we weg
DELETE MLD_KENMERKOPDR ko
WHERE ko.mld_opdr_key = rec.mld_opdr_key
AND ko.mld_kenmerk_key = v_new_note;
-- Dan vullen we de nieuwe notitie
mld.upsertopdrachtkenmerk (v_new_note,
rec.mld_opdr_key,
rec.notitie);
v_errorhint :=
'Opdracht opnieuw te verzenden naar Topdesk voor melding: '
|| rec.mld_melding_key;
-- Eerst zetten we de opdracht opnieuw klaar om te verzenden
UPDATE mld_opdr o
SET mld_opdr_teverzenden = 2, mld_opdr_verzonden = NULL
WHERE o.mld_opdr_key = rec.mld_opdr_key;
v_errorhint :=
'Syncdatum Topdesk bijwerken voor melding '
|| rec.mld_melding_key;
-- Als er nog niet eerder gesynchroniseerd is maken we een kenmerk aan met de syncdatum
-- Als al eerder gesynchroniseerd is werken we de syncdatum bij
-- Hiermee komt deze notitie de volgende keer niet meer voor in de cursor
CASE
WHEN rec.sync IS NULL
THEN
INSERT INTO mld_kenmerkmelding (
mld_melding_key,
mld_kenmerk_key,
mld_kenmerkmelding_waarde)
VALUES (
rec.mld_melding_key,
(SELECT DISTINCT mld_kenmerk_key
FROM mld_kenmerk
WHERE mld_srtkenmerk_key = 61 -- Kenmerksoort tbv synchronisatie van opmerkingen naar Topdesk
AND mld_stdmelding_key =
rec.mld_ins_discipline_key),
rec.note);
--- deze notitie moet resulteren in een patch naar Topdesk
--- dat wordt getriggerd door een ordupd
fac.trackaction ('ORDUPD',
rec.mld_opdr_key,
NULL,
NULL,
'Sync_SCHG: (leeg) --> ' || rec.note);
ELSE
UPDATE mld_kenmerkmelding
SET mld_kenmerkmelding_waarde = rec.note
WHERE rec.sync_key = mld_kenmerkmelding_key;
--- deze notitie moet resulteren in een patch naar Topdesk
--- dat wordt getriggerd door een ordupd
fac.trackaction (
'ORDUPD',
rec.mld_opdr_key,
NULL,
NULL,
'Sync_SCHG: ' || rec.sync || ' --> ' || rec.note);
END CASE;
-- De status SCHG werken we dan ook nog even netjes bij
SELECT k.mld_kenmerk_key,
'nog uitwerken'
/*
CASE
WHEN (UPPER (status_SCHG.mld_kenmerkopdr_waarde) =
'WACHT OP KLANT') --> PENDING CUSTOMER is geworden Wacht op klant
THEN
'Reactie ontvangen'
WHEN UPPER (status_SCHG.mld_kenmerkopdr_waarde) =
'MELDING KWALITATIEF ONVOLDOENDE' --> PENDING DPL is geworden Melding kwalitatief onvoldoende
AND m.mld_melding_flag = 3
THEN
'Melding kwalitatief onvoldoende'
WHEN UPPER (status_SCHG.mld_kenmerkopdr_waarde) =
'MELDING KWALITATIEF ONVOLDOENDE'
AND ( m.mld_melding_flag <> 3
OR m.mld_melding_flag IS NULL)
THEN
'Reactie ontvangen'
ELSE
'Reactie ontvangen'
END CASE
*/
INTO v_status_SCHG_key, v_status_SCHG_new
FROM mld_kenmerk k,
mld_opdr o,
mld_srtkenmerk sk,
mld_melding m,
(SELECT ko.mld_opdr_key,
ko.mld_kenmerkopdr_waarde,
k.mld_kenmerk_key
FROM mld_kenmerkopdr ko,
mld_kenmerk k,
mld_srtkenmerk sk
WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_key = 42
AND ko.mld_kenmerkopdr_verwijder IS NULL)
status_SCHG
WHERE o.mld_typeopdr_key = k.mld_typeopdr_key
AND sk.mld_srtkenmerk_key = 42
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND o.mld_melding_key = m.mld_melding_key
AND status_SCHG.mld_opdr_key(+) = o.mld_opdr_key
AND o.mld_statusopdr_key IN (5, 8)
AND o.mld_opdr_key = rec.mld_opdr_key;
mld.upsertopdrachtkenmerk (v_status_SCHG_key,
rec.mld_opdr_key,
v_status_SCHG_new);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
-- aanmaken ordtrk in fac_tracking
INSERT INTO fac_tracking (fac_srtnotificatie_key,
fac_tracking_refkey,
fac_tracking_oms)
VALUES (
228,
rec.mld_opdr_key,
v_aanduiding
|| '/'
|| oracle_err_num
|| ': '
|| oracle_err_mes);
END;
END LOOP;
/*
FOR rec IN large
LOOP
BEGIN
--
v_aanduiding :=
'Notities bij melding ' || rec.mld_melding_key || ' te groot voor export naar Topdesk.';
-- aanmaken mldtrk in fac_tracking
INSERT INTO fac_tracking (fac_srtnotificatie_key,
fac_tracking_refkey,
fac_tracking_oms)
VALUES (
658,
rec.mld_opdr_key,
v_aanduiding);
END;
END LOOP;
*/
FOR rec IN externnr_opdr
LOOP
BEGIN
v_aanduiding :=
'Topdesknr zetten bij change: ' || rec.mld_melding_key;
v_errorhint :=
'Melding vullen met externnr voor change '
|| rec.mld_melding_key;
UPDATE mld_melding
SET mld_melding_externnr = rec.topdesknr
WHERE mld_melding_key = rec.mld_melding_key;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
-- aanmaken mldtrk in fac_tracking
INSERT INTO fac_tracking (fac_srtnotificatie_key,
fac_tracking_refkey,
fac_tracking_oms)
VALUES (
225,
rec.mld_melding_key,
v_aanduiding
|| '/'
|| oracle_err_num
|| ': '
|| oracle_err_mes);
END;
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
fac.writelog (p_applname,
'E',
oracle_err_num || '/' || oracle_err_mes,
v_errorhint);
END SCHG_export_topdesk;
/
-------------------------------
--- 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 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
'Nog inplannen', '#f58a20', -- oranje
'Ingepland', '#20b2f5', -- lichtblauw
'#0000FF'),
0,
DECODE (status_kalender,
'Afgewezen', '#C0C0C0', -- grijs
'Afgemeld', '#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
'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
'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 ;
-- 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