Files
Customer/onces/NYBU/NYBU#38040.sql

211 lines
7.5 KiB
SQL
Raw Permalink Blame History

-- 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