Files
Customer/CIZN/cizn.sql
Arthur Egberink b2cbe5f93a CIZN#81269 Implementatie CIZ
svn path=/Customer/trunk/; revision=70898
2025-11-11 15:51:27 +00:00

912 lines
42 KiB
MySQL
Raw Permalink Blame History

--
-- $Id$
--
-- Script containing customer specific sql statements for CIZN
DEFINE thisfile = 'cizn.sql'
DEFINE dbuser = 'CIZN'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT;
WHENEVER SQLERROR CONTINUE;
SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL;
SPOOL &fcltlogfile
WHENEVER SQLERROR EXIT;
SELECT adm.checkscriptcust('&dbuser') AS fcltcusttxt FROM DUAL;
WHENEVER SQLERROR CONTINUE;
---------------------------------------
PROMPT &fcltcusttxt
---------------------------------------
SET DEFINE OFF
------ payload begin ------
CREATE OR REPLACE PACKAGE CIZN
AS
PROCEDURE update_devices_from_ad;
PROCEDURE select_asset_jaar_not;
END;
/
CREATE OR REPLACE PACKAGE BODY CIZN
AS
PROCEDURE update_devices_from_ad
AS
CURSOR c IS
SELECT i.serialnumber,
CAST (
FROM_TZ (CAST (TO_DATE (REPLACE (i.lastsyncdatetime, 'Z'), 'yyyy-mm-dd"T"hh24:mi:ss') AS TIMESTAMP), 'UTC')
AT TIME ZONE 'Europe/Amsterdam' AS DATE) lastLocalSyncDateTime,
i.userDisplayName,
i.emailaddress,
i.phoneNumber,
i.imei,
i.manufacturer,
i.model,
d.ins_deel_key
FROM cizn_imp_device_info i, ins_deel d
WHERE serialnumber = COALESCE (ins_deel_opmerking, 'QueQuLeQue');
BEGIN
FOR rec IN c LOOP
FLX.setflex('INS', 47, rec.ins_deel_key, rec.lastLocalSyncDateTime);
FLX.setflex('INS', 45, rec.ins_deel_key, rec.userDisplayName);
FLX.setflex('INS', 44, rec.ins_deel_key, rec.imei);
FLX.setflex('INS', 82, rec.ins_deel_key, rec.manufacturer);
FLX.setflex('INS', 81, rec.ins_deel_key, rec.model);
FLX.setflex('INS', 121, rec.ins_deel_key, rec.emailaddress);
UPDATE ins_deel SET ins_deel_externsyncdate = SYSDATE WHERE ins_deel_key = rec.ins_deel_key;
END LOOP;
END;
-- Procedure om ieder jaar een notificatie te sturen naar personen die <20><>n of meerdere voorzieningen
-- in hun bezit hebben. Als een persoon al eerder een notificiatie ontvangen heeft omdat er een voorziening
-- op zijn/haar naam is gezet CUST03 of omdat er een voorziening is ingeleverd CUST04, dan zal dit als laatste
-- notificatiemoment genomen worden. Om het systeem op te starten wordt vanaf 9 september per 2 weken een letter uit het
-- alfabet genotificeerd.
PROCEDURE select_asset_jaar_not
AS
CURSOR c_jaar IS
SELECT *
FROM (SELECT DISTINCT
p.prs_perslid_key,
p.prs_perslid_email,
ASCII (UPPER (SUBSTR (prs_perslid_naam, 1, 1))) - 64,
prs_perslid_naam,
-- De positie van de letter in het alfabet: (ASCII (UPPER (SUBSTR (prs_perslid_naam, 1, 1))) - 65)
TO_DATE ('2023-09-09', 'yyyy-mm-dd') + (ASCII (UPPER (SUBSTR (prs_perslid_naam, 1, 1))) - 65) * 14
ddefault,
GREATEST (
COALESCE (
FAC.gettrackingdate ('CUST03', p.prs_perslid_key),
TO_DATE ('2023-09-09', 'yyyy-mm-dd') + (ASCII (UPPER (SUBSTR (prs_perslid_naam, 1, 1))) - 65) * 14),
COALESCE (
FAC.gettrackingdate ('CUST04', p.prs_perslid_key),
TO_DATE ('2023-09-09', 'yyyy-mm-dd') + (ASCII (UPPER (SUBSTR (prs_perslid_naam, 1, 1))) - 65) * 14),
COALESCE (
FAC.gettrackingdate ('CUST05', p.prs_perslid_key),
TO_DATE ('2023-09-09', 'yyyy-mm-dd') + (ASCII (UPPER (SUBSTR (prs_perslid_naam, 1, 1))) - 65) * 14))
laatsteNot
FROM prs_perslid p, ins_deel_uitgifte u
WHERE p.prs_perslid_key = u.prs_perslid_key
AND ins_deel_uitgifte_ingeleverd IS NULL
AND prs_perslid_inactief IS NULL
AND prs_perslid_verwijder IS NULL
AND prs_perslid_email IS NOT NULL)
WHERE add_months(laatsteNot, 12) < SYSDATE;
v_cust06_key NUMBER;
v_rapport_key NUMBER;
v_timestamp DATE;
BEGIN
v_timestamp := SYSDATE;
SELECT fac_srtnotificatie_key
INTO v_cust06_key
FROM fac_srtnotificatie
WHERE fac_srtnotificatie_code = 'CUST06';
SELECT fac_usrrap_key
INTO v_rapport_key
FROM fac_usrrap
WHERE fac_usrrap_code = 'ICTJAARNOT';
FOR rec IN c_jaar
LOOP
INSERT INTO fac_notificatie (fac_srtnotificatie_key,
fac_notificatie_status,
fac_notificatie_oms,
fac_notificatie_refkey,
fac_notificatie_extrakey,
fac_notificatie_datum,
prs_perslid_key_receiver,
fac_notificatie_receiver_email,
fac_notificatie_sender_email)
VALUES (v_cust06_key,
2,
'Jaarlijkse controle ICT voorzieningen',
v_rapport_key,
rec.prs_perslid_key,
v_timestamp,
rec.prs_perslid_key,
rec.prs_perslid_email,
'servicedesk@ciz.nl');
FAC.trackaction ('CUST05',
rec.prs_perslid_key,
NULL,
v_timestamp,
'Jaarlijkse controle ICT voorzieningen');
END LOOP;
END;
END;
/
CREATE OR REPLACE VIEW cizn_v_rap_export_kentekens
AS
SELECT 'extern' typebezoek,
alg_locatie_omschrijving locatie,
rrd.res_rsv_deel_van datum,
REPLACE (kw.res_kenmerkreservering_waarde, '-') kenteken,
pf.prs_perslid_naam_full naam,
TO_CHAR (rrd.res_rsv_deel_van, 'dd-mm-yyyy hh24:mi') van,
TO_CHAR (rrd.res_rsv_deel_tot, 'dd-mm-yyyy hh24:mi') tot,
CASE WHEN fac.count_Work_Days(rrd.res_rsv_deel_aanmaak, rrd.res_rsv_deel_van) = 1
THEN
CASE WHEN TO_CHAR(rrd.res_rsv_deel_aanmaak, 'hh24mi') > '1630'
THEN rrd.res_rsv_deel_aanmaak
ELSE NULL
END
END datum_te_laat
FROM res_rsv_deel rrd,
res_deel rd,
ins_v_deel_gegevens dg,
alg_locatie l,
res_rsv_ruimte rrr,
res_kenmerkwaarde kw,
res_kenmerk k,
res_srtkenmerk sk,
prs_v_perslid_fullnames pf
WHERE rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND kw.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND kw.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = sk.res_srtkenmerk_key
AND sk.res_srtkenmerk_code = 'KENTEKEN_EXT'
AND rrr.res_rsv_ruimte_host_key = pf.prs_perslid_key
AND rrd.res_rsv_deel_verwijder IS NULL
AND rrd.res_deel_key = rd.res_deel_key
AND rd.res_ins_deel_key = dg.ins_deel_key
AND dg.alg_locatie_key = l.alg_locatie_key
UNION ALL
SELECT 'bezoekers' typebezoek,
l.alg_locatie_omschrijving locatie,
a.bez_afspraak_datum datum,
REPLACE (bez_bezoekers_kenteken, '-') kenteken,
bez_afspraak_naam naam,
TO_CHAR (a.bez_afspraak_datum, 'dd-mm-yyyy hh24:mi') van,
TO_CHAR (a.bez_afspraak_eind, 'dd-mm-yyyy hh24:mi') tot,
CASE WHEN fac.count_Work_Days(b.bez_bezoekers_aanmaak, a.bez_afspraak_datum) = 1
THEN
CASE WHEN TO_CHAR(b.bez_bezoekers_aanmaak, 'hh24mi') > '1630'
THEN b.bez_bezoekers_aanmaak
ELSE NULL
END
END datum_te_laat
FROM bez_bezoekers b,
bez_afspraak a,
res_v_aanwezigrsv_deel rrd,
res_deel rd,
ins_v_deel_gegevens dg,
alg_locatie l
WHERE b.bez_afspraak_key = a.bez_afspraak_key
AND b.bez_bezoekers_key = rrd.bez_bezoekers_key(+)
AND rrd.res_deel_key = rd.res_deel_key(+)
AND rd.res_ins_deel_key = dg.ins_deel_key(+)
AND a.alg_locatie_key = l.alg_locatie_key(+);
-- View om de juiste labels te tonen in het werkplekreserveringsscherm.
CREATE OR REPLACE VIEW cizn_v_label_deel_res_datum
(
fclt_f_datum,
ins_deel_key,
res_deel_omschrijving,
waarde1,
waarde,
waarde3,
waarde_html,
waarde_html2
)
AS
WITH
datums
AS
( SELECT TRUNC (SYSDATE) + LEVEL - 1 datum
FROM DUAL
CONNECT BY LEVEL <= 14)
SELECT datums.datum
fclt_f_datum,--count(res.res_ins_deel_key),
isd.res_ins_deel_key
ins_deel_key,
isd.res_deel_omschrijving,
CHR (10)
|| LISTAGG (
DECODE (
naam,
NULL, '',
'[s40]'
|| naam
|| ' ('
|| TO_CHAR (res_rsv_deel_van, 'HH24:MI')
|| '-'
|| DECODE (TRUNC (res_rsv_deel_tot),
TRUNC (res_rsv_deel_van), TO_CHAR (res_rsv_deel_tot, 'HH24:MI'),
TO_CHAR (res_rsv_deel_tot, 'DD-MM-YYYY HH24:MI'))
|| ')'),
CHR (10))
WITHIN GROUP (ORDER BY res_rsv_deel_van) || 'w1'
waarde1,
DECODE (count(res.res_ins_deel_key), 0, substr(isd.res_deel_omschrijving, INSTR(isd.res_deel_omschrijving, '.') +1, 20),
CHR (10)
|| LISTAGG (DECODE (naam, NULL, '', '[s40]' || TO_CHAR (res_rsv_deel_van, 'HH24:MI') || ' ' || naam),
CHR (10))
WITHIN GROUP (ORDER BY res_rsv_deel_van))
waarde2,
CHR (10)
|| LISTAGG (DECODE (naam, NULL, '', '[s40]' || naam), CHR (10)) WITHIN GROUP (ORDER BY res_rsv_deel_van) || 'w3'
waarde3,
LISTAGG (
DECODE (naam,
NULL, '',
'<span class="body">' || TO_CHAR (res_rsv_deel_van, 'HH24:MI') || ' ' || naam || '</span>'),
'<br>')
WITHIN GROUP (ORDER BY res_rsv_deel_van) || 'h1'
waarde_html,
LISTAGG (DECODE (naam, NULL, '', '<span class="body">' || naam || '</span>'), '<br>')
WITHIN GROUP (ORDER BY res_rsv_deel_van) || 'h2'
waarde_html2
FROM res_v_aanwezigdeel isd,
datums,
(SELECT datum,
res_ins_deel_key,
DECODE (p.prs_perslid_visibility, 1, pf.prs_perslid_naam_friendly, a.prs_afdeling_omschrijving)
naam,
res_rsv_deel_van,
res_rsv_deel_tot
FROM res_v_aanwezigdeel r,
res_v_aanwezigrsv_deel rrd,
res_rsv_ruimte rrr,
prs_v_perslid_fullnames pf,
prs_perslid p,
prs_afdeling a,
datums
WHERE r.res_deel_key = rrd.res_deel_key
AND rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND rrr.res_rsv_ruimte_host_key = pf.prs_perslid_key
AND pf.prs_perslid_key = p.prs_perslid_key
AND p.prs_afdeling_key = a.prs_afdeling_key
AND datum + 1 >= res_rsv_deel_van
AND datum < res_rsv_deel_tot) res -- Bezet
WHERE isd.res_ins_deel_key = res.res_ins_deel_key(+) AND datums.datum = res.datum(+)
GROUP BY datums.datum, isd.res_ins_deel_key, isd.res_deel_omschrijving;
-- Thema om het vlekkenplan te tonen welke afdeling die dag de ruimte gepland heeft. Om dit in te richten moet je voor
-- deze ruimten een reservering inleggen en het veld afdeling vullen.
CREATE OR REPLACE VIEW cizn_v_thema_ruimte_dag
AS
WITH
datums
AS
( SELECT TRUNC (SYSDATE) + LEVEL - 1 datum
FROM DUAL
CONNECT BY LEVEL <= 14)
SELECT datums.datum fclt_f_datum,
r2a.alg_ruimte_key,
r2a.alg_ruimte_key alg_ruimte_omschrijving,
NULL waarde1,
afdeling waarde,
NULL waarde3,
NULL waarde_html,
NULL waarde_html2
FROM res_v_rsv_ruimte_2_alg_ruimte r2a,
datums,
(SELECT datum,
res_rsv_ruimte_key,
flx.getdomeinwaarde(k.fac_kenmerkdomein_key, flx.getflex ('RES', k.res_kenmerk_key, rrr.res_rsv_ruimte_key)) afdeling
FROM res_v_aanwezigrsv_ruimte rrr,
datums,
(SELECT k.res_kenmerk_key, sk.fac_kenmerkdomein_key
FROM res_srtkenmerk sk, res_kenmerk k
WHERE sk.res_srtkenmerk_key = k.res_srtkenmerk_key AND res_srtkenmerk_code = 'AFDELINGWP') k
WHERE TRUNC(datum) = TRUNC(res_rsv_ruimte_van)) res -- Bezet
WHERE r2a.res_rsv_ruimte_key = res.res_rsv_ruimte_key(+)
AND datums.datum = res.datum(+);
-- Kopie van het standaard thema waarbij de zit/sta bureaus zijn toegevoegd. Deze krijgen een andere kleur als ze beschikbaar zijn.
CREATE OR REPLACE VIEW cizn_v_thema_deel_res_datum
AS
WITH
datums
AS
( SELECT TRUNC (SYSDATE) + LEVEL - 1 datum
FROM DUAL
CONNECT BY LEVEL <= 42)
SELECT datum fclt_f_datum,
ins_deel_key,
MIN (res_rsv_deel_van) min_van,
MAX (res_rsv_deel_tot) max_tot,
CASE WHEN MAX (res_rsv_deel_tot) IS NULL THEN 0 ELSE 3 -- hele dag
END waarde1,
CASE
WHEN MAX (res_rsv_deel_tot) IS NULL AND zitsta IS NULL THEN 0 -- beschikbaar normaal bureau
WHEN MAX (res_rsv_deel_tot) IS NULL AND zitsta = 1 THEN 4 -- beschikbaar zitsta bureau
WHEN TO_CHAR (MAX (res_rsv_deel_tot), 'HH24') <= 13 THEN 1 -- ochtend
WHEN TO_CHAR (MIN (res_rsv_deel_van), 'HH24') >= 12 THEN 2 -- middag
ELSE 3 -- hele dag
END waarde,
COUNT (res_rsv_deel_tot) -- aantal reservering deze dag
waarde3
FROM (SELECT datums.datum,
res_ins_deel_key ins_deel_key,
res_rsv_deel_van,
res_rsv_deel_tot,
zitsta
FROM res_v_aanwezigdeel r,
ins_deel d,
(SELECT ins_deel_key, 1 zitsta
FROM ins_kenmerkdeel kd, ins_kenmerk k, ins_srtkenmerk sk
WHERE kd.ins_kenmerk_key = k.ins_kenmerk_key
AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
AND sk.ins_srtkenmerk_code = 'ZITSTA') kd,
datums,
(SELECT datum,
res_deel_key,
res_rsv_deel_van,
res_rsv_deel_tot
FROM datums, res_v_aanwezigrsv_deel rrd
WHERE res_rsv_deel_van > TRUNC (SYSDATE) - 1 -- negeer alle irrelevante historie sowieso
AND datum + 1 >= res_rsv_deel_van
AND datum < res_rsv_deel_tot) blokkerend -- vandaag en nog niet afgelopen
WHERE r.res_deel_key = blokkerend.res_deel_key(+)
AND datums.datum = blokkerend.datum(+)
AND d.ins_deel_key = kd.ins_deel_key(+)
AND (r.res_deel_vervaldatum IS NULL OR r.res_deel_vervaldatum > datums.datum)
AND d.ins_deel_key = r.res_ins_deel_key)
GROUP BY datum, ins_deel_key, zitsta
ORDER BY datum, ins_deel_key;
CREATE OR REPLACE VIEW cizn_v_thema_ruimte
AS
SELECT r.alg_ruimte_key, 'bestaat' waarde, 1 waarde_key
FROM alg_v_aanwezigruimte r;
CREATE OR REPLACE VIEW cizn_v_uitgifte_ict_basis
AS
SELECT pf.prs_perslid_key extra_key,
TO_CHAR (u.ins_deel_uitgifte_begin, 'DD-MM-YYYY') ins_deel_uitgifte_begin,
TO_CHAR (u.ins_deel_uitgifte_ingeleverd, 'DD-MM-YYYY') ins_deel_uitgifte_ingeleverd,
sg.ins_srtgroep_omschrijving,
sd.ins_srtdeel_omschrijving,
d.ins_deel_omschrijving,
pf.prs_perslid_naam_friendly,
d.ins_deel_opmerking serienummer,
CASE
WHEN tu.fac_srtnotificatie_code = 'CUST04'
AND u.ins_deel_uitgifte_ingeleverd BETWEEN COALESCE (tu.intv_begin,
TO_DATE ('20240517 14:00', 'yyyymmdd hh24:mi'))
AND intv_eind
THEN
1
WHEN tu.fac_srtnotificatie_code IS NULL
AND u.ins_deel_uitgifte_ingeleverd IS NOT NULL
AND u.ins_deel_uitgifte_ingeleverd > TO_DATE ('20240517 14:00', 'yyyymmdd hh24:mi')
THEN
1
ELSE
0
END act_ingenomen,
CASE WHEN SYSDATE - u.ins_deel_uitgifte_ingeleverd < 1 THEN 1 ELSE 0 END rec_ingenomen,
CASE
WHEN ti.fac_srtnotificatie_code = 'CUST03'
AND u.ins_deel_uitgifte_begin BETWEEN COALESCE (ti.intv_begin,
TO_DATE ('20240517 14:00', 'yyyymmdd hh24:mi'))
AND intv_eind
THEN
1
WHEN ti.fac_srtnotificatie_code IS NULL
AND u.ins_deel_uitgifte_begin IS NOT NULL
AND u.ins_deel_uitgifte_begin > TO_DATE ('20240517 14:00', 'yyyymmdd hh24:mi')
THEN
1
ELSE
0
END act_uitgegeven,
(SELECT pfi.prs_perslid_naam_full
FROM prs_v_perslid_fullnames pfi
WHERE pfi.prs_perslid_key = FAC.gettrackinguserkey ('INSIN2', d.ins_deel_key)) ingenomen_door,
TO_CHAR (u.ins_deel_uitgifte_begin, 'YYYYMMDD') volgorde
FROM ins_deel_uitgifte u,
ins_deel d,
ins_srtdeel sd,
ins_srtgroep sg,
prs_perslid p,
prs_v_perslid_fullnames_all pf,
( SELECT sn.fac_srtnotificatie_code, t.fac_tracking_refkey, MAX (fac_tracking_datum) intv_begin
FROM fac_tracking t, fac_srtnotificatie sn
WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND fac_srtnotificatie_code IN ('CUST04')
GROUP BY fac_tracking_refkey, sn.fac_srtnotificatie_code) tu,
( SELECT sn.fac_srtnotificatie_code, t.fac_tracking_refkey, MAX (fac_tracking_datum) intv_begin
FROM fac_tracking t, fac_srtnotificatie sn
WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND fac_srtnotificatie_code IN ('CUST03')
GROUP BY fac_tracking_refkey, sn.fac_srtnotificatie_code) ti,
(SELECT fac_usrdata_vervaldatum intv_eind
FROM fac_usrdata
WHERE fac_usrdata_code = 'LastNotIns') l
WHERE u.prs_perslid_key = pf.prs_perslid_key
AND u.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_email IS NOT NULL
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND u.prs_perslid_key = tu.fac_tracking_refkey(+)
AND u.prs_perslid_key = ti.fac_tracking_refkey(+)
AND d.ins_deel_key = u.ins_deel_key
AND COALESCE(d.ins_deel_vervaldatum, SYSDATE+1) > SYSDATE
AND d.ins_deel_verwijder IS NULL;
-- Deze procedure stuurt medewerkers een mail als ze nieuwe ICT voorzieningen op de naam hebben gekregen
-- of als ze ICT voorzieningen hebben ingeleverd. Hiervoor worden 4 notificaties gebruikt;
-- * CUST01 is de notificatie op een rapport naar de medewerker om toegevoegde voorzieningen te notificeren
-- * CUST02 is de notificatie op een rapport naar de medewerker om ingeleverde voorzieningen te notificeren
-- * CUST03 is de tracking op de persoon van de nieuwe voorzieningen
-- * CUST04 is de tracking op de persoon van de ingeleverde voorzieningen
-- Onderstaande procedure zet de timestamp in de eigen tabel met code 'LastNotIns'. Dit is het tijdstip tot wanneer het rapport
-- cizn_v_uitgifte_ict_basis kijkt naar de mutaties. Het tijdstip van het toevoegen van de notificatie en het daadwerkelijk versturen
-- kan namelijk afwijken.
CREATE OR REPLACE PROCEDURE cizn_select_asset_not (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
CURSOR c_uitgifte IS
SELECT extra_key,
'CIZ-Facilitor, Bevestiging uitgifte ICT voorziening(en) ('
|| LISTAGG (ins_deel_omschrijving, ',') WITHIN GROUP (ORDER BY ins_deel_omschrijving)
|| ')' text,
p.prs_perslid_email
FROM cizn_v_uitgifte_ict_basis b, prs_perslid p
WHERE act_uitgegeven = 1
AND b.extra_key = p.prs_perslid_key
GROUP BY extra_key, p.prs_perslid_email;
CURSOR c_inname IS
SELECT extra_key,
'CIZ-Facilitor, Bevestiging inname ICT voorziening(en) ('
|| LISTAGG (ins_deel_omschrijving, ',') WITHIN GROUP (ORDER BY ins_deel_omschrijving)
|| ')' text,
p.prs_perslid_email
FROM cizn_v_uitgifte_ict_basis b, prs_perslid p
WHERE act_ingenomen = 1
AND b.extra_key = p.prs_perslid_key
GROUP BY extra_key, p.prs_perslid_email;
-- bij het inleveren kan de regio aangepast worden waar de voorzieningen ingeleverd worden. Aan de
-- hand van dit veld regio wordt dan de ruimte aangepast. Regio is een eigen tabel waarbij de prijs
-- van de eigen tabel het ruimtenummer bevat.
CURSOR c_update_ruimte IS
SELECT d.ins_deel_key,
(SELECT alg_locatie_key
FROM alg_v_ruimte_gegevens rg
WHERE rg.alg_ruimte_key = ud.fac_usrdata_prijs) alg_locatie_key,
ud.fac_usrdata_prijs alg_ruimte_key
FROM ins_deel d,
ins_kenmerkdeel kd,
ins_kenmerk k,
fac_usrdata ud,
ins_deel_uitgifte u
WHERE d.ins_deel_key = kd.ins_deel_key
AND kd.ins_kenmerk_key = k.ins_kenmerk_key
AND k.ins_kenmerk_code = 'REGIO'
AND fac.safe_to_number (kd.ins_kenmerkdeel_waarde) = ud.fac_usrdata_key
AND d.ins_alg_ruimte_type = 'R'
AND COALESCE (d.ins_alg_ruimte_key_org, d.ins_alg_ruimte_key) <> ud.fac_usrdata_prijs
AND u.ins_deel_uitgifte_ingeleverd > SYSDATE - 1
AND d.ins_deel_key = u.ins_deel_key;
v_cust01_key NUMBER;
v_cust02_key NUMBER;
v_rapport_key NUMBER;
v_timestamp DATE;
BEGIN
v_timestamp := SYSDATE;
UPDATE fac_usrdata
SET fac_usrdata_vervaldatum = v_timestamp
WHERE fac_usrdata_code = 'LastNotIns';
SELECT fac_srtnotificatie_key
INTO v_cust01_key
FROM fac_srtnotificatie
WHERE fac_srtnotificatie_code = 'CUST01';
SELECT fac_srtnotificatie_key
INTO v_cust02_key
FROM fac_srtnotificatie
WHERE fac_srtnotificatie_code = 'CUST02';
SELECT fac_usrrap_key
INTO v_rapport_key
FROM fac_usrrap
WHERE fac_usrrap_code = 'UITGIFTEINNAME';
FOR rec IN c_uitgifte
LOOP
IF rec.prs_perslid_email IS NOT NULL
THEN
INSERT INTO fac_notificatie (fac_srtnotificatie_key,
fac_notificatie_status,
fac_notificatie_oms,
fac_notificatie_refkey,
fac_notificatie_extrakey,
fac_notificatie_datum,
prs_perslid_key_receiver,
fac_notificatie_receiver_email,
fac_notificatie_sender_email)
VALUES (v_cust01_key,
2,
rec.text,
v_rapport_key,
rec.extra_key,
v_timestamp,
rec.extra_key,
rec.prs_perslid_email,
'servicedesk@ciz.nl');
END IF;
FAC.trackaction ('CUST03',
rec.extra_key,
NULL,
v_timestamp,
rec.text);
END LOOP;
FOR rec IN c_inname
LOOP
IF rec.prs_perslid_email IS NOT NULL
THEN
INSERT INTO fac_notificatie (fac_srtnotificatie_key,
fac_notificatie_status,
fac_notificatie_oms,
fac_notificatie_refkey,
fac_notificatie_extrakey,
fac_notificatie_datum,
prs_perslid_key_receiver,
fac_notificatie_receiver_email,
fac_notificatie_sender_email)
VALUES (v_cust02_key,
2,
rec.text,
v_rapport_key,
rec.extra_key,
v_timestamp,
rec.extra_key,
rec.prs_perslid_email,
'servicedesk@ciz.nl');
END IF;
FAC.trackaction ('CUST04',
rec.extra_key,
NULL,
v_timestamp,
rec.text);
END LOOP;
FOR rec IN c_update_ruimte
LOOP
UPDATE ins_deel
SET ins_alg_ruimte_key = rec.alg_ruimte_key,
ins_alg_locatie_key = rec.alg_locatie_key
WHERE ins_deel_key = rec.ins_deel_key;
END LOOP;
END;
/
-- Overzicht van ICT voorzieningen die niet gevonden worden in de intune database.
CREATE OR REPLACE VIEW cizn_v_rap_asset_not_in_intune
AS
SELECT ins_srtgroep_omschrijving,
ins_srtdeel_omschrijving,
ins_deel_opmerking,
alg_gebouw_naam,
prs_perslid_volnaam,
flx.getdomeinwaarde (21, flx.getflex ('INS', 41, ins_deel_key)) status,
ins_deel_key
FROM ins_v_deel_gegevens
WHERE ins_discipline_omschrijving = 'ICT'
AND ins_srtgroep_omschrijving IN ('Computer', 'Telefoon', 'Tablet')
AND COALESCE (ins_deel_opmerking, 'Leeg') NOT IN
(SELECT COALESCE (serialnumber, 'QueQeLeQue') FROM cizn_imp_device_info)
AND ins_deel_vervaldatum IS NULL;
-- Rapportage met algemene gegevens van de ICT voorziening. Hierbij wordt ook de aanmaakdatum getoond. Deze
-- is op andere manieren niet te achterhalen.
CREATE OR REPLACE VIEW cizn_v_rap_asset_gegevens
AS
SELECT d.ins_deel_aanmaak,
sg.ins_srtgroep_omschrijving,
sd.ins_srtdeel_omschrijving,
d.ins_deel_omschrijving,
d.ins_deel_opmerking,
flx.getdomeinwaarde (21, flx.getflex ('INS', 41, d.ins_deel_key)) status,
flx.getdomeinwaarde (22, flx.getflex ('INS', 48, d.ins_deel_key)) regio,
alg_gebouw_naam,
prs_perslid_volnaam,
d.ins_deel_key
FROM ins_deel d,
ins_srtdeel sd,
ins_srtgroep sg,
ins_discipline di,
ins_v_deel_gegevens dg
WHERE d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND sg.ins_discipline_key = di.ins_discipline_key
AND di.ins_discipline_omschrijving = 'ICT'
AND d.ins_deel_verwijder IS NULL
AND d.ins_deel_vervaldatum IS NULL
AND d.ins_deel_key = dg.ins_deel_key(+);
-- Basisrapportage met deelgegevens gecombineerd met de import uit Intune
-- ICT 221
CREATE OR REPLACE VIEW cizn_v_asset_check_bron
AS
SELECT d.ins_deel_key,
d.ins_deel_opmerking,
sd.ins_srtdeel_omschrijving,
sg.ins_srtgroep_omschrijving,
i.emailaddress,
p.prs_perslid_email,
fac.safe_to_date (flx.getflex ('INS', 47, d.ins_deel_key), 'yyyy-mm-dd hh24:mi:ss') laatst_ingelogd
FROM cizn_imp_device_info i,
ins_deel d,
ins_srtdeel sd,
ins_srtgroep sg,
(SELECT ins_deel_key, prs_perslid_key, prs_perslid_email FROM ins_deel d2, prs_perslid p2
WHERE d2.ins_alg_ruimte_type = 'P' and d2.ins_alg_ruimte_key = p2.prs_perslid_key) p
WHERE i.serialNumber = d.ins_deel_opmerking
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND d.ins_deel_key = p.ins_deel_key(+)
AND sg.ins_discipline_key = 221;
-- Rapportage van assets die niet uitgegeven zijn in Facilitor maar waarop wel recentelijk is ingelogd.
CREATE OR REPLACE VIEW cizn_v_asset_niet_uitgegeven
AS
SELECT ins_deel_key,
ins_deel_opmerking,
ins_srtdeel_omschrijving,
ins_srtgroep_omschrijving,
emailaddress,
prs_perslid_email,
laatst_ingelogd
FROM cizn_v_asset_check_bron dg
WHERE laatst_ingelogd > SYSDATE - 7
AND NOT EXISTS
(SELECT 1
FROM ins_deel_uitgifte u
WHERE u.ins_deel_key = dg.ins_deel_key
AND (u.ins_deel_uitgifte_ingeleverd IS NULL OR u.ins_deel_uitgifte_ingeleverd > SYSDATE - 7));
-- Rapportage van assets waarbij iemand anders ingelogd
CREATE OR REPLACE VIEW cizn_v_asset_user_mismatch
AS
SELECT ins_deel_key,
ins_deel_opmerking,
ins_srtdeel_omschrijving,
ins_srtgroep_omschrijving,
emailaddress,
prs_perslid_email,
laatst_ingelogd
FROM cizn_v_asset_check_bron
WHERE UPPER (emailaddress) <> UPPER (prs_perslid_email);
-- Rapport om de historie van bezittingen per persoon te kunnen raadplegen.
CREATE OR REPLACE VIEW cizn_v_rap_asset_prs_historie
AS
SELECT ins_srtgroep_omschrijving,
ins_srtdeel_omschrijving,
ins_deel_omschrijving,
ins_deel_opmerking,
flx.getdomeinwaarde (21, flx.getflex ('INS', 41, d.ins_deel_key)) status,
u.ins_deel_uitgifte_begin uitgegeven,
u.ins_deel_uitgifte_ingeleverd ingenomen,
pf.prs_perslid_naam_full,
pf.prs_perslid_naam_friendly,
p.prs_perslid_verwijder,
p.prs_perslid_inactief,
d.ins_deel_key,
p.prs_perslid_key,
d.ins_deel_verwijder,
d.ins_deel_vervaldatum
FROM ins_deel_uitgifte u,
ins_deel d,
ins_srtdeel sd,
ins_srtgroep sg,
ins_discipline di,
prs_v_perslid_fullnames_all pf,
prs_perslid p
WHERE u.ins_deel_key = d.ins_deel_key
AND u.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_key = pf.prs_perslid_key
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND sg.ins_discipline_key = di.ins_discipline_key
AND di.ins_discipline_omschrijving = 'ICT';
-- Rapport om inzichtelijk te maken welke personen die door de SCIM koppeling op Inactief zijn gezet
-- toch nog ICT voorzieningen in het bezit hebben.
CREATE OR REPLACE VIEW cizn_v_ict_assets_prs_inactief
AS
SELECT p.prs_perslid_inactief,
pf.prs_perslid_naam_full,
a.prs_afdeling_omschrijving,
d.ins_deel_opmerking,
sd.ins_srtdeel_omschrijving,
d.ins_deel_key,
p.prs_perslid_key
FROM prs_perslid p,
ins_deel_uitgifte u,
ins_deel d,
ins_srtdeel sd,
prs_afdeling a,
prs_v_perslid_fullnames_all pf
WHERE (p.prs_perslid_verwijder IS NOT NULL OR p.prs_perslid_inactief < SYSDATE)
AND u.prs_perslid_key = p.prs_perslid_key
AND u.ins_deel_uitgifte_ingeleverd IS NULL
AND u.ins_deel_key = d.ins_deel_key
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND p.prs_perslid_key = pf.prs_perslid_key
AND p.prs_afdeling_key = a.prs_afdeling_key
AND d.ins_deel_verwijder IS NULL;
-- Dashboard met informatie omtrent assetbeheer. Per regel wordt het aantal van een rapport getoond. Doorklikken leidt tot het rapport zelf.
CREATE OR REPLACE VIEW cizn_v_rap_asset_dashboard
AS
SELECT 1 volgorde,
'<a onclick=''FcltMgr.openDetail("Appl/fac/fac_report.asp?rapcode=ASSETM_DASHB_INACTIEF", "Apparaten toegewezen aan gebruikers met be<62>indigd contract")''>'
|| 'Apparaten toegewezen aan gebruikers met be<62>indigd contract'
|| '</a>' html_omschrijving,
(SELECT COUNT (*) FROM cizn_v_ict_assets_prs_inactief) aantal
FROM DUAL
UNION ALL
SELECT 2 volgorde,
'<a onclick=''FcltMgr.openDetail("Appl/fac/fac_report.asp?rapcode=ASSETM_USER_MISMATCH", "Oneigenlijk gebruik van ICT voorzieningen door anderen")''>'
|| 'Oneigenlijk gebruik van ICT voorzieningen door anderen'
|| '</a>' html_omschrijving,
(SELECT COUNT (*) FROM cizn_v_asset_user_mismatch) aantal
FROM DUAL
UNION ALL
SELECT 3 volgorde,
'<a onclick=''FcltMgr.openDetail("Appl/fac/fac_report.asp?rapcode=ASSET_REQ_FOR_DEPRICATION", "Assets aangemeld voor afschrijving")''>'
|| 'Assets aangemeld voor afschrijving'
|| '</a>' html_omschrijving,
(SELECT COUNT (*) FROM cizn_v_rap_asset_gegevens WHERE status = 'Aangemeld voor afschrijving') aantal
FROM DUAL
UNION ALL
SELECT 4 volgorde,
'<a onclick=''FcltMgr.openDetail("Appl/fac/fac_report.asp?rapcode=ASSETM_NOT_USED_FOR_60", "Assets langer dan 60 dagen niet gebruikt")''>'
|| 'Assets langer dan 60 dagen niet gebruikt'
|| '</a>' html_omschrijving,
(SELECT COUNT (*) FROM cizn_v_asset_check_bron where SIGN(SYSDATE-LAATST_INGELOGD-60) = 1 AND prs_perslid_email IS NOT NULL) aantal
FROM DUAL
UNION ALL
SELECT 5 volgorde,
'<a onclick=''FcltMgr.openDetail("Appl/fac/fac_report.asp?rapcode=ASSETM_NOT_IN_INTUNE", "Computer, mobielen en tablets die niet in Intune staan")''>'
|| 'Computer, mobielen en tablets die niet in Intune staan'
|| '</a>' html_omschrijving,
(SELECT COUNT (*) FROM cizn_v_rap_asset_not_in_intune ) aantal
FROM DUAL;
-- Rapport om de status van ICT assets te communiceren naar de financiele administratie.
CREATE OR REPLACE VIEW cizn_v_rap_ins_fin_admin
AS
SELECT d.ins_deel_key,
sg.ins_srtgroep_omschrijving,
sd.ins_srtdeel_omschrijving,
d.ins_deel_opmerking,
flx.getflex ('INS', 46, d.ins_deel_key) inkoopnummer,
d.ins_deel_aanmaak,
d.ins_deel_vervaldatum,
(SELECT prs_perslid_naam_full FROM fac_tracking t, prs_v_perslid_fullnames_all pf
WHERE t.fac_tracking_key = u.fac_tracking_key and t.prs_perslid_key = pf.prs_perslid_key) afgeschreven_door
FROM ins_deel d, ins_srtdeel sd,
ins_srtgroep sg,
(SELECT fac_tracking_refkey, MAX(fac_tracking_key) fac_tracking_key
FROM fac_tracking t, fac_srtnotificatie sn
WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'INSUPD'
AND ( fac_tracking_oms LIKE '%Vervaldatum: (leeg) --> %'
OR fac_tracking_oms LIKE '%--> Afgeschreven%')
GROUP BY fac_tracking_refkey) u
WHERE d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND sg.ins_discipline_key = 221
AND ins_deel_verwijder IS NULL
AND d.ins_deel_key = u.fac_tracking_refkey(+);
-- View om te gebuiken in de notificatie CUST06 om jaarlijks de ICT voorzieningen te noticeren
CREATE OR REPLACE VIEW cizn_v_rap_asset_jaar
AS
SELECT ins_deel_omschrijving,
ins_srtgroep_omschrijving,
ins_srtdeel_omschrijving,
ins_deel_opmerking serienummer,
uitgegeven,
prs_perslid_naam_friendly,
prs_perslid_key extra_key
FROM cizn_v_rap_asset_prs_historie
WHERE ins_deel_verwijder IS NULL
AND ins_deel_vervaldatum IS NULL
AND ingenomen IS NULL;
-- View voor de administratie voor de kwartaal dump
CREATE OR REPLACE VIEW cizn_v_asset_kwartaaloverz
AS
SELECT d.ins_deel_opmerking serienummer,
fac.getdomeinwaarde (21, flx.getflex ('INS', 41, dg.ins_deel_key)) status,
flx.getflex ('INS', 46, dg.ins_deel_key) inkoopnummer,
fac.getdomeinwaarde (22, flx.getflex ('INS', 48, dg.ins_deel_key)) regio,
flx.getflex ('INS', 44, dg.ins_deel_key) imei,
flx.getflex ('INS', 121, dg.ins_deel_key) ingelogd_door,
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE prs_perslid_key = d.ins_alg_ruimte_key AND d.ins_alg_ruimte_type = 'P') uitgegeven_aan,
flx.getflex ('INS', 47, dg.ins_deel_key) login_datum,
flx.getflex ('INS', 81, dg.ins_deel_key) type,
flx.getflex ('INS', 82, dg.ins_deel_key) merk,
dg.ins_deel_omschrijving,
dg.ins_srtdeel_omschrijving,
dg.ins_srtgroep_omschrijving,
TO_CHAR (d.ins_deel_aanmaak, 'dd-mm-yyyy') aanmaakdatum,
TO_CHAR (dg.ins_deel_vervaldatum, 'dd-mm-yyyy') vervaldatum,
(SELECT prs_perslid_naam_full FROM fac_tracking t, prs_v_perslid_fullnames_all pf
WHERE t.fac_tracking_key = u.fac_tracking_key and t.prs_perslid_key = pf.prs_perslid_key) afgeschreven_door,
d.ins_deel_key
FROM ins_v_deel_gegevens dg, ins_deel d,
(SELECT fac_tracking_refkey, MAX(fac_tracking_key) fac_tracking_key
FROM fac_tracking t, fac_srtnotificatie sn
WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'INSUPD'
AND ( fac_tracking_oms LIKE '%Vervaldatum: (leeg) --> %'
OR fac_tracking_oms LIKE '%--> Afgeschreven%')
GROUP BY fac_tracking_refkey) u
WHERE d.ins_discipline_key = 221 -- ICT
AND d.ins_deel_key = dg.ins_deel_key
AND d.ins_deel_key = u.fac_tracking_refkey(+);
CREATE OR REPLACE PROCEDURE cizn_daily
AS
BEGIN
cizn.select_asset_jaar_not;
END;
/
------ payload end ------
SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 0); END;
/
COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile