211 lines
7.5 KiB
SQL
211 lines
7.5 KiB
SQL
-- Customer specific once-script
|
||
--
|
||
-- (c) 2016 Facilitor B.V.
|
||
--
|
||
-- Support: +31 53 4800700
|
||
SET ECHO ON
|
||
SPOOL xNYBU38040.lst
|
||
SET DEFINE OFF
|
||
|
||
CREATE OR REPLACE PROCEDURE nybu_select_huur_mutaties (
|
||
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);
|
||
|
||
-- Mutaties nieuw versus oud (waarbij nieuw het uitgangspunt is ivm kameromschrijving):
|
||
-- - oude bedrag != nieuwe bedrag
|
||
-- - oud bestaat niet in nieuw
|
||
-- - nieuw bestaat niet in oud
|
||
-- NYBU#29529: regels ook vergelijken op naam van huurder, ivm deb_nr 'salaris', dat voor
|
||
-- verschillende personen natuurlijk hetzelfde is (idem voor P-nummer, trouwens)
|
||
--NYBU#38040 Er moet ook rekening gehouden worden met meerdere versies van 1 contract
|
||
CURSOR c (
|
||
in_periode VARCHAR2)
|
||
IS
|
||
WITH nw AS (SELECT *
|
||
FROM nybu_huur_buffer
|
||
WHERE periode = in_periode),
|
||
oud
|
||
AS (SELECT a.*
|
||
FROM nybu_huur_archief a,
|
||
cnt_kenmerkcontract kc,
|
||
cnt_kenmerk k
|
||
WHERE kc.cnt_contract_key = a.cnt_contract_key
|
||
AND kc.cnt_kenmerkcontract_verwijder IS NULL
|
||
AND k.cnt_kenmerk_key = kc.cnt_kenmerk_key
|
||
AND k.cnt_srtkenmerk_key = 681
|
||
AND periode = in_periode
|
||
AND naar_coda IS NOT NULL
|
||
AND ismutatie = 0)
|
||
SELECT nw.*,
|
||
COALESCE (oud.bedrag, 0) bedrag_oud,
|
||
COALESCE (nw.bedrag, 0) bedrag_new
|
||
FROM nw
|
||
LEFT OUTER JOIN
|
||
oud
|
||
ON oud.cnt_contract_key = nw.cnt_contract_key --- Er moet ook naar de versie van het contract gekeken worden
|
||
AND oud.deb_nr = nw.deb_nr
|
||
AND oud.omschrijving = nw.omschrijving
|
||
AND oud.kamer = nw.kamer
|
||
AND COALESCE (oud.naam_full, 'apekool') =
|
||
COALESCE (nw.naam_full, 'apekool')
|
||
WHERE oud.bedrag IS NULL -- nieuw bestaat niet in oud
|
||
OR nw.bedrag != oud.bedrag -- nieuw bedrag != oud bedrag
|
||
UNION
|
||
SELECT oud.*,
|
||
COALESCE (oud.bedrag, 0) bedrag_oud,
|
||
COALESCE (nw.bedrag, 0) bedrag_new
|
||
FROM oud
|
||
LEFT OUTER JOIN
|
||
nw
|
||
ON oud.cnt_contract_key = nw.cnt_contract_key --- Er moet ook naar de versie van het contract gekeken worden
|
||
AND oud.deb_nr = nw.deb_nr
|
||
AND oud.omschrijving = nw.omschrijving
|
||
AND oud.kamer = nw.kamer
|
||
AND COALESCE (oud.naam_full, 'apekool') =
|
||
COALESCE (nw.naam_full, 'apekool')
|
||
WHERE nw.bedrag IS NULL -- oud bestaat niet in nieuw
|
||
;
|
||
|
||
v_run DATE;
|
||
v_periode VARCHAR (6);
|
||
v_periodeNaam VARCHAR2 (20);
|
||
v_next_period VARCHAR (6);
|
||
BEGIN
|
||
v_aanduiding := 'Init';
|
||
v_errormsg := 'Periode bepalen';
|
||
|
||
-- Deze export maakt correctieregels voor de huur van de laatst ge<67>xporteerde maand
|
||
-- TODO: afdwingen dat die periode niet te ver in het verleden ligt?
|
||
v_run := TO_DATE (p_applrun, 'YYYY-MM-DD HH24:MI:SS');
|
||
|
||
SELECT MAX (periode)
|
||
INTO v_periode
|
||
FROM nybu_huur_archief
|
||
WHERE isMutatie = 0;
|
||
|
||
v_periodeNaam := nybu.getPeriodeNaam (v_periode, 'EN');
|
||
|
||
-- Mutaties over periode n komen op factuur voor periode n+1
|
||
v_next_period :=
|
||
TO_CHAR (ADD_MONTHS (TO_DATE (v_periode, 'YYYYMM'), 1), 'YYYYMM');
|
||
|
||
DELETE imp_log
|
||
WHERE imp_log_applicatie = p_applname;
|
||
|
||
DELETE fac_rapport
|
||
WHERE fac_rapport_node = p_applname;
|
||
|
||
-- Eerder gemaakte mutatieregels voor deze periode verwijderen
|
||
DELETE nybu_huur_archief
|
||
WHERE isMutatie = 1 AND periode >= v_next_period AND naar_coda IS NULL;
|
||
|
||
-- Genereer factuurregels voor deze maand (mode 2 = allonges)
|
||
nybu_bereken_factuurregels (p_applname,
|
||
v_run,
|
||
v_periode,
|
||
2);
|
||
|
||
-- Genereer mutatieregels
|
||
FOR rec IN c (v_periode)
|
||
LOOP
|
||
v_aanduiding :=
|
||
v_periode
|
||
|| '/'
|
||
|| rec.deb_nr
|
||
|| '/'
|
||
|| rec.achternaam
|
||
|| '/'
|
||
|| rec.omschrijving;
|
||
v_errormsg := 'Mutatieregel aanmaken';
|
||
|
||
INSERT INTO nybu_huur_archief (betreft,
|
||
datum_export,
|
||
periode,
|
||
isMutatie,
|
||
deb_nr,
|
||
achternaam,
|
||
naam_full,
|
||
prs_perslid_key,
|
||
cnt_contract_nr,
|
||
cnt_contract_key,
|
||
kamer,
|
||
alg_ruimte_key,
|
||
omschrijving,
|
||
kpn_code_afd,
|
||
kpn_code_proj,
|
||
prs_kostensoort_refcode,
|
||
btw_code,
|
||
btw_perc,
|
||
bedrag)
|
||
VALUES (rec.betreft,
|
||
v_run,
|
||
v_next_period,
|
||
1,
|
||
rec.deb_nr,
|
||
rec.achternaam,
|
||
rec.naam_full,
|
||
rec.prs_perslid_key,
|
||
rec.cnt_contract_nr,
|
||
rec.cnt_contract_key,
|
||
rec.kamer,
|
||
rec.alg_ruimte_key,
|
||
'Correction ' || rec.omschrijving,
|
||
rec.kpn_code_afd,
|
||
rec.kpn_code_proj,
|
||
rec.prs_kostensoort_refcode,
|
||
rec.btw_code,
|
||
rec.btw_perc,
|
||
rec.bedrag_new - rec.bedrag_oud);
|
||
|
||
fac.writelog (
|
||
p_applname,
|
||
'I',
|
||
'Mutatieregel voor ' || v_aanduiding,
|
||
rec.omschrijving || ': ' || (rec.bedrag_new - rec.bedrag_oud));
|
||
END LOOP;
|
||
|
||
-- Verwijder 'niet-mutatie regels' (die zijn in de buffer aangemaakt door nybu_bereken_factuurregels() )
|
||
DELETE nybu_huur_buffer
|
||
WHERE isMutatie = 0 AND periode = v_periode AND naar_coda IS NULL;
|
||
|
||
-- Zet allongeregels in huurbuffer
|
||
INSERT INTO nybu_huur_buffer
|
||
SELECT *
|
||
FROM nybu_huur_archief
|
||
WHERE periode = v_next_period AND ismutatie = 1 AND naar_coda IS NULL;
|
||
|
||
fac.writelog (p_applname,
|
||
'S',
|
||
'Mutatieregels gegenereerd',
|
||
'Periode ' || v_periode);
|
||
|
||
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_huur_mutaties;
|
||
/
|
||
|
||
BEGIN adm.systrackscriptId('$Id$'); END;
|
||
/
|
||
SPOOL OFF |