Skip to content

Commit

Permalink
[IMP] account_invoice_import: add support for discount
Browse files Browse the repository at this point in the history
Add support for discount on lines in the multi-line create scenario
Fix force tax scenario and simplify the code
  • Loading branch information
alexis-via committed Sep 29, 2024
1 parent 8a62d64 commit aa2f60a
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 16 deletions.
9 changes: 6 additions & 3 deletions account_invoice_import/tests/test_invoice_import.py
Original file line number Diff line number Diff line change
Expand Up @@ -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": [
Expand All @@ -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"]
)
Expand Down
21 changes: 8 additions & 13 deletions account_invoice_import/wizard/account_invoice_import.py
Original file line number Diff line number Diff line change
Expand Up @@ -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'},
Expand Down Expand Up @@ -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))
Expand Down Expand Up @@ -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"
)
Expand Down Expand Up @@ -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")
Expand Down Expand Up @@ -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(
Expand Down

0 comments on commit aa2f60a

Please sign in to comment.