Files
Customer/PZHO/pzho.sql
Maarten van der Heide 869477a929 FSN#27051 543-migratie nav. aangescherpte tijdsduren
svn path=/Customer/trunk/; revision=22908
2014-10-13 14:34:33 +00:00

7205 lines
311 KiB
SQL
Raw Blame History

-- Script containing customer specific configuration sql statements
-- for PZHO: Provincie Zuid Holland
-- (c) 2006 Facilitor Software Nederland/Dijkoraad IT bv
-- $Revision$
-- $Id$
--
-- Support: +31 53 4800700
SET ECHO ON
spool xPZHO.LST
--------------
-- functie om eerst weekdag na x aantal werkdagen te bepalen.
CREATE OR REPLACE FUNCTION pzho_eerste_vrijdag (dagen number, weekdag number)
RETURN DATE
AS
tmp_date DATE;
BEGIN
tmp_date := fac.DatumTijdPlusUitvoerTijd(sysdate,dagen,'DAGEN');
IF weekdag > 7 OR weekdag < 1 THEN
RETURN sysdate;
END IF;
WHILE TO_CHAR (tmp_date, 'D') <> TO_CHAR (weekdag)
LOOP
tmp_date := tmp_date + 1;
END LOOP;
RETURN tmp_date;
END;
/
/* Formatted on 2006/03/30 15:43 (Formatter Plus v4.8.6) */
CREATE OR REPLACE VIEW pzho_v_stdmelding
(
vakgroep,
omschrijving,
acceptatietijd,
uitvoertijd,
kostensoort,
kostensoort_opmerking,
niet_frontend
)
AS
SELECT sd.ins_srtdiscipline_prefix
|| ' - '
|| d.ins_discipline_omschrijving,
mld_stdmelding_omschrijving,
TO_CHAR (std.mld_stdmelding_t_accepttijd.tijdsduur)
|| std.mld_stdmelding_t_accepttijd.eenheid,
TO_CHAR (std.mld_stdmelding_t_uitvoertijd.tijdsduur)
|| std.mld_stdmelding_t_uitvoertijd.eenheid,
ks.prs_kostensoort_oms,
ks.prs_kostensoort_opmerking,
std.mld_stdmelding_notfrontend
FROM ins_srtdiscipline sd,
mld_stdmelding std,
ins_tab_discipline d,
prs_kostensoort ks
WHERE d.ins_discipline_verwijder IS NULL
AND mld_stdmelding_verwijder IS NULL
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND std.prs_kostensoort_key = ks.prs_kostensoort_key(+)
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key;
/* Formatted on 2006/03/30 15:54 (Formatter Plus v4.8.6) */
CREATE OR REPLACE VIEW pzho_v_res_catalogus (fclt_f_soort,
omschrijving,
kostensoort,
kostensoort_opmerking,
artikel_omschrijving
)
AS
SELECT DECODE (ins_discipline_min_level,
1, 'Reserveerbaar object',
2, 'Verbruiksartikel',
3, 'Ruimte'
),
ins_discipline_omschrijving, ks.prs_kostensoort_oms,
prs_kostensoort_opmerking,
nvl(ra.res_artikel_omschrijving, id.ins_deel_omschrijving)
FROM res_discipline rd, prs_kostensoort ks, res_v_aanwezigartikel ra, res_v_aanwezigdeel red, ins_deel id
WHERE rd.prs_kostensoort_key = ks.prs_kostensoort_key(+)
AND rd.ins_discipline_verwijder is null
AND rd.ins_discipline_key = ra.res_discipline_key(+)
AND rd.ins_discipline_key = red.res_discipline_key(+)
AND red.res_ins_deel_key = id.ins_deel_key(+);
CREATE OR REPLACE VIEW PZHO_V_RAP_VERGADER
(
FCLT_F_LOCATIE,
FCLT_F_RUIMTE,
FCLT_D_DATUM,
VAN_TOT,
OMSCHRIJVING,
GASTHEER
)
AS
SELECT alg_locatie_omschrijving locatie,
rr.res_ruimte_nr ruimte,
TO_CHAR (res_rsv_ruimte_van, 'dd-mm-yyyy') datum,
TO_CHAR (rrr.res_rsv_ruimte_van, 'hh24:mi')
|| ' - '
|| TO_CHAR (rrr.res_rsv_ruimte_tot, 'hh24:mi')
van_tot,
rrr.res_rsv_ruimte_omschrijving omschrijving,
pfh.prs_perslid_naam_full gastheer
FROM prs_v_perslid_fullnames pfh,
res_v_aanwezigrsv_ruimte rrr,
res_ruimte_opstelling rro,
res_ruimte rr,
(SELECT DISTINCT alg_locatie_key, res_ruimte_key
FROM res_v_alg_ruimte_gegevens) rarg,
alg_locatie l
WHERE rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
AND rro.res_ruimte_key = rr.res_ruimte_key
AND rr.res_ruimte_key = rarg.res_ruimte_key
AND rarg.alg_locatie_key = l.alg_locatie_key
AND rrr.res_rsv_ruimte_host_key = pfh.prs_perslid_key;
CREATE OR REPLACE VIEW pzho_v_export_vergader
(
result,
result_order
)
AS
SELECT 'LOCATIE;RUIMTE;DATUM;VAN_TOT;OMSCHRIJVING;GASTHEER',0 FROM DUAL
UNION ALL
SELECT REPLACE (fclt_f_locatie, ';', ':') || ';'
|| REPLACE (
REPLACE (
REPLACE (REPLACE (fclt_f_ruimte, 'DH- ', 'DH-'),
'DH- ',
'DH-'),
'DH- ',
'DH-'),
';',
':')
|| ';'
|| REPLACE (fclt_d_datum, ';', ':')
|| ';'
|| REPLACE (van_tot, ';', ':')
|| ';'
|| REPLACE (omschrijving, ';', ':')
|| ';'
|| REPLACE (gastheer, ';', ':'),1
FROM pzho_v_rap_vergader
WHERE TO_CHAR (SYSDATE, 'dd-mm-yyyy') = fclt_d_datum;
CREATE OR REPLACE PACKAGE PZHO_IMPORT AS
-- PACKAGES voor de PZHO specifieke hulpfuncties tbv import
PROCEDURE set_prs_kenmerk ( p_import_key NUMBER
, p_niveau IN VARCHAR2
, p_kenmerk_key in NUMBER
, p_link_key in NUMBER
, p_kenmerk_waarde IN VARCHAR2);
END;
/
CREATE OR REPLACE PACKAGE BODY PZHO_IMPORT AS
--
-- Algemene procedures en functies.
--
PROCEDURE set_prs_kenmerk ( p_import_key NUMBER
, p_niveau IN VARCHAR2
, p_kenmerk_key in NUMBER
, p_link_key in NUMBER
, p_kenmerk_waarde IN VARCHAR2) AS
v_count NUMBER;
v_hint VARCHAR2(100);
v_aktie VARCHAR2(100);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (200);
BEGIN
v_hint := ' kenmerk ' || p_niveau || ' kenmerk_key: ' || p_kenmerk_key || ' link: ' || p_link_key || ' waarde: ' || p_kenmerk_waarde;
v_aktie := 'Toevoegen';
SELECT COUNT(*)
INTO v_count
FROM prs_kenmerklink
WHERE prs_link_key = p_link_key
AND prs_kenmerklink_niveau = p_niveau
AND prs_kenmerk_key = p_kenmerk_key
AND prs_kenmerklink_verwijder is null;
IF v_count = 1 THEN
IF p_kenmerk_waarde IS NULL THEN
v_aktie := 'Verwijder';
DELETE prs_kenmerklink
WHERE prs_link_key = p_link_key
AND prs_kenmerklink_niveau = p_niveau
AND prs_kenmerk_key = p_kenmerk_key
AND prs_kenmerklink_verwijder is null;
ELSE
v_aktie := 'Wijzigen';
UPDATE prs_kenmerklink
SET prs_kenmerklink_waarde = p_kenmerk_waarde
WHERE prs_link_key = p_link_key
AND prs_kenmerklink_niveau = p_niveau
AND prs_kenmerk_key = p_kenmerk_key
AND prs_kenmerklink_verwijder is null;
END IF;
ELSE
v_aktie := 'Toevoegen';
IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL THEN
INSERT INTO PRS_KENMERKLINK
( PRS_KENMERK_KEY
, PRS_LINK_KEY
, PRS_KENMERKLINK_NIVEAU
, PRS_KENMERKLINK_WAARDE)
VALUES
( p_kenmerk_key
, p_link_key
, p_niveau
, p_kenmerk_waarde);
END IF;
END IF;
--fac.imp_writelog (p_import_key, 'I', 'Verwerken kenmerk ' || v_aktie || ' kenmerk_key:' || p_kenmerk_key || ' waarde:'|| p_kenmerk_waarde || '-','');
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_errormsg, v_aktie || ' - ' || v_hint);
END;
END;
/
CREATE OR REPLACE PACKAGE PZHO_RAP AS
-- PACKAGES voor de PZHO specifieke rapportages
TYPE t_cursor IS REF CURSOR;
PROCEDURE pzho_p_rap_indienst (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
PROCEDURE pzho_p_res_zelfservice (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
PROCEDURE pzho_p_mld_fe_overzicht(user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
PROCEDURE pzho_p_res_verg_centrum(user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
PROCEDURE pzho_p_zelfservicemeld (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
END;
/
/* Formatted on 12-11-2012 11:02:38 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PACKAGE BODY PZHO_RAP
AS
--
-- Algemene procedures en functies.
--
PROCEDURE pzho_p_rap_indienst (user_key IN NUMBER,
p_datum_van IN VARCHAR2, -- Let wel: formaat '13-05-2005'
p_datum_tot IN VARCHAR2,
p_cursor OUT t_cursor)
AS
v_datum_van DATE;
v_datum_tot DATE;
BEGIN
v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy');
OPEN p_cursor FOR
SELECT pf_new.prs_perslid_naam_full nieuwe_medewerker,
TO_CHAR (p_new.prs_perslid_aanmaak, 'DD-MM-YYYY HH24:MI')
aanmaak,
p_new.prs_perslid_key key,
COALESCE (
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km
WHERE mld_kenmerk_key = 1096
AND km.mld_melding_key =
melding.mld_melding_key),
'**'
|| a.prs_afdeling_naam
|| '-'
|| a.prs_afdeling_omschrijving
)
afdeling,
COALESCE (
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames pf2
WHERE pf2.prs_perslid_key = melding.mld_perslid_key),
'**' || pf_rec.prs_perslid_naam_full
)
aanvrager,
COALESCE (
(SELECT prs_perslid_email
FROM prs_perslid p2
WHERE p2.prs_perslid_key = melding.mld_perslid_key),
'**' || p_rec.prs_perslid_email
)
mail,
melding.mld_melding_key melding,
TO_CHAR (melding.mld_melding_datum, 'DD-MM-YYYY HH24:MI')
aanmaak_melding
FROM prs_perslid p_new,
prs_kenmerklink kl,
prs_perslid p_rec,
prs_v_perslid_fullnames pf_new,
prs_v_perslid_fullnames pf_rec,
prs_afdeling a,
(SELECT km.mld_kenmerkmelding_waarde || '/'
personeelsnummer,
m.mld_melding_key,
mld_melding_datum,
p.prs_perslid_key,
m.prs_perslid_key mld_perslid_key
FROM mld_melding m,
mld_kenmerkmelding km,
prs_perslid p
WHERE 1 = 1
AND mld_kenmerk_key = 1095
AND km.mld_melding_key = m.mld_melding_key
AND mld_stdmelding_key = 394
AND SUBSTR (prs_perslid_nr,
1,
INSTR (prs_perslid_nr, '/')) =
km.mld_kenmerkmelding_waarde || '/'
AND mld_melding_datum > p.prs_perslid_aanmaak)
melding
WHERE p_new.prs_perslid_aanmaak > v_datum_van
AND p_new.prs_perslid_aanmaak < v_datum_tot
AND SUBSTR (p_new.prs_perslid_naam, 1, 1) <> '_'
AND a.prs_afdeling_key = p_new.prs_afdeling_key
AND p_new.prs_afdeling_key = kl.prs_link_key
AND kl.prs_kenmerklink_niveau = 'A'
AND kl.prs_kenmerk_key = 1060
AND SUBSTR (p_rec.prs_perslid_nr,
1,
INSTR (p_rec.prs_perslid_nr, '/') - 1) =
kl.prs_kenmerklink_waarde
AND p_new.prs_perslid_key = melding.prs_perslid_key(+)
AND p_new.prs_perslid_key = pf_new.prs_perslid_key
AND p_rec.prs_perslid_key = pf_rec.prs_perslid_key
AND p_new.prs_perslid_verwijder IS NULL
ORDER BY TO_CHAR (p_new.prs_perslid_aanmaak, 'YYYYMMDDHH24MI');
END;
PROCEDURE pzho_p_res_zelfservice (user_key IN NUMBER,
p_datum_van IN VARCHAR2, -- Let wel: formaat '13-05-2005'
p_datum_tot IN VARCHAR2,
p_cursor OUT t_cursor)
AS
v_datum_van DATE;
v_datum_tot DATE;
v_alg_level_read NUMBER;
BEGIN
v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy');
OPEN p_cursor FOR
SELECT TO_CHAR (r.res_reservering_aanmaak, 'dd-mm-yyyy hh24:mi')
datum_tijd,
r.res_reservering_key nummer,
pf.prs_perslid_naam_full aanvrager,
rr.res_rsv_ruimte_omschrijving omschrijving,
k.prs_kostenplaats_nr
|| '-'
|| k.prs_kostenplaats_omschrijving
kostenplaats,
--rr.res_rsv_ruimte_ordernr begrotingspost,
COALESCE (rk.res_kenmerkreservering_waarde,
rr.res_rsv_ruimte_ordernr)
begrotingspost
FROM res_v_aanwezigreservering r,
res_rsv_ruimte rr,
prs_v_perslid_fullnames pf,
prs_kostenplaats k,
(SELECT rk.res_rsv_ruimte_key,
rk.res_kenmerkreservering_waarde
FROM res_kenmerkwaarde rk, res_kenmerk k
WHERE rk.res_kenmerkwaarde_verwijder IS NULL
AND rk.res_kenmerk_key = k.res_kenmerk_key
AND k.res_kenmerk_verwijder IS NULL
AND k.res_srtkenmerk_key = 31) rk
WHERE r.res_reservering_key = rr.res_reservering_key
AND rr.res_rsv_ruimte_contact_key = pf.prs_perslid_key
AND rr.res_rsv_ruimte_contact_key =
fac.gettrackinguserkey ('RESNEW',
rr.res_rsv_ruimte_key)
AND rr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
AND rr.res_rsv_ruimte_key = rk.res_rsv_ruimte_key(+)
AND r.res_reservering_aanmaak BETWEEN v_datum_van
AND v_datum_tot
ORDER BY r.res_reservering_aanmaak;
END;
PROCEDURE pzho_p_mld_fe_overzicht (user_key IN NUMBER,
p_datum_van IN VARCHAR2, -- Let wel: formaat '13-05-2005'
p_datum_tot IN VARCHAR2,
p_cursor OUT t_cursor)
AS
v_datum_van DATE;
v_datum_tot DATE;
v_alg_level_read NUMBER;
BEGIN
v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy');
OPEN p_cursor FOR
SELECT m.mld_melding_key meldingnr,
TO_CHAR (m.mld_melding_datum, 'DD-MM-YYYY HH24:MI')
invoer_tijdstip,
'['
|| md.ins_discipline_omschrijving
|| '/'
|| std.mld_stdmelding_omschrijving
|| '] '
|| m.mld_melding_omschrijving
melding,
(SELECT pf.prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = m.prs_perslid_key)
melder,
l.alg_locatie_code
|| DECODE (v.alg_gebouw_code,
NULL, '',
'-' || v.alg_gebouw_code)
|| DECODE (v.alg_verdieping_code,
NULL, '',
'-' || v.alg_verdieping_code)
|| DECODE (v.alg_ruimte_nr,
NULL, '',
'-' || v.alg_ruimte_nr)
|| DECODE (v.alg_terreinsector_code,
NULL, '',
'-' || v.alg_terreinsector_code)
plaats,
s.mld_statuses_omschrijving status
FROM mld_melding m,
mld_statuses s,
mld_stdmelding std,
alg_v_allonrgoed_gegevens v,
alg_locatie l,
mld_discipline md,
ins_srtdiscipline sd
WHERE std.mld_stdmelding_key = m.mld_stdmelding_key
AND m.mld_melding_status = s.mld_statuses_key
AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
AND sd.ins_srtdiscipline_key = md.ins_srtdiscipline_key
AND md.ins_discipline_key = std.mld_ins_discipline_key
AND m.prs_perslid_key =
fac.gettrackinguserkey ('MLDNEW', m.mld_melding_key) -- maw FE melding
AND m.mld_alg_onroerendgoed_keys =
v.alg_onroerendgoed_keys(+)
AND m.mld_melding_datum BETWEEN v_datum_van AND v_datum_tot
ORDER BY m.mld_melding_datum;
END;
PROCEDURE pzho_p_res_verg_centrum (user_key IN NUMBER,
p_datum_van IN VARCHAR2, -- Let wel: formaat '13-05-2005'
p_datum_tot IN VARCHAR2,
p_cursor OUT t_cursor)
AS
v_datum_van DATE;
v_datum_tot DATE;
v_alg_level_read NUMBER;
BEGIN
v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy');
OPEN p_cursor FOR
SELECT l.alg_locatie_code Locatie,
COALESCE (opstelalg.res_ruimte_nr,
ruimte_geg.alg_ruimte_aanduiding)
Ruimte,
TO_CHAR (res_geg.res_reservering_van, 'DD-MM-YYYY') Datum,
TO_CHAR (res_geg.res_reservering_van, 'HH24:MI') Van,
TO_CHAR (res_geg.res_reservering_tot, 'HH24:MI') Tot,
rrr.res_reservering_key Res_nr,
res_geg.res_ruimte_opstel_bezoekers Pers_max,
rrr.res_rsv_ruimte_bezoekers Opg_pers,
p.prs_perslid_naam
|| DECODE (NVL (p.prs_perslid_voorletters, ''),
'', '',
', ' || p.prs_perslid_voorletters)
|| DECODE (NVL (p.prs_perslid_tussenvoegsel, ''),
'', '',
' ' || p.prs_perslid_tussenvoegsel)
|| DECODE (NVL (p.prs_perslid_voornaam, ''),
'', '',
' (' || p.prs_perslid_voornaam || ')')
Gastheer,
(SELECT p.prs_perslid_naam
|| DECODE (NVL (p.prs_perslid_voorletters, ''),
'', '',
', ' || p.prs_perslid_voorletters)
|| DECODE (NVL (p.prs_perslid_tussenvoegsel, ''),
'', '',
' ' || p.prs_perslid_tussenvoegsel)
|| DECODE (NVL (p.prs_perslid_voornaam, ''),
'', '',
' (' || p.prs_perslid_voornaam || ')')
FROM prs_perslid p
WHERE p.prs_perslid_key =
rrr.res_rsv_ruimte_contact_key)
Aanvrager,
p.prs_perslid_telefoonnr Tel_aanvr,
res_rsv_ruimte_omschrijving Omsch,
res_rsv_ruimte_opmerking Opm
FROM (SELECT 'R' AS res_type,
rrr.res_rsv_ruimte_key,
rrr.res_rsv_ruimte_van AS res_reservering_van,
rrr.res_rsv_ruimte_tot AS res_reservering_tot,
rrr.res_status_bo_key,
rro.res_ruimte_opstel_bezoekers
FROM res_v_aanwezigrsv_ruimte rrr,
res_ruimte_opstelling rro,
res_ruimte rr,
res_opstelling ro
WHERE rrr.res_ruimte_opstel_key =
rro.res_ruimte_opstel_key
AND rro.res_ruimte_key = rr.res_ruimte_key
AND rro.res_opstelling_key =
ro.res_opstelling_key
AND res_rsv_ruimte_van BETWEEN v_datum_van
AND v_datum_tot)
res_geg,
res_rsv_ruimte rrr,
prs_perslid p,
alg_v_ruimte_gegevens ruimte_geg,
( SELECT res_ruimte_opstel_key,
res_ruimte_nr,
MIN (alg_ruimte_key) alg_ruimte_key
FROM res_ruimte_opstelling rro,
res_alg_ruimte rar,
res_ruimte rr
WHERE rro.res_ruimte_key = rar.res_ruimte_key
AND rr.res_ruimte_key = rar.res_ruimte_key
AND rar.res_alg_ruimte_verwijder IS NULL
GROUP BY res_ruimte_opstel_key, res_ruimte_nr) opstelalg,
alg_locatie l,
prs_kostenplaats k
WHERE res_geg.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND res_rsv_ruimte_host_key = p.prs_perslid_key
AND rrr.res_ruimte_opstel_key =
opstelalg.res_ruimte_opstel_key(+)
AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
AND ruimte_geg.alg_ruimte_key =
COALESCE (rrr.alg_ruimte_key,
opstelalg.alg_ruimte_key)
AND l.alg_locatie_key = ruimte_geg.alg_locatie_key
AND res_geg.res_reservering_van BETWEEN v_datum_van
AND v_datum_tot
AND res_geg.res_status_bo_key < 5
AND (rrr.res_rsv_ruimte_bezoekers >
res_geg.res_ruimte_opstel_bezoekers
OR rrr.res_rsv_ruimte_bezoekers > 50)
ORDER BY UPPER (l.alg_locatie_code), res_geg.res_reservering_van;
END;
-- PZHO#13965/PZHO#23492
PROCEDURE pzho_p_zelfservicemeld (user_key IN NUMBER,
p_datum_van IN VARCHAR2, -- Let wel: formaat '13-05-2005'
p_datum_tot IN VARCHAR2,
p_cursor OUT t_cursor)
AS
v_datum_van DATE;
v_datum_tot DATE;
BEGIN
v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy');
OPEN p_cursor FOR
SELECT vakgroeptype,
vakgroep,
melding,
SUM (zelf) zelf,
COUNT ( * ) - SUM (zelf) nietzelf,
REPLACE (
TO_CHAR (ROUND (100 * SUM (zelf) / COUNT ( * ), 1),
'990.9'),
'.',
','
)
pctzelf
FROM (SELECT sd.ins_srtdiscipline_omschrijving vakgroeptype,
md.ins_discipline_omschrijving vakgroep,
std.mld_stdmelding_omschrijving melding,
DECODE (m.prs_perslid_key,
t.prs_perslid_key, 1,
0)
zelf
FROM mld_melding m,
mld_stdmelding std,
mld_discipline md,
ins_srtdiscipline sd,
fac_tracking t
WHERE m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key =
md.ins_discipline_key
AND md.ins_srtdiscipline_key =
sd.ins_srtdiscipline_key
AND m.mld_melding_key = t.fac_tracking_refkey
AND t.fac_srtnotificatie_key = 21 -- MLDNEW
AND m.mld_melding_datum BETWEEN v_datum_van
AND v_datum_tot)
GROUP BY vakgroeptype, vakgroep, melding;
END;
END;
/
CREATE OR REPLACE VIEW pzho_v_export_bulkverhuizing (result,
result_order
)
AS
SELECT SUBSTR (prs_perslid_nr, 1, INSTR (prs_perslid_nr, '/') - 1) ||';'||
SUBSTR (prs_perslid_nr, INSTR (prs_perslid_nr, '/') + 1) ||';'||
a.prs_afdeling_naam ||';'||
REPLACE (SUBSTR (f.prs_srtperslid_omschrijving,
1,
INSTR (f.prs_srtperslid_omschrijving, '-') - 2), 'INACTIEF: ' , ''
) ||';'||
alg_locatie_code ||';'||
alg_gebouw_code ||';'||
alg_verdieping_code ||';'||
alg_ruimte_nr ||';',
p.prs_perslid_key
FROM prs_v_perslidwerkplek_gegevens wg,
prs_v_aanwezigperslid p,
alg_locatie l,
prs_afdeling a,
prs_srtperslid f
WHERE NVL (prs_werkplek_virtueel, 0) = 0
AND wg.prs_perslid_key = p.prs_perslid_key
AND wg.alg_locatie_key = l.alg_locatie_key
AND p.prs_afdeling_key = a.prs_afdeling_key
AND p.prs_srtperslid_key = f.prs_srtperslid_key;
CREATE OR REPLACE PROCEDURE PZHO_SELECT_BULKVERHUIZING (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
BEGIN
DELETE FROM imp_log
WHERE imp_log_applicatie = p_applname;
-- export wordt via de view PZHO_V_EXPORT_BULKVERHUIZING uitgevoerd.
END;
/
CREATE OR REPLACE PROCEDURE PZHO_EXPORT_BULKVERHUIZING(
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2
)
AS
BEGIN
DELETE FROM imp_log
WHERE imp_log_applicatie = p_applname;
-- export wordt via de view PZHO_V_EXPORT_BULKVERHUIZING uitgevoerd.
END;
/
CREATE OR REPLACE VIEW pzho_v_label_werkplekbew (prj_werkplek_key, waarde)
AS
SELECT pw.prj_werkplek_key, prs_perslid_naam_full prs_perslid_naam_full
FROM prj_werkplek wp, prj_perslidwerkplek pw, prs_v_perslid_fullnames pf
WHERE wp.prj_werkplek_key = pw.prj_werkplek_key
AND pw.prs_perslid_key = pf.prs_perslid_key(+)
AND pw.prj_perslidwerkplek_verwijder IS NULL;
-- Kostenoverzicht voor mail naar budgethouder.
/* Formatted on 12-11-2012 11:20:44 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW pzho_v_kostenoverzicht_budgeth
(
prs_perslid_key,
kostenplaats,
datum,
aanvrager,
organisatie,
categorie,
categorienummer,
bedrag,
status,
module,
kpgroep,
ksoort,
ordernr,
kostenplaats_key,
prs_perslid_email,
omschrijving,
extra_key
)
AS
SELECT pl.prs_perslid_key,
kostenplaats,
datum,
aanvrager,
organisatie,
categorie,
categorienummer,
SUM (bedrag),
status,
module,
kpgroep,
ksoort,
ordernr,
kostenplaats_key,
pl.prs_perslid_email,
omschrijving,
pl.prs_perslid_key
FROM (SELECT k.prs_kostenplaats_key kostenplaats_key,
k.prs_kostenplaats_nr
|| ' '
|| k.prs_kostenplaats_omschrijving
kostenplaats,
TO_CHAR (rr.res_rsv_ruimte_van, 'DD-MM-YYYY') datum,
prs_perslid_naam_full aanvrager,
(SELECT prs_afdeling_naam
FROM prs_v_afdeling d
WHERE p.prs_afdeling_key = d.prs_afdeling_key)
organisatie,
'Reservering' categorie,
TO_CHAR (r.res_reservering_key) categorienummer,
res.getruimteprijs (rr.res_rsv_ruimte_key) bedrag,
rr.res_status_BO_key status,
'RES' module,
k.prs_kostenplaatsgrp_key kpgroep,
ks.prs_kostensoort_oms
|| ' '
|| ks.prs_kostensoort_opmerking
ksoort,
--rr.res_rsv_ruimte_ordernr ordernr,
COALESCE (rk.res_kenmerkreservering_waarde,
rr.res_rsv_ruimte_ordernr)
ordernr,
rr.res_rsv_ruimte_omschrijving omschrijving
FROM prs_kostenplaats k,
res_v_aanwezigreservering r,
res_v_aanwezigrsv_ruimte rr,
res_ruimte_opstelling ro,
res_v_aanwezigruimte ru,
res_discipline dis,
prs_kostensoort ks,
prs_perslid p,
prs_v_perslid_fullnames_all pf,
(SELECT rk.res_rsv_ruimte_key,
rk.res_kenmerkreservering_waarde
FROM res_kenmerkwaarde rk, res_kenmerk k
WHERE rk.res_kenmerkwaarde_verwijder IS NULL
AND rk.res_kenmerk_key = k.res_kenmerk_key
AND k.res_kenmerk_verwijder IS NULL
AND k.res_srtkenmerk_key = 31) rk
WHERE rr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
AND r.res_reservering_key = rr.res_reservering_key
AND rr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
AND ro.res_ruimte_key = ru.res_ruimte_key
AND ru.res_discipline_key = dis.ins_discipline_key
AND dis.prs_kostensoort_key = ks.prs_kostensoort_key(+)
AND rr.res_rsv_ruimte_contact_key = p.prs_perslid_key
AND p.prs_perslid_key = pf.prs_perslid_key
AND rr.res_rsv_ruimte_key = rk.res_rsv_ruimte_key(+)
AND rr.res_rsv_ruimte_aanmaak BETWEEN TRUNC (SYSDATE)
- 1
AND TRUNC (SYSDATE)
UNION ALL
SELECT k.prs_kostenplaats_key kostenplaats_key,
k.prs_kostenplaats_nr
|| ' '
|| k.prs_kostenplaats_omschrijving
kostenplaats,
TO_CHAR (rr.res_rsv_ruimte_van, 'DD-MM-YYYY') datum,
prs_perslid_naam_full aanvrager,
(SELECT prs_afdeling_naam
FROM prs_v_afdeling d
WHERE p.prs_afdeling_key = d.prs_afdeling_key)
organisatie,
'Reservering' categorie,
TO_CHAR (r.res_reservering_key) categorienummer,
res.getartikelprijs (ra.res_rsv_artikel_key) bedrag,
ra.res_status_BO_key status,
'RES' module,
k.prs_kostenplaatsgrp_key kpgroep,
ks.prs_kostensoort_oms
|| ' '
|| ks.prs_kostensoort_opmerking
ksoort,
--rr.res_rsv_ruimte_ordernr ordernr,
COALESCE (rk.res_kenmerkreservering_waarde,
rr.res_rsv_ruimte_ordernr)
ordernr,
rr.res_rsv_ruimte_omschrijving omschrijving
FROM prs_kostenplaats k,
res_v_aanwezigreservering r,
res_v_aanwezigrsv_ruimte rr,
res_v_aanwezigrsv_artikel ra,
res_v_aanwezigartikel a,
res_discipline dis,
prs_kostensoort ks,
prs_perslid p,
prs_v_perslid_fullnames_all pf,
(SELECT rk.res_rsv_ruimte_key,
rk.res_kenmerkreservering_waarde
FROM res_kenmerkwaarde rk, res_kenmerk k
WHERE rk.res_kenmerkwaarde_verwijder IS NULL
AND rk.res_kenmerk_key = k.res_kenmerk_key
AND k.res_kenmerk_verwijder IS NULL
AND k.res_srtkenmerk_key = 31) rk
WHERE rr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
AND r.res_reservering_key = rr.res_reservering_key
AND rr.res_rsv_ruimte_key = ra.res_rsv_ruimte_key
AND ra.res_artikel_key = a.res_artikel_key
AND a.res_discipline_key = dis.ins_discipline_key
AND dis.prs_kostensoort_key = ks.prs_kostensoort_key(+)
AND rr.res_rsv_ruimte_contact_key = p.prs_perslid_key
AND p.prs_perslid_key = pf.prs_perslid_key
AND rr.res_rsv_ruimte_key = rk.res_rsv_ruimte_key(+)
AND ra.res_rsv_artikel_aanmaak BETWEEN TRUNC (SYSDATE)
- 1
AND TRUNC (SYSDATE)
UNION ALL
SELECT k.prs_kostenplaats_key kostenplaats_key,
k.prs_kostenplaats_nr
|| ' '
|| k.prs_kostenplaats_omschrijving
kostenplaats,
TO_CHAR (rr.res_rsv_ruimte_van, 'DD-MM-YYYY') datum,
prs_perslid_naam_full aanvrager,
(SELECT prs_afdeling_naam
FROM prs_v_afdeling d
WHERE p.prs_afdeling_key = d.prs_afdeling_key)
organisatie,
'Reservering' categorie,
TO_CHAR (r.res_reservering_key) categorienummer,
res.getdeelprijs (rd.res_rsv_deel_key) bedrag,
rd.res_status_BO_key status,
'RES' module,
k.prs_kostenplaatsgrp_key kpgroep,
ks.prs_kostensoort_oms
|| ' '
|| ks.prs_kostensoort_opmerking
ksoort,
--rr.res_rsv_ruimte_ordernr ordernr,
COALESCE (rk.res_kenmerkreservering_waarde,
rr.res_rsv_ruimte_ordernr)
ordernr,
rr.res_rsv_ruimte_omschrijving omschrijving
FROM prs_kostenplaats k,
res_v_aanwezigreservering r,
res_v_aanwezigrsv_deel rd,
res_v_aanwezigrsv_ruimte rr,
res_v_aanwezigdeel d,
res_discipline dis,
prs_kostensoort ks,
prs_perslid p,
prs_v_perslid_fullnames_all pf,
(SELECT rk.res_rsv_ruimte_key,
rk.res_kenmerkreservering_waarde
FROM res_kenmerkwaarde rk, res_kenmerk k
WHERE rk.res_kenmerkwaarde_verwijder IS NULL
AND rk.res_kenmerk_key = k.res_kenmerk_key
AND k.res_kenmerk_verwijder IS NULL
AND k.res_srtkenmerk_key = 31) rk
WHERE rr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
AND r.res_reservering_key = rr.res_reservering_key
AND rr.res_rsv_ruimte_key = rd.res_rsv_ruimte_key
AND rd.res_deel_key = d.res_deel_key
AND d.res_discipline_key = dis.ins_discipline_key
AND dis.prs_kostensoort_key = ks.prs_kostensoort_key(+)
AND rr.res_rsv_ruimte_contact_key = p.prs_perslid_key
AND p.prs_perslid_key = pf.prs_perslid_key
AND rr.res_rsv_ruimte_key = rk.res_rsv_ruimte_key(+)
AND rd.res_rsv_deel_aanmaak BETWEEN TRUNC (SYSDATE) - 1
AND TRUNC (SYSDATE)
UNION ALL
SELECT k.prs_kostenplaats_key kostenplaats_key,
k.prs_kostenplaats_nr
|| ' '
|| k.prs_kostenplaats_omschrijving
kostenplaats,
TO_CHAR (m.mld_melding_datum, 'DD-MM-YYYY') datum,
prs_perslid_naam_full aanvrager,
(SELECT prs_afdeling_naam
FROM prs_v_afdeling d
WHERE p.prs_afdeling_key = d.prs_afdeling_key)
organisatie,
'Melding' categorie,
(SELECT sd.ins_srtdiscipline_prefix
FROM mld_discipline md, ins_srtdiscipline sd
WHERE sd.ins_srtdiscipline_key =
md.ins_srtdiscipline_key
AND md.ins_discipline_key =
std.mld_ins_discipline_key)
|| m.mld_melding_key
categorienummer,
NULL bedrag,
NULL status,
'MLD' module,
k.prs_kostenplaatsgrp_key kpgroep,
NVL (
(SELECT ks.prs_kostensoort_oms
|| ' '
|| ks.prs_kostensoort_opmerking
FROM prs_kostensoort ks
WHERE ks.prs_kostensoort_key =
std.prs_kostensoort_key),
(SELECT ks.prs_kostensoort_oms
|| ' '
|| ks.prs_kostensoort_opmerking
FROM mld_discipline mdis, prs_kostensoort ks
WHERE mdis.prs_kostensoort_key =
ks.prs_kostensoort_key
AND mdis.ins_discipline_key =
std.mld_ins_discipline_key)
)
ksoort,
COALESCE (mk.mld_kenmerkmelding_waarde,
m.mld_melding_ordernr)
ordernr,
(SELECT md.ins_discipline_omschrijving
FROM mld_discipline md
WHERE md.ins_discipline_key =
std.mld_ins_discipline_key)
|| ' / '
|| std.mld_stdmelding_omschrijving
omschrijving
FROM prs_kostenplaats k,
mld_melding m,
mld_stdmelding std,
prs_perslid p,
prs_v_perslid_fullnames_all pf,
(SELECT mk.mld_melding_key,
mk.mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding mk, mld_kenmerk k
WHERE mk.mld_kenmerkmelding_verwijder IS NULL
AND mk.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_kenmerk_verwijder IS NULL
AND k.mld_srtkenmerk_key = 752) mk
WHERE k.prs_kostenplaats_key = m.prs_kostenplaats_key
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND m.prs_perslid_key = p.prs_perslid_key
AND m.mld_melding_status <> 1 -- geen afgewezen
AND m.mld_stdmelding_key in (470, -- 9-persoonsbus
409, -- Dienstauto
210, -- Taxirit
471 -- Touringcar met chauffeur
) -- PZHO#28574
AND p.prs_perslid_key = pf.prs_perslid_key
AND m.mld_melding_key = mk.mld_melding_key(+)
AND m.mld_melding_datum BETWEEN TRUNC (SYSDATE) - 1
AND TRUNC (SYSDATE)
UNION ALL
SELECT k.prs_kostenplaats_key kostenplaats_key,
k.prs_kostenplaats_nr
|| ' '
|| k.prs_kostenplaats_omschrijving
kostenplaats,
TO_CHAR (o.mld_opdr_datumbegin, 'DD-MM-YYYY') datum,
prs_perslid_naam_full aanvrager,
(SELECT prs_afdeling_naam
FROM prs_v_afdeling d
WHERE p.prs_afdeling_key = d.prs_afdeling_key)
organisatie,
'Melding' categorie,
(SELECT sd.ins_srtdiscipline_prefix
FROM mld_discipline md, ins_srtdiscipline sd
WHERE sd.ins_srtdiscipline_key =
md.ins_srtdiscipline_key
AND md.ins_discipline_key =
std.mld_ins_discipline_key)
|| m.mld_melding_key
categorienummer,
NVL (o.mld_opdr_kosten, 0) bedrag,
o.mld_statusopdr_key status,
'MLD' module,
k.prs_kostenplaatsgrp_key kpgroep,
NVL (
(SELECT ks.prs_kostensoort_oms
|| ' '
|| ks.prs_kostensoort_opmerking
FROM prs_kostensoort ks
WHERE ks.prs_kostensoort_key =
std.prs_kostensoort_key),
(SELECT ks.prs_kostensoort_oms
|| ' '
|| ks.prs_kostensoort_opmerking
FROM mld_discipline mdis, prs_kostensoort ks
WHERE mdis.prs_kostensoort_key =
ks.prs_kostensoort_key
AND mdis.ins_discipline_key =
std.mld_ins_discipline_key)
)
ksoort,
--m.mld_melding_ordernr ordernr,
COALESCE (mk.mld_kenmerkmelding_waarde,
m.mld_melding_ordernr)
ordernr,
(SELECT md.ins_discipline_omschrijving
FROM mld_discipline md
WHERE md.ins_discipline_key =
std.mld_ins_discipline_key)
|| ' / '
|| std.mld_stdmelding_omschrijving
omschrijving
FROM prs_kostenplaats k,
mld_opdr o,
mld_melding m,
mld_stdmelding std,
prs_perslid p,
prs_v_perslid_fullnames_all pf,
(SELECT mk.mld_melding_key,
mk.mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding mk, mld_kenmerk k
WHERE mk.mld_kenmerkmelding_verwijder IS NULL
AND mk.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_kenmerk_verwijder IS NULL
AND k.mld_srtkenmerk_key = 752) mk
WHERE k.prs_kostenplaats_key = o.prs_kostenplaats_key
AND o.mld_melding_key = m.mld_melding_key
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND m.prs_perslid_key = p.prs_perslid_key
AND o.mld_statusopdr_key NOT IN (1, 2) -- geen afgewezen/niet-gefiatteerde
AND p.prs_perslid_key = pf.prs_perslid_key
AND m.mld_melding_key = mk.mld_melding_key(+)
AND o.mld_opdr_datumbegin BETWEEN TRUNC (SYSDATE) - 1
AND TRUNC (SYSDATE)
UNION ALL
SELECT k.prs_kostenplaats_key kostenplaats_key,
k.prs_kostenplaats_nr
|| ' '
|| k.prs_kostenplaats_omschrijving
kostenplaats,
TO_CHAR (b.bes_bestelling_datum, 'DD-MM-YYYY') datum,
prs_perslid_naam_full aanvrager,
(SELECT prs_afdeling_naam
FROM prs_v_afdeling d
WHERE p.prs_afdeling_key = d.prs_afdeling_key)
organisatie,
'Bestelling' categorie,
TO_CHAR (b.bes_bestelling_key) categorienummer,
bi.bes_bestelling_item_aantal
* bi.bes_bestelling_item_prijs
bedrag,
NVL (b.bes_bestelling_status, 0) status,
'BES' module,
k.prs_kostenplaatsgrp_key kpgroep,
ks.prs_kostensoort_oms
|| ' '
|| ks.prs_kostensoort_opmerking
ksoort,
--b.bes_bestelling_ordernr ordernr,
COALESCE (bk.bes_kenmerkbestell_waarde,
b.bes_bestelling_ordernr)
ordernr,
bdis.ins_discipline_omschrijving omschrijving
FROM prs_kostenplaats k,
bes_bestelling b,
bes_bestelling_item bi,
bes_srtdeel isd,
bes_srtgroep isg,
bes_discipline bdis,
prs_kostensoort ks,
prs_perslid p,
prs_v_perslid_fullnames_all pf,
(SELECT bk.bes_bestelling_key,
bk.bes_kenmerkbestell_waarde
FROM bes_kenmerkbestell bk, bes_kenmerk k
WHERE bk.bes_kenmerkbestell_verwijder IS NULL
AND bk.bes_kenmerk_key = k.bes_kenmerk_key
AND k.bes_kenmerk_verwijder IS NULL
AND k.bes_srtkenmerk_key = 241) bk
WHERE k.prs_kostenplaats_key = b.prs_kostenplaats_key(+)
AND b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.bes_srtdeel_key = isd.bes_srtdeel_key
AND isd.bes_srtgroep_key = isg.bes_srtgroep_key
AND isg.ins_discipline_key = bdis.ins_discipline_key
AND bdis.prs_kostensoort_key =
ks.prs_kostensoort_key(+)
AND b.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_key = pf.prs_perslid_key
AND b.bes_bestelling_key = bk.bes_bestelling_key(+)
AND b.bes_bestelling_datum BETWEEN TRUNC (SYSDATE) - 1
AND TRUNC (SYSDATE))
tab,
prs_perslid pl,
prs_kostenplaats pk,
(SELECT p2.prs_perslid_key,
COALESCE (
(SELECT fac.safe_to_number (
prs_kenmerklink_waarde
)
FROM prs_kenmerklink kl
WHERE kl.prs_link_key(+) = p2.prs_perslid_key
AND prs_kenmerk_key = 1160),
6
)
waarde -- kenmerk om geen mail te ontvangen
FROM prs_perslid p2) mail
WHERE tab.kostenplaats_key = pk.prs_kostenplaats_key
AND pl.prs_perslid_key = mail.prs_perslid_key
AND mail.waarde = 6 -- 6 = ja en 7 = nee
AND pl.prs_perslid_key = pk.prs_perslid_key
AND NVL (ksoort, 'xxx') NOT LIKE '99999%' -- Die wil PZHO niet zien. code wordt gevolgd door opmerking
GROUP BY pl.prs_perslid_key,
prs_perslid_email,
kostenplaats_key,
kostenplaats,
datum,
aanvrager,
organisatie,
categorie,
categorienummer,
status,
module,
kpgroep,
ksoort,
ordernr,
omschrijving
ORDER BY prs_perslid_email,
kostenplaats_key,
datum,
aanvrager;
CREATE OR REPLACE VIEW pzho_v_noti_kostenbudgeth (code,
sender,
receiver,
text,
KEY,
xkey
)
AS
-- mail naar de budgethouder met gemaakte kosten van de vorige dag.
SELECT DISTINCT 'RAPMAI' code,
NULL sender,
prs_perslid_key receiver,
'Facilitaire Zaken: Bestellingen en Reserveringen ' text,
fac_usrrap_key KEY,
prs_perslid_key xkey
FROM pzho_v_kostenoverzicht_budgeth b,
fac_usrrap u
WHERE UPPER(fac_usrrap_view_name) = 'PZHO_V_KOSTENOVERZICHT_BUDGETH';
CREATE OR REPLACE VIEW pzho_v_noti_noshowbudgeth (code,
sender,
receiver,
text,
KEY,
xkey
)
AS
-- mail naar budgethouder ivm noshow op reserveringen.
SELECT 'CUST04' code,
NULL sender,
kp.prs_perslid_key receiver,
'Facilitaire Zaken: NoShow reservering' text,
rrr.res_reservering_key key,
rrr.res_rsv_ruimte_key xkey
FROM fac_tracking t,
fac_srtnotificatie s,
res_rsv_ruimte rrr,
prs_kostenplaats kp,
(SELECT p2.prs_perslid_key,
COALESCE (
(SELECT fac.safe_to_number (prs_kenmerklink_waarde)
FROM prs_kenmerklink kl
WHERE kl.prs_link_key(+) = p2.prs_perslid_key
AND prs_kenmerk_key = 1160),
6)
waarde -- kenmerk om geen mail te ontvangen
FROM prs_perslid p2) mail
WHERE t.fac_srtnotificatie_key = s.fac_srtnotificatie_key
AND s.fac_srtnotificatie_code = 'RESNOS'
AND fac_tracking_refkey = res_rsv_ruimte_key
AND rrr.prs_kostenplaats_key = kp.prs_kostenplaats_key
AND kp.prs_perslid_key = mail.prs_perslid_key
AND mail.waarde = 6
AND fac_tracking_datum BETWEEN TRUNC (SYSDATE) - 1
AND TRUNC (SYSDATE)
GROUP BY kp.prs_perslid_key, rrr.res_reservering_key, rrr.res_rsv_ruimte_key;
-- IMPORT VIEWS PZHO#274
-- View van de import logging
CREATE OR REPLACE VIEW PZHO_V_IMPORT_IMPLOG
(
HIDE_F_IMP_LOG_DATUM,
FCLT_F_APPLICATIE,
FCLT_F_DATUM,
TIJDSTIP,
FCLT_F_NIVEAU,
FCLT_F_OMSCHRIJVING,
HINT
)
AS
SELECT imp_log_datum hide_f_imp_log_datum,
fac_import_app_code,
TO_CHAR (imp_log_datum, 'YYYYMMDD') fclt_f_datum,
TO_CHAR (imp_log_datum, 'HH24:MI:SS') tijdstip,
DECODE (imp_log_status,
'F', 'Fataal',
'E', 'Error',
'W', 'Waarschuwing',
'S', 'Samenvatting',
'I', 'Informatief',
'-')
fclt_f_niveau,
imp_log_omschrijving fclt_f_omschrijving,
imp_log_hint
FROM imp_log l, fac_import i, fac_import_app a
WHERE l.fac_import_key = i.fac_import_key
AND i.fac_import_app_key = a.fac_import_app_key
AND l.fac_import_key IN (SELECT max(fac_import_key)
FROM fac_import
GROUP BY fac_import_app_key);
--
CREATE OR REPLACE VIEW PZHO_V_VERPLICHTING
(PRS_PERSLID_KEY)
AS
SELECT o.mld_uitvoerende_keys
FROM mld_opdr o, prs_perslid p, mld_melding m
WHERE o.mld_statusopdr_key = 5
AND o.mld_uitvoerende_keys = p.prs_perslid_key
UNION
SELECT m.prs_perslid_key
FROM mld_melding m
WHERE m.mld_melding_status IN (2, 3, 4, 7)
UNION
SELECT b.prs_perslid_key
FROM bes_bestelling b
WHERE b.bes_bestelling_status IN (5, 4, 3, 2)
UNION
SELECT prs_perslid_key
FROM prs_v_aanwezigkostenplaats
UNION
SELECT ins_alg_ruimte_key
FROM ins_v_aanwezigdeel d, ins_tab_discipline ID
WHERE d.ins_alg_ruimte_type = 'P'
AND ID.ins_discipline_key = d.ins_discipline_key
AND ID.ins_discipline_min_level <> 3
UNION
SELECT rr.res_rsv_ruimte_host_key
FROM res_v_aanwezigrsv_ruimte rr
WHERE rr.res_status_bo_key IN (4, 3, 2)
UNION
SELECT r.res_rsv_ruimte_host_key
FROM res_v_aanwezigrsv_ruimte r, res_v_aanwezigrsv_deel rd
WHERE r.res_rsv_ruimte_key = rd.res_rsv_ruimte_key
AND rd.res_status_bo_key IN (4, 3, 2)
AND r.alg_ruimte_key IS NOT NULL
UNION
SELECT r.res_rsv_ruimte_host_key
FROM res_v_aanwezigrsv_ruimte r, res_v_aanwezigrsv_artikel ra
WHERE r.res_rsv_ruimte_key = ra.res_rsv_ruimte_key
AND ra.res_status_bo_key IN (4, 3, 2)
AND r.alg_ruimte_key IS NOT NULL
UNION
SELECT rr.res_rsv_ruimte_contact_key
FROM res_v_aanwezigrsv_ruimte rr
WHERE rr.res_status_bo_key IN (4, 3, 2)
UNION
SELECT r.res_rsv_ruimte_contact_key
FROM res_v_aanwezigrsv_ruimte r, res_v_aanwezigrsv_deel rd
WHERE r.res_rsv_ruimte_key = rd.res_rsv_ruimte_key
AND rd.res_status_bo_key IN (4, 3, 2)
AND r.alg_ruimte_key IS NOT NULL
UNION
SELECT r.res_rsv_ruimte_contact_key
FROM res_v_aanwezigrsv_ruimte r, res_v_aanwezigrsv_artikel ra
WHERE r.res_rsv_ruimte_key = ra.res_rsv_ruimte_key
AND ra.res_status_bo_key IN (4, 3, 2)
AND r.alg_ruimte_key IS NOT NULL
UNION
SELECT a.bez_afspraak_host_key
FROM bez_afspraak a
WHERE a.bez_afspraak_datum > SYSDATE
UNION
SELECT a.bez_afspraak_contact_key
FROM bez_afspraak a
WHERE a.bez_afspraak_datum > SYSDATE;
-- View of er nog ACTUELE verplichtingen zijn voor prs_afdeling_key
CREATE OR REPLACE VIEW PZHO_V_VERPL_AFDELING
(PRS_AFDELING_KEY, FAC_MESSAGE_CODE, ITEM, ITEM_KEY)
AS
SELECT c.cnt_prs_afdeling_key, 'CNT_OPENST_CONTRACT', TO_CHAR(c.cnt_contract_looptijd_tot), c.cnt_contract_key
FROM cnt_contract c
WHERE c.cnt_contract_looptijd_tot > SYSDATE
UNION
SELECT c.prs_afdeling_key_eig, 'CNT_OPENST_CONTRACT', TO_CHAR(c.cnt_contract_looptijd_tot), c.cnt_contract_key
FROM cnt_contract c
WHERE c.cnt_contract_looptijd_tot > SYSDATE
UNION
SELECT a.prs_afdeling_parentkey, 'PRS_PARENT_AFDELING', TO_CHAR(a.prs_afdeling_key), a.prs_afdeling_key
FROM prs_afdeling a
WHERE prs_afdeling_verwijder IS NULL
UNION
SELECT p.prs_afdeling_key, 'PRS_PERSLID', TO_CHAR(p.prs_perslid_key), p.prs_perslid_key
FROM prs_perslid p
WHERE p.prs_perslid_verwijder IS NULL;
-- Importeren verhuisresultaten
CREATE OR REPLACE PROCEDURE pzho_import_verhuizing (
p_import_key IN NUMBER
)
AS
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Import line
v_field VARCHAR2 (100); -- Import field
v_fielddelimitor VARCHAR2 (1); -- Field seperator
v_errormsg VARCHAR (200);
v_errorhint VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER;
v_invalid BOOLEAN;
-- De importvelden
header_is_valid BOOLEAN;
v_sleutel VARCHAR2 (100);
v_sleutel_key NUMBER (10);
v_scenario VARCHAR2 (100);
v_scenario_key NUMBER (10);
v_directie VARCHAR2 (100);
v_afdeling VARCHAR2 (100);
v_bureau VARCHAR2 (100);
v_persoon VARCHAR2 (100);
v_plaats VARCHAR2 (100);
v_locatie VARCHAR2 (100);
v_gebouw VARCHAR2 (100);
v_verdieping VARCHAR2 (100);
v_kamer VARCHAR2 (100);
v_werkplek VARCHAR2 (100);
v_prs_perslidwerkplek_key NUMBER (10);
v_prs_werkplek_key NUMBER (10);
CURSOR c IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
v_fielddelimitor := ';';
header_is_valid := FALSE;
DELETE FROM pzho_imp_verhuizing;
FOR rec IN c
LOOP
BEGIN
v_errorhint := 'Fout opvragen te importeren rij';
v_newline := rec.fac_imp_file_line;
v_invalid := FALSE;
fac.imp_getfield (v_newline, v_fielddelimitor, v_sleutel);
fac.imp_getfield (v_newline, v_fielddelimitor, v_scenario);
fac.imp_getfield (v_newline, v_fielddelimitor, v_directie);
fac.imp_getfield (v_newline, v_fielddelimitor, v_afdeling);
fac.imp_getfield (v_newline, v_fielddelimitor, v_bureau);
fac.imp_getfield (v_newline, v_fielddelimitor, v_persoon);
fac.imp_getfield (v_newline, v_fielddelimitor, v_plaats);
fac.imp_getfield (v_newline, v_fielddelimitor, v_locatie);
fac.imp_getfield (v_newline, v_fielddelimitor, v_gebouw);
fac.imp_getfield (v_newline, v_fielddelimitor, v_verdieping);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kamer);
fac.imp_getfield (v_newline, v_fielddelimitor, v_werkplek);
IF header_is_valid = TRUE THEN
-- controle op ingelezen velden
v_errorhint := 'Controle op sleutel van de persoon: ' || v_sleutel;
SELECT count(prs_perslid_key)
INTO v_count
FROM prs_perslid
WHERE prs_perslid_verwijder IS NULL
AND prs_perslid_key = fac.safe_to_number(v_sleutel);
IF v_count <> 1 THEN
v_invalid := true;
fac.imp_writelog (p_import_key, 'E', 'Persoon kan niet gevonden worden', v_errorhint);
END IF;
v_sleutel_key := fac.safe_to_number(v_sleutel);
v_errorhint := 'Controle op scenario: ' || v_scenario;
SELECT prj_scenario_key
INTO v_scenario_key
FROM prj_scenario
WHERE prj_scenario_verwerkt IS NULL
AND prj_scenario_omschrijving = v_scenario;
v_errorhint := 'Controle op huidige plaats: ' || v_plaats;
IF v_plaats IS NOT NULL THEN
SELECT prs_perslidwerkplek_key
INTO v_prs_perslidwerkplek_key
FROM prs_v_perslidwerkplek_gegevens wpg
WHERE wpg.prs_werkplek_aanduiding = v_plaats
AND wpg.prs_perslid_key = v_sleutel;
ELSE
v_prs_perslidwerkplek_key := NULL;
END IF;
v_errorhint := 'Controle op nieuwe plaats: ' || v_locatie || '-' || v_gebouw || '-' || v_verdieping || '-' || v_kamer || '/' || v_werkplek;
IF v_werkplek IS NOT NULL THEN
SELECT prs_werkplek_key
INTO v_prs_werkplek_key
FROM prs_v_werkplek_gegevens wpg
WHERE wpg.prs_werkplek_aanduiding = v_locatie || '-' || v_gebouw || '-' || v_verdieping || '-' || v_kamer || '/' || v_werkplek;
ELSE
v_prs_werkplek_key := NULL;
END IF;
END IF;
IF header_is_valid = FALSE
AND UPPER(v_sleutel) = 'SLEUTEL'
AND UPPER(v_werkplek) = 'WERKPLEK'
THEN
header_is_valid := TRUE;
ELSE
IF header_is_valid = TRUE AND v_invalid = FALSE
THEN
INSERT INTO pzho_imp_verhuizing
(sleutel,
scenario_key,
directie,
afdeling,
bureau,
persoon,
plaats,
locatie,
gebouw,
verdieping,
kamer,
werkplek,
prs_werkplek_key,
prs_perslidwerkplek_key)
VALUES
(v_sleutel_key,
v_scenario_key,
v_directie,
v_afdeling,
v_bureau,
v_persoon,
v_plaats,
v_locatie,
v_gebouw,
v_verdieping,
v_kamer,
v_werkplek,
v_prs_werkplek_key,
v_prs_perslidwerkplek_key);
END IF;
END IF;
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_errormsg, v_errorhint);
END;
END LOOP;
IF (header_is_valid = FALSE)
THEN
fac.imp_writelog
(p_import_key,
'E',
'Invalid import file',
'Er is geen geldige Header aangetroffen in het importbestand'
);
END IF;
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_errormsg, v_errorhint);
END;
/
CREATE OR REPLACE PROCEDURE pzho_update_verhuizing (p_import_key IN NUMBER)
AS
CURSOR c
IS
SELECT i.*,
(SELECT MAX (prj_perslidwerkplek_key)
FROM prj_perslidwerkplek ppwp, prj_werkplek pwp, prj_ruimte pr
WHERE ppwp.prs_perslidwerkplek_key = i.prs_perslidwerkplek_key
AND ppwp.prj_werkplek_key = pwp.prj_werkplek_key
AND pwp.prj_ruimte_key = pr.prj_ruimte_key
AND pr.prj_scenario_key = i.scenario_key)
prj_perslidwerkplek_key,
(SELECT MAX (prj_werkplek_key)
FROM prj_werkplek pwp, prj_ruimte pr
WHERE pwp.prs_werkplek_key = i.prs_werkplek_key
AND pwp.prj_ruimte_key = pr.prj_ruimte_key
AND pr.prj_scenario_key = i.scenario_key)
prj_werkplek_key
FROM pzho_imp_verhuizing i;
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (1024);
v_errorhint VARCHAR2 (1024);
BEGIN
-- Init
FOR rec IN c
LOOP
BEGIN
-- aanpassen werkplek voor:
v_errorhint := 'Aanpassen werkplek voor: ' || rec.persoon;
-- indien de plaats niet veranderd is mogen we niets aanpassen.
IF coalesce(rec.plaats,'---/') <> rec.locatie || '-' || rec.gebouw || '-' || rec.verdieping || '-' || rec.kamer || '/' || rec.werkplek THEN
IF rec.prj_werkplek_key IS NULL THEN
-- persoon heeft geen werkplek meer
UPDATE prj_perslidwerkplek
SET prj_werkplek_key = NULL
WHERE prj_perslidwerkplek_key = rec.prj_perslidwerkplek_key;
fac.imp_writelog (p_import_key, 'I', 'Werkplek verwijdert bij persoon', v_errorhint);
ELSE
-- persoon heeft nieuwe werkplek binnen scenario
IF rec.prj_perslidwerkplek_key IS NULL THEN
-- had de persoon al een perslidwerkplek binnen het scenario?
-- NEE, dan maken we een prj_perslidwerkplek aan
INSERT INTO prj_perslidwerkplek
( prs_perslid_key,
prs_perslidwerkplek_key,
prj_werkplek_key,
prj_perslidwerkplek_bezetting)
VALUES
( rec.sleutel,
rec.prs_perslidwerkplek_key,
rec.prj_werkplek_key,
100);
fac.imp_writelog (p_import_key, 'I', 'Werkplek toegevoegd aan persoon buiten scenario', v_errorhint);
ELSE
UPDATE prj_perslidwerkplek
SET prj_werkplek_key = rec.prj_werkplek_key
WHERE prj_perslidwerkplek_key = rec.prj_perslidwerkplek_key;
fac.imp_writelog (p_import_key, 'I', 'Werkplek toegevoegd aan persoon binnen scenario', v_errorhint);
END IF;
END IF;
ELSE
fac.imp_writelog (p_import_key, 'I', 'Werkplek is niet gewijzigd', v_errorhint);
END IF;
END;
END LOOP;
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_errormsg, v_errorhint);
END;
/
-- Importeren gegevens afdeling
CREATE OR REPLACE PROCEDURE pzho_import_afdeling (
p_import_key IN NUMBER
)
AS
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Import line
v_field VARCHAR2 (100); -- Import field
v_fielddelimitor VARCHAR2 (1); -- Field seperator
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
-- De importvelden
v_afdeling_code VARCHAR2 (100);
v_afdeling_naam VARCHAR2 (100);
v_kostenplaats_code VARCHAR2 (100);
v_afdeling_niveau VARCHAR2 (100);
v_afdeling_code_0 VARCHAR2 (100);
v_afdeling_code_1 VARCHAR2 (100);
v_afdeling_code_2 VARCHAR2 (100);
v_afdeling_code_3 VARCHAR2 (100);
v_leiding_personeelsnummer VARCHAR2 (100);
v_leiding_naam VARCHAR2 (100);
v_leiding_roepnaam VARCHAR2 (100);
v_leiding_gebruiknaam VARCHAR2 (100);
header_is_valid BOOLEAN;
v_controle_res VARCHAR2 (30);
CURSOR c1 IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key;
rec1 c1%ROWTYPE;
BEGIN
v_fielddelimitor := ';';
header_is_valid := TRUE; -- No header present
DELETE FROM pzho_imp_afdeling;
OPEN C1;
IF C1%ISOPEN THEN
LOOP
BEGIN
v_errormsg := 'Fout FETCH te importeren rij';
FETCH c1 INTO rec1;
EXIT WHEN c1%NOTFOUND;
v_errormsg := 'Fout opvragen te importeren rij';
v_newline := rec1.fac_imp_file_line;
fac.imp_getfield (v_newline, v_fielddelimitor, v_afdeling_code);
fac.imp_getfield (v_newline, v_fielddelimitor, v_afdeling_naam);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kostenplaats_code);
fac.imp_getfield (v_newline, v_fielddelimitor, v_afdeling_niveau);
fac.imp_getfield (v_newline, v_fielddelimitor, v_afdeling_code_0);
fac.imp_getfield (v_newline, v_fielddelimitor, v_afdeling_code_1);
fac.imp_getfield (v_newline, v_fielddelimitor, v_afdeling_code_2);
fac.imp_getfield (v_newline, v_fielddelimitor, v_afdeling_code_3);
fac.imp_getfield (v_newline, v_fielddelimitor, v_leiding_personeelsnummer);
fac.imp_getfield (v_newline, v_fielddelimitor, v_leiding_naam);
fac.imp_getfield (v_newline, v_fielddelimitor, v_leiding_roepnaam);
fac.imp_getfield (v_newline, v_fielddelimitor, v_leiding_gebruiknaam);
IF (header_is_valid = FALSE)
THEN
header_is_valid := TRUE;
ELSE
IF header_is_valid = TRUE AND v_afdeling_code IS NOT NULL
THEN
INSERT INTO pzho_imp_afdeling
(afdeling_code,
afdeling_naam,
kostenplaats_code,
afdeling_niveau,
afdeling_code_0,
afdeling_code_1,
afdeling_code_2,
afdeling_code_3,
leiding_personeelsnummer,
leiding_naam,
leiding_roepnaam,
leiding_gebruiknaam
)
VALUES (SUBSTR (v_afdeling_code, 1, 7),
SUBSTR (v_afdeling_naam, 1, 50),
SUBSTR (v_kostenplaats_code, 1, 7),
SUBSTR (v_afdeling_niveau, 1, 10),
SUBSTR (v_afdeling_code_0, 1, 7),
SUBSTR (v_afdeling_code_1, 1, 7),
SUBSTR (v_afdeling_code_2, 1, 7),
SUBSTR (v_afdeling_code_3, 1, 7),
SUBSTR (v_leiding_personeelsnummer, 1, 10),
SUBSTR (v_leiding_naam, 1, 30),
SUBSTR (v_leiding_roepnaam, 1, 25),
SUBSTR (v_leiding_gebruiknaam, 100, 10)
);
END IF;
END IF;
END;
END LOOP;
END IF;
IF (header_is_valid = FALSE)
THEN
fac.imp_writelog
(p_import_key,
'E',
'Invalid import file',
'Er is geen geldige Header aangetroffen in het importbestand'
);
END IF;
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_errormsg, '');
END;
/
-- Importeren gegevens medewerkers en inzet
CREATE OR REPLACE PROCEDURE pzho_import_mw_inz (
p_import_key IN NUMBER
)
AS
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Import line
v_field VARCHAR2 (100); -- Import field
v_fielddelimitor VARCHAR2 (1); -- Field seperator
v_errormsg VARCHAR (200);
v_hint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
-- De importvelden
v_personeelsnummer VARCHAR2 (100);
v_diensTverbandvolgnummer VARCHAR2 (100);
v_datum_in_dienst VARCHAR2 (100);
v_datum_uit_dienst VARCHAR2 (100);
v_achternaam VARCHAR2 (100);
v_voorvoegsel VARCHAR2 (100);
v_voorletters VARCHAR2 (100);
v_voornamen VARCHAR2 (100);
v_roepnaam VARCHAR2 (100);
v_titel VARCHAR2 (100);
v_titel_na VARCHAR2 (100);
v_afdeling_code VARCHAR2 (100);
v_datum_begin_dienstv VARCHAR2 (100);
v_datum_einde_dienstv VARCHAR2 (100);
v_arbeidsuren VARCHAR2 (100);
v_werkdagen VARCHAR2 (100);
v_email VARCHAR2 (100);
v_oslogin VARCHAR2 (100);
v_dummy VARCHAR2 (1000);
v_functie_code VARCHAR2 (100);
v_functie_omschrijving VARCHAR2 (100);
v_locatiecode VARCHAR2 (100);
v_gebouwcode VARCHAR2 (100);
v_verdiepingscode VARCHAR2 (100);
v_ruimtenr VARCHAR2 (100);
v_telefoon VARCHAR2 (100);
v_telefoon_bgg VARCHAR2 (100);
v_mobiel VARCHAR2 (100);
v_actief VARCHAR2 (100);
header_is_valid BOOLEAN;
v_controle_res VARCHAR2 (30);
v_aantal_imported NUMBER;
CURSOR c1 IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
rec1 c1%ROWTYPE;
BEGIN
v_fielddelimitor := ';';
header_is_valid := FALSE; -- No header present
v_aantal_imported := 0;
DELETE FROM pzho_imp_mw_inz;
FOR rec1 IN c1
LOOP
BEGIN
v_errormsg := 'Fout opvragen te importeren rij';
v_newline := rec1.fac_imp_file_line;
v_hint := v_newline;
fac.imp_getfield (v_newline, v_fielddelimitor, v_personeelsnummer);
fac.imp_getfield (v_newline, v_fielddelimitor, v_dienstverbandvolgnummer);
fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); -- Arbeidsrelatiesoort
fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); -- Instellingsnummer
fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); -- Aantal dienstverbanden
fac.imp_getfield (v_newline, v_fielddelimitor, v_voorletters);
fac.imp_getfield (v_newline, v_fielddelimitor, v_voornamen);
fac.imp_getfield (v_newline, v_fielddelimitor, v_roepnaam);
fac.imp_getfield (v_newline, v_fielddelimitor, v_voorvoegsel);
fac.imp_getfield (v_newline, v_fielddelimitor, v_achternaam);
fac.imp_getfield (v_newline, v_fielddelimitor, v_titel);
fac.imp_getfield (v_newline, v_fielddelimitor, v_titel_na);
fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); -- Geslacht
fac.imp_getfield (v_newline, v_fielddelimitor, v_oslogin);
fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); -- AD principle name
fac.imp_getfield (v_newline, v_fielddelimitor, v_email);
fac.imp_getfield (v_newline, v_fielddelimitor, v_datum_in_dienst);
fac.imp_getfield (v_newline, v_fielddelimitor, v_datum_uit_dienst);
fac.imp_getfield (v_newline, v_fielddelimitor, v_afdeling_code);
fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); -- Organisatienaam
fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); -- Kostenplaatscode
fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); -- Personeelsnummer leidinggevende
fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); -- Personeelsnummer vervangende leidinggevende
fac.imp_getfield (v_newline, v_fielddelimitor, v_datum_begin_dienstv);
fac.imp_getfield (v_newline, v_fielddelimitor, v_datum_einde_dienstv);
fac.imp_getfield (v_newline, v_fielddelimitor, v_arbeidsuren);
fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); -- feitelijke uren
fac.imp_getfield (v_newline, v_fielddelimitor, v_werkdagen);
fac.imp_getfield (v_newline, v_fielddelimitor, v_functie_code);
fac.imp_getfield (v_newline, v_fielddelimitor, v_functie_omschrijving);
fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); -- Inhoudelijke functie
fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); -- Werkzaamheden
fac.imp_getfield (v_newline, v_fielddelimitor, v_locatiecode);
fac.imp_getfield (v_newline, v_fielddelimitor, v_gebouwcode);
fac.imp_getfield (v_newline, v_fielddelimitor, v_verdiepingscode);
fac.imp_getfield (v_newline, v_fielddelimitor, v_ruimtenr);
fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); -- Lang kamernummer
fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); -- Kamernummer
fac.imp_getfield (v_newline, v_fielddelimitor, v_telefoon);
fac.imp_getfield (v_newline, v_fielddelimitor, v_telefoon_bgg);
fac.imp_getfield (v_newline, v_fielddelimitor, v_mobiel);
fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); -- Geboortedatum
fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); -- Standplaats
fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); -- In dienst overheid
fac.imp_getfield (v_newline, v_fielddelimitor, v_actief);
-- in verband met bug FSN#15957
v_actief := replace(v_actief,'"');
IF (header_is_valid = FALSE)
THEN
IF v_personeelsnummer = 'PERS_NR'
OR v_dienstverbandvolgnummer = 'DV_VLGNR'
OR v_voorletters = 'E_VRLT'
OR v_voornamen = 'E_VOORNMN'
OR v_roepnaam = 'E_ROEPNAAM'
OR v_voorvoegsel = 'SAMEN_VRVG'
OR v_achternaam = 'SAMEN_NAAM'
OR v_titel = 'E_TITUL'
OR v_titel_na = 'E_TITUL_NA'
OR v_oslogin = 'USERID'
OR v_email = 'EMAIL'
OR v_datum_in_dienst = 'INDNST_DT'
OR v_datum_uit_dienst = 'UITDNST_DT'
OR v_afdeling_code = 'OE_KORT_NM'
OR v_datum_begin_dienstv = 'INGANG_DT'
OR v_datum_einde_dienstv = 'EIND_DT'
OR v_arbeidsuren = 'UREN_PW'
OR v_werkdagen = 'WERKDGN'
OR v_functie_code = 'FUNC_KD'
OR v_functie_omschrijving = 'FUNC_OMS'
OR v_locatiecode = 'LOCATIE_KD'
OR v_gebouwcode = 'GEBOUW_KD'
OR v_verdiepingscode = 'VERDIEP_KD'
OR v_ruimtenr = 'RUIMTENR'
OR v_telefoon = 'TELEFOONNR'
OR v_telefoon_bgg = 'BGG_TELEFOONNR'
OR v_mobiel = 'MOBIEL_TELEFOONNR'
OR v_actief = 'VLAG_ACTIEF'
THEN
header_is_valid := TRUE;
END IF;
ELSE
IF header_is_valid = TRUE AND v_personeelsnummer IS NOT NULL
THEN
INSERT INTO pzho_imp_mw_inz
(personeelsnummer,
dienstverbandvolgnummer,
voorletters,
voornamen,
roepnaam,
voorvoegsel,
achternaam,
titel,
titel_na,
oslogin,
email,
datum_in_dienst,
datum_uit_dienst,
afdeling_code,
begin_dienstverband,
einde_dienstverband,
arbeidsuren,
werkdagen,
functie_code,
functie_omschrijving,
locatie_code,
gebouw_code,
verdieping_code,
ruimtenr,
telefoonnr,
telefoonnr_bgg,
mobielnr,
actief
)
VALUES (SUBSTR (v_personeelsnummer, 1, 6),
SUBSTR (v_dienstverbandvolgnummer, 1, 3),
SUBSTR (v_voorletters, 1, 6),
SUBSTR (v_voornamen, 1, 30),
SUBSTR (v_roepnaam, 1, 30),
SUBSTR (v_voorvoegsel, 1, 10),
SUBSTR (v_achternaam, 1, 30),
SUBSTR (v_titel, 1, 15),
SUBSTR (v_titel_na, 1, 15),
SUBSTR (v_oslogin, 1, 30),
SUBSTR (v_email, 1, 50),
TO_DATE(v_datum_in_dienst, 'YYYY-MM-DD HH24:MI:SS'),
TO_DATE(v_datum_uit_dienst, 'YYYY-MM-DD HH24:MI:SS'),
SUBSTR (v_afdeling_code, 1, 7),
TO_DATE(v_datum_begin_dienstv, 'YYYY-MM-DD HH24:MI:SS'),
TO_DATE(v_datum_einde_dienstv, 'YYYY-MM-DD HH24:MI:SS'),
SUBSTR (v_arbeidsuren, 1, 7),
SUBSTR (v_werkdagen, 1, 7),
SUBSTR (v_functie_code, 1, 7),
SUBSTR (v_functie_omschrijving, 1, 50),
SUBSTR (v_locatiecode, 1, 5),
SUBSTR (v_gebouwcode, 1, 10),
SUBSTR (v_verdiepingscode, 1, 10),
SUBSTR (v_ruimtenr, 1, 10),
SUBSTR (v_telefoon, 1, 15),
SUBSTR (v_telefoon_bgg, 1, 15),
SUBSTR (v_mobiel, 1, 15),
SUBSTR (v_actief, 1, 1)
);
v_aantal_imported := v_aantal_imported + 1;
END IF;
END IF;
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_errormsg, v_hint);
END;
END LOOP;
IF (header_is_valid = FALSE)
THEN
fac.imp_writelog
(p_import_key,
'E',
'Invalid import file',
'Er is geen geldige Header aangetroffen in het importbestand'
);
END IF;
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_errormsg, v_hint);
END;
/
-- Update afdelingen
CREATE OR REPLACE PROCEDURE pzho_update_afdeling (p_import_key IN NUMBER)
AS
/*
1. Technische documentatie: PZHO#274.doc (05-09-2006)
*/
-- Constanten
c_maxvariation NUMBER := 180;
c_commitbuffer NUMBER := 1000;
-- om de zoveel committen
v_buffercount NUMBER := 0;
CURSOR c_afd_del
IS
SELECT a.prs_afdeling_key,
a.prs_afdeling_naam,
afd.afdeling_code,
ab.niveau,
prs_afdeling_omschrijving
FROM prs_afdeling a,
pzho_imp_afdeling afd,
prs_v_afdeling_boom ab
WHERE a.prs_afdeling_naam = afd.afdeling_code(+)
AND a.prs_afdeling_naam IS NOT NULL
AND afd.afdeling_code IS NULL
AND a.prs_afdeling_verwijder IS NULL
AND a.prs_afdeling_key = ab.prs_afdeling_key(+)
--AND a.prs_afdeling_omschrijving NOT LIKE 'INACTIEF:%'
--AND 1=2
ORDER BY 4 DESC, 2, 1;
CURSOR c_afd_upd
IS
-- Parent afdelingen eerst. (order by prs_afdeling_niveau)
SELECT a.prs_afdeling_key prs_afdeling_key,
afd.afdeling_code prs_afdeling_naam,
afd.afdeling_naam prs_afdeling_omschrijving,
afd.kostenplaats_code prs_kostenplaats_code,
afd.afdeling_niveau prs_afdeling_niveau,
afd.afdeling_code_0 prs_afdeling_naam0,
afd.afdeling_code_1 prs_afdeling_naam1,
afd.afdeling_code_2 prs_afdeling_naam2,
afd.afdeling_code_3 prs_afdeling_naam3,
afd.leiding_personeelsnummer prs_perslid_nr,
afd.leiding_naam prs_perslid_naam,
afd.leiding_roepnaam prs_perslid_roepnaam,
afd.leiding_gebruiknaam prs_perslid_oslogin
FROM pzho_imp_afdeling afd,
prs_afdeling a
WHERE afd.afdeling_code = a.prs_afdeling_naam(+)
AND a.prs_afdeling_verwijder(+) IS NULL
--AND afd.afdeling_niveau NOT LIKE '-1'
AND afd.afdeling_niveau IN ('0','1','2','3','4')
ORDER BY prs_afdeling_niveau, afd.afdeling_code;
-- Ik kan er van uit gaan dat het bedrijf niet veranderd en dat er geen bijkomt!
v_kenmerk_persnr_leiding_key NUMBER(10);
v_kenmerk_naam_leiding_key NUMBER(10);
v_kenmerk_roepnaam_leiding_key NUMBER(10);
v_kenmerk_email_leiding_key NUMBER(10);
v_email_leiding VARCHAR(49);
v_afdeling_key NUMBER (10);
v_afdeling_parentkey NUMBER (10);
v_afdeling_parentnaam VARCHAR2 (30);
v_kostenplaats_key NUMBER (10);
v_kostenplaats_code VARCHAR2 (30);
v_afdeling_bedrijfkey NUMBER (10);
v_perslid_nr VARCHAR2 (16);
v_perslid_key NUMBER (10);
v_find NUMBER (10);
rec_afd_del c_afd_del%ROWTYPE;
rec_afd_upd c_afd_upd%ROWTYPE;
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (1024);
v_errorhint VARCHAR2 (1024);
v_action VARCHAR (10);
v_count NUMBER (10);
v_update BOOLEAN;
v_aktie VARCHAR (10);
v_afdeling_count_imp NUMBER;
v_afdeling_count_fclt NUMBER;
v_afdeling_newcount_fclt NUMBER;
currentversion fac_module.fac_module_version%TYPE;
l_validatie NUMBER;
BEGIN
-- Init
v_kenmerk_persnr_leiding_key :=1060;
v_kenmerk_naam_leiding_key :=1061;
v_kenmerk_roepnaam_leiding_key :=1062;
v_kenmerk_email_leiding_key :=1140;
v_update := TRUE;
SELECT MAX (fac_module_version)
INTO currentversion
FROM fac_module;
fac.imp_writelog (p_import_key, 'I', 'Facilitor Afdelingen import version ' || currentversion, '$Revision$');
-- #Import
SELECT DECODE (COUNT (*), 0, 1, COUNT (*)) -- DECODE ivm vermijden deling door 0
INTO v_afdeling_count_imp
FROM pzho_imp_afdeling;
-- Informatieve logging, zien we gelijk hoe laat het was
fac.imp_writelog (p_import_key, 'S', 'Aantal ingelezen afdelingen: ' || TO_CHAR (v_afdeling_count_imp), '');
-- #Actieve afdelingen
SELECT DECODE (COUNT (*), 0, 1, COUNT (*)) -- DECODE ivm vermijden deling door 0
INTO v_afdeling_count_fclt
FROM prs_afdeling
WHERE prs_afdeling_verwijder IS NULL
AND prs_afdeling_omschrijving NOT LIKE 'INACTIEF:%';
-- v_afdleing_count_fclt = 1 bij initiele situatie (of er is maar 1 afdeling aanwezig = > ook doorgaan!)
-- IF v_afdeling_count_imp = 1
-- OR 100 * ABS (v_afdeling_count_imp - v_afdeling_count_fclt) / v_afdeling_count_fclt > c_maxvariation
IF ((v_afdeling_count_fclt <> 1)
AND ((v_afdeling_count_imp = 1)
OR (100 * ABS (v_afdeling_count_imp - v_afdeling_count_fclt) / v_afdeling_count_fclt > c_maxvariation)))
THEN
fac.imp_writelog (p_import_key,
'E',
'Het verschil tussen de actieve afdelingen ('
|| TO_CHAR (v_afdeling_count_fclt)
|| ') en te importeren aantallen ('
|| TO_CHAR (v_afdeling_count_imp)
|| ') is te groot',
'Zie Specificaties: De afwijking is teveel en bedraagt '
|| TO_CHAR (100 * ABS (v_afdeling_count_fclt - v_afdeling_count_imp) / v_afdeling_count_fclt,
'9999999D9'
)
|| '%.'
);
RETURN;
END IF;
v_errormsg := 'Try to open cursor';
v_action := 'DELETE';
FOR rec_afd_del IN c_afd_del
LOOP
BEGIN
v_afdeling_key := rec_afd_del.prs_afdeling_key;
v_errormsg := 'Verwijderen van de afdeling is NIET gelukt';
v_errorhint := 'Heeft de afdeling met prs_afdeling_key ' || TO_CHAR (v_afdeling_key) || ' historie?';
-- Controleer of er ACTUELE verplichtingen zijn
-- View prs_v_verpl_afdeling aangemaakt
SELECT COUNT (*)
INTO v_count
FROM pzho_v_verpl_afdeling pv --prs_v_verplichting pv,
WHERE pv.prs_afdeling_key = v_afdeling_key;
IF v_count > 0 THEN
IF rec_afd_del.prs_afdeling_omschrijving NOT LIKE 'INACTIEF:%' THEN
UPDATE prs_afdeling
SET prs_afdeling_omschrijving = SUBSTR ('INACTIEF: ' || prs_afdeling_omschrijving, 1, 60)
WHERE prs_afdeling_key = v_afdeling_key
AND prs_afdeling_omschrijving NOT LIKE 'INACTIEF:%';
COMMIT;
fac.imp_writelog (p_import_key,
'C',
'Afdeling als INACTIEF gemarkeerd of was al INACTIEF, afdelingscode: ' || rec_afd_del.prs_afdeling_naam,
''
);
END IF;
ELSE
BEGIN
UPDATE prs_afdeling
SET prs_afdeling_verwijder = SYSDATE
WHERE prs_afdeling_key = v_afdeling_key;
COMMIT;
fac.imp_writelog (p_import_key,
'C',
'Afdeling geinactiveerd (verwijderdatum gezet), afdelingscode: ' || rec_afd_del.prs_afdeling_naam,
''
);
EXCEPTION
WHEN OTHERS
THEN
-- Kennelijk heeft de afdeling toch ernstige verplichtingen
v_errorhint := 'Afdeling heeft nog (max. '
|| TO_CHAR (v_count)
|| ') verplichtingen; afdelingscode: '
|| rec_afd_del.prs_afdeling_naam;
fac.imp_writelog (p_import_key, 'I', 'Inactiveren afdeling is niet gelukt', v_errorhint);
END;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
END;
END LOOP;
-- fac.imp_writelog (p_import_key,
-- 'C',
-- 'Start Update', SYSDATE
-- );
COMMIT;
-- Update
v_errormsg := 'Try to open cursor';
v_action := 'UPDATE';
FOR rec_afd_upd IN c_afd_upd
LOOP
BEGIN
v_errorhint := 'De afdeling kan niet bepaald worden ' || rec_afd_upd.prs_afdeling_naam;
-- Init
v_update := TRUE;
v_afdeling_key := 0;
IF rec_afd_upd.prs_afdeling_key IS NULL
THEN
v_aktie := 'INSERT';
v_errormsg := 'Afdelingsgegevens kunnen niet toegevoegd worden';
ELSE
v_aktie := 'UPDATE';
v_errormsg := 'Afdelingsgegevens kunnen niet gewijzigd worden';
END IF;
-- *** Controle verplichte gegevens + ophalen extra informatie ***
-- Controle: PRS_AFDELING_CODE
IF rec_afd_upd.prs_afdeling_naam IS NULL
THEN
v_errorhint := 'Afdeling heeft geen afdelingscode; afdelingsomschrijving: ' || rec_afd_upd.prs_afdeling_omschrijving;
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
v_update := FALSE;
END IF;
-- Controle: PRS_AFDELING_NAAM
IF v_update AND rec_afd_upd.prs_afdeling_omschrijving IS NULL
THEN
v_errorhint := 'Afdeling heeft geen afdelingsomschrijving; afdelingscode: ' || rec_afd_upd.prs_afdeling_naam;
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
v_update := FALSE;
END IF;
-- Controle: PRS_AFDELING_NIVEAU
IF v_update AND rec_afd_upd.prs_afdeling_niveau IS NULL
THEN
v_errorhint := 'Afdeling heeft geen afdelingsniveau; afdelingscode: ' || rec_afd_upd.prs_afdeling_naam;
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
v_update := FALSE;
END IF;
-- Controle: PRS_AFDELING_NAAM? (is parent naam aanwezig)
-- als niveau is 0 dan geen parent maar prs_bedrijf_key = 1
-- als niveau is -1 dan is het het bedrijf
v_afdeling_parentkey := NULL;
IF v_update AND
((rec_afd_upd.prs_afdeling_niveau = 1 AND rec_afd_upd.prs_afdeling_naam0 IS NULL) OR
(rec_afd_upd.prs_afdeling_niveau = 2 AND rec_afd_upd.prs_afdeling_naam1 IS NULL) OR
(rec_afd_upd.prs_afdeling_niveau = 3 AND rec_afd_upd.prs_afdeling_naam2 IS NULL) OR
(rec_afd_upd.prs_afdeling_niveau = 4 AND rec_afd_upd.prs_afdeling_naam3 IS NULL))
THEN
v_errorhint := 'Afdeling heeft geen parent; afdelingscode: ' || rec_afd_upd.prs_afdeling_naam;
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
v_update := FALSE;
ELSIF v_update AND
((rec_afd_upd.prs_afdeling_niveau = 1) OR (rec_afd_upd.prs_afdeling_niveau = 2) OR
(rec_afd_upd.prs_afdeling_niveau = 3) OR (rec_afd_upd.prs_afdeling_niveau = 4))
THEN
BEGIN
IF rec_afd_upd.prs_afdeling_niveau = '1'
THEN
v_afdeling_parentnaam := rec_afd_upd.prs_afdeling_naam0;
v_afdeling_bedrijfkey := NULL;
END IF;
IF rec_afd_upd.prs_afdeling_niveau = '2'
THEN
v_afdeling_parentnaam := rec_afd_upd.prs_afdeling_naam1;
v_afdeling_bedrijfkey := NULL;
END IF;
IF rec_afd_upd.prs_afdeling_niveau = '3'
THEN
v_afdeling_parentnaam := rec_afd_upd.prs_afdeling_naam2;
v_afdeling_bedrijfkey := NULL;
END IF;
IF rec_afd_upd.prs_afdeling_niveau = '4'
THEN
v_afdeling_parentnaam := rec_afd_upd.prs_afdeling_naam3;
v_afdeling_bedrijfkey := NULL;
END IF;
-- Bepaal de afdelingskey van de parent
SELECT prs_afdeling_key
INTO v_afdeling_parentkey
FROM prs_afdeling
WHERE prs_afdeling_naam = v_afdeling_parentnaam
AND prs_afdeling_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_update := FALSE;
v_errorhint := 'Parentafdeling '
|| v_afdeling_parentnaam
|| ' bestaat niet; afdelingscode: '
|| rec_afd_upd.prs_afdeling_naam;
-- Kennelijk is de afdeling niet gevonden
IF (v_aktie = 'INSERT')
THEN
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
ELSE
fac.imp_writelog
(p_import_key,
'E',
'Parentafdeling van de afdeling kan niet gewijzigd worden, evt. andere wijzigingen worden ook genegeerd.',
v_errorhint
);
END IF;
WHEN OTHERS
THEN
v_update := FALSE;
v_errorhint := 'Kan Parentafdeling ' || v_afdeling_parentnaam || ' niet eenduidig bepalen?!';
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
END;
ELSIF v_update AND rec_afd_upd.prs_afdeling_niveau = '0'
THEN
v_afdeling_parentkey := NULL;
v_afdeling_bedrijfkey := 1;
ELSIF v_update AND rec_afd_upd.prs_afdeling_niveau = '-1'
THEN
v_afdeling_parentkey := NULL;
v_afdeling_bedrijfkey := NULL;
END IF;
-- Controle: PRS_KOSTENPLAATS_CODE
IF v_update AND rec_afd_upd.prs_kostenplaats_code IS NOT NULL
THEN
v_kostenplaats_code := RTRIM (rec_afd_upd.prs_kostenplaats_code);
BEGIN
-- Bepaal de key van de kostenplaats
SELECT prs_kostenplaats_key
INTO v_kostenplaats_key
FROM prs_kostenplaats
WHERE UPPER(prs_kostenplaats_nr) = UPPER(v_kostenplaats_code)
AND prs_kostenplaats_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_errormsg := 'prs_kostenplaats ' || v_kostenplaats_code || ' bestaat niet';
-- Functie bestaat kennelijk niet, maak 'm maar aan
INSERT INTO prs_kostenplaats
(prs_kostenplaats_nr,
prs_kostenplaats_omschrijving,
prs_kostenplaats_module
)
VALUES (v_kostenplaats_code,
v_kostenplaats_code,
'PRS'
);
COMMIT;
-- Wat is de key van deze nieuwe geworden?
SELECT prs_kostenplaats_key
INTO v_kostenplaats_key
FROM prs_kostenplaats
WHERE prs_kostenplaats_nr = v_kostenplaats_code
AND prs_kostenplaats_verwijder IS NULL;
WHEN OTHERS
THEN
v_errorhint := 'Kostenplaats '
|| v_kostenplaats_code
|| ' kan niet bepaald worden; afdelingscode: '
|| rec_afd_upd.prs_afdeling_naam;
v_update := FALSE;
END;
END IF;
-- *** Daadwerkelijk insert/update prs_afdeling ***
IF v_update
THEN
BEGIN
IF v_aktie = 'INSERT'
THEN
v_errormsg := 'Afdeling kan niet worden toegevoegd';
-- De volgende flexkenmerken toevoegen
--afd.leiding_personeelsnummer prs_perslid_nr,
--afd.leiding_naam prs_perslid_naam,
--afd.leiding_roepnaam prs_perslid_roepnaam,
--afd.leiding_gebruiknaam prs_perslid_oslogin
INSERT INTO prs_afdeling
(prs_afdeling_naam,
prs_afdeling_omschrijving,
prs_kostenplaats_key,
prs_afdeling_parentkey,
prs_bedrijf_key
)
VALUES (rec_afd_upd.prs_afdeling_naam,
rec_afd_upd.prs_afdeling_omschrijving,
v_kostenplaats_key,
v_afdeling_parentkey,
v_afdeling_bedrijfkey
);
COMMIT;
fac.imp_writelog (p_import_key,
'C',
'Nieuwe afdeling toegevoegd',
'afdelingsomschrijving/afdelingscode: '
|| rec_afd_upd.prs_afdeling_omschrijving
|| '/'
|| rec_afd_upd.prs_afdeling_naam
);
-- Wat is de key van deze nieuwe geworden?
SELECT prs_afdeling_key
INTO v_afdeling_key
FROM prs_afdeling
WHERE prs_afdeling_naam = rec_afd_upd.prs_afdeling_naam
AND prs_afdeling_omschrijving = rec_afd_upd.prs_afdeling_omschrijving
AND prs_afdeling_verwijder IS NULL;
ELSE -- v_aktie = 'UPDATE'
v_errormsg := 'Afdeling kan niet worden gewijzigd';
UPDATE prs_afdeling
SET prs_afdeling_naam = rec_afd_upd.prs_afdeling_naam,
prs_afdeling_omschrijving = rec_afd_upd.prs_afdeling_omschrijving,
prs_kostenplaats_key = v_kostenplaats_key,
prs_afdeling_parentkey = v_afdeling_parentkey,
prs_bedrijf_key = v_afdeling_bedrijfkey
WHERE prs_afdeling_key = rec_afd_upd.prs_afdeling_key
AND prs_afdeling_naam = rec_afd_upd.prs_afdeling_naam
AND ( prs_afdeling_naam <> rec_afd_upd.prs_afdeling_naam
OR prs_afdeling_omschrijving <> rec_afd_upd.prs_afdeling_omschrijving
OR nvl(prs_kostenplaats_key, -1) <> nvl(v_kostenplaats_key,-1)
OR nvl(prs_afdeling_parentkey, -1) <> nvl(v_afdeling_parentkey, -1)
OR nvl(prs_bedrijf_key, -1) <> nvl(v_afdeling_bedrijfkey, -1)
);
COMMIT;
fac.imp_writelog (p_import_key,
'C',
'Afdeling bijgewerkt (indien nodig)',
'afdelingsomschrijving/afdelingscode: '
|| rec_afd_upd.prs_afdeling_omschrijving
|| '/'
|| rec_afd_upd.prs_afdeling_naam
);
-- Wat is de key van deze afdeling?
v_afdeling_key := rec_afd_upd.prs_afdeling_key;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
v_errorhint := ' {' || v_errormsg || '}; afdelingscode: ' || rec_afd_upd.prs_afdeling_naam;
v_update := FALSE;
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
END;
END IF;
-- *** insert/update van de vier kenmerken van de afdeling ***
BEGIN
SELECT max(substr(prs_perslid_email, 1, 49))
INTO v_email_leiding
FROM prs_perslid p
WHERE SUBSTR (p.prs_perslid_nr, 1, INSTR (p.prs_perslid_nr, '/') - 1) = rec_afd_upd.prs_perslid_nr;
EXCEPTION WHEN NO_DATA_FOUND THEN
v_email_leiding := 'Geen';
END;
-- De volgende flexkenmerken toevoegen
-- afd.leiding_personeelsnummer prs_perslid_nr,
-- afd.leiding_naam prs_perslid_naam,
-- afd.leiding_roepnaam prs_perslid_roepnaam,
-- afd.leiding_email prs_perslid_email,
pzho_import.set_prs_kenmerk(p_import_key, 'A', v_kenmerk_persnr_leiding_key, v_afdeling_key, rec_afd_upd.prs_perslid_nr);
pzho_import.set_prs_kenmerk(p_import_key, 'A', v_kenmerk_naam_leiding_key, v_afdeling_key, rec_afd_upd.prs_perslid_naam);
pzho_import.set_prs_kenmerk(p_import_key, 'A', v_kenmerk_roepnaam_leiding_key, v_afdeling_key, rec_afd_upd.prs_perslid_roepnaam);
pzho_import.set_prs_kenmerk(p_import_key, 'A', v_kenmerk_email_leiding_key, v_afdeling_key, v_email_leiding);
v_buffercount := v_buffercount + 1;
IF v_buffercount >= c_commitbuffer
THEN
COMMIT;
v_buffercount := 0;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errorhint := v_errorhint || ' {' || v_errormsg || '}';
v_errormsg := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
END;
END LOOP;
SELECT COUNT (*)
INTO v_afdeling_newcount_fclt
FROM prs_afdeling
WHERE prs_afdeling_verwijder IS NULL
AND prs_afdeling_omschrijving NOT LIKE 'INACTIEF:%';
fac.imp_writelog (p_import_key,
'S',
'Aantal actieve afdelingen vooraf: '
|| TO_CHAR (v_afdeling_count_fclt)
|| ' nu: '
|| TO_CHAR (v_afdeling_newcount_fclt),
''
);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errorhint := v_errorhint || ' {' || v_errormsg || '}';
v_errormsg := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
END;
/
-- Update medewerkers
CREATE OR REPLACE PROCEDURE pzho_update_mw_inz (p_import_key IN NUMBER)
AS
/*
1. Technische documentatie: PZHO#xxx.doc (05-09-2006)
*/
-- Constanten
c_maxvariation NUMBER := 50;
c_commitbuffer NUMBER := 1000;
-- om de zoveel committen
v_buffercount NUMBER := 0;
CURSOR c_fun_del
IS
SELECT f.prs_srtperslid_key,
f.prs_srtperslid_omschrijving,
fun.functie_code,
fun.functie_omschrijving
FROM prs_srtperslid f,
(SELECT distinct functie_code, functie_omschrijving from pzho_imp_mw_inz) fun
WHERE UPPER (f.prs_srtperslid_omschrijving) = UPPER (SUBSTR(fun.functie_code(+) || ' - ' || fun.functie_omschrijving(+), 1, 30))
AND f.prs_srtperslid_omschrijving IS NOT NULL
AND fun.functie_code IS NULL
AND fun.functie_omschrijving IS NULL
AND f.prs_srtperslid_verwijder IS NULL
AND f.prs_srtperslid_key IN (
SELECT f1.prs_srtperslid_key
FROM prs_srtperslid f1,
(SELECT distinct functie_code, functie_omschrijving from pzho_imp_mw_inz) fun1
WHERE UPPER (f1.prs_srtperslid_omschrijving) = UPPER (fun1.functie_omschrijving(+))
AND f1.prs_srtperslid_omschrijving IS NOT NULL
AND fun1.functie_code IS NULL
AND fun1.functie_omschrijving IS NULL
AND f1.prs_srtperslid_verwijder IS NULL)
ORDER BY 2, 1;
CURSOR c_fun_upd
IS
SELECT f.prs_srtperslid_key functiekey,
fun.functie_code functie_code,
fun.functie_omschrijving functie_omschrijving
FROM (SELECT DISTINCT functie_code, functie_omschrijving
FROM pzho_imp_mw_inz) fun, prs_srtperslid f
WHERE (SUBSTR (prs_srtperslid_omschrijving,
1,
INSTR (prs_srtperslid_omschrijving, ' - ') - 1
) = fun.functie_code
OR SUBSTR (prs_srtperslid_omschrijving,
11,
INSTR (prs_srtperslid_omschrijving, ' - ') - 11
) = fun.functie_code)
AND f.prs_srtperslid_verwijder IS NULL
UNION ALL
SELECT NULL, fun.functie_code, functie_omschrijving
FROM (SELECT DISTINCT functie_code, functie_omschrijving
FROM pzho_imp_mw_inz) fun
WHERE NOT EXISTS
(SELECT prs_srtperslid_key
FROM prs_srtperslid f
WHERE f.prs_srtperslid_omschrijving LIKE
'%' || fun.functie_code || ' - %'
AND f.prs_srtperslid_verwijder IS NULL)
ORDER BY functie_code;
CURSOR c_prs_del
IS
-- Alle personen die niet in de medewerkerslijst voorkomen
SELECT p.prs_perslid_key,
p.prs_perslid_nr,
p.prs_perslid_naam
FROM prs_perslid p,
(select personeelsnummer || '/' || dienstverbandvolgnummer nr, personeelsnummer from pzho_imp_mw_inz
where nvl(einde_dienstverband, sysdate+10) >= trunc(sysdate)) pv
WHERE p.prs_perslid_nr = pv.nr(+)
AND nvl (p.prs_perslid_oslogin, 'QueQueLeQue') NOT LIKE '\_%' ESCAPE '\' -- 'Syntax highlighter correctie :-)
AND pv.personeelsnummer IS NULL
AND p.prs_perslid_verwijder IS NULL
AND p.prs_perslid_nr IS NOT NULL
ORDER BY 2, 1;
CURSOR c_prs_upd
IS
SELECT *
FROM pzho_imp_mw_inz
WHERE nvl (einde_dienstverband, sysdate+10) >= trunc(sysdate)
ORDER BY personeelsnummer, dienstverbandvolgnummer, actief, afdeling_code;
CURSOR c_alg_wp (ruimte_key NUMBER)
IS
SELECT wp.prs_werkplek_key
FROM prs_werkplek wp,
prs_v_werkplek_bezetting pwp
WHERE pwp.prs_werkplek_key = wp.prs_werkplek_key
AND prs_alg_ruimte_key = ruimte_key
AND NVL (wp.prs_werkplek_virtueel, 0) <> 1
ORDER BY prs_werkplek_bezetting;
v_perslid_key NUMBER (10);
v_srtperslid_key NUMBER (10);
v_afdeling_key NUMBER (10);
v_old_afdeling_key NUMBER (10);
v_srtperslid_omschr VARCHAR (30);
v_achternaam VARCHAR (80);
v_oslogin VARCHAR (30);
v_kenmerk_voornamen NUMBER (10);
v_kenmerk_titel_na NUMBER (10);
v_kenmerk_arbeidsuren NUMBER (10);
v_kenmerk_begininzet NUMBER (10);
v_kenmerk_eindinzet NUMBER (10);
v_kenmerk_aanwezigheid NUMBER (10);
v_kenmerk_nummer_bgg NUMBER (10);
v_kenmerk_oude_afdeling NUMBER (10);
v_kenmerk_oude_functie NUMBER (10);
v_kenmerk_oude_arbeidsuren NUMBER (10);
v_oude_functie VARCHAR2 (60);
v_oude_arbeidsuren VARCHAR2 (7);
v_functie_key NUMBER (10);
v_ruimte_key NUMBER (10);
v_werkplek_key NUMBER (10);
v_persoon_bestaat NUMBER (10);
v_dienstv_bestaat NUMBER (10);
v_find NUMBER (10);
v_vorig_personeelsnummer VARCHAR2 (10);
v_vorig_mut_persnrdienst VARCHAR2 (10);
v_existing_perslid_key_count NUMBER;
v_existing_perslid_key NUMBER (10);
v_suffix_perslidnaam BOOLEAN;
rec_prs_del c_prs_del%ROWTYPE;
rec_prs_upd c_prs_upd%ROWTYPE;
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (1024);
v_errorhint VARCHAR2 (1024);
v_action VARCHAR (10);
v_count NUMBER (10);
v_update BOOLEAN;
v_aktie VARCHAR (10);
v_perslid_count_imp NUMBER;
v_perslid_count_fclt NUMBER;
v_perslid_newcount_fclt NUMBER;
v_aanduiding VARCHAR2 (100);
currentversion fac_module.fac_module_version%TYPE;
v_debug NUMBER;
v_debug_str VARCHAR2 (100);
v_locatie VARCHAR2 (100);
BEGIN
v_kenmerk_voornamen :=1063;
v_kenmerk_titel_na :=1064;
v_kenmerk_begininzet :=1000;
v_kenmerk_arbeidsuren :=1026;
--v_kenmerk_eindinzet :=1066;
--v_kenmerk_aanwezigheid :=1080;
v_kenmerk_nummer_bgg :=1040;
v_kenmerk_oude_afdeling :=1200;
v_kenmerk_oude_functie :=1201;
v_kenmerk_oude_arbeidsuren :=1202;
v_update := TRUE;
v_debug := 0;
--Init
SELECT MAX (fac_module_version)
INTO currentversion
FROM fac_module;
fac.imp_writelog (p_import_key, 'I', 'Facilitor Medewerkers import version ' || currentversion, '$Revision$');
-- #Import
SELECT DECODE (COUNT (*), 0, 1, COUNT (*)) -- DECODE ivm vermijden deling door 0
INTO v_perslid_count_imp
FROM pzho_imp_mw_inz;
-- Informatieve logging, zien we gelijk hoe laat het was
fac.imp_writelog (p_import_key, 'S', 'Aantal aangeboden personen: ' || TO_CHAR (v_perslid_count_imp), '');
-- #Actieve personen m<>t personeelsnummer
SELECT DECODE (COUNT (*), 0, 1, COUNT (*)) -- DECODE ivm vermijden deling door 0
INTO v_perslid_count_fclt
FROM prs_perslid
WHERE prs_perslid_verwijder IS NULL
AND prs_perslid_naam NOT LIKE 'INACTIEF:%';
IF ((v_perslid_count_fclt <> 1)
AND ((v_perslid_count_imp = 1)
OR (100 * ABS (v_perslid_count_imp - v_perslid_count_fclt) / v_perslid_count_fclt > c_maxvariation)))
THEN
fac.imp_writelog (p_import_key,
'E',
'Het verschil tussen de actieve personen ('
|| TO_CHAR (v_perslid_count_fclt)
|| ') en te importeren aantallen ('
|| TO_CHAR (v_perslid_count_imp)
|| ') is te groot',
'Zie Specificaties: De afwijking is teveel en bedraagt '
|| TO_CHAR (100 * ABS (v_perslid_count_fclt - v_perslid_count_imp) / v_perslid_count_fclt,
'9999999D9'
)
|| '%.'
);
RETURN;
END IF;
-- **********************************
-- *
-- * Verwijder medewerker / inzet
-- *
-- **********************************
v_errormsg := 'Try to open cursor';
v_action := 'DELETE';
FOR rec_prs_del IN c_prs_del
LOOP
BEGIN
v_perslid_key := rec_prs_del.prs_perslid_key;
v_errormsg := 'Verwijderen van de persoon is NIET gelukt';
v_errorhint := 'Heeft de persoon met prs_perslid_key ' || TO_CHAR (v_perslid_key) || ' historie?';
-- Controleer of er ACTUELE verplichtingen zijn
SELECT COUNT (*)
INTO v_count
FROM pzho_v_verplichting pv
WHERE pv.prs_perslid_key = v_perslid_key;
IF v_count > 0
THEN
IF rec_prs_del.prs_perslid_naam NOT LIKE 'INACTIEF:%' THEN
UPDATE prs_perslid
SET prs_perslid_naam = SUBSTR ('INACTIEF: ' || prs_perslid_naam, 1, 30),
prs_perslid_oslogin = null
WHERE prs_perslid_key = v_perslid_key
AND prs_perslid_naam NOT LIKE 'INACTIEF:%';
COMMIT;
fac.imp_writelog (p_import_key,
'C',
'Persoon als INACTIEF gemarkeerd, personeelsnummer: ' || rec_prs_del.prs_perslid_nr,
''
);
END IF;
ELSE
BEGIN
UPDATE prs_perslid
SET prs_perslid_verwijder = SYSDATE
WHERE prs_perslid_key = v_perslid_key;
DELETE prs_kenmerklink
WHERE prs_link_key = v_perslid_key;
COMMIT;
fac.imp_writelog (p_import_key,
'C',
'Persoon verwijderdatum gezet, personeelsnummer: ' || rec_prs_del.prs_perslid_nr,
''
);
EXCEPTION
WHEN OTHERS
THEN
-- Kennelijk heeft de persoon toch ernstige verplichtingen
v_errorhint := 'Persoon heeft nog (max. '
|| TO_CHAR (v_count)
|| ') verplichtingen; personeelsnummer: '
|| rec_prs_del.prs_perslid_nr;
fac.imp_writelog (p_import_key, 'I', 'Inactiveren persoon is niet gelukt', v_errorhint);
END;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
END;
END LOOP;
-- fac.imp_writelog (p_import_key,
-- 'C',
-- 'Start Update', SYSDATE
-- );
COMMIT;
-- **********************************
-- *
-- * Verwijder functie
-- *
-- **********************************
v_errormsg := 'Try to open cursor';
v_action := 'DELETE';
FOR rec_fun_del IN c_fun_del
LOOP
BEGIN
v_functie_key := rec_fun_del.prs_srtperslid_key;
v_errormsg := 'Verwijderen van de functie is NIET gelukt';
v_errorhint := 'Heeft de functie met prs_functie_key ' || TO_CHAR (v_functie_key) || ' historie?';
SELECT COUNT (*)
INTO v_count
FROM prs_perslid p
WHERE p.prs_srtperslid_key = v_functie_key;
IF v_count = 0
THEN
-- Functie (personen met functie) heeft geen enkele (actuele of historische) verplichting
v_errorhint := 'Verwijderen van functie met key ' || TO_CHAR (v_functie_key);
UPDATE prs_srtperslid
SET prs_srtperslid_verwijder = SYSDATE
WHERE prs_srtperslid_key = v_functie_key;
COMMIT;
fac.imp_writelog (p_import_key,
'C',
'Functie verwijderdatum gezet, functie omschrijving: ' || rec_fun_del.prs_srtperslid_omschrijving,
v_errorhint
);
ELSE
-- Controleer of er ACTUELE verplichtingen zijn
SELECT COUNT (*)
INTO v_count
FROM prs_perslid p
WHERE p.prs_srtperslid_key = v_functie_key
AND p.prs_perslid_verwijder IS NULL;
IF v_count > 0
THEN
UPDATE prs_srtperslid
SET prs_srtperslid_omschrijving = SUBSTR ('INACTIEF: ' || prs_srtperslid_omschrijving, 1, 30)
WHERE prs_srtperslid_key = v_functie_key
AND prs_srtperslid_omschrijving NOT LIKE 'INACTIEF:%';
COMMIT;
fac.imp_writelog (p_import_key,
'C',
'Functie als INACTIEF gemarkeerd of was al INACTIEF',
'functie omschrijving: ' || rec_fun_del.prs_srtperslid_omschrijving
);
ELSE
BEGIN
UPDATE prs_srtperslid
SET prs_srtperslid_verwijder = SYSDATE
WHERE prs_srtperslid_key = v_functie_key;
COMMIT;
fac.imp_writelog (p_import_key,
'C',
'Functie geinactiveerd, functie omschrijving: ' || rec_fun_del.prs_srtperslid_omschrijving,
''
);
EXCEPTION
WHEN OTHERS
THEN
-- Kennelijk heeft de functie toch ernstige verplichtingen
v_errorhint := 'Functie heeft nog (max. '
|| TO_CHAR (v_count)
|| ') verplichtingen; functie omschrijving: '
|| rec_fun_del.prs_srtperslid_omschrijving;
fac.imp_writelog (p_import_key, 'I', 'Inactiveren functie is niet gelukt', v_errorhint);
END;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
END;
END LOOP;
-- **********************************
-- *
-- * Update functie
-- *
-- **********************************
FOR rec_fun_upd IN c_fun_upd
LOOP
BEGIN
v_errorhint := 'De functie kan niet bepaald worden ' || rec_fun_upd.functie_code;
-- Init
v_update := TRUE;
v_functie_key := 0;
IF rec_fun_upd.functiekey IS NULL
THEN
v_aktie := 'INSERT';
v_errormsg := 'Functiegegevens kunnen niet toegevoegd worden';
ELSE
v_aktie := 'UPDATE';
v_errormsg := 'Functiegegevens kunnen niet gewijzigd worden';
END IF;
-- *** Controle verplichte gegevens + ophalen extra informatie ***
-- Controle: FUNCTIE_CODE
IF rec_fun_upd.functie_code IS NULL
THEN
v_errorhint := 'Functie heeft geen functiecode; functieomschrijving: ' || rec_fun_upd.functie_omschrijving;
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
v_update := FALSE;
END IF;
-- Controle: FUNCTIE_OMSCHRIJVING
IF v_update AND rec_fun_upd.functie_omschrijving IS NULL
THEN
v_errorhint := 'Functie heeft geen functieomschrijving; functiecode: ' || rec_fun_upd.functie_code;
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
v_update := FALSE;
END IF;
-- *** Daadwerkelijk insert/update prs_srtperslid ***
IF v_update
THEN
BEGIN
IF v_aktie = 'INSERT'
THEN
v_errormsg := 'Functie kan niet worden toegevoegd';
INSERT INTO prs_srtperslid
(prs_srtperslid_omschrijving
)
VALUES (SUBSTR(rec_fun_upd.functie_code || ' - ' || rec_fun_upd.functie_omschrijving, 1, 30)
);
COMMIT;
fac.imp_writelog (p_import_key,
'C',
'Nieuwe functie toegevoegd',
'functiecode - functieomschrijving: '
|| rec_fun_upd.functie_code
|| ' - '
|| rec_fun_upd.functie_omschrijving
);
-- Wat is de key van deze nieuwe geworden?
SELECT prs_srtperslid_key
INTO v_functie_key
FROM prs_srtperslid
WHERE prs_srtperslid_omschrijving = SUBSTR(rec_fun_upd.functie_code || ' - ' || rec_fun_upd.functie_omschrijving, 1, 30)
AND prs_srtperslid_verwijder IS NULL;
ELSE -- v_aktie = 'UPDATE'
v_errormsg := 'Functie kan niet worden gewijzigd';
UPDATE prs_srtperslid
SET prs_srtperslid_omschrijving = SUBSTR(rec_fun_upd.functie_code
|| ' - '
|| rec_fun_upd.functie_omschrijving, 1, 30)
WHERE prs_srtperslid_key = rec_fun_upd.functiekey;
COMMIT;
v_errormsg := 'Update van functie = ' || SUBSTR(rec_fun_upd.functie_code
|| ' - '
|| rec_fun_upd.functie_omschrijving, 1, 30);
v_errorhint := 'Functie_key = ' || TO_CHAR(rec_fun_upd.functiekey);
-- fac.imp_writelog (p_import_key, 'C', v_errormsg, v_errorhint);
-- Wat is de key van deze functie?
SELECT prs_srtperslid_key
INTO v_functie_key
FROM prs_srtperslid
WHERE prs_srtperslid_omschrijving = SUBSTR(rec_fun_upd.functie_code || ' - ' || rec_fun_upd.functie_omschrijving, 1, 30)
AND prs_srtperslid_verwijder IS NULL;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errorhint := ' {' || v_errormsg || '}; functiecode: ' || rec_fun_upd.functie_code;
v_errormsg := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
v_update := FALSE;
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
END;
END IF;
v_buffercount := v_buffercount + 1;
IF v_buffercount >= c_commitbuffer
THEN
COMMIT;
v_buffercount := 0;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errorhint := v_errorhint || ' {' || v_errormsg || '}';
v_errormsg := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
END;
END LOOP;
-- **********************************
-- *
-- * Update medewerkers / inzet
-- *
-- **********************************
v_errormsg := 'Try to open cursor';
v_action := 'UPDATE';
v_vorig_personeelsnummer := '9999999';
v_vorig_mut_persnrdienst := '9999999/9';
FOR rec_prs_upd IN c_prs_upd
LOOP
BEGIN
v_aanduiding := rec_prs_upd.personeelsnummer || '/' || rec_prs_upd.dienstverbandvolgnummer || ' ' || rec_prs_upd.achternaam;
-- Init
v_update := TRUE;
-- bestaat de persoon al in Facilitor?
SELECT count(*)
INTO v_persoon_bestaat
FROM prs_perslid
WHERE prs_perslid_verwijder IS NULL
AND prs_perslid_nr like rec_prs_upd.personeelsnummer || '/%';
-- bestaat het dienstverband al?
SELECT count(*)
INTO v_dienstv_bestaat
FROM prs_perslid
WHERE prs_perslid_verwijder IS NULL
AND prs_perslid_nr = rec_prs_upd.personeelsnummer || '/' || rec_prs_upd.dienstverbandvolgnummer;
IF (rec_prs_upd.actief = 'A' and nvl(rec_prs_upd.einde_dienstverband, sysdate + 10) >= trunc(sysdate) AND v_dienstv_bestaat = 0)
or (rec_prs_upd.actief = 'T' and v_persoon_bestaat = 0)
THEN
v_aktie := 'INSERT';
v_errormsg := 'Persoonsgegevens kunnen niet toegevoegd worden';
ELSIF rec_prs_upd.actief = 'A' and nvl(rec_prs_upd.einde_dienstverband, sysdate + 10) >= trunc(sysdate)
THEN
v_aktie := 'UPDATE';
v_errormsg := 'Persoonsgegevens kunnen niet gewijzigd worden';
ELSE
-- toekomstmutaties e.d.
v_aktie := 'NONE';
v_update := FALSE;
END IF;
IF v_debug = 1 THEN
fac.imp_writelog (p_import_key,
'I',
'Test 2: actie: ' || v_aktie,
'Naam/persoonsnr: '
|| rec_prs_upd.achternaam
|| '/'
|| rec_prs_upd.personeelsnummer
);
END IF;
v_afdeling_key := 0;
v_srtperslid_key := 0;
v_perslid_key := 0;
-- *** Controle verplichte gegevens + ophalen extra informatie ***
-- Controle: personeelsnummer
IF v_update AND rec_prs_upd.personeelsnummer IS NULL
THEN
v_errorhint := 'Persoon heeft geen personeelsnummer; achternaam: ' || rec_prs_upd.achternaam;
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
v_update := FALSE;
END IF;
-- Controle: dienstverbandvolgnummer
IF v_update AND rec_prs_upd.dienstverbandvolgnummer IS NULL
THEN
v_errorhint := 'Persoon heeft geen dienstverband; personeelsnummer: ' || rec_prs_upd.personeelsnummer;
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
v_update := FALSE;
END IF;
-- Controle: achternaam
IF v_update AND rec_prs_upd.achternaam IS NULL
THEN
v_errorhint := 'Persoon heeft geen achternaam; personeelsnummer: ' || rec_prs_upd.personeelsnummer;
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
v_update := FALSE;
END IF;
-- Controle: begin_dienstverband
IF v_update AND rec_prs_upd.begin_dienstverband IS NULL
THEN
v_errorhint := 'Persoon heeft geen ingangsdatum; personeelsnummer: ' || rec_prs_upd.personeelsnummer;
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
v_update := FALSE;
END IF;
v_errorhint := 'De afdeling kan niet bepaald worden ' || rec_prs_upd.afdeling_code;
IF v_update
THEN
BEGIN
-- Bepaal de afdelingskey; afdelingen worden met een andere import beheerd
SELECT prs_afdeling_key
INTO v_afdeling_key
FROM prs_afdeling
WHERE prs_afdeling_naam = rec_prs_upd.afdeling_code
AND prs_afdeling_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_update := FALSE;
v_errorhint := 'Afdeling '
|| rec_prs_upd.afdeling_code
|| ' bestaat niet; personeelsnummer: '
|| rec_prs_upd.personeelsnummer;
-- Kennelijk is de afdeling niet gevonden
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
WHEN OTHERS
THEN
v_update := FALSE;
v_errorhint := 'Kan Afdeling ' || rec_prs_upd.afdeling_code || ' niet eenduidig bepalen?!';
END;
END IF;
-- Controle: functie_code
IF v_update
THEN
BEGIN
-- Bepaal de srtperslid_key
SELECT prs_srtperslid_key
INTO v_srtperslid_key
FROM prs_srtperslid
WHERE (SUBSTR (prs_srtperslid_omschrijving,
1,
INSTR (prs_srtperslid_omschrijving, ' - ') - 1
) = rec_prs_upd.functie_code
OR SUBSTR (prs_srtperslid_omschrijving,
11,
INSTR (prs_srtperslid_omschrijving, ' - ') - 11
) = rec_prs_upd.functie_code)
AND prs_srtperslid_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_update := FALSE;
v_errorhint := 'Functie '
|| rec_prs_upd.functie_code
|| ' bestaat niet; personeelsnummer: '
|| rec_prs_upd.personeelsnummer;
-- Kennelijk is de functie niet gevonden
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
WHEN OTHERS
THEN
v_update := FALSE;
v_errorhint := 'Kan Functie ' || rec_prs_upd.functie_code || ' niet eenduidig bepalen?!';
END;
END IF;
IF v_debug = 1 THEN
IF v_update THEN v_debug_str := 'TRUE';
ELSE v_debug_str := 'FALSE';
END IF;
fac.imp_writelog (p_import_key,
'I',
'Test 1: persoon actie:' || v_aktie || ' v_update: ' || v_debug_str ,
'Naam/persoonsnr: '
|| rec_prs_upd.achternaam
|| '/'
|| rec_prs_upd.personeelsnummer
);
END IF;
-- *** Daadwerkelijk insert/update prs_perslid ***
IF v_update
THEN
BEGIN
-- Bepaal of er een persoon is met hetzelfde personeelsnummer
-- Dan moet er een suffix organisatie_code achter prs_perslid_naam
-- en een _ voor de naam om ervoor te zorgen dat deze namen onderaan de lijst komen.
-- Deze medewerkers krijgen ook geen login.
IF rec_prs_upd.personeelsnummer = v_vorig_personeelsnummer THEN
v_achternaam := substr('_' || rec_prs_upd.achternaam, 1, 23) || rec_prs_upd.afdeling_code;
v_oslogin := '';
ELSE
v_achternaam := rec_prs_upd.achternaam;
v_oslogin := rec_prs_upd.oslogin;
END IF;
IF v_aktie = 'INSERT'
THEN
v_errormsg := 'Persoon kan niet worden toegevoegd';
-- Moeten we hier nog iets mee doen???
-- UPDATE prs_perslid SET prs_perslid_oslogin = NULL WHERE prs_perslid_oslogin = upper(rec_prs_upd.prs_perslid_oslogin);
INSERT INTO prs_perslid
(prs_perslid_nr,
prs_perslid_voorletters,
prs_perslid_voornaam,
prs_perslid_tussenvoegsel,
prs_perslid_naam,
prs_perslid_titel,
prs_perslid_oslogin,
prs_perslid_email,
prs_perslid_mobiel,
prs_perslid_ingangsdatum,
prs_perslid_einddatum,
prs_perslid_telefoonnr,
prs_afdeling_key,
prs_srtperslid_key,
prs_perslid_module,
fac_profiel_key
)
VALUES (rec_prs_upd.personeelsnummer || '/' || rec_prs_upd.dienstverbandvolgnummer,
rec_prs_upd.voorletters,
rec_prs_upd.roepnaam,
rec_prs_upd.voorvoegsel,
v_achternaam,
rec_prs_upd.titel,
v_oslogin,
rec_prs_upd.email,
rec_prs_upd.mobielnr,
rec_prs_upd.datum_in_dienst,
rec_prs_upd.datum_uit_dienst,
rec_prs_upd.telefoonnr,
v_afdeling_key,
v_srtperslid_key,
'PRS',
61
)
RETURNING prs_perslid_key
INTO v_perslid_key;
COMMIT;
fac.imp_writelog (p_import_key,
'C',
'Nieuw persoon toegevoegd',
'Naam/persoonsnr: '
|| v_achternaam
|| '/'
|| rec_prs_upd.personeelsnummer
);
-- Mandateer nieuwe persoon voor alle kostenplaatsen
INSERT INTO prs_perslidkostenplaats
(prs_perslid_key,
prs_perslidkostenplaats_boeken,
prs_perslidkostenplaats_inzage
)
VALUES (v_perslid_key,
1,
0
);
COMMIT;
ELSE
v_perslid_key := null;
v_errormsg := 'Persoon kan niet worden gewijzigd';
SELECT prs_perslid_key, prs_afdeling_key
INTO v_perslid_key, v_old_afdeling_key
FROM prs_perslid
WHERE prs_perslid_verwijder IS NULL
AND prs_perslid_nr like rec_prs_upd.personeelsnummer || '/' || rec_prs_upd.dienstverbandvolgnummer;
-- voorkom dat wijziging in afdeling notificaties dubbel verzonden worden voor personen met meerdere inzetten onder hetzelfde
-- dienstverband. We gaan dan alleen de eerste inzet opslaan.
IF v_vorig_mut_persnrdienst = rec_prs_upd.personeelsnummer || '/' || rec_prs_upd.dienstverbandvolgnummer THEN
fac.imp_writelog (p_import_key,
'W',
'Persoon is voor tweede keer aangeboden ',
'Naam-persoonsnr: '
|| v_achternaam
|| '-'
|| v_vorig_mut_persnrdienst
);
v_update := FALSE;
ELSE
IF v_afdeling_key <> v_old_afdeling_key THEN
-- stuur notificatie naar de afdeling ICT
-- afzender key 14424 = Facilitor
-- to key 11641 = ICT Notificatie
fac.putnotificationsrtprio (14424, 11641, 'PRSMAI', v_perslid_key, 'Organisatiecode van ' || v_achternaam || ' is gewijzigd m.i.v. ' || TO_CHAR (SYSDATE, 'dd-mm-yyyy') || '.', 3,
null, null, null, 1, null);
-- haal de oude functie op
SELECT prs_srtperslid_omschrijving
INTO v_oude_functie
FROM prs_srtperslid sp, prs_perslid p
WHERE sp.prs_srtperslid_key = p.prs_srtperslid_key
AND p.prs_perslid_key = v_perslid_key;
BEGIN
-- haal het oude dienstverband op
SELECT prs_kenmerklink_waarde
INTO v_oude_arbeidsuren
FROM prs_kenmerklink kl
WHERE prs_kenmerklink_verwijder IS NULL
AND kl.prs_kenmerk_key = v_kenmerk_arbeidsuren
AND kl.prs_link_key = v_perslid_key;
EXCEPTION WHEN NO_DATA_FOUND THEN
v_oude_arbeidsuren := NULL;
END;
-- pas kenmerken aan om bon bij notificatie te kunnen voorzien van de juiste velden. PZHO#26917
pzho_import.set_prs_kenmerk(p_import_key, 'P', v_kenmerk_oude_afdeling, v_perslid_key, v_old_afdeling_key);
pzho_import.set_prs_kenmerk(p_import_key, 'P', v_kenmerk_oude_functie, v_perslid_key, v_oude_functie);
pzho_import.set_prs_kenmerk(p_import_key, 'P', v_kenmerk_oude_arbeidsuren, v_perslid_key, v_oude_arbeidsuren);
END IF;
v_vorig_mut_persnrdienst := rec_prs_upd.personeelsnummer || '/' || rec_prs_upd.dienstverbandvolgnummer;
UPDATE prs_perslid
SET prs_perslid_nr = rec_prs_upd.personeelsnummer || '/' || rec_prs_upd.dienstverbandvolgnummer,
prs_perslid_ingangsdatum = rec_prs_upd.datum_in_dienst,
prs_perslid_einddatum = rec_prs_upd.datum_uit_dienst,
prs_perslid_naam = v_achternaam,
prs_perslid_tussenvoegsel = rec_prs_upd.voorvoegsel,
prs_perslid_voorletters = rec_prs_upd.voorletters,
prs_perslid_voornaam = rec_prs_upd.roepnaam,
prs_perslid_titel = rec_prs_upd.titel,
prs_perslid_email = rec_prs_upd.email,
prs_perslid_mobiel = rec_prs_upd.mobielnr,
prs_perslid_telefoonnr = rec_prs_upd.telefoonnr,
prs_afdeling_key = v_afdeling_key,
prs_srtperslid_key = v_srtperslid_key,
prs_perslid_oslogin = v_oslogin
WHERE prs_perslid_key = v_perslid_key
AND prs_perslid_nr = rec_prs_upd.personeelsnummer || '/' || rec_prs_upd.dienstverbandvolgnummer
AND ( prs_perslid_ingangsdatum <> rec_prs_upd.datum_in_dienst
OR nvl(prs_perslid_einddatum, to_date('99990101', 'yyyymmdd')) <> nvl(rec_prs_upd.datum_uit_dienst, to_date('99990101', 'yyyymmdd'))
OR prs_perslid_naam <> v_achternaam
OR NVL (prs_perslid_oslogin, '-') <> NVL(v_oslogin, '-')
OR NVL (prs_perslid_tussenvoegsel, '-') <> NVL (rec_prs_upd.voorvoegsel, '-')
OR NVL (prs_perslid_email, '-') <> NVL (rec_prs_upd.email, '-')
OR NVL (prs_perslid_mobiel, '-') <> NVL (rec_prs_upd.mobielnr, '-')
OR NVL (prs_perslid_telefoonnr, '-') <> NVL (rec_prs_upd.telefoonnr, '-')
OR prs_perslid_voorletters <> rec_prs_upd.voorletters
OR NVL (prs_perslid_voornaam, '-') <> NVL (rec_prs_upd.roepnaam, '-')
OR prs_perslid_titel <> rec_prs_upd.titel
OR prs_afdeling_key <> v_afdeling_key
OR prs_srtperslid_key <> v_srtperslid_key
);
fac.imp_writelog (p_import_key,
'C',
'Persoon bijgewerkt (indien nodig)',
'Naam/persoonsnr: '
|| rec_prs_upd.oslogin
|| '/'
|| rec_prs_upd.personeelsnummer
);
END IF;
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errorhint := ' {' || v_errormsg || '}; personeelsnummer: ' || rec_prs_upd.personeelsnummer || ' key:' || v_perslid_key;
v_errormsg := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
v_update := FALSE;
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
END;
END IF;
-- *** insert/update van de kenmerken van de persoon ***
IF v_update
THEN
BEGIN
v_errormsg := 'Kenmerken kunnen niet worden toegevoegd';
pzho_import.set_prs_kenmerk(p_import_key, 'P', v_kenmerk_voornamen, v_perslid_key, rec_prs_upd.voornamen);
pzho_import.set_prs_kenmerk(p_import_key, 'P', v_kenmerk_titel_na, v_perslid_key, rec_prs_upd.titel_na);
pzho_import.set_prs_kenmerk(p_import_key, 'P', v_kenmerk_arbeidsuren, v_perslid_key, rec_prs_upd.arbeidsuren);
-- pzho_import.set_prs_kenmerk(p_import_key, 'P', v_kenmerk_aanwezigheid, v_perslid_key, rec_prs_upd.werkdagen);
pzho_import.set_prs_kenmerk(p_import_key, 'P', v_kenmerk_begininzet, v_perslid_key, rec_prs_upd.begin_dienstverband);
-- pzho_import.set_prs_kenmerk(p_import_key, 'P', v_kenmerk_eindinzet, v_perslid_key, rec_prs_upd.einde_dienstverband);
pzho_import.set_prs_kenmerk(p_import_key, 'P', v_kenmerk_nummer_bgg, v_perslid_key, rec_prs_upd.telefoonnr_bgg);
v_locatie := rec_prs_upd.locatie_code;
-- Koppel de persoon aan een werkplek
IF rec_prs_upd.ruimtenr IS NOT NULL THEN
IF v_debug = 1 THEN
fac.imp_writelog (p_import_key, 'I', 'Test 3 Persoon heeft werkplek ingevuld:'||rec_prs_upd.locatie_code||'-'||rec_prs_upd.gebouw_code||'-'||rec_prs_upd.verdieping_code||'-'||rec_prs_upd.ruimtenr, v_aanduiding);
END IF;
v_errormsg := 'Locatie niet gevonden';
-- voorloopnullen van ruimtes staan niet in de importdata.
SELECT DECODE (l.alg_locatie_key, null, 'Locatie niet gevonden:' || rec_prs_upd.locatie_code,
DECODE (g.alg_gebouw_key, null, 'Gebouw niet gevonden:' || rec_prs_upd.locatie_code||'-'||rec_prs_upd.gebouw_code,
DECODE (v.alg_verdieping_key, null, 'Verdieping niet gevonden:'|| rec_prs_upd.locatie_code||'-'||rec_prs_upd.gebouw_code||'-'||rec_prs_upd.verdieping_code,
DECODE (r.alg_ruimte_key, null, 'Ruimte niet gevonden:'|| rec_prs_upd.locatie_code||'-'||rec_prs_upd.gebouw_code||'-'||rec_prs_upd.verdieping_code||'-'||rec_prs_upd.ruimtenr,'')))), r.alg_ruimte_key
INTO v_errormsg, v_ruimte_key
FROM alg_v_aanweziglocatie l,
alg_v_aanweziggebouw g,
alg_v_aanwezigverdieping v,
(SELECT alg_ruimte_key, LPAD(alg_ruimte_nr,4,'0') alg_ruimte_nr, alg_verdieping_key from alg_v_aanwezigruimte) r
WHERE l.alg_locatie_code(+) = rec_prs_upd.locatie_code
AND g.alg_gebouw_code(+) = rec_prs_upd.gebouw_code
AND v.alg_verdieping_code(+) = rec_prs_upd.verdieping_code
AND alg_ruimte_nr(+) = LPAD(rec_prs_upd.ruimtenr,4,'0')
AND l.alg_locatie_key = g.alg_locatie_key(+)
AND g.alg_gebouw_key = v.alg_gebouw_key(+)
AND v.alg_verdieping_key = r.alg_verdieping_key(+);
IF v_debug = 1 THEN
fac.imp_writelog (p_import_key, 'I', 'Test 4 Persoon heeft werkplek ingevuld:'||rec_prs_upd.locatie_code||'-'||rec_prs_upd.gebouw_code||'-'||rec_prs_upd.verdieping_code||'-'||rec_prs_upd.ruimtenr, v_aanduiding);
END IF;
-- als de locatie niet gevonden kan worden dan komen we direct in de exception.
IF v_errormsg = '' OR v_errormsg IS NULL THEN
IF v_debug = 1 THEN
fac.imp_writelog (p_import_key, 'I', 'Test 5 Persoon heeft werkplek ingevuld:'||rec_prs_upd.locatie_code||'-'||rec_prs_upd.gebouw_code||'-'||rec_prs_upd.verdieping_code||'-'||rec_prs_upd.ruimtenr, v_aanduiding);
END IF;
-- nu op zoek naar een werkplek
-- heeft de persoon al een werkplek in deze ruimte?
SELECT count(*)
INTO v_count
FROM prs_perslidwerkplek pwp, prs_werkplek wp
WHERE wp.prs_alg_ruimte_key = v_ruimte_key
AND NVL(wp.prs_werkplek_virtueel,0) <> 1
AND wp.prs_werkplek_key = pwp.prs_werkplek_key
AND prs_perslid_key = v_perslid_key;
IF v_count = 0 THEN
-- persoon heeft nog geen werkplek in deze ruimte
v_werkplek_key := NULL;
FOR rec_alg_wp IN c_alg_wp(v_ruimte_key)
LOOP
BEGIN
IF v_werkplek_key IS NULL THEN
v_werkplek_key := rec_alg_wp.prs_werkplek_key;
INSERT INTO prs_perslidwerkplek
(prs_werkplek_key,
prs_perslid_key,
prs_perslidwerkplek_bezetting)
VALUES
(v_werkplek_key,
v_perslid_key,
100);
fac.imp_writelog (p_import_key, 'I', 'Persoon aan nieuwe werkplek gekoppeld', v_aanduiding);
END IF;
END;
END LOOP;
END IF;
ELSE
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_aanduiding);
END IF;
END IF;
-- verwijder alle
IF v_ruimte_key IS NOT NULL THEN
-- verwijder alle werkplekken buiten de gevonden ruimte
DELETE prs_perslidwerkplek pwp
WHERE prs_perslid_key = v_perslid_key
AND EXISTS (SELECT prs_werkplek_key
FROM prs_werkplek wp
WHERE prs_alg_ruimte_key <> v_ruimte_key
AND pwp.prs_werkplek_key = wp.prs_werkplek_key
AND NVL(wp.prs_werkplek_virtueel,0) = 0);
ELSE
-- verwijder alle werkplekken van deze persoon
DELETE prs_perslidwerkplek pwp
WHERE prs_perslid_key = v_perslid_key
AND EXISTS (SELECT prs_werkplek_key
FROM prs_werkplek wp
WHERE NVL(wp.prs_werkplek_virtueel,0) = 0
AND pwp.prs_werkplek_key = wp.prs_werkplek_key);
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
-- indien de locatie niet gevonden kan worden gaan we alleen maar een info loggen.
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errorhint := ' {' || v_errormsg || '}; personeelsnummer: ' || v_aanduiding || 'locatie: ' || v_locatie;
v_errormsg := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
v_update := FALSE;
fac.imp_writelog (p_import_key, 'I', v_errormsg, v_errorhint);
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errorhint := ' {' || v_errormsg || '}; personeelsnummer: ' || v_aanduiding;
v_errormsg := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
v_update := FALSE;
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
END;
END IF;
v_buffercount := v_buffercount + 1;
IF v_buffercount >= c_commitbuffer
THEN
COMMIT;
v_buffercount := 0;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errorhint := v_errorhint || ' {' || v_errormsg || '}';
v_errormsg := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
END;
v_vorig_personeelsnummer := rec_prs_upd.personeelsnummer;
END LOOP;
SELECT COUNT (*)
INTO v_perslid_newcount_fclt
FROM prs_perslid
WHERE prs_perslid_verwijder IS NULL
AND prs_perslid_naam NOT LIKE 'INACTIEF:%';
-- actieve personen zonder personeelsnr worden verwijderd
fac.imp_writelog (p_import_key,
'S',
'Aantal actieve personen (met personeelsnr) vooraf: '
|| TO_CHAR (v_perslid_count_fclt)
|| ' nu: '
|| TO_CHAR (v_perslid_newcount_fclt),
''
);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errorhint := v_errorhint || ' {' || v_errormsg || '}';
v_errormsg := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
END;
/
-- personenview met personeelsnummer zonder dienstverbandvolgnummer
CREATE OR REPLACE VIEW pzho_v_prs_perslid
AS
SELECT p.*,
SUBSTR (p.prs_perslid_nr, 1, INSTR (p.prs_perslid_nr, '/') - 1)
personeels_nr
FROM prs_v_aanwezigperslid p
WHERE prs_perslid_nr IS NOT NULL;
-- view met groepering van personen met hetzelfde personeelsnummer met langste einddatum
CREATE OR REPLACE VIEW pzho_v_prs_perslid_uitdienst
AS
SELECT *
FROM pzho_v_prs_perslid p
WHERE NOT EXISTS
(SELECT prs_perslid_key
FROM pzho_v_prs_perslid p2
WHERE TRUNC(p2.prs_perslid_einddatum) > TRUNC(p.prs_perslid_einddatum)
AND p.personeels_nr = p2.personeels_nr);
-- view met groepering van personen met hetzelfde personeelsnummer met vroegste begindatum
CREATE OR REPLACE VIEW pzho_v_prs_perslid_indienst
AS
SELECT *
FROM pzho_v_prs_perslid p
WHERE NOT EXISTS
(SELECT prs_perslid_key
FROM pzho_v_prs_perslid p2
WHERE TRUNC(p2.prs_perslid_aanmaak) < TRUNC(p.prs_perslid_aanmaak)
AND p.personeels_nr = p2.personeels_nr);
-- View met persoonsrecord-keys die afgelopen 24 uur zijn aangemaakt + key van te notificeren leidinggevende (PZHO#12915)
-- Aannames: 1. elke(!) nacht - na personen-import - afgehandeld, zodat nieuwe personen bijna niet kunnen worden gemist;
-- 2. indien vaker afgehandeld, garandeert de notificatietaak dat leidinggevende maar <20><>n notificatie ontvangt;
-- 3. geen notificatie als leidinggevende onbekend en "zelf-notificatie" als nieuwe persoon is leidinggevende.
CREATE OR REPLACE VIEW pzho_v_new_prs_records (code,
sender,
receiver,
text,
key,
xkey
)
AS
SELECT 'PRSINF', NULL, p_rec.prs_perslid_key,
'Aanmelding nieuwe medewerker: ' || pf.prs_perslid_naam_full,
p_new.prs_perslid_key, NULL
FROM (SELECT prs_perslid_key, prs_afdeling_key
FROM pzho_v_prs_perslid_indienst
WHERE prs_perslid_aanmaak > SYSDATE - 1) p_new,
prs_kenmerklink kl,
prs_perslid p_rec,
prs_v_perslid_fullnames pf
WHERE p_new.prs_afdeling_key = kl.prs_link_key
AND kl.prs_kenmerklink_niveau = 'A'
AND kl.prs_kenmerk_key = 1060
AND SUBSTR (p_rec.prs_perslid_nr,
1,
INSTR (p_rec.prs_perslid_nr, '/') - 1
) = kl.prs_kenmerklink_waarde
AND p_new.prs_perslid_key = pf.prs_perslid_key
AND p_rec.prs_perslid_verwijder IS NULL
AND p_rec.prs_perslid_email IS NOT NULL
GROUP BY p_rec.prs_perslid_key,
pf.prs_perslid_naam_full,
p_new.prs_perslid_key
ORDER BY p_new.prs_perslid_key;
-- View met nieuwe meldingen met stdmelding ICT nieuwe medewerker.
-- vakgroep key ict meldingen = 306
CREATE OR REPLACE VIEW pzho_v_ict_nieuwe_medew (code,
sender,
receiver,
text,
key,
xkey
)
AS
SELECT 'MLDMAI', NULL, (SELECT prs_perslid_key
FROM prs_perslid
WHERE prs_perslid_oslogin = '_ICT'),
'Facilitor: '||mld_stdmelding_omschrijving||' '
|| (SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km
WHERE km.mld_kenmerk_key = 1130
AND km.mld_melding_key = m.mld_melding_key),
mld_melding_key, NULL
FROM mld_melding m,
mld_stdmelding std
WHERE std.mld_ins_discipline_key = 306
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND mld_melding_datum > SYSDATE - 1;
-- uitdienst notificaties
CREATE OR REPLACE VIEW pzho_v_noti_uitdienst (code,
sender,
receiver,
text,
KEY,
xkey
)
AS
-- uitdienst naar leidinggevende 30 dagen voor uitdiensttreding
SELECT code, sender, receiver, text, KEY, xkey
FROM (SELECT 'CUST01' code, NULL sender,
p_rec.prs_perslid_key receiver,
'Be<EFBFBD>indiging dienstverband medewerker: '
|| pf.prs_perslid_naam_full text,
p.prs_perslid_key KEY, NULL xkey
FROM pzho_v_prs_perslid_uitdienst p,
prs_kenmerklink kl,
prs_perslid p_rec,
prs_v_perslid_fullnames pf
WHERE TRUNC (p.prs_perslid_einddatum) = TRUNC (SYSDATE) + 30
AND SUBSTR(p.prs_perslid_naam, 1,1) <> '_'
AND p.prs_afdeling_key = kl.prs_link_key
AND kl.prs_kenmerklink_niveau = 'A'
AND kl.prs_kenmerk_key = 1060
AND SUBSTR (p_rec.prs_perslid_nr,
1,
INSTR (p_rec.prs_perslid_nr, '/') - 1
) = kl.prs_kenmerklink_waarde
AND p.prs_perslid_key = pf.prs_perslid_key
AND p.prs_perslid_verwijder IS NULL
AND p_rec.prs_perslid_verwijder IS NULL
AND p_rec.prs_perslid_email IS NOT NULL
UNION ALL
-- uitdienst naar medewerker 30 dagen voor uitdiensttreding
SELECT 'CUST01', NULL, p.prs_perslid_key prs_perslid_key_ontv,
'Be<EFBFBD>indiging dienstverband medewerker: '
|| pf.prs_perslid_naam_full,
p.prs_perslid_key, NULL
FROM pzho_v_prs_perslid_uitdienst p, prs_v_perslid_fullnames pf
WHERE TRUNC (p.prs_perslid_einddatum) = TRUNC (SYSDATE) + 30
AND SUBSTR(p.prs_perslid_naam, 1,1) <> '_'
AND p.prs_perslid_key = pf.prs_perslid_key
AND p.prs_perslid_verwijder IS NULL
AND p.prs_perslid_email IS NOT NULL
UNION ALL
-- uitdienst naar huisvesting 30 dagen voor uitdiensttreding
SELECT 'CUST01', NULL,
(SELECT prs_perslid_key
FROM prs_perslid
WHERE prs_perslid_oslogin =
'_HUISVESTING')
prs_perslid_key_ontv,
'Be<EFBFBD>indiging dienstverband medewerker: '
|| pf.prs_perslid_naam_full,
p.prs_perslid_key, NULL
FROM pzho_v_prs_perslid_uitdienst p, prs_v_perslid_fullnames pf
WHERE TRUNC (p.prs_perslid_einddatum) = TRUNC (SYSDATE) + 30
AND SUBSTR(p.prs_perslid_naam, 1,1) <> '_'
AND p.prs_perslid_key = pf.prs_perslid_key
AND p.prs_perslid_verwijder IS NULL
UNION ALL
-- uitdienst naar leidinggevende 10 dagen voor uitdiensttreding
SELECT 'CUST01', NULL,
p_rec.prs_perslid_key prs_perslid_key_ontv,
'Herinnering uitdiensttreding medewerker: '
|| pf.prs_perslid_naam_full,
p.prs_perslid_key, NULL
FROM pzho_v_prs_perslid_uitdienst p,
prs_kenmerklink kl,
prs_perslid p_rec,
prs_v_perslid_fullnames pf
WHERE TRUNC (p.prs_perslid_einddatum) = TRUNC (SYSDATE) + 10
AND SUBSTR(p.prs_perslid_naam, 1,1) <> '_'
AND p.prs_afdeling_key = kl.prs_link_key
AND kl.prs_kenmerklink_niveau = 'A'
AND kl.prs_kenmerk_key = 1060
AND SUBSTR (p_rec.prs_perslid_nr,
1,
INSTR (p_rec.prs_perslid_nr, '/') - 1
) = kl.prs_kenmerklink_waarde
AND p.prs_perslid_key = pf.prs_perslid_key
AND p.prs_perslid_verwijder IS NULL
AND p_rec.prs_perslid_verwijder IS NULL
AND p_rec.prs_perslid_email IS NOT NULL
UNION ALL
-- uitdienst naar medewerker 10 dagen voor uitdiensttreding
SELECT 'CUST01', NULL, p.prs_perslid_key prs_perslid_key_ontv,
'Herinnering uitdiensttreding medewerker: '
|| pf.prs_perslid_naam_full,
p.prs_perslid_key, NULL
FROM pzho_v_prs_perslid_uitdienst p, prs_v_perslid_fullnames pf
WHERE TRUNC (p.prs_perslid_einddatum) = TRUNC (SYSDATE) + 10
AND SUBSTR(p.prs_perslid_naam, 1,1) <> '_'
AND p.prs_perslid_key = pf.prs_perslid_key
AND p.prs_perslid_verwijder IS NULL
AND p.prs_perslid_email IS NOT NULL
UNION ALL
-- uitdienst naar leidinggevende 5 dagen voor uitdiensttreding
SELECT 'CUST03', NULL,
p_rec.prs_perslid_key prs_perslid_key_ontv,
'Definitief uitdiensttreding medewerker: '
|| pf.prs_perslid_naam_full,
p.prs_perslid_key, NULL
FROM pzho_v_prs_perslid_uitdienst p,
prs_kenmerklink kl,
prs_perslid p_rec,
prs_v_perslid_fullnames pf
WHERE TRUNC (p.prs_perslid_einddatum) = TRUNC (SYSDATE) + 5
AND SUBSTR(p.prs_perslid_naam, 1,1) <> '_'
AND p.prs_afdeling_key = kl.prs_link_key
AND kl.prs_kenmerklink_niveau = 'A'
AND kl.prs_kenmerk_key = 1060
AND SUBSTR (p_rec.prs_perslid_nr,
1,
INSTR (p_rec.prs_perslid_nr, '/') - 1
) = kl.prs_kenmerklink_waarde
AND p.prs_perslid_key = pf.prs_perslid_key
AND p.prs_perslid_verwijder IS NULL
AND p_rec.prs_perslid_verwijder IS NULL
AND p_rec.prs_perslid_email IS NOT NULL
UNION ALL
-- uitdienst naar ICT op dag van uitdiensttreding
SELECT 'CUST02', NULL,
(SELECT prs_perslid_key
FROM prs_perslid
WHERE prs_perslid_oslogin = '_ICT')
prs_perslid_key_ontv,
'Definitief uitdiensttreding medewerker: '
|| pf.prs_perslid_naam_full,
p.prs_perslid_key, NULL
FROM pzho_v_prs_perslid_uitdienst p, prs_v_perslid_fullnames pf
WHERE TRUNC (p.prs_perslid_einddatum) = TRUNC (SYSDATE)
AND SUBSTR(p.prs_perslid_naam, 1,1) <> '_'
AND p.prs_perslid_key = pf.prs_perslid_key
AND p.prs_perslid_verwijder IS NULL
UNION ALL
-- uitdienst naar afdeling Beveiliging op dag van uitdiensttreding
SELECT 'CUST02', NULL,
(SELECT prs_perslid_key
FROM prs_perslid
WHERE prs_perslid_oslogin =
'_BEVEILIGING')
prs_perslid_key_ontv,
'Definitief uitdiensttreding medewerker: '
|| pf.prs_perslid_naam_full,
p.prs_perslid_key, NULL
FROM pzho_v_prs_perslid_uitdienst p, prs_v_perslid_fullnames pf
WHERE TRUNC (p.prs_perslid_einddatum) = TRUNC (SYSDATE)
AND SUBSTR(p.prs_perslid_naam, 1,1) <> '_'
AND p.prs_perslid_key = pf.prs_perslid_key
AND p.prs_perslid_verwijder IS NULL)
GROUP BY code, sender, receiver, text, KEY, xkey;
/* Formatted on 12-11-2012 10:46:12 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW pzho_v_coda_afgemeld
(
regelnummer,
regeltype,
regel_key,
datum,
afn_kostensoort,
afn_kostensoort_refcode,
afn_kostenplaats,
afn_deelproduct,
lev_kostensoort,
lev_kostenplaats,
lev_deelproduct,
bedrag,
referentieregel_1,
referentieregel_2,
referentieregel_3,
referentieregel_4
)
AS
SELECT ROWNUM regelnummer,
x.regeltype,
x.regel_key,
x.datum,
x.afn_kostensoort,
x.afn_kostensoort_refcode,
x.afn_kostenplaats,
x.afn_deelproduct,
x.lev_kostensoort,
x.lev_kostenplaats,
x.lev_deelproduct,
x.bedrag,
x.refregel_1,
x.refregel_2,
x.refregel_3,
x.refregel_4
FROM (SELECT 'RES_ARTIKEL' regeltype,
res_rsv_artikel_key regel_key,
res_rsv_artikel_levering datum,
kst.prs_kostensoort_oms afn_kostensoort,
kst.prs_kostensoort_refcode afn_kostensoort_refcode,
kp.prs_kostenplaats_nr afn_kostenplaats,
--rr.res_rsv_ruimte_ordernr afn_deelproduct,
COALESCE (rk.res_kenmerkreservering_waarde,
rr.res_rsv_ruimte_ordernr)
afn_deelproduct,
(SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 307
AND ud.fac_usrdata_verwijder IS NULL
AND ud.fac_usrdata_upper =
kst.prs_kostensoort_upper)
lev_kostensoort,
(SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 308
AND ud.fac_usrdata_verwijder IS NULL
AND ud.fac_usrdata_upper =
kst.prs_kostensoort_upper)
lev_kostenplaats,
(SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 309
AND ud.fac_usrdata_verwijder IS NULL
AND ud.fac_usrdata_upper =
kst.prs_kostensoort_upper)
lev_deelproduct,
ra.res_rsv_artikel_prijs bedrag, -- Totaal voor #art.
'resnr.' || rr.res_reservering_key refregel_1,
pf.prs_perslid_naam_full refregel_2, -- Van host
af.prs_afdeling_naam
|| ' - '
|| af.prs_afdeling_omschrijving
refregel_3, -- Van afd. host
rr.res_rsv_ruimte_omschrijving refregel_4
FROM res_v_aanwezigrsv_artikel ra,
res_artikel a,
res_discipline rdi,
prs_kostensoort kst,
res_v_aanwezigrsv_ruimte rr,
prs_perslid p,
prs_v_perslid_fullnames_all pf,
prs_afdeling af,
prs_kostenplaats kp,
(SELECT rk.res_rsv_ruimte_key,
rk.res_kenmerkreservering_waarde
FROM res_kenmerkwaarde rk, res_kenmerk k
WHERE rk.res_kenmerkwaarde_verwijder IS NULL
AND rk.res_kenmerk_key = k.res_kenmerk_key
AND k.res_kenmerk_verwijder IS NULL
AND k.res_srtkenmerk_key = 31) rk
WHERE ra.res_status_bo_key = 5 -- Uitgevoerd
AND ra.res_artikel_key = a.res_artikel_key
AND a.res_discipline_key = rdi.ins_discipline_key
AND rdi.prs_kostensoort_key =
kst.prs_kostensoort_key(+)
AND ra.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
AND rr.res_rsv_ruimte_host_key = p.prs_perslid_key
AND p.prs_perslid_key = pf.prs_perslid_key
AND p.prs_afdeling_key = af.prs_afdeling_key
AND rr.prs_kostenplaats_key = kp.prs_kostenplaats_key
AND ra.res_rsv_artikel_afgemeld <
TO_DATE (TO_CHAR (SYSDATE, 'yyyymm') || '01',
'yyyymmdd')
AND rr.res_rsv_ruimte_key = rk.res_rsv_ruimte_key(+)
UNION ALL
SELECT 'BES_BESTELOPDRACHT' regeltype,
bo.bes_bestelopdr_key regel_key,
bo.bes_bestelopdr_leverdatum datum,
kst.prs_kostensoort_oms afn_kostensoort,
kst.prs_kostensoort_refcode afn_kostensoort_refcode,
kp.prs_kostenplaats_nr afn_kostenplaats,
--b.bes_bestelling_ordernr afn_deelproduct,
COALESCE (bk.bes_kenmerkbestell_waarde,
b.bes_bestelling_ordernr)
afn_deelproduct,
(SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 307
AND ud.fac_usrdata_verwijder IS NULL
AND ud.fac_usrdata_upper =
kst.prs_kostensoort_upper)
lev_kostensoort,
(SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 308
AND ud.fac_usrdata_verwijder IS NULL
AND ud.fac_usrdata_upper =
kst.prs_kostensoort_upper)
lev_kostenplaats,
(SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 309
AND ud.fac_usrdata_verwijder IS NULL
AND ud.fac_usrdata_upper =
kst.prs_kostensoort_upper)
lev_deelproduct,
(boi.bes_bestelopdr_item_prijs
* boi.bes_bestelopdr_item_aantal)
bedrag,
'besnr.' || b.bes_bestelling_key refregel_1,
pf.prs_perslid_naam_full refregel_2, -- Van besteller
a.prs_afdeling_naam
|| ' - '
|| a.prs_afdeling_omschrijving
refregel_3, -- Van afd. besteller
itd.ins_discipline_omschrijving refregel_4
FROM bes_bestelopdr bo,
bes_bestelopdr_item boi,
bes_bestelling_item bi,
bes_srtdeel isd,
bes_srtgroep isg,
ins_tab_discipline itd,
prs_kostensoort kst,
bes_bestelling b,
prs_perslid p,
prs_v_perslid_fullnames_all pf,
prs_afdeling a,
prs_kostenplaats kp,
--mld_adres m,
fac_tracking t,
(SELECT bk.bes_bestelling_key,
bk.bes_kenmerkbestell_waarde
FROM bes_kenmerkbestell bk, bes_kenmerk k
WHERE bk.bes_kenmerkbestell_verwijder IS NULL
AND bk.bes_kenmerk_key = k.bes_kenmerk_key
AND k.bes_kenmerk_verwijder IS NULL
AND k.bes_srtkenmerk_key = 241) bk
WHERE bo.bes_bestelopdr_status = 6 -- Geleverd (#besteld=#ontv.)
AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
AND boi.bes_bestelopdr_item_key =
bi.bes_bestelopdr_item_key
AND bi.bes_srtdeel_key = isd.bes_srtdeel_key
AND isd.bes_srtgroep_key = isg.bes_srtgroep_key
AND isg.ins_discipline_key = itd.ins_discipline_key
AND itd.prs_kostensoort_key =
kst.prs_kostensoort_key(+)
AND bi.bes_bestelling_key = b.bes_bestelling_key
AND b.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_key = pf.prs_perslid_key
AND p.prs_afdeling_key = a.prs_afdeling_key
AND b.prs_kostenplaats_key = kp.prs_kostenplaats_key
--AND b.mld_adres_key_lev = m.mld_adres_key(+)
AND t.fac_tracking_refkey = bo.bes_bestelopdr_key
AND t.fac_srtnotificatie_key = 10 -- levering
AND t.fac_tracking_datum <
TO_DATE (TO_CHAR (SYSDATE, 'yyyymm') || '01',
'yyyymmdd')
AND b.bes_bestelling_key = bk.bes_bestelling_key(+)
UNION ALL
SELECT 'MLD_OPDRACHT' regeltype,
o.mld_opdr_key,
mld.getopdrachtstatusdate (o.mld_opdr_key, 6) datum,
COALESCE (kst1.prs_kostensoort_oms,
kst2.prs_kostensoort_oms)
afn_kostensoort, -- Melding, anders vakgroep
COALESCE (kst1.prs_kostensoort_refcode,
kst2.prs_kostensoort_refcode)
afn_kostensoort_refcode, -- Melding, anders vakgroep
k.prs_kostenplaats_nr afn_kostenplaats,
--o.mld_opdr_ordernr afn_deelproduct,
COALESCE (ok.mld_kenmerkopdr_waarde,
o.mld_opdr_ordernr)
afn_deelproduct,
(SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 307
AND ud.fac_usrdata_verwijder IS NULL
AND ud.fac_usrdata_upper =
COALESCE (kst1.prs_kostensoort_upper,
kst2.prs_kostensoort_upper))
lev_kostensoort,
(SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 308
AND ud.fac_usrdata_verwijder IS NULL
AND ud.fac_usrdata_upper =
COALESCE (kst1.prs_kostensoort_upper,
kst2.prs_kostensoort_upper))
lev_kostenplaats,
(SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 309
AND ud.fac_usrdata_verwijder IS NULL
AND ud.fac_usrdata_upper =
COALESCE (kst1.prs_kostensoort_upper,
kst2.prs_kostensoort_upper))
lev_deelproduct,
o.mld_opdr_kosten,
'opdrnr.'
|| o.mld_melding_key
|| '/'
|| o.mld_opdr_bedrijfopdr_volgnr
refregel_1,
pf.prs_perslid_naam_full refregel_2, -- Van melder
a.prs_afdeling_naam
|| ' - '
|| a.prs_afdeling_omschrijving
refregel_3, -- Van afd. melder
o.mld_opdr_omschrijving refregel_4
FROM mld_opdr o,
mld_melding m,
mld_stdmelding stm,
ins_tab_discipline itd,
prs_kostensoort kst1,
prs_kostensoort kst2,
alg_locatie l,
prs_perslid p,
prs_v_perslid_fullnames_all pf,
prs_afdeling a,
prs_kostenplaats k,
(SELECT ok.mld_opdr_key, ok.mld_kenmerkopdr_waarde
FROM mld_kenmerkopdr ok, mld_kenmerk k
WHERE ok.mld_kenmerkopdr_verwijder IS NULL
AND ok.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_kenmerk_verwijder IS NULL
AND k.mld_srtkenmerk_key = 752) ok
WHERE o.mld_statusopdr_key = 6 -- Afgemeld
AND o.mld_melding_key = m.mld_melding_key
AND m.mld_stdmelding_key = stm.mld_stdmelding_key
AND stm.prs_kostensoort_key =
kst1.prs_kostensoort_key(+)
AND stm.mld_ins_discipline_key = itd.ins_discipline_key
AND itd.prs_kostensoort_key =
kst2.prs_kostensoort_key(+)
AND m.mld_alg_locatie_key = l.alg_locatie_key
AND m.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_key = pf.prs_perslid_key
AND p.prs_afdeling_key = a.prs_afdeling_key
AND o.prs_kostenplaats_key = k.prs_kostenplaats_key
AND mld.getopdrachtstatusdate (o.mld_opdr_key, 6) <
TO_DATE (TO_CHAR (SYSDATE, 'yyyymm') || '01',
'yyyymmdd')
AND o.mld_opdr_key = ok.mld_opdr_key(+)) x;
/* Formatted on 12-11-2012 10:48:45 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW pzho_v_coda_verwerkt
(
regelnummer,
regeltype,
regel_key,
datum,
afn_kostensoort,
afn_kostensoort_refcode,
afn_kostenplaats,
afn_deelproduct,
lev_kostensoort,
lev_kostenplaats,
lev_deelproduct,
bedrag,
referentieregel_1,
referentieregel_2,
referentieregel_3,
referentieregel_4
)
AS
SELECT ROWNUM regelnummer,
x.regeltype,
x.regel_key,
x.datum,
x.afn_kostensoort,
x.afn_kostensoort_refcode,
x.afn_kostenplaats,
x.afn_deelproduct,
x.lev_kostensoort,
x.lev_kostenplaats,
x.lev_deelproduct,
x.bedrag,
x.refregel_1,
x.refregel_2,
x.refregel_3,
x.refregel_4
FROM (SELECT 'RES_ARTIKEL' regeltype,
res_rsv_artikel_key regel_key,
ra.res_rsv_artikel_verwerkt datum,
kst.prs_kostensoort_oms afn_kostensoort,
kst.prs_kostensoort_refcode afn_kostensoort_refcode,
k.prs_kostenplaats_nr afn_kostenplaats,
--rr.res_rsv_ruimte_ordernr afn_deelproduct,
COALESCE (rk.res_kenmerkreservering_waarde,
rr.res_rsv_ruimte_ordernr)
afn_deelproduct,
(SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 307
AND ud.fac_usrdata_verwijder IS NULL
AND ud.fac_usrdata_upper =
kst.prs_kostensoort_upper)
lev_kostensoort,
(SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 308
AND ud.fac_usrdata_verwijder IS NULL
AND ud.fac_usrdata_upper =
kst.prs_kostensoort_upper)
lev_kostenplaats,
(SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 309
AND ud.fac_usrdata_verwijder IS NULL
AND ud.fac_usrdata_upper =
kst.prs_kostensoort_upper)
lev_deelproduct,
ra.res_rsv_artikel_prijs bedrag, -- Totaal voor #art.
'resnr.' || rr.res_reservering_key refregel_1,
pf.prs_perslid_naam_full refregel_2, -- Van host
af.prs_afdeling_naam
|| ' - '
|| af.prs_afdeling_omschrijving
refregel_3, -- Van afd. host
rr.res_rsv_ruimte_omschrijving refregel_4
FROM res_v_aanwezigrsv_artikel ra,
res_artikel a,
res_discipline rdi,
prs_kostensoort kst,
res_v_aanwezigrsv_ruimte rr,
prs_perslid p,
prs_v_perslid_fullnames_all pf,
prs_afdeling af,
prs_kostenplaats k,
(SELECT rk.res_rsv_ruimte_key,
rk.res_kenmerkreservering_waarde
FROM res_kenmerkwaarde rk, res_kenmerk k
WHERE rk.res_kenmerkwaarde_verwijder IS NULL
AND rk.res_kenmerk_key = k.res_kenmerk_key
AND k.res_kenmerk_verwijder IS NULL
AND k.res_srtkenmerk_key = 31) rk
WHERE ra.res_status_bo_key = 6 -- Verwerkt
AND ra.res_artikel_key = a.res_artikel_key
AND a.res_discipline_key = rdi.ins_discipline_key
AND rdi.prs_kostensoort_key =
kst.prs_kostensoort_key(+)
AND ra.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
AND rr.res_rsv_ruimte_host_key = p.prs_perslid_key
AND p.prs_perslid_key = pf.prs_perslid_key
AND p.prs_afdeling_key = af.prs_afdeling_key
AND rr.prs_kostenplaats_key = k.prs_kostenplaats_key
AND rr.res_rsv_ruimte_key = rk.res_rsv_ruimte_key(+)
UNION ALL
SELECT 'BES_BESTELOPDRACHT' regeltype,
bo.bes_bestelopdr_key regel_key,
boi.bes_bestelopdr_item_verwerkt datum,
kst.prs_kostensoort_oms afn_kostensoort,
kst.prs_kostensoort_refcode afn_kostensoort_refcode,
k.prs_kostenplaats_nr afn_kostenplaats,
--b.bes_bestelling_ordernr afn_deelproduct,
COALESCE (bk.bes_kenmerkbestell_waarde,
b.bes_bestelling_ordernr)
afn_deelproduct,
(SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 307
AND ud.fac_usrdata_verwijder IS NULL
AND ud.fac_usrdata_upper =
kst.prs_kostensoort_upper)
lev_kostensoort,
(SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 308
AND ud.fac_usrdata_verwijder IS NULL
AND ud.fac_usrdata_upper =
kst.prs_kostensoort_upper)
lev_kostenplaats,
(SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 309
AND ud.fac_usrdata_verwijder IS NULL
AND ud.fac_usrdata_upper =
kst.prs_kostensoort_upper)
lev_deelproduct,
(boi.bes_bestelopdr_item_prijs
* boi.bes_bestelopdr_item_aantal)
bedrag,
'besnr.' || b.bes_bestelling_key refregel_1,
pf.prs_perslid_naam_full refregel_2, -- Van besteller
a.prs_afdeling_naam
|| ' - '
|| a.prs_afdeling_omschrijving
refregel_3, -- Van afd. besteller
itd.ins_discipline_omschrijving refregel_4
FROM bes_bestelopdr bo,
bes_bestelopdr_item boi,
bes_bestelling_item bi,
bes_srtdeel isd,
bes_srtgroep isg,
ins_tab_discipline itd,
prs_kostensoort kst,
bes_bestelling b,
prs_perslid p,
prs_v_perslid_fullnames_all pf,
prs_afdeling a,
prs_kostenplaats k,
--mld_adres m,
(SELECT bk.bes_bestelling_key,
bk.bes_kenmerkbestell_waarde
FROM bes_kenmerkbestell bk, bes_kenmerk k
WHERE bk.bes_kenmerkbestell_verwijder IS NULL
AND bk.bes_kenmerk_key = k.bes_kenmerk_key
AND k.bes_kenmerk_verwijder IS NULL
AND k.bes_srtkenmerk_key = 241) bk
WHERE bo.bes_bestelopdr_status = 7 -- Verwerkt
AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
AND boi.bes_bestelopdr_item_key =
bi.bes_bestelopdr_item_key
AND bi.bes_srtdeel_key = isd.bes_srtdeel_key
AND isd.bes_srtgroep_key = isg.bes_srtgroep_key
AND isg.ins_discipline_key = itd.ins_discipline_key
AND itd.prs_kostensoort_key =
kst.prs_kostensoort_key(+)
AND bi.bes_bestelling_key = b.bes_bestelling_key
AND b.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_key = pf.prs_perslid_key
AND p.prs_afdeling_key = a.prs_afdeling_key
AND b.prs_kostenplaats_key = k.prs_kostenplaats_key
--AND b.mld_adres_key_lev = m.mld_adres_key(+)
AND b.bes_bestelling_key = bk.bes_bestelling_key(+)
UNION ALL
SELECT 'MLD_OPDRACHT' regeltype,
o.mld_opdr_key,
mld.getopdrachtstatusdate (o.mld_opdr_key, 7) datum,
COALESCE (kst1.prs_kostensoort_oms,
kst2.prs_kostensoort_oms)
afn_kostensoort, -- Melding, anders vakgroep
COALESCE (kst1.prs_kostensoort_refcode,
kst2.prs_kostensoort_refcode)
afn_kostensoort_refcode, -- Melding, anders vakgroep
k.prs_kostenplaats_nr afn_kostenplaats,
--o.mld_opdr_ordernr afn_deelproduct,
COALESCE (ok.mld_kenmerkopdr_waarde,
o.mld_opdr_ordernr)
afn_deelproduct,
(SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 307
AND ud.fac_usrdata_verwijder IS NULL
AND ud.fac_usrdata_upper =
COALESCE (kst1.prs_kostensoort_upper,
kst2.prs_kostensoort_upper))
lev_kostensoort,
(SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 308
AND ud.fac_usrdata_verwijder IS NULL
AND ud.fac_usrdata_upper =
COALESCE (kst1.prs_kostensoort_upper,
kst2.prs_kostensoort_upper))
lev_kostenplaats,
(SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 309
AND ud.fac_usrdata_verwijder IS NULL
AND ud.fac_usrdata_upper =
COALESCE (kst1.prs_kostensoort_upper,
kst2.prs_kostensoort_upper))
lev_deelproduct,
o.mld_opdr_kosten,
'opdrnr.'
|| o.mld_melding_key
|| '/'
|| o.mld_opdr_bedrijfopdr_volgnr
refregel_1,
pf.prs_perslid_naam_full refregel_2, -- Van melder
a.prs_afdeling_naam
|| ' - '
|| a.prs_afdeling_omschrijving
refregel_3, -- Van afd. melder
o.mld_opdr_omschrijving refregel_4
FROM mld_opdr o,
mld_melding m,
mld_stdmelding stm,
ins_tab_discipline itd,
prs_kostensoort kst1,
prs_kostensoort kst2,
alg_locatie l,
prs_perslid p,
prs_v_perslid_fullnames_all pf,
prs_afdeling a,
prs_kostenplaats k,
(SELECT ok.mld_opdr_key, ok.mld_kenmerkopdr_waarde
FROM mld_kenmerkopdr ok, mld_kenmerk k
WHERE ok.mld_kenmerkopdr_verwijder IS NULL
AND ok.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_kenmerk_verwijder IS NULL
AND k.mld_srtkenmerk_key = 752) ok
WHERE o.mld_statusopdr_key = 7 -- Verwerkt
AND o.mld_melding_key = m.mld_melding_key
AND m.mld_stdmelding_key = stm.mld_stdmelding_key
AND stm.prs_kostensoort_key =
kst1.prs_kostensoort_key(+)
AND stm.mld_ins_discipline_key = itd.ins_discipline_key
AND itd.prs_kostensoort_key =
kst2.prs_kostensoort_key(+)
AND m.mld_alg_locatie_key = l.alg_locatie_key
AND m.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_key = pf.prs_perslid_key
AND p.prs_afdeling_key = a.prs_afdeling_key
AND o.prs_kostenplaats_key = k.prs_kostenplaats_key
AND o.mld_opdr_key = ok.mld_opdr_key(+)) x;
/* Formatted on 2008/11/20 16:44 (Formatter Plus v4.8.7) */
CREATE OR REPLACE VIEW pzho_v_rap_export_coda_actual (hide_f_groepering,
POST,
doc_code,
header_descr,
proposed_no,
actual_no,
fclt_f_element1,
fclt_f_element2,
fclt_f_element3,
element4,
line_description,
debet,
credit,
line_type,
ext_ref,
ext_ref_aanvrager,
ext_ref_organisatie,
ext_ref_description
)
AS
SELECT groepering, 'post', 'ME-INT', NULL, '1', NULL, kostensoort,
kostenplaats, deelproduct, NULL,
referentieregel_1 || ' ' || substr(referentieregel_4,1,20),
REPLACE (TO_CHAR (debet, '999999999D99'), '.', ','),
REPLACE (TO_CHAR (credit, '999999999D99'), '.', ','), NULL,
referentieregel_1, referentieregel_2, referentieregel_3, substr(referentieregel_4,1,200)
FROM (
-- Tegenwaarde leverende kant/credit
SELECT v.lev_kostensoort
|| v.lev_kostenplaats
|| v.lev_deelproduct
|| '#0' groepering,
v.lev_kostensoort kostensoort,
v.lev_kostenplaats kostenplaats,
v.lev_deelproduct deelproduct, NULL debet,
SUM (v.bedrag) credit,
null referentieregel_1, -- id
null referentieregel_2, -- naam aanvrager
null referentieregel_3, -- organisatie
null referentieregel_4 -- omschrijving
FROM pzho_v_coda_afgemeld v
WHERE v.lev_kostensoort IS NOT NULL
AND v.lev_kostenplaats IS NOT NULL
AND v.lev_deelproduct IS NOT NULL
GROUP BY v.lev_kostensoort
|| v.lev_kostenplaats
|| v.lev_deelproduct
|| '#0',
v.lev_kostensoort,
v.lev_kostenplaats,
v.lev_deelproduct
UNION ALL
-- Doorbelasting afnemende kant/debet
SELECT v.lev_kostensoort
|| v.lev_kostenplaats
|| v.lev_deelproduct
|| '#1' groepering,
v.afn_kostensoort kostensoort,
v.afn_kostenplaats kostenplaats,
v.afn_deelproduct deelproduct, SUM (v.bedrag) debet,
NULL credit,
referentieregel_1, -- id
referentieregel_2, -- naam aanvrager
referentieregel_3, -- organisatie
referentieregel_4 -- omschrijving
FROM pzho_v_coda_afgemeld v
WHERE v.afn_kostensoort <> '99999'
AND v.afn_kostensoort IS NOT NULL
AND v.afn_kostenplaats IS NOT NULL
GROUP BY v.lev_kostensoort
|| v.lev_kostenplaats
|| v.lev_deelproduct
|| '#1',
v.afn_kostensoort,
v.afn_kostenplaats,
v.afn_deelproduct,
referentieregel_1,
referentieregel_2,
referentieregel_3,
referentieregel_4)
WHERE debet <> 0 OR credit <> 0
ORDER BY groepering, kostensoort, kostenplaats, deelproduct,
referentieregel_1, referentieregel_2, referentieregel_3, referentieregel_4;
/* Formatted on 2008/11/20 16:44 (Formatter Plus v4.8.7) */
CREATE OR REPLACE VIEW pzho_v_rap_export_coda_frozen (hide_f_groepering,
fclt_f_maand,
POST,
doc_code,
header_descr,
proposed_no,
actual_no,
fclt_f_element1,
fclt_f_element2,
fclt_f_element3,
element4,
line_description,
debet,
credit,
line_type,
ext_ref,
ext_ref_aanvrager,
ext_ref_organisatie,
ext_ref_description
)
AS
SELECT groepering,
TO_CHAR ( TO_DATE ('01' || TO_CHAR (datum, 'mmyyyy'), 'ddmmyyyy')
- 1,
'yyyy-mm'
) || ' (' || TO_CHAR (datum, 'dd-mm-yyyy') || ')' maand,
'post', 'ME-INT', NULL, '1', NULL, kostensoort, kostenplaats,
deelproduct, NULL,
referentieregel_1 || ' ' || substr(referentieregel_4,1,20),
REPLACE (TO_CHAR (debet, '999999999D99'), '.', ','),
REPLACE (TO_CHAR (credit, '999999999D99'), '.', ','), NULL,
referentieregel_1, referentieregel_2, referentieregel_3, substr(referentieregel_4,1,200)
FROM (
-- Tegenwaarde leverende kant/credit
SELECT v.lev_kostensoort
|| v.lev_kostenplaats
|| v.lev_deelproduct
|| '#0' groepering,
v.lev_kostensoort kostensoort,
v.lev_kostenplaats kostenplaats,
v.lev_deelproduct deelproduct, datum, NULL debet,
SUM (v.bedrag) credit,
null referentieregel_1, -- id
null referentieregel_2, -- naam aanvrager
null referentieregel_3, -- organisatie
null referentieregel_4 -- omschrijving
FROM pzho_v_coda_verwerkt v
WHERE v.lev_kostensoort IS NOT NULL
AND v.lev_kostenplaats IS NOT NULL
AND v.lev_deelproduct IS NOT NULL
GROUP BY v.lev_kostensoort
|| v.lev_kostenplaats
|| v.lev_deelproduct
|| '#0',
v.lev_kostensoort,
v.lev_kostenplaats,
v.lev_deelproduct,
datum
UNION ALL
-- Doorbelasting afnemende kant/debet
SELECT v.lev_kostensoort
|| v.lev_kostenplaats
|| v.lev_deelproduct
|| '#1' groepering,
v.afn_kostensoort kostensoort,
v.afn_kostenplaats kostenplaats,
v.afn_deelproduct deelproduct, datum,
SUM (v.bedrag) debet, NULL credit,
referentieregel_1, -- id
referentieregel_2, -- naam aanvrager
referentieregel_3, -- organisatie
referentieregel_4 -- omschrijving
FROM pzho_v_coda_verwerkt v
WHERE v.afn_kostensoort <> '99999'
AND v.afn_kostensoort IS NOT NULL
AND v.afn_kostenplaats IS NOT NULL
GROUP BY v.lev_kostensoort
|| v.lev_kostenplaats
|| v.lev_deelproduct
|| '#1',
v.afn_kostensoort,
v.afn_kostenplaats,
v.afn_deelproduct,
datum,
referentieregel_1,
referentieregel_2,
referentieregel_3,
referentieregel_4)
WHERE debet <> 0 OR credit <> 0
ORDER BY groepering, kostensoort, kostenplaats, deelproduct,
referentieregel_1, referentieregel_2, referentieregel_3, referentieregel_4;
/* Formatted on 2008/11/05 09:38 (Formatter Plus v4.8.7) */
CREATE OR REPLACE VIEW pzho_v_rap_export_coda_invalid (fclt_f_regeltype,
regel_key,
datum,
fclt_f_afn_kostensoort,
afn_kostensoort_refcode,
fclt_f_afn_kostenplaats,
fclt_f_afn_deelproduct,
fclt_f_lev_kostensoort,
fclt_f_lev_kostenplaats,
fclt_f_lev_deelproduct,
bedrag,
referentieregel_1,
referentieregel_2,
referentieregel_3
)
AS
SELECT v.regeltype, TO_CHAR (v.regel_key), TO_CHAR (v.datum, 'dd-mm-yyyy'),
v.afn_kostensoort, v.afn_kostensoort_refcode, v.afn_kostenplaats,
v.afn_deelproduct, v.lev_kostensoort, v.lev_kostenplaats,
v.lev_deelproduct,
REPLACE (TO_CHAR (v.bedrag, '999999999D99'), '.', ','),
v.referentieregel_1, v.referentieregel_2, v.referentieregel_3
FROM pzho_v_coda_afgemeld v
WHERE COALESCE (v.afn_kostensoort, '-') <> '99999'
AND ( v.afn_kostensoort IS NULL
OR v.afn_kostenplaats IS NULL
OR v.afn_deelproduct IS NULL
OR v.lev_kostensoort IS NULL
OR v.lev_kostenplaats IS NULL
)
/
---- EXPORT
----
/* Formatted on 2008/11/20 16:40 (Formatter Plus v4.8.7) */
CREATE OR REPLACE PROCEDURE pzho_select_coda (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2
)
AS
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
-- SUBPROC
PROCEDURE prepare_doorbelasting (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2
)
AS
-- Cursor over alle regels voor doorbelasting!
CURSOR c1
IS
SELECT groepering, kostensoort, kostenplaats, deelproduct, debet,
credit
FROM (
-- Tegenwaarde leverende kant/credit
SELECT v.lev_kostensoort
|| v.lev_kostenplaats
|| v.lev_deelproduct
|| '#0' groepering,
v.lev_kostensoort kostensoort,
v.lev_kostenplaats kostenplaats,
v.lev_deelproduct deelproduct, NULL debet,
SUM (v.bedrag) credit
FROM pzho_v_coda_afgemeld v
WHERE v.lev_kostensoort IS NOT NULL
AND v.lev_kostenplaats IS NOT NULL
AND v.lev_deelproduct IS NOT NULL
GROUP BY v.lev_kostensoort
|| v.lev_kostenplaats
|| v.lev_deelproduct
|| '#0',
v.lev_kostensoort,
v.lev_kostenplaats,
v.lev_deelproduct
UNION ALL
-- Doorbelasting afnemende kant/debet
SELECT v.lev_kostensoort
|| v.lev_kostenplaats
|| v.lev_deelproduct
|| '#1' groepering,
v.afn_kostensoort kostensoort,
v.afn_kostenplaats kostenplaats,
v.afn_deelproduct deelproduct,
SUM (v.bedrag) debet, NULL credit
FROM pzho_v_coda_afgemeld v
WHERE v.afn_kostensoort <> '99999'
AND v.afn_kostensoort IS NOT NULL
AND v.afn_kostenplaats IS NOT NULL
GROUP BY v.lev_kostensoort
|| v.lev_kostenplaats
|| v.lev_deelproduct
|| '#1',
v.afn_kostensoort,
v.afn_kostenplaats,
v.afn_deelproduct)
WHERE debet <> 0 OR credit <> 0
ORDER BY groepering, kostensoort, kostenplaats, deelproduct;
export_datum DATE;
export_maand VARCHAR2 (10);
regelnr NUMBER;
BEGIN
export_datum := SYSDATE;
export_maand :=
TO_CHAR ( TO_DATE ('01' || TO_CHAR (export_datum, 'mmyyyy'),
'ddmmyyyy'
)
- 1,
'mon. yyyy'
);
regelnr := 0;
FOR rec IN c1
LOOP
INSERT INTO pzho_exp_coda
(regelnummer,
export_regel,
export_datum, functie
)
VALUES (regelnr,
'"post";' -- Post
|| '"ME-INT";' -- Doc Code
|| '"";' -- Header Description (empty)
|| '"1";' -- Proposed No.
|| '"";"' -- Actual No. (empty)
|| rec.kostensoort -- Element 1
|| '";"'
|| rec.kostenplaats -- Element 2
|| '";"'
|| rec.deelproduct -- Element 3
|| '";'
|| '"";' -- Element 4 (empty)
|| '"facilitaire kosten '
|| export_maand -- Line Descr.
|| '";"'
|| REPLACE (TO_CHAR (rec.debet, '999999999D99'),
'.',
','
) -- Debet
|| '";"'
|| REPLACE (TO_CHAR (rec.credit, '999999999D99'),
'.',
','
) -- Credit
|| '";'
|| '"";' -- Line Type (empty)
|| '"";"";"";"";"";""', -- Ext. Ref. 1 t/m 6 (empty)
export_datum, 'E'
);
regelnr := regelnr + 1;
END LOOP;
fac.writelog (p_applname,
'S',
'Aantal doorbelastingsregels ge<67>xporteerd: '
|| TO_CHAR (regelnr),
''
);
COMMIT;
END;
-- SUBPROC
PROCEDURE close_valid_tv_regels (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2
)
AS
-- Cursor over ALLE geldige/volledige TV-regels, incl. kostensoort '99999'!
CURSOR c2
IS
SELECT v.regeltype, v.regel_key
FROM pzho_v_coda_afgemeld v
WHERE v.afn_kostensoort IS NOT NULL
AND v.afn_kostenplaats IS NOT NULL
AND v.lev_kostensoort IS NOT NULL
AND v.lev_kostenplaats IS NOT NULL
AND v.lev_deelproduct IS NOT NULL
ORDER BY v.regeltype, v.regel_key;
regelnr NUMBER;
close_date DATE;
BEGIN
close_date := SYSDATE;
regelnr := 0;
FOR rec IN c2
LOOP
IF (rec.regeltype = 'RES_ARTIKEL')
THEN
UPDATE res_rsv_artikel ra
SET ra.res_status_bo_key = 6, -- Verwerkt
ra.res_rsv_artikel_verwerkt = close_date -- + datum
WHERE ra.res_rsv_artikel_key = rec.regel_key;
ELSE
IF (rec.regeltype = 'BES_BESTELOPDRACHT')
THEN
UPDATE bes_bestelopdr_item boi
SET boi.bes_bestelopdr_item_status = 7, -- Verwerkt
boi.bes_bestelopdr_item_verwerkt = close_date -- + datum
WHERE boi.bes_bestelopdr_key = rec.regel_key;
UPDATE bes_bestelopdr bo
SET bo.bes_bestelopdr_status = 7 -- Verwerkt
WHERE bo.bes_bestelopdr_key = rec.regel_key;
ELSE
IF (rec.regeltype = 'MLD_OPDRACHT')
THEN
mld.setopdrachtstatus (rec.regel_key, 7, 14424); -- Verwerkt door Facilitor
ELSE
fac.writelog (p_applname,
'E',
'Regeltype ongedefinieerd!',
''
);
END IF;
END IF;
END IF;
regelnr := regelnr + 1;
END LOOP;
fac.writelog (p_applname,
'S',
'Aantal TV-regels administratief verwerkt: '
|| TO_CHAR (regelnr),
''
);
COMMIT;
END;
BEGIN
-- Verwijder de voorgaande exportgegevens.
DELETE FROM pzho_exp_coda;
prepare_doorbelasting (p_applname, p_applrun);
close_valid_tv_regels (p_applname, p_applrun);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 150);
v_errormsg :=
v_errormsg
|| 'ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.writelog (p_applname,
'E',
'Exportproces CODA afgebroken!',
v_errormsg
);
END;
/
CREATE OR REPLACE VIEW pzho_v_export_coda (RESULT, result_order)
AS
SELECT e.export_regel, e.regelnummer
FROM pzho_exp_coda e
/
CREATE OR REPLACE PROCEDURE pzho_export_coda (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2
)
AS
v_dummy VARCHAR2 (128);
BEGIN
v_dummy :=
'Het echte wegschrijven is al gebeurd door gen_export.exe met de table PZHO_EXP_CODA';
END;
/
CREATE OR REPLACE VIEW pzho_v_sync_alg_ruimte (
alg_ruimte_key,
alg_verdieping_key,
cadlabel
)
AS
SELECT r.alg_ruimte_key,
r.alg_verdieping_key,
alg_gebouw_code || alg_verdieping_code || '.' || alg_ruimte_nr
FROM alg_v_aanwezigruimte r, alg_verdieping v, alg_gebouw g
WHERE r.alg_verdieping_key = v.alg_verdieping_key
AND v.alg_gebouw_key = g.alg_gebouw_key;
CREATE OR REPLACE view pzho_v_sync_prj_ruimte
(
prj_scenario_key,
prj_ruimte_key,
alg_verdieping_key,
cadlabel
)
AS
SELECT r.prj_scenario_key,
r.prj_ruimte_key,
r.alg_verdieping_key,
alg_gebouw_code || alg_verdieping_code || '.' || prj_ruimte_nr
FROM prj_ruimte r, alg_verdieping v, alg_gebouw g
WHERE r.alg_verdieping_key = v.alg_verdieping_key
AND v.alg_gebouw_key = g.alg_gebouw_key;
CREATE OR REPLACE VIEW pzho_v_afdeling (
niveau,
prs_afdeling_key,
prs_bedrijf_key,
prs_afdeling_parentkey,
prs_afdeling_naam,
prs_afdeling_upper,
prs_afdeling_omschrijving,
prs_afdeling_aanmaak,
prs_afdeling_verwijder,
mld_adres_key,
prs_kostenplaats_key,
dir_key,
afd_key,
bur_key
)
AS
SELECT 1,
a.*,
(SELECT prs_afdeling_key
FROM prs_afdeling au
WHERE au.prs_afdeling_verwijder IS NULL
AND au.prs_afdeling_upper =
SUBSTR (a.prs_afdeling_upper, 1, 1) || '0000')
dir_key,
(SELECT prs_afdeling_key
FROM prs_afdeling au
WHERE au.prs_afdeling_verwijder IS NULL
AND au.prs_afdeling_upper =
SUBSTR (a.prs_afdeling_upper, 1, 2) || '000')
afd_key,
(SELECT prs_afdeling_key
FROM prs_afdeling au
WHERE au.prs_afdeling_verwijder IS NULL
AND au.prs_afdeling_upper =
SUBSTR (a.prs_afdeling_upper, 1, 3) || '00')
bur_key
FROM prs_afdeling a
WHERE SUBSTR (prs_afdeling_upper, 1, 1) <> '0'
AND SUBSTR (prs_afdeling_upper, 2, 4) = '0000'
AND prs_afdeling_verwijder IS NULL
UNION ALL
SELECT 2,
a.*,
(SELECT prs_afdeling_key
FROM prs_afdeling au
WHERE au.prs_afdeling_verwijder IS NULL
AND au.prs_afdeling_upper =
SUBSTR (a.prs_afdeling_upper, 1, 1) || '0000')
dir_key,
(SELECT prs_afdeling_key
FROM prs_afdeling au
WHERE au.prs_afdeling_verwijder IS NULL
AND au.prs_afdeling_upper =
SUBSTR (a.prs_afdeling_upper, 1, 2) || '000')
afd_key,
(SELECT prs_afdeling_key
FROM prs_afdeling au
WHERE au.prs_afdeling_verwijder IS NULL
AND au.prs_afdeling_upper =
SUBSTR (a.prs_afdeling_upper, 1, 3) || '00')
bur_key
FROM prs_afdeling a
WHERE SUBSTR (prs_afdeling_upper, 2, 1) <> '0'
AND SUBSTR (prs_afdeling_upper, 3, 3) = '000'
AND prs_afdeling_verwijder IS NULL
UNION ALL
SELECT 3,
a.*,
(SELECT prs_afdeling_key
FROM prs_afdeling au
WHERE au.prs_afdeling_verwijder IS NULL
AND au.prs_afdeling_upper =
SUBSTR (a.prs_afdeling_upper, 1, 1) || '0000')
dir_key,
(SELECT prs_afdeling_key
FROM prs_afdeling au
WHERE au.prs_afdeling_verwijder IS NULL
AND au.prs_afdeling_upper =
SUBSTR (a.prs_afdeling_upper, 1, 2) || '000')
afd_key,
(SELECT prs_afdeling_key
FROM prs_afdeling au
WHERE au.prs_afdeling_verwijder IS NULL
AND au.prs_afdeling_upper =
SUBSTR (a.prs_afdeling_upper, 1, 3) || '00')
bur_key
FROM prs_afdeling a
WHERE SUBSTR (prs_afdeling_upper, 3, 1) <> '0'
AND SUBSTR (prs_afdeling_upper, 4, 2) = '00'
AND prs_afdeling_verwijder IS NULL
UNION ALL
SELECT 4,
a.*,
(SELECT prs_afdeling_key
FROM prs_afdeling au
WHERE au.prs_afdeling_verwijder IS NULL
AND au.prs_afdeling_upper =
SUBSTR (a.prs_afdeling_upper, 1, 1) || '0000')
dir_key,
(SELECT prs_afdeling_key
FROM prs_afdeling au
WHERE au.prs_afdeling_verwijder IS NULL
AND au.prs_afdeling_upper =
SUBSTR (a.prs_afdeling_upper, 1, 2) || '000')
afd_key,
(SELECT prs_afdeling_key
FROM prs_afdeling au
WHERE au.prs_afdeling_verwijder IS NULL
AND au.prs_afdeling_upper =
SUBSTR (a.prs_afdeling_upper, 1, 3) || '00')
bur_key
FROM prs_afdeling a
WHERE SUBSTR (prs_afdeling_upper, 4, 1) <> '0'
AND SUBSTR (prs_afdeling_upper, 5, 1) = '0'
AND prs_afdeling_verwijder IS NULL
UNION ALL
SELECT 5,
a.*,
(SELECT prs_afdeling_key
FROM prs_afdeling au
WHERE au.prs_afdeling_verwijder IS NULL
AND au.prs_afdeling_upper =
SUBSTR (a.prs_afdeling_upper, 1, 1) || '0000')
dir_key,
(SELECT prs_afdeling_key
FROM prs_afdeling au
WHERE au.prs_afdeling_verwijder IS NULL
AND au.prs_afdeling_upper =
SUBSTR (a.prs_afdeling_upper, 1, 2) || '000')
afd_key,
(SELECT prs_afdeling_key
FROM prs_afdeling au
WHERE au.prs_afdeling_verwijder IS NULL
AND au.prs_afdeling_upper =
SUBSTR (a.prs_afdeling_upper, 1, 3) || '00')
bur_key
FROM prs_afdeling a
WHERE SUBSTR (prs_afdeling_upper, 5, 1) <> '0'
AND prs_afdeling_verwijder IS NULL
AND fac.safe_to_number (prs_afdeling_upper) > 9999
UNION ALL
SELECT NULL, a.*, NULL, NULL, NULL
FROM prs_afdeling a
WHERE (fac.safe_to_number (prs_afdeling_upper) IS NULL
OR fac.safe_to_number (prs_afdeling_upper) < 9999)
AND prs_afdeling_verwijder IS NULL;
-----------------------------------------------------------------------------------------------------------------
--
-- werkelijkheid
--
-----------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE VIEW pzho_v_thema_ruimte_dir (
alg_ruimte_key,
waarde,
waarde_key
)
AS
SELECT x.alg_ruimte_key,
DECODE (y.aantal,
NULL, '[Leegstand]',
1, SUBSTR (y.sp, 1, 60),
'Meer dan 1 directie!'),
DECODE (y.aantal, NULL, -1, 1, y.sp_key, NULL)
FROM (SELECT r.alg_ruimte_key
FROM alg_v_aanwezigruimte r) x
LEFT JOIN
(SELECT ra.alg_ruimte_key,
MIN ( (SELECT COALESCE (prs_afdeling_omschrijving,
'Onbekende directie'
)
FROM prs_afdeling dir
WHERE dir.prs_afdeling_key = a.dir_key)
)
sp,
MIN (a.dir_key) sp_key,
COUNT (DISTINCT a.dir_key) aantal
FROM prs_v_aanwezigruimteafdeling ra, pzho_v_afdeling a
WHERE ra.prs_afdeling_key = a.prs_afdeling_key
GROUP BY ra.alg_ruimte_key) y
ON x.alg_ruimte_key = y.alg_ruimte_key
UNION ALL
SELECT NULL, SUBSTR (a.prs_afdeling_omschrijving, 1, 60), a.dir_key
FROM pzho_v_afdeling a
WHERE niveau = 1
AND NOT EXISTS
(SELECT ra.prs_afdeling_key
FROM prs_ruimteafdeling ra, pzho_v_afdeling afd
WHERE ra.prs_ruimteafdeling_verwijder IS NULL
AND ra.prs_afdeling_key = afd.prs_afdeling_key
AND afd.dir_key = a.dir_key);
CREATE OR REPLACE VIEW pzho_v_rap_dir_bezettting (afdeling_omschrijving, bvo, aantalwp, max_wp) AS
SELECT prs_afdeling_omschrijving,
SUM (alg_ruimte_bruto_vloeropp) bvo,
SUM (wp) aantalwp,
SUM (max_wp) maxaantalwp
FROM (select a.prs_afdeling_omschrijving,
alg_ruimte_bruto_vloeropp,
NVL (TRUNC ( (alg_ruimte_bruto_vloeropp - 1) / 6.5)
,
0
)
max_wp,
(select count(*) from prs_werkplek wp where r.alg_ruimte_key = wp.prs_alg_ruimte_key
and coalesce(wp.prs_werkplek_virtueel,0) <> 1) wp
FROM prs_ruimteafdeling ra,
prs_afdeling a,
pzho_v_afdeling pa,
alg_srtruimte sr,
alg_ruimte r
WHERE pa.prs_afdeling_key = ra.prs_afdeling_key
AND pa.dir_key = a.prs_afdeling_key
AND ra.alg_ruimte_key = r.alg_ruimte_key
and r.alg_srtruimte_key = sr.alg_srtruimte_key
and sr.prs_bevat_werkplek = 1 )
GROUP BY prs_afdeling_omschrijving;
CREATE OR REPLACE VIEW pzho_v_thema_ruimte_afd (
alg_ruimte_key,
waarde,
waarde_key
)
AS
SELECT x.alg_ruimte_key,
DECODE (y.aantal,
NULL, '[Leegstand]',
1, SUBSTR (y.sp, 1, 60),
'Meer dan 1 afdeling!'),
DECODE (y.aantal, NULL, -1, 1, y.sp_key, NULL)
FROM (SELECT r.alg_ruimte_key
FROM alg_v_aanwezigruimte r) x
LEFT JOIN
(SELECT ra.alg_ruimte_key,
MIN ( (SELECT COALESCE (prs_afdeling_omschrijving,
'Onbekende directie'
)
FROM prs_afdeling afd
WHERE afd.prs_afdeling_key = a.afd_key)
)
sp,
MIN (a.afd_key) sp_key,
COUNT (DISTINCT a.afd_key) aantal
FROM prs_v_aanwezigruimteafdeling ra, pzho_v_afdeling a
WHERE ra.prs_afdeling_key = a.prs_afdeling_key
GROUP BY ra.alg_ruimte_key) y
ON x.alg_ruimte_key = y.alg_ruimte_key
UNION ALL
SELECT NULL, SUBSTR (a.prs_afdeling_omschrijving, 1, 60), a.afd_key
FROM pzho_v_afdeling a
WHERE NOT EXISTS
(SELECT ra.prs_afdeling_key
FROM prs_ruimteafdeling ra, pzho_v_afdeling afd
WHERE ra.prs_ruimteafdeling_verwijder IS NULL
AND ra.prs_afdeling_key = afd.prs_afdeling_key
AND afd.afd_key = a.afd_key);
CREATE OR REPLACE VIEW pzho_v_rap_afd_bezettting (fclt_f_directie, afdeling_omschrijving, bvo, aantalwp, max_wp) AS
SELECT directie, prs_afdeling_omschrijving,
SUM (alg_ruimte_bruto_vloeropp) bvo,
SUM (wp) aantalwp,
trunc(SUM (max_wp)) maxaantalwp
FROM (SELECT (select prs_afdeling_omschrijving from prs_afdeling where prs_afdeling_key = pa.dir_key) directie,
a.prs_afdeling_omschrijving,
alg_ruimte_bruto_vloeropp,
NVL (TRUNC ( (alg_ruimte_bruto_vloeropp - 1) / 6,5)
,
0
)
max_wp,
(select count(*) from prs_werkplek wp where r.alg_ruimte_key = wp.prs_alg_ruimte_key
and coalesce(wp.prs_werkplek_virtueel,0) <> 1) wp
FROM prs_ruimteafdeling ra,
prs_afdeling a,
pzho_v_afdeling pa,
alg_srtruimte sr,
alg_ruimte r
WHERE pa.prs_afdeling_key = ra.prs_afdeling_key
AND pa.afd_key = a.prs_afdeling_key
AND ra.alg_ruimte_key = r.alg_ruimte_key
and r.alg_srtruimte_key = sr.alg_srtruimte_key
and sr.prs_bevat_werkplek = 1)
GROUP BY prs_afdeling_omschrijving, directie;
-- view om werkplekbezetting in de actualiteit te tonen.
CREATE OR REPLACE FORCE VIEW pzho_v_label_bewonerwpe (
prs_werkplek_key,
waarde,
highlight
)
AS
SELECT DISTINCT
prs_werkplek_key, waarde, 1
FROM (SELECT w.prs_werkplek_key,
p.prs_perslid_naam
|| DECODE (p.prs_perslid_voornaam,
NULL,
'',
CHR (10)
|| '[s20] ('
|| p.prs_perslid_voornaam
|| ')'
)
|| ': '
|| TO_CHAR (NVL (pw.prs_perslidwerkplek_bezetting, 0))
|| '%'
waarde
FROM alg_ruimte r,
prs_werkplek w,
prs_perslidwerkplek pw,
prs_perslid p
WHERE w.prs_werkplek_key = pw.prs_werkplek_key
AND pw.prs_perslid_key IS NOT NULL
AND pw.prs_perslid_key = p.prs_perslid_key
AND w.prs_alg_ruimte_key = r.alg_ruimte_key
UNION
SELECT w.prs_werkplek_key,
' Vrij: '
|| TO_CHAR(100
- NVL (SUM (pw.prs_perslidwerkplek_bezetting),
0
))
|| '%'
FROM prs_werkplek w,
prs_perslidwerkplek pw
WHERE w.prs_werkplek_key = pw.prs_werkplek_key(+)
GROUP BY w.prs_werkplek_key,
w.prs_werkplek_key,
w.prs_werkplek_volgnr
HAVING SUM (NVL (pw.prs_perslidwerkplek_bezetting, 0)) < 100)
data;
-- gemiddelde opp per werkplek
CREATE OR REPLACE FORCE VIEW pzho_v_thema_wpopp (
alg_ruimte_key,
waarde
)
AS
SELECT wp.prs_alg_ruimte_key,
to_char(trunc(coalesce(r.alg_ruimte_bruto_vloeropp-1,0) / coalesce(COUNT (prs_werkplek_key),1)))
FROM prs_werkplek wp, alg_ruimte r
WHERE wp.prs_alg_ruimte_key = r.alg_ruimte_key
GROUP BY wp.prs_alg_ruimte_key, r.alg_ruimte_bruto_vloeropp;
CREATE OR REPLACE FORCE VIEW pzho_v_thema_ruimte_wp_max (
alg_ruimte_key,
waarde
)
AS
SELECT r.alg_ruimte_key,
NVL (NVL (fac.safe_to_number (alg_onrgoedkenmerk_waarde),
TRUNC ( (alg_ruimte_bruto_vloeropp - 1) / 6.5)
),
0
)
FROM alg_v_aanwezigruimte r
LEFT JOIN
(SELECT alg_onrgoedkenmerk_waarde, alg_onrgoed_key
FROM alg_onrgoedkenmerk k
WHERE alg_kenmerk_key = 1040
AND alg_onrgoed_niveau = 'R'
AND alg_onrgoedkenmerk_verwijder IS NULL) ok
ON r.alg_ruimte_key = ok.alg_onrgoed_key
/
/* -- vul de ruimteafdeling met de huidige werkplekbezetting
insert into prs_ruimteafdeling (alg_ruimte_key, prs_afdeling_key)
select distinct wpg.alg_ruimte_key, a.prs_afdeling_key from prs_v_perslidwerkplek_gegevens wpg, prs_perslid p, prs_afdeling a
where wpg.prs_perslid_key = p.prs_perslid_key and p.prs_afdeling_key = a.prs_afdeling_key
*/
----------------------------------------------------------------------------------------------------------
--
-- project/scenario omgeving
--
----------------------------------------------------------------------------------------------------------
CREATE OR REPLACE VIEW pzho_v_prj_thema_ruimte_dir (
prj_ruimte_key,
waarde,
waarde_key
)
AS
SELECT x.prj_ruimte_key,
DECODE (y.aantal,
NULL, '[Leegstand]',
1, SUBSTR (y.dir, 1, 60),
'Meer dan 1 directie!'),
DECODE (y.aantal, NULL, -1, 1, y.dir_key, NULL)
FROM (SELECT r.prj_ruimte_key
FROM prj_ruimte r
WHERE r.prj_ruimte_verwijder IS NULL) x
LEFT JOIN
(SELECT ra.prj_ruimte_key,
MIN ((SELECT COALESCE (prs_afdeling_omschrijving,
'Onbekende directie'
)
FROM prs_afdeling dir
WHERE dir.prs_afdeling_key = a.dir_key)
)
dir,
MIN (a.dir_key) dir_key,
COUNT (DISTINCT a.dir_key) aantal
FROM prj_ruimteafdeling ra, pzho_v_afdeling a
WHERE ra.prj_ruimteafdeling_verwijder IS NULL
AND ra.prs_afdeling_key = a.prs_afdeling_key
GROUP BY ra.prj_ruimte_key) y
ON x.prj_ruimte_key = y.prj_ruimte_key
UNION ALL
SELECT NULL, substr(a.prs_afdeling_omschrijving,1,60), a.dir_key
FROM pzho_v_afdeling a
WHERE niveau = 1
AND NOT EXISTS
(SELECT ra.prs_afdeling_key
FROM prj_ruimteafdeling ra, pzho_v_afdeling afd
WHERE ra.prj_ruimteafdeling_verwijder IS NULL
AND ra.prs_afdeling_key = afd.prs_afdeling_key
AND afd.dir_key = a.dir_key);
/
CREATE OR REPLACE TRIGGER pzho_t_prj_t_ruimte_dir_i_iu
INSTEAD OF INSERT OR UPDATE
ON pzho_v_prj_thema_ruimte_dir
DECLARE
oracle_err_mes VARCHAR2 (1000);
BEGIN
IF UPDATING -- oude logisch weggooien, dus g<><67>n DELETE!
THEN
UPDATE prj_ruimteafdeling
SET prj_ruimteafdeling_verwijder = SYSDATE
WHERE prj_ruimte_key = :new.prj_ruimte_key
AND prs_afdeling_key <> :new.waarde_key;
END IF;
BEGIN
IF :new.waarde_key <> -1
THEN
UPDATE prj_ruimteafdeling
SET prj_ruimteafdeling_verwijder = NULL
WHERE prj_ruimte_key = :new.prj_ruimte_key
AND prs_afdeling_key = :new.waarde_key;
BEGIN
INSERT INTO prj_ruimteafdeling (prj_ruimte_key, prs_afdeling_key)
VALUES (:new.prj_ruimte_key, :new.waarde_key);
EXCEPTION
WHEN DUP_VAL_ON_INDEX -- was al aanwezig
THEN
NULL;
END;
-- INSERT INTO imp_log (imp_log_applicatie,
-- imp_log_run,
-- imp_log_datum,
-- imp_log_status,
-- imp_log_omschrijving,
-- imp_log_hint)
-- VALUES ('MOVE_DIR',
-- 'now',
-- SYSDATE,
-- 'I',
-- 'directie aangepast:'
-- || COALESCE((SELECT prs_afdeling_omschrijving
-- FROM prs_afdeling
-- WHERE prs_afdeling_key = :old.waarde_key), 'Leegstand')
-- || ' -> '
-- || (SELECT prs_afdeling_omschrijving
-- FROM prs_afdeling
-- WHERE prs_afdeling_key = :new.waarde_key),
-- :new.prj_ruimte_key);
ELSE
-- INSERT INTO imp_log (imp_log_applicatie,
-- imp_log_run,
-- imp_log_datum,
-- imp_log_status,
-- imp_log_omschrijving,
-- imp_log_hint)
-- VALUES ('MOVE_DIR',
-- 'now',
-- SYSDATE,
-- 'I',
-- 'ruimte op leegstand gezet',
-- :new.prj_ruimte_key);
NULL;
END IF;
EXCEPTION
WHEN OTHERS
THEN
NULL;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
-- INSERT INTO imp_log (imp_log_applicatie,
-- imp_log_run,
-- imp_log_datum,
-- imp_log_status,
-- imp_log_omschrijving,
-- imp_log_hint)
-- VALUES ('MOVE_DIR',
-- 'now',
-- SYSDATE,
-- 'E',
-- oracle_err_mes,
-- :new.prj_ruimte_key);
END;
END;
/
CREATE OR REPLACE VIEW pzho_v_rap_prj_dir_bezettting (
fclt_f_scenario,
afdeling_omschrijving,
scenario_opp,
opp,
scenario_wp,
wp,
max_wp
)
AS
SELECT prj_scenario_omschrijving,
coalesce(prs_afdeling_omschrijving, 'Onbekend'),
SUM (prj_ruimte_vloeropp),
SUM (alg_ruimte_vloeropp),
SUM (prj_wp),
SUM (wp),
SUM (max_wp)
FROM (SELECT (pr_r.prj_ruimte_bruto_vloeropp
* pr_ra.prj_ruimteafdeling_bezetting)
/ 100
prj_ruimte_vloeropp,
(SELECT COUNT ( * )
FROM prj_werkplek wp
WHERE pr_r.prj_ruimte_key = wp.prj_ruimte_key)
prj_wp,
pr_a.prs_afdeling_omschrijving,
s.prj_scenario_omschrijving,
0 alg_ruimte_vloeropp,
0 wp,
0 max_wp
FROM alg_ruimte r,
prj_ruimte pr_r,
prj_scenario s,
prj_ruimteafdeling pr_ra,
pzho_v_afdeling pr_pa,
prs_afdeling pr_a,
alg_srtruimte sr
WHERE pr_r.alg_ruimte_key = r.alg_ruimte_key
AND pr_r.prj_scenario_key = s.prj_scenario_key
AND pr_r.prj_ruimte_key = pr_ra.prj_ruimte_key(+)
AND pr_ra.prs_afdeling_key = pr_pa.prs_afdeling_key(+)
AND pr_r.prj_ruimte_verwijder IS NULL
AND pr_pa.dir_key = pr_a.prs_afdeling_key(+)
AND r.alg_srtruimte_key = sr.alg_srtruimte_key
AND sr.prs_bevat_werkplek = 1
UNION ALL
SELECT 0,
0,
a.prs_afdeling_omschrijving,
s.prj_scenario_omschrijving,
(r.alg_ruimte_bruto_vloeropp * ra.prs_ruimteafdeling_bezetting)
/ 100
alg_ruimte_vloeropp,
(SELECT COUNT ( * )
FROM prs_werkplek wp
WHERE r.alg_ruimte_key = wp.prs_alg_ruimte_key
AND COALESCE (wp.prs_werkplek_virtueel, 0) <> 1)
wp,
NVL (TRUNC ( (alg_ruimte_bruto_vloeropp - 1) / 6.5), 0) max_wp
FROM alg_ruimte r,
prj_ruimte pr_r,
prj_scenario s,
prs_ruimteafdeling ra,
pzho_v_afdeling pa,
prs_afdeling a,
alg_srtruimte sr
WHERE pr_r.alg_ruimte_key = r.alg_ruimte_key
AND pr_r.prj_scenario_key = s.prj_scenario_key
AND prj_ruimte_verwijder IS NULL
AND r.alg_srtruimte_key = sr.alg_srtruimte_key
AND sr.prs_bevat_werkplek = 1
AND r.alg_ruimte_key = ra.alg_ruimte_key(+)
AND ra.prs_afdeling_key = pa.prs_afdeling_key(+)
AND pa.dir_key = a.prs_afdeling_key(+)
UNION ALL
SELECT (r.alg_ruimte_bruto_vloeropp
* ra.prs_ruimteafdeling_bezetting)
/ 100
alg_ruimte_vloeropp,
(SELECT COUNT ( * )
FROM prs_werkplek wp
WHERE r.alg_ruimte_key = wp.prs_alg_ruimte_key
AND COALESCE (wp.prs_werkplek_virtueel, 0) <> 1)
prj_wp,
a.prs_afdeling_omschrijving,
s.prj_scenario_omschrijving,
(r.alg_ruimte_bruto_vloeropp * ra.prs_ruimteafdeling_bezetting)
/ 100
alg_ruimte_vloeropp,
(SELECT COUNT ( * )
FROM prs_werkplek wp
WHERE r.alg_ruimte_key = wp.prs_alg_ruimte_key
AND COALESCE (wp.prs_werkplek_virtueel, 0) <> 1)
wp,
NVL (TRUNC ( (alg_ruimte_bruto_vloeropp - 1) / 6.5), 0)
FROM alg_ruimte r,
prj_scenario s,
prs_ruimteafdeling ra,
pzho_v_afdeling pa,
alg_srtruimte sr,
prs_afdeling a
WHERE r.alg_ruimte_key = ra.alg_ruimte_key(+)
AND ra.prs_afdeling_key = pa.prs_afdeling_key(+)
AND pa.dir_key = a.prs_afdeling_key(+)
AND r.alg_ruimte_verwijder IS NULL
AND r.alg_srtruimte_key = sr.alg_srtruimte_key
AND sr.prs_bevat_werkplek = 1
AND NOT EXISTS
(SELECT alg_ruimte_key
FROM prj_ruimte pr
WHERE pr.alg_ruimte_key = r.alg_ruimte_key
AND pr.prj_scenario_key = s.prj_scenario_key))
GROUP BY prs_afdeling_omschrijving, prj_scenario_omschrijving;
CREATE OR REPLACE VIEW pzho_v_prj_label_dir (
prj_ruimte_key,
waarde
)
AS
SELECT x.prj_ruimte_key,
SUBSTR (y.dir, 1, 60)
FROM (SELECT r.prj_ruimte_key
FROM prj_ruimte r
WHERE r.prj_ruimte_verwijder IS NULL) x
LEFT JOIN
(SELECT ra.prj_ruimte_key,
MIN ((SELECT COALESCE (prs_afdeling_omschrijving,
'Onbekende directie'
)
FROM prs_afdeling dir
WHERE dir.prs_afdeling_key = a.dir_key)
)
dir,
MIN (a.dir_key) dir_key,
COUNT (DISTINCT a.dir_key) aantal
FROM prj_ruimteafdeling ra, pzho_v_afdeling a
WHERE ra.prj_ruimteafdeling_verwijder IS NULL
AND ra.prs_afdeling_key = a.prs_afdeling_key
GROUP BY ra.prj_ruimte_key) y
ON x.prj_ruimte_key = y.prj_ruimte_key;
CREATE OR REPLACE view pzho_v_prj_thema_ruimte_afd
(
prj_ruimte_key,
waarde,
waarde_key,
parent_key
)
AS
SELECT x.prj_ruimte_key,
DECODE (y.aantal,
NULL, '[Leegstand]',
1, SUBSTR (y.afd, 1, 60),
'Meer dan 1 afdeling!'),
DECODE (y.aantal,
NULL, -1,
1, DECODE (niveau, 1, NULL, y.afd_key),
NULL),
(SELECT MAX (dir_key) dir_key
FROM pzho_v_afdeling afd
WHERE afd.prs_afdeling_key = y.afd_key) parent_key
FROM (SELECT r.prj_ruimte_key
FROM prj_ruimte r
WHERE r.prj_ruimte_verwijder IS NULL) x
LEFT JOIN
( SELECT ra.prj_ruimte_key,
MIN( (SELECT COALESCE (prs_afdeling_omschrijving,
'Onbekende afdeling')
FROM prs_afdeling afd
WHERE afd.prs_afdeling_key = a.afd_key))
afd,
MIN (a.afd_key) afd_key,
COUNT (DISTINCT a.afd_key) aantal,
MIN (a.niveau) niveau
FROM prj_ruimteafdeling ra, pzho_v_afdeling a
WHERE ra.prj_ruimteafdeling_verwijder IS NULL
AND ra.prs_afdeling_key = a.prs_afdeling_key
GROUP BY ra.prj_ruimte_key) y
ON x.prj_ruimte_key = y.prj_ruimte_key
UNION ALL
SELECT NULL, SUBSTR (a.prs_afdeling_omschrijving, 1, 60), a.afd_key, null
FROM pzho_v_afdeling a
WHERE niveau = 2
AND NOT EXISTS
(SELECT ra.prs_afdeling_key
FROM prj_ruimteafdeling ra, pzho_v_afdeling afd
WHERE ra.prj_ruimteafdeling_verwijder IS NULL
AND ra.prs_afdeling_key = afd.prs_afdeling_key
AND afd.afd_key = a.afd_key);
CREATE OR REPLACE TRIGGER pzho_t_prj_t_ruimte_afd_i_iu
INSTEAD OF INSERT OR UPDATE
ON PZHO_V_PRJ_THEMA_RUIMTE_AFD
BEGIN
DECLARE
dummy NUMBER;
oracle_err_mes VARCHAR2 (1000);
parent_key NUMBER;
new_parent_key NUMBER;
BEGIN
SELECT MAX (dir_key) dir_key
INTO new_parent_key
FROM pzho_v_afdeling afd
WHERE afd.prs_afdeling_key = :new.waarde_key;
IF UPDATING
THEN
parent_key := :old.parent_key;
ELSE
SELECT MAX (dir_key) dir_key
INTO parent_key
FROM pzho_v_afdeling afd, prj_ruimteafdeling ra
WHERE afd.prs_afdeling_key = ra.prs_afdeling_key
AND ra.prj_ruimte_key = :new.prj_ruimte_key;
END IF;
IF parent_key <> new_parent_key AND parent_key <> -1
THEN
-- INSERT INTO imp_log (imp_log_applicatie,
-- imp_log_run,
-- imp_log_datum,
-- imp_log_status,
-- imp_log_omschrijving,
-- imp_log_hint)
-- VALUES ('MOVE_AFD',
-- 'now',
-- SYSDATE,
-- 'E',
-- 'directie is niet gelijk',
-- :new.prj_ruimte_key);
NULL;
ELSE
IF UPDATING -- oude logisch weggooien, dus g<><67>n DELETE!
THEN
UPDATE prj_ruimteafdeling
SET prj_ruimteafdeling_verwijder = SYSDATE
WHERE prj_ruimte_key = :new.prj_ruimte_key
AND prs_afdeling_key <> :new.waarde_key;
-- INSERT INTO imp_log (imp_log_applicatie,
-- imp_log_run,
-- imp_log_datum,
-- imp_log_status,
-- imp_log_omschrijving,
-- imp_log_hint)
-- VALUES ('MOVE_AFD',
-- 'now',
-- SYSDATE,
-- 'I',
-- 'afdeling aangepast:'
-- || (SELECT prs_afdeling_omschrijving
-- FROM prs_afdeling
-- WHERE prs_afdeling_key = :old.waarde_key)
-- || ' -> '
-- || (SELECT prs_afdeling_omschrijving
-- FROM prs_afdeling
-- WHERE prs_afdeling_key = :new.waarde_key),
-- :new.prj_ruimte_key);
END IF;
BEGIN
IF :new.waarde_key <> -1
THEN
UPDATE prj_ruimteafdeling
SET prj_ruimteafdeling_verwijder = NULL
WHERE prj_ruimte_key = :new.prj_ruimte_key
AND prs_afdeling_key = :new.waarde_key;
INSERT INTO prj_ruimteafdeling (prj_ruimte_key,
prs_afdeling_key,
prj_ruimteafdeling_bezetting)
VALUES (:new.prj_ruimte_key, :new.waarde_key, 100);
END IF;
END;
END IF;
EXCEPTION
WHEN DUP_VAL_ON_INDEX -- was al aanwezig
THEN
NULL;
WHEN OTHERS
THEN
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
-- INSERT INTO imp_log (imp_log_applicatie,
-- imp_log_run,
-- imp_log_datum,
-- imp_log_status,
-- imp_log_omschrijving,
-- imp_log_hint)
-- VALUES ('MOVE_AFD',
-- 'now',
-- SYSDATE,
-- 'E',
-- oracle_err_mes,
-- :new.prj_ruimte_key);
END;
END;
/
CREATE OR REPLACE VIEW pzho_v_rap_prj_afd_bezettting (
fclt_f_scenario,
fclt_f_directie,
afdeling_omschrijving,
scenario_opp,
opp,
scenario_wp,
wp,
max_wp
)
AS
SELECT prj_scenario_omschrijving,
coalesce(directie, 'Onbekend') directie,
coalesce(prs_afdeling_omschrijving, 'Onbekend') prs_afdeling_omschrijving,
SUM (prj_ruimte_vloeropp),
SUM (alg_ruimte_vloeropp),
SUM (prj_wp),
SUM (wp),
SUM (max_wp)
FROM (SELECT (pr_r.prj_ruimte_bruto_vloeropp
* pr_ra.prj_ruimteafdeling_bezetting)
/ 100
prj_ruimte_vloeropp,
(SELECT COUNT ( * )
FROM prj_werkplek wp
WHERE pr_r.prj_ruimte_key = wp.prj_ruimte_key)
prj_wp,
pr_a.prs_afdeling_omschrijving,
pr_d.prs_afdeling_omschrijving directie,
s.prj_scenario_omschrijving,
0 alg_ruimte_vloeropp,
0 wp,
0 max_wp
FROM alg_ruimte r,
prj_ruimte pr_r,
prj_scenario s,
prj_ruimteafdeling pr_ra,
pzho_v_afdeling pr_pa,
prs_afdeling pr_a,
prs_afdeling pr_d,
alg_srtruimte sr
WHERE pr_r.alg_ruimte_key = r.alg_ruimte_key
AND pr_r.prj_scenario_key = s.prj_scenario_key
AND pr_r.prj_ruimte_key = pr_ra.prj_ruimte_key(+)
AND pr_ra.prs_afdeling_key = pr_pa.prs_afdeling_key(+)
AND pr_r.prj_ruimte_verwijder IS NULL
AND pr_pa.dir_key = pr_d.prs_afdeling_key(+)
AND pr_pa.afd_key = pr_a.prs_afdeling_key(+)
AND r.alg_srtruimte_key = sr.alg_srtruimte_key
AND sr.prs_bevat_werkplek = 1
UNION ALL
SELECT 0,
0,
a.prs_afdeling_omschrijving,
d.prs_afdeling_omschrijving directie,
s.prj_scenario_omschrijving,
(r.alg_ruimte_bruto_vloeropp * ra.prs_ruimteafdeling_bezetting)
/ 100
alg_ruimte_vloeropp,
(SELECT COUNT ( * )
FROM prs_werkplek wp
WHERE r.alg_ruimte_key = wp.prs_alg_ruimte_key
AND COALESCE (wp.prs_werkplek_virtueel, 0) <> 1)
wp,
NVL (TRUNC ( (alg_ruimte_bruto_vloeropp - 1) / 6.5), 0) max_wp
FROM alg_ruimte r,
prj_ruimte pr_r,
prj_scenario s,
prs_ruimteafdeling ra,
pzho_v_afdeling pa,
prs_afdeling a,
prs_afdeling d,
alg_srtruimte sr
WHERE pr_r.alg_ruimte_key = r.alg_ruimte_key
AND pr_r.prj_scenario_key = s.prj_scenario_key
AND prj_ruimte_verwijder IS NULL
AND r.alg_srtruimte_key = sr.alg_srtruimte_key
AND sr.prs_bevat_werkplek = 1
AND r.alg_ruimte_key = ra.alg_ruimte_key(+)
AND ra.prs_afdeling_key = pa.prs_afdeling_key(+)
AND pa.dir_key = d.prs_afdeling_key(+)
AND pa.afd_key = a.prs_afdeling_key(+)
UNION ALL
SELECT (r.alg_ruimte_bruto_vloeropp
* ra.prs_ruimteafdeling_bezetting)
/ 100
alg_ruimte_vloeropp,
(SELECT COUNT ( * )
FROM prs_werkplek wp
WHERE r.alg_ruimte_key = wp.prs_alg_ruimte_key
AND COALESCE (wp.prs_werkplek_virtueel, 0) <> 1)
prj_wp,
a.prs_afdeling_omschrijving,
d.prs_afdeling_omschrijving directie,
s.prj_scenario_omschrijving,
(r.alg_ruimte_bruto_vloeropp * ra.prs_ruimteafdeling_bezetting)
/ 100
alg_ruimte_vloeropp,
(SELECT COUNT ( * )
FROM prs_werkplek wp
WHERE r.alg_ruimte_key = wp.prs_alg_ruimte_key
AND COALESCE (wp.prs_werkplek_virtueel, 0) <> 1)
wp,
NVL (TRUNC ( (alg_ruimte_bruto_vloeropp - 1) / 6.5), 0)
FROM alg_ruimte r,
prj_scenario s,
prs_ruimteafdeling ra,
pzho_v_afdeling pa,
alg_srtruimte sr,
prs_afdeling a,
prs_afdeling d
WHERE r.alg_ruimte_key = ra.alg_ruimte_key(+)
AND ra.prs_afdeling_key = pa.prs_afdeling_key(+)
AND pa.dir_key = d.prs_afdeling_key(+)
AND pa.afd_key = a.prs_afdeling_key(+)
AND r.alg_ruimte_verwijder IS NULL
AND r.alg_srtruimte_key = sr.alg_srtruimte_key
AND sr.prs_bevat_werkplek = 1
AND NOT EXISTS
(SELECT alg_ruimte_key
FROM prj_ruimte pr
WHERE pr.alg_ruimte_key = r.alg_ruimte_key
AND pr.prj_scenario_key = s.prj_scenario_key))
GROUP BY prs_afdeling_omschrijving, prj_scenario_omschrijving, directie;
CREATE OR REPLACE FORCE VIEW pzho_v_prj_thema_wpopp (
prj_ruimte_key,
waarde
)
AS
SELECT wp.prj_ruimte_key,
to_char(trunc(coalesce(r.prj_ruimte_bruto_vloeropp-1,0) / coalesce(COUNT (prj_werkplek_key),1)))
FROM prj_werkplek wp, prj_ruimte r
WHERE wp.prj_werkplek_verwijder IS NULL
AND wp.prj_ruimte_key = r.prj_ruimte_key
GROUP BY wp.prj_ruimte_key, r.prj_ruimte_bruto_vloeropp;
CREATE OR REPLACE FORCE VIEW pzho_v_cad_thema_wp_bez (
prj_werkplek_key,
waarde,
highlight
)
AS
SELECT DISTINCT
pwp.prj_werkplek_key,
DECODE (SIGN(SUM (COALESCE (ppwp.prj_perslidwerkplek_bezetting, 0))
- 100),
1,
'> 100%',
-1,
'< 100%',
'100%'
),
SUM (COALESCE (ppwp.prj_perslidwerkplek_bezetting, 0)) highlight
FROM prj_werkplek pwp, prj_perslidwerkplek ppwp
WHERE pwp.prj_werkplek_key = ppwp.prj_werkplek_key(+)
GROUP BY pwp.prj_werkplek_key;
CREATE OR REPLACE VIEW pzho_v_prj_label_bewonerwpe (
prj_werkplek_key,
waarde,
highlight
)
AS
SELECT DISTINCT
prj_werkplek_key, waarde, DECODE (prj_selectie_key, NULL, 0, 1)
FROM (SELECT prj_r.prj_scenario_key,
prs_w.prj_werkplek_key,
prs_p.prs_perslid_naam
|| DECODE (prs_p.prs_perslid_voornaam,
NULL,
'',
CHR (10)
|| '[s20] ('
|| prs_p.prs_perslid_voornaam
|| ')'
)
|| ': '
|| TO_CHAR (NVL (prs_pw.prj_perslidwerkplek_bezetting, 0))
|| '%'
waarde,
'PRJ_WERKPLEK' label_soort,
prs_pw.prj_werkplek_key label_key
FROM prj_ruimte prj_r,
prj_werkplek prs_w,
(SELECT *
FROM prj_perslidwerkplek
WHERE prj_perslidwerkplek_verwijder IS NULL) prs_pw,
prs_perslid prs_p
WHERE prs_w.prj_werkplek_key = prs_pw.prj_werkplek_key
AND prs_pw.prs_perslid_key IS NOT NULL
AND prs_pw.prs_perslid_key = prs_p.prs_perslid_key
AND prs_w.prj_ruimte_key = prj_r.prj_ruimte_key
UNION
SELECT -1,
prs_w.prj_werkplek_key,
' Vrij: '
|| TO_CHAR(100
- NVL (SUM (prs_wb.prj_perslidwerkplek_bezetting),
0
))
|| '%',
'PRJ_WERKPLEK',
prs_w.prj_werkplek_key
FROM prj_werkplek prs_w,
(SELECT *
FROM prj_perslidwerkplek
WHERE prj_perslidwerkplek_verwijder IS NULL) prs_wb
WHERE prs_w.prj_werkplek_key = prs_wb.prj_werkplek_key(+)
AND prj_werkplek_verwijder IS NULL
GROUP BY prs_w.prj_werkplek_key,
prs_w.prj_werkplek_key,
prs_w.prj_werkplek_volgnr
HAVING SUM (NVL (prs_wb.prj_perslidwerkplek_bezetting, 0)) < 100)
data,
prj_selectie ps
WHERE ps.prj_scenario_key(+) = data.prj_scenario_key
AND ps.prj_selectie_tabelnaam(+) = label_soort
AND ps.prj_selectie_tabelkey(+) = label_key;
CREATE OR REPLACE VIEW pzho_v_rap_perslid_verhuizing (
sleutel,
fclt_f_scenario,
fclt_f_directie,
fclt_f_afdeling,
fclt_f_bureau,
persoon,
plaats,
locatie,
gebouw,
verdieping,
kamer,
werkplek
)
AS
SELECT TO_CHAR (p.prs_perslid_key),
s.prj_scenario_omschrijving,
dir.prs_afdeling_omschrijving,
afd.prs_afdeling_omschrijving,
bur.prs_afdeling_omschrijving,
prs_perslid_naam_full,
wpg.prs_werkplek_aanduiding,
DECODE (pr_pwp.prj_perslidwerkplek_verwijder,
NULL, pr_rg.alg_locatie_code,
'')
loc,
DECODE (pr_pwp.prj_perslidwerkplek_verwijder,
NULL, pr_rg.alg_gebouw_upper,
'')
geb,
DECODE (pr_pwp.prj_perslidwerkplek_verwijder,
NULL, pr_rg.alg_verdieping_code,
'')
verd,
DECODE (pr_pwp.prj_perslidwerkplek_verwijder,
NULL, pr_rg.alg_ruimte_nr,
'')
ruimte,
DECODE (pr_pwp.prj_perslidwerkplek_verwijder,
NULL, TO_CHAR (pr_wp.prj_werkplek_volgnr),
'')
wp
FROM prs_perslid p,
prj_scenario s,
pzho_v_afdeling a,
prs_afdeling dir,
prs_afdeling afd,
prs_afdeling bur,
prs_v_perslid_fullnames pf,
prs_v_perslidwerkplek_gegevens wpg,
prj_perslidwerkplek pr_pwp,
prj_werkplek pr_wp,
prj_ruimte pr_r,
alg_v_ruimte_gegevens pr_rg
WHERE p.prs_perslid_key = pf.prs_perslid_key
AND p.prs_afdeling_key = a.prs_afdeling_key
AND a.dir_key = dir.prs_afdeling_key
AND a.afd_key = afd.prs_afdeling_key
AND a.bur_key = bur.prs_afdeling_key
AND p.prs_perslid_key = wpg.prs_perslid_key(+)
AND p.prs_perslid_key = pr_pwp.prs_perslid_key
AND pr_pwp.prj_werkplek_key = pr_wp.prj_werkplek_key
AND pr_wp.prj_ruimte_key = pr_r.prj_ruimte_key(+)
AND pr_r.prj_scenario_key = s.prj_scenario_key(+)
AND pr_r.alg_ruimte_key = pr_rg.alg_ruimte_key(+)
AND EXISTS
(SELECT prj_ruimteafdeling_key
FROM prj_ruimteafdeling pra, prj_ruimte pr
WHERE pra.prj_ruimte_key = pr.prj_ruimte_key
AND pr.prj_scenario_key = s.prj_scenario_key
AND (pra.prs_afdeling_key = a.dir_key
OR pra.prs_afdeling_key = a.afd_key))
UNION ALL
SELECT TO_CHAR (p.prs_perslid_key),
s.prj_scenario_omschrijving,
dir.prs_afdeling_omschrijving,
afd.prs_afdeling_omschrijving,
bur.prs_afdeling_omschrijving,
prs_perslid_naam_full,
wpg.prs_werkplek_aanduiding,
l.alg_locatie_code loc,
wpg.alg_gebouw_upper geb,
wpg.alg_verdieping_code verd,
wpg.alg_ruimte_nr ruimte,
TO_CHAR (wpg.prs_werkplek_volgnr) wp
FROM prs_perslid p,
prj_scenario s,
pzho_v_afdeling a,
prs_afdeling dir,
prs_afdeling afd,
prs_afdeling bur,
prs_v_perslid_fullnames pf,
prs_v_perslidwerkplek_gegevens wpg,
alg_locatie l
WHERE p.prs_perslid_key = pf.prs_perslid_key
AND p.prs_afdeling_key = a.prs_afdeling_key
AND a.dir_key = dir.prs_afdeling_key
AND a.afd_key = afd.prs_afdeling_key
AND a.bur_key = bur.prs_afdeling_key
AND p.prs_perslid_key = wpg.prs_perslid_key(+)
AND wpg.alg_locatie_key = l.alg_locatie_key(+)
AND NOT EXISTS
(SELECT prs_perslidwerkplek_key
FROM prj_perslidwerkplek pr_pwp,
prj_werkplek pr_wp,
prj_ruimte pr_r
WHERE p.prs_perslid_key = pr_pwp.prs_perslid_key
AND pr_pwp.prj_werkplek_key = pr_wp.prj_werkplek_key
AND pr_wp.prj_ruimte_key = pr_r.prj_ruimte_key
AND pr_r.prj_scenario_key = s.prj_scenario_key)
AND EXISTS
(SELECT prj_ruimteafdeling_key
FROM prj_ruimteafdeling pra, prj_ruimte pr
WHERE pra.prj_ruimte_key = pr.prj_ruimte_key
AND pr.prj_scenario_key = s.prj_scenario_key
AND (pra.prs_afdeling_key = a.dir_key
OR pra.prs_afdeling_key = a.afd_key));
-- key 523 is kenmerk besteld voor op PZH prod
-- status 6+7 is status geleverd en verwerkt
CREATE OR REPLACE VIEW PZHO_V_RAP_CADEAUBONVERANTW
(
FCLT_F_NAAM,
PERSONEELSNUMMER,
FCLT_F_FUNCTIE,
FCLT_D_DATUM,
Aantal,
Artikel,
Prijs,
Totaal,
Bestelling,
FCLT_F_BESTELD_DOOR
)
AS
SELECT pv.prs_perslid_naam_full,
p.prs_perslid_nr,
srtp.prs_srtperslid_omschrijving,
TO_CHAR (b.bes_bestelling_datum, 'dd-mm-yyyy') datum,
bes_bestelling_item_aantal,
bd.bes_srtdeel_omschrijving,
bes_bestelling_item_prijs,
bes_bestelling_item_aantal * bes_bestelling_item_prijs totaal,
b.bes_bestelling_key,
pv2.prs_perslid_naam_full
FROM bes_kenmerkbesteli kbi,
prs_v_perslid_fullnames_all pv,
prs_v_perslid_fullnames_all pv2,
prs_perslid p,
prs_srtperslid srtp,
bes_bestelling_item bi,
bes_bestelling b,
bes_srtdeel bd
WHERE bes_kenmerkbesteli_verwijder IS NULL
AND bes_kenmerk_key = 521 -- Kenmerk bestemd voor. Bij PZH op prod
AND p.prs_perslid_key = kbi.bes_kenmerkbesteli_waarde
AND kbi.bes_bestelling_item_key = bi.bes_bestelling_item_key
AND b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.bes_srtdeel_key = bd.bes_srtdeel_key
AND p.prs_perslid_key = pv.prs_perslid_key
AND p.prs_srtperslid_key = srtp.prs_srtperslid_key
AND pv2.prs_perslid_key = b.prs_perslid_key
AND b.bes_bestelling_status IN (6, 7);
---
--- MB: PZHO#26643 voorraad tonen tijdens bestellen.
---
CREATE OR REPLACE VIEW PZHO_V_RAP_VOORRAAD
(
HIDE_F_EXTERN_DISKEY,
HIDE_F_SRTGROEP_OMSCHRIJVING,
FCLT_F_CATALOGUS,
ARTIKEL_NR,
ARTIKEL_OMSCHRIJVING,
ARTIKEL_PRIJS,
MAGAZIJN,
MIN_VOORRAAD,
MAX_VOORRAAD,
INKOOP_GELEVERD,
INTERN_BESTELD,
VOORRAAD,
INKOOP_BESTELD,
INKOOP_LEVERDATUM,
INKOOP_GEWENST
)
AS
SELECT extern.dkey,
COALESCE (intern.bes_srtgroep_omschrijving,
extern.bes_srtgroep_omschrijving),
COALESCE (intern.ins_discipline_omschrijving,
extern.ins_discipline_omschrijving),
extern.bes_srtdeel_nr,
COALESCE (intern.bes_srtdeel_omschrijving,
extern.bes_srtdeel_omschrijving),
COALESCE (intern.srtdeel_prijs, extern.srtdeel_prijs),
intern.magazijn,
extern.vmin,
extern.vmax,
extern.geleverd,
intern.besteld,
extern.geleverd - COALESCE (intern.besteld, 0) voorraad,
extern.besteld,
TO_CHAR(extern.leverdatum, 'dd-mm-yyyy'),
CASE
WHEN ( (COALESCE (extern.besteld, 0)
+ COALESCE (extern.geleverd, 0))
- COALESCE (intern.besteld, 0)) < extern.vmin
THEN
extern.vmax
- ( (COALESCE (extern.besteld, 0)
+ COALESCE (extern.geleverd, 0))
- COALESCE (intern.besteld, 0))
ELSE
NULL
END
extern_gewenst
FROM (SELECT bd.ins_discipline_key dkey, -- INKOOP-key
g.bes_srtgroep_omschrijving,
sd.bes_srtdeel_nr, -- ext. artikelnr
sd.bes_srtdeel_omschrijving,
bes.getsrtdeelprijs (sd.bes_srtdeel_key, NULL)
srtdeel_prijs,
bd.ins_discipline_omschrijving, -- ext. catalogusnaam
sd.bes_srtdeel_voorraadmin vmin, -- ext. voorraadmin
sd.bes_srtdeel_voorraadmax vmax, -- ext. voorraadmax
(SELECT SUM (coalesce(boi.bes_bestelopdr_item_aantal, bi.bes_bestelling_item_aantal)-COALESCE(boi.bes_bestelopdr_item_aantalontv,0))
FROM bes_bestelling b, bes_bestelling_item bi, bes_bestelopdr_item boi
WHERE boi.bes_bestelopdr_item_key(+) = bi.bes_bestelopdr_item_key
AND bi.bes_bestelling_item_status IN (2, 3, 4, 5)
AND b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.bes_srtdeel_key = sd.bes_srtdeel_key)
besteld,
(SELECT MIN (b.bes_bestelling_leverdatum)
FROM bes_bestelling b, bes_bestelling_item bi, bes_bestelopdr_item boi
WHERE boi.bes_bestelopdr_item_key(+) = bi.bes_bestelopdr_item_key
AND bi.bes_bestelling_item_status IN (2, 3, 4, 5)
AND COALESCE(bes_bestelopdr_item_aantal, bi.bes_bestelling_item_aantal) <> COALESCE(bes_bestelopdr_item_aantalontv, 0)
AND b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.bes_srtdeel_key = sd.bes_srtdeel_key)
leverdatum,
(SELECT SUM (boi.bes_bestelopdr_item_aantalontv)
FROM bes_bestelling b, bes_bestelling_item bi, bes_bestelopdr_item boi
WHERE -- boi.bes_bestelopdr_item_status in (6,7) AND
b.bes_bestelling_key = bi.bes_bestelling_key
AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key
AND bi.bes_srtdeel_key = sd.bes_srtdeel_key)
geleverd
FROM bes_srtdeel sd,
bes_srtgroep g,
bes_discipline bd,
bes_disc_params dp
WHERE sd.bes_srtdeel_verwijder IS NULL
AND sd.bes_srtgroep_key = g.bes_srtgroep_key
AND g.ins_discipline_key = bd.ins_discipline_key
AND bd.ins_discipline_key = dp.bes_ins_discipline_key
AND dp.bes_ins_discipline_key_inkoop IS NULL
AND BD.INS_DISCIPLINE_VERWIJDER is null
AND bd.ins_discipline_key IN
(SELECT bes_ins_discipline_key_inkoop
FROM bes_disc_params
WHERE bes_ins_discipline_key_inkoop IS NOT NULL))
extern -- Inkoop artikelen uit externe catalogus!
FULL JOIN
(SELECT dp.bes_ins_discipline_key_inkoop dkey, -- INKOOP-key
g.bes_srtgroep_omschrijving,
sd.bes_srtdeel_nr, -- int. artikelnr
sd.bes_srtdeel_omschrijving,
sd.bes_srtdeel_notitie magazijn,
bes.getsrtdeelprijs (sd.bes_srtdeel_key, NULL)
srtdeel_prijs,
bd.ins_discipline_omschrijving, -- int. catalogusnaam
(SELECT SUM (COALESCE(boi.bes_bestelopdr_item_aantal, bi.bes_bestelling_item_aantal))
FROM bes_bestelling b, bes_bestelling_item bi, bes_bestelopdr_item boi
WHERE boi.bes_bestelopdr_item_key(+) = bi.bes_bestelopdr_item_key
AND b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.bes_srtdeel_key = sd.bes_srtdeel_key)
besteld
FROM bes_srtdeel sd,
bes_srtgroep g,
bes_discipline bd,
bes_disc_params dp
WHERE sd.bes_srtdeel_verwijder IS NULL
AND sd.bes_srtgroep_key = g.bes_srtgroep_key
AND g.ins_discipline_key = bd.ins_discipline_key
AND bd.ins_discipline_key = dp.bes_ins_discipline_key
AND BD.INS_DISCIPLINE_VERWIJDER is null
AND dp.bes_ins_discipline_key_inkoop IS NOT NULL) intern -- Verkoop artikelen uit interne catalogus!
ON extern.dkey = intern.dkey
AND extern.bes_srtdeel_nr = intern.bes_srtdeel_nr;
/* Formatted on 1-11-2013 16:24:42 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE pzho_import_invise (p_import_key IN NUMBER)
IS
c_delim VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (1000) := '';
header_is_valid NUMBER := 0;
v_count_tot NUMBER (10) := 0;
v_count_import NUMBER (10) := 0;
v_ongeldig NUMBER (1) := 0;
-- De importvelden:
v_dummy VARCHAR2 (255);
v_badgenr VARCHAR2 (255); -- C10
v_serialnr VARCHAR2 (255); -- C10
v_name VARCHAR2 (255); -- C?
v_firstname VARCHAR2 (255); -- C?
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
DELETE FROM pzho_imp_invise;
COMMIT;
FOR rec1 IN c1
LOOP
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout bij opvragen importregel';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees een aantal veldwaarden
--badgenr;begintst;endtst;badgeprofilenr;servicenr;subsystemid;antipassback;antireturn;securityid;language;pincode;serialnr;contactid;name;firstname;address;postcode;city;phonenr;gender;birthdate;optionalfields01;optionalfields02;optionalfields03;optionalfields04;optionalfields05;optionalfields06;optionalfields07;optionalfields08;optionalfields09;optionalfields10;optionalfields11;optionalfields12;optionalfields13;optionalfields14;optionalfields15;optionalfields16;optionalfields17;optionalfields18;optionalfields19;optionalfields20;optionalfields21;optionalfields22;optionalfields23;optionalfields24;optionalfields25;optionalfields26;optionalfields27;optionalfields28;optionalfields29;optionalfields30;optionalfields31;optionalfields32;optionalfields33;optionalfields34;optionalfields35;optionalfields36;optionalfields37;optionalfields38;optionalfields39;optionalfields40;comment;createtst;createuserid;modtst;moduserid
fac.imp_getfield (v_newline, c_delim, v_badgenr); --badgenr (toegangspasnummer)
fac.imp_getfield (v_newline, c_delim, v_dummy); -- begintst
fac.imp_getfield (v_newline, c_delim, v_dummy); -- endtst
fac.imp_getfield (v_newline, c_delim, v_dummy); -- badgeprofilenr
fac.imp_getfield (v_newline, c_delim, v_dummy); -- servicenr
fac.imp_getfield (v_newline, c_delim, v_dummy); -- subsystemid
fac.imp_getfield (v_newline, c_delim, v_dummy); -- antipassback
fac.imp_getfield (v_newline, c_delim, v_dummy); -- antireturn
fac.imp_getfield (v_newline, c_delim, v_dummy); -- securityid
fac.imp_getfield (v_newline, c_delim, v_dummy); -- language
fac.imp_getfield (v_newline, c_delim, v_dummy); -- pincode
fac.imp_getfield (v_newline, c_delim, v_serialnr); --serialnr (personeelsnummer)
fac.imp_getfield (v_newline, c_delim, v_dummy); -- contactid
fac.imp_getfield (v_newline, c_delim, v_name); -- name
fac.imp_getfield (v_newline, c_delim, v_firstname); -- firstname
v_aanduiding :=
'['
|| v_badgenr
|| '|'
|| v_serialnr
|| '|'
|| v_name
|| '|'
|| v_firstname
|| '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij alleen de 2 relevante kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (v_badgenr) = 'BADGENR' AND UPPER (v_serialnr) = 'SERIALNR'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errormsg := 'Badgenr ongeldig; ongedefinieerd of te lang';
v_badgenr := TRIM (v_badgenr);
IF v_badgenr IS NULL OR LENGTH (v_badgenr) > 15
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
--
v_errormsg := 'Personeelsnr ongeldig; ongedefinieerd of te lang';
v_serialnr := TRIM (v_serialnr);
IF v_serialnr IS NULL OR LENGTH (v_serialnr) > 6
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errormsg := 'Fout bij wegschrijven importregel';
INSERT INTO pzho_imp_invise (badgenr, serialnr)
VALUES (v_badgenr, v_serialnr);
COMMIT;
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
COMMIT;
END;
END IF;
END IF;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
'Ongeldig importbestand',
'Geen header of header niet volgens specificatie!');
ELSE
fac.imp_writelog (
p_import_key,
'S',
'Passen/#ingelezen importregels: ' || TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (
p_import_key,
'S',
'Passen/#ongeldige niet ingelezen importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Inleesproces passen afgebroken!');
END pzho_import_invise;
/
/* Formatted on 12-11-2013 11:16:32 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE pzho_update_invise (p_import_key IN NUMBER)
AS
c_badgenr_kkey NUMBER := 13;
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (1000) := '';
v_count_tot NUMBER (10) := 0;
v_count_new NUMBER (10) := 0;
v_count_upd NUMBER (10) := 0;
CURSOR c1
IS
SELECT p.prs_perslid_key,
kl.prs_kenmerklink_key,
COUNT ( * ) pas_cnt, -- #pas bij gelijk persnr!
MAX (i.badgenr) badgenr,
MAX (i.serialnr) serialnr
FROM pzho_imp_invise i,
( SELECT SUBSTR (prs_perslid_nr,
1,
INSTR (prs_perslid_nr, '/') - 1)
prs_perslid_nr,
COUNT ( * ) prs_cnt, -- #prs met gelijk persnr!
MAX (prs_perslid_key) prs_perslid_key
FROM prs_v_aanwezigperslid
WHERE prs_perslid_oslogin IS NOT NULL -- Met loginnaam!
GROUP BY SUBSTR (prs_perslid_nr,
1,
INSTR (prs_perslid_nr, '/') - 1)) p,
(SELECT *
FROM prs_v_aanwezigkenmerklink
WHERE prs_kenmerk_key = c_badgenr_kkey) kl
WHERE i.serialnr = p.prs_perslid_nr
AND p.prs_perslid_key = kl.prs_link_key(+)
GROUP BY p.prs_perslid_key, kl.prs_kenmerklink_key;
BEGIN
SELECT COUNT ( * ) INTO v_count_tot FROM pzho_imp_invise;
FOR rec IN c1
LOOP
v_aanduiding := '[' || rec.badgenr || '|' || rec.serialnr || '] ';
IF (rec.prs_kenmerklink_key IS NULL)
THEN
v_errormsg := 'Fout bij toevoegen pasnummer';
INSERT INTO prs_kenmerklink (prs_link_key,
prs_kenmerklink_niveau,
prs_kenmerk_key,
prs_kenmerklink_waarde)
VALUES (rec.prs_perslid_key,
'P',
c_badgenr_kkey,
rec.badgenr);
v_count_new := v_count_new + 1;
ELSE
v_errormsg := 'Fout bij bijwerken pasnummer';
UPDATE prs_kenmerklink
SET prs_kenmerklink_waarde = rec.badgenr
WHERE prs_kenmerklink_key = rec.prs_kenmerklink_key;
v_count_upd := v_count_upd + 1;
END IF;
COMMIT;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Passen/#ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'Passen/#toegevoegd: ' || TO_CHAR (v_count_new),
'');
fac.imp_writelog (p_import_key,
'S',
'Passen/#bijgewerkt: ' || TO_CHAR (v_count_upd),
'');
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Importproces passen afgebroken!');
END pzho_update_invise;
/
/* Formatted on 13-11-2013 17:35:25 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW pzho_v_api_dienstfietsen
(
res_key,
res_id,
fiets_oms,
sleutel_id,
van,
tot,
user_key,
vnaam,
anaam,
pasnr,
fo_status_key, -- 1=OPT/2=BEV/3=DEL/4=BLK
last_change, -- Laatste NEW/UPD/DEL/BLK
res_verwijder
)
AS
SELECT rr.res_rsv_ruimte_key,
TO_CHAR (rr.res_reservering_key)
|| '/'
|| TO_CHAR (rr.res_rsv_ruimte_volgnr),
TRIM (rd.res_deel_omschrijving),
fac.safe_to_number(SUBSTR (
rd.res_deel_omschrijving,
INSTR (rd.res_deel_omschrijving, ' ', -1)
+ 1
)),
rr.res_rsv_ruimte_van,
rr.res_rsv_ruimte_tot,
p.prs_perslid_key,
p.prs_perslid_voornaam vnaam,
DECODE (COALESCE (p.prs_perslid_tussenvoegsel, ''),
'', '',
p.prs_perslid_tussenvoegsel || ' ')
|| p.prs_perslid_naam
anaam,
kl.prs_kenmerklink_waarde pasnr,
rr.res_status_fo_key,
CASE
WHEN rr.res_rsv_ruimte_van < TRUNC (SYSDATE + 1)
THEN SYSDATE - 5/24/60 -- Doe alsof 5 minuten geleden gewijzigd
ELSE t.last_change
END last_change,
rr.res_rsv_ruimte_verwijder
FROM res_rsv_ruimte rr, -- Ook verwijderde res_rsv_ruimte!
res_rsv_deel rrd, -- Ook verwijderde res_rsv_deel!
res_deel rd,
prs_perslid p,
prs_v_aanwezigkenmerklink kl,
( SELECT fac_tracking_refkey,
MAX (fac_tracking_datum) last_change
FROM fac_tracking -- 30=NEW/31=UPD/34=DEL/242=BLK
WHERE fac_srtnotificatie_key IN (30, 31, 34, 242)
GROUP BY fac_tracking_refkey) t
WHERE rr.res_rsv_ruimte_tot > TRUNC (SYSDATE) -- Lopende..
AND rr.res_ruimte_opstel_key IS NULL -- losse boekingen
AND rr.res_activiteit_key = 11 -- Activiteit tbv. Traka-koppeling
AND rr.res_rsv_ruimte_key = rrd.res_rsv_ruimte_key
AND rrd.res_deel_key = rd.res_deel_key
AND rr.res_rsv_ruimte_dirtlevel = 0
AND rr.res_rsv_ruimte_contact_key = p.prs_perslid_key
AND rr.res_rsv_ruimte_contact_key = kl.prs_link_key
AND kl.prs_kenmerk_key = 13 -- Alleen aanvragers met een pasnr
AND rr.res_rsv_ruimte_key = t.fac_tracking_refkey(+);
/* Formatted on 7-7-2014 10:50:15 (QP5 v5.136.908.31019) */
CREATE OR REPLACE PROCEDURE pzho_import_meubel (p_import_key IN NUMBER)
IS
c_delim VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (1000) := '';
header_is_valid NUMBER := 0;
v_count_tot NUMBER (10) := 0;
v_count_import NUMBER (10) := 0;
v_ongeldig NUMBER (1) := 0;
-- De importvelden:
v_status VARCHAR2 (255); -- C100
v_kamer VARCHAR2 (255); -- C50
v_werkplek VARCHAR2 (255); -- C10
v_cinr VARCHAR2 (255); -- C60
v_artikelnr VARCHAR2 (255); -- C10
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
DELETE FROM pzho_imp_meubel;
COMMIT;
FOR rec1 IN c1
LOOP
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout bij opvragen importregel';
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_delim, v_status);
fac.imp_getfield (v_newline, c_delim, v_kamer);
fac.imp_getfield (v_newline, c_delim, v_werkplek);
fac.imp_getfield (v_newline, c_delim, v_cinr);
fac.imp_getfield (v_newline, c_delim, v_artikelnr);
v_aanduiding :=
'['
|| v_status
|| '|'
|| v_artikelnr
|| '|'
|| v_cinr
|| '|'
|| v_kamer
|| '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (v_status) = 'STATUS'
AND UPPER (v_kamer) = 'KAMER'
AND UPPER (v_werkplek) = 'WERKPLEK'
AND UPPER (v_cinr) = 'CI-NUMMER'
AND UPPER (v_artikelnr) = 'ARTIKELNUMMER'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errormsg := 'Status ongedefinieerd of te lang';
v_status := TRIM (v_status);
IF v_status IS NULL OR LENGTH (v_status) > 60
THEN
v_status := NULL;
fac.imp_writelog (p_import_key,
'I',
v_aanduiding || v_errormsg,
'Status wordt genegeerd!');
END IF;
--
v_errormsg := 'Kamer ongeldig; ongedefinieerd of te lang';
v_kamer := TRIM (v_kamer);
IF v_kamer IS NULL OR LENGTH (v_kamer) > 50
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
-- Ignore?
v_errormsg := 'Werkplek ongedefinieerd of te lang';
v_werkplek := TRIM (v_werkplek);
IF v_werkplek IS NULL OR LENGTH (v_werkplek) > 10
THEN
v_werkplek := NULL;
fac.imp_writelog (p_import_key,
'I',
v_aanduiding || v_errormsg,
'Werkplek wordt genegeerd!');
END IF;
--
v_errormsg := 'CI-nummer ongeldig; ongedefinieerd of te lang';
v_cinr := TRIM (v_cinr);
IF v_cinr IS NULL OR LENGTH (v_cinr) > 60
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
--
v_errormsg := 'Artikelnummer ongeldig; ongedefinieerd of te lang';
v_artikelnr := TRIM (v_artikelnr);
IF v_artikelnr IS NULL OR LENGTH (v_artikelnr) > 10
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
--
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errormsg := 'Fout bij wegschrijven importregel';
INSERT INTO pzho_imp_meubel (status,
kamer,
werkplek,
cinr,
artikelnr)
VALUES (v_status,
v_kamer,
v_werkplek,
v_cinr,
v_artikelnr);
COMMIT;
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
COMMIT;
END;
END IF;
END IF;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
'Ongeldig importbestand',
'Geen header of header niet volgens specificatie!');
ELSE
fac.imp_writelog (
p_import_key,
'S',
'Meubel-objecten/aantal ingelezen importregels: '
|| TO_CHAR (v_count_tot),
'');
fac.imp_writelog (
p_import_key,
'S',
'Meubel-objecten/aantal ongeldige niet ingelezen importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
'');
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Inleesproces Meubel-objecten afgebroken!');
END pzho_import_meubel;
/
CREATE OR REPLACE PROCEDURE pzho_update_meubel (p_import_key IN NUMBER)
AS
v_errormsg VARCHAR2 (1000) := '-';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
-- SUBPROC
PROCEDURE upsert_inskenmerk (p_deel_key IN NUMBER,
p_srtkenmerk_key IN NUMBER,
p_waarde IN VARCHAR2)
AS
v_kenmerk_key NUMBER;
v_srtkenmerk_type VARCHAR2 (1);
ccount NUMBER;
v_waarde VARCHAR2 (255);
v_objectnaam VARCHAR2 (30);
v_kolomnaam VARCHAR2 (30);
v_kolomtxt VARCHAR2 (30);
sql_stmt VARCHAR2 (1000);
v_kenmerkdeel_key NUMBER;
BEGIN
IF p_srtkenmerk_key IS NOT NULL AND p_waarde IS NOT NULL
THEN
v_errormsg :=
'Fout bij bepalen kenmerk van soort [' || p_srtkenmerk_key || ']';
SELECT k.ins_kenmerk_key, sk.ins_srtkenmerk_kenmerktype
INTO v_kenmerk_key, v_srtkenmerk_type
FROM ins_deel d,
ins_srtdeel sd,
ins_srtgroep sg,
ins_v_aanwezigkenmerk k,
ins_v_aanwezigsrtkenmerk sk
WHERE d.ins_deel_key = p_deel_key
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND k.ins_srtkenmerk_key = p_srtkenmerk_key
AND ( (k.ins_srtinstallatie_key = sd.ins_srtdeel_key
AND k.ins_kenmerk_niveau = 'S')
OR (k.ins_srtinstallatie_key = sg.ins_srtgroep_key
AND k.ins_kenmerk_niveau = 'G')
OR (k.ins_srtinstallatie_key = sg.ins_discipline_key
AND k.ins_kenmerk_niveau = 'D'))
AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key;
IF v_srtkenmerk_type IN ('R', 'S')
THEN
v_errormsg := 'Fout bij bepalen eigen tabel';
SELECT COUNT ( * )
INTO ccount
FROM ins_srtkenmerk sk, fac_kenmerkdomein d
WHERE sk.ins_srtkenmerk_key = p_srtkenmerk_key
AND sk.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key IS NOT NULL;
v_errormsg :=
'Fout bij bepalen nieuwe waarde [' || p_waarde || ']';
IF ccount = 1
THEN -- Eigen tabel
SELECT TO_CHAR (ud.fac_usrdata_key)
INTO v_waarde
FROM ins_srtkenmerk sk,
fac_kenmerkdomein d,
fac_v_aanwezigusrdata ud
WHERE sk.ins_srtkenmerk_key = p_srtkenmerk_key
AND sk.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key = ud.fac_usrtab_key
AND UPPER (TRIM (ud.fac_usrdata_omschr)) =
UPPER (p_waarde);
ELSE -- FACILITOR view/tabel
SELECT d.fac_kenmerkdomein_objectnaam,
d.fac_kenmerkdomein_kolomnaam,
d.fac_kenmerkdomein_kolomtxt
INTO v_objectnaam, v_kolomnaam, v_kolomtxt
FROM ins_srtkenmerk sk, fac_kenmerkdomein d
WHERE sk.ins_srtkenmerk_key = p_srtkenmerk_key
AND sk.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key IS NULL;
sql_stmt :=
'SELECT MAX ('
|| v_kolomnaam
|| ') FROM '
|| v_objectnaam
|| ' WHERE UPPER (TRIM ('
|| v_kolomtxt
|| ')) = UPPER ('''
|| p_waarde
|| ''')';
EXECUTE IMMEDIATE sql_stmt INTO v_waarde;
END IF;
ELSE -- C(Karakter)/D(Datum)/N(Numeriek)/X(Bestandsnaam)
v_waarde := p_waarde;
END IF;
v_errormsg := 'Fout bij bepalen huidige waarde';
SELECT COUNT ( * ), MAX (ins_kenmerkdeel_key)
INTO ccount, v_kenmerkdeel_key
FROM ins_v_aanwezigkenmerkdeel
WHERE ins_deel_key = p_deel_key AND ins_kenmerk_key = v_kenmerk_key;
IF ccount = 0
THEN
v_errormsg := 'Fout bij toevoegen waarde [' || v_waarde || ']';
INSERT INTO ins_kenmerkdeel (ins_deel_key,
ins_kenmerk_key,
ins_kenmerkdeel_waarde)
VALUES (p_deel_key, v_kenmerk_key, v_waarde);
ELSE
v_errormsg := 'Fout bij bijwerken waarde [' || v_waarde || ']';
UPDATE ins_kenmerkdeel
SET ins_kenmerkdeel_waarde = v_waarde
WHERE ins_kenmerkdeel_key = v_kenmerkdeel_key;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'upsert_inskenmerk');
END;
-- SUBPROC
PROCEDURE upsert_deel (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT artikelnr,
'H' || SUBSTR (cinr, 3) cinr,
kamer,
SUBSTR (kamer, 1, INSTR (kamer, '-') - 1) gebouw_code,
SUBSTR (kamer,
INSTR (kamer, '-') + 1,
INSTR (kamer, '-', -1) - (INSTR (kamer, '-') + 1))
verdieping_code,
SUBSTR (kamer, INSTR (kamer, '-', -1) + 1) ruimte_nr,
werkplek,
status
FROM pzho_imp_meubel;
c_meubilair_diskey NUMBER (10) := 438;
c_status_srtkey NUMBER (10) := 45;
v_srtgroep_key NUMBER (10);
v_srtdeel_key NUMBER (10);
v_locatie_key NUMBER (10);
v_gebouw_key NUMBER (10);
v_verdieping_key NUMBER (10);
v_ruimte_key NUMBER (10);
v_deel_key NUMBER (10);
ccount NUMBER (10);
v_count_tot NUMBER (10);
v_count_create NUMBER (10);
v_count_update NUMBER (10);
v_srtnoti_code VARCHAR2 (6);
BEGIN
v_count_tot := 0;
v_count_create := 0;
v_count_update := 0;
v_aanduiding := '';
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding :=
'['
|| rec.status
|| '|'
|| rec.artikelnr
|| '|'
|| rec.cinr
|| '|'
|| rec.kamer
|| '] ';
v_errormsg := 'Fout bepalen Meubel-objectsoort';
SELECT sg.ins_srtgroep_key, sd.ins_srtdeel_key
INTO v_srtgroep_key, v_srtdeel_key
FROM ins_srtgroep sg, ins_srtdeel sd
WHERE sg.ins_srtgroep_verwijder IS NULL
AND sg.ins_srtgroep_module = 'INS'
AND sg.ins_discipline_key = c_meubilair_diskey
AND sg.ins_srtgroep_key = sd.ins_srtgroep_key
AND sd.ins_srtdeel_verwijder IS NULL
AND sd.ins_srtdeel_module = 'INS'
AND TRIM (sd.ins_srtdeel_code_upper) =
UPPER (rec.artikelnr);
v_errormsg := 'Fout bepalen gebouw [' || rec.gebouw_code || ']';
SELECT alg_locatie_key, alg_gebouw_key
INTO v_locatie_key, v_gebouw_key
FROM alg_gebouw
WHERE alg_gebouw_verwijder IS NULL
AND UPPER (TRIM (alg_gebouw_code)) =
UPPER (rec.gebouw_code);
v_errormsg :=
'Fout bepalen verdieping [' || rec.verdieping_code || ']';
SELECT alg_verdieping_key
INTO v_verdieping_key
FROM alg_verdieping
WHERE alg_verdieping_verwijder IS NULL
AND alg_gebouw_key = v_gebouw_key
AND UPPER (TRIM (alg_verdieping_code)) =
UPPER (rec.verdieping_code);
v_errormsg := 'Fout bepalen ruimte [' || rec.ruimte_nr || ']';
SELECT alg_ruimte_key
INTO v_ruimte_key
FROM alg_ruimte
WHERE alg_ruimte_verwijder IS NULL
AND alg_verdieping_key = v_verdieping_key
AND UPPER (TRIM (alg_ruimte_nr)) = UPPER (rec.ruimte_nr);
-- Ruimtegebonden objecten hebben een unieke ID bij PZH (over alle
-- locaties)!
v_errormsg := 'Fout bepalen Meubel-object';
SELECT COUNT ( * )
INTO ccount
FROM ins_deel d, ins_srtdeel sd, ins_srtgroep sg
WHERE d.ins_deel_verwijder IS NULL
AND d.ins_deel_module = 'INS'
AND d.ins_deel_upper = UPPER (rec.cinr)
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND sg.ins_discipline_key = c_meubilair_diskey;
IF ccount > 0 -- Object bestaat reeds!
THEN
SELECT MAX (d.ins_deel_key)
INTO v_deel_key
FROM ins_deel d, ins_srtdeel sd, ins_srtgroep sg
WHERE d.ins_deel_verwijder IS NULL
AND d.ins_deel_module = 'INS'
AND d.ins_deel_upper = UPPER (rec.cinr)
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND sg.ins_discipline_key = c_meubilair_diskey;
v_errormsg := 'Fout bijwerken Meubel-object';
UPDATE ins_deel
SET ins_alg_ruimte_key = v_ruimte_key,
ins_alg_ruimte_type = 'R'
WHERE ins_deel_key = v_deel_key;
COMMIT;
v_srtnoti_code := 'INSNEW';
v_count_update := v_count_update + 1;
ELSE -- Object bestaat nog niet, dus toevoegen!
v_errormsg := 'Fout toevoegen Meubel-object';
INSERT INTO ins_deel (ins_discipline_key,
ins_srtdeel_key,
ins_deel_module,
ins_deel_omschrijving,
ins_alg_ruimte_key,
ins_alg_ruimte_type,
ins_alg_locatie_key)
VALUES (c_meubilair_diskey,
v_srtdeel_key,
'INS',
rec.cinr,
v_ruimte_key,
'R',
v_locatie_key)
RETURNING ins_deel_key
INTO v_deel_key;
COMMIT;
v_srtnoti_code := 'INSUPD';
v_count_create := v_count_create + 1;
END IF;
-- Status upsert-en; huidige status wordt NOOIT gewist via import!
-- (bijwerken kan wel, maar wissen dus niet)!
upsert_inskenmerk (v_deel_key, c_status_srtkey, rec.status);
fac.trackaction (v_srtnoti_code,
v_deel_key,
NULL,
NULL,
NULL);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
'Meubel-Objecten/aantal ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (
p_import_key,
'S',
'Meubel-Objecten/aantal toegevoegd: ' || TO_CHAR (v_count_create),
'');
fac.imp_writelog (
p_import_key,
'S',
'Meubel-Objecten/aantal bijgewerkt: ' || TO_CHAR (v_count_update),
'');
COMMIT;
END;
-- MAIN
BEGIN
upsert_deel (p_import_key);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
'Importproces Meubel-objecten afgebroken!');
END pzho_update_meubel;
/
-- PZHO#28115 Rapport tbv kilometer controle. Deze worden in via meldingen geregistreerd (key 409)
CREATE OR REPLACE VIEW PZHO_V_RAP_DIENSTRITVERANTW
(
FCLT_F_Maand,
FCLT_F_Kenteken,
Kilometers,
Naam_Bestuurder,
Doel,
Van,
Via,
Naar,
Reden_auto_ipv_OV,
Reden_weekend_of_na_1800,
Datum_vertrek,
Tijd_vertrek,
Datum_terug,
Tijd_terug
)
AS
SELECT TO_CHAR (TO_DATE (km1.mld_kenmerkmelding_waarde, 'DD-MM-YYYY'),
'YYYY-MM')
Maand,
fu.fac_usrdata_omschr Kenteken,
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding
WHERE mld_melding_key = m.mld_melding_key
AND mld_kenmerk_key = 1811)
Kilometers,
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding
WHERE mld_melding_key = m.mld_melding_key
AND mld_kenmerk_key = 911)
Naam_Bestuurder,
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding
WHERE mld_melding_key = m.mld_melding_key
AND mld_kenmerk_key = 1805)
Doel,
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding
WHERE mld_melding_key = m.mld_melding_key
AND mld_kenmerk_key = 1806)
Van,
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding
WHERE mld_melding_key = m.mld_melding_key
AND mld_kenmerk_key = 1807)
Via,
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding
WHERE mld_melding_key = m.mld_melding_key
AND mld_kenmerk_key = 1808)
Naar,
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding
WHERE mld_melding_key = m.mld_melding_key
AND mld_kenmerk_key = 832)
Reden_auto_ipv_OV,
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding
WHERE mld_melding_key = m.mld_melding_key
AND mld_kenmerk_key = 831)
Reden_weekend_of_na_1800,
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding
WHERE mld_melding_key = m.mld_melding_key
AND mld_kenmerk_key = 835)
Datum_vertrek,
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding
WHERE mld_melding_key = m.mld_melding_key
AND mld_kenmerk_key = 836)
Tijd_vertrek,
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding
WHERE mld_melding_key = m.mld_melding_key
AND mld_kenmerk_key = 837)
Datum_terugkomst,
(SELECT mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding
WHERE mld_melding_key = m.mld_melding_key
AND mld_kenmerk_key = 838)
Tijd_terugkomst
FROM mld_melding m,
mld_kenmerkmelding km1,
mld_kenmerkmelding km2,
mld_kenmerk mk,
mld_srtkenmerk sk,
fac_kenmerkdomein kd,
fac_usrdata fu
WHERE m.mld_stdmelding_key = 409 -- Dienstauto
AND mld_melding_status IN (5, 6) -- Afgemeld + Historie
AND m.mld_melding_key = km1.mld_melding_key
AND m.mld_melding_key = km2.mld_melding_key
AND km1.mld_kenmerk_key = 835 -- Datum vertrek
AND km1.mld_kenmerkmelding_verwijder IS NULL
AND km2.mld_kenmerk_key = 1809 -- Kenteken Auto
AND km2.mld_kenmerk_key = mk.mld_kenmerk_key
AND sk.mld_srtkenmerk_key = mk.mld_srtkenmerk_key
AND kd.fac_kenmerkdomein_key = SK.FAC_KENMERKDOMEIN_KEY
AND kd.fac_usrtab_key = fu.fac_usrtab_key
AND km2.mld_kenmerkmelding_waarde = fu.fac_usrdata_key;
BEGIN adm.systrackscriptId('$Id$', 0); END;
/
BEGIN fac.registercustversion('PZHO', 50); END;
/
COMMIT;
spool off