From 164037ff1cedfcd4bd5e6c652ab6e77152da0a32 Mon Sep 17 00:00:00 2001 From: Sander Schepers Date: Wed, 16 Mar 2022 09:00:28 +0000 Subject: [PATCH] STPH#70681 Koppeling Exchange svn path=/Customer/trunk/; revision=55302 --- STPH/stph_exchange.sql | 82 +++++++++++++++++++++++++++++++++++------- 1 file changed, 69 insertions(+), 13 deletions(-) diff --git a/STPH/stph_exchange.sql b/STPH/stph_exchange.sql index e467b487b..bebab5269 100644 --- a/STPH/stph_exchange.sql +++ b/STPH/stph_exchange.sql @@ -262,7 +262,7 @@ AS WHERE res_kenmerk_key = c_km_key_genodigden AND res_rsv_ruimte_key = p_rsv_ruimte_key; -- Afspraak wissen - v_afspraak_key := stph.getAfspraak(p_rsv_ruimte_key, 0); + v_afspraak_key := stph_exchange.getAfspraak(p_rsv_ruimte_key, 0); IF v_afspraak_key IS NOT NULL THEN IF (v_debug) THEN @@ -322,7 +322,7 @@ AS -- Er zijn niet-AMB-/SSCA-medewerker attendees, zorgen dat er een afspraak is IF (v_afspraak_key IS NULL) THEN - v_afspraak_key := stph.getAfspraak(p_rsv_ruimte_key, 1); + v_afspraak_key := stph_exchange.getAfspraak(p_rsv_ruimte_key, 1); -- Moet de afspraak verplaatst worden in de tijd? SELECT bez_afspraak_datum, @@ -357,7 +357,7 @@ AS p_rsv_ruimte_key, 'AFSPRAAK '||v_afspraak_key); END IF; END IF; - stph.upsertBezoeker(p_import_key, v_afspraak_key, rec.bez_bezoekers_key, rec.att_mail, rec.att_name, rec.prs_perslid_key, rec.prs_afdeling_naam ); + stph_exchange.upsertBezoeker(p_import_key, v_afspraak_key, rec.bez_bezoekers_key, rec.att_mail, rec.att_name, rec.prs_perslid_key, rec.prs_afdeling_naam ); END IF; -- Opruiming: afspraken zonder bezoekers (kan gebeuren als er alleen nog interne deelnemers zijn, @@ -373,7 +373,7 @@ AS fac.imp_writelog (p_import_key, 'D', p_rsv_ruimte_key, SUBSTR('GENODIGDEN: '||CHR(13) ||v_genodigden, 1, 1000) ); END IF; - stph.upsertkenmerk_res(c_km_key_genodigden, p_rsv_ruimte_key, v_genodigden ); + stph_exchange.upsertkenmerk_res(c_km_key_genodigden, p_rsv_ruimte_key, v_genodigden ); END IF; END; @@ -546,7 +546,7 @@ AS -- Mailadres opslaan -- bez_kenmerk E-mail 1000 - stph.upsertkenmerk_bez(1000, v_bezoekers_key, p_att_mail); + stph_exchange.upsertkenmerk_bez(1000, v_bezoekers_key, p_att_mail); END IF; -- TODO: tracking; liefst geen aparte regel per bezoeker @@ -1208,7 +1208,7 @@ IS v_ongeldig NUMBER (1); v_debug BOOLEAN := TRUE; - c_activiteit_key NUMBER (10) := 201; -- Vergadering vanuit Exchange + c_activiteit_key NUMBER (10) := 70; -- 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); @@ -1791,7 +1791,7 @@ BEGIN OR rec.res_rsv_ruimte_tot != rec.endtime) THEN v_errorhint := 'Opstelling ophalen'; - v_ruimte_opstel_key := stph.getOpstelling(rec.room_id); + v_ruimte_opstel_key := stph_exchange.getOpstelling(rec.room_id); IF (v_ruimte_opstel_key IS NULL) THEN fac.imp_writelog (p_import_key, @@ -1850,7 +1850,7 @@ BEGIN -- Bezoekers bijwerken v_errorhint := 'Bezoekers bijwerken'; - stph.setBezoekers(p_import_key, rec.appt_id, rec.recur_id, rec.res_rsv_ruimte_key); + stph_exchange.setBezoekers(p_import_key, rec.appt_id, rec.recur_id, rec.res_rsv_ruimte_key); -- Succesvol afgerond; zet vlag. -- Alléén voor nu beschouwde ruimte! (appointments kunnen op meerdere ruimtes zijn) @@ -1923,7 +1923,7 @@ BEGIN AND a.prs_afdeling_key = p.prs_afdeling_key; v_errorhint := 'Opstelling ophalen'; - v_ruimte_opstel_key := stph.getOpstelling(rec.room_id); + v_ruimte_opstel_key := stph_exchange.getOpstelling(rec.room_id); IF (v_ruimte_opstel_key IS NULL) THEN fac.imp_writelog (p_import_key, @@ -2022,7 +2022,7 @@ BEGIN END IF; v_errorhint := 'Toevoegen bezoekers'; - stph.setBezoekers(p_import_key, rec.appt_id, rec.recur_id, v_rsv_ruimte_key); + stph_exchange.setBezoekers(p_import_key, rec.appt_id, rec.recur_id, v_rsv_ruimte_key); -- Succesvol afgerond; zet vlag. -- TODO: komen we hier ook als er iets mis ging met de bezoekers? @@ -2087,7 +2087,7 @@ BEGIN -- Bij dirty ruimtes de *oudere* opruimen v_aanduiding := 'Calling set_ruimtes_clean'; v_errorhint := ''; - stph.set_ruimtes_clean(p_import_key); + stph_exchange.set_ruimtes_clean(p_import_key); COMMIT; EXCEPTION @@ -2135,12 +2135,68 @@ BEGIN END; / -CREATE OR REPLACE PROCEDURE stph_update_exchsync ( +CREATE OR REPLACE PROCEDURE stph_update_exchfull ( p_import_key IN NUMBER ) IS + v_errorhint VARCHAR2 (1000); BEGIN - stph_update_exchange(p_import_key); + stph_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 stph_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; /