KMMO#69267 -- Implementatie Evenementen en Rondleidingen (Facturatie)

svn path=/Customer/trunk/; revision=55706
This commit is contained in:
Arthur Egberink
2022-04-26 16:52:51 +00:00
parent 4b7004bc39
commit a225248f8f

View File

@@ -23,6 +23,94 @@ SET DEFINE OFF
------ payload begin ------
CREATE OR REPLACE PACKAGE KMMO AS
-- PACKAGES voor de KMMO specifieke rapportages
TYPE t_cursor IS REF CURSOR;
PROCEDURE rap_bezetting_rondleider (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
END;
/
CREATE OR REPLACE PACKAGE BODY KMMO AS
-- PACKAGES voor de KMMO specifieke rapportages
PROCEDURE rap_bezetting_rondleider (user_key IN NUMBER,
p_datum_van IN VARCHAR2, -- Let wel: formaat '13-05-2005'
p_datum_tot IN VARCHAR2,
p_cursor OUT t_cursor
)
AS
v_datum_van DATE;
BEGIN
v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
OPEN p_cursor FOR
SELECT p.prs_perslid_naam naam,
prs_perslid_voornaam voornaam,
prs_srtperslid_omschrijving rondleider_taal,
(SELECT LISTAGG (
TO_CHAR (rrr.res_rsv_ruimte_van, 'hh24:mi')
|| '-'
|| TO_CHAR (rrr.res_rsv_ruimte_tot, 'hh24:mi')
|| ' '
|| ud.fac_usrdata_code,
CHR (10))
WITHIN GROUP (ORDER BY rrr.res_rsv_ruimte_van) AS beschikbaarheid
FROM mld_opdr o,
mld_melding m,
res_rsv_ruimte rrr,
res_kenmerkwaarde kw,
fac_usrdata ud
WHERE o.mld_uitvoerende_keys = p.prs_perslid_key
AND o.mld_melding_key = m.mld_melding_key
AND o.mld_statusopdr_key NOT IN (1,2) -- Afgewezen/Niet akkoord
AND m.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND TRUNC (rrr.res_rsv_ruimte_van) = v_datum_van
AND kw.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND kw.res_kenmerk_key = 1 -- taal rondleiding
AND fac.safe_to_number (kw.res_kenmerkreservering_waarde) =
ud.fac_usrdata_key) bezetting,
(SELECT COUNT(*)
FROM mld_opdr o,
mld_melding m,
res_rsv_ruimte rrr
WHERE o.mld_uitvoerende_keys = p.prs_perslid_key
AND o.mld_melding_key = m.mld_melding_key
AND o.mld_statusopdr_key NOT IN (1,2) -- Afgewezen/Niet akkoord
AND m.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND ABS(TRUNC (rrr.res_rsv_ruimte_van) - v_datum_van) < 4) bezetting_week
FROM prs_perslid p, prs_srtperslid sp
WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key
AND prs_srtperslid_omschrijving LIKE 'Rondleider %'
AND EXISTS
(SELECT 1
FROM prs_kenmerklink kl
WHERE kl.prs_kenmerk_key =
DECODE (TO_CHAR (v_datum_van, 'D'),
1, 1006,
2, 1000,
3, 1001,
4, 1002,
5, 1003,
6, 1004,
7, 1005)
AND kl.prs_link_key = p.prs_perslid_key)
AND NOT EXISTS
(SELECT 1
FROM mld_melding m
WHERE m.prs_perslid_key = p.prs_perslid_key
AND TO_DATE (
FLX.getflex ('MLD', 421, m.mld_melding_key),
'dd-mm-yyyy') <=
v_datum_van
AND TO_DATE (
FLX.getflex ('MLD', 423, m.mld_melding_key),
'dd-mm-yyyy') >=
v_datum_van)
ORDER BY sp.prs_srtperslid_omschrijving;
END rap_bezetting_rondleider;
END;
/
-- Dagelijkse taak
CREATE OR REPLACE PROCEDURE kmmo_daily
AS
@@ -892,6 +980,294 @@ EXCEPTION
END;
/
--
-- Rondleidingen
--
CREATE OR REPLACE VIEW kmmo_v_rap_rondl_planning
AS
SELECT rrr.res_rsv_ruimte_key,
'R' || rrr.res_reservering_key || '/' || res_rsv_ruimte_volgnr
reservering,
FAC.gettrackingdate ('RESNEW', rrr.res_rsv_ruimte_key)
res_aanmaak,
res_rsv_ruimte_van,
(SELECT fac_usrdata_code
FROM fac_usrdata ud, res_kenmerkwaarde kw
WHERE kw.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND kw.res_kenmerk_key = 1 -- taal rondleiding
AND fac.safe_to_number (kw.res_kenmerkreservering_waarde) =
ud.fac_usrdata_key)
taal,
DECODE (res_status_fo_key,
1, 'Aanvraag',
2, 'Bevestigd',
3, 'Geblokkeerd',
4, 'Vervallen')
res_status,
'Ron' || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr opdracht,
p.prs_perslid_naam_full,
so.mld_statusopdr_omschrijving
FROM mld_opdr o,
mld_melding m,
res_rsv_ruimte rrr,
prs_v_perslid_fullnames p,
mld_statusopdr so
WHERE o.mld_uitvoerende_keys = p.prs_perslid_key
AND o.mld_melding_key = m.mld_melding_key
AND m.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND o.mld_statusopdr_key = so.mld_statusopdr_key;
CREATE OR REPLACE VIEW kmmo_v_rondleidingen_kijk
AS
SELECT res_rsv_ruimte_van,
res_rsv_ruimte_tot,
res_reservering_key || '/' || res_rsv_ruimte_volgnr res_rsv_ruimte_nr,
rrr.res_rsv_ruimte_omschrijving,
rrr.res_rsv_ruimte_opmerking,
pf.prs_perslid_naam_full,
COALESCE(so.mld_statusopdr_omschrijving, 'Geaccepteerd') mld_statusopdr_omschrijving,
LISTAGG (rd.res_deel_omschrijving, CHR (10))
WITHIN GROUP (ORDER BY rd.res_deel_omschrijving) AS voorzieningen,
ra.res_activiteit_omschrijving,
FLX.getflex ('RES', 82, rrr.res_rsv_ruimte_key) naam
FROM res_rsv_ruimte rrr,
res_activiteit ra,
mld_melding m,
mld_opdr o,
res_rsv_deel rrd,
res_deel rd,
mld_statusopdr so,
prs_v_perslid_fullnames pf,
(SELECT COALESCE (r.res_rsv_ruimte_key, a.res_rsv_ruimte_key) res_rsv_ruimte_key
FROM (SELECT res_rsv_ruimte_key
FROM res_rsv_ruimte rrr
WHERE res_activiteit_key = 30) r
FULL JOIN
(SELECT res_rsv_ruimte_key
FROM res_rsv_ruimte rrr
WHERE EXISTS
(SELECT 1
FROM res_rsv_deel rrd, res_deel rd
WHERE rrr.res_rsv_ruimte_key =
rrd.res_rsv_ruimte_key
AND rrd.res_deel_key = rd.res_deel_key
AND rd.res_discipline_key = 601 -- audiotours en fluistersets
)) a
ON r.res_rsv_ruimte_key = a.res_rsv_ruimte_key) my_rrr
WHERE my_rrr.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND rrr.res_rsv_ruimte_key = m.res_rsv_ruimte_key(+)
AND m.mld_melding_key = o.mld_melding_key(+)
AND rrr.res_rsv_ruimte_key = rrd.res_rsv_ruimte_key(+)
AND rrr.res_activiteit_key = ra.res_activiteit_key(+)
AND rrd.res_deel_key = rd.res_deel_key(+)
AND o.mld_uitvoerende_keys = pf.prs_perslid_key(+)
AND o.mld_statusopdr_key = so.mld_statusopdr_key(+)
AND rrr.res_rsv_ruimte_verwijder IS NULL
AND rrd.res_rsv_deel_verwijder IS NULL
GROUP BY rrr.res_rsv_ruimte_van,
rrr.res_rsv_ruimte_tot,
rrr.res_rsv_ruimte_key,
rrr.res_reservering_key,
rrr.res_rsv_ruimte_volgnr,
pf.prs_perslid_naam_full,
so.mld_statusopdr_omschrijving,
rrr.res_rsv_ruimte_omschrijving,
rrr.res_rsv_ruimte_opmerking,
ra.res_activiteit_omschrijving;
-- view om te zien welke reservering facturabel is. Dat betekent dat <20><>n van de rsv_ruimtes het kenmerk facturabel op 1 heeft staan.
CREATE OR REPLACE VIEW kmmo_v_res_facturabel
AS
SELECT rrr.res_reservering_key
FROM res_rsv_ruimte rrr, res_kenmerk rk
WHERE rrr.res_rsv_ruimte_verwijder IS NULL
AND rk.res_srtkenmerk_key = 101
AND rrr.res_activiteit_key = rk.res_activiteit_key
AND COALESCE (
flx.getflex ('RES',
rk.res_kenmerk_key,
rrr.res_rsv_ruimte_key),
'0') =
'1'
GROUP BY rrr.res_reservering_key;
-- View om te rapporteren welke factuur bevroren mag worden via de export.
CREATE OR REPLACE VIEW kmmo_v_rap_res_factuurstatus
AS
SELECT r.res_reservering_key,
r.res_rsv_ruimte_volgnr,
r.res_reservering_key || '/' || r.res_rsv_ruimte_volgnr res_nr,
r.type,
r.res_rsv_ruimte_van,
r.res_rsv_ruimte_omschrijving,
bo.res_status_bo_omschrijving,
bo.res_status_bo_key,
r.res_rsv_ruimte_key,
f.factuur_nummer,
f.export_datum
FROM (SELECT f.res_reservering_key,
rrr.res_rsv_ruimte_volgnr,
'R' type,
res_rsv_ruimte_van,
res_rsv_ruimte_omschrijving,
res_status_bo_key,
rrr.res_rsv_ruimte_key
FROM kmmo_v_res_facturabel f, res_rsv_ruimte rrr
WHERE res_rsv_ruimte_verwijder IS NULL
AND f.res_reservering_key = rrr.res_reservering_key
UNION ALL
SELECT f.res_reservering_key,
rrr.res_rsv_ruimte_volgnr,
'D' type,
res_rsv_ruimte_van,
COUNT (*) || ' * ' || res_deel_omschrijving,
MIN (rrd.res_status_bo_key),
rrr.res_rsv_ruimte_key
FROM kmmo_v_res_facturabel f,
res_rsv_ruimte rrr,
res_rsv_deel rrd,
res_deel rd
WHERE res_rsv_ruimte_verwijder IS NULL
AND f.res_reservering_key = rrr.res_reservering_key
AND rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND rrd.res_rsv_deel_verwijder IS NULL
AND rrd.res_deel_key = rd.res_deel_key
GROUP BY f.res_reservering_key,
rrr.res_rsv_ruimte_volgnr,
res_rsv_ruimte_van,
res_deel_omschrijving,
rrr.res_rsv_ruimte_key
UNION ALL
SELECT f.res_reservering_key,
rrr.res_rsv_ruimte_volgnr,
'A' type,
res_rsv_ruimte_van,
res_rsv_artikel_aantal || ' * ' || res_artikel_omschrijving,
rra.res_status_bo_key,
rrr.res_rsv_ruimte_key
FROM kmmo_v_res_facturabel f,
res_rsv_ruimte rrr,
res_rsv_artikel rra,
res_artikel ra
WHERE res_rsv_ruimte_verwijder IS NULL
AND f.res_reservering_key = rrr.res_reservering_key
AND rra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND rra.res_rsv_artikel_verwijder IS NULL
AND rra.res_artikel_key = ra.res_artikel_key) r,
res_status_bo bo,
(SELECT res_reservering_key, MAX(res_kenmerkreservering_waarde) factuur_nummer, MAX(res_kenmerkwaarde_aanmaak) export_datum
FROM res_kenmerkwaarde kw, res_kenmerk k, res_rsv_ruimte rrr
WHERE kw.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND kw.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 102 -- Factuur
GROUP BY res_reservering_key) f
WHERE r.res_status_bo_key = bo.res_status_bo_key
AND r.res_reservering_key = f.res_reservering_key(+);
-- factuur export. Tijdens de export wordt het factuurnummer bepaald. Dit nummer zit in de reeks xx-yyy. Hierbij is xx het jaar
-- waarop de factuur is aangemaakt en yyy is een volgnummer tussen de 700 en 899. In een nieuw jaar wordt weer bij 700 begonnen.
-- welke reservering is helemaal afgemeld (5). Er mogen dus geen items meer open staan.
CREATE OR REPLACE VIEW kmmo_v_export_res_facturen
(
result,
result_order
)
AS
SELECT res_nr, res_reservering_key * 1000 + res_rsv_ruimte_volgnr
FROM kmmo_v_rap_res_factuurstatus fs
WHERE NOT EXISTS
(SELECT 1
FROM kmmo_v_rap_res_factuurstatus fs2
WHERE fs.res_reservering_key = fs2.res_reservering_key
AND res_status_bo_key <> 5);
CREATE OR REPLACE PROCEDURE kmmo_export_res_facturen (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2)
AS
CURSOR c IS
SELECT DISTINCT res_rsv_ruimte_key, res_reservering_key, res_rsv_ruimte_volgnr
FROM kmmo_v_rap_res_factuurstatus fs
WHERE NOT EXISTS
(SELECT 1
FROM kmmo_v_rap_res_factuurstatus fs2
WHERE fs.res_reservering_key =
fs2.res_reservering_key
AND res_status_bo_key <> 5) -- Afgemeld
ORDER BY res_reservering_key, res_rsv_ruimte_volgnr;
v_factuurnr NUMBER;
v_kenmerk_key NUMBER;
v_reservering_key_prev NUMBER;
BEGIN
BEGIN
SELECT MAX (
fac.safe_to_number (
SUBSTR (res_kenmerkreservering_waarde, 4, 100)))
+ 1
INTO v_factuurnr
FROM res_kenmerk k, res_kenmerkwaarde kw
WHERE res_srtkenmerk_key = 102 -- Factuurnummer
AND k.res_kenmerk_key = kw.res_kenmerk_key
AND SUBSTR (res_kenmerkreservering_waarde, 1, 2) =
TO_CHAR (SYSDATE, 'YY');
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_factuurnr := 700;
END;
IF v_factuurnr IS NULL
THEN
v_factuurnr := 700;
END IF;
v_reservering_key_prev := -1;
FOR rec IN c
LOOP
BEGIN
IF rec.res_reservering_key <> v_reservering_key_prev
THEN
SELECT res_kenmerk_key
INTO v_kenmerk_key
FROM res_kenmerk k, res_rsv_ruimte rrr
WHERE k.res_srtkenmerk_key = 102 -- Factuurnummer
AND rrr.res_activiteit_key = k.res_activiteit_key
AND rrr.res_rsv_ruimte_key = rec.res_rsv_ruimte_key;
FLX.setflex ('RES',
v_kenmerk_key,
rec.res_rsv_ruimte_key,
TO_CHAR (SYSDATE, 'YY') || '-' || v_factuurnr);
v_reservering_key_prev := rec.res_reservering_key;
v_factuurnr := v_factuurnr + 1;
END IF;
UPDATE res_rsv_artikel
SET res_status_bo_key = 6 -- Verwerkt
WHERE res_rsv_ruimte_key = rec.res_rsv_ruimte_key
AND res_rsv_artikel_verwijder IS NULL;
UPDATE res_rsv_deel
SET res_status_bo_key = 6 -- Verwerkt
WHERE res_rsv_ruimte_key = rec.res_rsv_ruimte_key
AND res_rsv_deel_verwijder IS NULL;
UPDATE res_rsv_ruimte
SET res_status_bo_key = 6 -- Verwerkt
WHERE res_rsv_ruimte_key = rec.res_rsv_ruimte_key
AND res_rsv_ruimte_verwijder IS NULL;
END;
END LOOP;
END;
/
------ payload end ------
SET DEFINE OFF