diff --git a/account_invoice_import/tests/test_invoice_import.py b/account_invoice_import/tests/test_invoice_import.py index a49b10517a..cc38057cfe 100644 --- a/account_invoice_import/tests/test_invoice_import.py +++ b/account_invoice_import/tests/test_invoice_import.py @@ -264,7 +264,8 @@ def test_import_out_invoice(self): "product": {"code": "AII-TEST-PRODUCT"}, "name": "Super product", "qty": 3, - "price_unit": 10.22, + "price_unit": 100, + "discount": 10, "date_start": "2017-08-01", "date_end": "2017-08-31", "taxes": [ @@ -286,8 +287,10 @@ def test_import_out_invoice(self): .with_company(self.company.id) .create_invoice(parsed_inv, import_config) ) - self.assertFalse(inv.currency_id.compare_amounts(inv.amount_untaxed, 30.66)) - self.assertFalse(inv.currency_id.compare_amounts(inv.amount_total, 30.97)) + self.assertFalse( + inv.currency_id.compare_amounts(inv.amount_untaxed, 270.00) + ) + self.assertFalse(inv.currency_id.compare_amounts(inv.amount_total, 272.70)) self.assertEqual( fields.Date.to_string(inv.invoice_date), parsed_inv["date"] ) diff --git a/account_invoice_import/wizard/account_invoice_import.py b/account_invoice_import/wizard/account_invoice_import.py index 501ff52d99..1214e4f3d9 100644 --- a/account_invoice_import/wizard/account_invoice_import.py +++ b/account_invoice_import/wizard/account_invoice_import.py @@ -160,8 +160,9 @@ def fallback_parse_pdf_invoice(self, file_data): # }, # 'name': 'Gelierzucker Extra 250g', # 'price_unit': 1.45, # price_unit without taxes + # 'discount': 10.0, # for 10% discount # 'qty': 2.0, - # 'price_subtotal': 2.90, # not required, but needed + # 'price_subtotal': 2.61, # not required, but needed # to be able to generate adjustment lines when decimal # precision is not high enough in Odoo # 'uom': {'unece_code': 'C62'}, @@ -385,6 +386,7 @@ def _prepare_line_vals_nline(self, partner, vals, parsed_inv, import_config): { "quantity": line["qty"], "price_unit": line["price_unit"], # TODO fix for tax incl + "discount": line.get("discount", 0), } ) vals["invoice_line_ids"].append((0, 0, il_vals)) @@ -497,6 +499,7 @@ def pre_process_parsed_inv(self, parsed_inv): if not parsed_inv.get("currency_rec"): self.get_currency_helper(parsed_inv) prec_pp = self.env["decimal.precision"].precision_get("Product Price") + prec_disc = self.env["decimal.precision"].precision_get("Discount") prec_uom = self.env["decimal.precision"].precision_get( "Product Unit of Measure" ) @@ -538,6 +541,9 @@ def pre_process_parsed_inv(self, parsed_inv): line["price_unit"] = float_round( line["price_unit"], precision_digits=prec_pp ) + line["discount"] = float_round( + line.get("discount", 0), precision_digits=prec_disc + ) parsed_inv_for_log = dict(parsed_inv) if "attachments" in parsed_inv_for_log: parsed_inv_for_log.pop("attachments") @@ -1115,21 +1121,10 @@ def post_process_invoice(self, parsed_inv, invoice, import_config): ), ) ) - new_balance = invoice.currency_id._convert( - new_amount_currency, - invoice.company_id.currency_id, - invoice.company_id, - invoice.date, - ) vals = {"amount_currency": new_amount_currency} - if company_cur.compare_amounts(new_balance, 0) > 0: - vals["debit"] = new_balance - vals["credit"] = 0 - else: - vals["debit"] = 0 - vals["credit"] = new_balance * -1 logger.info("Force VAT amount with diff=%s", diff_tax_amount) mline.write(vals) + invoice._compute_amount() break if not has_tax_line: raise UserError(