DEMO#83639 -- Outlook koppeling import routine
svn path=/Customer/trunk/; revision=64526
This commit is contained in:
180
DEMO/demo.sql
180
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 <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 ------
|
||||
|
||||
|
||||
Reference in New Issue
Block a user