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