Files
Customer/AA/ALLR/allr.sql
Arthur Egberink 5f5009b6e6 ALLR#89307 Ondersteuning Wifi aanvraag BYOD heeft eigen meldingsstructuur.
svn path=/Customer/trunk/; revision=70375
2025-09-22 09:40:55 +00:00

1621 lines
72 KiB
SQL

--
-- $Id$
--
-- Script containing customer specific sql statements for the FACILITOR database
DEFINE thisfile = 'ALLR.SQL'
DEFINE dbuser = '^ALLR'
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 ALLR
AS
FUNCTION change_delimitor (p_string VARCHAR2,
p_delimitor VARCHAR2)
RETURN VARCHAR2;
PROCEDURE upsert_aeos_bezoeker (p_bezoekers_key NUMBER,
p_status VARCHAR2,
p_response VARCHAR2);
PROCEDURE upsert_wifi_bezoeker (p_bezoekers_key NUMBER,
p_id VARCHAR2);
PROCEDURE upsert_wifi_melding (p_melding_key NUMBER,
p_id VARCHAR2,
p_result_kenm_key NUMBER);
END;
/
CREATE OR REPLACE PACKAGE BODY ALLR
AS
FUNCTION change_delimitor (p_string VARCHAR2,
p_delimitor VARCHAR2)
RETURN VARCHAR2
AS
v_field VARCHAR2 (1000) := 'QueQuLeQue';
v_result VARCHAR2 (2000);
v_line VARCHAR2 (2000);
BEGIN
v_line := p_string;
WHILE v_line IS NOT NULL
LOOP
fac.imp_getfield (v_line, p_delimitor, v_field);
v_result := v_result || '"' || v_field || '";';
END LOOP;
RETURN v_result;
EXCEPTION
WHEN OTHERS
THEN
RETURN NULL;
END;
-- Procedure om de status van de bezoekers vast te houden die naar AEOS gestuurd worden.
-- Hiermee zorgen we er voor dat de koppeling zich automatisch hersteld als er een tijd uitval is.
-- fac_usrdata_vervaldatum bevat de datum/tijd van de laatste actie
PROCEDURE upsert_aeos_bezoeker (p_bezoekers_key NUMBER,
p_status VARCHAR2,
p_response VARCHAR2)
AS
c_fac_usrtab_key NUMBER := 81; -- Sync tabel AEOS
v_fac_usrdata_key NUMBER;
BEGIN
BEGIN
SELECT fac_usrdata_key
INTO v_fac_usrdata_key
FROM fac_usrdata
WHERE fac_usrtab_key = c_fac_usrtab_key
AND fac_usrdata_code = TO_CHAR(p_bezoekers_key);
UPDATE fac_usrdata
SET fac_usrdata_omschr = p_status,
fac_usrdata_omschr2 = p_response,
fac_usrdata_vervaldatum = SYSDATE
WHERE fac_usrdata_key = v_fac_usrdata_key;
IF p_status = 'SENT'
THEN
FAC.trackaction ('CUST19', p_bezoekers_key, NULL, NULL, NULL);
FLX.setflex('BEZ', 1000, p_bezoekers_key, 1);
END IF;
EXCEPTION WHEN NO_DATA_FOUND
THEN
INSERT INTO fac_usrdata (fac_usrdata_omschr, fac_usrdata_code, fac_usrdata_omschr2, fac_usrtab_key, fac_usrdata_vervaldatum)
VALUES (p_status, p_bezoekers_key, p_response, c_fac_usrtab_key, SYSDATE);
END;
END;
-- Procedure om de status van de bezoekers vast te houden die naar ClearPass/ExtremeNetworks gestuurd worden.
-- Het vinkje wordt gezet dat de bezoekers is aangemeld en de id in ClearPass wordt geregistreerd.
PROCEDURE upsert_wifi_bezoeker (p_bezoekers_key NUMBER,
p_id VARCHAR2)
AS
BEGIN
IF p_id IS NULL
THEN
FLX.setflex('BEZ', 1001, p_bezoekers_key, NULL);
ELSE
FLX.setflex('BEZ', 1001, p_bezoekers_key, 1);
END IF;
FLX.setflex('BEZ', 1002, p_bezoekers_key, p_id);
END;
-- Procedure om de status van de wifi aanvraag vast te houden die naar ClearPass/ExtremeNetworks gestuurd worden.
-- Het vinkje wordt gezet dat de wifi aanvraag is aangemeld en de id in ClearPass/ExtremeNetworks wordt geregistreerd bij de melding.
PROCEDURE upsert_wifi_melding (p_melding_key NUMBER, p_id VARCHAR2, p_result_kenm_key NUMBER)
AS
BEGIN
IF p_id IS NULL
THEN
FLX.setflex('MLD', p_result_kenm_key, p_melding_key, NULL);
ELSE
FLX.setflex('MLD', p_result_kenm_key, p_melding_key, 1);
END IF;
FLX.setflex('MLD', p_result_kenm_key, p_melding_key, p_id);
END;
END;
/
CREATE OR REPLACE PROCEDURE allr_import_perslid (p_import_key IN NUMBER)
AS
v_seq_of_columns VARCHAR (255);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (200);
v_errorhint VARCHAR2 (200);
BEGIN
-- Import formaat:
-- Group 1
-- Peildatum 2
-- Aanstellingsdatum 3
-- WerknemersID 4
-- Medewerkerstype 5
-- Roepnaam 6
-- Achternaam 7
-- PrimaryWorkPhone 8
-- PrimaryWorkEmail 9
-- AfdelingID 10
-- Afdelingnaam 11
-- Lvl3ID 12
-- Lvl3naam 13
-- Lvl4ID 14
-- Lvl4naam 15
-- IsManager 16
-- LocatieID 17
-- LocatieNaam 18
-- BusinessTitle 19
-- ManagerID 20
-- Tussenvoegsel 21
v_seq_of_columns := '0;0;0;0;0;0;4;7;21;6;'
-- v_alg_locatie_code 1
-- v_alg_gebouw_code 2
-- v_alg_verdieping_volgnr 3
-- v_alg_ruimte_nr 4
-- v_prs_werkplek_volgnr 5
-- v_prs_werkplek_omschrijving 6
-- v_prs_afdeling_naam 7
-- v_prs_perslid_naam 8
-- v_prs_perslid_tussenvoegsel 9
-- v_prs_perslid_voornaam 10
|| '0;0;0;0;0;0;0;9;0;4;'
-- v_prs_perslid_voorletters 11
-- v_prs_perslid_partner_naam 12
-- v_prs_perslid_partner_tussenv 13
-- v_prs_naamgebruik_code 14 0 (default) perslid_naam en perslid_tussenvoegsel worden gebruikt
-- 1 personen die de geboortenaam van de partner icm de eigen naam willen gebruiken
-- 2 personen die de geboortenaam van de partner willen gebruiken
-- 3 personen die de eigen naam icm de geboortenaam van de partner willen gebruiken
-- v_prs_perslid_geslacht 15 Gebruik 'man', 'm' of 1 voor man en 'vrouw', 'v' of 0 voor vrouw case insensitive geen default
-- v_prs_perslid_telefoonnr 16
-- v_prs_perslid_mobiel 17
-- v_prs_perslid_email 18
-- v_prs_perslid_dienstverband 19
-- v_prs_perslid_nr 20
|| '4;0;0;0;0;0;11;12;13;14;'
-- v_prs_srtperslid_omschrijving 21
-- v_prs_perslid_oslogin 22
-- v_prs_perslid_wachtwoord 23
-- v_prs_perslid_titel 24
-- v_prs_perslid_apikey 25
-- v_dummy 26
-- v_prs_kenmerk1 27
-- v_prs_kenmerk2 28
-- v_prs_kenmerk3 29
-- v_prs_kenmerk4 30
|| '15;17;18;20;8;1;5;16;22;10;'
|| '19;0;0;0;0;0';
prs.import_perslid(p_import_key, v_seq_of_columns, 'Group;Peildatum;Aanstellingsdatum;WerknemersID;Medewerkerstype;Roepnaam;Achternaam;PrimaryWorkPhone;PrimaryWorkEmail;AfdelingID;Afdelingnaam;Lvl3ID;Lvl3naam;Lvl4ID;Lvl4naam;IsManager;LocatieID;LocatieNaam;BusinessTitle;ManagerID;Tussenvoegsel;WorkMobilePhone%');
UPDATE fac_imp_perslid
SET prs_perslid_oslogin = prs_perslid_nr,
prs_perslid_telefoonnr = SUBSTR(REPLACE(prs_kenmerk9, ' '),1,15),
prs_perslid_mobiel = SUBSTR(REPLACE(prs_kenmerk13, ' '),1,15);
-- De afdelingscode slaan we tijdelijk op in kenmerk14 omdat deze bij toekomstige medewerkers leeg is.
UPDATE fac_imp_perslid
SET prs_afdeling_naam = COALESCE(prs_kenmerk14, '_FH'),
prs_kenmerk1 = COALESCE(prs_kenmerk1, 'Future Hires'),
prs_srtperslid_omschrijving = SUBSTR(COALESCE(prs_kenmerk15, 'Future Hire'),1,60);
-- We gaan de medewerkers koppelen aan een werkplek. Dat gaan we doen door de code van de standplaats (kenmerk6) te matchen
-- met het kenmerk bij het gebouw (kenmerk 1200). Verder moet er dan bij dat gebouw een ruimte zijn met ruimtenummer _WP
UPDATE fac_imp_perslid p
SET (alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr) =
(SELECT alg_locatie_code,
alg_gebouw_upper,
alg_verdieping_volgnr,
alg_ruimte_nr
FROM alg_v_ruimte_gegevens rg, alg_onrgoedkenmerk aogk
WHERE aogk.alg_onrgoed_key = rg.alg_gebouw_key
AND aogk.alg_kenmerk_key = 1200
AND alg_ruimte_nr = '_WP'
AND aogk.alg_onrgoedkenmerk_waarde = prs_kenmerk6
AND ROWNUM = 1);
-- Medewerkers van Kenter worden vanaf 6 november buiten de koppeling gehouden
DELETE fac_imp_perslid WHERE LOWER(prs_perslid_email) LIKE '%kenter.nu';
DELETE fac_imp_perslid WHERE LOWER(prs_perslid_email) LIKE '%@alliander.onmicrosoft.com';
END allr_import_perslid;
/
CREATE OR REPLACE PROCEDURE allr_update_perslid (p_import_key IN NUMBER)
IS
CURSOR c IS SELECT * FROM fac_imp_perslid;
CURSOR c_del (c_bedrijf_key IN NUMBER)
IS
SELECT p.prs_perslid_key,
p.prs_perslid_nr,
pf.prs_perslid_naam_full,
p.prs_perslid_oslogin
FROM fac_imp_perslid i,
prs_perslid p,
prs_v_perslid_fullnames_all pf,
prs_v_afdeling_boom ab
WHERE p.prs_perslid_nr = i.prs_perslid_nr(+)
AND pf.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_nr IS NOT NULL
AND i.prs_perslid_nr IS NULL
AND p.prs_perslid_verwijder IS NULL
AND p.prs_afdeling_key = ab.prs_afdeling_key
AND ab.prs_bedrijf_key = c_bedrijf_key;
-- Cursor om de afdelingsstructuur aan te maken.
CURSOR c_afd_mut
IS
SELECT DISTINCT prs_afdeling_naam,
prs_kenmerk1,
prs_kenmerk2,
prs_kenmerk3,
prs_kenmerk4,
prs_kenmerk5
FROM fac_imp_perslid;
-- Cursor om afdelingen te verwijderen
CURSOR c_afd_del (c_bedrijf_key IN NUMBER)
IS
SELECT ab.prs_afdeling_key,
a.prs_afdeling_naam,
a.prs_afdeling_omschrijving,
ab.niveau
FROM prs_v_afdeling_boom ab, prs_afdeling a
WHERE ab.prs_afdeling_key = a.prs_afdeling_key
AND a.prs_afdeling_verwijder IS NULL
AND ab.prs_bedrijf_key = c_bedrijf_key
AND a.prs_afdeling_naam <> '_FH'
AND NOT EXISTS
(SELECT 1
FROM fac_imp_perslid i
WHERE ab.niveau = 1 AND a.prs_afdeling_naam = i.prs_kenmerk2)
AND NOT EXISTS
(SELECT 1
FROM fac_imp_perslid i, prs_afdeling a1
WHERE ab.niveau = 2
AND a.prs_afdeling_parentkey = a1.prs_afdeling_key
AND a1.prs_afdeling_naam = i.prs_kenmerk2
AND a.prs_afdeling_naam = i.prs_kenmerk4)
AND NOT EXISTS
(SELECT 1
FROM fac_imp_perslid i, prs_afdeling a1, prs_afdeling a2
WHERE ab.niveau = 3
AND a.prs_afdeling_parentkey = a2.prs_afdeling_key
AND a2.prs_afdeling_parentkey = a1.prs_afdeling_key
AND a1.prs_afdeling_naam = i.prs_kenmerk2
AND a2.prs_afdeling_naam = i.prs_kenmerk4
AND a.prs_afdeling_naam = i.prs_afdeling_naam)
ORDER BY ab.niveau DESC;
-- Cursor om alle prs_perslid_visibility op ja te zetten
CURSOR c_vis
IS
SELECT p.prs_perslid_key,
p.prs_perslid_naam,
p.prs_perslid_visibility,
(SELECT MAX(ft.fac_tracking_refkey) FROM fac_tracking ft WHERE ft.fac_srtnotificatie_key = 57 AND INSTR(ft.fac_tracking_oms, 'Naamzichtbaarheid:')>0 AND ft.fac_tracking_refkey = p.prs_perslid_key AND ft.prs_perslid_key NOT IN (4) )
mutatie_self
FROM prs_perslid p, prs_v_afdeling a
WHERE p.prs_afdeling_key = a.prs_afdeling_key
AND a.prs_bedrijf_key = 321
AND p.prs_perslid_visibility = 0
AND p.prs_perslid_verwijder IS NULL
AND p.prs_perslid_inactief IS NULL ;
v_count_imp NUMBER;
v_count_allr NUMBER;
v_aanduiding VARCHAR2(100);
v_errorhint VARCHAR2(1000);
v_errormsg VARCHAR2(1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2(200);
v_prs_afdeling_key1 NUMBER;
v_prs_afdeling_key2 NUMBER;
v_prs_afdeling_key3 NUMBER;
v_prs_afdeling_verwijder DATE;
c_prs_bedrijf_key NUMBER := 321; -- Intern bedrijf Alliander
v_prs_bedrijf_key NUMBER;
v_prs_perslid_key NUMBER;
BEGIN
SELECT COUNT (*)
INTO v_count_imp
FROM fac_imp_perslid
WHERE fac_import_key = p_import_key;
SELECT COUNT (*)
INTO v_count_allr
FROM prs_perslid p, prs_v_afdeling_boom ab
WHERE p.prs_afdeling_key = ab.prs_afdeling_key AND ab.prs_bedrijf_key = c_prs_bedrijf_key;
-- We gaan alleen de import uitvoeren als de aangeboden populatie groter is dan de helft van de huidige populatie.
IF v_count_imp > v_count_allr / 2
THEN
FOR rec IN c_afd_mut
LOOP
v_prs_afdeling_key1 := NULL;
v_prs_afdeling_key2 := NULL;
v_prs_bedrijf_key := NULL;
IF rec.prs_kenmerk2 IS NOT NULL
THEN
v_aanduiding := rec.prs_kenmerk2 || '-' || rec.prs_kenmerk4 || '-' || rec.prs_afdeling_naam;
BEGIN
v_errorhint := 'Controle afdeling niveau 1';
SELECT prs_afdeling_key
INTO v_prs_afdeling_key1
FROM prs_afdeling a
WHERE a.prs_afdeling_verwijder IS NULL
AND a.prs_afdeling_naam = rec.prs_kenmerk2;
UPDATE prs_afdeling
SET prs_bedrijf_key = c_prs_bedrijf_key,
prs_afdeling_parentkey = NULL,
prs_afdeling_omschrijving = SUBSTR (rec.prs_kenmerk3, 1, 60)
WHERE prs_afdeling_key = v_prs_afdeling_key1;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_errorhint := 'Aanmaken afdeling niveau 1';
INSERT INTO prs_afdeling (prs_bedrijf_key, prs_afdeling_naam, prs_afdeling_omschrijving)
VALUES (c_prs_bedrijf_key, SUBSTR (rec.prs_kenmerk2, 1, 15), SUBSTR (rec.prs_kenmerk3, 1, 60))
RETURNING prs_afdeling_key
INTO v_prs_afdeling_key1;
END;
END IF;
-- Afdeling niveau2
IF rec.prs_kenmerk4 IS NOT NULL
THEN
BEGIN
v_errorhint := 'Controle afdeling niveau 2';
SELECT prs_afdeling_key
INTO v_prs_afdeling_key2
FROM prs_afdeling a
WHERE a.prs_afdeling_verwijder IS NULL
AND a.prs_afdeling_naam = rec.prs_kenmerk4;
UPDATE prs_afdeling
SET prs_afdeling_parentkey = v_prs_afdeling_key1,
prs_bedrijf_key = NULL,
prs_afdeling_omschrijving = SUBSTR (rec.prs_kenmerk5, 1, 60)
WHERE prs_afdeling_key = v_prs_afdeling_key2;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_errorhint := 'Aanmaken afdeling niveau 2: ' || v_prs_afdeling_key1;
INSERT INTO prs_afdeling (prs_afdeling_parentkey, prs_afdeling_naam, prs_afdeling_omschrijving)
VALUES (v_prs_afdeling_key1, SUBSTR (rec.prs_kenmerk4, 1, 15), SUBSTR (rec.prs_kenmerk5, 1, 60))
RETURNING prs_afdeling_key
INTO v_prs_afdeling_key2;
v_errorhint := 'Einde aanmaken afdeling niveau 2';
END;
END IF;
-- Afdeling niveau3
-- Als de persoon gekoppeld is aan de afdeling Future Hires dan wordt deze op afdelingsniveau 1 gekoppeld aan de afdeling _FH
-- Als de afdeling al op niveau 2 voorkomt hoeven we deze hier niet meer aan te maken.
IF COALESCE(rec.prs_kenmerk4, 'QueQeLeQue') <> rec.prs_afdeling_naam AND COALESCE(rec.prs_kenmerk2, 'QueQeLeQue') <> rec.prs_afdeling_naam
THEN
BEGIN
v_errorhint := 'Controle afdeling niveau 3';
SELECT prs_afdeling_key
INTO v_prs_afdeling_key3
FROM prs_afdeling a
WHERE a.prs_afdeling_verwijder IS NULL
AND a.prs_afdeling_naam = rec.prs_afdeling_naam;
IF v_prs_afdeling_key2 IS NULL
THEN
v_prs_bedrijf_key := c_prs_bedrijf_key;
END IF;
UPDATE prs_afdeling
SET prs_afdeling_parentkey = v_prs_afdeling_key2,
prs_bedrijf_key = v_prs_bedrijf_key,
prs_afdeling_omschrijving = SUBSTR (rec.prs_kenmerk1, 1, 60)
WHERE prs_afdeling_key = v_prs_afdeling_key3;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_errorhint := 'Aanmaken afdeling niveau 3 [' || v_prs_afdeling_key2 || ']';
IF v_prs_afdeling_key2 IS NULL
THEN
v_prs_bedrijf_key := c_prs_bedrijf_key;
END IF;
INSERT INTO prs_afdeling (prs_bedrijf_key, prs_afdeling_parentkey, prs_afdeling_naam, prs_afdeling_omschrijving)
VALUES (v_prs_bedrijf_key,
v_prs_afdeling_key2,
SUBSTR (rec.prs_afdeling_naam, 1, 15),
SUBSTR (rec.prs_kenmerk1, 1, 60))
RETURNING prs_afdeling_key
INTO v_prs_afdeling_key3;
END;
END IF;
END LOOP;
-- Voordat we gaan importeren gaan we op zoek of we nog mensen moeten verwijderen die niet in de import voorkomen.
FOR rec IN c_del (c_prs_bedrijf_key)
LOOP
BEGIN
v_errorhint :=
'Verwijderen persoon: '
|| rec.prs_perslid_key
|| '-'
|| rec.prs_perslid_nr
|| '-'
|| rec.prs_perslid_oslogin;
prs.delete_perslid (p_import_key, rec.prs_perslid_key);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_errorhint);
END;
END LOOP;
-- Nu kunnen we de standaard facilitor-update doorvoeren
prs.update_perslid (p_import_key, 'NR', 'A');
-- En dan gaan we als laatste de kenmmerken bijwerken
FOR rec IN c
LOOP
-- We kunnen alleen maar kenmerken toevoegen/aanpassen als de persoon ook is aangemaakt zonder foutmelding.
IF rec.prs_perslid_key IS NOT NULL
THEN
v_errorhint := 'Bijwerken leidinggevende in personenkaart';
v_aanduiding := rec.prs_perslid_voornaam || ' ' || rec.prs_perslid_naam;
IF rec.prs_kenmerk8 IS NOT NULL
THEN
BEGIN
-- op zoek naar de leidinggevende binnen bedrijf Alliander
SELECT p.prs_perslid_key
INTO v_prs_perslid_key
FROM prs_perslid p, prs_v_afdeling v
WHERE p.prs_afdeling_key = v.prs_afdeling_key
AND v.prs_afdeling_verwijder IS NULL
AND v.prs_bedrijf_key = c_prs_bedrijf_key
AND p.prs_perslid_nr = rec.prs_kenmerk8
AND p.prs_perslid_verwijder IS NULL ;
UPDATE prs_perslid
SET prs_perslid_key_verantw = v_prs_perslid_key
WHERE prs_perslid_key = rec.prs_perslid_key ;
EXCEPTION WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (p_import_key,
'W',
'Leidinggevende niet gevonden',
rec.prs_kenmerk8);
END;
END IF;
-- Status
v_errorhint := 'Bijwerken kenmerk status';
FLX.setflex('PRS', 1022, rec.prs_perslid_key, 'P', rec.prs_kenmerk10);
-- Type medewerker
v_errorhint := 'Bijwerken kenmerk type medewerker';
FLX.setflex('PRS', 1020, rec.prs_perslid_key, 'P', rec.prs_kenmerk11);
-- Leidinggevendenr. uit workday
v_errorhint := 'Bijwerken kenmerk leidinggevende';
FLX.setflex('PRS', 1080, rec.prs_perslid_key, 'P', COALESCE(rec.prs_kenmerk8, 'onbekend in workday'));
-- Is manager
v_errorhint := 'Bijwerken kenmerk is manager';
IF rec.prs_kenmerk12 = 1
THEN
FLX.setflex('PRS', 1040, rec.prs_perslid_key, 'P', 1);
ELSE
FLX.setflex('PRS', 1040, rec.prs_perslid_key, 'P', NULL);
END IF;
END IF;
END LOOP;
-- En dan de afdelingen verwijderen die niet meer voorkomen.
FOR rec IN c_afd_del(c_prs_bedrijf_key)
LOOP
BEGIN
v_errorhint := 'Verwijderen afdeling ';
v_aanduiding := rec.prs_afdeling_naam || '-' || rec.prs_afdeling_omschrijving || ' Niveau: ' || rec.niveau;
UPDATE prs_afdeling
SET prs_afdeling_verwijder = SYSDATE,
prs_afdeling_naam = REPLACE(prs_afdeling_naam, '_vv')
WHERE prs_afdeling_key = rec.prs_afdeling_key
-- we gaan geen afdelingen verwijderen als er nog onderliggende niet verwijderde afdelingen bestaan
AND NOT EXISTS (SELECT 1 FROM prs_afdeling a WHERE a.prs_afdeling_verwijder IS NULL AND a.prs_afdeling_parentkey = rec.prs_afdeling_key)
-- we gaan geen afdelingen verwijderen als er nog onderliggende niet verwijderde personen bestaan
AND NOT EXISTS (SELECT 1 FROM prs_perslid p WHERE p.prs_perslid_verwijder IS NULL AND p.prs_afdeling_key = rec.prs_afdeling_key);
EXCEPTION WHEN OTHERS
THEN
-- Markeer de afdeling. Hiervoor gaan we de afdelingcode voorzien van '_vv' van vervallen
UPDATE prs_afdeling
SET prs_afdeling_naam = prs_afdeling_naam || '_vv'
WHERE prs_afdeling_key = rec.prs_afdeling_key
AND prs_afdeling_naam NOT LIKE '%vv';
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'OTHERS (error '||oracle_err_num||'/'||oracle_err_mes||')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || ': ' || v_errormsg,
'');
END;
END LOOP;
-- en tot slot de personen op visible JA zetten (zie ticket ALLR#80708)
FOR rec IN c_vis
LOOP
BEGIN
v_errorhint := 'Personen op visible JA zetten ';
v_aanduiding := rec.prs_perslid_key || '-' || rec.prs_perslid_naam;
-- alleen voor die personen die niet buiten koppeling om de setting zelf in personenkaart hebben laten omzetten
IF rec.mutatie_self IS NULL
THEN
UPDATE prs_perslid
SET prs_perslid_visibility = 1
WHERE prs_perslid_key = rec.prs_perslid_key ;
-- tracking
BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 4, NULL, 'Naamzichtbaarheid: 0 --> 1 (uit workday-koppeling)'); END;
END IF;
END;
END LOOP;
ELSE
fac.imp_writelog (p_import_key,
'E',
'Verschil tussen huidige populatie personen (' || v_count_allr || ') en aangeboden populatie (' || v_count_imp || ') is te groot' ,
'');
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_aanduiding || ': ' || v_errormsg,
v_errorhint);
END;
/
-- functie om de Kenter-medewerkers de werkplek-koppelingen te geven op de Kenter-gerelateerde gebouwen (zie AAXX#87553)
CREATE OR REPLACE VIEW allr_v_export_kenter_wp
(
result,
result_order
)
AS
SELECT '"SYNC - Werkplekkoppelingen Kenter medewerkers"'
|| ';"Uitgevoerd"',
0
FROM DUAL
UNION
SELECT 'ERROR: Datum '|| TO_CHAR(imp_log_datum) || ' - ' || imp_log_omschrijving || ' - ' || imp_log_hint,
1
FROM imp_log
WHERE imp_log_applicatie = 'KENTER_WP' ;
CREATE OR REPLACE PROCEDURE allr_select_kenter_wp (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
-- specifiek
c_alg_bedrijf_key NUMBER (10) := 22421 ; -- bedrijf Kenter B.V.
c_alg_kenmerk_key NUMBER (10) := 1500 ; -- Kenmerk_key Kenter-gerelateerd-gebouw
c_prs_kenmerk_key NUMBER (10) := 1060 ; -- Kenmerk_key op personenkaart om de laatste sync-datum op weg te schrijven
v_upsert_sync NUMBER (1) ;
-- Werkplekkoppelingen toevoegen of verwijder
CURSOR c
IS
SELECT km.prs_perslid_key,
km.prs_perslid_email,
kw.alg_ruimte_key,
kw.alg_gebouw_key,
kw.alg_gebouw_naam,
kw.alg_locatie_key,
(SELECT w.prs_werkplek_key
FROM prs_werkplek w, prs_perslidwerkplek wp
WHERE wp.prs_werkplek_key = w.prs_werkplek_key
AND w.prs_alg_ruimte_key = kw.alg_ruimte_key
AND wp.prs_perslid_key = km.prs_perslid_key)
prs_werkplek_key,
CASE
WHEN kw.alg_ruimte_key IN
(SELECT r.alg_ruimte_key
FROM prs_perslid p,
prs_srtperslid sp,
prs_perslidwerkplek wp,
prs_werkplek w,
alg_ruimte r,
alg_v_onrgoed_boom onr,
alg_locatie l
WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key
AND p.prs_perslid_key = wp.prs_perslid_key
AND wp.prs_werkplek_key = w.prs_werkplek_key
AND w.prs_alg_ruimte_key = r.alg_ruimte_key
AND r.alg_ruimte_key = onr.alg_ruimte_key
AND onr.alg_locatie_key = l.alg_locatie_key
AND p.prs_perslid_key = km.prs_perslid_key
)
THEN
'OK'
ELSE
'TOEVOEGEN WP'
END actie
FROM (SELECT p.prs_perslid_key, p.prs_perslid_email
FROM prs_perslid p, prs_v_afdeling_boom ab
WHERE p.prs_afdeling_key = ab.prs_afdeling_key
AND ab.prs_bedrijf_key = c_alg_bedrijf_key
AND p.prs_perslid_verwijder IS NULL
) km, -- alle kentermedewerkers
(SELECT k.alg_kenmerk_omschrijving,
v.alg_gebouw_key,
g.alg_gebouw_naam,
v.alg_ruimte_key,
g.alg_locatie_key
FROM alg_gebouw g,
alg_onrgoedkenmerk kw,
alg_kenmerk k,
( SELECT alg_gebouw_key, MIN (alg_ruimte_key) alg_ruimte_key
FROM alg_v_allonrgoed_gegevens
WHERE alg_ruimte_nr = '_WP'
GROUP BY alg_gebouw_key) v
WHERE g.alg_gebouw_key = kw.alg_onrgoed_key
AND kw.alg_onrgoed_niveau = 'G'
AND kw.alg_kenmerk_key = k.alg_kenmerk_key
AND k.alg_kenmerk_key = c_alg_kenmerk_key
AND g.alg_gebouw_key = v.alg_gebouw_key) kw -- alle kenter werkplekken
UNION
SELECT km.prs_perslid_key,
km.prs_perslid_email,
wp.alg_ruimte_key,
wp.alg_gebouw_key,
wp.alg_gebouw_naam,
wp.alg_locatie_key,
wp.prs_werkplek_key,
CASE
WHEN wp.alg_ruimte_key IN
(SELECT v.alg_ruimte_key
FROM alg_gebouw g,
alg_onrgoedkenmerk kw,
alg_kenmerk k,
( SELECT alg_gebouw_key,
MIN (alg_ruimte_key) alg_ruimte_key
FROM alg_v_allonrgoed_gegevens
WHERE alg_ruimte_nr = '_WP'
GROUP BY alg_gebouw_key) v
WHERE g.alg_gebouw_key = kw.alg_onrgoed_key
AND kw.alg_onrgoed_niveau = 'G'
AND kw.alg_kenmerk_key = k.alg_kenmerk_key
AND k.alg_kenmerk_key = c_alg_kenmerk_key
AND g.alg_gebouw_key = v.alg_gebouw_key) -- kw -- alle kenter werkplekken
THEN
'OK'
ELSE
'VERWIJDEREN WP'
END actie
FROM (SELECT p.prs_perslid_key, p.prs_perslid_email
FROM prs_perslid p, prs_v_afdeling_boom ab
WHERE p.prs_afdeling_key = ab.prs_afdeling_key
AND ab.prs_bedrijf_key = c_alg_bedrijf_key
AND p.prs_perslid_verwijder IS NULL
) km, -- alle kentermedewerkers
( SELECT p.prs_perslid_key,
l.alg_locatie_key,
r.alg_ruimte_key,
g.alg_gebouw_key,
g.alg_gebouw_naam,
w.prs_werkplek_key
FROM prs_perslid p,
prs_srtperslid sp,
prs_perslidwerkplek wp,
prs_werkplek w,
alg_ruimte r,
alg_v_onrgoed_boom onr,
alg_locatie l,
alg_gebouw g
WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key
AND p.prs_perslid_key = wp.prs_perslid_key
AND wp.prs_werkplek_key = w.prs_werkplek_key
AND w.prs_alg_ruimte_key = r.alg_ruimte_key
AND r.alg_ruimte_key = onr.alg_ruimte_key
AND onr.alg_locatie_key = l.alg_locatie_key
AND onr.alg_gebouw_key = g.alg_gebouw_key
ORDER BY wp.prs_perslid_key) wp
WHERE km.prs_perslid_key = wp.prs_perslid_key
ORDER BY 1, 3, 4;
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_mes VARCHAR2 (200);
oracle_err_num NUMBER;
currentversion fac_module.fac_module_version%TYPE;
v_aanduiding VARCHAR2 (1000);
v_count NUMBER;
BEGIN
v_count := 0;
FOR rec IN c
LOOP
BEGIN
-- Werkplekkoppelingen van de Kentergebouwen
v_aanduiding :=
'bijwerken werkplekkoppelingen kenter-medewerker - perslid_key:'
|| TO_CHAR (rec.prs_perslid_key);
v_upsert_sync := 0 ;
IF rec.actie = 'TOEVOEGEN WP'
THEN
v_errorhint :=
'actie toevoegen werkplek - gebouw_key: '
|| TO_CHAR (rec.alg_gebouw_key);
-- PROCEDURE movetoruimte (p_prs_key IN NUMBER, p_ruimte_key IN NUMBER, p_alg_type IN VARCHAR2, p_virtual IN NUMBER DEFAULT 0);
BEGIN
PRS.movetoruimte (rec.prs_perslid_key,
rec.alg_ruimte_key,
'G',
1);
v_upsert_sync := 1 ;
END;
END IF;
IF rec.actie = 'VERWIJDEREN WP'
THEN
v_errorhint :=
'actie verwijderen werkplek - gebouw_key: '
|| TO_CHAR (rec.alg_gebouw_key);
DELETE prs_werkplek
WHERE prs_werkplek_key = rec.prs_werkplek_key;
v_upsert_sync := 1 ;
END IF;
-- In personenkaart nog even vermelden wanneer deze vanuit de WP-sync voor het laatst zijn gemuteerd
IF v_upsert_sync = 1
THEN
PRS.upsertkenmerk (c_prs_kenmerk_key, rec.prs_perslid_key, TO_CHAR(sysdate, 'dd-mm-yyyy HH24:MI'));
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.writelog (p_applname,
'E',
v_aanduiding || ' - ' || v_errormsg,
v_errorhint);
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.writelog (p_applname,
'E',
v_errormsg,
v_aanduiding || ' - HINT: ' || v_errorhint);
END;
/
-------------------
-- Rapportages --
-------------------
-- View om te laten zien welke standplaatsen uit de personenimport te mappen zijn aan het kenmerk met key 1200.
-- Dit kenmerk bevat de standplaatscode uit Workday
CREATE OR REPLACE VIEW allr_v_rap_standplaats
AS
SELECT prs_kenmerk6, prs_kenmerk7,
(SELECT COUNT (*)
FROM alg_onrgoedkenmerk
WHERE alg_onrgoedkenmerk_waarde = prs_kenmerk6
AND alg_kenmerk_key = 1200) match,
aantal_p
FROM ( SELECT prs_kenmerk6, prs_kenmerk7, COUNT (*) aantal_p
FROM fac_imp_perslid
GROUP BY prs_kenmerk6, prs_kenmerk7) i;
-- View - zie ticket ALLR#87273
-- annuleren = status_fo = vervallen = 4
-- status FO
--- 1 Optie
--- 2 Definitief
--- 3 Geblokkeerd
--- 4 Vervallen
-- status BO
--- 2 Geregistreerd
--- 5 Afgemeld
--- 6 Verwerkt
-- Vanuit Facilitor vervallen en/of verwijderen
--- handmatig op VERVALLEN (fo_status) dan GEEN VERWIJDERDATUM, MAAR WEL RESDEL
--- handmatig op VERWIJDEREN en WEL VERWIJDERDATUM + RESDEL + fo op 1
--- handmatig op VERWIJDEREN + NO_SHOW_KOSTEN dan WEL VERWIJDERDATUM + RESDEL + maar ook fo op 4
-- Vanuit Outlook verwijderd
---- RESDEL wordt gezet, door systeem (in fac_tracking geen prs_perslid_key) + fo_status wordt op vervallen gezet - (niet direct logisch, beter op 1...)
---- Dit kan voor ALLR automatisch via de schermpjes (als men na 10 minuten geen show aangeeft wordt deze verwijderd naar outlook/exchange -> facilitor)
---- Dit kan voor ALLR ook vanuit outlook-agenda door gebruiker echter ook dan is het de ruimte_resource die annuleert en dus is ook dan in facilitor de RESDEL door systeem...
CREATE OR REPLACE VIEW allr_v_rap_res_annuleringen
AS
SELECT v.res_rsv_ruimte_key,
v.reserveringsnummer,
v.res_rsv_ruimte_aanmaak,
v.reeks,
v.res_rsv_ruimte_omschrijving,
v.alg_locatie_omschrijving,
v.res_ruimte_nr,
v.res_ruimte_key,
v.ruimte_gekoppeld_outlook,
v.ruimte_gekoppeld,
v.bron_aanmaak,
v.prs_perslid_naam_friendly
aanvrager,
v.prs_perslid_email
aanvrager_email,
v.res_rsv_ruimte_van,
v.res_rsv_ruimte_tot,
v.duur_afspraak_minuten,
CASE WHEN UPPER(v.res_status_fo_omschrijving) IN ('VERVALLEN', 'OPTIE') AND v.res_rsv_ruimte_verwijder IS NOT NULL
THEN 'Vervallen (geannuleerd)'
ELSE v.res_status_fo_omschrijving
END
res_status_fo,
CASE WHEN UPPER(v.res_status_fo_omschrijving) IN ('VERVALLEN', 'OPTIE') AND v.res_rsv_ruimte_verwijder IS NOT NULL
THEN v.res_rsv_ruimte_verwijder
ELSE NULL
END
geannuleerd_op,
v.geannuleerd_vanuit,
v.geannuleerd_door,
v.no_show,
ROUND(v.no_show_binnen_minuten)
no_show_binnen_minuten
FROM (SELECT rrr.res_rsv_ruimte_key,
rrr.res_reservering_key || '/' || res_rsv_ruimte_volgnr
reserveringsnummer,
rrr.res_rsv_ruimte_aanmaak,
rrr.res_rsv_ruimte_bezoekers,
rr.res_ruimte_nr,
rar.res_ruimte_key,
CASE
WHEN rr.res_ruimte_extern_id IS NOT NULL AND rr.res_ruimte_graphhooksecret IS NOT NULL
THEN 'is gekoppeld'
WHEN rr.res_ruimte_extern_id IS NOT NULL AND rr.res_ruimte_graphhooksecret IS NULL
THEN 'is gekoppeld (zonder subscription?)'
WHEN rr.res_ruimte_extern_id IS NULL AND rr.res_ruimte_graphhooksecret IS NOT NULL
THEN 'was gekoppeld (nog met subscription?)'
ELSE
'niet gekoppeld'
END
ruimte_gekoppeld_outlook,
CASE
WHEN rr.res_ruimte_extern_id IS NOT NULL THEN rr.res_ruimte_extern_id
ELSE NULL
END
ruimte_gekoppeld,
p.prs_perslid_naam_friendly,
CASE
WHEN pp.prs_perslid_key = 11402 THEN new.prs_perslid_email_fallback
ELSE pp.prs_perslid_email
END
prs_perslid_email,
rrr.res_rsv_ruimte_omschrijving,
rrr.res_rsv_ruimte_van,
rrr.res_rsv_ruimte_tot,
(rrr.res_rsv_ruimte_tot - rrr.res_rsv_ruimte_van) *24*60
duur_afspraak_minuten,
rrr.res_rsv_ruimte_externnr,
rrr.res_rsv_ruimte_externnr2,
rrr.res_rsv_ruimte_externsyncdate,
CASE -- als er een resnew uitgaat door een facilitor-gebruiker dan is de reservering ook vanuit die kant aangemaakt...
WHEN new.prs_perslid_email IS NOT NULL THEN 'facilitor'
ELSE 'outlook'
END
bron_aanmaak,
CASE
WHEN rrr.res_rsv_ruimte_externnr2 IS NOT NULL
AND rrr.res_rsv_ruimte_externsyncdate IS NOT NULL
THEN
TO_CHAR (rrr.res_rsv_ruimte_externsyncdate,
'dd-mm-yyyy hh24:mi:ss')
WHEN rrr.res_rsv_ruimte_externnr IS NULL
AND rrr.res_rsv_ruimte_externnr2 IS NULL
THEN
'nvt' -- deze reservering loopt niet mee in outlookkoppeling
ELSE
''
END
export_outlook_lastdate,
CASE
WHEN ( SELECT COUNT (*)
FROM res_rsv_ruimte
WHERE res_reservering_key = rrr.res_reservering_key
GROUP BY res_reservering_key) > 1
THEN
'reeks'
ELSE
'enkelvoudig'
END
reeks,
CASE
WHEN rrr.res_rsv_ruimte_dirtlevel > 0
THEN
'ongeldige reservering in Facilitor'
ELSE
NULL
END
status_dirty,
v.alg_gebouw_code,
l.alg_locatie_omschrijving,
rrr.res_status_bo_key,
(select res_status_bo_omschrijving from res_status_bo where res_status_bo_key = rrr.res_status_bo_key)
res_status_bo_omschrijving,
rrr.res_status_fo_key,
(select res_status_fo_omschrijving from res_status_fo where res_status_fo_key = rrr.res_status_fo_key)
res_status_fo_omschrijving,
rrr.res_rsv_ruimte_verwijder,
ann.max_verwijderdatum,
ann.teller_del,
ann.max_prs_perslid_key,
-- als VANUIT OUTLOOK en de verwijder_datum gezet, maar de Reservering is toch weer lopend, dan is het een ruimte-switch in outlook (van de ene naar de andere spreekkamer..)
------ Waar dus eerst verwijdering op wordt gedaan en daarna op de nieuwe ruimte_resource dezelfde res_rsv_ruimte_key weer opengezet wordt S(res_allow_undelete)..
CASE WHEN ann.max_verwijderdatum IS NOT NULL AND ann.max_prs_perslid_key IS NULL AND rrr.res_rsv_ruimte_verwijder IS NULL THEN 'ja' ELSE '' END
ruimte_switch_outlook,
-- als ann_max_prs_perslid IS NULL dan vanuit outlook via system de delete...
CASE WHEN rrr.res_rsv_ruimte_verwijder IS NOT NULL AND ann.max_prs_perslid_key IS NULL
THEN 'vanuit outlook - gebruiker onbekend'
WHEN ann.max_prs_perslid_key IS NOT NULL
THEN 'vanuit facilitor'
ELSE ''
END
geannuleerd_vanuit,
CASE WHEN ann.max_prs_perslid_key IS NOT NULL
THEN (SELECT prs_perslid_email FROM prs_perslid WHERE prs_perslid_key = ann.max_prs_perslid_key)
END
geannuleerd_door,
-- Is de reservering-delete binnen de afspraak - dan kan dit dus door een automatische no-show vanuit het roompanel na 10/11 minuten zijn gebeurd..
CASE WHEN ann.max_verwijderdatum IS NOT NULL AND rrr.res_rsv_ruimte_verwijder IS NOT NULL
AND ann.max_verwijderdatum BETWEEN rrr.res_rsv_ruimte_van AND rrr.res_rsv_ruimte_tot
THEN 'no_show binnen afspraak'
WHEN ann.max_verwijderdatum IS NOT NULL AND rrr.res_rsv_ruimte_verwijder IS NOT NULL
AND ann.max_verwijderdatum < rrr.res_rsv_ruimte_van
THEN 'no_show voor afspraak'
WHEN ann.max_verwijderdatum IS NOT NULL AND rrr.res_rsv_ruimte_verwijder IS NOT NULL
AND ann.max_verwijderdatum >= rrr.res_rsv_ruimte_van
THEN 'no_show na afspraak'
ELSE ''
END
no_show,
CASE WHEN ann.max_verwijderdatum IS NOT NULL AND rrr.res_rsv_ruimte_verwijder IS NOT NULL
AND ann.max_verwijderdatum BETWEEN rrr.res_rsv_ruimte_van AND rrr.res_rsv_ruimte_tot
THEN (ann.max_verwijderdatum - rrr.res_rsv_ruimte_van)*24*60
ELSE NULL
END
no_show_binnen_minuten
FROM res_rsv_ruimte rrr,
prs_v_perslid_fullnames p,
prs_perslid pp,
res_ruimte_opstelling ro,
res_ruimte rr,
res_reservering r,
( SELECT res_ruimte_key,
COUNT (*),
MAX (alg_ruimte_key) alg_ruimte_key
FROM res_alg_ruimte
WHERE res_alg_ruimte_verwijder IS NULL
GROUP BY res_ruimte_key) rar,
alg_v_onroerendgoed_gegevens v,
alg_locatie l,
( SELECT ft.fac_tracking_refkey,
MAX (ft.fac_tracking_datum) max_verwijderdatum,
MAX (ft.prs_perslid_key) max_prs_perslid_key,
COUNT (*) teller_del
FROM fac_tracking ft, fac_srtnotificatie sn
WHERE ft.fac_srtnotificatie_key =
sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_xmlnode = 'reservering'
AND sn.fac_srtnotificatie_code = 'RESDEL'
GROUP BY ft.fac_tracking_refkey
) ann,
( SELECT ft.fac_tracking_refkey,
p.prs_perslid_email,
CASE WHEN rrr.res_rsv_ruimte_host_key = 11402 -- organisator outlook - fallback - om emailadres 'organisator outlook - fallback' uit de tracking te halen (bijv: 'Reservering is geregistreerd door [data.office@alliander.com]')
THEN substr(fac_tracking_oms, instr(fac_tracking_oms, '[') + 1, instr(fac_tracking_oms, ']') - instr(fac_tracking_oms, '[') -1 )
END
prs_perslid_email_fallback
FROM fac_tracking ft, res_rsv_ruimte rrr, prs_perslid p
WHERE ft.fac_srtnotificatie_key = 59 -- RESNEW
AND ft.fac_tracking_refkey = rrr.res_rsv_ruimte_key
AND ft.prs_perslid_key = p.prs_perslid_key (+)
) new
WHERE rrr.res_rsv_ruimte_host_key = p.prs_perslid_key
AND p.prs_perslid_key = pp.prs_perslid_key
AND rrr.res_reservering_key = r.res_reservering_key
AND rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
AND ro.res_ruimte_key = rr.res_ruimte_key
AND rr.res_ruimtE_key = rar.res_ruimte_key
AND rar.alg_ruimte_key = v.alg_ruimte_key
AND v.alg_locatie_key = l.alg_locatie_key
AND rrr.res_rsv_ruimte_key = ann.fac_tracking_refkey (+)
AND rrr.res_rsv_ruimte_key = new.fac_tracking_refkey (+)
) v
;
------------------------------------------------------
-- Notificatiejobs rondom Reserveringen en Catering --
------------------------------------------------------
-- 1. ALLR_V_RAP_CATERING
----- reserveringen met catering (incl. laatste mutatiedatum)
-- 2. ALLR_V_RAP_CATERING_RGL
----- catering artikelen die besteld mogen worden conform de gestelde catalogus instellingen
-- 3. ALLR_V_RAP_CATERING_ALL
----- combinatie van reservering en bestelregels
-- 4. ALLR_V_RAP_CATERING_MUT (voor Cateraar) + ALLR_V_RAP_CATERING_MUT_0 (voor Backoffice)
----- gestyld rapport voor meesturen bij notijob allr_v_noti_resupd
-- 5. ALLR_V_NOTI_RESUPD
----- notificatiejob mutaties op reserveringen (resupd) per cateraar
-------- Cateraars zijn: leverancier op de catalogi verbruiksartikelen met emailadressen op kanaal 'Catering'
-------- flag 1, op CUST02 (node rapport) om in beeld te krijgen welke UPD's er zijn geweest dat afgelopen uur..
-- 6. ALLR_V_RAP_CATERING_MUT_P (voor Cateraar) om te kunnen zien welke mutaties er voor hun in een zelf gekozen periode(dag/tijd) zijn geweest. (zie ticket AAXX#84860)
-- reserveringen met catering
CREATE OR REPLACE VIEW ALLR_V_RAP_CATERING
AS
SELECT DISTINCT
rrr.res_rsv_ruimte_key,
rrr.res_reservering_key,
rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr
reservering,
(SELECT st.res_status_fo_omschrijving
FROM res_status_fo st
WHERE st.res_status_fo_key = rrr.res_status_fo_key)
status_fo,
(SELECT st.res_status_bo_omschrijving
FROM res_status_bo st
WHERE st.res_status_bo_key = rrr.res_status_bo_key)
status_bo,
(SELECT MAX (fac_tracking_datum)
FROM fac_tracking
WHERE fac_tracking_refkey = rrr.res_rsv_ruimte_key
AND fac_srtnotificatie_key = 60 --- resupd
AND UPPER (COALESCE (fac_tracking_oms, ' ')) NOT LIKE
'%ERROR%')
laatste_upd,
rrr.res_rsv_ruimte_externsyncdate
datum_export,
rrr.res_rsv_ruimte_verwijder
datum_verwijderd,
cat.ins_discipline_key
ruimte_catalogus_key,
cat.ins_discipline_omschrijving
ruimte_catalogus,
rer.res_ruimte_key,
rer.res_ruimte_nr
ruimte,
alg.alg_gebouw_upper
gebouw,
alg.alg_locatie_upper
locatie,
alg.alg_locatie_key,
rrr.res_rsv_ruimte_van
datum_van,
rrr.res_rsv_ruimte_tot
datum_tot,
rrr.res_rsv_ruimte_omschrijving
oms,
(SELECT prs_perslid_naam_friendly
FROM prs_v_perslid_fullnames
WHERE prs_perslid_key = rrr.res_rsv_ruimte_host_key)
gastheer,
(SELECT prs_perslid_naam_friendly
FROM prs_v_perslid_fullnames
WHERE prs_perslid_key = rrr.res_rsv_ruimte_contact_key)
contact,
kstp.prs_kostenplaats_nr
kostenplaats_nr,
(SELECT res_kenmerkreservering_waarde
FROM res_kenmerkwaarde kw, res_kenmerk k, res_srtkenmerk sk
WHERE kw.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND k.res_kenmerk_key = kw.res_kenmerk_key
AND sk.res_srtkenmerk_key = k.res_srtkenmerk_key
AND sk.res_srtkenmerk_key = 1) --- interne notitie
interne_notitie
FROM res_rsv_ruimte rrr,
res_rsv_artikel rar,
res_ruimte_opstelling rop,
res_ruimte rer,
ins_tab_discipline cat,
res_alg_ruimte rarm,
alg_v_ruimte_gegevens_all alg,
prs_kostenplaats kstp
WHERE cat.ins_discipline_key = rer.res_discipline_key
AND rar.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND rrr.res_ruimte_opstel_key = rop.res_ruimte_opstel_key
AND rer.res_ruimte_key = rop.res_ruimte_key
AND rarm.res_ruimte_key = rer.res_ruimte_key
AND alg.alg_ruimte_key = rarm.alg_ruimte_key
AND rrr.prs_kostenplaats_key = kstp.prs_kostenplaats_key (+)
UNION ALL
SELECT DISTINCT
rrr.res_rsv_ruimte_key,
rrr.res_reservering_key,
rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr
reservering,
(SELECT st.res_status_fo_omschrijving
FROM res_status_fo st
WHERE st.res_status_fo_key = rrr.res_status_fo_key)
status_fo,
NULL
status_bo,
(SELECT MAX (fac_tracking_datum)
FROM fac_tracking
WHERE fac_tracking_refkey = rrr.res_rsv_ruimte_key
AND fac_srtnotificatie_key = 60 --- resupd
AND UPPER (COALESCE (fac_tracking_oms, ' ')) NOT LIKE
'%ERROR%')
laatste_upd,
rrr.res_rsv_ruimte_externsyncdate
last_export,
rrr.res_rsv_ruimte_verwijder
datum_verwijderd,
0
ruimte_catalogus_key,
'Losse catering'
ruimte_catalogus,
alg.alg_ruimte_key,
alg.alg_ruimte_nr || ' ' || alg.alg_ruimte_omschrijving
ruimte,
alg.alg_gebouw_upper
gebouw,
alg.alg_locatie_upper
locatie,
alg.alg_locatie_key,
rrr.res_rsv_ruimte_van
datum_van,
rrr.res_rsv_ruimte_tot
datum_tot,
COALESCE (rrr.res_rsv_ruimte_omschrijving, 'Catering ')
oms,
(SELECT prs_perslid_naam_friendly
FROM prs_v_perslid_fullnames
WHERE prs_perslid_key = rrr.res_rsv_ruimte_host_key)
gastheer,
(SELECT prs_perslid_naam_friendly
FROM prs_v_perslid_fullnames
WHERE prs_perslid_key = rrr.res_rsv_ruimte_contact_key)
contact,
kstp.prs_kostenplaats_nr
kostenplaats_nr,
(SELECT res_kenmerkreservering_waarde
FROM res_kenmerkwaarde kw, res_kenmerk k, res_srtkenmerk sk
WHERE kw.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND k.res_kenmerk_key = kw.res_kenmerk_key
AND sk.res_srtkenmerk_key = k.res_srtkenmerk_key
AND sk.res_srtkenmerk_key = 1) --- interne notitie op reservering
interne_notitie
FROM res_rsv_ruimte rrr,
res_rsv_artikel rar,
alg_v_ruimte_gegevens_all alg,
prs_kostenplaats kstp
WHERE rar.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND alg.alg_ruimte_key = rrr.alg_ruimte_key
AND rrr.prs_kostenplaats_key = kstp.prs_kostenplaats_key (+)
ORDER BY res_rsv_ruimte_key;
-- catering artikelen die besteld mogen worden conform de gestelde catalogus instellingen
CREATE OR REPLACE VIEW ALLR_V_RAP_CATERING_RGL
AS
SELECT b.prs_bedrijf_key || rar.res_rsv_ruimte_key extra_key,
rar.res_rsv_ruimte_key,
b.prs_bedrijf_key bedrijfs_key,
b.prs_bedrijf_naam leverancier,
rar.res_artikel_key,
rar.res_rsv_artikel_key,
CASE WHEN rar.res_rsv_artikel_omschrijving IS NULL THEN art.res_artikel_omschrijving ELSE 'Vrij artikel: ' || rar.res_rsv_artikel_omschrijving END
res_artikel_omschrijving,
rar.res_rsv_artikel_aantal,
rar.res_rsv_artikel_levering,
art.res_discipline_key,
rar.res_rsv_artikel_externsyncdate,
cat.ins_discipline_omschrijving,
cat_s.res_disc_params_expire_dagen,
cat_s.res_disc_params_expire_tijd,
t1.t1,
TRUNC (fac.datumtijdplusuitvoertijd (
SYSDATE,
res_disc_params_expire_dagen - 1,
'DAGEN',
t1,
res_disc_params_expire_tijd,
1)) bestelling_voor, --- we bestellen na de wijzigingshorizon! Dus trekken we er weer een dag vanaf
rar.res_rsv_artikel_verwijder
FROM res_rsv_artikel rar,
res_artikel art,
ins_tab_discipline cat,
res_disc_params cat_s,
prs_bedrijf b,
(SELECT COALESCE (cat_t1, res_t1) t1
FROM (SELECT (SELECT fac_setting_pvalue
FROM fac_setting
WHERE fac_setting_name = 'res_cat_t1')
cat_t1,
(SELECT fac_setting_pvalue
FROM fac_setting
WHERE fac_setting_name = 'res_t1')
res_t1
FROM DUAL)) t1
WHERE art.res_artikel_key = rar.res_artikel_key
AND cat.ins_discipline_key = art.res_discipline_key
-- AND rar.res_rsv_artikel_verwijder IS NULL
AND cat_s.res_ins_discipline_key = cat.ins_discipline_key
AND cat_s.prs_bedrijf_key = b.prs_bedrijf_key (+);
-- combinatie van reservering en bestelregels
CREATE OR REPLACE VIEW ALLR_V_RAP_CATERING_ALL
AS
SELECT cr.bedrijfs_key,
cr.leverancier,
(SELECT SUBSTR (ba.prs_bedrijfadres_url,
INSTR (ba.prs_bedrijfadres_url, ':') + 1)
FROM prs_bedrijfadres ba
WHERE ba.prs_bedrijf_key = cr.bedrijfs_key
-- AND ba.alg_locatie_key = c.alg_locatie_key
AND ba.prs_bedrijfadres_type = 'O'
AND ba.mld_typeopdr_key IS NULL) mailadres, -- halen we op vanuit opdrachtkanaal locatie
c.res_rsv_ruimte_key,
cr.bedrijfs_key extra_key, -- filterveld vanuit noti-job
c.reservering,
c.oms omschrijving,
c.status_fo,
ruimte_catalogus,
cr.res_disc_params_expire_dagen,
cr.res_disc_params_expire_tijd,
NULL afleverlocatie, -- voor alliander wat mee doen?
c.locatie,
c.gebouw,
c.ruimte,
c.kostenplaats_nr kostenplaats_nr,
c.interne_notitie interne_notitie,
cr.ins_discipline_omschrijving catalogus,
cr.res_artikel_omschrijving artikel,
cr.res_rsv_artikel_aantal aantal,
CASE
WHEN TO_CHAR (cr.res_rsv_artikel_levering, 'd') = 1
THEN
'Zondag'
WHEN TO_CHAR (cr.res_rsv_artikel_levering, 'd') = 2
THEN
'Maandag'
WHEN TO_CHAR (cr.res_rsv_artikel_levering, 'd') = 3
THEN
'Dinsdag'
WHEN TO_CHAR (cr.res_rsv_artikel_levering, 'd') = 4
THEN
'Woensdag'
WHEN TO_CHAR (cr.res_rsv_artikel_levering, 'd') = 5
THEN
'Donderdag'
WHEN TO_CHAR (cr.res_rsv_artikel_levering, 'd') = 6
THEN
'Vrijdag'
WHEN TO_CHAR (cr.res_rsv_artikel_levering, 'd') = 7
THEN
'Zaterdag'
END leverdag, --- zondag is dag 1 van de week
cr.res_rsv_artikel_levering artikel_levering,
TO_CHAR (cr.res_rsv_artikel_levering, 'dd-mm-yyyy') leverdatum,
TO_CHAR (cr.res_rsv_artikel_levering, 'hh24:mi') levertijd,
c.datum_verwijderd,
c.datum_van
FROM allr_v_rap_catering c, allr_v_rap_catering_rgl cr
WHERE c.res_rsv_ruimte_key = cr.res_rsv_ruimte_key;
-- View voor gestyld rapport met alle cateringsmutaties - tbv backoffice
---- Getoond worden alle mutaties vanaf de vorige uitgestuurde run (zie job allr_v_noti_resupd)
CREATE OR REPLACE VIEW ALLR_V_RAP_CATERING_MUT_0
AS
SELECT v.*,
tr.mutaties,
TO_CHAR (tr.laatste_datum_job, 'dd-mm-yyyy hh24:mi:ss')
datum_vanaf,
tr.laatste_datum_job
datum_vanaf_date,
CASE WHEN tr.fac_srtnotificatie_code = 'RESDEL' AND v.datum_verwijderd IS NOT NULL THEN 'RESDEL' ELSE 'RESUPD' END
fac_srtnotificatie_code
FROM allr_v_rap_catering_all v,
(SELECT f.fac_tracking_refkey,
LISTAGG (
TO_CHAR(f.fac_tracking_datum, 'dd-mm-yyyy hh24:mi:ss') || ': ' || f.fac_tracking_oms,
CHR(10) || CHR(13) ON OVERFLOW TRUNCATE
)
WITHIN GROUP (ORDER BY f.fac_tracking_datum)
AS mutaties,
j.laatste_datum_job,
sn.fac_srtnotificatie_code
FROM fac_tracking f, fac_srtnotificatie sn,
(SELECT max(fac_notificatie_job_lastrun) laatste_datum_job, max(fac_notificatie_job_lastrun - fac_notificatie_job_interval/24) vorige_datum_job
FROM fac_notificatie_job WHERE fac_notificatie_job_view = 'ALLR_V_NOTI_RESUPD') j
WHERE f.fac_srtnotificatie_key IN (60, 63) -- resupd en resdel
AND f.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND f.fac_tracking_datum > COALESCE(j.laatste_datum_job, SYSDATE)
GROUP BY f.fac_tracking_refkey, sn.fac_srtnotificatie_code, j.laatste_datum_job
)tr
WHERE v.res_rsv_ruimte_key = tr.fac_tracking_refkey
AND v.bedrijfs_key IS NOT NULL
;
-- View voor gestyld rapport met alle cateringsmutaties - tbv Cateraar
---- Dit rapport wordt meegestuurd met de cateraar (zie job allr_v_noti_resupd)
------ Omdat de gen_notify 's avonds/ 's nachts niet loopt, wordt om de resultaten goed te tonen de DATUM_VANAF bepaald op basis van de laatste CUST02-tracking.
--------- Voorbeeld: Stel laatste jobrun DO om 19:00 en er zijn mutaties om DO 21:00
---------- Dan wil je bij de volgende gen_notify van VR 07:00 dat de mutaties voor dit rapport getoond worden van DO 19:00 t/m VR 07:00 en niet van VR 06:00 - VR 07:00
CREATE OR REPLACE VIEW ALLR_V_RAP_CATERING_MUT
AS
SELECT v.*,
tr.mutaties,
TO_CHAR (tr.datum_vanaf, 'dd-mm-yyyy hh24:mi:ss')
datum_vanaf,
TO_CHAR (tr.datum_tm, 'dd-mm-yyyy hh24:mi:ss')
datum_tm,
tr.datum_vanaf
datum_vanaf_date,
tr.datum_tm
datum_tm_date,
CASE WHEN tr.fac_srtnotificatie_code = 'RESDEL' AND v.datum_verwijderd IS NOT NULL THEN 'RESDEL' ELSE 'RESUPD' END
fac_srtnotificatie_code
FROM allr_v_rap_catering_all v,
(SELECT f.fac_tracking_refkey,
LISTAGG (
TO_CHAR(f.fac_tracking_datum, 'dd-mm-yyyy hh24:mi:ss') || ': ' || f.fac_tracking_oms,
CHR(10) || CHR(13) ON OVERFLOW TRUNCATE
)
WITHIN GROUP (ORDER BY f.fac_tracking_datum)
AS mutaties,
COALESCE(c.vorige_datum_cust02, j.vorige_datum_job, SYSDATE)
datum_vanaf,
j.laatste_datum_job
datum_tm,
sn.fac_srtnotificatie_code
FROM fac_tracking f, fac_srtnotificatie sn,
(SELECT max (x.fac_tracking_datum_cust02) vorige_datum_cust02
FROM (SELECT w.fac_tracking_datum_cust02, ROWNUM volgnr
FROM ( SELECT v.fac_tracking_datum_cust02
FROM ( SELECT TO_DATE (TO_CHAR (ft.fac_tracking_datum, 'yyyy-mm-dd HH24:MI'), 'yyyy-mm-dd HH24:MI') fac_tracking_datum_cust02
FROM fac_tracking ft, fac_srtnotificatie sn
WHERE ft.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_xmlnode = 'rapport'
AND sn.fac_srtnotificatie_code = 'CUST02'
GROUP BY TO_DATE (TO_CHAR (ft.fac_tracking_datum, 'yyyy-mm-dd HH24:MI'), 'yyyy-mm-dd HH24:MI')) v
ORDER BY v.fac_tracking_datum_cust02 DESC) w) x
WHERE x.volgnr = 2) c,
(SELECT max(fac_notificatie_job_lastrun) laatste_datum_job, max(fac_notificatie_job_lastrun - fac_notificatie_job_interval/24) vorige_datum_job
FROM fac_notificatie_job WHERE fac_notificatie_job_view = 'ALLR_V_NOTI_RESUPD') j
WHERE f.fac_srtnotificatie_key IN (60, 63) -- resupd en resdel
AND f.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND f.fac_tracking_datum BETWEEN COALESCE(c.vorige_datum_cust02, j.vorige_datum_job, SYSDATE) AND COALESCE(j.laatste_datum_job, SYSDATE)
GROUP BY f.fac_tracking_refkey, sn.fac_srtnotificatie_code, c.vorige_datum_cust02, j.vorige_datum_job, j.laatste_datum_job
)tr
WHERE v.res_rsv_ruimte_key = tr.fac_tracking_refkey
AND v.bedrijfs_key IS NOT NULL ;
----- notificatiejob mutaties op reserveringen (resupd) per cateraar
-------- Cateraars zijn: leverancier op de catalogi verbruiksartikelen met emailadressen op kanaal 'Catering'
-------- flag 1, op CUST02 (node rapport) om in beeld te krijgen welke UPD's er zijn geweest dat afgelopen uur..
CREATE OR REPLACE VIEW ALLR_V_NOTI_RESUPD
(
SENDER,
RECEIVER,
TEXT,
CODE,
KEY,
XKEY,
XSENDER,
XEMAIL,
XMOBILE
)
AS
SELECT 4
sender,
NULL
receiver,
'Cateraar ' || v.leverancier || ' - mutatie/annulerings-lijst'
tekst,
v.fac_srtnotificatie_code
code,
1402
key, -- Rapport met daarin de specificatie van de mutaties opgenomen
v.bedrijfs_key
xkey, -- extra filter-key voor rapport opnemen in rapport-kolom extra_key - alle reserveringen van die leverancier tonen..
NULL
xsender,
v.mailadres
xemail,
NULL
xmobile
FROM (SELECT lev.leverancier,
lev.bedrijfs_key,
lev.mailadres,
r.res_rsv_ruimte_key,
r.reservering,
r.datum_van,
COALESCE (r.datum_verwijderd, r.laatste_upd)
laatste_upd,
sn.fac_srtnotificatie_code
FROM allr_v_rap_catering r, -- basisview van alle catering-reserveringen met laatste_upd
( SELECT res_rsv_ruimte_key,
bedrijfs_key,
leverancier,
mailadres
FROM allr_v_rap_catering_all
GROUP BY res_rsv_ruimte_key,
bedrijfs_key,
leverancier,
mailadres) lev,
fac_srtnotificatie sn
WHERE sn.fac_srtnotificatie_code = 'CUST02' -- node rapport
AND r.res_rsv_ruimte_key = lev.res_rsv_ruimte_key
AND lev.bedrijfs_key IS NOT NULL
AND lev.mailadres IS NOT NULL
AND r.datum_van >= SYSDATE -- actuele reserveringen
AND (
(r.status_fo = 'Definitief' AND r.datum_verwijderd IS NULL)
OR
(r.status_fo = 'Optie' AND r.datum_verwijderd IS NOT NULL)
OR
(r.status_fo = 'Vervallen' AND r.datum_verwijderd IS NOT NULL)
)
AND COALESCE (r.datum_verwijderd, r.laatste_upd) >=
(SELECT COALESCE (fac_notificatie_job_lastrun,
TRUNC (SYSDATE))
FROM fac_notificatie_job
WHERE fac_notificatie_job_view =
'ALLR_V_NOTI_RESUPD')) v
GROUP BY v.leverancier,
v.bedrijfs_key,
v.mailadres,
v.fac_srtnotificatie_code;
CREATE OR REPLACE VIEW ALLR_V_RAP_CATERING_MUT_P
AS
SELECT v.*,
tr.mutaties,
tr.mutatie_datum
datum_vanaf,
TO_DATE(tr.mutatie_datum, 'dd-mm-yyyy')
datum_vanaf_date,
CASE WHEN tr.fac_srtnotificatie_code = 'RESDEL' AND v.datum_verwijderd IS NOT NULL THEN 'RESDEL' ELSE 'RESUPD' END
fac_srtnotificatie_code,
TO_DATE(tr.mutatie_datum, 'dd-mm-yyyy')
datum_mutatie_filter,
TO_NUMBER(tr.mutatie_uur)
uur_filter
FROM allr_v_rap_catering_all v,
(SELECT f.fac_tracking_refkey,
LISTAGG (
TO_CHAR(f.fac_tracking_datum, 'dd-mm-yyyy hh24:mi:ss') || ': ' || f.fac_tracking_oms,
CHR(10) || CHR(13)
)
WITHIN GROUP (ORDER BY f.fac_tracking_datum)
AS mutaties,
TO_CHAR(f.fac_tracking_datum, 'dd-mm-yyyy') mutatie_datum,
TO_CHAR(f.fac_tracking_datum, 'hh24') mutatie_uur,
sn.fac_srtnotificatie_code
FROM fac_tracking f, fac_srtnotificatie sn
WHERE f.fac_srtnotificatie_key IN (60, 63) -- resupd en resdel
AND f.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
GROUP BY f.fac_tracking_refkey, sn.fac_srtnotificatie_code, TO_CHAR(f.fac_tracking_datum, 'dd-mm-yyyy') , TO_CHAR(f.fac_tracking_datum, 'hh24')
)tr
WHERE v.res_rsv_ruimte_key = tr.fac_tracking_refkey
AND v.bedrijfs_key IS NOT NULL ;
-- script om dagelijks terugkerende scripts aan te roepen.
CREATE OR REPLACE PROCEDURE allr_select_daily_task (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
AS
BEGIN
aaxx_daily_task (p_applname, p_applrun);
-- kenter - toevoegen gebouw-werkplekken
allr_select_kenter_wp ('KENTER_WP', SYSDATE) ;
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