Files
Database/BEZ/BEZ_PAC.SRC
Maykel Geerdink a600aa27f6 FMHN#69958: Bij het kopiëren van bezoekers wordt de parkeerplaats ook overgenomen.
svn path=/Database/trunk/; revision=55311
2022-03-16 14:50:47 +00:00

576 lines
27 KiB
Plaintext

#ifdef BEZ // 03-11-2000 PF
/*
* $Revision$
* $Id$
*
*/
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);
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 ;
PROCEDURE remove (p_afspraak_key IN NUMBER);
END bez;
/
CREATE OR REPLACE PACKAGE BODY bez AS
PROCEDURE copy_afspraak (pkey IN NUMBER, newdate IN DATE, puserkey IN NUMBER, prsvkey_to IN NUMBER)
AS
newafspraakkey bez_afspraak.bez_afspraak_key%TYPE;
BEGIN
copy_afspraak (pkey, newdate, puserkey, prsvkey_to, newafspraakkey);
END;
-- Variant waarbij je newafspraakkey terug krijgt
PROCEDURE copy_afspraak (pkey IN NUMBER, newdate IN DATE, puserkey IN NUMBER, prsvkey_to IN NUMBER, newafspraakkey OUT NUMBER)
AS
newbezoekerskey bez_bezoekers.bez_bezoekers_key%TYPE;
hasparking NUMBER;
nieuwvan DATE;
nieuwtot DATE;
alg_gebter_key ins_deel.ins_alg_ruimte_key%TYPE;
CURSOR bezoekers
IS
SELECT bez_bezoekers_key,
bez_afspraak_naam,
bez_afspraak_bedrijf,
bez_bezoekers_opmerking,
bez_bezoekers_telefoon,
bez_bezoekers_email,
bez_bezoekers_kenteken,
prs_contactpersoon_key,
prs_perslid_key
FROM bez_bezoekers
WHERE bez_afspraak_key = pkey;
BEGIN
-- Als prsvkey_to niet null is, dan is het een afspraak bij een res_rsv_ruimte
-- anders gewoon een losse afspraak. In beide gevallen worden de gegevens van de
-- afspraak gebruikt trouwens, die moeten consistent zijn met die reservering
-- Gaat er van uit dat er nog geen to-afspraakrecord is.
IF newdate IS NOT NULL
THEN
SELECT newdate + (bez_afspraak_datum - TRUNC (bez_afspraak_datum)),
newdate + (bez_afspraak_eind - TRUNC (bez_afspraak_eind))
INTO nieuwvan, nieuwtot
FROM bez_afspraak a
WHERE a.bez_afspraak_key = pkey;
ELSE
SELECT res_rsv_ruimte_van, res_rsv_ruimte_tot
INTO nieuwvan, nieuwtot
FROM res_rsv_ruimte r
WHERE r.res_rsv_ruimte_key = prsvkey_to;
END IF;
SELECT bez_s_bez_afspraak_key.NEXTVAL INTO newafspraakkey FROM DUAL;
INSERT INTO bez_afspraak (bez_afspraak_key,
prs_perslid_key,
bez_afspraak_host_key,
bez_afspraak_contact_key,
bez_afspraak_gastheer,
bez_afspraak_telefoonnr,
bez_afspraak_datum, bez_actie_key,
alg_locatie_key, res_rsv_ruimte_key,
alg_onrgoed_keys, bez_afspraak_ruimte,
bez_afspraak_opmerking, bez_afspraak_eind
)
SELECT newafspraakkey,
puserkey,
a.bez_afspraak_host_key,
a.bez_afspraak_contact_key,
a.bez_afspraak_gastheer,
a.bez_afspraak_telefoonnr,
nieuwvan,
a.bez_actie_key,
a.alg_locatie_key,
prsvkey_to,
a.alg_onrgoed_keys,
a.bez_afspraak_ruimte,
a.bez_afspraak_opmerking,
nieuwtot
FROM bez_afspraak a
WHERE a.bez_afspraak_key = pkey;
-- Er zijn geen flexkenmerken in het spel voor afspraak
FOR b IN bezoekers
LOOP
SELECT bez_s_bez_bezoekers_key.NEXTVAL INTO newbezoekerskey FROM DUAL;
INSERT INTO bez_bezoekers (
bez_bezoekers_key,
bez_afspraak_key,
bez_afspraak_naam,
bez_afspraak_bedrijf,
bez_bezoekers_opmerking,
bez_bezoekers_telefoon,
bez_bezoekers_email,
bez_bezoekers_kenteken,
prs_contactpersoon_key,
prs_perslid_key
)
VALUES (
newbezoekerskey,
newafspraakkey,
b.bez_afspraak_naam,
b.bez_afspraak_bedrijf,
b.bez_bezoekers_opmerking,
b.bez_bezoekers_telefoon,
b.bez_bezoekers_email,
b.bez_bezoekers_kenteken,
b.prs_contactpersoon_key,
b.prs_perslid_key
);
-- Als de bron een P had, dan de bestemming ook
hasparking := bez.hasparking (b.bez_bezoekers_key);
IF (hasparking > 0)
THEN
-- 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.
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);
hasparking := bez.hasparking (newbezoekerskey);
IF hasparking = 0
THEN
-- dan maar de oude methode: overal zoeken
claim_parking (newbezoekerskey, null);
END IF;
-- Eventueel: controleren of de nieuwe nu ook een P heeft,
-- en zo niet dat dan tracken; goed doordenken!
END IF;
-- Kopieer de flexkenmerken van de bezoekers
-- Do not copy backoffice characteristics (> 900)
INSERT INTO bez_kenmerkwaarde
( bez_bezoekers_key,
bez_kenmerk_key,
bez_kenmerkwaarde_waarde
)
SELECT newbezoekerskey,
w.bez_kenmerk_key,
w.bez_kenmerkwaarde_waarde
FROM bez_kenmerkwaarde w,
bez_kenmerk k
WHERE w.bez_kenmerk_key = k.bez_kenmerk_key
AND w.bez_bezoekers_key = b.bez_bezoekers_key
AND k.bez_kenmerk_volgnr <= 900
AND w.bez_kenmerkwaarde_verwijder IS NULL;
END LOOP;
fac.trackaction ('BEZMUT', newafspraakkey, puserkey, NULL, NULL);
END;
-- Registreer precies hetzelfde bezoek als bij -van bij -naar
PROCEDURE sync_resafspraak (presvruimtevan IN NUMBER, presvruimtenaar IN NUMBER)
AS
afspraak_key_from bez_afspraak.bez_afspraak_key%TYPE := -1;
afspraak_key_to bez_afspraak.bez_afspraak_key%TYPE := -1;
BEGIN
BEGIN
SELECT bez_afspraak_key
INTO afspraak_key_from
FROM bez_afspraak
WHERE res_rsv_ruimte_key = presvruimtevan;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
END;
BEGIN
SELECT bez_afspraak_key
INTO afspraak_key_to
FROM bez_afspraak
WHERE res_rsv_ruimte_key = presvruimtenaar;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
END;
IF afspraak_key_to = -1 AND afspraak_key_from = -1
THEN
RETURN;
END IF;
IF afspraak_key_to <> -1
THEN
-- Bestaande verwijderen
DELETE FROM bez_afspraak
WHERE bez_afspraak_key = afspraak_key_to;
END IF;
IF afspraak_key_from <> -1
THEN
bez.copy_afspraak (afspraak_key_from, NULL, NULL, presvruimtenaar);
END IF;
END;
PROCEDURE claim_parking (pbez_bezoekers_key IN NUMBER, palg_gebter_key IN NUMBER)
AS
lafspraakkey bez_afspraak.bez_afspraak_key%TYPE;
ldeelreskey res_rsv_ruimte.res_rsv_ruimte_key%TYPE;
llocatiekey bez_afspraak.alg_locatie_key%TYPE;
lbegin bez_afspraak.bez_afspraak_datum%TYPE;
leinde bez_afspraak.bez_afspraak_eind%TYPE;
topstel res_rsv_ruimte.res_ruimte_opstel_key%TYPE;
talgruimte res_rsv_ruimte.alg_ruimte_key%TYPE;
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
-- een parkeerplaats binnen de locatie van die afspraak/reservering.
-- We moeten dan wel de parkeerplaats discipline weten, die moet dan dus in de DB worden
-- geconfigureerd
-- ?Tracking bij afspraak toevoegen als wel/niet gelukt? (parkeerplts voor A niet/wel gereserveerd)
-- Pas op: bezoekers worden regelmatig vervangen (delete+insert ipv update)
-- De claim kan falen als er niets vrij is! Dat merkt niemand
-- De aanroeper kan dit controleren met bez.hasparking()
-- Een bezoeker hoort bij een afspraak, die op zichzelf staat of bij een deelreservering hoort
SELECT a.bez_afspraak_key,
a.res_rsv_ruimte_key,
a.alg_locatie_key,
a.bez_afspraak_datum,
a.bez_afspraak_eind
INTO lafspraakkey,
ldeelreskey,
llocatiekey,
lbegin,
leinde
FROM bez_bezoekers b, bez_afspraak a
WHERE a.bez_afspraak_key = b.bez_afspraak_key AND bez_bezoekers_key = pbez_bezoekers_key;
IF ldeelreskey IS NOT NULL
THEN
-- Zoek de noodzakelijke gegevens op
SELECT r.res_ruimte_opstel_key, r.alg_ruimte_key
INTO topstel, talgruimte
FROM res_rsv_ruimte r
WHERE res_rsv_ruimte_key = ldeelreskey;
-- Begin- en eindtijd zouden al bekend moeten zijn via afspraak (zal eigenlijk altijd gevuld zijn)
-- Zo niet, dan nog ophalen uit rsv_ruimte
IF lbegin IS NULL OR leinde IS NULL
THEN
SELECT r.res_rsv_ruimte_van, r.res_rsv_ruimte_tot
INTO lbegin, leinde
FROM res_rsv_ruimte r
WHERE res_rsv_ruimte_key = ldeelreskey;
END IF;
IF talgruimte IS NOT NULL
THEN
SELECT g.alg_locatie_key
INTO llocatiekey
FROM alg_ruimte r, alg_verdieping v, alg_gebouw g
WHERE r.alg_verdieping_key = v.alg_verdieping_key
AND v.alg_gebouw_key = g.alg_gebouw_key
AND r.alg_ruimte_key = talgruimte;
ELSE
SELECT MIN (g.alg_locatie_key) -- tegen koppelzalen
INTO llocatiekey
FROM res_ruimte_opstelling ro, res_alg_ruimte rag, alg_ruimte r, alg_verdieping v, alg_gebouw g
WHERE ro.res_ruimte_key = rag.res_ruimte_key
AND rag.alg_ruimte_key = r.alg_ruimte_key
AND res_alg_ruimte_verwijder IS NULL
AND r.alg_verdieping_key = v.alg_verdieping_key
AND v.alg_gebouw_key = g.alg_gebouw_key
AND ro.res_ruimte_opstel_key = topstel;
END IF;
END IF;
-- ik weet genoeg, behalve: de discipline_key van parkeerplaatsen en de pre/post tijden van deze discipline!
bez_parkingdiscipline_key := fac.safe_to_number (fac.getsetting ('vis_parking_key'));
SELECT COALESCE(rdp.res_disc_params_preposttime, 0) / 24
INTO lpreposttime
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 = TO_NUMBER(sys_context('USERENV', 'CLIENT_IDENTIFIER'))
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,
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 = 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'))))))))
-- 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,
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
THEN
INSERT INTO res_rsv_deel (
res_deel_key,
res_rsv_deel_aantal,
res_status_bo_key,
res_rsv_deel_van,
res_rsv_deel_tot,
bez_bezoekers_key,
res_rsv_ruimte_key
)
VALUES (lparkeerkey, 1, 2, lbegin, leinde, pbez_bezoekers_key, ldeelreskey
);
ELSE
-- Geen vrije parkeerplaats beschikbaar
NULL;
END IF;
END;
FUNCTION hasparking (pbez_bezoekers_key IN NUMBER)
RETURN NUMBER
IS
aantal NUMBER;
BEGIN
SELECT COUNT ( * )
INTO aantal
FROM res_rsv_deel
WHERE bez_bezoekers_key = pbez_bezoekers_key;
RETURN aantal;
END;
FUNCTION afssprintf (ps IN VARCHAR2, p_afspraak_key IN NUMBER) RETURN VARCHAR2 IS
lafspraak_datum bez_afspraak.bez_afspraak_datum%TYPE;
lbezoek VARCHAR2 (200);
s varchar2 (2048 CHAR);
BEGIN
s := ps;
-- We support substitution of placeholders in the messages
-- ##KEY## afspraaknummer
-- ##NAAM## volledige naam van de (eerst opgeslagen) bezoeker
IF INSTR (s, '#') > 0
THEN
SELECT bez_afspraak_datum
INTO lafspraak_datum
FROM bez_afspraak
WHERE bez_afspraak_key = p_afspraak_key;
SELECT MIN(bez_afspraak_naam) || DECODE (COUNT (*), 1, '', '...')
INTO lbezoek
FROM bez_bezoekers
WHERE bez_afspraak_key = p_afspraak_key
GROUP BY bez_afspraak_key;
s :=
REPLACE (REPLACE (REPLACE (s, '##NAAM##', lbezoek), '##KEY##', TO_CHAR (p_afspraak_key)),
'##DATUM##',
TO_CHAR (lafspraak_datum, 'DD-MM-YY HH24:MI')
);
END IF;
RETURN s;
END;
FUNCTION bzksprintf (ps IN VARCHAR2 , p_bezoekers_key IN NUMBER) RETURN VARCHAR2 IS
lafspraak_datum bez_afspraak.bez_afspraak_datum%TYPE;
lafspraak_key bez_afspraak.bez_afspraak_key%TYPE;
lbezoek bez_bezoekers.bez_afspraak_naam%TYPE;
lbedrijf bez_bezoekers.bez_afspraak_bedrijf%TYPE;
lbadgenr bez_bezoekers.bez_bezoekers_pasnr%TYPE;
s varchar2 (2048 CHAR);
BEGIN
s := ps;
-- We support substitution of placeholders in the messages
-- ##KEY## afspraaknummer
-- ##NAAM## volledige naam van de bezoeker
-- ##BEDRIJF## naam van het bedrijf van de bezoeker
-- ##PASNR## pasnr (badgenr)
IF INSTR (s, '#') > 0
THEN
SELECT a.bez_afspraak_datum, b.bez_afspraak_key, b.bez_afspraak_naam, b.bez_afspraak_bedrijf, b.bez_bezoekers_pasnr
INTO lafspraak_datum, lafspraak_key, lbezoek, lbedrijf, lbadgenr
FROM bez_afspraak a, bez_bezoekers b
WHERE a.bez_afspraak_key = b.bez_afspraak_key
AND bez_bezoekers_key = p_bezoekers_key;
s :=
REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (s, '##NAAM##', lbezoek), '##KEY##', TO_CHAR (lafspraak_key)),
'##DATUM##',
TO_CHAR (lafspraak_datum, 'DD-MM-YY HH24:MI')
), '##BEDRIJF##', lbedrijf), '##PASNR##', lbadgenr);
END IF;
RETURN s;
END;
PROCEDURE remove(p_afspraak_key IN NUMBER)
IS
CURSOR c_bezoekers IS
SELECT bez_bezoekers_key
FROM bez_bezoekers
WHERE bez_afspraak_key = p_afspraak_key;
BEGIN
FOR ref_bezoekers IN c_bezoekers
LOOP
DELETE FROM bez_bezoekers
WHERE bez_bezoekers_key = ref_bezoekers.bez_bezoekers_key;
-- Van de volgende tabel worden de records die naar deze bez_bezoekers_key
-- verwijzen met ON DELETE CASCADE verwijderd;
-- bez_kenmerkwaarde
-- In de volgende tabel wordt bez_bezoekers_key leeg gemaakt bij het verwijderen van bez_bezoekers:
-- res_rsv_deel
fac.remove_tracking('bezoeker', ref_bezoekers.bez_bezoekers_key);
END LOOP;
DELETE FROM bez_afspraak
WHERE bez_afspraak_key = p_afspraak_key;
fac.remove_tracking('afspraak', p_afspraak_key);
END;
END bez;
/
REGISTERRUN('$Id$')
#endif // BEZ