Files
Customer/onces/NYBU/NYBU#63678_1.sql
Suzan Wiegerinck 1613093302 NYBU#63678: Vermaaat | Facturatie, aanmaken tijdelijk factuurexport over 5 dagen
svn path=/Customer/; revision=48038
2020-09-07 09:09:15 +00:00

401 lines
16 KiB
SQL

--
-- $Id$
--
-- NYBU#63678: Vermaat | Facturatie
-- In verband met uitbraak Corona is er gedurende april en mei geen catering geleverd
-- Daarom moet eenmalig de factuurperiode 2 maanden overbruggen
--
DEFINE thisfile = 'nybu#63678.SQL'
DEFINE dbuser = '^NYBU'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
COLUMN fcltcusterr NEW_VALUE fcltcusterr NOPRINT;
WHENEVER SQLERROR CONTINUE;
SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL;
SPOOL &fcltlogfile
WHENEVER SQLERROR EXIT;
SELECT adm.checkscriptcust('&dbuser') AS fcltcusterr FROM DUAL;
WHENEVER SQLERROR CONTINUE;
PROMPT &fcltcusterr
SET DEFINE OFF
------ payload begin ------
CREATE OR REPLACE PROCEDURE nybu_select_res_cat_56d (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
CURSOR c (c_tot DATE)
IS
SELECT klant,
res_rsv_ruimte_van,
periode,
grootboek,
kostenplaats_key,
kostenplaats,
deb_nr,
proj_key,
proj,
btw,
prs_kostensoort_btw,
res_key,
res_volgnr,
referentie,
res_rsv_ruimte_key,
descr,
aantal,
omschrijving,
soort,
btw_code,
SUM (prijs_ex) prijs_ex,
SUM (prijs_inc) prijs_inc,
SUM (btw_laag) btw_laag,
SUM (btw_hoog) btw_hoog,
SUM (korting) korting,
SUM (inex) inex
FROM (SELECT k.prs_kostenplaats_omschrijving klant,
rr.res_rsv_ruimte_van,
TO_CHAR (rr.res_rsv_ruimte_van, 'YYYYMM') periode,
ks.prs_kostensoort_oms grootboek,
kg.prs_kostenplaatsgrp_key kostenplaats_key,
TRIM (SUBSTR (kg.prs_kostenplaatsgrp_oms, 1, 7))
kostenplaats,
k.prs_kostenplaats_nr deb_nr,
k.prs_kostenplaats_key proj_key,
k.prs_kostenplaats_nr proj,
CASE
WHEN btw.perc > 9
THEN
btw.perc
WHEN (btw.perc = 6 OR btw.perc = 9)
THEN
CASE
WHEN rra.res_rsv_artikel_levering <
TO_DATE ('1-1-2019', 'dd-mm-yyyy')
THEN
6
ELSE
9
END
ELSE
0
END
btw,
ks.prs_kostensoort_btw,
CASE
WHEN btw.perc > 9
THEN
btw.btw_code
WHEN (btw.perc = 6 OR btw.perc = 9)
THEN
CASE
WHEN rra.res_rsv_artikel_levering <
TO_DATE ('1-1-2019', 'dd-mm-yyyy')
THEN
'VL'
ELSE
btw.btw_code
END
ELSE
btw.btw_code
END
btw_code,
rr.res_reservering_key res_key,
rr.res_rsv_ruimte_volgnr res_volgnr,
NULL referentie,
rr.res_reservering_key
|| '/'
|| rr.res_rsv_ruimte_volgnr
reservering,
rr.res_rsv_ruimte_key,
rr.res_rsv_ruimte_omschrijving descr,
1 aantal,
NVL (
(SELECT r.res_ruimte_nr
FROM res_ruimte_opstelling ro, res_ruimte r
WHERE ro.res_ruimte_opstel_key =
rr.res_ruimte_opstel_key
AND r.res_ruimte_key = ro.res_ruimte_key), ---- NVL ipv coalesce aangepast nav Oracle bug #55835
(SELECT 'Kamer '
|| alg_ruimte_nr
|| ' ('
|| alg_ruimte_omschrijving
|| ')'
FROM alg_v_ruimte_gegevens rg
WHERE rg.alg_ruimte_key = rr.alg_ruimte_key))
omschrijving,
'catering' soort,
(rra.res_rsv_artikel_prijs
/ ( (CASE
WHEN btw.perc > 9
THEN
btw.perc
WHEN (btw.perc = 6 OR btw.perc = 9)
THEN
CASE
WHEN rra.res_rsv_artikel_levering <
TO_DATE ('1-1-2019',
'dd-mm-yyyy')
THEN
6
ELSE
9
END
ELSE
0
END)
+ 100))
* 100
prijs_ex,
rra.res_rsv_artikel_prijs prijs_inc,
DECODE (
btw.perc,
9,
rra.res_rsv_artikel_prijs
* (CASE
WHEN rra.res_rsv_artikel_levering <
TO_DATE ('1-1-2019', 'dd-mm-yyyy')
THEN
6
ELSE
9
END)
/ (100
+ (CASE
WHEN rra.res_rsv_artikel_levering <
TO_DATE ('1-1-2019', 'dd-mm-yyyy')
THEN
6
ELSE
9
END)),
0)
btw_laag,
DECODE (
btw.perc,
21,
rra.res_rsv_artikel_prijs
* btw.perc
/ (100 + btw.perc),
0)
btw_hoog,
0 korting,
0 inex
FROM res_rsv_ruimte rr,
prs_kostenplaats k,
prs_kostenplaatsgrp kg,
res_rsv_artikel rra,
res_artikel ra,
res_discipline di,
prs_kostensoort ks,
(SELECT fac.safe_to_number (fac_usrdata_upper) perc,
fac_usrdata_omschr btw_code
FROM fac_usrdata
WHERE fac_usrtab_key = 42
AND fac_usrdata_verwijder IS NULL) btw
WHERE COALESCE (k.prs_kostenplaats_extern, 0) = 0
AND kg.prs_kostenplaatsgrp_key =
k.prs_kostenplaatsgrp_key
AND rr.prs_kostenplaats_key = k.prs_kostenplaats_key
AND rr.res_rsv_ruimte_dirtlevel = 0
AND rr.res_rsv_ruimte_afgerond = 1
AND rr.res_rsv_ruimte_verwijder IS NULL
AND rra.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
AND rra.res_artikel_key = ra.res_artikel_key
AND ra.res_discipline_key = di.ins_discipline_key
AND ks.prs_kostensoort_key = di.prs_kostensoort_key
AND di.ins_discipline_key NOT IN (462, 581, 741) -- hotelkamers, inhuur voorzieningen, linnen
AND ra.res_artikel_btw = btw.perc
AND rra.res_rsv_artikel_prijs <> 0
AND rra.res_rsv_artikel_levering < c_tot
AND NOT EXISTS -- flag reservering bevat catering op externe kostenplaats is niet gezet.
(SELECT res_kenmerkwaarde_key
FROM res_kenmerkwaarde kw, res_kenmerk k
WHERE kw.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 321 -- Reservering bevat catering op externe kostenpaats.
AND kw.res_rsv_ruimte_key =
rr.res_rsv_ruimte_key
AND fac.safe_to_number (
kw.res_kenmerkreservering_waarde) =
1)
AND NOT EXISTS -- entry komt nog niet voor in de verkoopfactuurtabel
(SELECT fin_verkoopfactuur_key
FROM fin_verkoopfactuur vf
WHERE vf.fin_verkoopfactuur_xmlnode =
'reservering'
AND vf.fin_verkoopfactuur_refkey =
rr.res_rsv_ruimte_key
AND COALESCE (vf.fin_verkoopfactuur_c4,
'NOP') = 'catering'))
GROUP BY klant,
res_rsv_ruimte_van,
periode,
grootboek,
kostenplaats_key,
kostenplaats,
deb_nr,
proj_key,
proj,
btw,
prs_kostensoort_btw,
res_key,
res_volgnr,
referentie,
res_rsv_ruimte_key,
descr,
aantal,
omschrijving,
soort,
btw_code
ORDER BY res_rsv_ruimte_key, btw_code;
v_teller NUMBER;
v_rap_count NUMBER;
v_kenmerk_key_laatste NUMBER;
v_ruimte_key_prev NUMBER;
v_verkoopfactuurkop_key NUMBER;
v_tot DATE;
v_van DATE;
BEGIN
v_teller := 0;
v_rap_count := 0;
v_aanduiding := 'Init';
v_errormsg := 'Periode bepalen';
SELECT TRUNC (MAX (fin_verkoopfactuur_d2))
INTO v_van
FROM fin_verkoopfactuur
WHERE fin_verkoopfactuur_datum IS NOT NULL
AND fin_verkoopfactuur_c4 = 'catering';
-- We rekenen eenmalig met periodes van 2x4 weken. Dit door sluiting ivm Corona
v_tot := v_van + 56;
DELETE imp_log
WHERE imp_log_applicatie = p_applname;
-- verwijder regels die nog niet verwerkt zijn
DELETE fin_verkoopfactuurkop
WHERE fin_verkoopfactuurkop_key IN
(SELECT fin_verkoopfactuurkop_key
FROM fin_verkoopfactuur
WHERE fin_verkoopfactuur_datum IS NULL
AND fin_verkoopfactuur_c4 = 'catering');
DELETE fin_verkoopfactuur
WHERE fin_verkoopfactuur_datum IS NULL
AND fin_verkoopfactuur_c4 = 'catering';
v_ruimte_key_prev := -1;
FOR rec IN c (v_tot)
LOOP
IF rec.res_rsv_ruimte_key <> v_ruimte_key_prev
THEN
v_ruimte_key_prev := rec.res_rsv_ruimte_key;
INSERT INTO fin_verkoopfactuurkop (fin_verkoopfactuurkop_id)
VALUES (rec.res_key || '/' || rec.res_volgnr || '-c')
RETURNING fin_verkoopfactuurkop_key
INTO v_verkoopfactuurkop_key;
END IF;
INSERT INTO fin_verkoopfactuur (fin_verkoopfactuurkop_key,
fin_verkoopfactuur_id,
fin_verkoopfactuur_datum,
fin_verkoopfactuur_omschr,
fin_verkoopfactuur_xmlnode,
fin_verkoopfactuur_refkey,
prs_kostenplaats_nr,
prs_kostenplaats_omschrijving,
prs_kostenplaatsgrp_oms,
prs_kostensoort_oms,
prs_debiteur_naam,
fin_verkoopfactuur_bedrag,
fin_verkoopfactuur_btw,
fin_btwtabelwaarde_code,
fin_btwtabelwaarde_oms,
fin_btwtabelwaarde_perc,
fin_verkoopfactuur_maand,
fin_verkoopfactuur_n1,
fin_verkoopfactuur_n2,
fin_verkoopfactuur_c1,
fin_verkoopfactuur_c2,
fin_verkoopfactuur_c3,
fin_verkoopfactuur_c4,
fin_verkoopfactuur_d1,
fin_verkoopfactuur_d2)
VALUES (v_verkoopfactuurkop_key,
TO_CHAR (SYSDATE, 'YYYY-MM-DD'),
NULL,
rec.omschrijving,
'reservering',
rec.res_rsv_ruimte_key,
rec.proj,
rec.proj,
rec.kostenplaats,
rec.grootboek,
rec.deb_nr,
rec.prijs_ex,
rec.btw_hoog + rec.btw_laag,
rec.btw_code,
rec.btw_code,
rec.btw,
rec.periode,
rec.inex,
0, -- debet
rec.res_key || '/' || rec.res_volgnr,
rec.klant,
rec.referentie,
'catering',
rec.res_rsv_ruimte_van,
v_tot);
END LOOP;
fac.writelog (p_applname,
'S',
'Factuurregels gegenereerd',
'');
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.writelog (p_applname,
'E',
v_aanduiding || v_errormsg,
'Onbekende fout!');
COMMIT;
END nybu_select_res_cat_56d;
/
------ payload end ------
SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 1); END;
/
COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile