Files
Customer/onces/NYBU/NYBU#30811.sql
Peter Koerhuis 2ec7d28f81 NYBU#30811 HUUR: export genereert factuurregels voor verkeerde periode
svn path=/Customer/; revision=23226
2014-11-03 16:24:58 +00:00

844 lines
32 KiB
SQL

-- Customer specific once-script NYBU.
-- Vanwege de 5.4.3 aanpassing in nybu.sql. Deze aanpassing met een once script. De procedures zijn tevens aangepast in nybu.sql
SET ECHO ON
SPOOL xNYBU#30811.lst
SET DEFINE OFF
-- Factuurregels verwijderen die door deze bug onterecht geëxporteerd zijn.
DELETE nybu_huur_archief
WHERE periode = '201412';
-- Mutatieregels "onexporteren"
UPDATE nybu_huur_archief
SET naar_coda = NULL
WHERE ismutatie = 1
AND periode = '201411';
CREATE OR REPLACE PROCEDURE nybu_bereken_factuurregels (
p_applname IN VARCHAR2,
p_run IN DATE,
p_periode IN VARCHAR2,
p_doorvoeren IN NUMBER)
AS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
c_srtcnt_residence NUMBER := 221;
c_srtcnt_office NUMBER := 561;
c_km_coda_nr NUMBER := 1000;
c_km_san_nr NUMBER := 1200;
c_km_borg_betaald NUMBER := 43;
c_km_vooruit_betalen NUMBER := 122;
c_km_betaald_tot NUMBER := 124;
c_km_refund NUMBER := 123;
c_skm_huurder NUMBER := 101;
c_skm_pnummer NUMBER := 341;
c_skm_ruimte NUMBER := 102;
c_usrtab_coda_btw NUMBER := 42;
c_usrtab_coda_oms NUMBER := 43;
c_ud_telkosten NUMBER := 61;
-- Student room
-- Alle verhuurcontracten waarbij de huidige periode (deels) binnen de looptijd valt
-- TRUNC op maand cq LAST_DAY, omdat contracten halverwege de maand kunnen beginnen/eindigen
CURSOR sr
IS
SELECT c.*
FROM nybu_v_huurcontracten_student c
WHERE ( c.betaald_tot IS NULL
OR c.betaald_tot < p_periode)
AND TO_DATE(p_periode, 'YYYYMM') BETWEEN TRUNC(c.cnt_contract_looptijd_van, 'MM')
AND TRUNC(c.cnt_contract_looptijd_tot, 'MM');
-- Residence/office
CURSOR ro
IS
SELECT c.cnt_contract_key,
c.cnt_contract_looptijd_van,
c.cnt_contract_looptijd_tot,
DECODE(c.ins_discipline_key,
c_srtcnt_residence, 'Staff residence',
c_srtcnt_office, 'Office') betreft,
c.cnt_contract_nummer_intern,
c.cnt_contract_omschrijving,
kp.prs_kostenplaats_nr kpn,
TRIM( SUBSTR(kg.prs_kostenplaatsgrp_oms, 1, 7) ) kpngrp,
p.prs_perslid_key,
p.prs_perslid_naam,
pf.prs_perslid_naam_full,
COALESCE(sannr.prs_kenmerklink_waarde, codanr.prs_kenmerklink_waarde) codanr,
k.prs_kostenplaats_nr,
rg.alg_ruimte_key,
rg.alg_ruimte_aanduiding
FROM (SELECT * FROM cnt_contract
WHERE ins_discipline_key IN (c_srtcnt_residence, c_srtcnt_office) ) c,
(SELECT kc.* FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND k.cnt_srtkenmerk_key = c_skm_huurder
AND kc.cnt_kenmerkcontract_verwijder IS NULL) huurder,
(SELECT kc.* FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND cnt_srtkenmerk_key = c_skm_pnummer) pnummer,
(SELECT kc.* FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND k.cnt_srtkenmerk_key = c_skm_ruimte
AND kc.cnt_kenmerkcontract_verwijder IS NULL) ruimte,
prs_perslid p,
prs_v_perslid_fullnames pf,
(SELECT * FROM prs_kenmerklink
WHERE prs_kenmerk_key = c_km_coda_nr
AND prs_kenmerklink_verwijder IS NULL) codanr,
(SELECT * FROM prs_kenmerklink
WHERE prs_kenmerk_key = c_km_san_nr
AND prs_kenmerklink_verwijder IS NULL) sannr,
prs_kostenplaats k,
prs_kostenplaats kp,
prs_kostenplaatsgrp kg,
alg_v_ruimte_gegevens rg
WHERE huurder.cnt_contract_key(+) = c.cnt_contract_key
AND pnummer.cnt_contract_key(+) = c.cnt_contract_key
AND ruimte.cnt_contract_key(+) = c.cnt_contract_key
AND kp.prs_kostenplaats_key = c.prs_kostenplaats_key
AND kg.prs_kostenplaatsgrp_key(+) = kp.prs_kostenplaatsgrp_key
AND p.prs_perslid_key(+) = fac.safe_to_number(huurder.cnt_kenmerkcontract_waarde)
AND pf.prs_perslid_key(+) = p.prs_perslid_key
AND codanr.prs_link_key(+) = p.prs_perslid_key
AND sannr.prs_link_key(+) = p.prs_perslid_key
AND k.prs_kostenplaats_key(+) = fac.safe_to_number(pnummer.cnt_kenmerkcontract_waarde)
AND rg.alg_ruimte_key(+) = fac.safe_to_number(ruimte.cnt_kenmerkcontract_waarde)
AND c.cnt_contract_verwijder IS NULL
AND TO_DATE(p_periode, 'YYYYMM') BETWEEN TRUNC(c.cnt_contract_looptijd_van, 'MM')
AND TRUNC(c.cnt_contract_looptijd_tot, 'MM');
v_periodeDate DATE;
v_periodeNaam VARCHAR2(20);
v_aantalPeriodes NUMBER;
v_curPeriodeDate DATE;
v_curPeriode VARCHAR2(10);
v_curPeriodeNaam VARCHAR2(20);
v_oms fac_usrdata.fac_usrdata_omschr%TYPE;
v_btw_code fac_usrdata.fac_usrdata_omschr%TYPE;
v_btw_perc fac_usrdata.fac_usrdata_code%TYPE;
v_grtbk prs_kostensoort.prs_kostensoort_refcode%TYPE;
v_kpl prs_kostenplaats.prs_kostenplaats_nr%TYPE;
v_proj prs_kostenplaats.prs_kostenplaats_nr%TYPE;
v_prijsfactor NUMBER(6,5);
v_betreft VARCHAR(20);
v_refnr VARCHAR(20);
BEGIN
-- Buffer en log leegmaken
DELETE nybu_huur_buffer;
DELETE imp_log WHERE imp_log_applicatie = p_applname;
v_periodeDate := TO_DATE(p_periode,'YYYYMM');
v_periodeNaam := nybu.getPeriodeNaam(p_periode, 'EN');
v_betreft := 'Campus';
FOR rec IN sr
LOOP
v_aanduiding := rec.cnt_contract_nummer_intern||'/'||rec.naam;
-- Huur, servicekosten en toeslagen kunnen een X aantal maanden vooruit betaald worden
IF (rec.aantal_periodes > 1)
THEN
fac.writelog (
p_applname, 'I',
v_aanduiding || ': meerdere maanden in één keer factureren',
'Aantal maanden: '||rec.aantal_periodes);
END IF;
FOR cntr IN 1..rec.aantal_periodes
LOOP
-- Voor de eerste en laatste maand wordt voor de huurprijs etc mogelijk maar
-- een deel doorbelast, als het contract halverwege de maand begint/eindigt.
-- Daarvoor een prijsfactor
v_prijsfactor := 1;
-- Bepaal gegevens van door-te-belasten periode (bij meerdere periodes in één keer
-- doorbelasten is dit steeds een maand verder)
v_curPeriodeDate := ADD_MONTHS(v_periodeDate, cntr-1);
v_curPeriode := TO_CHAR(v_curPeriodeDate, 'YYYYMM');
v_curPeriodeNaam := nybu.getPeriodeNaam(v_curPeriode, 'EN');
-- Lopend contract? --> huur etc factureren
IF (v_curPeriodeDate BETWEEN TRUNC(rec.cnt_contract_looptijd_van, 'MM')
AND TRUNC(rec.cnt_contract_looptijd_tot, 'MM') )
THEN
-- Is de ingangsmaand van het contract volledig, of beginnen we halverwege?
-- (alleen checken bij ingangsmaand contract)
IF (TRUNC(rec.cnt_contract_looptijd_van, 'MM') = v_curPeriodeDate)
THEN
v_prijsfactor := nybu.getPrijsFactor(rec.cnt_contract_looptijd_van, NULL, v_curPeriodeDate);
IF (v_prijsfactor != 1)
THEN
fac.writelog (
p_applname, 'I',
v_aanduiding || ': contract start halverwege '||v_curPeriodeNaam,
'Prijsfactor = '||v_prijsfactor);
END IF;
-- Is de eindmaand van het contract volledig, of eindigen we halverwege?
-- (alleen checken in slotmaand contract)
ELSIF (TRUNC(rec.cnt_contract_looptijd_tot, 'MM') = v_curPeriodeDate)
THEN
v_prijsfactor := nybu.getPrijsFactor(NULL, rec.cnt_contract_looptijd_tot, v_curPeriodeDate);
IF (v_prijsfactor != 1)
THEN
fac.writelog (
p_applname, 'I',
v_aanduiding || ': contract eindigt halverwege '||v_curPeriodeNaam,
'Prijsfactor = '||v_prijsfactor);
END IF;
END IF;
--- HUURPRIJS ---
v_errormsg := 'Archiefregel huurprijs aanmaken';
-- Plaats in archief
-- met juiste kostenplaatsen en -soorten, omschrijving
INSERT INTO nybu_huur_buffer (
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)
SELECT v_betreft, p_run,
p_periode, 0,
COALESCE (rec.budget_huur, rec.codanr),
rec.achternaam, rec.naam, rec.prs_perslid_key,
rec.cnt_contract_nummer_intern, rec.cnt_contract_key,
rec.kamer, rec.alg_ruimte_key,
oms.fac_usrdata_omschr||' '||v_curPeriodeNaam,
rec.kpngrp,
rec.kpn,
'19010',
btw.fac_usrdata_omschr,
fac.safe_to_number(btw.fac_usrdata_code),
TRUNC(v_prijsfactor * rec.huur_werkelijk, 2)
FROM fac_usrdata oms,
fac_usrdata btw
WHERE oms.fac_usrtab_key = c_usrtab_coda_oms
AND btw.fac_usrdata_key = oms.fac_usrdata_parentkey
AND oms.fac_usrdata_code = 'Rent';
--- SERVICEKOSTEN ---
v_errormsg := 'Archiefregel servicekosten aanmaken';
-- Plaats in archief
-- met juiste kostenplaatsen en -soorten, omschrijving
INSERT INTO nybu_huur_buffer (
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)
SELECT v_betreft, p_run,
p_periode, 0,
COALESCE (rec.budget_service, rec.codanr),
rec.achternaam, rec.naam, rec.prs_perslid_key,
rec.cnt_contract_nummer_intern, rec.cnt_contract_key,
rec.kamer, rec.alg_ruimte_key,
oms.fac_usrdata_omschr||' '||v_curPeriodeNaam,
rec.kpngrp,
rec.kpn,
'19010',
btw.fac_usrdata_omschr,
fac.safe_to_number(btw.fac_usrdata_code),
TRUNC(v_prijsfactor * rec.servicekosten_werkelijk, 2)
FROM fac_usrdata oms,
fac_usrdata btw
WHERE oms.fac_usrtab_key = c_usrtab_coda_oms
AND btw.fac_usrdata_key = oms.fac_usrdata_parentkey
AND oms.fac_usrdata_code = 'ServCost';
--- PARTNERCHARGE ---
IF (rec.roommate IS NOT NULL OR rec.partner_naam IS NOT NULL)
THEN
v_errormsg := 'Archiefregel partnercharge aanmaken';
-- Plaats in archief
-- met juiste kostenplaatsen en -soorten, omschrijving
INSERT INTO nybu_huur_buffer (
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)
SELECT v_betreft, p_run,
p_periode, 0,
COALESCE (rec.budget_service, rec.codanr),
rec.achternaam, rec.naam, rec.prs_perslid_key,
rec.cnt_contract_nummer_intern, rec.cnt_contract_key,
rec.kamer, rec.alg_ruimte_key,
oms.fac_usrdata_omschr||' '||v_curPeriodeNaam,
rec.kpngrp,
rec.kpn,
'19010',
btw.fac_usrdata_omschr,
fac.safe_to_number(btw.fac_usrdata_code),
TRUNC(v_prijsfactor * rec.partnercharge_werkelijk, 2)
FROM fac_usrdata oms,
fac_usrdata btw
WHERE oms.fac_usrtab_key = c_usrtab_coda_oms
AND btw.fac_usrdata_key = oms.fac_usrdata_parentkey
AND oms.fac_usrdata_code = 'PartnerCh';
END IF;
--- TELEFOONAANSLUITING ---
IF (rec.telefooncharge IS NOT NULL AND rec.telefooncharge != 0)
THEN
v_errormsg := 'Archiefregel telefoonaansluiting aanmaken';
-- Plaats in archief
-- met juiste kostenplaatsen en -soorten, omschrijving
INSERT INTO nybu_huur_buffer (
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)
SELECT v_betreft, p_run,
p_periode, 0,
COALESCE (rec.budget_telefoon, rec.codanr),
rec.achternaam, rec.naam, rec.prs_perslid_key,
rec.cnt_contract_nummer_intern, rec.cnt_contract_key,
rec.kamer, rec.alg_ruimte_key,
oms.fac_usrdata_omschr||' '||v_curPeriodeNaam,
rec.kpngrp,
rec.kpn,
'19010',
btw.fac_usrdata_omschr,
fac.safe_to_number(btw.fac_usrdata_code),
TRUNC(v_prijsfactor * rec.telefooncharge_werkelijk, 2)
FROM fac_usrdata oms,
fac_usrdata btw
WHERE oms.fac_usrtab_key = c_usrtab_coda_oms
AND btw.fac_usrdata_key = oms.fac_usrdata_parentkey
AND oms.fac_usrdata_code = 'PhoneConn';
END IF;
ELSE
fac.writelog (
p_applname, 'W',
v_aanduiding || ': contract loopt niet in gegeven periode!',
'Periode: '||v_curPeriodeNaam);
END IF; -- Lopend?
END LOOP;
-- Als huur vooruit betaald, dan aangeven t/m welke periode
-- (kenmerken alleen bijwerken als we ook doorvoeren)
IF (rec.aantal_periodes > 1 AND p_doorvoeren = 1)
THEN
-- We hebben nu vooruit gefactureerd; "Bill in advance" leegmaken
UPDATE cnt_kenmerkcontract
SET cnt_kenmerkcontract_verwijder = SYSDATE
WHERE cnt_kenmerk_key = c_km_vooruit_betalen
AND cnt_contract_key = rec.cnt_contract_key
AND cnt_kenmerkcontract_verwijder IS NULL;
-- Voorlopig geen facturering; "Contract paid until" vullen
INSERT INTO cnt_kenmerkcontract
(cnt_contract_key, cnt_kenmerk_key, cnt_kenmerkcontract_waarde)
VALUES
(rec.cnt_contract_key,
c_km_betaald_tot,
v_curPeriode);
-- Tracking
fac.trackaction('CNTUPD',
rec.cnt_contract_key,
4, -- _FACILITOR
NULL,
'Contract updated'|| chr(10) ||
rec.aantal_periodes||' months billed in advance, until '||v_curPeriode);
ELSE
-- (weer) normale facturering; "Contract paid until" leegmaken als gevuld
UPDATE cnt_kenmerkcontract
SET cnt_kenmerkcontract_verwijder = SYSDATE
WHERE cnt_kenmerk_key = c_km_betaald_tot
AND cnt_contract_key = rec.cnt_contract_key
AND cnt_kenmerkcontract_verwijder IS NULL;
END IF;
END LOOP;
COMMIT;
-- Residences & offices
FOR rec IN ro
LOOP
v_aanduiding := rec.cnt_contract_key||'/'||rec.prs_perslid_naam||'/'||rec.alg_ruimte_aanduiding;
v_betreft := rec.betreft;
v_refnr := COALESCE(rec.prs_kostenplaats_nr, rec.codanr);
v_prijsfactor := 1;
v_errormsg := 'Archiefregels huur aanmaken';
-- Plaats in archief
-- met juiste kostenplaatsen en -soorten, omschrijving
-- Voor één contract kunnen in één keer meerdere regels worden toegevoegd
INSERT INTO nybu_huur_buffer (
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)
SELECT v_betreft, p_run,
p_periode, 0,
DECODE(rec.betreft,
'Office', v_refnr,
CASE
WHEN k.cnt_kenmerk_volgnummer BETWEEN 100 AND 200
THEN
rec.codanr
WHEN k.cnt_kenmerk_volgnummer BETWEEN 200 AND 300
THEN
rec.prs_kostenplaats_nr
WHEN k.cnt_kenmerk_volgnummer > 300
THEN
'salaris'
END)
refnr,
rec.prs_perslid_naam, rec.prs_perslid_naam_full, rec.prs_perslid_key,
rec.cnt_contract_nummer_intern, rec.cnt_contract_key,
rec.alg_ruimte_aanduiding, rec.alg_ruimte_key,
sk.cnt_srtkenmerk_omschrijving||' '||v_periodeNaam,
rec.kpngrp,
rec.kpn,
'19010',
sk.cnt_srtkenmerk_dimensie,
fac.safe_to_number(ud.fac_usrdata_code),
nybu.getPrijsFactor(rec.cnt_contract_looptijd_van, rec.cnt_contract_looptijd_tot, v_periodeDate)
* fac.safe_to_number(kc.cnt_kenmerkcontract_waarde)
--fac.safe_to_number(kc.cnt_kenmerkcontract_waarde) / (1+fac.safe_to_number(ud.fac_usrdata_code)/100)
FROM cnt_kenmerkcontract kc,
cnt_kenmerk k,
cnt_srtkenmerk sk,
fac_usrdata ud
WHERE kc.cnt_contract_key = rec.cnt_contract_key
AND kc.cnt_kenmerkcontract_verwijder IS NULL
AND k.cnt_kenmerk_key = kc.cnt_kenmerk_key
AND k.cnt_kenmerk_verwijder IS NULL
AND k.cnt_kenmerk_volgnummer > 100
AND fac.safe_to_number(kc.cnt_kenmerkcontract_waarde) IS NOT NULL
AND fac.safe_to_number(kc.cnt_kenmerkcontract_waarde) > 0
AND sk.cnt_srtkenmerk_key = k.cnt_srtkenmerk_key
AND sk.cnt_srtkenmerk_verwijder IS NULL
AND sk.cnt_srtkenmerk_kenmerktype = 'N'
AND UPPER(ud.fac_usrdata_omschr) = UPPER(sk.cnt_srtkenmerk_dimensie)
AND ud.fac_usrtab_key = c_usrtab_coda_btw;
END LOOP;
COMMIT;
-- Als definitief, dan buffer naar archief kopiëren
IF (p_doorvoeren = 1)
THEN
INSERT INTO nybu_huur_archief
SELECT * FROM nybu_huur_buffer
WHERE periode = p_periode;
COMMIT;
-- Anders eventuele nog niet-geëxporteerde mutatieregels in de buffer zetten
ELSE
INSERT INTO nybu_huur_buffer
SELECT * FROM nybu_huur_archief
WHERE periode = p_periode
AND ismutatie = 1
AND naar_coda IS NULL;
END IF;
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_bereken_factuurregels;
/
CREATE OR REPLACE PROCEDURE nybu_select_huur_coda (
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);
-- Individuele facturen voor debiteuren; ook voor sommatieregel met totaalbedrag
-- Bedragen zijn incl BTW
CURSOR c_deb
IS
SELECT deb_nr, achternaam, SUM(bedrag) bedrag, betreft
FROM nybu_huur_archief
WHERE naar_coda IS NULL
AND deb_nr NOT LIKE 'P%'
AND deb_nr != 'salaris'
GROUP BY deb_nr, achternaam, betreft
ORDER BY deb_nr;
-- Factuurregels voor deze factuur
CURSOR regels (in_deb_nr VARCHAR2)
IS
SELECT *
FROM nybu_huur_archief
WHERE deb_nr = in_deb_nr
AND naar_coda IS NULL
ORDER BY datum_export;
-- Individuele facturen voor interne kostenplaatsen; ook voor sommatieregel met totaalbedrag
-- Bedragen zijn excl BTW
CURSOR c_kpn
IS
SELECT deb_nr, achternaam,
COALESCE( TRIM( SUBSTR(kg.prs_kostenplaatsgrp_oms, 1, 7) ),
'ONB')
kpn_grp,
kpn_code_afd,
kpn_code_proj,
SUM(bedrag/(1+btw_perc/100)) bedrag,
betreft
FROM nybu_huur_archief ha,
prs_v_aanwezigkostenplaats ak,
prs_kostenplaatsgrp kg
WHERE naar_coda IS NULL
AND deb_nr LIKE 'P%'
AND ak.prs_kostenplaats_nr = deb_nr
AND kg.prs_kostenplaatsgrp_key(+) = ak.prs_kostenplaatsgrp_key
GROUP BY deb_nr, achternaam, prs_kostenplaatsgrp_oms, kpn_code_afd, kpn_code_proj, betreft
ORDER BY deb_nr;
CURSOR c_salaris
IS
SELECT COALESCE(prs_perslid_nr, prs_perslid_email) personeelsnr,
achternaam,
kpn_code_afd,
kpn_code_proj,
bedrag,
btw_perc,
omschrijving
FROM nybu_huur_archief b,
prs_perslid p
WHERE naar_coda IS NULL
AND deb_nr = 'salaris'
AND p.prs_perslid_key = b.prs_perslid_key
ORDER BY achternaam;
v_teller NUMBER;
v_rap_count NUMBER;
v_run DATE;
v_lastPeriode VARCHAR(6);
v_periode VARCHAR(6);
v_periodeNaam VARCHAR2(20);
v_last_period VARCHAR(6);
BEGIN
v_teller := 0;
v_rap_count := 0;
v_aanduiding := 'Init';
v_errormsg := 'Periode bepalen';
-- Deze export gaat over de huur voor volgende maand (periode = laatste export + 1)
v_run := TO_DATE(p_applrun, 'YYYY-MM-DD HH24:MI:SS');
SELECT MAX(periode)
INTO v_lastPeriode
FROM nybu_huur_archief
WHERE ismutatie = 0;
v_periode := TO_CHAR(ADD_MONTHS(TO_DATE(v_lastPeriode, 'YYYYMM'), 1), 'YYYYMM');
v_periodeNaam := nybu.getPeriodeNaam(v_periode, 'EN');
-- Is deze periode al geëxporteerd?
-- TODO: Niks doen, of wissen en nog een keer draaien?
SELECT COALESCE(MAX(periode), 'NogNix')
INTO v_last_period
FROM nybu_huur_archief
WHERE ismutatie = 0;
IF (v_last_period = v_periode)
THEN
fac.writelog (
p_applname,
'E',
'Export is al gedraaid voor periode '||v_periode||'!',
'Export wordt afgebroken');
ELSE
DELETE imp_log
WHERE imp_log_applicatie = p_applname;
DELETE fac_rapport
WHERE fac_rapport_node = p_applname;
-- Genereer factuurregels voor komende maand
nybu_bereken_factuurregels(p_applname, v_run, v_periode, 1);
-- Genereer sommatie- en specificatieregels voor debiteuren
FOR rec IN c_deb
LOOP
v_aanduiding := v_teller||': '||rec.deb_nr||'/'||rec.achternaam;
v_errormsg := 'Sommatieregel aanmaken';
v_teller := v_teller + 1;
v_rap_count := v_rap_count + 1;
-- Sommatieregel
INSERT INTO fac_rapport
(fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES
(p_applname,
v_rap_count,
v_teller ||';'||
'10;' ||
'13000;' ||
REPLACE(rec.deb_nr, 'CON', 'DC') ||';'||
';' ||
TRIM( TO_CHAR( ABS(rec.bedrag),
'99999999D99',
'NLS_NUMERIC_CHARACTERS=,.') ) ||';'||
CASE
WHEN rec.bedrag < 0 THEN 'C;'
WHEN rec.bedrag >= 0 THEN 'D;'
END ||
';' ||
rec.betreft||' '||v_periodeNaam||' '||rec.achternaam ||';'||
'Summary;' ||
'K91200;' ||
'P991210',
0);
-- Specificatieregels
FOR reg IN regels (rec.deb_nr)
LOOP
v_errormsg := 'Specificatieregel aanmaken';
v_rap_count := v_rap_count + 1;
INSERT INTO fac_rapport
(fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES
(p_applname,
v_rap_count,
v_teller ||';'||
'12;' ||
reg.prs_kostensoort_refcode ||';'||
reg.kpn_code_afd ||';'||
reg.kpn_code_proj ||';'||
TRIM( TO_CHAR( ABS(reg.bedrag),
'99999999D99',
'NLS_NUMERIC_CHARACTERS=,.') ) ||';'||
CASE
WHEN reg.bedrag < 0 THEN 'D;'
WHEN reg.bedrag >= 0 THEN 'C;'
END ||
reg.btw_code ||';'||
reg.omschrijving ||';'||
'Analysis;' ||
';' ||
'',
0);
END LOOP;
END LOOP;
-- Scheidingsregel
v_errormsg := 'Scheidingsregel aanmaken';
v_rap_count := v_rap_count + 1;
INSERT INTO fac_rapport
(fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES
(p_applname,
v_rap_count,
'INTERNE KOSTENPLAATSEN;;;;;;;;;;;',
0);
v_teller := 0;
-- Genereer sommatie- en specificatieregels voor interne kostenplaatsen
FOR rec IN c_kpn
LOOP
v_aanduiding := v_teller||': '||rec.deb_nr||'/'||rec.achternaam;
v_errormsg := 'Sommatieregel KPN aanmaken';
v_teller := v_teller + 1;
v_rap_count := v_rap_count + 1;
-- Sommatieregel
INSERT INTO fac_rapport
(fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES
(p_applname,
v_rap_count,
v_teller ||';'||
';' ||
'56000;' ||
rec.kpn_grp ||';'||
rec.deb_nr ||';'||
TRIM( TO_CHAR( ABS(rec.bedrag),
'99999999D99',
'NLS_NUMERIC_CHARACTERS=,.') ) ||';'||
CASE
WHEN rec.bedrag < 0 THEN 'C;'
WHEN rec.bedrag >= 0 THEN 'D;'
END ||
';' ||
rec.betreft||' '||v_periodeNaam||' '||rec.achternaam ||';'||
';' ||
';' ||
'',
0);
-- Tegenboeking
v_errormsg := 'Tegenboeking aanmaken';
v_rap_count := v_rap_count + 1;
INSERT INTO fac_rapport
(fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES
(p_applname,
v_rap_count,
v_teller ||';'||
';' ||
'76000;'||
rec.kpn_code_afd ||';'||
rec.kpn_code_proj ||';'||
TRIM( TO_CHAR( ABS(rec.bedrag),
'99999999D99',
'NLS_NUMERIC_CHARACTERS=,.') ) ||';'||
CASE
WHEN rec.bedrag < 0 THEN 'D;'
WHEN rec.bedrag >= 0 THEN 'C;'
END ||
';' ||
rec.betreft||' '||v_periodeNaam||' '||rec.achternaam ||';'||
';' ||
';' ||
'',
0);
END LOOP;
-- Scheidingsregel
v_errormsg := 'Scheidingsregel aanmaken';
v_rap_count := v_rap_count + 1;
INSERT INTO fac_rapport
(fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES
(p_applname,
v_rap_count,
'SALARISADMINISTRATIE;;;;;;;;;;;',
0);
v_teller := 0;
-- Genereer specificatieregels voor salarisadministratie
FOR rec IN c_salaris
LOOP
v_aanduiding := v_teller||': '||rec.personeelsnr||'/'||rec.achternaam;
v_errormsg := 'Sommatieregel salarisadministratie aanmaken';
v_teller := v_teller + 1;
v_rap_count := v_rap_count + 1;
-- Sommatieregel
INSERT INTO fac_rapport
(fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES
(p_applname,
v_rap_count,
v_teller ||';'||
rec.personeelsnr ||';'||
rec.achternaam ||';'||
rec.kpn_code_afd ||';'||
rec.kpn_code_proj ||';'||
TRIM( TO_CHAR( ABS(rec.bedrag),
'99999999D99',
'NLS_NUMERIC_CHARACTERS=,.') ) ||';'||
rec.btw_perc ||';'||
rec.omschrijving||';'||
';' ||
';' ||
';' ||
'',
0);
END LOOP;
END IF;
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_coda;
/
BEGIN adm.systrackscriptId('$Id$'); END;
/
COMMIT;
SPOOL OFF