LPNL#67364 -- LeasePlan Nederland N.V.
svn path=/Customer/trunk/; revision=53093
This commit is contained in:
403
LPNL/LPNL.sql
Normal file
403
LPNL/LPNL.sql
Normal file
@@ -0,0 +1,403 @@
|
||||
--
|
||||
-- $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
|
||||
Reference in New Issue
Block a user