SCHG#84842 -- Implementatie Scharenborg Groep - dwh-views tbv huurcontracten

svn path=/Customer/trunk/; revision=67062
This commit is contained in:
Jos Migo
2024-11-17 21:05:24 +00:00
parent fa61eca2c8
commit 532175abff

926
SCHG/schg.sql Normal file
View File

@@ -0,0 +1,926 @@
--
-- $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 ---------------
-------------------------------
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 ---------------
-------------------------------
-------------------------------
--- 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 fac_imp_file_index, prs_perslid_email, prs_afdeling_naam
FROM fac_imp_perslid
WHERE fac_import_key = p_import_key ;
BEGIN
-- Import csv formaat - kolommen:
-- 1. userPrincipalName
-- 2. displayName
-- 3. surname
-- 4. EmailAddress
-- 5. givenName
-- 6. id
-- 7. jobTitle
-- 8. department
-- 9. usageLocation
-- 10. officeLocation
-- 11. comanyName
-- 12. importbestand_schg -- LET OP - Deze voeg ik voor import toe omdat men meerdere bestanden, cq entra_id's heeft aan scharenborg_kant
v_seq_of_columns := '0;0;0;0;0;0;9;3;0;5;'
-- 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
-- v_prs_perslid_naam 8
-- v_prs_perslid_tussenvoegsel 9
-- v_prs_perslid_voornaam 10
|| '0;0;0;0;0;0;0;4;0;0;'
-- 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
|| '9;0;0;0;0;0;1;2;3;4;'
-- v_prs_srtperslid_omschrijving 21 -- VERPLICHT BIJ IMPORT
-- 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;7;8;9;10;11;12;0;0;'
|| '0;0;0;0;0;7';
-- 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;
prs.import_perslid(p_import_key, v_seq_of_columns, 'userPrincipalName;displayName;surname;EmailAddress;givenName;id;jobTitle;department;usageLocation;officeLocation;companyName;importbestand_schg%');
-- POST-UPDATES op data doen om verwerking goed/volledig/cust-specifiek te laten verlopen
-- 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_kenmerk20, NULL, 'Onbekend', prs_kenmerk20);
-- Moeten er nog deletes/opschoning gedaan worden in bulkbestand?
-- DELETE fac_imp_perslid WHERE prs_perslid_email IS NULL ;
v_errorhint := 'Afdeling bepalen en vullen';
-- Afdeling bepalen waar persoon onder komt te vallen --- NOG ONDERHANDEN / TE BESPREKEN !!!
---- Structuur die ik nu kies is om domein_naam emailadres te hanteren (en als deze onbekend is dan fallback-afdeling op AD_ONBEKEND
FOR rec IN c_afd
LOOP
BEGIN
v_errorhint := 'Persoon aan Afdeling koppelen';
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;
END LOOP;
/*
-- De afdelingscode slaan we tijdelijk op in kenmerk14 omdat deze bij toekomstige medewerkers leeg is.
UPDATE fac_imp_perslid
SET prs_afdeling_naam = COALESCE(prs_kenmerk14, '_FH'),
prs_kenmerk1 = COALESCE(prs_kenmerk1, 'Future Hires'),
prs_srtperslid_omschrijving = SUBSTR(COALESCE(prs_kenmerk15, 'Future Hire'),1,60);
-- We gaan de medewerkers koppelen aan een werkplek. Dat gaan we doen door de code van de standplaats (kenmerk6) te matchen
-- met het kenmerk bij het gebouw (kenmerk 1200). Verder moet er dan bij dat gebouw een ruimte zijn met ruimtenummer _WP
UPDATE fac_imp_perslid p
SET (alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr) =
(SELECT alg_locatie_code,
alg_gebouw_upper,
alg_verdieping_volgnr,
alg_ruimte_nr
FROM alg_v_ruimte_gegevens rg, alg_onrgoedkenmerk aogk
WHERE aogk.alg_onrgoed_key = rg.alg_gebouw_key
AND aogk.alg_kenmerk_key = 1200
AND alg_ruimte_nr = '_WP'
AND aogk.alg_onrgoedkenmerk_waarde = prs_kenmerk6
AND ROWNUM = 1);
*/
END schg_import_perslid;
/
CREATE OR REPLACE PROCEDURE schg_update_perslid (p_import_key IN NUMBER)
IS
-- Alle personen verwijderen die niet meer in het import bestand voorkomen
-- Actuele bestand verwerken via standaard update
-- Kenmerkvelden in personenkaart van de AD_gegevens
-- 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.
---- Dubbelingen tussen de tenants/bestanden - ER NOG UITVISSEN ??
-- VERDER NOG BESPREKEN
---- Draaien import als aantal medewerkers > 100 ?
---- Personen in de juiste autorisatiegroep zetten op basis FUNCTIE
---- Dubbeling email-adressen ???
---- ???
CURSOR c_del
IS
SELECT p.prs_perslid_key,
p.prs_perslid_email,
pf.prs_perslid_naam_full,
p.prs_perslid_oslogin,
p.importbestand_schg,
i.prs_kenmerk12
FROM fac_imp_perslid i,
(SELECT p.prs_perslid_key,
p.prs_perslid_email,
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 = 1020
AND kw.prs_kenmerklink_niveau = 'P'
AND kw.prs_link_key = p.prs_perslid_key)
importbestand_schg
FROM prs_perslid p) p,
prs_v_perslid_fullnames_all pf,
prs_v_afdeling_boom ab,
prs_afdeling a,
(SELECT MAX (prs_kenmerk12)
importbestand_schg
FROM fac_imp_perslid) ib -- importbestand_sch 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 COALESCE (p.importbestand_schg, ib.importbestand_schg) = ib.importbestand_schg
-- AND ab.prs_bedrijf_key = c_bedrijf_key
AND INSTR (a.prs_afdeling_upper, 'AD_') > 0
AND NOT EXISTS
(SELECT 1
FROM fac_imp_perslid
WHERE INSTR (UPPER (p.prs_perslid_email), UPPER (prs_perslid_email)) > 0);
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
FROM prs_v_aanwezigperslid p, fac_imp_perslid i
WHERE p.prs_perslid_key = i.prs_perslid_key
ORDER BY 1;
v_count NUMBER;
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (400);
v_errorhint VARCHAR2 (400);
BEGIN
v_errorhint := 'Niet genoeg personen in bestand, import afgebroken';
SELECT COUNT ( * ) INTO v_count FROM fac_imp_perslid;
IF v_count >= 100
THEN
v_errorhint := 'Verwerken persoonsgegevens';
-- Geldig importbestand wat betreft aantal personen
COMMIT;
-- Nu kunnen we de standaard facilitor-update doorvoeren
-- generic update
-- 'EMAIL' betekent dat op basis van Email wordt gematched.
-- 'NULL' betekent altijd geen werkplekken verwijderen
prs.update_perslid (p_import_key, 'EMAIL', NULL);
-- Voordat we gaan importeren gaan we op zoek of we nog mensen moeten verwijderen die niet in de import voorkomen.
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 als laatste de kenmmerken bijwerken op de actuele medewerkers
FOR rec IN c_flex
LOOP
BEGIN
-- userPrincipalName;displayName;surname;EmailAddress;givenName;id;jobTitle;department;usageLocation;officeLocation;companyName;
v_errorhint:='Fout bijwerken kenmerkvelden';
PRS.upsertkenmerk (1001, rec.prs_perslid_key, rec.prs_kenmerk1);
PRS.upsertkenmerk (1002, rec.prs_perslid_key, rec.prs_kenmerk2);
PRS.upsertkenmerk (1003, rec.prs_perslid_key, rec.prs_kenmerk3);
PRS.upsertkenmerk (1040, rec.prs_perslid_key, rec.prs_kenmerk4);
PRS.upsertkenmerk (1004, rec.prs_perslid_key, rec.prs_kenmerk5);
PRS.upsertkenmerk (1005, rec.prs_perslid_key, rec.prs_kenmerk6);
PRS.upsertkenmerk (1006, rec.prs_perslid_key, rec.prs_kenmerk7);
PRS.upsertkenmerk (1007, rec.prs_perslid_key, rec.prs_kenmerk8);
PRS.upsertkenmerk (1008, rec.prs_perslid_key, rec.prs_kenmerk9);
PRS.upsertkenmerk (1009, rec.prs_perslid_key, rec.prs_kenmerk10);
PRS.upsertkenmerk (1010, rec.prs_perslid_key, rec.prs_kenmerk11);
PRS.upsertkenmerk (1020, rec.prs_perslid_key, rec.prs_kenmerk12);
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;
/
-------------------------------
--- 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)
;
-- 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