844 lines
32 KiB
SQL
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 |