AKZA#36054 Dubbele boekingen vanuit Exchange voorkomen/oplossen
svn path=/Customer/trunk/; revision=29519
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user