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

View File

@@ -13,7 +13,7 @@ CREATE OR REPLACE PACKAGE res AS
pmetbez NUMBER DEFAULT 1,
newreskey NUMBER DEFAULT NULL,
newvolgnr NUMBER DEFAULT NULL) RETURN NUMBER;
PROCEDURE res_sync_deelres (prsv_ruimte_key_from IN NUMBER, prsv_ruimte_key_to IN NUMBER, flags IN NUMBER, pres_copy_to_bez IN NUMBER);
PROCEDURE res_sync_deelres (prsv_ruimte_key_from IN NUMBER, prsv_ruimte_key_to IN NUMBER, flags IN NUMBER, pres_copy_to_bez IN NUMBER, puserkey IN NUMBER);
PROCEDURE set_catalogus_approve(prsv_ruimte_key IN NUMBER, puserkey IN NUMBER);
PROCEDURE send_need_approval_noti (prsv_ruimte_key IN NUMBER, puserkey IN NUMBER);
PROCEDURE set_ruimte_dirty (prsv_ruimte_key IN NUMBER);
@@ -26,7 +26,7 @@ CREATE OR REPLACE PACKAGE res AS
PROCEDURE set_delen_clean (pdeel_key IN NUMBER, checkdate_van IN DATE, checkdate_tot IN DATE);
PROCEDURE follow_artikel (prsv_ruimte_key IN NUMBER, oldvan IN DATE, oldtot IN DATE, check_scope IN NUMBER DEFAULT 1);
PROCEDURE follow_deel (prsv_ruimte_key IN NUMBER, oldvan IN DATE, oldtot IN DATE);
PROCEDURE follow_afspraak (prsv_ruimte_key IN NUMBER, pres_copy_to_bez IN NUMBER);
PROCEDURE follow_afspraak (prsv_ruimte_key IN NUMBER, pres_copy_to_bez IN NUMBER, puserkey IN NUMBER);
FUNCTION res_deel_in_scope (pres_deel_key IN NUMBER, pres_rsv_ruimte_key IN NUMBER) RETURN BOOLEAN;
FUNCTION res_artikel_in_scope (pres_rsv_artikel_key IN NUMBER) RETURN BOOLEAN;
FUNCTION getresruimteprijs (pres_ruimte_key IN NUMBER, pvan IN DATE DEFAULT SYSDATE, ptot IN DATE DEFAULT SYSDATE, pextern IN NUMBER DEFAULT 0) RETURN NUMBER;
@@ -155,13 +155,13 @@ AS
WHERE res_rsv_ruimte_key = prsv_ruimte_key;
-- Now make the copy have the same childeren as the original
-- (all main data is already uptodate)
res.res_sync_deelres (prsv_ruimte_key, nextkey, 128 + 256 + pmetbez*512 + 1024, 0);
res.res_sync_deelres (prsv_ruimte_key, nextkey, 128 + 256 + pmetbez*512 + 1024, 0, puserkey);
-- Het hekje voorkomt individuele notificaties
fac.trackaction ('#RESNEW', nextkey, puserkey, NULL, NULL);
RETURN nextkey;
END;
PROCEDURE res_sync_deelres (prsv_ruimte_key_from IN NUMBER, prsv_ruimte_key_to IN NUMBER, flags IN NUMBER, pres_copy_to_bez IN NUMBER)
PROCEDURE res_sync_deelres (prsv_ruimte_key_from IN NUMBER, prsv_ruimte_key_to IN NUMBER, flags IN NUMBER, pres_copy_to_bez IN NUMBER, puserkey IN NUMBER)
AS
--flags (0-131071)
-- 0 Niks
@@ -255,7 +255,7 @@ AS
res.set_ruimtes_clean(rsv_to.res_rsv_ruimte_van);
res.follow_deel(prsv_ruimte_key_to, rsv_to.res_rsv_ruimte_van, rsv_to.res_rsv_ruimte_tot);
res.follow_artikel(prsv_ruimte_key_to, rsv_to.res_rsv_ruimte_van, rsv_to.res_rsv_ruimte_tot);
res.follow_afspraak(prsv_ruimte_key_to, 0); -- Opmerking en flex eventueel aan het eind aanpassen. Hier nog niet.
res.follow_afspraak(prsv_ruimte_key_to, 0, puserkey); -- Opmerking en flex eventueel aan het eind aanpassen. Hier nog niet.
END IF;
-- 8 Aantal personen
IF BITAND (flags, 8) = 8
@@ -514,7 +514,7 @@ AS
-- Opmerking en/of Flexkenmerken (2 en/of 1024) aanpassen als de setting "res_copy_to_bez" dit aangeeft
IF (BITAND (flags, 2) = 2 OR BITAND (flags, 1024) = 1024) AND BITAND(pres_copy_to_bez, 4) = 4
THEN
res.follow_afspraak(prsv_ruimte_key_to, pres_copy_to_bez); -- Opmerking en/of flexkenmerken van de afspraak aanpassen.
res.follow_afspraak(prsv_ruimte_key_to, pres_copy_to_bez, puserkey); -- Opmerking en/of flexkenmerken van de afspraak aanpassen.
END IF;
-- and verify the validity
res.set_ruimte_dirty (prsv_ruimte_key_to);
@@ -1275,7 +1275,7 @@ AS
-- Werkt de onderliggende afspraak bij na wijziging van een deelreservering
-- Dit gaat maar om een deel van de gegevens
PROCEDURE follow_afspraak (prsv_ruimte_key IN NUMBER, pres_copy_to_bez IN NUMBER)
PROCEDURE follow_afspraak (prsv_ruimte_key IN NUMBER, pres_copy_to_bez IN NUMBER, puserkey IN NUMBER)
AS
afspraak_key bez_afspraak.bez_afspraak_key%TYPE;
newvan res_rsv_ruimte.res_rsv_ruimte_van%TYPE;
@@ -1452,9 +1452,9 @@ AS
DELETE FROM res_rsv_deel WHERE bez_bezoekers_key = rpark.bez_bezoekers_key;
IF oldloc <> locatiekey
THEN
bez.claim_parking(rpark.bez_bezoekers_key, null); -- opnieuw claimen
bez.claim_parking(rpark.bez_bezoekers_key, puserkey, null); -- opnieuw claimen
ELSE -- Tijd is gewijzigd, locatie niet
bez.claim_parking(rpark.bez_bezoekers_key, rpark.gebterkey); -- opnieuw claimen in/op hetzelfde gebouw/terrein
bez.claim_parking(rpark.bez_bezoekers_key, puserkey, rpark.gebterkey); -- opnieuw claimen in/op hetzelfde gebouw/terrein
END IF;
END LOOP;
END IF;