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

svn path=/Customer/trunk/; revision=64202
This commit is contained in:
Arthur Egberink
2024-04-10 11:39:36 +00:00
parent dcee790d90
commit be42db6e4c

View File

@@ -353,6 +353,14 @@ IS
AND kenmerk1 IS NOT NULL -- Incl bijlage
;
CURSOR cfactuurregel
IS
SELECT f.fin_factuur_key, fr.fin_factuurregel_key, f.mld_opdr_key, f.cnt_contract_key, f.bes_bestelopdr_key
FROM fac_imp_factuur i, fin_factuurregel fr, fin_factuur f
WHERE i.fac_import_key = p_import_key
AND i.fin_factuurregel_key = fr.fin_factuurregel_key
AND fr.fin_factuur_key = f.fin_factuur_key;
v_aanduiding VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
@@ -362,34 +370,17 @@ IS
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);
v_locatie_code ALG_LOCATIE.ALG_LOCATIE_CODE%TYPE;
v_perslid_key PRS_PERSLID.PRS_PERSLID_KEY%TYPE;
v_dubbele_facturen NUMBER(10);
-- Verdeelperiode voor de contracten gaan bepalen
v_cnt_jaar_start NUMBER(10);
@@ -422,16 +413,13 @@ IS
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
SELECT prs_perslid_key
INTO v_perslid_key
FROM fac_import
WHERE fac_import_key = p_import_key;
-- Voor draaien standaard factuur-update gaan we eerst op fac_imp_factuur een aantal correcties doorvoeren
FOR rec IN ccor_0
LOOP
@@ -558,8 +546,7 @@ BEGIN
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
WHERE fin_kenmerk_code = 'FACTUURBESTAND'
AND fin_kenmerk_verwijder IS NULL;
-- CUST: Voor verwerking Contracten die qua versienr nog gecontroleerd moeten worden het kenmerk_key ophalen
@@ -567,12 +554,12 @@ BEGIN
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_code = 'EXTRACONTROLE'
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
@@ -580,14 +567,13 @@ BEGIN
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_code = 'VERZAMELFACTUUR?'
AND fin_kenmerk_verwijder IS NULL;
-- CUST: Voor verwerking Mareon-bron het kenmerk_key ophalen
@@ -649,7 +635,7 @@ BEGIN
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);
fac.trackaction ('FINUPD', rec.fin_factuur_key, v_perslid_key, NULL, v_aanduiding_controle);
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
@@ -665,7 +651,7 @@ BEGIN
v_aanduiding_controle := 'CONTROLE - Betreft D-categorie factuur!' ;
fac.trackaction ('FINUPD', rec.fin_factuur_key, 4, NULL, v_aanduiding_controle);
fac.trackaction ('FINUPD', rec.fin_factuur_key, v_perslid_key, NULL, v_aanduiding_controle);
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
@@ -688,14 +674,163 @@ BEGIN
END IF;
-- Controle of er al een factuur ontvangen is met hetzelfde factuurnummer en referentie
-- 1 Afgewezen
-- 2 Ingevoerd
-- 3 Incompleet
-- 5 Ter goedkeuring
-- 6 Akkoord
-- 7 Verwerkt
IF rec.mld_opdr_key IS NOT NULL
THEN
SELECT count(*)
INTO v_dubbele_facturen
FROM mld_opdr oa, fin_factuur f
WHERE oa.mld_opdr_key = f.mld_opdr_key
AND rec.factuurnr = f.fin_factuur_nr
AND rec.mld_opdr_key = oa.mld_opdr_key
AND f.fin_factuur_statuses_key NOT IN (1)
AND f.fin_factuur_verwijder IS NULL
AND f.fin_factuur_key <> rec.fin_factuur_key;
END IF;
IF rec.bes_bestelopdr_key IS NOT NULL
THEN
SELECT count(*)
INTO v_dubbele_facturen
FROM bes_bestelopdr oa, fin_factuur f
WHERE oa.bes_bestelopdr_key = f.bes_bestelopdr_key
AND rec.factuurnr = f.fin_factuur_nr
AND rec.bes_bestelopdr_key = oa.bes_bestelopdr_key
AND f.fin_factuur_statuses_key NOT IN (1)
AND f.fin_factuur_verwijder IS NULL
AND f.fin_factuur_key <> rec.fin_factuur_key;
END IF;
IF rec.cnt_contract_key IS NOT NULL
THEN
SELECT count(*)
INTO v_dubbele_facturen
FROM cnt_contract ca, fin_factuur f
WHERE ca.cnt_contract_key = f.cnt_contract_key
AND rec.factuurnr = f.fin_factuur_nr
AND rec.cnt_contract_key = ca.cnt_contract_key
AND f.fin_factuur_statuses_key NOT IN (1)
AND f.fin_factuur_verwijder IS NULL
AND f.fin_factuur_key <> rec.fin_factuur_key;
END IF;
IF v_dubbele_facturen <> 0
THEN
v_aanduiding_controle := 'Dubbele facturen gevonden!' ;
fac.trackaction ('FINUPD', rec.fin_factuur_key, v_perslid_key, NULL, v_aanduiding_controle);
-- nog reden vullen:
UPDATE fin_factuur
SET fin_factuur_statuses_key = 3,
fin_factuur_opmerking = v_aanduiding_controle
WHERE fin_factuur_key = rec.fin_factuur_key ;
END IF;
-- tot slot nog nette logging
v_aanduiding := 'Factuur geimporteerd vanuit Mareon' ;
fac.trackaction ('FINUPD', rec.fin_factuur_key, 4, NULL, v_aanduiding);
fac.trackaction ('FINUPD', rec.fin_factuur_key, v_perslid_key, NULL, v_aanduiding);
END;
END LOOP;
-- We gaan nu beginnen met het verder verwerken van de factuur..
FOR rec IN cfactuurregel
LOOP
BEGIN
-- vul de locatiecode in de factuurregel
IF rec.mld_opdr_key IS NOT NULL
THEN
BEGIN
SELECT l.alg_locatie_code
INTO v_locatie_code
FROM mld_opdr o, mld_melding m, alg_locatie l
WHERE o.mld_opdr_key = rec.mld_opdr_key
AND o.mld_melding_key = m.mld_melding_key
AND m.mld_alg_locatie_key = l.alg_locatie_key;
EXCEPTION WHEN NO_DATA_FOUND
THEN
v_locatie_code := 'Onbekend';
END;
END IF;
-- vul de locatiecode in de factuurregel
IF rec.bes_bestelopdr_key IS NOT NULL
THEN
BEGIN
SELECT l.alg_locatie_code
INTO v_locatie_code
FROM bes_bestelopdr o, mld_adres a, alg_locatie l
WHERE o.bes_bestelopdr_key = rec.bes_bestelopdr_key
AND o.mld_adres_key_lev = a.mld_adres_key
AND a.alg_locatie_key = l.alg_locatie_key;
EXCEPTION WHEN NO_DATA_FOUND
THEN
v_locatie_code := 'Onbekend';
END;
END IF;
-- vul de locatiecode in de factuurregel
IF rec.cnt_contract_key IS NOT NULL
THEN
BEGIN
SELECT alg_locatie_code
INTO v_locatie_code
FROM alg_district d, alg_locatie l, fin_factuurregel fr
WHERE d.alg_district_key = l.alg_district_key
AND d.alg_regio_key IN (2, 3) -- binnenland / buitenland
AND l.alg_locatie_verwijder IS NULL
AND fr.fin_factuurregel_omschrijving LIKE '%' || l.alg_locatie_code || '%'
AND fr.fin_factuurregel_key = rec.fin_factuurregel_key;
EXCEPTION WHEN NO_DATA_FOUND
THEN
v_locatie_code := 'Onbekend';
WHEN TOO_MANY_ROWS
THEN
v_locatie_code := 'Meerdere';
END;
END IF;
UPDATE fin_factuurregel fr
SET fr.fin_factuurregel_referentie = v_locatie_code
WHERE fr.fin_factuurregel_key = rec.fin_factuurregel_key;
-- Zijn er regels niet goed geimporteerd? Dat kan voorkomen als bijvoorbeeld de combinatie btw tarief en verlegd
-- niet leiden tot een eenduidige Exact code
IF rec.fin_factuurregel_key IS NULL
THEN
SELECT (SELECT MAX (f.fin_factuur_key)
FROM fac_imp_factuur f
WHERE f.fac_import_key = fr.fac_import_key) factuur_key
INTO v_fin_factuur_key
FROM fac_imp_factuur fr
WHERE fr.fac_import_key = p_import_key
AND fr.fin_factuurregel_key IS NULL;
IF v_fin_factuur_key IS NOT NULL
THEN
v_aanduiding_controle := 'Fouten in ge<67>mporteerde factuur op ' || to_char(SYSDATE, 'DD-MM-YYYY');
fac.trackaction ('FINUPD', rec.fin_factuur_key, v_perslid_key, NULL, v_aanduiding_controle);
-- nog reden vullen:
UPDATE fin_factuur
SET fin_factuur_statuses_key = 3,
fin_factuur_opmerking = v_aanduiding_controle
WHERE fin_factuur_key = rec.fin_factuur_key;
END IF;
END IF;
END;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
@@ -724,7 +859,7 @@ EXCEPTION
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);
fac.trackaction ('FINUPD', v_fin_factuur_key, v_perslid_key, NULL, v_aanduiding);
END IF;