Skip to content

Commit d9da584

Browse files
committed
[ADD] l10n_latam_invoice_document_ux: Add new module to handle duplication of errors
1 parent 10fa70f commit d9da584

4 files changed

Lines changed: 61 additions & 19 deletions

File tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from . import models
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from . import account_move
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Part of Odoo. See LICENSE file for full copyright and licensing details.
2+
3+
from odoo import models
4+
5+
6+
class AccountMove(models.Model):
7+
_inherit = "account.move"
8+
9+
def _post(self, soft=True):
10+
"""Override to validate document number format before posting.
11+
This ensures format errors are shown first, preventing duplicate error messages.
12+
Only applies to vendor bills."""
13+
# Validate document number format before posting (only for vendor bills)
14+
vendor_bills = self.filtered(
15+
lambda x: (
16+
x.l10n_latam_use_documents
17+
and x.l10n_latam_manual_document_number
18+
and x.move_type in ("in_invoice", "in_refund")
19+
)
20+
)
21+
for rec in vendor_bills:
22+
if rec.l10n_latam_document_number and rec.l10n_latam_document_type_id:
23+
if not rec._skip_format_document_number():
24+
# This will raise UserError if format is invalid
25+
# We let it propagate so the user sees the original format error
26+
rec.l10n_latam_document_type_id._format_document_number(rec.l10n_latam_document_number)
27+
return super()._post(soft)

l10n_latam_invoice_document_ux/tests/test_patch_l10n_ar.py

Lines changed: 32 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from odoo import tools
2+
from odoo.exceptions import ValidationError
23
from odoo.tests import Form, common, tagged
34

45

@@ -32,15 +33,17 @@ def test_15_liquido_producto_sales_patch(self):
3233

3334
# 60, 61, 27, 28, 45, 46
3435
# In this case manual numbering should be True and the latam document numer should be required
35-
with self.assertRaisesRegex(AssertionError, "l10n_latam_document_number is a required field"):
36-
with Form(self.env["account.move"].with_context(default_move_type="out_invoice")) as invoice_form:
37-
invoice_form.ref = "demo_liquido_producto_1: Vendor bill liquido producto (DOC 186)"
38-
invoice_form.partner_id = self.res_partner_adhoc
39-
invoice_form.invoice_payment_term_id = payment_term_id
40-
invoice_form.journal_id = self.journal
41-
invoice_form.l10n_latam_document_type_id = doc_27_lu_a
42-
invoice = invoice_form.save()
43-
invoice.action_post() # Agregamos esta linea para que se dispare la validacion al momento de validar la factura y no antes
36+
with Form(self.env["account.move"].with_context(default_move_type="out_invoice")) as invoice_form:
37+
invoice_form.ref = "demo_liquido_producto_1: Vendor bill liquido producto (DOC 186)"
38+
invoice_form.partner_id = self.res_partner_adhoc
39+
invoice_form.invoice_payment_term_id = payment_term_id
40+
invoice_form.journal_id = self.journal
41+
invoice_form.l10n_latam_document_type_id = doc_27_lu_a
42+
invoice = invoice_form.save()
43+
44+
# Should fail when posting without document number
45+
with self.assertRaisesRegex(ValidationError, "Please set the document number"):
46+
invoice.action_post()
4447

4548
# Adding the document number will let us to save and validate the number without any problems
4649
with Form(self.env["account.move"].with_context(default_move_type="out_invoice")) as invoice_form:
@@ -69,17 +72,23 @@ def test_16_liquido_producto_purchase_patch(self):
6972
doc_60_lp_a = self.env.ref("l10n_ar.dc_a_cvl")
7073
payment_term_id = self.env.ref("account.account_payment_term_end_following_month")
7174

72-
with self.assertRaisesRegex(AssertionError, "l10n_latam_document_number is a required field"):
73-
with Form(self.env["account.move"].with_context(default_move_type="in_invoice")) as bill_form:
74-
bill_form.ref = "demo_liquido_producto_1: Vendor bill liquido producto (DOC 186)"
75-
bill_form.partner_id = self.res_partner_adhoc
76-
bill_form.invoice_payment_term_id = payment_term_id
77-
bill_form.invoice_date = "2023-02-09"
78-
bill_form.l10n_latam_document_type_id = doc_60_lp_a
79-
bill = bill_form.save()
80-
bill.action_post() # Agregamos esta linea para que se dispare la validacion al momento de validar la factura y no antes
75+
with Form(self.env["account.move"].with_context(default_move_type="in_invoice")) as bill_form:
76+
bill_form.ref = "demo_liquido_producto_1: Vendor bill liquido producto (DOC 186)"
77+
bill_form.partner_id = self.res_partner_adhoc
78+
bill_form.invoice_payment_term_id = payment_term_id
79+
bill_form.invoice_date = "2023-02-09"
80+
bill_form.l10n_latam_document_type_id = doc_60_lp_a
81+
with bill_form.invoice_line_ids.new() as line_form:
82+
line_form.product_id = self.env.ref("product.product_product_4")
83+
line_form.quantity = 1
84+
line_form.price_unit = 100
85+
bill = bill_form.save()
86+
87+
self.assertEqual(bill.journal_id, purchase_not_pos_journal)
8188

82-
self.assertEqual(bill.journal_id, purchase_not_pos_journal)
89+
# Should fail when posting without document number
90+
with self.assertRaisesRegex(ValidationError, "Please set the document number"):
91+
bill.action_post()
8392

8493
# Create a new journal that is an ARCA POS
8594
purchase_pos_journal = self._create_journal("preprinted", data={"type": "purchase", "l10n_ar_is_pos": True})
@@ -92,6 +101,10 @@ def test_16_liquido_producto_purchase_patch(self):
92101
bill_form.journal_id = purchase_pos_journal
93102
bill_form.l10n_latam_document_type_id = doc_60_lp_a
94103
bill_form.l10n_latam_document_number = "00077-00000077"
104+
with bill_form.invoice_line_ids.new() as line_form:
105+
line_form.product_id = self.env.ref("product.product_product_4")
106+
line_form.quantity = 1
107+
line_form.price_unit = 100
95108
bill = bill_form.save()
96109
bill.action_post()
97110

0 commit comments

Comments
 (0)