diff --git a/FAC/FAC_LCL.SRC b/FAC/FAC_LCL.SRC index 6b704fd3..c25c82e2 100644 --- a/FAC/FAC_LCL.SRC +++ b/FAC/FAC_LCL.SRC @@ -5553,8 +5553,10 @@ FAC_LCL('mld_typeopdr_totaalLOV', '0;Calculated;1;To fill in') FAC_LCL('mld_typeopdr_factuurmatching', 'Qua facturatie', 'Invoicing') FAC_LCL('mld_typeopdr_factuurmatchLOV', - '0;Geen facturen;1;Eén factuur (vaste prijs);2;Eén factuur (nacalculatie);3;Meerdere facturen;4;Contracttermijnen', - '0;No charge;1;One invoice (fixed price);2;One invoice (subsequent calculation);3;Multiple invoices;4;Contract terms') +// '0;Geen facturen;1;Eén factuur (bedrag bekend);2;Eén factuur (bedrag onbekend);3;Meerdere facturen;4;Contracttermijnen', + '0;Geen facturen;1;Eén factuur;3;Meerdere facturen', +// '0;No charge;1;One invoice (fixed price);2;One invoice (subsequent calculation);3;Multiple invoices;4;Contract terms') + '0;No charge;1;One invoice;2;3;Multiple invoices') FAC_LCL('mld_typeopdr_afmeldmarge', 'Marge afmeld-datering (dagen)', 'Close-date margin (days)') FAC_LCL('mld_typeopdr_zichtbaarfe', 'Zichtbaar voor FE', 'Visible for FE') FAC_LCL('mld_typeopdr_isofferte', 'Offerteaanvraag', 'Offer request') diff --git a/FIN/FIN_PAC.SRC b/FIN/FIN_PAC.SRC index b75cd6bb..001ba7ae 100644 --- a/FIN/FIN_PAC.SRC +++ b/FIN/FIN_PAC.SRC @@ -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;