AAIT#67042 -- Factuurverwerking via Mareonplatform - Aanpassingen Factuur-import
svn path=/Customer/trunk/; revision=53509
This commit is contained in:
412
AA/aaxx.sql
412
AA/aaxx.sql
@@ -11859,18 +11859,46 @@ CREATE OR REPLACE PROCEDURE aaxx_update_fin_factuur_marx (p_import_key IN NUMBER
|
||||
AS
|
||||
|
||||
-- Voor Correctie ORDERNR om standaard update-procedure goed te laten lopen.
|
||||
CURSOR ccorrectie
|
||||
--- 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
|
||||
--- 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 inkoopinterface in gaat.
|
||||
--- 4. Orderreferentie-opschoning: Vanuit scanning komt de orderreferentie soms mee inclusief 'extra tekst'. Bijv CO284IN’T of CO534.7HEERLEN. Voor goede verwerking gaan we de tekst achteraan de orderreferentie weghalen.
|
||||
CURSOR ccor_1
|
||||
IS
|
||||
SELECT fin_factuur_key, 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
|
||||
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)
|
||||
;
|
||||
AND LENGTH(SUBSTR(ordernr,1,(INSTR(ordernr,'/')-1))) IN (6,7) ;
|
||||
|
||||
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' ;
|
||||
|
||||
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;
|
||||
|
||||
CURSOR ccor_4
|
||||
IS
|
||||
SELECT factuurnr, ordernr
|
||||
FROM fac_imp_factuur
|
||||
WHERE fac_import_key = p_import_key
|
||||
AND REGEXP_INSTR(REVERSE(ordernr), '\d') > 1 ;
|
||||
|
||||
CURSOR cfactuur
|
||||
IS
|
||||
SELECT i.fin_factuur_key, i.kenmerk1, 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
|
||||
SELECT i.fin_factuur_key, i.kenmerk1, i.kenmerk2, 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
|
||||
@@ -11897,28 +11925,51 @@ IS
|
||||
v_bestelsoort VARCHAR2 (200);
|
||||
v_klantnummer_key NUMBER(10);
|
||||
v_klantnummer VARCHAR2 (200);
|
||||
|
||||
v_contract_versies NUMBER(10);
|
||||
c_kenmerk_key_controle 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_fac_usrdata_key_nee NUMBER(10);
|
||||
v_mld_statusopdr_key NUMBER(10);
|
||||
v_count_gefactureerd_nr NUMBER(10);
|
||||
|
||||
-- Verdeelperiode voor de contracten gaan bepalen
|
||||
v_cnt_jaar_start NUMBER(10);
|
||||
v_cnt_jaar_eind NUMBER(10);
|
||||
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_verdeelperiode_1 VARCHAR(2) := '01'; -- Hoogste boekmaand waarop is geboekt
|
||||
v_verdeelperiode_2 VARCHAR(2); -- Boekmaand waarop de mareon-factuur geboekt moet worden
|
||||
v_count_verdeelperiode_1 NUMBER(10);
|
||||
v_fin_factuur_boekmaand VARCHAR(7); -- De nieuwe boekmaand op de geimporteerde Mareon-factuur
|
||||
c_kenmerk_key_boekmaand NUMBER(10);
|
||||
v_cnt_termijn_type VARCHAR(1);
|
||||
v_cnt_termijn_aantal NUMBER(3);
|
||||
|
||||
|
||||
BEGIN
|
||||
|
||||
-- Hier voor de update eerst nog een prefix "O" voor de opdrachtreferentie zetten indien kolom ORDERNR is 6- of 7 cijferig en dan '/' en dan numeriek 1 t/m 3 posities.
|
||||
---- WANT in FUNCTION try_getopdracht_id gaat Facilitor alleen maar opdrachten matchen als er 1,2 of 3 letters voorstaan...
|
||||
---- Voorbeeld: Bijv: 104370/2 vanuit BCT wordt O104370/2
|
||||
FOR rec IN ccorrectie
|
||||
|
||||
-- Voor draaien standaard factuur-update gaan we eerst op fac_imp_factuur een aantal correcties doorvoeren
|
||||
FOR rec IN ccor_1
|
||||
LOOP
|
||||
BEGIN
|
||||
|
||||
-- check of je er een 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"
|
||||
IF rec.melding_key IS NOT NULL and rec.opdracht_volgnr IS NOT NULL THEN
|
||||
-- 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;
|
||||
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
|
||||
|
||||
@@ -11933,6 +11984,56 @@ BEGIN
|
||||
|
||||
END;
|
||||
END LOOP;
|
||||
|
||||
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 = SUBSTR(ordernr,1,LENGTH(ordernr)-(REGEXP_INSTR(REVERSE(ordernr), '\d')-1))
|
||||
WHERE fac_import_key = p_import_key ;
|
||||
|
||||
END;
|
||||
END LOOP;
|
||||
|
||||
|
||||
|
||||
-- Nu kunnne we de standaard FCLT verwerk import facturen draaien
|
||||
fac_update_factuur (p_import_key);
|
||||
@@ -11942,14 +12043,58 @@ BEGIN
|
||||
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_kenmerktype = c_kenmerk_key_soort
|
||||
AND fin_kenmerk_verwijder IS NULL;
|
||||
|
||||
-- Klantnummer - Kenmerk_key ophalen
|
||||
-- CUST: Voor vullen Klantnummer het kenmerk_key ophalen
|
||||
SELECT MIN (prs_kenmerk_key)
|
||||
INTO v_klantnummer_key
|
||||
FROM prs_kenmerk
|
||||
WHERE prs_kenmerk_niveau = 'B' AND prs_kenmerk_upper = 'KLANTNUMMER' AND prs_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 DEZE TIJDELIJK EVEN IN EEN KENMERKVELD VULLEN - ALS DIT GOED GAAT, DAN DIRECT DE FACTUUR UPDATEN
|
||||
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: Ophalen key-waarde Ja en Nee van kenmerkveld Laatste Factuur
|
||||
SELECT ud.fac_usrdata_key
|
||||
INTO v_fac_usrdata_key_ja
|
||||
FROM fin_kenmerk k,
|
||||
fac_kenmerkdomein kd,
|
||||
fac_usrtab ut,
|
||||
fac_usrdata ud
|
||||
WHERE fin_kenmerk_key = 2
|
||||
AND k.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key
|
||||
AND kd.fac_usrtab_key = ut.fac_usrtab_key
|
||||
AND ut.fac_usrtab_key = ud.fac_usrtab_key
|
||||
AND fac.safe_to_number (ud.fac_usrdata_code) = 1; -- Waarde is Ja
|
||||
|
||||
SELECT ud.fac_usrdata_key
|
||||
INTO v_fac_usrdata_key_nee
|
||||
FROM fin_kenmerk k,
|
||||
fac_kenmerkdomein kd,
|
||||
fac_usrtab ut,
|
||||
fac_usrdata ud
|
||||
WHERE fin_kenmerk_key = 2
|
||||
AND k.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key
|
||||
AND kd.fac_usrtab_key = ut.fac_usrtab_key
|
||||
AND ut.fac_usrtab_key = ud.fac_usrtab_key
|
||||
AND fac.safe_to_number (ud.fac_usrdata_code) = 2; -- Waarde is Nee
|
||||
|
||||
FOR rec IN cfactuur
|
||||
LOOP
|
||||
@@ -11989,7 +12134,7 @@ BEGIN
|
||||
|
||||
END IF;
|
||||
|
||||
-- Als er een ref-key gekoppeld is, dan gaan we de waarde van deze verplichting ophalen
|
||||
-- Als er een ref-key gekoppeld is, dan gaan we o.a. de waarde van deze verplichting ophalen
|
||||
IF (rec.mld_opdr_key IS NOT NULL OR rec.cnt_contract_key IS NOT NULL OR rec.bes_bestelopdr_key IS NOT NULL)
|
||||
THEN
|
||||
v_bedrag_totaal := 0;
|
||||
@@ -12000,8 +12145,8 @@ BEGIN
|
||||
-- Voor Opdracht..
|
||||
IF rec.mld_opdr_key IS NOT NULL
|
||||
THEN
|
||||
SELECT o.mld_opdr_kosten, ot.mld_typeopdr_omschrijving, o.mld_uitvoerende_keys
|
||||
INTO v_bedrag_totaal, v_ordersoort, v_prs_bedrijf_key
|
||||
SELECT o.mld_opdr_kosten, ot.mld_typeopdr_omschrijving, o.mld_uitvoerende_keys, mld_statusopdr_key
|
||||
INTO v_bedrag_totaal, v_ordersoort, v_prs_bedrijf_key, v_mld_statusopdr_key
|
||||
FROM mld_opdr o, mld_typeopdr ot
|
||||
WHERE o.mld_opdr_key = rec.mld_opdr_key
|
||||
AND o.mld_typeopdr_key = ot.mld_typeopdr_key;
|
||||
@@ -12009,7 +12154,8 @@ BEGIN
|
||||
SELECT count(*)
|
||||
INTO v_count_gefactureerd
|
||||
FROM fin_factuur
|
||||
WHERE mld_opdr_key = rec.mld_opdr_key;
|
||||
WHERE mld_opdr_key = rec.mld_opdr_key
|
||||
AND fin_factuur_verwijder IS NULL;
|
||||
|
||||
IF v_count_gefactureerd > 1
|
||||
THEN
|
||||
@@ -12017,29 +12163,56 @@ BEGIN
|
||||
INTO v_bedrag_gefactureerd
|
||||
FROM fin_factuur f
|
||||
WHERE f.mld_opdr_key = rec.mld_opdr_key
|
||||
-- AND NOT EXISTS
|
||||
-- (SELECT 1
|
||||
-- FROM fin_factuur ff
|
||||
-- WHERE ff.fin_factuur_key = rec.fin_factuur_key) ;
|
||||
AND f.fin_factuur_key NOT IN (rec.fin_factuur_key) ;
|
||||
AND f.fin_factuur_key NOT IN (rec.fin_factuur_key)
|
||||
AND f.fin_factuur_verwijder IS NULL;
|
||||
END IF;
|
||||
|
||||
-- Als de Opdracht waar deze factuur op is gekomen al verwerkt is, dan moet deze factuur ter controle
|
||||
IF v_mld_statusopdr_key IN (1,7) -- verwerkt of afgewezen
|
||||
THEN
|
||||
|
||||
v_aanduiding_controle := 'Deze factuur is ingeboekt terwijl de Opdracht al op VERWERKT staat. Controleer of dit klopt' ;
|
||||
v_controle := 1 ;
|
||||
|
||||
fac.trackaction ('FINUPD', rec.fin_factuur_key, 4, NULL, v_aanduiding_controle);
|
||||
END IF;
|
||||
|
||||
-- Als de hetzelfde factuurnummer al vaker op deze opdracht is geregistreerd, dan moet deze factuur ter controle
|
||||
SELECT count(*)
|
||||
INTO v_count_gefactureerd_nr
|
||||
FROM fin_factuur
|
||||
WHERE mld_opdr_key = rec.mld_opdr_key
|
||||
AND fin_factuur_key NOT IN (rec.fin_factuur_key)
|
||||
AND fin_factuur_nr = rec.factuurnr
|
||||
AND fin_factuur_verwijder IS NULL ;
|
||||
|
||||
IF v_count_gefactureerd_nr > 0
|
||||
THEN
|
||||
|
||||
v_aanduiding_controle := 'Dit zelfde factuur-nummer is al eerder geregistreerd op deze Opdracht. Controleer of dit klopt' ;
|
||||
v_controle := 1 ;
|
||||
|
||||
fac.trackaction ('FINUPD', rec.fin_factuur_key, 4, NULL, v_aanduiding_controle);
|
||||
END IF;
|
||||
|
||||
|
||||
END IF;
|
||||
|
||||
-- Voor Bestelopdracht..
|
||||
IF rec.bes_bestelopdr_key IS NOT NULL
|
||||
THEN
|
||||
SELECT SUM (br.bes_bestelopdr_item_aantal * br.bes_bestelopdr_item_prijs) bedrag_totaal, b.prs_bedrijf_key -- LETOP! Bedragen & BTW - check inclusief of Exclusief bij AAIT (via bes_bestelling_item)!!!
|
||||
SELECT SUM (br.bes_bestelopdr_item_aantal * br.bes_bestelopdr_item_prijs) bedrag_totaal, b.prs_bedrijf_key -- LETOP! Bedragen en BTW - check inclusief of Exclusief bij AAIT (via bes_bestelling_item)!!!
|
||||
INTO v_bedrag_totaal, v_prs_bedrijf_key
|
||||
FROM bes_bestelopdr b, bes_bestelopdr_item br
|
||||
WHERE b.bes_bestelopdr_key = br.bes_bestelopdr_key
|
||||
AND b.bes_bestelopdr_key = rec.bes_bestelopdr_key
|
||||
GROUP BY b.bes_bestelopdr_key;
|
||||
GROUP BY b.prs_bedrijf_key;
|
||||
|
||||
SELECT count(*)
|
||||
INTO v_count_gefactureerd
|
||||
FROM fin_factuur
|
||||
WHERE bes_bestelopdr_key = rec.bes_bestelopdr_key;
|
||||
WHERE bes_bestelopdr_key = rec.bes_bestelopdr_key
|
||||
AND fin_factuur_verwijder IS NULL;
|
||||
|
||||
IF v_count_gefactureerd > 1
|
||||
THEN
|
||||
@@ -12047,7 +12220,26 @@ BEGIN
|
||||
INTO v_bedrag_gefactureerd
|
||||
FROM fin_factuur f
|
||||
WHERE f.bes_bestelopdr_key = rec.bes_bestelopdr_key
|
||||
AND f.fin_factuur_key NOT IN (rec.fin_factuur_key) ;
|
||||
AND f.fin_factuur_key NOT IN (rec.fin_factuur_key)
|
||||
AND f.fin_factuur_verwijder IS NULL ;
|
||||
END IF;
|
||||
|
||||
-- Als de hetzelfde factuurnummer al vaker op deze opdracht is geregistreerd, dan moet deze factuur ter controle
|
||||
SELECT count(*)
|
||||
INTO v_count_gefactureerd_nr
|
||||
FROM fin_factuur
|
||||
WHERE bes_bestelopdr_key = rec.bes_bestelopdr_key
|
||||
AND fin_factuur_key NOT IN (rec.fin_factuur_key)
|
||||
AND fin_factuur_nr = rec.factuurnr
|
||||
AND fin_factuur_verwijder IS NULL ;
|
||||
|
||||
IF v_count_gefactureerd_nr > 0
|
||||
THEN
|
||||
|
||||
v_aanduiding_controle := 'Dit zelfde factuur-nummer is al eerder geregistreerd op deze Opdracht. Controleer of dit klopt' ;
|
||||
v_controle := 1 ;
|
||||
|
||||
fac.trackaction ('FINUPD', rec.fin_factuur_key, 4, NULL, v_aanduiding_controle);
|
||||
END IF;
|
||||
|
||||
END IF;
|
||||
@@ -12064,7 +12256,8 @@ BEGIN
|
||||
SELECT count(*)
|
||||
INTO v_count_gefactureerd
|
||||
FROM fin_factuur
|
||||
WHERE cnt_contract_key = rec.cnt_contract_key;
|
||||
WHERE cnt_contract_key = rec.cnt_contract_key
|
||||
AND fin_factuur_verwijder IS NULL;
|
||||
|
||||
IF v_count_gefactureerd > 1
|
||||
THEN
|
||||
@@ -12072,17 +12265,30 @@ BEGIN
|
||||
INTO v_bedrag_gefactureerd
|
||||
FROM fin_factuur f
|
||||
WHERE f.cnt_contract_key = rec.cnt_contract_key
|
||||
-- AND NOT EXISTS
|
||||
-- (SELECT 1
|
||||
-- FROM fin_factuur ff
|
||||
-- WHERE ff.fin_factuur_key = rec.fin_factuur_key) ;
|
||||
AND f.fin_factuur_key NOT IN (rec.fin_factuur_key) ;
|
||||
AND f.fin_factuur_key NOT IN (rec.fin_factuur_key)
|
||||
AND f.fin_factuur_verwijder IS NULL ;
|
||||
END IF;
|
||||
|
||||
-- Als de hetzelfde factuurnummer al vaker op deze opdracht is geregistreerd, dan moet deze factuur ter controle
|
||||
SELECT count(*)
|
||||
INTO v_count_gefactureerd_nr
|
||||
FROM fin_factuur
|
||||
WHERE cnt_contract_key = rec.cnt_contract_key
|
||||
AND fin_factuur_key NOT IN (rec.fin_factuur_key)
|
||||
AND fin_factuur_nr = rec.factuurnr
|
||||
AND fin_factuur_verwijder IS NULL ;
|
||||
|
||||
IF v_count_gefactureerd_nr > 0
|
||||
THEN
|
||||
|
||||
v_aanduiding_controle := 'Dit zelfde factuur-nummer is al eerder geregistreerd op deze Opdracht. Controleer of dit klopt' ;
|
||||
v_controle := 1 ;
|
||||
|
||||
fac.trackaction ('FINUPD', rec.fin_factuur_key, 4, NULL, v_aanduiding_controle);
|
||||
END IF;
|
||||
|
||||
END IF;
|
||||
|
||||
|
||||
|
||||
-- Bepalen of kenmerk LaatsteFactuur op JA(1) of op NEE(2) moet
|
||||
---- LET OP! Nog inpassen Opdrachttype = "Voor alle ordersoorten eindfactuur standaard JA, behalve voor projecten (PR + M), dan standaard op NEE"
|
||||
IF v_bedrag_totaal <= rec.fin_factuur_totaal + v_bedrag_gefactureerd
|
||||
@@ -12090,16 +12296,101 @@ BEGIN
|
||||
-- Zet kenmerk laatste factuur op Ja
|
||||
v_errormsg := '(0x143d)'; -- WEL of NIET errormsg goed inpassen...
|
||||
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
|
||||
VALUES (rec.fin_factuur_key, 2, DECODE(aaxx_get_user, 'SABIC', 24, 1));
|
||||
|
||||
VALUES (rec.fin_factuur_key, 2, v_fac_usrdata_key_ja);
|
||||
|
||||
ELSE
|
||||
-- Zet kenmerk laatste factuur op Nee
|
||||
v_errormsg := '(0x143d)';
|
||||
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
|
||||
VALUES (rec.fin_factuur_key, 2, DECODE(aaxx_get_user, 'SABIC', 25, 2));
|
||||
VALUES (rec.fin_factuur_key, 2, v_fac_usrdata_key_nee);
|
||||
|
||||
END IF;
|
||||
|
||||
-- Verdeelperiode voor de contracten bepalen - Daarvoor eerst nog diverse parameters te vullen
|
||||
|
||||
IF rec.cnt_contract_key IS NOT NULL
|
||||
THEN
|
||||
SELECT ROUND((c.cnt_contract_looptijd_tot - c.cnt_contract_looptijd_van)/30) cnt_looptijd_mnd,
|
||||
fac.safe_to_number((TO_CHAR (c.cnt_contract_looptijd_tot, 'yyyy'))) cnt_jaar_start,
|
||||
fac.safe_to_number((TO_CHAR (c.cnt_contract_looptijd_van, 'yyyy'))) cnt_jaar_eind,
|
||||
t.cnt_termijn_type, t.cnt_termijn_aantal
|
||||
INTO v_cnt_looptijd_mnd, v_cnt_jaar_start, v_cnt_jaar_eind, v_cnt_termijn_type, v_cnt_termijn_aantal
|
||||
FROM cnt_contract c, cnt_termijn t
|
||||
WHERE c.cnt_contract_key = rec.cnt_contract_key
|
||||
AND c.cnt_contract_termijntermijn = t.cnt_termijn_key (+) ;
|
||||
|
||||
-- Bepalen of het een gebroken boekjaar is...
|
||||
IF v_cnt_jaar_start <> v_cnt_jaar_eind
|
||||
THEN
|
||||
|
||||
v_gebroken_boekjaar := 1 ;
|
||||
|
||||
END IF;
|
||||
|
||||
-- Indien geen gebroken boekjaar, dan kunnen we als volgt verdeelperiode bepalen
|
||||
IF v_gebroken_boekjaar = 0
|
||||
THEN
|
||||
|
||||
v_cnt_deel_betaald_1 := (v_bedrag_gefactureerd / v_bedrag_totaal) * v_cnt_looptijd_mnd ;
|
||||
v_cnt_deel_betaald_2 := ((v_bedrag_gefactureerd + rec.fin_factuur_totaal) / v_bedrag_totaal) * v_cnt_looptijd_mnd ;
|
||||
v_verdeelperiode_2 := TO_CHAR(FLOOR(v_cnt_deel_betaald_2)) ;
|
||||
|
||||
-- 9 moet 09 worden
|
||||
IF LENGTH (v_verdeelperiode_2) = 1 THEN v_verdeelperiode_2 := '0' || v_verdeelperiode_2 ; END IF;
|
||||
|
||||
-- De huidige hoogste boekmaand ophalen
|
||||
SELECT count(*)
|
||||
INTO v_count_verdeelperiode_1
|
||||
FROM fin_factuur
|
||||
WHERE cnt_contract_key = rec.cnt_contract_key AND fin_factuur_boekmaand IS NOT NULL AND fin_factuur_key NOT IN (rec.fin_factuur_key) ;
|
||||
|
||||
IF v_count_verdeelperiode_1 > 0
|
||||
THEN
|
||||
|
||||
SELECT TO_CHAR(MAX(fac.safe_to_number(SUBSTR(f.fin_factuur_boekmaand, 6))))
|
||||
INTO v_verdeelperiode_1
|
||||
FROM fin_factuur f
|
||||
WHERE cnt_contract_key = rec.cnt_contract_key AND fin_factuur_boekmaand IS NOT NULL AND fin_factuur_key NOT IN (rec.fin_factuur_key) ;
|
||||
|
||||
END IF;
|
||||
|
||||
-- boekmaand nieuwe factuur bepalen
|
||||
---- Deze moet groter of gelijk zijn aan de maximale verdeelperiode EN is kleiner of gelijk aan v_cnt_looptijd_mnd
|
||||
IF fac.safe_to_number(v_verdeelperiode_2) >= fac.safe_to_number(v_verdeelperiode_1) AND fac.safe_to_number(v_verdeelperiode_2) <= v_cnt_looptijd_mnd
|
||||
THEN
|
||||
|
||||
-- Credit altijd in laatste boekmaand opnemen
|
||||
IF rec.fin_factuur_totaal < 0 THEN v_fin_factuur_boekmaand := v_cnt_jaar_start || '-' || v_verdeelperiode_1; END IF;
|
||||
|
||||
IF rec.fin_factuur_totaal > 0 THEN v_fin_factuur_boekmaand := v_cnt_jaar_start || '-' || v_verdeelperiode_2; END IF;
|
||||
|
||||
-- wegschrijven in een kenmerkveld
|
||||
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
|
||||
VALUES (rec.fin_factuur_key, c_kenmerk_key_boekmaand, v_fin_factuur_boekmaand);
|
||||
|
||||
-- anders klopt het niet..
|
||||
ELSE
|
||||
|
||||
v_aanduiding_controle := 'Verdeelperiode voor Contract kan niet goed bepaald worden. Controleer deze' ;
|
||||
v_controle := 1 ;
|
||||
|
||||
fac.trackaction ('FINUPD', rec.fin_factuur_key, 4, NULL, v_aanduiding_controle);
|
||||
|
||||
END IF;
|
||||
|
||||
|
||||
-- gebroken boekjaar = 1
|
||||
ELSE
|
||||
-- NOG UITWERKEN - Voorbeeld:
|
||||
--- Contractperiode: 2020 - oktober t/m 2021 - maart = 6 maanden
|
||||
--- Verdeelperiodes zijn: 2020-1, 2020-2, 2020-3, 2021-1, 2021-2, 2021-3
|
||||
v_cnt_deel_betaald_1 := (v_bedrag_gefactureerd / v_bedrag_totaal) * v_cnt_looptijd_mnd ;
|
||||
v_cnt_deel_betaald_2 := ((v_bedrag_gefactureerd + rec.fin_factuur_totaal) / v_bedrag_totaal) * v_cnt_looptijd_mnd ;
|
||||
|
||||
END IF;
|
||||
|
||||
END IF;
|
||||
|
||||
|
||||
-- Veld debiteurnummer nog vullen indien gevuld bij relatie
|
||||
IF v_klantnummer_key IS NOT NULL
|
||||
@@ -12121,8 +12412,30 @@ BEGIN
|
||||
|
||||
END IF;
|
||||
END IF;
|
||||
|
||||
-- Voor Contracten geldt dat ze nog ter controle moeten als er automatisch een hoogste contractversie-nummer gekoppeld wordt
|
||||
IF rec.kenmerk2 = 'ter controle'
|
||||
THEN
|
||||
|
||||
v_aanduiding_controle := 'Contract is op factuur zonder versie-nummer weergegeven. Hoogste versienr is gekoppeld. Controleer of dit klopt' ;
|
||||
v_controle := 1 ;
|
||||
|
||||
fac.trackaction ('FINUPD', rec.fin_factuur_key, 4, NULL, v_aanduiding_controle);
|
||||
|
||||
END IF;
|
||||
|
||||
|
||||
-- tot slot controle-vinkje zetten indien nodig
|
||||
IF v_controle = 1
|
||||
THEN
|
||||
|
||||
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;
|
||||
|
||||
-- tot slot nog nette logging
|
||||
|
||||
v_aanduiding := 'Mareon-factuurimport: Voor deze verplichting de ' || TO_CHAR(v_count_gefactureerd) || 'e factuur.' ;
|
||||
fac.trackaction ('FINUPD', rec.fin_factuur_key, 4, NULL, v_aanduiding);
|
||||
|
||||
@@ -19446,6 +19759,10 @@ AS
|
||||
v_result NUMBER;
|
||||
v_factuur_key fin_factuur.fin_factuur_key%TYPE;
|
||||
v_kenmerk_key fin_kenmerk.fin_kenmerk_key%TYPE;
|
||||
v_fac_usrdata_key_ja NUMBER(10);
|
||||
v_fac_usrdata_key_nee NUMBER(10);
|
||||
|
||||
|
||||
BEGIN
|
||||
errormsg := '(0x143)';
|
||||
|
||||
@@ -19514,9 +19831,22 @@ BEGIN
|
||||
INTO v_factuur_key;
|
||||
|
||||
-- Zet kenmerk laatste factuur op Ja
|
||||
-- Ophalen key-waarde Ja van kenmerkveld Laatste Factuur
|
||||
SELECT ud.fac_usrdata_key
|
||||
INTO v_fac_usrdata_key_ja
|
||||
FROM fin_kenmerk k,
|
||||
fac_kenmerkdomein kd,
|
||||
fac_usrtab ut,
|
||||
fac_usrdata ud
|
||||
WHERE fin_kenmerk_key = 2
|
||||
AND k.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key
|
||||
AND kd.fac_usrtab_key = ut.fac_usrtab_key
|
||||
AND ut.fac_usrtab_key = ud.fac_usrtab_key
|
||||
AND fac.safe_to_number (ud.fac_usrdata_code) = 1; -- Waarde is Ja
|
||||
|
||||
errormsg := '(0x143d)';
|
||||
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
|
||||
VALUES (v_factuur_key, 2, DECODE(aaxx_get_user, 'SABIC', 24, 1));
|
||||
VALUES (v_factuur_key, 2, v_fac_usrdata_key_ja);
|
||||
|
||||
-- Bepaal de key van de bijlages
|
||||
errormsg := '(0x143e)';
|
||||
|
||||
Reference in New Issue
Block a user