diff --git a/l10n_do_accounting/__manifest__.py b/l10n_do_accounting/__manifest__.py index f5fba807..ace62c09 100644 --- a/l10n_do_accounting/__manifest__.py +++ b/l10n_do_accounting/__manifest__.py @@ -8,7 +8,7 @@ "category": "Localization", "license": "LGPL-3", "website": "https://github.com/odoo-dominicana", - "version": "16.0.1.5.4", + "version": "16.0.1.5.5", # any module necessary for this one to work correctly "depends": ["l10n_latam_invoice_document", "l10n_do"], # always loaded diff --git a/l10n_do_accounting/models/account_move.py b/l10n_do_accounting/models/account_move.py index b8a2523b..0c9ae3da 100644 --- a/l10n_do_accounting/models/account_move.py +++ b/l10n_do_accounting/models/account_move.py @@ -871,3 +871,20 @@ def unlink(self): _("You cannot delete fiscal invoice which have been posted before") ) return super(AccountMove, self).unlink() + + # Extension of the _deduce_sequence_number_reset function to compute the `name` field according to the invoice + # date and prevent the `l10n_latam_document_number` field from being reset + @api.model + def _deduce_sequence_number_reset(self, name): + name_values = ['/', False, '', '1'] + + if (self.l10n_latam_use_documents + and self.company_id.country_id.code == "DO" + and name not in name_values + and not self._context.get("is_l10n_do_seq", False)): + return 'year' + elif self._context.get("is_l10n_do_seq", False): + return 'never' + else: + 'never' + return super(AccountMove, self)._deduce_sequence_number_reset(name) diff --git a/l10n_do_accounting/tests/test_account_move.py b/l10n_do_accounting/tests/test_account_move.py index 6191eda4..4604a537 100644 --- a/l10n_do_accounting/tests/test_account_move.py +++ b/l10n_do_accounting/tests/test_account_move.py @@ -703,6 +703,17 @@ def test_009_invoice_sequence(self): self.assertEqual(invoice_2.name, "INV/%s/0002" % invoice_2.date.year) self.assertEqual(invoice_2.l10n_do_fiscal_number, "B0100000002") + # Unit test to verify if the invoice number or document number is repeated + invoice_3 = self._create_l10n_do_invoice( + data={ + "invoice_date": "2023-05-08", + } + ) + invoice_3._post() + self.assertEqual(invoice_3.name, "INV/%s/0001" % invoice_3.date.year) + self.assertNotEqual(invoice_3.l10n_do_fiscal_number, "B0100000001") + self.assertEqual(invoice_3.l10n_do_fiscal_number, "B0100000003") + def test_010_ncf_format(self): with self.assertRaises(ValidationError): self._create_l10n_do_invoice(data={"document_number": "E0100000001"})