FMHN#71112: Foutmelding in App bij aanvinken parkeerplaats.

svn path=/Database/trunk/; revision=55226
This commit is contained in:
Maykel Geerdink
2022-03-07 16:48:53 +00:00
parent a3df1ca03f
commit 2e8ba9965a
2 changed files with 141 additions and 72 deletions

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, puserkey IN NUMBER, palg_gebter_key IN NUMBER);
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,7 @@ CREATE OR REPLACE PACKAGE BODY bez AS
IF (hasparking > 0)
THEN
claim_parking (newbezoekerskey, null);
claim_parking (newbezoekerskey, puserkey, null);
-- Eventueel: controleren of de nieuwe nu ook een P heeft,
-- en zo niet dat dan tracken; goed doordenken!
END IF;
@@ -203,7 +203,7 @@ CREATE OR REPLACE PACKAGE BODY bez AS
END IF;
END;
PROCEDURE claim_parking (pbez_bezoekers_key IN NUMBER, palg_gebter_key IN NUMBER)
PROCEDURE claim_parking (pbez_bezoekers_key IN NUMBER, puserkey IN NUMBER, palg_gebter_key IN NUMBER)
AS
lafspraakkey bez_afspraak.bez_afspraak_key%TYPE;
ldeelreskey res_rsv_ruimte.res_rsv_ruimte_key%TYPE;
@@ -215,6 +215,7 @@ CREATE OR REPLACE PACKAGE BODY bez AS
lparkeerkey res_deel.res_deel_key%TYPE;
bez_parkingdiscipline_key NUMBER;
lpreposttime NUMBER(5,4); -- we gaan nog delen door 24, res_disc_params.res_disc_params_preposttime%TYPE is dan te klein;
lautlevel fac_v_webgebruiker.fac_gebruiker_prs_level_write%TYPE;
BEGIN
-- Claim een (nieuwe) parkeerplaats voor de gegeven bezoeker
-- Reserveer voor de tijden van de bijbehorende afspraak cq. res_rsv_ruimte
@@ -287,75 +288,143 @@ CREATE OR REPLACE PACKAGE BODY bez AS
FROM res_disc_params rdp
WHERE rdp.res_ins_discipline_key = bez_parkingdiscipline_key;
SELECT w.fac_gebruiker_prs_level_write
INTO lautlevel
FROM fac_v_webgebruiker w,
fac_functie f
WHERE w.fac_functie_key = f.fac_functie_key
AND w.prs_perslid_key = puserkey
AND f.fac_functie_code = 'WEB_BEZPAF';
-- 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
THEN
-- Wat is een vrije parkeerplaats
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_aanwezigterreinsector t
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(+)
-- outer join mag hier niet en dit filter is niet nodig? AND id.ins_alg_ruimte_type = 'T'(+)
AND t.prs_afdeling_key IS NULL -- Alleen 'gewone' parkeerplaatsen
-- 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)
ORDER BY id.ins_deel_upper)
WHERE aantal IS NULL;
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_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
-- outer join mag hier niet en dit filter is niet nodig? AND id.ins_alg_ruimte_type = 'T'(+)
AND t.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 = puserkey)
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 = puserkey))))))
-- 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;
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
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 = 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 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)
ORDER BY id.ins_deel_upper)
WHERE aantal IS NULL;
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 = puserkey)
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 = puserkey))))))))
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