FCLT#57833 test/afronding

svn path=/Database/trunk/; revision=43704
This commit is contained in:
Peter Feij
2019-08-09 15:32:43 +00:00
parent 2f6696f13b
commit e3f144e93c
2 changed files with 44 additions and 30 deletions

View File

@@ -308,13 +308,14 @@ AS
factuurschemabedrag cnt_factuurschema.cnt_factuurschema_bedrag%TYPE;
contractkosten cnt_contract.cnt_contract_kosten%TYPE;
opdrachtkosten mld_opdr.mld_opdr_kosten%TYPE;
typeopdr_uren mld_typeopdr.mld_typeopdr_uren%TYPE;
typeopdr_factuur mld_typeopdr.mld_typeopdr_factuur%TYPE;
factuurbedrag NUMBER (12, 2);
bestelbedrag NUMBER (12, 2); -- van de opdracht waar deze factuur over gaat
totaalgefactureerd NUMBER (12, 2); -- met deze factuur erbij eerder gefactureerd van dezelfde B(R)OC
totaaltermijngefactureerd NUMBER (12, 2); -- met deze factuur erbij eerder gefactureerd van dezelfde C igv factuurschema-gebruik
totaaltermijngefactureerdbtw NUMBER (12, 2); -- met deze factuur erbij eerder gefactureerd van dezelfde C igv factuurschema-gebruik
totaalgefactureerdbtw NUMBER (12, 2);
aantalgefactureerd NUMBER := 0;
opdrstatus mld_opdr.mld_statusopdr_key%TYPE;
retval NUMBER := 0;
inclbtw NUMBER := 0;
@@ -520,7 +521,7 @@ AS
-- We doen er toch niks mee: factmatchmode := fin.getfactmatchmode (discipline, 'C');
-- hoeveel is er met deze factuur erbij totaal voor dit contract gefactureerd
-- hoeveel is er *met deze factuur erbij* totaal voor dit contract gefactureerd
SELECT SUM (fin_factuur_totaal), SUM (fin_factuur_totaal_btw)
INTO totaalgefactureerd, totaalgefactureerdbtw
FROM fin_factuur
@@ -557,15 +558,15 @@ AS
--
WHEN ftype = 'O'
THEN
-- controleer op basis van typeopdr_uren
-- controleer op basis van mld_typeopdr_factuur
BEGIN
SELECT o.mld_opdr_kosten,
sm.mld_ins_discipline_key,
top.mld_typeopdr_uren,
top.mld_typeopdr_factuur,
o.mld_statusopdr_key
INTO opdrachtkosten,
discipline,
typeopdr_uren,
typeopdr_factuur,
opdrstatus
FROM mld_opdr o,
mld_melding m,
@@ -574,19 +575,21 @@ AS
WHERE o.mld_melding_key = m.mld_melding_key
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
AND o.mld_typeopdr_key = top.mld_typeopdr_key
AND top.mld_typeopdr_kosten = 1 -- daar mag een factuur bij
--AND top.mld_typeopdr_uren NOT IN (3, 4, 5) -- bij interne uren geen facturen
AND top.mld_typeopdr_factuur <> 0 -- dan willen we ook geen factuur
AND top.mld_typeopdr_kosten = 1 -- daar mag een factuur bij
AND mld_statusopdr_key NOT IN (1, 2, 3, 10) -- dat zijn (nog) ongeldige opdrachten
AND mld_opdr_key = o_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.put_line (
'Bijbehorende opdracht(status/kosten?) is ongeldig: ' || o_key);
'Bijbehorende opdracht(status/kosten/type) is ongeldig: ' || o_key);
RETURN -1;
END;
DBMS_OUTPUT.put_line ('opdrachtkosten: ' || opdrachtkosten);
DBMS_OUTPUT.put_line ('typeopdr_uren: ' || typeopdr_uren);
DBMS_OUTPUT.put_line ('typeopdr_factuur: ' || typeopdr_factuur);
DBMS_OUTPUT.put_line ('opdrstatus: ' || opdrstatus);
SELECT MAX( (SELECT ks.prs_kostensoort_btw
@@ -614,34 +617,43 @@ AS
RETURN -1;
END IF;
IF typeopdr_uren = 5 -- Opdrachttype-Uren: Interne uren per week verplicht(5).
THEN
DBMS_OUTPUT.put_line ('typeopdr_uren "Internal hours per week(5)" unsupported yet!');
RETURN 0;
END IF;
SELECT SUM (fin_factuur_totaal), SUM (fin_factuur_totaal_btw)
INTO totaalgefactureerd, totaalgefactureerdbtw
SELECT SUM (fin_factuur_totaal), SUM (fin_factuur_totaal_btw), COUNT(*)
INTO totaalgefactureerd, totaalgefactureerdbtw, aantalgefactureerd
FROM fin_factuur
WHERE mld_opdr_key = o_key
AND fin_factuur_statuses_key <> 1
AND fin_factuur_verwijder IS NULL
AND fin_factuur_datum <= factuurdatum;
IF inclbtw = 1 -- Opdrachtbedragen zijn dus inclusief, dan ook factuur inclusief matchen
-- Hier kunnen we iets met de deels nieuwe opties
-- '0;Geen facturen;1;E<>n factuur (vaste prijs);2;E<>n factuur (nacalculatie);3;Meerdere facturen;4;Contracttermijnen',
-- 0 hebben we direct al afgevangen
-- 1 en 2 verdragen geen eerdere factuur
IF typeopdr_factuur IN (1,2) AND aantalgefactureerd>1
THEN
DBMS_OUTPUT.put_line ('Inclusief BTW');
totaalgefactureerd := totaalgefactureerd + totaalgefactureerdbtw;
END IF;
IF fin.tolerantiematch (discipline,
ftype,
totaalgefactureerd,
opdrachtkosten) = 1
THEN
retval := 1;
-- er is al een eerdere factuur, dan is de rest fout
retval := -1;
ELSE
retval := -1;
-- dan is dit 3 of de eerste van 1 of 2
IF inclbtw = 1 -- Opdrachtbedragen zijn dus inclusief, dan ook factuur inclusief matchen
THEN
DBMS_OUTPUT.put_line ('Inclusief BTW');
totaalgefactureerd := totaalgefactureerd + totaalgefactureerdbtw;
END IF;
IF typeopdr_factuur = 2
THEN
retval := 1;
ELSE
IF fin.tolerantiematch (discipline,
ftype,
totaalgefactureerd,
opdrachtkosten) = 1
THEN
retval := 1;
ELSE
retval := -1;
END IF;
END IF;
END IF;
ELSE
retval := 0;