Files
Customer/PCHE/pche.sql
Sander Schepers f9b9e9d490 PCHE#62701 Filter rapport op facturen enkel dit jaar en vorig jaar
svn path=/Customer/trunk/; revision=47166
2020-06-18 06:47:27 +00:00

2180 lines
89 KiB
SQL
Raw Blame History

--
-- $Id$
--
-- Script containing customer specific configuration sql statements for PCHE (Eindhoven Strijp-S)
DEFINE thisfile = 'PCHE.SQL'
DEFINE dbuser = '^PCHE'
DEFINE custid = 'PCHE'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
WHENEVER SQLERROR EXIT;
SELECT adm.scriptspoolfile('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL;
WHENEVER SQLERROR CONTINUE;
SPOOL &fcltlogfile
SET DEFINE OFF
------ payload begin ------
/* grootboekrekeningen:
Grootboek Omschrijving
200006 24/7 Abonnement bewoners
200007 24/7 Abonnement bedrijven
200008 Nacht en weekend abonnement
200009 Nacht abonnement
200010 Werkdagen abonnement
200011 Realtime abonnement
200012 Strijp-S bultje
200013 Borg abonnement passen
200014 Borg fietspassen
200027 Waardenkaart bedrijven
200028 Waardenkaart bewoners
*/
/* verkoopfactuurvelden:
fin_verkoopfactuur_key Identificatie van de verkoopfactuurregel
fin_verkoopfactuur_id Identificatie van de verkoopfactuurregel (in tekst vorm)
fin_verkoopfactuur_datum Factuurdatum, in geval van bestellingen en mutaties is dit de huidige datum. In geval van prolongaties van de contracten zal dit de eerste van de komende maand zijn.
fin_verkoopfactuur_omschr Omschrijving van de bestelregel. Voor bestellingen wordt hier de artikelomschrijving ingevuld.
fin_verkoopfactuur_xmlnode Type van FACILITOR entiteit waaraan deze verkoopfactuur gekoppeld is. Kan zijn: contract of bestelopdr.
fin_verkoopfactuur_refkey Identificatie van de FACILITOR entiteit waaraan deze factuur gekoppeld is.
prs_kostenplaats_nr LET OP:Referentie naar de melding voor contractmutaties.
prs_kostensoort_refcode Grootboekrekening
prs_bedrijf_key Identificatie van de debiteur
prs_debiteur_naam Naam van de debiteur (prs_bedrijf_naam)
fin_verkoopfactuur_bedrag Factuurregelbedrag exclusief BTW
fin_verkoopfactuur_btw BTW bedrag voor deze factuurregel
fin_btwtabelwaarde_code Code van het BTW tarief
fin_btwtabelwaarde_oms Omschrijving van het BTW tarief
fin_btwtabelwaarde_perc BTW percentage
fin_btwtabelwaarde_verlegd Of de btw verlegd is (n.v.t.)
fin_verkoopfactuur_maand De maandnotatie van de factuurdatum
fin_verkoopfactuur_c1 Debiteurnummer (prs_leverancier_nr)
fin_verkoopfactuur_c2 Email adres waarnaar de factuur verzonden is.
fin_verkoopfactuur_c3 Periode in geval van contract (M, Q, Y)
fin_verkoopfactuur_c4 Type abonnement bij mutatie
fin_verkoopfactuur_c5 Bestandsnaam pdf
fin_verkoopfactuur_c7 Lijst met pasnummers horende bij dit contract.
fin_verkoopfactuur_n1 Factuurregel volgnummer
fin_verkoopfactuur_n2 Aantal
fin_verkoopfactuur_n3 Bedrag dat betaald is.
fin_verkoopfactuur_n4 Korting betaaltermijn (procenten)
fin_verkoopfactuur_n5 Korting Contract (procenten)
fin_verkoopfactuur_d1 Datum waarop de factuur volledig betaald is.
fin_verkoopfactuur_d2 Datum waarop de factuur naar Exact verzonden is.
fin_verkoopfactuur_d3 Periode van
fin_verkoopfactuur_d4 Periode tot
fin_verkoopfactuur_d5 Datum waarop de factuur verzonden is.
*/
CREATE OR REPLACE VIEW pche_v_rap_verkoopfacturen
(
fin_verkoopfactuur_key,
fin_verkoopfactuur_id,
node,
omschrijving
)
AS
SELECT max(fin_verkoopfactuur_key),
fin_verkoopfactuur_id,
fin_verkoopfactuur_xmlnode,
listagg (fin_verkoopfactuur_omschr, ',')
WITHIN GROUP (ORDER BY fin_verkoopfactuur_omschr)
AS omschrijving
FROM fin_verkoopfactuur
GROUP BY fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode;
CREATE OR REPLACE VIEW pche_v_pasnrs
(
cnt_contract_key,
pasnrs
)
AS
SELECT co.cnt_contract_key,
LISTAGG (d.ins_deel_omschrijving, ',')
WITHIN GROUP (ORDER BY (ins_deel_omschrijving))
AS pasnrs
FROM ins_deel d, cnt_contract_object co
WHERE co.cnt_ins_deel_key = d.ins_deel_key
AND co.cnt_contract_object_verwijder IS NULL
AND d.ins_deel_verwijder IS NULL
AND COALESCE (d.ins_deel_vervaldatum, SYSDATE) >= SYSDATE
GROUP BY co.cnt_contract_key;
CREATE OR REPLACE VIEW pche_v_open_contract
(
cnt_contract_key,
cnt_contract_omschrijving,
cnt_contract_verwijder
)
AS
SELECT cnt_contract_key,
cnt_contract_omschrijving
|| ' ['
|| cnt_contract_nummer_intern
|| '.'
|| COALESCE (cnt_contract_versie, '0')
|| ']'
|| DECODE (cnt_contract_status, 1, ' *', DECODE(cnt_contract_verwijder, NULL, DECODE(SIGN(cnt_contract_looptijd_tot - SYSDATE), -1, ' *', ''), ' *'))
cnt_contract_omschrijving,
DECODE (cnt_contract_status, 1, sysdate -1, coalesce(cnt_contract_verwijder, cnt_contract_looptijd_tot)) verwijder
FROM cnt_contract;
CREATE OR REPLACE VIEW pche_v_contract_gegevens
(
debiteur,
bewoner,
bedrijf,
prs_bedrijf_key,
contract,
cnt_contract_key,
looptijd_van,
looptijd_tot,
dgn5,
dgn7,
nacht,
nachtweekend,
bultje,
betaling,
betaling_korting,
betaling_periode,
p_dgn5,
p_dgn7,
p_nacht,
p_nachtweekend,
p_bultje,
contract_korting,
aantal_passen
)
AS
SELECT prs_leverancier_nr debiteur,
COALESCE (
(SELECT fac.safe_to_number (prs_kenmerklink_waarde)
FROM prs_kenmerklink
WHERE prs_kenmerklink_verwijder IS NULL
AND prs_link_key = prs_bedrijf_key
AND prs_kenmerk_key = 1000),
0)
bewoner,
prs_bedrijf_naam bedrijf,
prs_bedrijf_key,
'C' || cnt_contract_nummer_intern contract,
c.cnt_contract_key,
c.cnt_contract_looptijd_van,
c.cnt_contract_looptijd_tot,
(SELECT cnt_kenmerkcontract_waarde
FROM cnt_kenmerkcontract kc
WHERE c.cnt_contract_key = kc.cnt_contract_key
AND kc.cnt_kenmerk_key = 1)
dgn5,
(SELECT cnt_kenmerkcontract_waarde
FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE c.cnt_contract_key = kc.cnt_contract_key
AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND k.cnt_srtkenmerk_key = 2)
dgn7,
(SELECT cnt_kenmerkcontract_waarde
FROM cnt_kenmerkcontract kc
WHERE c.cnt_contract_key = kc.cnt_contract_key
AND kc.cnt_kenmerk_key = 3)
nacht,
(SELECT cnt_kenmerkcontract_waarde
FROM cnt_kenmerkcontract kc
WHERE c.cnt_contract_key = kc.cnt_contract_key
AND kc.cnt_kenmerk_key = 4)
nachtweekend,
(SELECT cnt_kenmerkcontract_waarde
FROM cnt_kenmerkcontract kc
WHERE c.cnt_contract_key = kc.cnt_contract_key
AND kc.cnt_kenmerk_key = 41)
bultje,
(SELECT fac_usrdata_omschr
FROM fac_usrdata ud, cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE c.cnt_contract_key = kc.cnt_contract_key
AND k.cnt_srtkenmerk_key = 5
AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND fac.safe_to_number (cnt_kenmerkcontract_waarde) =
ud.fac_usrdata_key)
betaling,
(SELECT fac_usrdata_prijs
FROM fac_usrdata ud, cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE c.cnt_contract_key = kc.cnt_contract_key
AND k.cnt_srtkenmerk_key = 5
AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND fac.safe_to_number (cnt_kenmerkcontract_waarde) =
ud.fac_usrdata_key)
betaling_korting,
(SELECT fac_usrdata_code
FROM fac_usrdata ud, cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE c.cnt_contract_key = kc.cnt_contract_key
AND k.cnt_srtkenmerk_key = 5
AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND fac.safe_to_number (cnt_kenmerkcontract_waarde) =
ud.fac_usrdata_key)
betaling_periode,
(SELECT fac_usrdata_prijs
FROM fac_usrdata
WHERE fac_usrdata_key = 21)
p_dgn5,
(SELECT fac_usrdata_prijs
FROM fac_usrdata
WHERE fac_usrdata_key = DECODE(c.ins_discipline_key, 61, 62, 1))
p_dgn7,
(SELECT fac_usrdata_prijs
FROM fac_usrdata
WHERE fac_usrdata_key = 3)
p_nacht,
(SELECT fac_usrdata_prijs
FROM fac_usrdata
WHERE fac_usrdata_key = 2)
p_nachtweekend,
(SELECT fac_usrdata_prijs
FROM fac_usrdata
WHERE fac_usrdata_key = 81)
p_bultje,
cnt_contract_korting contract_korting,
(SELECT COUNT (ins_deel_key)
FROM ins_deel d, cnt_contract_object co
WHERE c.cnt_contract_key = co.cnt_contract_key
AND co.cnt_ins_deel_key = d.ins_deel_key)
aantal_passen
FROM cnt_contract c, prs_bedrijf b
WHERE c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
AND c.cnt_contract_verwijder IS NULL
AND c.cnt_contract_status = 0;
--PCHE#41481 Dit is een vaste rapportage geworden
CREATE OR REPLACE VIEW pche_v_rap_bedrijfexport
(
bedrijfsnaam,
naam_gebruiker,
pasnummer,
adres,
postcode,
plaats,
telefoonnummer_gebruiker
)
AS
SELECT DECODE (bedrijf.bedrijf, NULL, 'geen bedrijf', bedrijf.bedrijf)
bedrijfsnaam,
naam.ins_kenmerkdeel_waarde naam_gebruiker,
naam.ins_deel_upper pasnummer,
bedrijfg.prs_bedrijf_post_adres adres,
bedrijfg.prs_bedrijf_post_postcode postcode,
bedrijfg.prs_bedrijf_post_plaats plaats,
tel.ins_kenmerkdeel_waarde telefoonnummer_gebruiker
FROM (SELECT i.ins_deel_upper, ik.ins_kenmerkdeel_waarde
FROM ins_deel i, ins_kenmerkdeel ik
WHERE ik.ins_kenmerk_key = 21
AND i.ins_deel_key = ik.ins_deel_key
AND i.ins_deel_verwijder IS NULL) naam,
(SELECT i.ins_deel_upper, ik.ins_kenmerkdeel_waarde
FROM ins_deel i, ins_kenmerkdeel ik
WHERE ik.ins_kenmerk_key = 22
AND i.ins_deel_key = ik.ins_deel_key
AND i.ins_deel_verwijder IS NULL) tel,
(SELECT p.bedrijf, p.pas, p.prs_bedrijf_key
FROM pche_v_contractdeel_gegevens p) bedrijf,
(SELECT pb.prs_bedrijf_key,
pb.prs_bedrijf_post_adres,
pb.prs_bedrijf_post_postcode,
pb.prs_bedrijf_post_plaats
FROM prs_bedrijf pb) bedrijfg
WHERE naam.ins_deel_upper = tel.ins_deel_upper
AND naam.ins_deel_upper = bedrijf.pas(+)
AND bedrijf.prs_bedrijf_key = bedrijfg.prs_bedrijf_key(+);
CREATE OR REPLACE FORCE VIEW pche_v_contractdeel_gegevens
(
debiteur,
bewoner,
bedrijf,
prs_bedrijf_key,
contract,
cnt_contract_key,
dgn5,
dgn7,
nacht,
nachtweekend,
bultje,
betaling,
betaling_korting,
betaling_periode,
p_dgn5,
p_dgn7,
p_nacht,
p_nachtweekend,
p_bultje,
contract_korting,
pas
)
AS
SELECT prs_leverancier_nr debiteur,
COALESCE (
(SELECT fac.safe_to_number (prs_kenmerklink_waarde)
FROM prs_kenmerklink
WHERE prs_kenmerklink_verwijder IS NULL
AND prs_link_key = prs_bedrijf_key
AND prs_kenmerk_key = 1000),
0)
bewoner,
prs_bedrijf_naam bedrijf,
prs_bedrijf_key,
'C' || cnt_contract_nummer_intern contract,
c.cnt_contract_key,
(SELECT cnt_kenmerkcontract_waarde
FROM cnt_kenmerkcontract kc
WHERE c.cnt_contract_key = kc.cnt_contract_key
AND kc.cnt_kenmerk_key = 1)
dgn5,
(SELECT cnt_kenmerkcontract_waarde
FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE c.cnt_contract_key = kc.cnt_contract_key
AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND k.cnt_srtkenmerk_key = 2)
dgn7,
(SELECT cnt_kenmerkcontract_waarde
FROM cnt_kenmerkcontract kc
WHERE c.cnt_contract_key = kc.cnt_contract_key
AND kc.cnt_kenmerk_key = 3)
nacht,
(SELECT cnt_kenmerkcontract_waarde
FROM cnt_kenmerkcontract kc
WHERE c.cnt_contract_key = kc.cnt_contract_key
AND kc.cnt_kenmerk_key = 4)
nachtweekend,
(SELECT cnt_kenmerkcontract_waarde
FROM cnt_kenmerkcontract kc
WHERE c.cnt_contract_key = kc.cnt_contract_key
AND kc.cnt_kenmerk_key = 41)
bultje,
(SELECT fac_usrdata_omschr
FROM fac_usrdata ud, cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE c.cnt_contract_key = kc.cnt_contract_key
AND k.cnt_srtkenmerk_key = 5
AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND fac.safe_to_number (cnt_kenmerkcontract_waarde) =
ud.fac_usrdata_key)
betaling,
(SELECT fac_usrdata_prijs
FROM fac_usrdata ud, cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE c.cnt_contract_key = kc.cnt_contract_key
AND k.cnt_srtkenmerk_key = 5
AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND fac.safe_to_number (cnt_kenmerkcontract_waarde) =
ud.fac_usrdata_key)
betaling_korting,
(SELECT fac_usrdata_code
FROM fac_usrdata ud, cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE c.cnt_contract_key = kc.cnt_contract_key
AND k.cnt_srtkenmerk_key = 5
AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND fac.safe_to_number (cnt_kenmerkcontract_waarde) =
ud.fac_usrdata_key)
betaling_periode,
(SELECT fac_usrdata_prijs
FROM fac_usrdata
WHERE fac_usrdata_key = 21)
p_dgn5,
(SELECT fac_usrdata_prijs
FROM fac_usrdata
WHERE fac_usrdata_key = 1)
p_dgn7,
(SELECT fac_usrdata_prijs
FROM fac_usrdata
WHERE fac_usrdata_key = 3)
p_nacht,
(SELECT fac_usrdata_prijs
FROM fac_usrdata
WHERE fac_usrdata_key = 2)
p_nachtweekend,
(SELECT fac_usrdata_prijs
FROM fac_usrdata
WHERE fac_usrdata_key = 81)
p_bultje,
cnt_contract_korting contract_korting,
ins_deel_omschrijving pas
FROM cnt_contract c,
prs_bedrijf b,
ins_deel d,
cnt_contract_object co
WHERE c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
AND c.cnt_contract_key = co.cnt_contract_key(+)
AND co.cnt_ins_deel_key = d.ins_deel_key(+);
CREATE OR REPLACE VIEW pche_v_rap_contract_gegevens
(
debiteur,
bedrijf,
bewoner,
contract,
dgn5,
dgn7,
nacht,
nachtweekend,
bultje,
betaling,
p_dgn5,
p_dgn7,
p_nacht,
p_nachtweekend,
p_bultje,
aantal_passen,
betaling_korting,
contract_korting,
t_dgn5,
t_dgn7,
t_nacht,
t_nachtweekend,
t_bultje,
totaal,
totaal_netto,
pasnrs
)
AS
SELECT debiteur,
bedrijf,
bewoner,
contract,
dgn5,
dgn7,
nacht,
nachtweekend,
bultje,
betaling,
p_dgn5,
p_dgn7,
p_nacht,
p_nachtweekend,
p_bultje,
aantal_passen,
betaling_korting,
contract_korting,
dgn5 * p_dgn5 t_dgn5,
dgn7 * p_dgn7 t_dgn7,
nacht * p_nacht t_nacht,
nachtweekend * p_nachtweekend t_nachtweekend,
bultje * p_bultje t_bultje,
COALESCE (fac.safe_to_number (dgn5), 0) * p_dgn5
+ COALESCE (fac.safe_to_number (dgn7), 0) * p_dgn7
+ COALESCE (fac.safe_to_number (nacht), 0) * p_nacht
+ COALESCE (fac.safe_to_number (nachtweekend), 0) * p_nachtweekend
+ COALESCE (fac.safe_to_number (bultje), 0) * p_bultje
totaal,
ROUND (
( (100 - COALESCE (contract_korting, 0) - betaling_korting) / 100)
* ( COALESCE (fac.safe_to_number (dgn5), 0) * p_dgn5
+ COALESCE (fac.safe_to_number (dgn7), 0) * p_dgn7
+ COALESCE (fac.safe_to_number (nacht), 0) * p_nacht
+ COALESCE (fac.safe_to_number (nachtweekend), 0)
* p_nachtweekend
+ COALESCE (fac.safe_to_number (bultje), 0)
* p_bultje),
2)
totaal_netto,
pasnrs
FROM pche_v_contract_gegevens cg, pche_v_pasnrs p
WHERE cg.cnt_contract_key = p.cnt_contract_key;
CREATE OR REPLACE PROCEDURE pche_select_daily_task (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
BEGIN
-- Kopieer de bedrijfsgegevens naar afdelingen en personen
-- Pas bestaande afdelingen aan.
UPDATE prs_afdeling a
SET
(prs_afdeling_naam,
prs_afdeling_omschrijving,
prs_afdeling_verwijder,
prs_kostenplaats_key
) =
(SELECT prs_leverancier_nr,
prs_bedrijf_naam,
prs_bedrijf_verwijder,
1
FROM prs_bedrijf b
WHERE b.prs_bedrijf_key = a.prs_bedrijf_key
AND b.prs_leverancier_nr IS NOT NULL)
WHERE EXISTS
(SELECT b.prs_bedrijf_key
FROM prs_bedrijf b, prs_v_afdeling ab
WHERE ab.prs_bedrijf_key = b.prs_bedrijf_key
AND ab.prs_afdeling_key = a.prs_afdeling_key
AND b.prs_leverancier_nr IS NOT NULL
AND b.prs_bedrijf_contract = 1);
-- Voeg nieuwe afdelingen toe.
INSERT INTO prs_afdeling (prs_bedrijf_key, prs_afdeling_naam, prs_afdeling_omschrijving, prs_kostenplaats_key)
SELECT prs_bedrijf_key, prs_leverancier_nr, prs_bedrijf_naam, 1
FROM prs_bedrijf b
WHERE prs_bedrijf_contract = 1
AND prs_leverancier_nr IS NOT NULL
AND NOT EXISTS (SELECT b.prs_bedrijf_key
FROM prs_afdeling ab
WHERE b.prs_bedrijf_key = ab.prs_bedrijf_key);
-- Pas bestaande personen aan
UPDATE prs_perslid p
SET
(prs_afdeling_key,
prs_srtperslid_key,
prs_perslid_module,
prs_perslid_naam,
fac_profiel_key,
prs_perslid_email,
-- prs_perslid_oslogin, Nog maar even niet ivm meerdere bedrijven met hetzelfde mail adres.
prs_perslid_verwijder
) =
(SELECT prs_afdeling_key,
22,
'PRS',
prs_afdeling_omschrijving || DECODE (prs_afdeling_verwijder, NULL, '', '[' || to_char (prs_afdeling_verwijder, 'yyyymmdd') || ']'),
1,
prs_bedrijf_email,
-- prs_bedrijf_email,
prs_afdeling_verwijder
FROM prs_afdeling a, prs_bedrijf b
WHERE a.prs_afdeling_key = p.prs_afdeling_key
AND a.prs_bedrijf_key = b.prs_bedrijf_key)
WHERE prs_srtperslid_key = 22;
-- Voeg nieuwe personen toe
INSERT INTO prs_perslid (prs_afdeling_key,
prs_srtperslid_key,
prs_perslid_module,
prs_perslid_naam,
fac_profiel_key,
prs_perslid_email)
SELECT prs_afdeling_key,
22,
'PRS',
prs_afdeling_omschrijving || DECODE (prs_afdeling_verwijder, NULL, '', '[' || to_char (prs_afdeling_verwijder, 'yyyymmdd') || ']'),
1,
prs_bedrijf_email
FROM prs_afdeling a, prs_bedrijf b
WHERE a.prs_bedrijf_key = b.prs_bedrijf_key
AND b.prs_bedrijf_contract = 1
AND b.prs_bedrijf_verwijder IS NULL
AND a.prs_afdeling_verwijder IS NULL
AND NOT EXISTS (SELECT prs_perslid_key
FROM prs_perslid p
WHERE p.prs_afdeling_key = a.prs_afdeling_key);
-- Koppel personen aan de juiste autorisatie
-- 41 autorisatiegroep bewoners
-- 61 autorisatiegroep bedrijven
-- Kenmerk 1000 is kenmerk voor bewoners bij bedrijf (1 = bewoner)
INSERT INTO fac_gebruikersgroep (prs_perslid_key, fac_groep_key)
SELECT prs_perslid_key, DECODE (b.prs_kenmerklink_waarde, 1, 41, 61)
FROM prs_perslid p,
prs_v_afdeling a,
(SELECT prs_kenmerklink_waarde, prs_link_key
FROM prs_kenmerklink kl
WHERE kl.prs_kenmerk_key = 1000) b
WHERE p.prs_afdeling_key = a.prs_afdeling_key
AND a.prs_bedrijf_key = b.prs_link_key(+)
AND NOT EXISTS
(SELECT fac_gebruikersgroep_key
FROM fac_gebruikersgroep gg
WHERE gg.prs_perslid_key = p.prs_perslid_key
AND gg.fac_groep_key =
DECODE (b.prs_kenmerklink_waarde, 1, 41, 61));
END pche_select_daily_task;
/
CREATE OR REPLACE PROCEDURE pche_select_exact_common (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_betaling_periode IN NUMBER,
p_antedateerdagen IN NUMBER)
AS
CURSOR c_melding
IS
SELECT b.prs_leverancier_nr,
b.prs_bedrijf_naam,
COALESCE (
(SELECT prs_kenmerklink_waarde
FROM prs_kenmerklink
WHERE prs_kenmerklink_verwijder IS NULL
AND prs_link_key = prs_bedrijf_key
AND prs_kenmerk_key = 1020),
b.prs_bedrijf_email)
prs_bedrijf_email,
b.prs_bedrijf_key,
m.mld_melding_key,
c.cnt_contract_key,
m.mld_melding_opmerking,
DECODE (
k.mld_srtkenmerk_key,
29,
DECODE (
(SELECT fac_usrdata_upper
FROM fac_usrdata ud, mld_kenmerkmelding km
WHERE km.mld_melding_key = m.mld_melding_key
AND fac.safe_to_number (km.mld_kenmerkmelding_waarde) =
fac_usrdata_key
AND km.mld_kenmerk_key IN (1, 61) -- bedrijv / bewoners
),
'5DGN',
'200010',
'7DGN',
DECODE (std.mld_ins_discipline_key, 4, '200007', '200006'), -- bedrijv / bewoners
'N&W',
'200008',
'NACHT',
'200009',
'BULTJE',
'200012',
'REALTIME',
'200011'
),
'200013') -- borg
prs_kostensoort_refcode,
fac.safe_to_number (km.mld_kenmerkmelding_waarde * DECODE(k.mld_srtkenmerk_key, 241, ud.fac_usrdata_prijs , 1)) bedrag,
ROUND (
fac.safe_to_number (km.mld_kenmerkmelding_waarde * DECODE(k.mld_srtkenmerk_key, 241, ud.fac_usrdata_prijs , 1))
* fin_btwtabelwaarde_perc
/ (100 + fin_btwtabelwaarde_perc),
2)
btw,
fin_btwtabelwaarde_code,
fin_btwtabelwaarde_oms,
fin_btwtabelwaarde_perc,
fin_btwtabelwaarde_verlegd,
ud.fac_usrdata_omschr abtype,
(SELECT fac.safe_to_date(MAX(kmb.mld_kenmerkmelding_waarde), 'dd-mm-yyyy')
FROM mld_kenmerkmelding kmb
WHERE kmb.mld_melding_key = m.mld_melding_key
AND kmb.mld_kenmerk_key = 421) van,
(SELECT fac.safe_to_date(MAX(kme.mld_kenmerkmelding_waarde), 'dd-mm-yyyy')
FROM mld_kenmerkmelding kme
WHERE kme.mld_melding_key = m.mld_melding_key
AND kme.mld_kenmerk_key = 441) tot
FROM mld_melding m,
cnt_contract c,
prs_bedrijf b,
fin_btwtabelwaarde btw,
mld_kenmerkmelding km,
mld_kenmerk k,
mld_stdmelding std,
fac_usrdata ud,
mld_kenmerkmelding kmt,
mld_kenmerk kt
WHERE (SELECT fac.safe_to_number (mld_kenmerkmelding_waarde)
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key IN (28, 201) -- contract referentie / contract referentie alle (voor creditering)
AND km.mld_melding_key = m.mld_melding_key) = c.cnt_contract_key
AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
AND DECODE (k.mld_srtkenmerk_key, 29, 21, 0) = fin_btwtabelwaarde_perc -- normaal wel btw maar niet op borg
AND m.mld_melding_key = km.mld_melding_key
AND km.mld_kenmerk_key = k.mld_kenmerk_key
AND km.mld_kenmerkmelding_verwijder IS NULL
AND k.mld_srtkenmerk_key IN (29, 41, 241) -- te factureren bedrag / borg / aantal transacties
AND m.mld_melding_status = 5 -- afgemeld
AND m.mld_melding_indult = 0 -- melding is niet uitgesloten voor facturering
AND fac.safe_to_number (km.mld_kenmerkmelding_waarde) <> 0
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND kmt.mld_melding_key = m.mld_melding_key
AND kmt.mld_kenmerk_key = kt.mld_kenmerk_key
AND kt.mld_srtkenmerk_key IN (61, 1)
AND fac.safe_to_number (kmt.mld_kenmerkmelding_waarde) = ud.fac_usrdata_key
AND m.mld_melding_key NOT IN
(SELECT COALESCE(FAC.SAFE_TO_NUMBER(prs_kostenplaats_nr), -1) FROM fin_verkoopfactuur)
ORDER BY m.mld_melding_key;
CURSOR c_bestel
IS
SELECT boi.bes_bestelopdr_item_omschrijv,
bo.bes_bestelopdr_key,
bed.prs_bedrijf_key,
bed.prs_bedrijf_naam,
COALESCE (
(SELECT prs_kenmerklink_waarde
FROM prs_kenmerklink
WHERE prs_kenmerklink_verwijder IS NULL
AND prs_link_key = bed.prs_bedrijf_key
AND prs_kenmerk_key = 1020),
bed.prs_bedrijf_email)
prs_bedrijf_email,
k.prs_kostensoort_oms,
k.prs_kostensoort_opmerking,
k.prs_kostensoort_refcode,
boi.bes_bestelopdr_item_aantal,
boi.bes_bestelopdr_item_prijs,
btw.fin_btwtabelwaarde_code,
btw.fin_btwtabelwaarde_oms,
btw.fin_btwtabelwaarde_perc,
btw.fin_btwtabelwaarde_verlegd,
bed.prs_leverancier_nr,
boi.bes_bestelopdr_item_posnr
FROM bes_bestelling b,
prs_perslid p,
prs_v_afdeling a,
prs_bedrijf bed,
prs_kostensoort k,
bes_bestelling_item bi,
bes_bestelopdr_item boi,
bes_bestelopdr bo,
bes_srtdeel sd,
bes_srtgroep sg,
ins_tab_discipline d,
fin_btwtabelwaarde btw
WHERE b.prs_perslid_key = p.prs_perslid_key
AND p.prs_afdeling_key = a.prs_afdeling_key
AND b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key
AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
AND sg.ins_discipline_key = d.ins_discipline_key
AND d.prs_kostensoort_key = k.prs_kostensoort_key
AND sd.bes_srtdeel_btw = btw.fin_btwtabelwaarde_perc
AND a.prs_bedrijf_key = bed.prs_bedrijf_key
AND NOT EXISTS
(SELECT fin_verkoopfactuur_key
FROM fin_verkoopfactuur
WHERE fin_verkoopfactuur_xmlnode = 'bestelopdr'
AND bo.bes_bestelopdr_key = fin_verkoopfactuur_refkey)
AND bes_bestelopdr_status = 3;
CURSOR c_contract(c_betaling_periode NUMBER)
IS
SELECT abtype,
cnt_contract_key,
c.prs_bedrijf_key,
COALESCE (
(SELECT prs_kenmerklink_waarde
FROM prs_kenmerklink
WHERE prs_kenmerklink_verwijder IS NULL
AND prs_link_key = b.prs_bedrijf_key
AND prs_kenmerk_key = 1020),
b.prs_bedrijf_email)
prs_bedrijf_email,
bedrijf,
looptijd_van,
looptijd_tot,
ROUND (
aantal
* stuksprijs
* betaling_periode
* (1 - COALESCE (betaling_korting, 0) / 100 - COALESCE (contract_korting, 0) / 100),
2)
bedrag,
ROUND (
ROUND (
aantal
* stuksprijs
* betaling_periode
* (1 - COALESCE (betaling_korting, 0) / 100 - COALESCE (contract_korting, 0) / 100),
2)
* fin_btwtabelwaarde_perc
/ (100 + fin_btwtabelwaarde_perc),
2)
btw,
fin_btwtabelwaarde_code,
fin_btwtabelwaarde_oms,
fin_btwtabelwaarde_perc,
fin_btwtabelwaarde_verlegd,
debiteur,
aantal,
COALESCE (betaling_korting, 0) betaling_korting,
betaling,
COALESCE (contract_korting, 0) contract_korting,
betaling_periode,
prs_kostensoort_refcode,
( SELECT pa.pasnrs
FROM pche_v_pasnrs pa
WHERE c.cnt_contract_key = pa.cnt_contract_key) pasnrs
FROM (SELECT DISTINCT debiteur,
bedrijf,
prs_bedrijf_key,
contract,
cnt_contract_key,
looptijd_van,
looptijd_tot,
'Werkdagen abonnement' abtype,
dgn5 aantal,
betaling,
betaling_korting,
betaling_periode,
p_dgn5 stuksprijs,
contract_korting,
'200010' prs_kostensoort_refcode
FROM pche_v_contract_gegevens
WHERE dgn5 IS NOT NULL
UNION ALL
SELECT DISTINCT debiteur,
bedrijf,
prs_bedrijf_key,
contract,
cnt_contract_key,
looptijd_van,
looptijd_tot,
'24/7 abonnement' abtype,
dgn7 aantal,
betaling,
betaling_korting,
betaling_periode,
p_dgn7 stuksprijs,
contract_korting,
DECODE (bewoner, 1, '200006', '200007') prs_kostensoort_refcode
FROM pche_v_contract_gegevens
WHERE dgn7 IS NOT NULL
UNION ALL
SELECT DISTINCT debiteur,
bedrijf,
prs_bedrijf_key,
contract,
cnt_contract_key,
looptijd_van,
looptijd_tot,
'Nacht abonnement' abtype,
nacht aantal,
betaling,
betaling_korting,
betaling_periode,
p_nacht stuksprijs,
contract_korting,
'200009' prs_kostensoort_refcode
FROM pche_v_contract_gegevens
WHERE nacht IS NOT NULL
UNION ALL
SELECT DISTINCT debiteur,
bedrijf,
prs_bedrijf_key,
contract,
cnt_contract_key,
looptijd_van,
looptijd_tot,
'Nacht- en Weekend abonnement' abtype,
nachtweekend aantal,
betaling,
betaling_korting,
betaling_periode,
p_nachtweekend stuksprijs,
contract_korting,
'200008' prs_kostensoort_refcode
FROM pche_v_contract_gegevens
WHERE nachtweekend IS NOT NULL
UNION ALL
SELECT DISTINCT debiteur,
bedrijf,
prs_bedrijf_key,
contract,
cnt_contract_key,
looptijd_van,
looptijd_tot,
'Strijp-S Bultje abonnement' abtype,
bultje aantal,
betaling,
betaling_korting,
betaling_periode,
p_bultje stuksprijs,
contract_korting,
'200012' prs_kostensoort_refcode
FROM pche_v_contract_gegevens
WHERE bultje IS NOT NULL) c,
fin_btwtabelwaarde btw,
prs_bedrijf b
WHERE btw.fin_btwtabelwaarde_perc = 21
AND p_betaling_periode = betaling_periode
AND c.prs_bedrijf_key = b.prs_bedrijf_key
ORDER BY cnt_contract_key;
v_factuur_key NUMBER;
v_bestelopdr_key NUMBER;
v_melding_key NUMBER;
v_contract_key NUMBER;
v_factuurregel_nr NUMBER;
v_verkoopfactuurkop_key NUMBER;
v_pdf_naam VARCHAR2(200);
v_begin DATE;
v_eind DATE;
BEGIN
SELECT COALESCE(MAX (FAC.SAFE_TO_NUMBER(fin_verkoopfactuurkop_id)),0)
INTO v_factuur_key
FROM fin_verkoopfactuurkop;
v_bestelopdr_key := -1;
v_contract_key := -1;
v_melding_key := -1;
IF p_betaling_periode = 0 THEN -- alleen uitvoeren als het geen periode facturatie is.
-- verwijder nog niet geexporteerde meldingen
DELETE fin_verkoopfactuur
WHERE fin_verkoopfactuur_xmlnode = 'contract'
AND prs_kostenplaats_nr IS NOT NULL -- referentie naar melding. Is dus mutatie op contract.
AND fin_verkoopfactuur_d2 IS NULL; -- Nog niet naar Exact ge<67>xporteerd.
FOR rec IN c_melding
LOOP
IF rec.mld_melding_key <> v_melding_key
THEN
v_factuurregel_nr := 1;
v_factuur_key := v_factuur_key + 1;
INSERT INTO fin_verkoopfactuurkop (fin_verkoopfactuurkop_id) VALUES (TO_CHAR (v_factuur_key))
RETURNING fin_verkoopfactuurkop_key INTO v_verkoopfactuurkop_key;
v_pdf_naam := 'Factuur_' || TO_CHAR (v_factuur_key) || '_' || DBMS_RANDOM.string ('a', 32) || '.pdf';
ELSE
v_factuurregel_nr := v_factuurregel_nr + 1;
END IF;
-- fin_verkoopfactuur_d1 = datum betaald
INSERT INTO fin_verkoopfactuur (fin_verkoopfactuurkop_key,
fin_verkoopfactuur_id, -- factuurnummer zoals deze naar de klant gaat
fin_verkoopfactuur_datum, -- datum afgesproken met PCHE voor bestellingen is dat de sysdate
fin_verkoopfactuur_omschr, -- factuurregelomschrijving is artikelregel
fin_verkoopfactuur_xmlnode, -- bestelopdr
fin_verkoopfactuur_refkey, -- bes_bestelopdr_key
prs_bedrijf_key, -- bedrijf van de aanvrager
prs_debiteur_naam, -- prs_bedrijf_naam
fin_verkoopfactuur_bedrag,
fin_verkoopfactuur_btw,
fin_btwtabelwaarde_code,
fin_btwtabelwaarde_oms,
fin_btwtabelwaarde_perc,
fin_btwtabelwaarde_verlegd,
prs_kostensoort_oms,
prs_kostensoort_opmerking,
prs_kostensoort_refcode,
prs_kostenplaats_nr, -- LET OP: melding key als referentie naar de melding
fin_verkoopfactuur_maand,
fin_verkoopfactuur_c1, -- prs_leverancier_nr
fin_verkoopfactuur_c2, -- prs_bedrijf_email
fin_verkoopfactuur_c4, -- abonnementstype
fin_verkoopfactuur_c5, -- filenaam van de PDF
fin_verkoopfactuur_n1, -- bestelregel volgnummer
fin_verkoopfactuur_n2, -- aantal
fin_verkoopfactuur_d3, -- begin periode
fin_verkoopfactuur_d4) -- einde periode
VALUES (v_verkoopfactuurkop_key,
TO_CHAR (v_factuur_key),
SYSDATE,
rec.mld_melding_opmerking,
'contract',
rec.cnt_contract_key,
rec.prs_bedrijf_key,
rec.prs_bedrijf_naam,
rec.bedrag - rec.btw,
rec.btw,
rec.fin_btwtabelwaarde_code,
rec.fin_btwtabelwaarde_oms,
rec.fin_btwtabelwaarde_perc,
rec.fin_btwtabelwaarde_verlegd,
NULL,
NULL,
rec.prs_kostensoort_refcode,
TO_CHAR(rec.mld_melding_key),
TO_CHAR (SYSDATE, 'yyyymm'),
rec.prs_leverancier_nr,
rec.prs_bedrijf_email,
rec.abtype,
v_pdf_naam,
v_factuurregel_nr,
NULL,
rec.van,
rec.tot);
v_melding_key := rec.mld_melding_key;
END LOOP;
-- verwijder nog niet geexporteerde bestellingen
DELETE fin_verkoopfactuur
WHERE fin_verkoopfactuur_xmlnode = 'bestelopdr'
AND fin_verkoopfactuur_d2 IS NULL; -- Nog niet naar Exact ge<67>xporteerd.
FOR rec IN c_bestel
LOOP
IF rec.bes_bestelopdr_key <> v_bestelopdr_key
THEN
v_factuur_key := v_factuur_key + 1;
INSERT INTO fin_verkoopfactuurkop (fin_verkoopfactuurkop_id) VALUES (TO_CHAR (v_factuur_key))
RETURNING fin_verkoopfactuurkop_key INTO v_verkoopfactuurkop_key;
v_pdf_naam := 'Factuur_' || TO_CHAR (v_factuur_key) || '_' || DBMS_RANDOM.string ('a', 32) || '.pdf';
END IF;
-- fin_verkoopfactuur_d1 = datum betaald
INSERT INTO fin_verkoopfactuur (fin_verkoopfactuurkop_key,
fin_verkoopfactuur_id, -- factuurnummer zoals deze naar de klant gaat
fin_verkoopfactuur_datum, -- datum afgesproken met PCHE voor bestellingen is dat de sysdate
fin_verkoopfactuur_omschr, -- factuurregelomschrijving is artikelregel
fin_verkoopfactuur_xmlnode, -- bestelopdr
fin_verkoopfactuur_refkey, -- bes_bestelopdr_key
prs_bedrijf_key, -- bedrijf van de aanvrager
prs_debiteur_naam, -- prs_bedrijf_naam
fin_verkoopfactuur_bedrag,
fin_verkoopfactuur_btw,
fin_btwtabelwaarde_code,
fin_btwtabelwaarde_oms,
fin_btwtabelwaarde_perc,
fin_btwtabelwaarde_verlegd,
prs_kostensoort_oms,
prs_kostensoort_opmerking,
prs_kostensoort_refcode,
fin_verkoopfactuur_maand,
fin_verkoopfactuur_c1, -- prs_leverancier_nr
fin_verkoopfactuur_c2, -- prs_bedrijf_email
fin_verkoopfactuur_c5, -- filenaam van de PDF
fin_verkoopfactuur_n1, -- bestelregel volgnummer
fin_verkoopfactuur_n2) -- aantal
VALUES (v_verkoopfactuurkop_key,
TO_CHAR (v_factuur_key),
SYSDATE,
rec.bes_bestelopdr_item_omschrijv,
'bestelopdr',
rec.bes_bestelopdr_key,
rec.prs_bedrijf_key,
rec.prs_bedrijf_naam,
rec.bes_bestelopdr_item_aantal
* rec.bes_bestelopdr_item_prijs
/ (1 + rec.fin_btwtabelwaarde_perc / 100),
( rec.bes_bestelopdr_item_aantal
* rec.bes_bestelopdr_item_prijs
* rec.fin_btwtabelwaarde_perc
/ 100)
/ (1 + rec.fin_btwtabelwaarde_perc / 100),
rec.fin_btwtabelwaarde_code,
rec.fin_btwtabelwaarde_oms,
rec.fin_btwtabelwaarde_perc,
rec.fin_btwtabelwaarde_verlegd,
rec.prs_kostensoort_oms,
rec.prs_kostensoort_opmerking,
rec.prs_kostensoort_refcode,
TO_CHAR (SYSDATE, 'yyyymm'),
rec.prs_leverancier_nr,
rec.prs_bedrijf_email,
v_pdf_naam,
rec.bes_bestelopdr_item_posnr,
rec.bes_bestelopdr_item_aantal);
v_bestelopdr_key := rec.bes_bestelopdr_key;
END LOOP;
ELSE
-- verwijder nog niet geexporteerde contracten van deze betalingsperiode
DELETE fin_verkoopfactuur
WHERE fin_verkoopfactuur_xmlnode = 'contract'
AND prs_kostenplaats_nr IS NULL -- geen mutaties op contract
AND fin_verkoopfactuur_c3 = DECODE(p_betaling_periode, 1, 'M', 3, 'Q', 12, 'Y', '')
AND fin_verkoopfactuur_d2 IS NULL; -- Nog niet naar Exact ge<67>xporteerd.
FOR rec IN c_contract(p_betaling_periode)
LOOP
IF rec.cnt_contract_key <> v_contract_key
THEN
v_factuur_key := v_factuur_key + 1;
v_factuurregel_nr := 1;
INSERT INTO fin_verkoopfactuurkop (fin_verkoopfactuurkop_id) VALUES (TO_CHAR (v_factuur_key))
RETURNING fin_verkoopfactuurkop_key INTO v_verkoopfactuurkop_key;
v_pdf_naam := 'Factuur_' || TO_CHAR (v_factuur_key) || '_' || DBMS_RANDOM.string ('a', 32) || '.pdf';
ELSE
v_factuurregel_nr := v_factuurregel_nr + 1;
END IF;
-- fin_verkoopfactuur_d1 = datum betaald
-- bereken de periode
v_begin := ADD_MONTHS (TRUNC (SYSDATE - p_antedateerdagen, 'MM'), 1);
IF rec.betaling_periode = 1
THEN -- betaling per maand
v_begin := ADD_MONTHS (TRUNC (SYSDATE - p_antedateerdagen, 'MM'), 1);
v_eind := ADD_MONTHS (v_begin, 1) - 1;
ELSIF rec.betaling_periode = 3
THEN -- betaling per kwartaal
v_begin := ADD_MONTHS (TRUNC (SYSDATE - p_antedateerdagen, 'Q'), 3);
v_eind := ADD_MONTHS (v_begin, 3) - 1;
ELSE -- betaling per maand
v_begin := ADD_MONTHS (TRUNC (SYSDATE - p_antedateerdagen, 'Y'), 12);
v_eind := ADD_MONTHS (v_begin, 12) - 1;
END IF;
-- we gaan het contract alleen factureren als de factureringstermijn volledig binnen het contract valt.
IF rec.looptijd_van < v_eind
AND rec.looptijd_tot > v_begin
THEN
INSERT INTO fin_verkoopfactuur (fin_verkoopfactuurkop_key,
fin_verkoopfactuur_id, -- factuurnummer zoals deze naar de klant gaat
fin_verkoopfactuur_datum, -- datum afgesproken met PCHE voor bestellingen is dat de sysdate
fin_verkoopfactuur_omschr, -- factuurregelomschrijving is artikelregel
fin_verkoopfactuur_xmlnode, -- bestelopdr
fin_verkoopfactuur_refkey, -- bes_bestelopdr_key
prs_bedrijf_key, -- bedrijf van de aanvrager
prs_debiteur_naam, -- prs_bedrijf_naam
fin_verkoopfactuur_bedrag,
fin_verkoopfactuur_btw,
fin_btwtabelwaarde_code,
fin_btwtabelwaarde_oms,
fin_btwtabelwaarde_perc,
fin_btwtabelwaarde_verlegd,
prs_kostensoort_refcode,
fin_verkoopfactuur_maand,
fin_verkoopfactuur_c1, -- prs_leverancier_nr
fin_verkoopfactuur_c2, -- prs_bedrijf_email
fin_verkoopfactuur_c3, -- betalingsperiode (M, Q, Y)
fin_verkoopfactuur_c5, -- filenaam van de PDF
fin_verkoopfactuur_c7, -- lijst met pasnummers
fin_verkoopfactuur_n1, -- bestelregel volgnummer
fin_verkoopfactuur_n2, -- aantal
fin_verkoopfactuur_n4, -- korting betaaltermijn
fin_verkoopfactuur_n5, -- korting contract
fin_verkoopfactuur_d3, -- begin periode
fin_verkoopfactuur_d4) -- einde periode
VALUES (v_verkoopfactuurkop_key,
TO_CHAR (v_factuur_key),
SYSDATE,
rec.abtype,
'contract',
rec.cnt_contract_key,
rec.prs_bedrijf_key,
rec.bedrijf,
rec.bedrag - rec.btw, -- netto bedrag zonder btw
rec.btw,
rec.fin_btwtabelwaarde_code,
rec.fin_btwtabelwaarde_oms,
rec.fin_btwtabelwaarde_perc,
rec.fin_btwtabelwaarde_verlegd,
rec.prs_kostensoort_refcode,
TO_CHAR (v_begin, 'yyyymm'),
rec.debiteur,
rec.prs_bedrijf_email,
DECODE(p_betaling_periode, 1, 'M', 3, 'Q', 12, 'Y', ''),
v_pdf_naam,
rec.pasnrs,
v_factuurregel_nr,
rec.aantal,
rec.betaling_korting,
rec.contract_korting,
v_begin,
v_eind);
v_contract_key := rec.cnt_contract_key;
ELSE
NULL;
-- Voorlopig even niets doen.
-- fac.writelog (p_applname, 'E', 'Gevonden contract niet binnen facturatietermijn: ' || rec.cnt_contract_key || ' (' || rec.bedrijf || ')', '');
END IF;
END LOOP;
END IF;
COMMIT;
END;
/
CREATE OR REPLACE PROCEDURE pche_select_exact (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
BEGIN
pche_select_exact_common (p_applname, p_applrun, 0, 0);
END;
/
CREATE OR REPLACE PROCEDURE pche_select_exact_jaar (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
BEGIN
pche_select_exact_common (p_applname, p_applrun, 12, 0);
END;
/
CREATE OR REPLACE PROCEDURE pche_select_exact_kwartaal (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
BEGIN
pche_select_exact_common (p_applname, p_applrun, 3, 0);
END;
/
CREATE OR REPLACE PROCEDURE pche_select_exact_maand (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
BEGIN
pche_select_exact_common (p_applname, p_applrun, 1, 0);
END;
/
--
-- Export van verkoopfacturen. Dit zijn facturen die in de tabel fin_verkoopfacturen staan maar die de
-- datum export fin_verkoopfactuur_d2 leeg hebben
CREATE OR REPLACE VIEW pche_v_exact_verkoopgegevens
(
factuur_omschrijving,
referentie,
fin_verkoopfactuur_key,
fin_verkoopfactuur_id,
fin_verkoopfactuur_c1,
fin_verkoopfactuur_n1,
fin_verkoopfactuur_n2,
fin_verkoopfactuur_omschr,
fin_verkoopfactuur_bedrag,
prs_kostensoort_refcode,
fin_btwtabelwaarde_code,
fin_verkoopfactuur_datum,
prs_kostenplaats_nr
)
AS
SELECT DECODE (
fin_verkoopfactuur_xmlnode,
'bestelopdr',
'Bestelling waardekaarten',
'contract',
DECODE (
prs_kostenplaats_nr,
NULL, 'Ab' || TO_CHAR (fin_verkoopfactuur_d3, 'dd-mm-yy') || '/' || TO_CHAR (fin_verkoopfactuur_d4, 'dd-mm-yy'),
DECODE(fin_verkoopfactuur_c4, 'Realtime abonnement', 'Rt' || TO_CHAR (fin_verkoopfactuur_d3, 'dd-mm-yy') || '/' || TO_CHAR (fin_verkoopfactuur_d4, 'dd-mm-yy'),
'Abonnement mutatie')
)
)
factuur_omschrijving,
DECODE (
prs_kostenplaats_nr,
NULL,
DECODE (
fin_verkoopfactuur_xmlnode,
'contract',
'C' || fin_verkoopfactuur_refkey,
'B'
|| (SELECT SUBSTR (bes_bestelopdr_id,
1,
INSTR (bes_bestelopdr_id, '/') - 1)
FROM bes_bestelopdr bo
WHERE bo.bes_bestelopdr_key = fin_verkoopfactuur_refkey)),
'M' || prs_kostenplaats_nr)
referentie,
fin_verkoopfactuur_key,
fin_verkoopfactuur_id,
fin_verkoopfactuur_c1, -- debiteurnr
fin_verkoopfactuur_n1, -- factuurregelnr
fin_verkoopfactuur_n2, -- aantal
fin_verkoopfactuur_omschr,
fin_verkoopfactuur_bedrag,
prs_kostensoort_refcode,
fin_btwtabelwaarde_code,
fin_verkoopfactuur_datum,
prs_kostenplaats_nr
FROM fin_verkoopfactuur v
WHERE fin_verkoopfactuur_d2 IS NULL;
-- Procedure om alle verkoopfacturen te exporteren naar exact.
CREATE OR REPLACE PROCEDURE pche_select_exact_output (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
CURSOR c
IS
SELECT factuur_omschrijving,
fin_verkoopfactuur_id,
fin_verkoopfactuur_c1,
fin_verkoopfactuur_datum,
referentie,
sum(fin_verkoopfactuur_bedrag) bedrag
FROM pche_v_exact_verkoopgegevens
GROUP BY factuur_omschrijving,
fin_verkoopfactuur_id,
fin_verkoopfactuur_c1,
fin_verkoopfactuur_datum,
referentie
ORDER BY fin_verkoopfactuur_id;
CURSOR c_sub (c_verkoopfactuur_id VARCHAR2)
IS
SELECT *
FROM pche_v_exact_verkoopgegevens
WHERE fin_verkoopfactuur_id = c_verkoopfactuur_id
ORDER BY fin_verkoopfactuur_n1;
CURSOR c_noti
IS
SELECT vk.fin_verkoopfactuurkop_key, vk.fin_verkoopfactuurkop_id, fin_verkoopfactuur_c2,fin_verkoopfactuur_c5
FROM fin_verkoopfactuur v, fin_verkoopfactuurkop vk
WHERE v.fin_verkoopfactuurkop_key = vk.fin_verkoopfactuurkop_key
AND v.fin_verkoopfactuur_d5 IS NULL
GROUP BY vk.fin_verkoopfactuurkop_key, vk.fin_verkoopfactuurkop_id, fin_verkoopfactuur_c2, fin_verkoopfactuur_c5;
v_bestand VARCHAR2(12);
v_bedrag_txt VARCHAR2(12);
v_sub_count NUMBER;
BEGIN
v_bestand := SUBSTR (p_applname, 1, 12);
-- facturen verzenden.
FOR rec IN c_noti
LOOP
BEGIN
-- CUST01 notificatie heeft key 181
-- Datum van de notificatie wordt op middernacht gezet om er voor te zorgen dat na kantooruren de pdf generatie
-- kan plaatsvinden.
INSERT INTO fac_notificatie (fac_srtnotificatie_key,
fac_notificatie_status,
fac_notificatie_receiver_email,
fac_notificatie_oms,
fac_notificatie_refkey,
fac_notificatie_prioriteit,
fac_notificatie_attachments,
fac_notificatie_datum)
VALUES (181,
2, -- mail
rec.fin_verkoopfactuur_c2, -- email
'Factuur parking Strijp-S',
rec.fin_verkoopfactuurkop_key,
2,
'/../../Fplace5i/CUST/PCHE/export/PDF/' || rec.fin_verkoopfactuur_c5,
TRUNC(SYSDATE)+1);
UPDATE fin_verkoopfactuur
SET fin_verkoopfactuur_d5 = SYSDATE
WHERE fin_verkoopfactuurkop_key = rec.fin_verkoopfactuurkop_key;
EXCEPTION WHEN OTHERS
THEN
fac.writelog (p_applname, 'E', 'Overwachte fout bij notificeren: ' || rec.fin_verkoopfactuurkop_key || ' (' || rec.fin_verkoopfactuur_c2 || ')', '');
END;
END LOOP;
-- Eerst opruiming
DELETE FROM imp_log
WHERE imp_log_applicatie = p_applname;
DELETE fac_rapport
WHERE fac_rapport_node = v_bestand;
-- header
pchx.add_xml_row (v_bestand,
'<?xml version="1.0" encoding="windows-1252"?>');
pchx.add_xml_row (v_bestand, '<eExact>');
pchx.add_xml_row (v_bestand, '<GLEntries>');
FOR rec IN c
LOOP
BEGIN
pchx.add_xml_row (v_bestand, '<GLEntry status="E" entry="' || rec.fin_verkoopfactuur_id || '">');
pchx.add_xml_row (v_bestand, '<Division code="250"/>');
pchx.add_xml_element (v_bestand,
'Description',
xml.char_to_html(SUBSTR(rec.factuur_omschrijving,1,20)));
pchx.add_xml_element (v_bestand, 'Date', TO_CHAR(rec.fin_verkoopfactuur_datum, 'YYYY-MM-DD'));
pchx.add_xml_element (v_bestand, 'DocumentDate', TO_CHAR(SYSDATE, 'YYYY-MM-DD') );
pchx.add_xml_row (v_bestand, '<Journal type="V" code="57">');
pchx.add_xml_element (v_bestand, 'Description', 'Verkoopboek');
pchx.add_xml_row (v_bestand, '<GLAccount code="110003" type="B" side="D" subtype="D">');
pchx.add_xml_element (v_bestand, 'Description', 'Omzet debiteuren');
pchx.add_xml_row (v_bestand, '</GLAccount>');
pchx.add_xml_row (v_bestand, '</Journal>');
pchx.add_xml_row (v_bestand, '<Costcenter code="1260"/>');
pchx.add_xml_row (v_bestand, '<Amount>');
pchx.add_xml_row (v_bestand, '<Currency code="EUR"/>');
v_bedrag_txt := REPLACE (TO_CHAR (rec.bedrag), ',', '.');
pchx.add_xml_element (v_bestand, 'Value', v_bedrag_txt);
pchx.add_xml_row (v_bestand, '</Amount>');
v_sub_count := 1;
FOR rec1 IN c_sub (rec.fin_verkoopfactuur_id)
LOOP
BEGIN
pchx.add_xml_row (v_bestand, '<FinEntryLine number="' || v_sub_count || '" subtype="K" type="N">');
pchx.add_xml_element (v_bestand, 'Date', TO_CHAR(rec1.fin_verkoopfactuur_datum, 'YYYY-MM-DD'));
pchx.add_xml_row (v_bestand, '<GLAccount code="' || xml.char_to_html(rec1.prs_kostensoort_refcode) || '"/>');
pchx.add_xml_element (v_bestand,
'Description',
xml.char_to_html(SUBSTR(rec1.fin_verkoopfactuur_omschr,1,60)));
pchx.add_xml_row (v_bestand, '<Costcenter code="1260"/>');
pchx.add_xml_row (v_bestand, '<Debtor code="' || xml.char_to_html(rec1.fin_verkoopfactuur_c1) || '"/>');
pchx.add_xml_row (v_bestand, '<Item code="' || xml.char_to_html(rec1.prs_kostensoort_refcode) || '"/>');
pchx.add_xml_row (v_bestand, '<Amount>');
pchx.add_xml_row (v_bestand, '<Currency code="EUR"/>');
v_bedrag_txt := REPLACE (TO_CHAR (rec1.fin_verkoopfactuur_bedrag), ',', '.');
pchx.add_xml_element (v_bestand, 'Credit', v_bedrag_txt);
pchx.add_xml_row (v_bestand, '<VAT code="' || xml.char_to_html(rec1.fin_btwtabelwaarde_code) || '"/>');
pchx.add_xml_row (v_bestand, '</Amount>');
pchx.add_xml_row (v_bestand, '</FinEntryLine>');
v_sub_count := v_sub_count + 1;
-- markeer in de verkoopfactuuradministratie dat deze verkoopfactuur geexporteerd is naar Exact
UPDATE fin_verkoopfactuur
SET fin_verkoopfactuur_d2 = SYSDATE
WHERE fin_verkoopfactuur_key = rec1.fin_verkoopfactuur_key;
-- Zet de melding op verwerkt. Nu de factuur aangemaakt is mag hier toch niets meer aan gewijzigd worden.
IF rec1.prs_kostenplaats_nr IS NOT NULL
THEN
MLD.setmeldingstatus (fac.safe_to_number(rec1.prs_kostenplaats_nr), 6, NULL);
END IF;
END;
END LOOP;
pchx.add_xml_row (v_bestand, '</GLEntry>');
END;
END LOOP;
pchx.add_xml_row (v_bestand, '</GLEntries>');
pchx.add_xml_row (v_bestand, '</eExact>');
END;
/
CREATE OR REPLACE VIEW pche_v_export_exact_output (
result,
result_order
)
AS
SELECT fac_rapport_regel, fac_rapport_volgnr
FROM fac_rapport
WHERE fac_rapport_node = 'EXACT_OUTPUT';
CREATE OR REPLACE PROCEDURE pche_select_annuleer_factuur (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
BEGIN
-- We ondersteunen alleen het annuleren van periodieke facturen op
-- contracten. Dus maand, kwartaal of jaarfacturen.
DELETE fin_verkoopfactuur
WHERE fin_verkoopfactuur_key IN
(SELECT fin_verkoopfactuur_key
FROM fac_notificatie n, fin_verkoopfactuur v
WHERE n.fac_notificatie_refkey = fin_verkoopfactuurkop_key
AND fin_verkoopfactuur_xmlnode = 'contract'
AND prs_kostenplaats_nr IS NULL
AND fac_srtnotificatie_key = 181);
-- srtnotificatie 181 = CUST01
DELETE fac_notificatie n
WHERE fac_srtnotificatie_key = 181
AND NOT EXISTS (SELECT fin_verkoopfactuur_key
FROM fin_verkoopfactuur
WHERE n.fac_notificatie_refkey = fin_verkoopfactuurkop_key);
DELETE fin_verkoopfactuurkop vk
WHERE NOT EXISTS (SELECT fin_verkoopfactuurkop_key
FROM fin_verkoopfactuur v
WHERE vk.fin_verkoopfactuurkop_key = v.fin_verkoopfactuurkop_key);
END;
/
CREATE OR REPLACE PROCEDURE pche_select_exact_debtor (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
CURSOR c
IS
select * from prs_bedrijf where prs_leverancier_nr is not null;
v_bestand VARCHAR2(12);
v_sub_count NUMBER;
BEGIN
v_bestand := SUBSTR (p_applname, 1, 12);
-- Eerst opruiming
DELETE FROM imp_log
WHERE imp_log_applicatie = p_applname;
DELETE fac_rapport
WHERE fac_rapport_node = v_bestand;
-- header
pchx.add_xml_row (v_bestand,
'<?xml version="1.0" encoding="windows-1252"?>');
pchx.add_xml_row (v_bestand, '<eExact>');
pchx.add_xml_row (v_bestand, '<Accounts>');
FOR rec IN c
LOOP
BEGIN
pchx.add_xml_row (v_bestand, '<Account code=" ' || rec.prs_leverancier_nr || '" status="A" type="C">');
pchx.add_xml_element (v_bestand, 'Name', rec.prs_bedrijf_naam);
pchx.add_xml_element (v_bestand, 'Phone', rec.prs_bedrijf_telefoon);
pchx.add_xml_element (v_bestand, 'Fax', rec.prs_bedrijf_fax);
pchx.add_xml_element (v_bestand, 'Email', rec.prs_bedrijf_email);
pchx.add_xml_row (v_bestand, '<Contacts>');
pchx.add_xml_row (v_bestand, '<Contact default="1" gender="M" status="A">');
pchx.add_xml_row (v_bestand, '<Addresses>');
pchx.add_xml_row (v_bestand, '<Address type="D" desc="">');
pchx.add_xml_element (v_bestand, 'AddressLine1', rec.prs_bedrijf_bezoek_adres);
pchx.add_xml_element (v_bestand, 'PostalCode', rec.prs_bedrijf_bezoek_postcode);
pchx.add_xml_element (v_bestand, 'City', rec.prs_bedrijf_bezoek_plaats);
pchx.add_xml_row (v_bestand, '</Address>');
pchx.add_xml_row (v_bestand, '<Address type="I" desc="">');
pchx.add_xml_element (v_bestand, 'AddressLine1', rec.prs_bedrijf_post_adres);
pchx.add_xml_element (v_bestand, 'PostalCode', rec.prs_bedrijf_post_postcode);
pchx.add_xml_element (v_bestand, 'City', rec.prs_bedrijf_post_plaats);
pchx.add_xml_row (v_bestand, '</Address>');
pchx.add_xml_row (v_bestand, '</Addresses>');
pchx.add_xml_row (v_bestand, '</Contact>');
pchx.add_xml_row (v_bestand, '</Contacts>');
pchx.add_xml_row (v_bestand, '<Debtor number="300657" code="' || rec.prs_leverancier_nr || '">');
pchx.add_xml_row (v_bestand, '<GLCentralization code=" 110003" side="D" type="B" subtype="D">');
pchx.add_xml_element (v_bestand, 'Description', 'Exoloitatie debiteuren Strijp S');
pchx.add_xml_row (v_bestand, '</GLCentralization>');
pchx.add_xml_row (v_bestand, '</Debtor>');
pchx.add_xml_row (v_bestand, '<PaymentCondition code="00" type="9" type1="1" surcharge="B" method="B" invoicing="B" installments="0"/>');
pchx.add_xml_row (v_bestand, '<AccountCategory code="STR">');
pchx.add_xml_element (v_bestand, 'Description', 'Exoloitatie Strijp S');
pchx.add_xml_row (v_bestand, '</AccountCategory>');
pchx.add_xml_row (v_bestand, '</Account>');
END;
END LOOP;
pchx.add_xml_row (v_bestand, '</Accounts>');
pchx.add_xml_row (v_bestand, '</eExact>');
END;
/
CREATE OR REPLACE VIEW pche_v_export_exact_debtor (
result,
result_order
)
AS
SELECT fac_rapport_regel, fac_rapport_volgnr
FROM fac_rapport
WHERE fac_rapport_node = 'EXACT_DEBTOR';
-- export om bat file aan te maken die de PDF bestanden genereerd. Deze export moet voor middernacht gedraaid worden omdat daarna
-- de notificaties vanuit de putorders verstuurd worden.
CREATE OR REPLACE VIEW pche_v_export_pdf_att
(
result,
result_order
)
AS
SELECT DISTINCT
'call genereer1fin_vk_pdf.bat '
|| v.fin_verkoopfactuurkop_key
|| ' '
|| vk.fin_verkoopfactuur_c5,
v.fin_verkoopfactuurkop_key
FROM fin_verkoopfactuurkop v, fin_verkoopfactuur vk, fac_notificatie n
WHERE n.fac_srtnotificatie_key = 181 -- notificatie verkoopfacturen
AND vk.fin_verkoopfactuurkop_key = v.fin_verkoopfactuurkop_key
AND n.fac_notificatie_refkey = vk.fin_verkoopfactuurkop_key;
-- view om contractinformatie in de portal te laten zien
CREATE OR REPLACE VIEW pche_v_mijn_contracten
(
prs_perslid_key,
contract,
looptijd_van,
looptijd_tot,
dgn5,
dgn7,
nacht,
nachtweekend,
bultje,
betaling,
betaling_korting,
betaling_periode,
p_dgn5,
p_dgn7,
p_nacht,
p_nachtweekend,
p_bultje,
contract_korting,
aantal_passen,
pasnrs
)
AS
SELECT prs_perslid_key,
contract,
looptijd_van,
looptijd_tot,
dgn5,
dgn7,
nacht,
nachtweekend,
bultje,
betaling,
betaling_korting,
betaling_periode,
p_dgn5,
p_dgn7,
p_nacht,
p_nachtweekend,
p_bultje,
contract_korting,
aantal_passen,
pn.pasnrs
FROM pche_v_contract_gegevens cg,
prs_perslid p,
prs_v_afdeling a,
pche_v_pasnrs pn
WHERE p.prs_afdeling_key = a.prs_afdeling_key
AND a.prs_bedrijf_key = cg.prs_bedrijf_key
AND cg.cnt_contract_key = pn.cnt_contract_key;
CREATE OR REPLACE VIEW pche_v_verkoopfactuur
AS
SELECT fin_verkoopfactuur_key,
fin_verkoopfactuur_aanmaak,
fin_verkoopfactuur_id,
fin_verkoopfactuur_datum,
fin_verkoopfactuur_omschr,
fin_verkoopfactuur_xmlnode,
fin_verkoopfactuur_refkey,
prs_kostenplaats_nr mutatie_ref,
prs_kostensoort_refcode grootboeknr,
prs_debiteur_naam,
prs_bedrijf_key,
fin_verkoopfactuur_bedrag,
fin_verkoopfactuur_btw,
fin_btwtabelwaarde_code,
fin_btwtabelwaarde_oms,
fin_btwtabelwaarde_perc,
fin_verkoopfactuur_maand,
fin_verkoopfactuur_n1 regel_volgnr,
fin_verkoopfactuur_n2 aantal,
fin_verkoopfactuur_n3 betaald_bedrag,
fin_verkoopfactuur_n4 korting_betalingstermijn,
fin_verkoopfactuur_n5 korting_contract,
fin_verkoopfactuur_c1 debiteurnummer,
fin_verkoopfactuur_c2 email,
fin_verkoopfactuur_c3 periode,
fin_verkoopfactuur_c7 pasnummers,
fin_verkoopfactuur_d1 volledig_betaald,
fin_verkoopfactuur_d2 factuur_naar_exact,
fin_verkoopfactuur_d3 van,
fin_verkoopfactuur_d4 tot,
fin_verkoopfactuur_d5 factuur_naar_deb,
'<a class="details" onclick=''FcltMgr.openDetail("'
|| 'cust/pche/export/pdf/' || fin_verkoopfactuur_c5
|| '")''>'
|| 'pdf'
|| '</a>'
html_pdf,
DECODE(fin_verkoopfactuur_d1, NULL, 'NEE', 'JA') volledig_betaald_jn
FROM fin_verkoopfactuur;
-- Toon de facturen van mijn bedrijf. Facturen die per ongelijk op nog niet gekoppelde personen worden
-- geboekt (afdeling_key = 21) worden uitgesloten.
CREATE OR REPLACE VIEW pche_my_v_verkoopfactuur
AS
SELECT SYSDATE - fin_verkoopfactuur_aanmaak hide_f_volgorde,
p.prs_perslid_key fclt_3d_user_key,
fin_verkoopfactuur_key,
fin_verkoopfactuur_aanmaak,
fin_verkoopfactuur_id,
fin_verkoopfactuur_datum,
fin_verkoopfactuur_omschr,
fin_verkoopfactuur_xmlnode,
fin_verkoopfactuur_refkey,
prs_kostenplaats_nr mutatie_ref,
prs_kostensoort_refcode grootboeknr,
prs_debiteur_naam,
v.prs_bedrijf_key,
fin_verkoopfactuur_bedrag,
fin_verkoopfactuur_btw,
fin_btwtabelwaarde_code,
fin_btwtabelwaarde_oms,
fin_btwtabelwaarde_perc,
fin_verkoopfactuur_maand,
fin_verkoopfactuur_n1 regel_volgnr,
fin_verkoopfactuur_n2 aantal,
fin_verkoopfactuur_n3 betaald_bedrag,
fin_verkoopfactuur_n4 korting_betalingstermijn,
fin_verkoopfactuur_n5 korting_contract,
fin_verkoopfactuur_c1 debiteurnummer,
fin_verkoopfactuur_c2 email,
fin_verkoopfactuur_c3 periode,
fin_verkoopfactuur_c7 pasnummers,
fin_verkoopfactuur_d1 volledig_betaald,
fin_verkoopfactuur_d2 factuur_naar_exact,
fin_verkoopfactuur_d3 van,
fin_verkoopfactuur_d4 tot,
fin_verkoopfactuur_d5 factuur_naar_deb,
'<a class="details" onclick=''FcltMgr.openDetail("'
|| 'cust/pche/export/pdf/' || fin_verkoopfactuur_c5
|| '")''>'
|| 'pdf'
|| '</a>'
html_pdf
FROM fin_verkoopfactuur v, prs_afdeling a, prs_perslid p
WHERE v.prs_bedrijf_key = a.prs_bedrijf_key
AND a.prs_afdeling_key = p.prs_afdeling_key
AND fin_verkoopfactuur_maand > to_char(sysdate, 'yyyy') -1 || '01' -- We tonen allen de facturen van het lopende en vorige jaar, dit stond eerst precies verkeerd.
AND a.prs_afdeling_key <> 21;
-- We gaan op de 5e januari van elk jaar de pdf bestanden archiveren.
CREATE OR REPLACE VIEW pche_v_export_backup_pdf
(
result,
result_order
)
AS
SELECT DISTINCT
'xcopy "'
|| fin_verkoopfactuur_c5
|| '" "backup\'
|| SUBSTR (fin_verkoopfactuur_maand, 1, 4)
|| '\'
|| REGEXP_REPLACE (prs_debiteur_naam, '[^A-Za-z0-9]', '_')
|| '\'
|| TO_CHAR (fin_verkoopfactuur_d3, 'yyyymmdd')
|| '\"'
|| CHR (13)
|| CHR (10)
|| 'del /Q '
|| fin_verkoopfactuur_c5, fin_verkoopfactuur_id
FROM fin_verkoopfactuur
WHERE fin_verkoopfactuur_maand <
TO_CHAR (SYSDATE, 'yyyy') - 1 || '01'
AND TO_CHAR (SYSDATE, 'mmyy') = '0105';
CREATE OR REPLACE PROCEDURE pche_import_betaling (p_import_key IN NUMBER)
AS
CURSOR c_imp
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
CURSOR c_deb
IS
SELECT b.*, v.fin_verkoopfactuur_c1
FROM pche_imp_betaling b, fin_verkoopfactuur v
WHERE b.fin_verkoopfactuur_id = v.fin_verkoopfactuur_id(+)
AND b.fac_import_key = p_import_key
AND COALESCE (prs_leverancier_nr, 'a') <>
COALESCE (fin_verkoopfactuur_c1, 'b');
CURSOR c_bed
IS
SELECT *
FROM ( SELECT fac_imp_file_index,
b.fin_verkoopfactuur_id,
b.fin_verkoopfactuur_bedrag b_bedrag,
SUM(v.fin_verkoopfactuur_bedrag
+ v.fin_verkoopfactuur_btw)
- COALESCE (v.fin_verkoopfactuur_n3, 0)
f_bedrag
FROM pche_imp_betaling b, fin_verkoopfactuur v
WHERE b.fin_verkoopfactuur_id = v.fin_verkoopfactuur_id(+)
AND b.fac_import_key = p_import_key
GROUP BY fac_imp_file_index,
b.fin_verkoopfactuur_id,
b.fin_verkoopfactuur_bedrag,
v.fin_verkoopfactuur_n3)
WHERE ABS (f_bedrag - b_bedrag) > 0.1;
v_newline VARCHAR2 (1000);
v_aanduiding VARCHAR2 (1000); -- Import line
v_field VARCHAR2 (100); -- Import field
v_fielddelimitor VARCHAR2 (1); -- Field seperator
v_errormsg VARCHAR (200);
v_errorhint VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_skipfield VARCHAR2 (100);
v_header_found BOOLEAN;
v_log_omschrijving VARCHAR2 (1000);
-- De importvelden
v_verkoopfactuur_betaaldatum DATE;
v_verkoopfactuur_betaal_txt VARCHAR2 (100);
v_verkoopfactuur_id VARCHAR2 (100); -- VARCHAR2(30);
v_verkoopfactuur_bedrag NUMBER (11, 2);
v_verkoopfactuur_bedrag_txt VARCHAR2 (100);
v_leverancier_nr VARCHAR2 (100); -- VARCHAR2(50);
v_debiteur_naam VARCHAR2 (100); -- VARCHAR2(60),
PROCEDURE appendlog (p_log IN OUT VARCHAR2, p_append IN VARCHAR2)
IS
BEGIN
IF p_log IS NOT NULL
THEN
p_log := p_log || ' - ' || p_append;
ELSE
p_log := p_append;
END IF;
END;
BEGIN
-- Init
v_header_found := FALSE;
v_fielddelimitor := ';';
-- verwijder alle tijdelijke records.
DELETE pche_imp_betaling
WHERE fac_import_verwerkt IS NULL;
FOR rec IN c_imp
LOOP
BEGIN
v_newline := rec.fac_imp_file_line;
v_aanduiding := v_newline;
v_log_omschrijving := '';
IF SUBSTR (v_newline, 1, 3) = '?'
THEN
-- EF BB BF aangetroffen
fac.imp_writelog (p_import_key,
'W',
'Byte Order Mark aangetroffen',
'Bestand heeft onbehandeld UTF-8 formaat.');
v_newline := SUBSTR (v_newline, 4);
END IF;
fac.imp_getfield (v_newline,
v_fielddelimitor,
v_verkoopfactuur_betaal_txt);
fac.imp_getfield (v_newline, v_fielddelimitor, v_verkoopfactuur_id);
fac.imp_getfield (v_newline,
v_fielddelimitor,
v_verkoopfactuur_bedrag_txt);
fac.imp_getfield (v_newline, v_fielddelimitor, v_leverancier_nr);
fac.imp_getfield (v_newline, v_fielddelimitor, v_debiteur_naam);
-- Skip until a valid header is found
IF UPPER (v_verkoopfactuur_betaal_txt) = 'DATUM'
AND UPPER (v_verkoopfactuur_id) = 'ONZE REF.'
AND UPPER (v_verkoopfactuur_bedrag_txt) = 'ONTVANGST'
AND UPPER (v_leverancier_nr) = 'DEBITEUR'
AND UPPER (v_debiteur_naam) = 'DEBITEUR: NAAM'
THEN
-- Sla de kopregel over.
v_header_found := TRUE;
ELSIF (v_header_found AND v_verkoopfactuur_betaal_txt IS NOT NULL)
THEN
v_verkoopfactuur_betaaldatum :=
fac.safe_to_date (v_verkoopfactuur_betaal_txt, 'dd-mm-yyyy');
IF v_verkoopfactuur_betaaldatum IS NULL
THEN
appendlog (
v_log_omschrijving,
'Datumformaat niet correct: '
|| v_verkoopfactuur_betaal_txt);
END IF;
v_verkoopfactuur_bedrag :=
fac.safe_to_number(REPLACE (
REPLACE (v_verkoopfactuur_bedrag_txt,
'.'),
',',
'.'));
IF v_verkoopfactuur_bedrag IS NULL
THEN
appendlog (
v_log_omschrijving,
'Datumformaat niet correct: '
|| v_verkoopfactuur_bedrag_txt);
END IF;
INSERT INTO pche_imp_betaling (fin_verkoopfactuur_betaaldatum,
fin_verkoopfactuur_id,
fin_verkoopfactuur_bedrag,
prs_leverancier_nr,
prs_debiteur_naam,
fac_import_key,
imp_log_status,
imp_log_omschrijving,
fac_imp_file_index)
VALUES (v_verkoopfactuur_betaaldatum,
TRIM (v_verkoopfactuur_id),
v_verkoopfactuur_bedrag,
TRIM (v_leverancier_nr),
TRIM (v_debiteur_naam),
p_import_key,
DECODE (v_log_omschrijving, NULL, NULL, 'E'),
v_log_omschrijving,
rec.fac_imp_file_index);
END IF;
IF v_log_omschrijving IS NOT NULL
THEN
fac.imp_writelog (p_import_key,
'E',
v_log_omschrijving,
'');
END IF;
COMMIT;
END;
END LOOP;
IF NOT v_header_found
THEN
fac.imp_writelog (p_import_key,
'E',
'Geen geldige header aangetroffen',
'Bestand is geen geldig betaling importbestand.');
END IF;
FOR rec IN c_deb
LOOP
BEGIN
fac.imp_writelog (
p_import_key,
'W',
'Regel:'
|| rec.fac_imp_file_index
|| ' ['
|| rec.fin_verkoopfactuur_id
|| '] Afwijkend debiteurnummer gevonden: Bestand: '
|| rec.prs_leverancier_nr
|| ' Factuur:'
|| rec.fin_verkoopfactuur_c1,
'.');
END;
END LOOP;
FOR rec IN c_bed
LOOP
BEGIN
fac.imp_writelog (
p_import_key,
'W',
'Regel:'
|| rec.fac_imp_file_index
|| ' ['
|| rec.fin_verkoopfactuur_id
|| '] Afwijkend bedrag gevonden: Bestand: '
|| rec.b_bedrag
|| ' Factuur:'
|| rec.f_bedrag,
'.');
END;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
SUBSTR (v_errormsg, 1, 1000),
v_aanduiding);
END;
/
CREATE OR REPLACE PROCEDURE pche_update_betaling (p_import_key IN NUMBER)
AS
CURSOR c_imp
IS
SELECT *
FROM pche_imp_betaling
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
v_errormsg VARCHAR (200);
v_errorhint VARCHAR (200);
v_aanduiding VARCHAR2(1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_factuur_bedrag NUMBER(11,2);
v_factuur_betaald NUMBER(11,2);
BEGIN
-- verwijder alle tijdelijke records.
DELETE pche_imp_betaling
WHERE fac_import_verwerkt IS NULL
AND fac_import_key <> p_import_key;
FOR rec IN c_imp
LOOP
BEGIN
v_aanduiding := 'Regel:' || rec.fac_imp_file_index;
IF COALESCE(rec.imp_log_status, 'x') <> 'E'
THEN
-- verwerk de betaling in de verkoopfacturen
UPDATE fin_verkoopfactuur
SET fin_verkoopfactuur_n3 = COALESCE(fin_verkoopfactuur_n3,0) + rec.fin_verkoopfactuur_bedrag
WHERE fin_verkoopfactuur_id = rec.fin_verkoopfactuur_id;
SELECT SUM(COALESCE(fin_verkoopfactuur_bedrag,0) + COALESCE(fin_verkoopfactuur_btw,0)), fin_verkoopfactuur_n3
INTO v_factuur_bedrag, v_factuur_betaald
FROM fin_verkoopfactuur
WHERE fin_verkoopfactuur_id = rec.fin_verkoopfactuur_id
GROUP BY fin_verkoopfactuur_n3;
IF v_factuur_bedrag - v_factuur_betaald < 0.1
THEN
UPDATE fin_verkoopfactuur
SET fin_verkoopfactuur_d1 = rec.fin_verkoopfactuur_betaaldatum
WHERE fin_verkoopfactuur_id = rec.fin_verkoopfactuur_id;
END IF;
END IF;
UPDATE pche_imp_betaling
SET fac_import_verwerkt = SYSDATE
WHERE fac_import_key = p_import_key
and fac_imp_file_index = rec.fac_imp_file_index;
END;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
SUBSTR (v_errormsg, 1, 1000),
v_aanduiding);
END;
/
CREATE OR REPLACE VIEW pche_v_rap_cnt_obj_geb
AS
SELECT c.cnt_contract_key,
cnt_contract_nummer_intern,
cnt_contract_omschrijving,
cnt_contract_looptijd_van,
cnt_contract_looptijd_tot,
prs_bedrijf_naam,
prs_perslid_naam_full contractbeheerder,
ins_discipline_omschrijving contractsoort,
cnt_betaling,
cnt_7_dagen,
cnt_5_werkdag,
cnt_nacht_weekend,
cnt_strijpsbultje,
prs_gebouw,
DECODE (prs_bewoner, 1, ' Ja', 'Nee') prs_bewoner,
prs_kpn,
afw_mail_fact,
ins_deel_key,
ins_srtdeel_omschrijving objectsoort,
ins_deel_opmerking,
ins_deel_omschrijving,
ins_naam,
ins_telefoonnummer,
ins_kenteken
FROM (SELECT cnt_contract_key,
cnt_contract_nummer,
cnt_contract_nummer_intern,
cnt_contract_omschrijving,
cnt_contract_looptijd_van,
cnt_contract_looptijd_tot,
b.prs_bedrijf_naam,
pf.prs_perslid_naam_full,
ins_discipline_omschrijving,
(SELECT fac_usrdata_omschr
FROM cnt_kenmerkcontract ck, fac_usrdata ud
WHERE ck.cnt_contract_key = c.cnt_contract_key
AND ud.fac_usrtab_key = 3
AND fac.safe_to_number (
cnt_kenmerkcontract_waarde) =
fac_usrdata_key
AND ck.cnt_kenmerk_key IN (5, 22))
cnt_betaling,
(SELECT fac.safe_to_number (cnt_kenmerkcontract_waarde)
FROM cnt_kenmerkcontract ck
WHERE ck.cnt_contract_key = c.cnt_contract_key
AND ck.cnt_kenmerk_key IN (2, 21))
cnt_7_dagen,
(SELECT fac.safe_to_number (cnt_kenmerkcontract_waarde)
FROM cnt_kenmerkcontract ck
WHERE ck.cnt_contract_key = c.cnt_contract_key
AND ck.cnt_kenmerk_key = 1)
cnt_5_werkdag,
(SELECT fac.safe_to_number (cnt_kenmerkcontract_waarde)
FROM cnt_kenmerkcontract ck
WHERE ck.cnt_contract_key = c.cnt_contract_key
AND ck.cnt_kenmerk_key = 4)
cnt_nacht_weekend,
(SELECT fac.safe_to_number (cnt_kenmerkcontract_waarde)
FROM cnt_kenmerkcontract ck
WHERE ck.cnt_contract_key = c.cnt_contract_key
AND ck.cnt_kenmerk_key = 41)
cnt_strijpsbultje,
(SELECT ud.fac_usrdata_omschr
FROM prs_kenmerklink pk, fac_usrdata ud
WHERE prs_kenmerklink_niveau = 'B'
AND pk.prs_kenmerk_key = 1040
AND ud.fac_usrtab_key = 61
AND pk.prs_link_key = b.prs_bedrijf_key
AND fac.safe_to_number (
pk.prs_kenmerklink_waarde) =
ud.fac_usrdata_key)
prs_gebouw,
(SELECT pk.prs_kenmerklink_waarde
FROM prs_kenmerklink pk
WHERE pk.prs_link_key = b.prs_bedrijf_key
AND prs_kenmerklink_niveau = 'B'
AND pk.prs_kenmerk_key = 1000)
prs_bewoner,
(SELECT pk.prs_kenmerklink_waarde
FROM prs_kenmerklink pk
WHERE pk.prs_link_key = b.prs_bedrijf_key
AND prs_kenmerklink_niveau = 'B'
AND pk.prs_kenmerk_key = 1060)
prs_kpn,
(SELECT pk.prs_kenmerklink_waarde
FROM prs_kenmerklink pk
WHERE pk.prs_link_key = b.prs_bedrijf_key
AND prs_kenmerklink_niveau = 'B'
AND pk.prs_kenmerk_key = 1020)
afw_mail_fact
FROM cnt_v_aanwezigcontract c,
cnt_discipline cd,
prs_v_perslid_fullnames pf,
prs_bedrijf b
WHERE c.ins_discipline_key = cd.ins_discipline_key
AND c.prs_perslid_key_beh = pf.prs_perslid_key
AND b.prs_bedrijf_key = c.cnt_prs_bedrijf_key) c
LEFT OUTER JOIN
(SELECT co.cnt_contract_key,
ins_deel_key,
sd.ins_srtdeel_omschrijving,
ins_deel_opmerking,
ins_deel_omschrijving,
(SELECT ins_kenmerkdeel_waarde
FROM ins_kenmerkdeel
WHERE ins_deel_key = d.ins_deel_key
AND ins_kenmerk_key = 21)
ins_naam,
(SELECT ins_kenmerkdeel_waarde
FROM ins_kenmerkdeel
WHERE ins_deel_key = d.ins_deel_key
AND ins_kenmerk_key = 22)
ins_telefoonnummer,
(SELECT ins_kenmerkdeel_waarde
FROM ins_kenmerkdeel
WHERE ins_deel_key = d.ins_deel_key
AND ins_kenmerk_key = 1)
ins_kenteken
FROM cnt_contract_object co, ins_deel d, ins_srtdeel sd
WHERE cnt_contract_object_verwijder IS NULL
AND d.ins_deel_verwijder IS NULL
AND co.cnt_ins_deel_key = d.ins_deel_key
AND d.ins_srtdeel_key = sd.ins_srtdeel_key) co
ON c.cnt_contract_key = co.cnt_contract_key;
------ payload end ------
SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 0); END;
/
COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile