Files
Customer/LPNL/LPNL.sql
Arthur Egberink 4db5a56462 LPNL#67364 -- LeasePlan Nederland N.V.
svn path=/Customer/trunk/; revision=53093
2021-09-20 14:47:09 +00:00

404 lines
15 KiB
MySQL

--
-- $Id$
--
DEFINE thisfile = 'LPNL.SQL'
DEFINE dbuser = 'LPNL'
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 ------
CREATE OR REPLACE PACKAGE LPNL
AS
FUNCTION change_delimitor (p_string VARCHAR2,
p_delimitor VARCHAR2)
RETURN VARCHAR2;
END;
/
CREATE OR REPLACE PACKAGE BODY LPNL
AS
FUNCTION change_delimitor (p_string VARCHAR2,
p_delimitor VARCHAR2)
RETURN VARCHAR2
AS
v_field VARCHAR2 (1000) := 'QueQuLeQue';
v_result VARCHAR2 (2000);
v_line VARCHAR2 (2000);
BEGIN
v_line := p_string;
WHILE v_line IS NOT NULL
LOOP
fac.imp_getfield (v_line, p_delimitor, v_field);
v_result := v_result || '"' || v_field || '";';
END LOOP;
RETURN v_result;
EXCEPTION
WHEN OTHERS
THEN
RETURN NULL;
END;
END;
/
CREATE OR REPLACE PROCEDURE lpnl_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);
BEGIN
-- Verwijder lege records
DELETE fac_imp_file WHERE SUBSTR(fac_imp_file_line, 1,7) = ',,,,,,,' AND fac_import_key = p_import_key;
v_seq_of_columns := '0;0;0;0;0;0;4;3;0;2;'
-- v_alg_locatie_code 1
-- v_alg_gebouw_code 2
-- v_alg_verdieping_volgnr 3
-- v_alg_ruimte_nr 4
-- v_prs_werkplek_volgnr 5
-- v_prs_werkplek_omschrijving 6
-- v_prs_afdeling_naam 7
-- v_prs_perslid_naam 8
-- v_prs_perslid_tussenvoegsel 9
-- v_prs_perslid_voornaam 10
|| '0;0;0;0;0;8;0;1;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
|| '4;0;0;0;0;0;4;6;7;9;'
-- v_prs_srtperslid_omschrijving 21
-- v_prs_perslid_oslogin 22
-- v_prs_perslid_wachtwoord 23
-- v_prs_perslid_titel 24
-- v_prs_perslid_apikey 25
-- v_dummy 26
-- v_prs_kenmerk1 27
-- v_prs_kenmerk2 28
-- v_prs_kenmerk3 29
-- v_prs_kenmerk4 30
|| '0;0;0;0;0;0;0;0;0;0;'
|| '0;0;0;0;0;0';
-- Het aangeleverde bestand heeft een komma als scheidingsteken. Deze wordt hier maar even vervangen.
UPDATE fac_imp_file
SET fac_imp_file_line = LPNL.change_delimitor(fac_imp_file_line, ',')
WHERE fac_import_key = p_import_key;
prs.import_perslid(p_import_key, v_seq_of_columns, '%"EmailAddress";"GivenName";"SurName";"Name";"UserPrincipalName";"Office";"Displayname";"telephoneNumber";"department"%');
-- Verwijder items uit de AD lijst die geen persoon zijn
DELETE fac_imp_perslid WHERE prs_perslid_naam IS NULL OR prs_perslid_voornaam IS NULL OR prs_perslid_email IS NULL;
-- Verwijder de Carnext medewerkers
DELETE fac_imp_perslid
WHERE LOWER (prs_perslid_email) LIKE '%carnext%';
UPDATE fac_imp_perslid
SET prs_perslid_oslogin =
SUBSTR(SUBSTR (prs_perslid_email, 1, INSTR (prs_perslid_email, '@') - 1),1,30),
prs_srtperslid_omschrijving = 'Onbekend';
END lpnl_import_perslid;
/
CREATE OR REPLACE PROCEDURE lpnl_update_perslid (p_import_key IN NUMBER)
IS
CURSOR c_del IS
SELECT p.prs_perslid_key,
p.prs_perslid_nr,
pf.prs_perslid_naam_full,
p.prs_perslid_oslogin
FROM prs_perslid p, prs_v_perslid_fullnames_all pf, prs_afdeling a
WHERE p.prs_afdeling_key = a.prs_afdeling_key
AND a.prs_bedrijf_key = 41 -- Leaseplan
AND pf.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_verwijder IS NULL
AND NOT EXISTS
(SELECT 1
FROM fac_imp_perslid i
WHERE LOWER (p.prs_perslid_email) =
LOWER (i.prs_perslid_email));
CURSOR c IS
SELECT DISTINCT prs_kenmerk4
FROM fac_imp_perslid
WHERE NOT EXISTS
(SELECT 1
FROM prs_afdeling a
WHERE UPPER (a.prs_afdeling_omschrijving) =
UPPER (prs_kenmerk4)
AND a.prs_afdeling_verwijder IS NULL);
v_bedrijf_key NUMBER (10);
v_afdeling_key1 NUMBER (10);
v_afdeling_key2 NUMBER (10);
v_kostenplaats_key NUMBER (10);
v_kpn_nr_prev VARCHAR2 (20);
v_count_mandaat NUMBER (10);
v_count_man_prs NUMBER (10) := 0;
v_afdeling_key NUMBER;
v_aanduiding VARCHAR2 (100);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
v_count NUMBER;
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
BEGIN
FOR rec IN c
LOOP
-- Koppel de afdelingen aan het bedrijf leaseplan key 41
INSERT INTO prs_afdeling (prs_bedrijf_key,
prs_afdeling_naam,
prs_afdeling_omschrijving)
VALUES (41, '123456', rec.prs_kenmerk4)
RETURNING prs_afdeling_key
INTO v_afdeling_key;
UPDATE prs_afdeling
SET prs_afdeling_naam = v_afdeling_key
WHERE prs_afdeling_key = v_afdeling_key;
END LOOP;
UPDATE fac_imp_perslid i
SET prs_afdeling_naam =
(SELECT MIN (prs_afdeling_key)
FROM prs_afdeling a
WHERE prs_afdeling_verwijder IS NULL
AND UPPER (i.prs_kenmerk4) =
UPPER (a.prs_afdeling_omschrijving));
SELECT COUNT(*)
INTO v_count
FROM fac_imp_perslid
WHERE fac_import_key = p_import_key;
IF v_count > 500
THEN
FOR rec IN c_del LOOP
BEGIN
v_errorhint := 'Persoon verwijderen: ' || rec.prs_perslid_naam_full || '-' || rec.prs_perslid_nr || '-' || rec.prs_perslid_oslogin;
prs.delete_perslid (p_import_key, rec.prs_perslid_key);
END;
END LOOP;
END IF;
prs.update_perslid (p_import_key, 'EMAIL', NULL);
-- Zorg ervoor dat er geen persoonsgegevens achterblijven in de import tabel.
-- DELETE fac_imp_perslid;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint);
END lpnl_update_perslid;
/
-- View om via een rapport je collega te vinden die ook een werkplek gereserveerd heeft
CREATE OR REPLACE VIEW lpnl_v_rap_find_collega_wp
AS
SELECT rrr.res_rsv_ruimte_van,
rrr.res_rsv_ruimte_tot,
DECODE (p.prs_perslid_visibility,
1, pf.prs_perslid_naam_full,
a.prs_afdeling_omschrijving) prs_perslid_naam,
a.prs_afdeling_omschrijving,
l.alg_locatie_omschrijving,
d.alg_gebouw_omschrijving,
d.alg_verdieping_code,
d.alg_ruimte_nr,
rd.res_deel_omschrijving,
d.ins_deel_omschrijving
FROM res_rsv_ruimte rrr,
res_rsv_deel rrd,
res_deel rd,
res_discipline r,
ins_v_deel_gegevens d,
prs_v_perslid_fullnames pf,
prs_afdeling a,
prs_perslid p,
alg_locatie l
WHERE rrr.res_rsv_ruimte_key = rrd.res_rsv_ruimte_key
AND rrd.res_deel_key = rd.res_deel_key
AND rd.res_ins_deel_key = d.ins_deel_key
AND rrr.res_rsv_ruimte_host_key = pf.prs_perslid_key
AND p.prs_perslid_key = pf.prs_perslid_key
AND p.prs_afdeling_key = a.prs_afdeling_key
AND rd.res_discipline_key = r.ins_discipline_key
--AND r.ins_discipline_min_level = 5 -- werkplekken
AND res_activiteit_key = 30 -- Werkplekken
AND d.alg_locatie_key = l.alg_locatie_key
AND TRUNC (res_rsv_ruimte_van) < TRUNC (SYSDATE) + 14;
-- View voor reserveerbare (werkplek)OBJECTEN, het default thema met key 13
-- Deze core-view wordt direct als kleur-objecten-thema gebruikt, maar kan ook als basis voor een alternatief via worden gebruikt
-- Kijkt nu hard maximaal 42 dagen tov van nu vooruit, wat hopelijk even genoeg is voor alle situaties
-- De verschillende waardevarianten zijn presentatie alternatieven, evt meerdere regels onder elkaar
-- waarde1: Voor hele dagen: Vrij(0) of Bezet (3)
-- waarde: Voor halve dagen: Vrij(0), Ochtendbezet(1), MiddagBezet(2), Helemaalbezet(3)
-- waarde3: Voor tellen: Het aantal reservering op de dag, met 0 is dus Vrij
CREATE OR REPLACE VIEW lpnl_v_thema_deel_res_datum
(
fclt_f_datum,
ins_deel_key,
min_van,
max_tot,
waarde1,
waarde,
waarde3
)
AS
WITH
datums
AS
( SELECT TRUNC (SYSDATE) + LEVEL - 1 datum
FROM DUAL
CONNECT BY LEVEL <= 14)
SELECT datum
fclt_f_datum,
ins_deel_key,
MIN (res_rsv_deel_van)
min_van,
MAX (res_rsv_deel_tot)
max_tot,
CASE WHEN MAX (res_rsv_deel_tot) IS NULL THEN DECODE(ins_srtdeel_key, 21, 4, 0) ELSE 3 -- hele dag Electrische bureaus (21)
END
waarde1,
CASE
WHEN MAX (res_rsv_deel_tot) IS NULL THEN DECODE(ins_srtdeel_key, 21, 4, 0)
WHEN TO_CHAR (MAX (res_rsv_deel_tot), 'HH24') <= 13 THEN 1 -- ochtend
WHEN TO_CHAR (MIN (res_rsv_deel_van), 'HH24') >= 12 THEN 2 -- middag
ELSE 3 -- hele dag
END
waarde,
COUNT (res_rsv_deel_tot) -- aantal reservering deze dag
waarde3
FROM (SELECT datums.datum,
res_ins_deel_key ins_deel_key,
ins_srtdeel_key,
res_rsv_deel_van,
res_rsv_deel_tot
FROM res_v_aanwezigdeel r,
ins_v_deel_gegevens dg,
alg_gebouw g,
alg_srtgebouw sg,
datums,
(SELECT datum,
res_deel_key,
res_rsv_deel_van,
res_rsv_deel_tot
FROM datums, res_v_aanwezigrsv_deel rrd
WHERE res_rsv_deel_van > TRUNC(SYSDATE) - 1 -- negeer alle irrelevante historie sowieso
AND datum >= TRUNC (res_rsv_deel_van)
AND datum < TRUNC (res_rsv_deel_tot) + 1) blokkerend -- vandaag en nog niet afgelopen
WHERE r.res_deel_key = blokkerend.res_deel_key(+)
AND datums.datum = blokkerend.datum(+)
AND (r.res_deel_vervaldatum IS NULL or r.res_deel_vervaldatum > datums.datum)
AND dg.ins_deel_key = r.res_ins_deel_key
AND dg.alg_gebouw_key = g.alg_gebouw_key
AND g.alg_srtgebouw_key = sg.alg_srtgebouw_key
AND sg.alg_srtgebouw_passief IS NULL)
GROUP BY datum, ins_deel_key, ins_srtdeel_key
ORDER BY datum, ins_deel_key;
CREATE OR REPLACE VIEW lpnl_v_thema_set_res_wp
AS
SELECT ins_deel_key, DECODE (rd.res_deel_key, NULL, 0, 1) waarde
FROM ins_deel d,
(SELECT *
FROM res_deel
WHERE res_deel_verwijder IS NULL) rd
WHERE d.ins_deel_key = rd.res_ins_deel_key(+);
-- View om inzichtelijk te maken welke werkplekken wel of niet bevestigd zijn.
CREATE OR REPLACE VIEW lpnl_v_wp_bezetting
AS
SELECT l.alg_locatie_omschrijving,
dg.alg_gebouw_omschrijving,
dg.alg_verdieping_code,
dg.alg_ruimte_nr,
rd.res_deel_omschrijving,
pf.prs_perslid_naam_full,
rrr.res_rsv_ruimte_van res_rsv_ruimte_datum,
rrr.res_rsv_ruimte_van,
rrr.res_rsv_ruimte_tot,
h.ins_deel_statedate,
DECODE(ins_deel_state_history_key, NULL, 1, 0) no_show,
DECODE(ins_deel_state_history_key, NULL, 0, 1) show
FROM res_rsv_ruimte rrr,
res_deel rd,
prs_v_perslid_fullnames pf,
ins_v_deel_gegevens dg,
alg_locatie l,
res_rsv_deel rrd
LEFT OUTER JOIN ins_deel_state_history h
ON fac.safe_to_number (h.ins_deel_state) = rrd.res_rsv_deel_key
WHERE rrr.res_rsv_ruimte_key = rrd.res_rsv_ruimte_key
AND rrd.res_deel_key = rd.res_deel_key
AND rrr.res_rsv_ruimte_host_key = pf.prs_perslid_key
AND rd.res_ins_deel_key = dg.ins_deel_key
AND dg.alg_locatie_key = l.alg_locatie_key;
------ 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