YKPN#82676 -- Mareon factuur bij Vebego (YKPN) - opdracht en planning

svn path=/Customer/trunk/; revision=64148
This commit is contained in:
Arthur Egberink
2024-04-03 11:44:12 +00:00
parent 32ecb3e641
commit dbf8cf0981

View File

@@ -28,6 +28,24 @@ SET DEFINE OFF
------ payload begin ------
CREATE OR REPLACE PACKAGE VBXX
AS
FUNCTION vbxx_get_user RETURN VARCHAR2;
END;
/
CREATE OR REPLACE PACKAGE BODY VBXX
AS
FUNCTION vbxx_get_user RETURN VARCHAR2
AS
BEGIN
RETURN SUBSTR (USER, 1, 4);
END;
END;
/
CREATE OR REPLACE VIEW VBXX_V_RAP_TECHNADRES
AS
SELECT b.prs_bedrijf_key bedrijf_key,
@@ -96,6 +114,631 @@ AS
AND COALESCE(m.mld_melding_flag, 0) IN (0,2,3)
AND TRUNC (o.mld_opdr_einddatum) <= TRUNC (SYSDATE) - 5;
-- Power BI views. De beschrijving van de views staat in z:\Project\Implementaties\Customers\YAxx\Doc\YAXX#74390 Datalake\
-- Wijzigingen ook daarin aanpassen.
CREATE OR REPLACE VIEW vbxx_v_bimelding
AS
SELECT m.mld_melding_key,
m.mld_melding_externnr,
mld_meldbron_omschrijving,
m.mld_melding_start_key,
m.mld_alg_locatie_key alg_locatie_key,
og.alg_gebouw_key,
og.alg_verdieping_key,
og.alg_ruimte_key,
k.prs_kostenplaats_nr,
k.prs_kostenplaats_omschrijving,
m.prs_perslid_key,
m.mld_melding_behandelaar_key,
std.mld_stdmelding_omschrijving,
d.ins_discipline_omschrijving,
sd.ins_srtdiscipline_prefix,
sd.ins_srtdiscipline_omschrijving,
(SELECT mld_statuses_omschrijving
FROM mld_statuses sta
WHERE sta.mld_statuses_key = m.mld_melding_status)
mld_melding_status,
m.mld_melding_datum,
m.mld_melding_einddatum,
m.mld_melding_acceptdatum_std,
m.mld_melding_einddatum_std,
m.mld_melding_t_uitvoertijd.tijdsduur mld_melding_uitvoertijd_duur,
m.mld_melding_t_uitvoertijd.eenheid mld_melding_uitvoertijd_eenh,
m.mld_melding_t_accepttijd.tijdsduur mld_melding_accepttijd_duur,
m.mld_melding_t_accepttijd.eenheid mld_melding_accepttijd_eenh,
m.t_doorlooptijd.tijdsduur mld_melding_doorlooptijd_duur,
m.t_doorlooptijd.eenheid mld_melding_doorlooptijd_eenh,
DECODE(mld_melding_spoed, 1, 'Kritiek', 2, 'Hoog', 3, 'Normaal', 4, 'Laag', 'Onbekend') mld_melding_prioritieit,
mld.getmeldingstatusdate (m.mld_melding_key, 4) mld_melding_geaccepteerd,
COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
mld.getmeldingstatusdate (m.mld_melding_key, 1))
mld_melding_afgemeld,
m.mld_melding_onderwerp,
m.mld_melding_omschrijving,
m.mld_melding_opmerking,
m.mld_melding_parentkey,
m.mld_melding_satisfaction,
m.mld_melding_satisfaction_op,
(SELECT MAX(fac_tracking_datum)
FROM fac_tracking t, fac_srtnotificatie sn
WHERE t.fac_tracking_refkey = m.mld_melding_key
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_xmlnode = 'melding') last_changed
FROM ( SELECT m1.*,
CASE
WHEN m1.mld_melding_einddatum >
COALESCE (fac.gettrackingdate ('MLDAFM', m1.mld_melding_key),
fac.gettrackingdate ('MLDREJ', m1.mld_melding_key),
SYSDATE)
THEN
1
ELSE
0
END
plan_uitvoertijd_sla,
CASE
WHEN m1.mld_melding_indult = 1 OR std1.mld_stdmelding_slabewaken = 0 THEN 1
ELSE 0
END
sla_nvt,
DECODE (m1.mld_melding_t_uitvoertijd.eenheid,
'D', m1.mld_melding_t_uitvoertijd.tijdsduur,
NULL)
sla_werkdgn,
DECODE (m1.mld_melding_t_uitvoertijd.eenheid,
'U', m1.mld_melding_t_uitvoertijd.tijdsduur,
NULL)
sla_werkuren,
DECODE (m1.mld_melding_t_respijt.eenheid,
'D', m1.mld_melding_t_respijt.tijdsduur,
NULL)
sla_respijtdgn,
DECODE (m1.mld_melding_t_respijt.eenheid,
'U', m1.mld_melding_t_respijt.tijdsduur,
NULL)
sla_respijturen,
CASE WHEN m1.mld_melding_spoed = 3 THEN std1.mld_stdmelding_t_accepttijd
WHEN m1.mld_melding_spoed = 1 then std1.mld_stdmelding_t_accept_pr1
WHEN m1.mld_melding_spoed = 1 then std1.mld_stdmelding_t_accept_pr2
WHEN m1.mld_melding_spoed = 1 then std1.mld_stdmelding_t_accept_pr4
END sla_accpt,
--m.mld_melding_datum datum,
CASE WHEN std1.mld_stdmelding_planbaar = 2
THEN TO_DATE(NULL)
ELSE m1.mld_melding_einddatum
END einddatum,
--mld_melding_einddatum_std einddatum_std,
--mld_melding_acceptdatum_std acceptdatum,
COALESCE (mld.getmeldingstatusdate (m1.mld_melding_key, 5),
mld.getmeldingstatusdate (m1.mld_melding_key, 1))
afgemeld,
COALESCE (mld.getmeldingstatusdate (m1.mld_melding_key, 4),
mld.getmeldingstatusdate (m1.mld_melding_key, 1))
accepted,
mld.getactualuitvoer (m1.mld_melding_key) t_doorlooptijd
FROM mld_melding m1,
mld_stdmelding std1
WHERE m1.mld_stdmelding_key = std1.mld_stdmelding_key) m,
alg_v_allonrgoed_gegevens og,
mld_meldbron mb,
mld_stdmelding std,
mld_discipline d,
ins_srtdiscipline sd,
prs_kostenplaats k
WHERE m.mld_meldbron_key = mb.mld_meldbron_key
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
and d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys(+)
AND m.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
AND m.fac_activiteit_key IS NULL;
CREATE OR REPLACE VIEW vbxx_v_bimeldingkenmerk
AS
SELECT mld_melding_key,
COALESCE(k.mld_kenmerk_omschrijving, sk.mld_srtkenmerk_omschrijving) mld_kenmerk_omschrijving,
DECODE (sk.mld_srtkenmerk_kenmerktype, 'R', FLX.getdomeinwaarde(sk.fac_kenmerkdomein_key, flx.getflex ('MLD', k.mld_kenmerk_key, km.mld_melding_key), 1),
'S', FLX.getdomeinwaarde(sk.fac_kenmerkdomein_key, flx.getflex ('MLD', k.mld_kenmerk_key, km.mld_melding_key), 1),
flx.getflex ('MLD', k.mld_kenmerk_key, km.mld_melding_key)) mld_kenmerk_waarde
FROM mld_kenmerk k, mld_srtkenmerk sk, mld_kenmerkmelding km
WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND km.mld_kenmerk_key = k.mld_kenmerk_key;
CREATE OR REPLACE PROCEDURE vbxx_import_fin_factuur_marx (p_import_key IN NUMBER)
AS
v_seq_of_columns VARCHAR(255);
BEGIN
v_seq_of_columns := '1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28';
fac_import_factuur_body(p_import_key, v_seq_of_columns);
END;
/
CREATE OR REPLACE PROCEDURE vbxx_update_fin_factuur_marx (p_import_key IN NUMBER)
AS
-- Voor Correctie ORDERNR om standaard update-procedure goed te laten lopen.
--- 0. Bug - Als uit Mareo/Scanning geen order-referentie meekomt en er zijn meerdere factuurregels, dan wordt er vanuit fac_update_factuur niet 1 maar meerdere factuurnr's aangemaakt. Oplossing: Ordernr vullen.
--- 0.1 Verzamelfactuur-indicatie (2022-maart actief): Vanuit Mareon wordt deze met een "(*)" achter de referentie meegegeven, bijvoorbeeld C5602.5(*).
--- 0.2 Orderreferentie-opschoning: Vanuit scanning komt de orderreferentie soms mee inclusief 'extra tekst'. Bijv CO284IN<49>T of CO534.7HEERLEN. Voor goede verwerking gaan we de tekst achteraan de orderreferentie weghalen.
--- Uitgezet: We willen ook bestellingen matchen
--- 1. Ordernr 101132/1 wordt niet als Opdracht herkend. In FUNCTION try_getopdracht_id gaat Facilitor alleen maar opdrachten matchen als er 1,2 of 3 letters voorstaan... Daarom gaan we er in import-tabel een 'O' voorzetten (dus: 'O101132/1')
--- Ps. BCT-regel: Indien geen prefix, en kolom ORDERNR is 6- of 7 cijferig en met een '/' en dan numeriek 1 t/m 3 posities. Voorbeeld: Bijv: 104370/2 vanuit BCT moet worden O104370/2
--- Uitgezet: we kennen geen contracten met CO prefix
--- 2. Ordernr beginnende met "CO" wordt niet als Contract herkend. Daarom gaan we er in import-tabel een "C" van maken.
--- 3. Als ordernr is C (= contract) echter zonder versienummer - Dan wordt in standaard update altijd automatisch het hoogste versienummer gepakt.
--- Ivm overlap 'jaarovergangen' is dat niet altijd juist en moet de vanuit Mareon geimporteerde factuur nog status 'te controleren' meekrijgen voordat deze automatisch de financiele-interface in gaat.
--- 4. Ordernr beginnende met "BE" of "B" wordt niet als Bestelling herkend. Daarom gaan we deze prefix in de import-tabel weghalen.
--- 5. De klant geeft in PDF/XML als orderreferentie soms ook de klantnaam mee (bijv REMEHA C10.0) - deze wordt dan niet verwerkt in Facilor en daarom halen we klantnamen voor de orderreferentie weg
CURSOR ccor_0
IS
SELECT ordernr
FROM fac_imp_factuur
WHERE fac_import_key = p_import_key
AND ordernr IS NULL
GROUP BY ordernr ;
CURSOR ccor_0_1
IS
SELECT factuurnr, ordernr
FROM fac_imp_factuur
WHERE fac_import_key = p_import_key
AND INSTR(ordernr,'(*)') > 1
GROUP BY factuurnr, ordernr ;
CURSOR ccor_0_2
IS
SELECT factuurnr, ordernr
FROM fac_imp_factuur
WHERE fac_import_key = p_import_key
AND REGEXP_INSTR(REVERSE(ordernr), '\d') > 1
GROUP BY factuurnr, ordernr ;
CURSOR ccor_1
IS
SELECT factuurnr, ordernr, fac.safe_to_number(SUBSTR(ordernr,1,(INSTR(ordernr,'/')-1))) as melding_key, fac.safe_to_number(SUBSTR(ordernr,(INSTR(ordernr,'/')+1),LENGTH(ordernr))) opdracht_volgnr, fac.safe_to_number(TO_CHAR(fac.safe_to_date (factuurdatum, 'yyyy-mm-dd'), 'yyyy')) factuurdatum_jaar
FROM fac_imp_factuur
WHERE fac_import_key = p_import_key
AND INSTR(ordernr,'/') >0
AND LENGTH(SUBSTR(ordernr,1,(INSTR(ordernr,'/')-1))) IN (6,7)
GROUP BY factuurnr, ordernr, factuurdatum ;
CURSOR ccor_2
IS
SELECT factuurnr, ordernr
FROM fac_imp_factuur
WHERE fac_import_key = p_import_key
AND LENGTH(ordernr) >= 2
AND (SUBSTR(UPPER(ordernr),1,2) = 'CO' OR SUBSTR(UPPER(ordernr),1,2) = 'CC')
GROUP BY factuurnr, ordernr ;
CURSOR ccor_3
IS
SELECT factuurnr, ordernr, SUBSTR(ordernr,2) cnt_contract_nummer_intern
FROM fac_imp_factuur
WHERE fac_import_key = p_import_key
AND SUBSTR(UPPER(ordernr),1,1) = 'C'
AND INSTR(ordernr,'.')=0
GROUP BY factuurnr, ordernr ;
CURSOR ccor_4
IS
SELECT factuurnr, ordernr
FROM fac_imp_factuur
WHERE fac_import_key = p_import_key
AND ( SUBSTR (ordernr, 1, 1) = 'B'
AND fac.safe_to_number (SUBSTR (ordernr, 2, 1)) IS NOT NULL)
OR (SUBSTR (ordernr, 1, 2) = 'BE')
GROUP BY factuurnr, ordernr ;
CURSOR ccor_5 -- NOG UITWERKEN!!
IS
SELECT factuurnr, ordernr
FROM fac_imp_factuur
WHERE fac_import_key = p_import_key
AND REGEXP_INSTR(REVERSE(ordernr), '\d') > 1
GROUP BY factuurnr, ordernr ;
CURSOR cfactuur
IS
SELECT i.fin_factuur_key, factuurdatum, i.kenmerk1, i.kenmerk2, i.kenmerk3, i.kenmerk6, i.kenmerk7, i.kenmerk8, i.kenmerk9, i.factuurnr, i.fac_imp_file_index, f.fin_factuur_totaal, f.fin_factuur_totaal_btw, f.mld_opdr_key, f.cnt_contract_key, f.bes_bestelopdr_key
FROM fac_imp_factuur i, fin_factuur f
WHERE i.fin_factuur_key IS NOT NULL
AND i.fac_import_key = p_import_key
AND f.fin_factuur_key = i.fin_factuur_key
AND kenmerk1 IS NOT NULL -- Incl bijlage
;
v_aanduiding VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
c_kenmerk_key_bijlage NUMBER(10);
c_kenmerk_key_soort VARCHAR(1) := 'F'; -- fin_kenmerk_kenmerktype = M(foldermap) of F(enkelvoudig bestand)
c_huidig_jaar NUMBER(4) := fac.safe_to_number((TO_CHAR (SYSDATE, 'yyyy')));
v_disk_directory VARCHAR2 (200);
v_bedrag_totaal NUMBER(10);
v_bedrag_gefactureerd NUMBER(10);
v_count_gefactureerd NUMBER(10);
v_bedrag_termijn NUMBER(10);
v_ordersoort VARCHAR2 (200);
v_contractsoort VARCHAR2 (200);
v_bestelsoort VARCHAR2 (200);
v_klantnummer_key NUMBER(10);
v_klantnummer VARCHAR2 (200);
v_prs_leverancier_nr VARCHAR2 (200);
v_contract_versies NUMBER(10);
c_kenmerk_key_controle NUMBER(10);
c_kenmerk_key_verzamel NUMBER(10);
c_kenmerk_key_mareon_bron NUMBER(10);
v_prs_bedrijf_key NUMBER(10);
v_opdracht_key NUMBER(10);
v_controle NUMBER(1) := 0 ; -- 1 = controlevinkje op inkoopfactuur zetten
v_aanduiding_controle VARCHAR2 (1000); -- Voor logging op bijbehorende controle zodat men weet wat men moet controleren
v_fac_usrdata_key_ja NUMBER(10);
v_mld_statusopdr_key NUMBER(10);
v_count_gefactureerd_nr NUMBER(10);
v_opdracht_0_reden VARCHAR2 (1000);
v_fin_factuur_key NUMBER(10);
v_sabic_genk VARCHAR2 (200);
v_prs_kostenplaats_key NUMBER(10);
v_prs_kostenplaatsgrp_key NUMBER(10);
-- Verdeelperiode voor de contracten gaan bepalen
v_cnt_jaar_start NUMBER(10);
v_cnt_jaar_eind NUMBER(10);
v_cnt_maand_start NUMBER(10);
v_cnt_maand_start_tekst VARCHAR(2);
v_cnt_maand_eind NUMBER(10);
v_cnt_maand_eind_tekst VARCHAR(2);
v_cnt_start VARCHAR(7); -- Start contract in format tekst "jaar-mnd" (2022-05)
v_cnt_eind VARCHAR(7); -- Einde contract in format tekst "jaar-mnd" (2022-05)
v_fin_factuur_boekmaand_nu VARCHAR(7); -- Ingelezen factuur in format tekst "jaar-mnd" (2022-05)
v_gebroken_boekjaar NUMBER(1) := 0 ;
v_cnt_looptijd_mnd NUMBER(10);
v_cnt_deel_betaald_1 NUMBER(10); -- Deel van contract wat reeds betaald is
v_cnt_deel_betaald_2 NUMBER(10); -- Deel van contract wat betaald is als de mareon-factuur ook verwerkt is
v_cnt_deel_betaald_tekst VARCHAR2 (200); -- Tekst voor in tijdelijke kenmerveld om te kijken of bepaling boekmaand correct is
-- v_cnt_deel_betaald NUMBER(10); -- METHODE 1: Deel van contract betaald met deze factuur
-- v_fin_factuur_boekmaand VARCHAR(7); -- METHODE 1: De nieuwe boekmaand op de geimporteerde Mareon-factuur
v_fin_factuur_boekmaand_2 VARCHAR(7); -- De nieuwe boekmaand op de geimporteerde Mareon-factuur - METHODE 2
v_fin_factuur_boekmaand_tekst VARCHAR2 (1000); -- Tekst voor in tijdelijke kenmerkveld om te kijken of bepaling boekmaand correct is
c_kenmerk_key_boekmaand NUMBER(10);
v_cnt_termijn_type VARCHAR(1);
v_cnt_termijn_aantal NUMBER(3);
v_cnt_soort VARCHAR2 (200);
v_factuur_datum_boekmaand NUMBER(10);
v_factuur_datum_boekmaand_jr NUMBER(10);
v_factuur_datum_boekmaand_prev VARCHAR(2);
v_factuur_datum_boekmaand_nu VARCHAR(2);
v_fin_factuur_boekmaand_laatst VARCHAR(7);
v_fin_factuur_boekmaand_prev VARCHAR(7);
v_cnt_maandbedrag NUMBER(10);
v_gefactureerd_vorige_maand NUMBER(10);
v_cnt_scope_gebouw NUMBER(10);
v_cnt_scope_afwijkend NUMBER(10);
BEGIN
-- Voor draaien standaard factuur-update gaan we eerst op fac_imp_factuur een aantal correcties doorvoeren
FOR rec IN ccor_0
LOOP
BEGIN
UPDATE fac_imp_factuur
SET ordernr = '00000' -- Geen ordernr vanuit scanning
WHERE fac_import_key = p_import_key ;
END;
END LOOP;
FOR rec IN ccor_0_1
LOOP
BEGIN
UPDATE fac_imp_factuur
SET kenmerk3 = 'verzamelfactuur'
WHERE fac_import_key = p_import_key ;
END;
END LOOP;
FOR rec IN ccor_0_2
LOOP
BEGIN
UPDATE fac_imp_factuur
SET ordernr = SUBSTR(ordernr,1,LENGTH(ordernr)-(REGEXP_INSTR(REVERSE(ordernr), '\d')-1))
WHERE fac_import_key = p_import_key ;
END;
END LOOP;
/* uitgeschakeld
FOR rec IN ccor_1
LOOP
BEGIN
-- check of je er een ACTUELE opdracht_key voor kunt vinden. zo ja dan gaan we er vanuit dat het idd opdracht is en vullen we ordernr aan met een prefix "O"
--- Actueel = Nog niet verwerkte opdracht + Jaar(opdrachtdatum) gelijk aan Jaar(factuurdatum) of Jaar(factuurdatum)-1
IF rec.melding_key IS NOT NULL and rec.opdracht_volgnr IS NOT NULL and rec.factuurdatum_jaar IS NOT NULL THEN
SELECT min(mld_opdr_key)
INTO v_opdracht_key
FROM mld_opdr
WHERE mld_melding_key = rec.melding_key AND mld_opdr_bedrijfopdr_volgnr = rec.opdracht_volgnr
AND fac.safe_to_number((TO_CHAR (mld_opdr_datumbegin, 'yyyy'))) BETWEEN (rec.factuurdatum_jaar - 1) AND rec.factuurdatum_jaar
AND mld_statusopdr_key NOT IN (1,7) ; -- verwerkt of afgewezen
IF v_opdracht_key IS NOT NULL THEN
UPDATE fac_imp_factuur
SET ordernr = 'O' || ordernr
WHERE fac_import_key = p_import_key ;
END IF;
END IF;
END;
END LOOP;
*/
/* Uitgeschakeld
FOR rec IN ccor_2
LOOP
BEGIN
UPDATE fac_imp_factuur
SET ordernr = 'C' || SUBSTR(ordernr,3,LENGTH(ordernr))
WHERE fac_import_key = p_import_key ;
END;
END LOOP;
*/
FOR rec IN ccor_3
LOOP
BEGIN
IF fac.safe_to_number(rec.cnt_contract_nummer_intern) IS NOT NULL THEN
SELECT count(*)
INTO v_contract_versies
FROM cnt_contract
WHERE cnt_contract_verwijder IS NULL AND cnt_contract_status = 0
AND cnt_contract_nummer_intern = rec.cnt_contract_nummer_intern ;
-- Als er meer dan 1 versie is, dan moet factuur ter controle. We gaan hiervoor een kenmerkveld vullen...
IF v_contract_versies > 1 THEN
UPDATE fac_imp_factuur
SET kenmerk2 = 'ter controle'
WHERE fac_import_key = p_import_key ;
END IF;
END IF;
END;
END LOOP;
FOR rec IN ccor_4
LOOP
BEGIN
UPDATE fac_imp_factuur
SET ordernr = REPLACE(ordernr,'BE','')
WHERE fac_import_key = p_import_key ;
UPDATE fac_imp_factuur
SET ordernr = REPLACE(ordernr,'B','')
WHERE fac_import_key = p_import_key ;
END;
END LOOP;
-- Nu kunnen we de standaard FCLT verwerk import facturen draaien
fac_update_factuur (p_import_key);
-- CUST: post processing voor verwerking van het PDF document
SELECT MIN (fin_kenmerk_key)
INTO c_kenmerk_key_bijlage
FROM fin_kenmerk
WHERE fin_kenmerk_type = 'F' -- niveau kenmerk op Factuurniveau en niet op R-regel
AND fin_kenmerk_kenmerktype = c_kenmerk_key_soort
AND fin_kenmerk_verwijder IS NULL;
-- CUST: Voor verwerking Contracten die qua versienr nog gecontroleerd moeten worden het kenmerk_key ophalen
SELECT MIN (fin_kenmerk_key)
INTO c_kenmerk_key_controle
FROM fin_kenmerk
WHERE fin_kenmerk_type = 'F' -- niveau kenmerk op Factuurniveau en niet op R-regel
AND fin_kenmerk_kenmerktype = 'V'
AND fin_kenmerk_upper = 'EXTRA CONTROLE?'
AND fin_kenmerk_verwijder IS NULL;
-- CUST: Voor verwerking Contracten en Verdeelperiode goed doorvoeren (= fin_factuur_boekmaand)
----- We gaan dit in een kenmerveld vullen en indien goed te bepalen dan wordt dit ook in procedure straks in het factuur-boekmaand veld weggeschreven
SELECT MIN (fin_kenmerk_key)
INTO c_kenmerk_key_boekmaand
FROM fin_kenmerk
WHERE fin_kenmerk_type = 'F' -- niveau kenmerk op Factuurniveau en niet op R-regel
AND fin_kenmerk_kenmerktype = 'C'
AND fin_kenmerk_upper = 'MAREON_CNT_BOEKMAAND'
AND fin_kenmerk_verwijder IS NULL;
-- CUST: Voor verwerking Verzamelfactuur-indicatie het kenmerk_key ophalen
SELECT MIN (fin_kenmerk_key)
INTO c_kenmerk_key_verzamel
FROM fin_kenmerk
WHERE fin_kenmerk_type = 'F' -- niveau kenmerk op Factuurniveau en niet op R-regel
AND fin_kenmerk_kenmerktype = 'V'
AND fin_kenmerk_upper = 'VERZAMELFACTUUR?'
AND fin_kenmerk_verwijder IS NULL;
-- CUST: Voor verwerking Mareon-bron het kenmerk_key ophalen
SELECT MIN (fin_kenmerk_key)
INTO c_kenmerk_key_mareon_bron
FROM fin_kenmerk
WHERE fin_kenmerk_type = 'F' -- niveau kenmerk op Factuurniveau en niet op R-regel
AND fin_kenmerk_kenmerktype = 'C'
AND fin_kenmerk_code = 'MAREON_BRON'
AND fin_kenmerk_verwijder IS NULL;
-- We gaan nu beginnen met het verder verwerken van de factuur..
FOR rec IN cfactuur
LOOP
BEGIN
-- Als er een bijlage-flexprop en een bijlage is, dan gaan we deze PDF hier inzetten....
IF c_kenmerk_key_bijlage IS NOT NULL AND rec.kenmerk1 IS NOT NULL
THEN
BEGIN
INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
VALUES('IMPORT:' || TO_CHAR (p_import_key),
'flexcode',
'FIN:'
|| TO_CHAR (rec.fin_factuur_key) -- We kunnen niet meerdere imports tegelijk aan!
|| ':' || c_kenmerk_key_bijlage || ':' -- De kenmerk key
|| c_kenmerk_key_soort -- 'F of M'
);
-- FSN#33363: Zelf de insert in fin_kenmerkfactuur doen van het bestandskenmerk (FSN#33105 verzorgt dit niet namelijk)
-- Aanvulling JM: Voor F-enkelvoudig bestand wel nodig om kenmerk aan te maken, voor M-folder hoeft/moet dit niet
IF c_kenmerk_key_soort = 'F'
THEN
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
VALUES (rec.fin_factuur_key, c_kenmerk_key_bijlage, rec.kenmerk1);
END IF;
EXCEPTION
WHEN OTHERS
THEN
fac.imp_writelog (p_import_key,
'W',
'Van factuur met key ' || rec.fin_factuur_key || ' is de bestandsnaam niet bewaard (regel ' || rec.fac_imp_file_index || ')',
'Factuurnr:' || rec.factuurnr || ' / Bestandsnaam: ' || rec.kenmerk1
);
END;
COMMIT;
END IF;
-- Incomplete facturen, zonder orderreferentie, gaan we ook op controle zetten
--- D-categorie: Voorheen via fallback-emailadres, maar sinds 2022.3 vanuit Mareon wel doorgestuurd naar Facilitor.
IF (rec.mld_opdr_key IS NULL AND rec.cnt_contract_key IS NULL AND rec.bes_bestelopdr_key IS NULL) AND rec.kenmerk6 NOT IN ('3')
THEN
v_aanduiding_controle := 'CONTROLE - Factuur incompleet i.v.m. ontbrekende orderreferentie (vanuit scanning)' ;
v_controle := 1 ;
fac.trackaction ('FINUPD', rec.fin_factuur_key, 4, NULL, v_aanduiding_controle);
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
VALUES (rec.fin_factuur_key, c_kenmerk_key_controle, 1);
END IF;
-- D-categorie -
-- Kan zowel voor facturen met als zonder order-referentie doorkomen
IF rec.kenmerk6 = '3'
THEN
v_aanduiding_controle := 'CONTROLE - Betreft D-categorie factuur!' ;
fac.trackaction ('FINUPD', rec.fin_factuur_key, 4, NULL, v_aanduiding_controle);
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
VALUES (rec.fin_factuur_key, c_kenmerk_key_controle, 1);
-- nog reden vullen:
UPDATE fin_factuur
SET fin_factuur_statuses_key = 3,
fin_factuur_opmerking = rec.kenmerk7
WHERE fin_factuur_key = rec.fin_factuur_key ;
END IF;
-- Mareon_bron tonen in Facilitor bij Factuur
IF rec.kenmerk9 IS NOT NULL AND c_kenmerk_key_mareon_bron IS NOT NULL
THEN
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
VALUES (rec.fin_factuur_key, c_kenmerk_key_mareon_bron, rec.kenmerk9);
END IF;
-- tot slot nog nette logging
v_aanduiding := 'Factuur geimporteerd vanuit Mareon' ;
fac.trackaction ('FINUPD', rec.fin_factuur_key, 4, NULL, v_aanduiding);
END;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
-- ROLLBACK;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
SELECT MAX(i.fin_factuur_key) fin_factuur_key, 'Betreft factuur_key ' || TO_CHAR(i.fin_factuur_key) ||' - Factuurnr ' || i.factuurnr
INTO v_fin_factuur_key, v_errorhint
FROM fac_imp_factuur i, fin_factuur f
WHERE i.fac_import_key = p_import_key
AND i.fin_factuur_key = f.fin_factuur_key (+)
GROUP BY i.fin_factuur_key, 'Betreft factuur_key ' || TO_CHAR(i.fin_factuur_key) ||' - Factuurnr ' || i.factuurnr ;
IF v_fin_factuur_key IS NOT NULL
THEN
UPDATE fin_factuur
SET fin_factuur_statuses_key = 3,
fin_factuur_opmerking = SUBSTR('Bij factuurimport is volgende Errormessage gemeld: ' || v_errormsg || CHR (13) || CHR (10) ||
'Actie 1: Informeren Facilitor' || CHR (13) || CHR (10) ||
'Actie 2: Factuur gewoon oppakken: Aanvullen, doorzetten, etc', 1, 250)
WHERE fin_factuur_key = v_fin_factuur_key ;
v_aanduiding := 'Factuur geimporteerd vanuit Mareon' ;
fac.trackaction ('FINUPD', v_fin_factuur_key, 4, NULL, v_aanduiding);
END IF;
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_errorhint || ' - ' || v_aanduiding);
COMMIT;
END;
/
------ payload end ------
SET DEFINE OFF