CIZN#81269 -- Implementatie CIZ

svn path=/Customer/trunk/; revision=65815
This commit is contained in:
Arthur Egberink
2024-08-06 10:44:20 +00:00
parent 7fdfe3a50c
commit 28bd2f0884

View File

@@ -26,38 +26,124 @@ SET DEFINE OFF
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');
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 <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 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;
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;
END;
/
@@ -112,18 +198,17 @@ SELECT 'bezoekers' typebezoek,
ELSE NULL
END
END datum_te_laat
FROM bez_bezoekers b,
bez_afspraak a,
res_rsv_deel rrd,
res_deel rd,
ins_v_deel_gegevens dg,
alg_locatie l
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 dg.alg_locatie_key = l.alg_locatie_key
AND rrd.res_rsv_deel_verwijder IS NULL;
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
@@ -530,6 +615,161 @@ BEGIN
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,
'<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_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