FMHN#90557: Reserveringsfout ondanks correcte invoer.
svn path=/Database/trunk/; revision=70492
This commit is contained in:
130
RES/RES_PAC.SRC
130
RES/RES_PAC.SRC
@@ -209,6 +209,7 @@ AS
|
||||
new_ruimte_van DATE;
|
||||
new_ruimte_tot DATE;
|
||||
bez_parkingdiscipline_key NUMBER;
|
||||
min_res_rsv_artikel_key res_rsv_artikel.res_rsv_artikel_key%TYPE;
|
||||
BEGIN
|
||||
SELECT *
|
||||
INTO rsv_from
|
||||
@@ -434,55 +435,86 @@ AS
|
||||
-- Artikel is al toegevoegd indien catering is aangevinkt.
|
||||
-- De kenmerken van de oude en nieuwe reserveringen zijn exact hetzelfde met dezelfde kenmerk keys enz.
|
||||
-- De kenmerken van de oude en nieuwe reservering in dezelfde volgorde zetten en dan de waarden overnemen.
|
||||
INSERT INTO res_kenmerkartikel (res_rsv_artikel_key,
|
||||
res_kenmerk_key,
|
||||
res_kenmerkartikel_waarde)
|
||||
SELECT newkenmerk.res_rsv_artikel_key,
|
||||
newkenmerk.res_kenmerk_key,
|
||||
oldkenmerk.res_kenmerkartikel_waarde
|
||||
FROM (SELECT ka.res_rsv_artikel_key,
|
||||
ka.res_kenmerk_key,
|
||||
ka.res_kenmerkartikel_waarde,
|
||||
ra.res_artikel_key,
|
||||
k.res_srtkenmerk_key
|
||||
FROM res_kenmerkartikel ka,
|
||||
res_kenmerk k,
|
||||
res_srtkenmerk sk,
|
||||
res_rsv_ruimte rr,
|
||||
res_rsv_artikel rra,
|
||||
res_artikel ra
|
||||
WHERE ka.res_kenmerk_key = k.res_kenmerk_key
|
||||
AND k.res_srtkenmerk_key = sk.res_srtkenmerk_key
|
||||
AND (k.res_artikel_key = rra.res_artikel_key
|
||||
OR k.res_discipline_key = ra.res_discipline_key)
|
||||
AND ra.res_artikel_key = rra.res_artikel_key
|
||||
AND ka.res_rsv_artikel_key = rra.res_rsv_artikel_key
|
||||
AND rra.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
|
||||
--AND k.res_activiteit_key IS NULL -- Niet nodig: Als res_activiteit_key gevuld is dan is res_kenmerk_niveau 'A'.
|
||||
AND k.res_kenmerk_niveau IN ('C', 'D')
|
||||
AND BITAND(k.res_kenmerk_rolcode, 7) <> 4 -- Backofficekenmerken niet (100)
|
||||
AND k.res_kenmerk_verwijder IS NULL
|
||||
AND ka.res_kenmerkartikel_verwijder IS NULL
|
||||
AND sk.res_srtkenmerk_kenmerktype NOT IN ('F', 'M', 'E')
|
||||
AND rr.res_rsv_ruimte_key = prsv_ruimte_key_from) oldkenmerk,
|
||||
(SELECT rra.res_rsv_artikel_key,
|
||||
k.res_kenmerk_key,
|
||||
ra.res_artikel_key,
|
||||
k.res_srtkenmerk_key
|
||||
FROM res_rsv_ruimte rr,
|
||||
res_rsv_artikel rra,
|
||||
res_artikel ra,
|
||||
res_kenmerk k
|
||||
WHERE rra.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
|
||||
AND (k.res_artikel_key = rra.res_artikel_key
|
||||
OR k.res_discipline_key = ra.res_discipline_key)
|
||||
AND ra.res_artikel_key = rra.res_artikel_key
|
||||
AND rr.res_rsv_ruimte_key = prsv_ruimte_key_to) newkenmerk
|
||||
WHERE oldkenmerk.res_kenmerk_key = newkenmerk.res_kenmerk_key
|
||||
AND oldkenmerk.res_srtkenmerk_key = newkenmerk.res_srtkenmerk_key
|
||||
AND oldkenmerk.res_artikel_key = newkenmerk.res_artikel_key
|
||||
ORDER BY newkenmerk.res_rsv_artikel_key,
|
||||
newkenmerk.res_kenmerk_key;
|
||||
|
||||
-- Een artikel kan vaker voorkomen met een andere waarde van zijn kenmerk.
|
||||
-- In dat geval kunnen de kenmerken niet rechtstreeks gematched worden. Een "oud" res_rsv_artikel_key kan dan gematched worden aan meerdere "nieuwe" res_rsv_artikel_key's.
|
||||
-- We doorlopen dan elk "oud" res_rsv_artikel_key met zijn kenmerk afzonderlijk en kiezen dan <20><>n van de vrije "nieuwe" res_rsv_artikel_key's (MIN).
|
||||
-- Aan het eind zijn dan alle "oud" res_rsv_artikel_key's gebonden aan een nieuw res_rsv_artikel_key. Met een query kan het niet in <20><>n keer opgelost worden.
|
||||
FOR kenmerkartikelrec
|
||||
IN
|
||||
(SELECT oldkenmerk.res_rsv_artikel_key,
|
||||
newkenmerk.res_kenmerk_key,
|
||||
oldkenmerk.res_kenmerkartikel_waarde,
|
||||
oldkenmerk.res_artikel_key
|
||||
FROM (SELECT ka.res_rsv_artikel_key,
|
||||
ka.res_kenmerk_key,
|
||||
ka.res_kenmerkartikel_waarde,
|
||||
ra.res_artikel_key,
|
||||
k.res_srtkenmerk_key
|
||||
FROM res_kenmerkartikel ka,
|
||||
res_kenmerk k,
|
||||
res_srtkenmerk sk,
|
||||
res_rsv_ruimte rr,
|
||||
res_rsv_artikel rra,
|
||||
res_artikel ra
|
||||
WHERE ka.res_kenmerk_key = k.res_kenmerk_key
|
||||
AND k.res_srtkenmerk_key = sk.res_srtkenmerk_key
|
||||
AND (k.res_artikel_key = rra.res_artikel_key
|
||||
OR k.res_discipline_key = ra.res_discipline_key)
|
||||
AND ra.res_artikel_key = rra.res_artikel_key
|
||||
AND ka.res_rsv_artikel_key = rra.res_rsv_artikel_key
|
||||
AND rra.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
|
||||
--AND k.res_activiteit_key IS NULL -- Niet nodig: Als res_activiteit_key gevuld is dan is res_kenmerk_niveau 'A'.
|
||||
AND k.res_kenmerk_niveau IN ('C', 'D')
|
||||
AND BITAND(k.res_kenmerk_rolcode, 7) <> 4 -- Backofficekenmerken niet (100)
|
||||
AND k.res_kenmerk_verwijder IS NULL
|
||||
AND ka.res_kenmerkartikel_verwijder IS NULL
|
||||
AND sk.res_srtkenmerk_kenmerktype NOT IN ('F', 'M', 'E')
|
||||
AND rr.res_rsv_ruimte_key = prsv_ruimte_key_from) oldkenmerk,
|
||||
(SELECT rra.res_rsv_artikel_key,
|
||||
k.res_kenmerk_key,
|
||||
ra.res_artikel_key,
|
||||
k.res_srtkenmerk_key
|
||||
FROM res_rsv_ruimte rr,
|
||||
res_rsv_artikel rra,
|
||||
res_artikel ra,
|
||||
res_kenmerk k
|
||||
WHERE rra.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
|
||||
AND (k.res_artikel_key = rra.res_artikel_key
|
||||
OR k.res_discipline_key = ra.res_discipline_key)
|
||||
AND ra.res_artikel_key = rra.res_artikel_key
|
||||
AND rr.res_rsv_ruimte_key = prsv_ruimte_key_to) newkenmerk
|
||||
WHERE oldkenmerk.res_kenmerk_key = newkenmerk.res_kenmerk_key
|
||||
AND oldkenmerk.res_srtkenmerk_key = newkenmerk.res_srtkenmerk_key
|
||||
AND oldkenmerk.res_artikel_key = newkenmerk.res_artikel_key
|
||||
GROUP BY oldkenmerk.res_rsv_artikel_key,
|
||||
newkenmerk.res_kenmerk_key,
|
||||
oldkenmerk.res_kenmerkartikel_waarde,
|
||||
oldkenmerk.res_artikel_key
|
||||
ORDER BY oldkenmerk.res_rsv_artikel_key,
|
||||
newkenmerk.res_kenmerk_key)
|
||||
LOOP
|
||||
SELECT MIN(rra.res_rsv_artikel_key)
|
||||
INTO min_res_rsv_artikel_key
|
||||
FROM res_rsv_artikel rra,
|
||||
res_rsv_ruimte rr
|
||||
WHERE rra.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
|
||||
AND rr.res_rsv_ruimte_key = prsv_ruimte_key_to
|
||||
AND res_artikel_key = kenmerkartikelrec.res_artikel_key
|
||||
-- De res_rsv_artikel_key's die bezet zijn uitsluiten. Welke res_kenmerkartikel_waarde is ingevuld maakt niets uit.
|
||||
AND NOT EXISTS
|
||||
(SELECT res_kenmerkartikel_key
|
||||
FROM res_kenmerkartikel
|
||||
WHERE res_rsv_artikel_key = rra.res_rsv_artikel_key
|
||||
AND res_kenmerk_key = kenmerkartikelrec.res_kenmerk_key);
|
||||
|
||||
INSERT INTO res_kenmerkartikel (res_rsv_artikel_key,
|
||||
res_kenmerk_key,
|
||||
res_kenmerkartikel_waarde)
|
||||
VALUES (min_res_rsv_artikel_key,
|
||||
kenmerkartikelrec.res_kenmerk_key,
|
||||
kenmerkartikelrec.res_kenmerkartikel_waarde);
|
||||
END LOOP;
|
||||
END IF;
|
||||
END IF;
|
||||
-- 512 Bezoekers
|
||||
|
||||
Reference in New Issue
Block a user