DEMO#83639 -- Outlook koppeling import routine

svn path=/Customer/trunk/; revision=64526
This commit is contained in:
Norbert Wassink
2024-05-06 08:52:09 +00:00
parent 948b061564
commit 0df20e61d2

View File

@@ -4803,7 +4803,6 @@ END;
--------------------------------------------------------------------------------------------------
------------------------------- IMPORT -----------------------------------------------------------
--------------------------------------------------------------------------------------------------
@@ -4849,7 +4848,7 @@ IS
v_seq_nr VARCHAR2 (100);
d_starttime DATE;
d_endtime DATE;
n_seq_nr NUMBER(10);
n_seq_nr NUMBER(13);
CURSOR c
IS
@@ -4867,7 +4866,7 @@ BEGIN
WHERE i.fac_import_key = p_import_key
AND r.res_ruimte_verwijder IS NULL
AND r.res_ruimte_extern_id IS NOT NULL
AND UPPER(i.fac_import_filenaam) LIKE 'SYNC_'||UPPER(r.res_ruimte_extern_id)||'%';
AND UPPER(i.fac_import_filenaam) LIKE '%'||UPPER(r.res_ruimte_extern_id)||'%';
fac.imp_writelog (p_import_key, 'S',
'Start inlezen importbestand in importtabel',
@@ -4895,7 +4894,7 @@ BEGIN
v_errorhint := 'Fout bij opvragen te importeren rij';
-- Lees alle veldwaarden
--AKZA#36457: room ID wordt voortaan opgehaald uit de bestandsnaam van de import
-- AKZA#36457: room ID wordt voortaan opgehaald uit de bestandsnaam van de import
v_room_id := v_ruimte_id;
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 1, v_subject);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 2, v_starttime);
@@ -5108,7 +5107,6 @@ EXCEPTION
END demo_import_exchange;
/
CREATE OR REPLACE PROCEDURE demo_update_exchange (
p_import_key IN NUMBER
)
@@ -5128,7 +5126,7 @@ IS
v_ongeldig NUMBER (1);
v_debug BOOLEAN := TRUE;
c_activiteit_key NUMBER (10) := 1; -- Vergadering
c_activiteit_key NUMBER (10) := 1; -- Vergadering vanuit Exchange
v_reservering_key NUMBER (10);
v_rsv_ruimte_volgnr res_rsv_ruimte.res_rsv_ruimte_volgnr%TYPE;
v_ruimte_opstel_key NUMBER (10);
@@ -5150,7 +5148,7 @@ IS
-- en nu met recurrence-ID (= occurence). Die single verwijderen, daarna de occurences toevoegen.
-- NB: checken of in deze synchro een appointment niet zowel toegevoegd/bijgewerkt als verwijderd is;
-- dan hoeven we 'm natuurlijk niet meer toe te voegen / bij te werken.
-- (TODO: weet niet of dat uberhaupt voorkomt met EWS)
-- (TODO: weet niet of dat <EFBFBD>berhaupt voorkomt met EWS)
-- TODO: notificeren
CURSOR c_del
IS
@@ -5304,7 +5302,7 @@ IS
-- - Deelnemers erbij / eraf --> Bezoekers toevoegen / verwijderen, deelnemerslijst bijwerken.
-- TODO: notificeren
-- NB: checken of in deze synchro een appointment niet zowel bijgewerkt als verwijderd is;
-- dan hoeven we 'm natuurlijk niet meer bij te werken (weet niet of dat uberhaupt voorkomt met EWS)
-- dan hoeven we 'm natuurlijk niet meer bij te werken (weet niet of dat <EFBFBD>berhaupt voorkomt met EWS)
-- TODO: dit detecteert geen room changes, alleen mutaties aan res op dezelfde ruimte.
CURSOR c_upd
IS
@@ -5342,7 +5340,7 @@ IS
-- TOEVOEGEN
-- Triggers voor het toevoegen van een toekomstige (deel)reservering:
-- - ADD-modifier in synchro; appointment is nieuw
-- - UPDATE-modifier in synchro, met onbekend appointment- en recurrence-ID voor deze room: dan (of)
-- - UPDATE-modifier in synchro, met onbekend appointment- en recurrence-ID voor deze room: dan (<EFBFBD>f)
-- - appointment bestond al, maar er is nu pas een ruimte aan toegevoegd;
-- - het was een single en nu recurring.
-- - appointment met meerdere ruimtes, maar nog geen deelreservering voor deze ruimte (zal vooral
@@ -5410,7 +5408,7 @@ IS
AND r.res_ruimte_verwijder IS NULL
AND r.res_ruimte_extern_id = i.room_id);
BEGIN
BEGIN
-- We doen niets met boekingen in het verleden
UPDATE demo_imp_exchange i
SET gelukt = 4
@@ -5463,7 +5461,7 @@ IS
v_count := v_count + 1;
END LOOP;
-- Minstens een onderdeel moet worden doorbelast
-- Minstens <EFBFBD><EFBFBD>n onderdeel moet worden doorbelast
-- FO-status van rsv_ruimte wordt "Vervallen" (4)
IF (v_count > 0)
THEN
@@ -5537,8 +5535,8 @@ IS
COMMIT;
-- Omdat we entries die gefaald zijn 'bewaren', kan het zijn dat we voor een appointment
-- meerdere updates - of zelfs een delete - hebben. Dan zijn we alleen geinteresseerd in de
-- Omdat we entries die gefaald zijn 'bewaren', kan het zijn dat we voor <EFBFBD><EFBFBD>n appointment
-- meerdere updates - of zelfs een delete - hebben. Dan zijn we alleen ge<EFBFBD>nteresseerd in de
-- nieuwste, de rest kan genegeerd/weg. (Als we een nieuwere UPDate hebben, kan de originele
-- ADD/create ook weg; een update van een nog-niet-bestaande reservering zorgt voor aanmaken.)
-- Hoger seq_nr = latere mutatie in Exchange
@@ -5579,14 +5577,14 @@ IS
-- FACILITOR geboekt (count_all_booked) zijn en hoeveel we er uit EWS hebben binnengekregen (count_all_needed).
-- Als count_all_booked > 1 en/of count_all_needed > 1, dan betreft het een appointment met meerdere
-- rooms en dus meerdere rsv_ruimtes. Dan moeten we nog meer weten.
-- Als count_all_booked = 1 en count_all_needed = 1, dan betreft het een single-room boeking en kunnen we
-- rucksichtslos bijwerken.
-- Als count_all_booked = 1 <EFBFBD>n count_all_needed = 1, dan betreft het een single-room boeking en kunnen we
-- r<EFBFBD>cksichtslos bijwerken.
-- (Dat is niet correct als er een room aan een bestaande appointment is toegevoegd, waar we nu nog
-- maar een room van hebben. Maar de sync-functionaliteit van EWS biedt geen manier om die situatie te
-- maar <EFBFBD><EFBFBD>n room van hebben. Maar de sync-functionaliteit van EWS biedt geen manier om die situatie te
-- achterhalen... Met de calendar view kan dit wel, omdat we dan alle gelijktijdige boekingen op de
-- verschillende ruimtes binnenkrijgen, daarom:)
-- Als we een full import doen (calendar view), kan het maar zo zijn dat we in de import meerdere
-- ruimtes in dezelfde appointment tegenkomen (count_all_needed > 1), terwijl we daar nu nog maar een
-- ruimtes in dezelfde appointment tegenkomen (count_all_needed > 1), terwijl we daar nu nog maar <EFBFBD><EFBFBD>n
-- ruimte van kennen (count_all_booked = 1). Dan is het dus een multi-room boeking, die nog niets alszodanig
-- bekend stond.
v_errorhint := 'Totaal aantal geboekte zalen bepalen';
@@ -5605,7 +5603,7 @@ IS
AND i.appt_id||'|'||i.recur_id||'|' LIKE rec.appt_id||'|'||rec.recur_id||'|';
-- De cursor bevat voor iedere appointment alle rsv_ruimtes met dezelfde appt_id en recur_id.
-- Er zal hoogstens een rsv_ruimte op de betreffende room zijn.
-- Er zal hoogstens <EFBFBD><EFBFBD>n rsv_ruimte op de betreffende room zijn.
-- Bestaat er al een rsv_ruimte voor deze room (count = 1)?
v_errorhint := 'Bepalen of zaal al geboekt is';
SELECT COUNT(*)
@@ -5633,8 +5631,8 @@ IS
AND r.res_ruimte_key = ro.res_ruimte_key
AND r.res_ruimte_verwijder IS NULL;
-- De room is nog niet geboekt. Dan kunnen we of een bestaande boeking omhangen naar deze ruimte,
-- of een nieuwe boeking maken (in de ADD-cursor)
-- De room is nog niet geboekt. Dan kunnen we <EFBFBD>f een bestaande boeking omhangen naar deze ruimte,
-- <EFBFBD>f een nieuwe boeking maken (in de ADD-cursor)
-- Daarom: kunnen we de huidige rsv_ruimte aanpassen, of is die ruimte nog gewoon geboekt in Exchange?
v_errorhint := 'Bepalen of voor room/zaal nog een boeking gewenst is';
SELECT COUNT(DISTINCT room_id)
@@ -5773,7 +5771,7 @@ IS
demo.setBezoekers(p_import_key, rec.appt_id, rec.recur_id, rec.res_rsv_ruimte_key);
-- Succesvol afgerond; zet vlag.
-- Alleen voor nu beschouwde ruimte! (appointments kunnen op meerdere ruimtes zijn)
-- All<EFBFBD><EFBFBD>n voor nu beschouwde ruimte! (appointments kunnen op meerdere ruimtes zijn)
-- TODO: komen we hier ook als er iets mis ging met de bezoekers?
UPDATE demo_imp_exchange
SET gelukt = 1
@@ -5967,17 +5965,12 @@ IS
AND ro.res_ruimte_opstel_key = rr.res_ruimte_opstel_key
AND r.res_ruimte_key = ro.res_ruimte_key;
-- Altijd tracken, maar alleen notificeren als niet discipline 1485
-- AKZA#40274 ook notificeren als discipline = 1485 Mail Andre 6-7: voorlopig terugdraaien
-- DEMO#57950: Bovenstaande nog even laten staan. Voor Schiphol
-- geldt altijd tracken en notificeren!
-- Altijd tracken <20>n notificeren!
v_errorhint := 'Tracking NEW';
v_code := 'RESNEW';
--IF (v_discipline_key = 1341)
--THEN
-- v_code := '#RESNEW';
--END IF;
fac.trackaction (v_code, v_rsv_ruimte_key, NULL, SYSDATE, 'Uw reservering '||TO_CHAR(v_reservering_key)||'/'||TO_CHAR(v_rsv_ruimte_volgnr)||' is geregistreerd');
fac.trackaction (v_code, v_rsv_ruimte_key, NULL, SYSDATE, 'Booking confirmation meeting room, booking ref.: '||v_reservering_key||'/'||v_rsv_ruimte_volgnr);
-- Is er iets dirty?
res.set_ruimte_dirty(v_rsv_ruimte_key);
@@ -6032,22 +6025,100 @@ EXCEPTION
COMMIT;
END demo_update_exchange;
/
CREATE OR REPLACE PROCEDURE demo_import_exchsync (p_import_key IN NUMBER)
AS
BEGIN
demo_import_exchange(p_import_key);
END;
/
CREATE OR REPLACE PROCEDURE demo_update_exchsync (p_import_key IN NUMBER)
AS
CREATE OR REPLACE PROCEDURE demo_import_exchsync (
p_import_key IN NUMBER
)
IS
BEGIN
demo_update_exchange(p_import_key);
demo_import_exchange(p_import_key);
END;
/
CREATE OR REPLACE PROCEDURE demo_update_exchsync (
p_import_key IN NUMBER
)
IS
BEGIN
demo_update_exchange(p_import_key);
END;
/
CREATE OR REPLACE PROCEDURE demo_import_exchfull (
p_import_key IN NUMBER
)
IS
BEGIN
demo_import_exchange(p_import_key);
END;
/
CREATE OR REPLACE PROCEDURE demo_update_exchfull (
p_import_key IN NUMBER
)
IS
v_errorhint VARCHAR2 (1000);
BEGIN
demo_update_exchange(p_import_key); -- Eerst de gewone import
-- Nu alle reserveringen die niet zijn aangetroffen verwijderen
-- (Alleen voor ruimtes die in de importtabel voorkomen. Normaliter zijn dat alle ruimtes,
-- maar zo voorkom je dat je alle reserveringen weggooit als een ruimte 'per ongeluk' een
-- keer niet in de import zit. Handmatig verwijderen kan altijd.)
FOR rec IN (WITH this_import AS (SELECT *
FROM demo_imp_exchange
WHERE fac_import_key = p_import_key)
SELECT res_rsv_ruimte_key,
res_rsv_ruimte_van,
res_rsv_ruimte_tot,
res_reservering_key,
res_rsv_ruimte_volgnr
FROM res_rsv_ruimte rr,
res_ruimte_opstelling ro,
res_ruimte r
WHERE rr.res_rsv_ruimte_externnr IS NOT NULL
AND rr.res_rsv_ruimte_verwijder IS NULL
AND rr.res_rsv_ruimte_van >= (SELECT MIN(starttime) FROM this_import)
AND rr.res_rsv_ruimte_van <= (SELECT MAX(starttime) FROM this_import)
AND ro.res_ruimte_opstel_key = rr.res_ruimte_opstel_key
AND r.res_ruimte_key = ro.res_ruimte_key
AND r.res_ruimte_extern_id IN (SELECT DISTINCT room_id FROM this_import)
AND NOT EXISTS
(SELECT 1
FROM this_import i
WHERE rr.res_rsv_ruimte_externnr LIKE i.appt_id||'|'||i.recur_id||'|%'
AND r.res_ruimte_extern_id = i.room_id)
)
LOOP
v_errorhint := 'Verwijderen reservering '
|| TO_CHAR(rec.res_reservering_key) || '/' || rec.res_rsv_ruimte_volgnr
|| ' (' || TO_CHAR(rec.res_rsv_ruimte_key) || ')';
fac.imp_writelog (p_import_key, 'I', v_errorhint, '');
UPDATE res_rsv_ruimte
SET res_status_fo_key = 1, -- nooit doorbelasten of v_status_fo_key?
res_rsv_ruimte_verwijder = SYSDATE
WHERE res_rsv_ruimte_key = rec.res_rsv_ruimte_key;
fac.trackaction ('RESDEL', rec.res_rsv_ruimte_key, NULL, SYSDATE, NULL);
res.set_ruimte_dirty(rec.res_rsv_ruimte_key);
res.set_ruimtes_clean(rec.res_rsv_ruimte_van);
res.follow_artikel(rec.res_rsv_ruimte_key, rec.res_rsv_ruimte_van, rec.res_rsv_ruimte_tot);
res.follow_deel(rec.res_rsv_ruimte_key, rec.res_rsv_ruimte_van, rec.res_rsv_ruimte_tot);
v_errorhint := 'res_reservering verwijderen';
UPDATE res_reservering
SET res_reservering_verwijder = SYSDATE
WHERE res_reservering_key = rec.res_reservering_key
AND NOT EXISTS (SELECT *
FROM res_v_aanwezigrsv_ruimte
WHERE res_reservering_key = rec.res_reservering_key);
END LOOP;
END;
/
------------------------------------------
@@ -8226,6 +8297,33 @@ END;
/
-- rapport voor calender weergave
CREATE OR REPLACE VIEW demo_v_rap_opdrcal
AS
SELECT ot.MLD_TYPEOPDR_OMSCHRIJVING
|| ': '
|| o.mld_melding_key
|| '/'
|| mld_opdr_bedrijfopdr_volgnr
|| ' '
|| mo.NAAM title,
o.MLD_OPDR_DATUMBEGIN van,
o.mld_opdr_einddatum tot,
o.MLD_OPDR_KEY,
CASE WHEN mo.TYPE = 'B' THEN '#343F4D ' ELSE '#00B0F0' END color
FROM mld_opdr o,
mld_melding m,
mld_typeopdr ot,
MLD_V_UITVOERENDE mo
WHERE m.mld_melding_key = o.mld_opdr_key
AND o.MLD_TYPEOPDR_KEY = ot.MLD_TYPEOPDR_KEY
AND o.MLD_UITVOERENDE_KEYS = mo.MLD_UITVOERENDE_KEY
AND o.MLD_STATUSOPDR_KEY IN (3,
4,
5,
8,
10);
------ payload end ------