AKZA#36054 Dubbele boekingen vanuit Exchange voorkomen/oplossen

svn path=/Customer/trunk/; revision=29519
This commit is contained in:
Jos Groot Lipman
2016-05-25 13:14:09 +00:00
parent 35ca52eae8
commit cd22ceedac

View File

@@ -60,7 +60,7 @@ AS
PROCEDURE checkParking(p_bezoekers_key IN NUMBER);
PROCEDURE set_ruimtes_clean;
PROCEDURE set_ruimtes_clean(p_import_key IN NUMBER);
END;
/
@@ -659,13 +659,18 @@ AS
-- de synchronisatie procedure
-- Daarom veronderstellen wij dat toch degene die dirty was geworden de waarheid is
-- en de 'andere' dirty had moeten worden of sterker nog: we verwijderen de andere
PROCEDURE set_ruimtes_clean
PROCEDURE set_ruimtes_clean(p_import_key IN NUMBER)
IS
dirtlevel res_rsv_ruimte.res_rsv_ruimte_dirtlevel%TYPE;
v_errorhint VARCHAR2 (1000);
CURSOR c_prsv_ruimte_new
IS
SELECT rr.res_rsv_ruimte_key, r.res_ruimte_key, res_rsv_ruimte_van
SELECT rr.res_rsv_ruimte_key,
r.res_ruimte_key,
res_rsv_ruimte_van,
res_reservering_key,
res_rsv_ruimte_volgnr
FROM res_ruimte r, res_ruimte_opstelling ro, res_rsv_ruimte rr
WHERE ro.res_ruimte_opstel_key = rr.res_ruimte_opstel_key
AND r.res_ruimte_key = ro.res_ruimte_key
@@ -673,11 +678,17 @@ AS
AND res_rsv_ruimte_verwijder IS NULL
AND res_ruimte_extern_id IS NOT NULL
AND res_rsv_ruimte_van > TRUNC (SYSDATE)
ORDER BY res_rsv_ruimte_key DESC
FOR UPDATE OF res_rsv_ruimte_dirtlevel;
BEGIN
FOR prsv_ruimte_new IN c_prsv_ruimte_new
LOOP
-- Wij in ieder geval niet meer dirty
v_errorhint := 'Cleanup reservering ' || TO_CHAR(prsv_ruimte_new.res_reservering_key) || '/' || prsv_ruimte_new.res_rsv_ruimte_volgnr
|| ' (' || TO_CHAR(prsv_ruimte_new.res_rsv_ruimte_key) || ')';
dbms_output.put_line(v_errorhint);
fac.imp_writelog (p_import_key, 'I', v_errorhint, '');
UPDATE res_rsv_ruimte
SET res_rsv_ruimte_dirtlevel = 0
WHERE CURRENT OF c_prsv_ruimte_new; -- geen tracking
@@ -688,27 +699,33 @@ AS
IN (SELECT rr.res_rsv_ruimte_key,
res_rsv_ruimte_van,
res_rsv_ruimte_tot,
res_reservering_key
res_reservering_key,
res_rsv_ruimte_volgnr
FROM res_ruimte r, res_ruimte_opstelling ro, res_rsv_ruimte rr
WHERE r.res_ruimte_key = prsv_ruimte_new.res_ruimte_key
AND rr.res_rsv_ruimte_key <> prsv_ruimte_new.res_rsv_ruimte_key
AND ro.res_ruimte_opstel_key = rr.res_ruimte_opstel_key
AND r.res_ruimte_key = ro.res_ruimte_key
AND BITAND(res_rsv_ruimte_dirtlevel, 512) = 0
AND res_rsv_ruimte_verwijder IS NULL
AND res_rsv_ruimte_van BETWEEN TRUNC(prsv_ruimte_new.res_rsv_ruimte_van)
AND TRUNC(prsv_ruimte_new.res_rsv_ruimte_van)
+ 1)
AND TRUNC(prsv_ruimte_new.res_rsv_ruimte_van)
+ 1)
LOOP
-- Degene die met ons overlapte zal dirty worden nu wij vrij zijn
v_errorhint := ' Checking reservering ' || TO_CHAR(prsv_ruimte_old.res_reservering_key) || '/' || prsv_ruimte_old.res_rsv_ruimte_volgnr
|| ' (' || TO_CHAR(prsv_ruimte_old.res_rsv_ruimte_key) || ')';
dbms_output.put_line(v_errorhint);
fac.imp_writelog (p_import_key, 'I', v_errorhint, '');
res.set_ruimte_dirty (prsv_ruimte_old.res_rsv_ruimte_key); -- deze houdt rekening met schoonmaaak
SELECT res_rsv_ruimte_dirtlevel
INTO dirtlevel
FROM res_rsv_ruimte
WHERE res_rsv_ruimte_key = prsv_ruimte_old.res_rsv_ruimte_key;
IF dirtlevel <> 0
IF BITAND(dirtlevel, 512) <> 0
THEN
--v_errorhint := '(oude) Dirty Deelreservering verwijderen';
dbms_output.put_line(' Remove dirty reservering ' || TO_CHAR(prsv_ruimte_old.res_rsv_ruimte_key));
UPDATE res_rsv_ruimte
SET res_status_fo_key = 1, -- nooit doorbelasten
res_rsv_ruimte_verwijder = SYSDATE
@@ -1009,14 +1026,14 @@ BEGIN
END IF;
COMMIT;
-- akza_import_exchange() wordt voor elk importbestand aangeroepen. Dat gebeurt steeds met dezelfde
-- fac_import_key, dus er kan achteraf niet bepaald worden welke importregels bij welk bestand (en
-- dus welke ruimte horen. Daarom fac_imp_file handmatig legen, zodat we bij het volgende bestand
-- met een schone lei beginnen.
DELETE FROM fac_imp_file
WHERE fac_import_key = p_import_key;
COMMIT;
EXCEPTION
@@ -1840,7 +1857,10 @@ BEGIN
END;
END LOOP;
-- Bij dirty ruimtes de *oudere* opruimen
v_aanduiding := 'Calling set_ruimtes_clean';
v_errorhint := '';
set_ruimtes_clean(p_import_key);
COMMIT;
EXCEPTION