From 0df20e61d264d7571d1d524bc80d3fd18266117f Mon Sep 17 00:00:00 2001 From: Norbert Wassink Date: Mon, 6 May 2024 08:52:09 +0000 Subject: [PATCH] DEMO#83639 -- Outlook koppeling import routine svn path=/Customer/trunk/; revision=64526 --- DEMO/demo.sql | 180 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 139 insertions(+), 41 deletions(-) diff --git a/DEMO/demo.sql b/DEMO/demo.sql index f873e0da2..327f5b4d8 100644 --- a/DEMO/demo.sql +++ b/DEMO/demo.sql @@ -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 ü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 ü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 (ó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 éé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 één appointment + -- meerdere updates - of zelfs een delete - hebben. Dan zijn we alleen geï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 én count_all_needed = 1, dan betreft het een single-room boeking en kunnen we + -- rü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 éé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 éé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 éé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 óf een bestaande boeking omhangen naar deze ruimte, + -- ó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éé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 é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 ------