Skip to content

Commit ba95d0f

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

4 files changed

Lines changed: 51 additions & 11 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: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from odoo import tools
22
from odoo.tests import Form, common, tagged
3+
from odoo.exceptions import ValidationError
34

45

56
@tagged("post_install", "-at_install")
@@ -40,7 +41,7 @@ def test_15_liquido_producto_sales_patch(self):
4041
invoice_form.journal_id = self.journal
4142
invoice_form.l10n_latam_document_type_id = doc_27_lu_a
4243
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
44+
4445

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

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
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+
with bill_form.invoice_line_ids.new() as line_form:
80+
line_form.product_id = self.env.ref("product.product_product_4")
81+
line_form.quantity = 1
82+
line_form.price_unit = 100
83+
bill = bill_form.save() # Agregamos esta linea para que se dispare la validacion al momento de validar la factura y no antes
84+
85+
self.assertEqual(bill.journal_id, purchase_not_pos_journal)
8186

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

8491
# Create a new journal that is an ARCA POS
8592
purchase_pos_journal = self._create_journal("preprinted", data={"type": "purchase", "l10n_ar_is_pos": True})
@@ -92,6 +99,10 @@ def test_16_liquido_producto_purchase_patch(self):
9299
bill_form.journal_id = purchase_pos_journal
93100
bill_form.l10n_latam_document_type_id = doc_60_lp_a
94101
bill_form.l10n_latam_document_number = "00077-00000077"
102+
with bill_form.invoice_line_ids.new() as line_form:
103+
line_form.product_id = self.env.ref("product.product_product_4")
104+
line_form.quantity = 1
105+
line_form.price_unit = 100
95106
bill = bill_form.save()
96107
bill.action_post()
97108

0 commit comments

Comments
 (0)