-- -- $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); 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 éé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 4 juli per week 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))) - 64) TO_DATE ('2023-07-04', 'yyyy-mm-dd') + (ASCII (UPPER (SUBSTR (prs_perslid_naam, 1, 1))) - 64) * 7 ddefault, GREATEST ( COALESCE ( FAC.gettrackingdate ('CUST03', p.prs_perslid_key), TO_DATE ('2023-07-04', 'yyyy-mm-dd') + (ASCII (UPPER (SUBSTR (prs_perslid_naam, 1, 1))) - 64) * 7), COALESCE ( FAC.gettrackingdate ('CUST04', p.prs_perslid_key), TO_DATE ('2023-07-04', 'yyyy-mm-dd') + (ASCII (UPPER (SUBSTR (prs_perslid_naam, 1, 1))) - 64) * 7), COALESCE ( FAC.gettrackingdate ('CUST05', p.prs_perslid_key), TO_DATE ('2023-07-04', 'yyyy-mm-dd') + (ASCII (UPPER (SUBSTR (prs_perslid_naam, 1, 1))) - 64) * 7)) 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 laatsteNot + 355 < 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 FORCE VIEW CIZN_V_LABEL_DEEL_RES_DATUM ( FCLT_F_DATUM, INS_DEEL_KEY, RES_DEEL_OMSCHRIJVING, WAARDE1, WAARDE, WAARDE3, WAARDE_HTML, WAARDE_HTML2 ) BEQUEATH DEFINER 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, '', '' || TO_CHAR (res_rsv_deel_van, 'HH24:MI') || ' ' || naam || ''), '
') WITHIN GROUP (ORDER BY res_rsv_deel_van) || 'h1' waarde_html, LISTAGG (DECODE (naam, NULL, '', '' || naam || ''), '
') 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 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(+); -- Rapportage met de gegevens van de ICT voorzieningen waarbij de gedurende de laatste 30 dagen ingelogd is -- en waar de gebruiker die ingelogd is niet overeenkomt met de persoon aan wie het device is uitgegeven. CREATE OR REPLACE VIEW cizn_v_rap_asset_login_mismatch AS SELECT manufacturer Merk, model TYPE, serialnumber serienummer, prs_perslid_email gekoppeld_aan, emailaddress ingelogd_door, FAC.safe_TO_DATE (lastsyncdatetime, 'yyyy-mm-dd"T"hh24:mi:ss"Z"') laastelogin FROM cizn_imp_device_info i, (SELECT * FROM ins_deel WHERE ins_alg_ruimte_type = 'P') d, prs_perslid p WHERE COALESCE (ins_deel_opmerking, '-2') = COALESCE (i.serialnumber, '-1') AND d.ins_alg_ruimte_key = p.prs_perslid_key(+) AND UPPER (COALESCE (prs_perslid_email, 'Leeg')) <> UPPER (COALESCE (emailaddress, 'Leeg')) AND FAC.safe_TO_DATE (lastsyncdatetime, 'yyyy-mm-dd"T"hh24:mi:ss"Z"') > SYSDATE - 30; -- 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_rap_asset_einde_contract AS SELECT pf.prs_perslid_naam_full, p.prs_perslid_inactief, 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, prs_v_perslid_fullnames_all pf, ins_srtdeel sd WHERE prs_perslid_inactief IS NOT NULL AND u.prs_perslid_key = p.prs_perslid_key AND ins_deel_uitgifte_ingeleverd IS NULL AND u.ins_deel_key = d.ins_deel_key AND p.prs_perslid_key = pf.prs_perslid_key AND d.ins_srtdeel_key = sd.ins_srtdeel_key AND d.ins_deel_vervaldatum IS NULL 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, '' || 'Apparaten toegewezen aan gebruikers met beëindigd contract' || '' html_omschrijving, (SELECT COUNT (*) FROM cizn_v_rap_asset_einde_contract) aantal FROM DUAL; -- 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; 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