FMHN#69958: Bij het kopiëren van bezoekers wordt de parkeerplaats ook overgenomen.

svn path=/Database/trunk/; revision=55309
This commit is contained in:
Maykel Geerdink
2022-03-16 13:43:11 +00:00
parent 8bd4cfc8dd
commit 44e8ed7fc7

View File

@@ -8,7 +8,7 @@ CREATE OR REPLACE PACKAGE bez AS
PROCEDURE copy_afspraak (pkey IN NUMBER, newdate IN DATE, puserkey IN NUMBER, prsvkey_to IN NUMBER);
PROCEDURE copy_afspraak (pkey IN NUMBER, newdate IN DATE, puserkey IN NUMBER, prsvkey_to IN NUMBER, newafspraakkey OUT NUMBER);
PROCEDURE sync_resafspraak (presvruimtevan IN NUMBER, presvruimtenaar IN NUMBER);
PROCEDURE claim_parking (pbez_bezoekers_key IN NUMBER, palg_gebter_key IN NUMBER);
PROCEDURE claim_parking (pbez_bezoekers_key IN NUMBER, palg_gebter_key IN NUMBER, pclaimOptimistic IN BOOLEAN DEFAULT FALSE);
FUNCTION hasparking (pbez_bezoekers_key IN NUMBER) RETURN NUMBER;
FUNCTION afssprintf (ps IN VARCHAR2 , p_afspraak_key IN NUMBER) RETURN VARCHAR2 ;
FUNCTION bzksprintf (ps IN VARCHAR2 , p_bezoekers_key IN NUMBER) RETURN VARCHAR2 ;
@@ -130,7 +130,18 @@ CREATE OR REPLACE PACKAGE BODY bez AS
IF (hasparking > 0)
THEN
claim_parking (newbezoekerskey, null);
-- Probeer in/op het/dezelfde gebouw/terreinsector een lege parkeerplaats te vinden.
-- Lukt dit niet dan probeer op dezelfde locatie een lege parkeerplaats te vinden (pclaimOptimistic = true).
SELECT id.ins_alg_ruimte_key
INTO alg_gebter_key
FROM res_rsv_deel rrd,
res_deel rd,
ins_deel id
WHERE rrd.res_deel_key = rd.res_deel_key
AND rd.res_ins_deel_key = id.ins_deel_key
AND rrd.bez_bezoekers_key = b.bez_bezoekers_key;
claim_parking (newbezoekerskey, alg_gebter_key, true);
-- Eventueel: controleren of de nieuwe nu ook een P heeft,
-- en zo niet dat dan tracken; goed doordenken!
END IF;
@@ -203,7 +214,9 @@ CREATE OR REPLACE PACKAGE BODY bez AS
END IF;
END;
PROCEDURE claim_parking (pbez_bezoekers_key IN NUMBER, palg_gebter_key IN NUMBER)
-- Wanneer checkOptimistic is meegegeven en er is geen lege parkeerplaats vrij in/op gebouw/terreinsector palg_gebter_key,
-- dan kijken we of er inop een ander gebouw/terreinsector nog een lege parkeerplaats gevonden kan worden.
PROCEDURE claim_parking (pbez_bezoekers_key IN NUMBER, palg_gebter_key IN NUMBER, pclaimOptimistic IN BOOLEAN DEFAULT FALSE)
AS
lafspraakkey bez_afspraak.bez_afspraak_key%TYPE;
ldeelreskey res_rsv_ruimte.res_rsv_ruimte_key%TYPE;
@@ -299,7 +312,74 @@ CREATE OR REPLACE PACKAGE BODY bez AS
-- lpreposttime is nu in dagen (in uren / 24 = in dagen).
-- In de query wordt rekening gehouden met 1 minuut marge voor afrondfouten (+/- 1 / 1440).
-- Heb ik een gebouwkey of terreinkey meegekregen?
IF palg_gebter_key IS NULL
IF palg_gebter_key IS NOT NULL
THEN
-- Wat is een vrije parkeerplaats
-- Er is een gebouwkey of terreinkey meegegeven. Hierbinnen moet de parkeerplaats gereserveerd worden.
SELECT MIN (res_deel_key) -- logischer maken?
INTO lparkeerkey
FROM (SELECT d.res_deel_key,
(SELECT MIN (rd.res_deel_key)
FROM res_v_aanwezigrsv_deel rd
WHERE d.res_deel_key = rd.res_deel_key
AND rd.res_rsv_deel_van BETWEEN TRUNC (lbegin) AND leinde - 1 / 1440 + lpreposttime
AND rd.res_rsv_deel_tot BETWEEN lbegin + 1 / 1440 - lpreposttime AND TRUNC (lbegin) + 1
AND rd.res_rsv_deel_van < leinde - 1 / 1440 + lpreposttime
AND rd.res_rsv_deel_tot > lbegin + 1 / 1440 - lpreposttime
AND d.res_discipline_key = bez_parkingdiscipline_key) aantal
FROM res_v_aanwezigdeel d,
ins_deel id,
alg_v_allonroerendgoed og,
alg_v_aanwezigterreinsector t,
alg_locatie l
WHERE d.res_ins_deel_key = id.ins_deel_key
AND id.ins_alg_locatie_key = llocatiekey
AND d.res_discipline_key = bez_parkingdiscipline_key
AND id.ins_alg_ruimte_key = t.alg_terreinsector_key(+)
AND id.ins_alg_locatie_key = l.alg_locatie_key
AND (id.ins_alg_ruimte_key = og.alg_ruimte_key
OR id.ins_alg_ruimte_key = og.alg_terreinsector_key)
AND (og.alg_gebouw_key = palg_gebter_key
OR (og.alg_terreinsector_key = palg_gebter_key
AND og.alg_terreinsector_key IN
(SELECT alg_terreinsector_key
FROM alg_v_aanwezigterreinsector t2
WHERE (lautlevel < 0
OR (lautlevel = 9 AND t2.prs_afdeling_key IS NULL)
OR (lautlevel > 0
AND (t2.prs_afdeling_key IS NULL
OR t2.prs_afdeling_key IN
(SELECT prs_afdeling_key
FROM prs_v_afdeling_familie a
WHERE a.prs_afdeling_elder_key IN
(SELECT aa.prs_afdeling_elder_key
FROM prs_v_afdeling_familie aa
WHERE aa.prs_afdeling_key = (SELECT prs_afdeling_key
FROM prs_perslid
WHERE prs_perslid_key = TO_NUMBER(sys_context('USERENV', 'CLIENT_IDENTIFIER')))
AND aa.niveau = lautlevel))))
OR (lautlevel = 0
AND (t2.prs_afdeling_key IS NULL
OR t2.prs_afdeling_key IN
(SELECT a.prs_afdeling_key
FROM prs_v_afdeling a
WHERE a.prs_bedrijf_key = (SELECT a.prs_bedrijf_key
FROM prs_perslid p,
prs_afdeling a
WHERE p.prs_afdeling_key = a.prs_afdeling_key
AND p.prs_perslid_key = TO_NUMBER(sys_context('USERENV', 'CLIENT_IDENTIFIER'))))))))))
AND id.ins_alg_ruimte_type IN ('R', 'T')
-- Is de parkeerplaats reserveerbaar op de begindag. Meerdaagse parkeerplaatsen worden niet ondersteund.
-- (bits & (2^(dow-1))) = (2^(dow-1))
AND BITAND(d.res_deel_beschikbaar_bits, POWER(2, (fac.getweekdaynum(TRUNC(lbegin)) - 1))) =
POWER(2, (fac.getweekdaynum(TRUNC (lbegin)) - 1))
AND (d.res_deel_vervaldatum IS NULL OR d.res_deel_vervaldatum > lbegin)
AND (l.alg_locatie_vervaldatum IS NULL OR l.alg_locatie_vervaldatum > TRUNC(lbegin))
AND (t.alg_terreinsector_vervaldatum IS NULL OR t.alg_terreinsector_vervaldatum > TRUNC(lbegin))
ORDER BY id.ins_deel_upper)
WHERE aantal IS NULL;
END IF;
IF palg_gebter_key IS NULL OR (lparkeerkey IS NULL AND pclaimOptimistic)
THEN
-- Wat is een vrije parkeerplaats
SELECT MIN (res_deel_key) -- logischer maken?
@@ -307,12 +387,12 @@ CREATE OR REPLACE PACKAGE BODY bez AS
FROM (SELECT d.res_deel_key,
(SELECT MIN (rd.res_deel_key)
FROM res_v_aanwezigrsv_deel rd
WHERE d.res_deel_key = rd.res_deel_key
AND rd.res_rsv_deel_van BETWEEN TRUNC (lbegin) AND leinde - 1 / 1440 + lpreposttime
AND rd.res_rsv_deel_tot BETWEEN lbegin + 1 / 1440 - lpreposttime AND TRUNC (lbegin) + 1
AND rd.res_rsv_deel_van < leinde - 1 / 1440 + lpreposttime
AND rd.res_rsv_deel_tot > lbegin + 1 / 1440 - lpreposttime
AND d.res_discipline_key = bez_parkingdiscipline_key) aantal
WHERE d.res_deel_key = rd.res_deel_key
AND rd.res_rsv_deel_van BETWEEN TRUNC (lbegin) AND leinde - 1 / 1440 + lpreposttime
AND rd.res_rsv_deel_tot BETWEEN lbegin + 1 / 1440 - lpreposttime AND TRUNC (lbegin) + 1
AND rd.res_rsv_deel_van < leinde - 1 / 1440 + lpreposttime
AND rd.res_rsv_deel_tot > lbegin + 1 / 1440 - lpreposttime
AND d.res_discipline_key = bez_parkingdiscipline_key) aantal
FROM res_v_aanwezigdeel d,
ins_deel id,
alg_v_aanwezigterreinsector t,
@@ -359,72 +439,6 @@ CREATE OR REPLACE PACKAGE BODY bez AS
AND (t.alg_terreinsector_vervaldatum IS NULL OR t.alg_terreinsector_vervaldatum > TRUNC(lbegin))
ORDER BY id.ins_deel_upper)
WHERE aantal IS NULL;
ELSE
-- Wat is een vrije parkeerplaats
-- Er is een gebouwkey of terreinkey meegegeven. Hierbinnen moet de parkeerplaats gereserveerd worden.
SELECT MIN (res_deel_key) -- logischer maken?
INTO lparkeerkey
FROM (SELECT d.res_deel_key,
(SELECT MIN (rd.res_deel_key)
FROM res_v_aanwezigrsv_deel rd
WHERE d.res_deel_key = rd.res_deel_key
AND rd.res_rsv_deel_van BETWEEN TRUNC (lbegin) AND leinde - 1 / 1440 + lpreposttime
AND rd.res_rsv_deel_tot BETWEEN lbegin + 1 / 1440 - lpreposttime AND TRUNC (lbegin) + 1
AND rd.res_rsv_deel_van < leinde - 1 / 1440 + lpreposttime
AND rd.res_rsv_deel_tot > lbegin + 1 / 1440 - lpreposttime
AND d.res_discipline_key = bez_parkingdiscipline_key)
aantal
FROM res_v_aanwezigdeel d,
ins_deel id,
alg_v_allonroerendgoed og,
alg_v_aanwezigterreinsector t,
alg_locatie l
WHERE d.res_ins_deel_key = id.ins_deel_key
AND id.ins_alg_locatie_key = llocatiekey
AND d.res_discipline_key = bez_parkingdiscipline_key
AND id.ins_alg_ruimte_key = t.alg_terreinsector_key(+)
AND id.ins_alg_locatie_key = l.alg_locatie_key
AND (id.ins_alg_ruimte_key = og.alg_ruimte_key
OR id.ins_alg_ruimte_key = og.alg_terreinsector_key)
AND (og.alg_gebouw_key = palg_gebter_key -- De talbel alg_gebouw heeft geen referentie naar de afdelingen tabel (geen prs_afdeling_key kolom).
OR (og.alg_terreinsector_key = palg_gebter_key
AND og.alg_terreinsector_key IN
(SELECT alg_terreinsector_key
FROM alg_v_aanwezigterreinsector t2
WHERE (lautlevel < 0
OR (lautlevel = 9 AND t2.prs_afdeling_key IS NULL)
OR (lautlevel > 0
AND (t2.prs_afdeling_key IS NULL
OR t2.prs_afdeling_key IN
(SELECT prs_afdeling_key
FROM prs_v_afdeling_familie a
WHERE a.prs_afdeling_elder_key IN
(SELECT aa.prs_afdeling_elder_key
FROM prs_v_afdeling_familie aa
WHERE aa.prs_afdeling_key = (SELECT prs_afdeling_key
FROM prs_perslid
WHERE prs_perslid_key = TO_NUMBER(sys_context('USERENV', 'CLIENT_IDENTIFIER')))
AND aa.niveau = lautlevel))))
OR (lautlevel = 0
AND (t2.prs_afdeling_key IS NULL
OR t2.prs_afdeling_key IN
(SELECT a.prs_afdeling_key
FROM prs_v_afdeling a
WHERE a.prs_bedrijf_key = (SELECT a.prs_bedrijf_key
FROM prs_perslid p,
prs_afdeling a
WHERE p.prs_afdeling_key = a.prs_afdeling_key
AND p.prs_perslid_key = TO_NUMBER(sys_context('USERENV', 'CLIENT_IDENTIFIER'))))))))))
AND id.ins_alg_ruimte_type IN ('R', 'T')
-- Is de parkeerplaats reserveerbaar op de begindag. Meerdaagse parkeerplaatsen worden niet ondersteund.
-- (bits & (2^(dow-1))) = (2^(dow-1))
AND BITAND(d.res_deel_beschikbaar_bits, POWER(2, (fac.getweekdaynum(TRUNC(lbegin)) - 1))) =
POWER(2, (fac.getweekdaynum(TRUNC(lbegin)) - 1))
AND (d.res_deel_vervaldatum IS NULL OR d.res_deel_vervaldatum > lbegin)
AND (l.alg_locatie_vervaldatum IS NULL OR l.alg_locatie_vervaldatum > TRUNC(lbegin))
AND (t.alg_terreinsector_vervaldatum IS NULL OR t.alg_terreinsector_vervaldatum > TRUNC(lbegin))
ORDER BY id.ins_deel_upper)
WHERE aantal IS NULL;
END IF;
IF lparkeerkey IS NOT NULL