Odoo18-Base/addons/l10n_uy/models/account_move.py
2025-01-06 10:57:38 +07:00

51 lines
2.6 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models
# Let us match the document types to properly suggest the DN and CN documents
# NOTE: this can be avoided if we have an extra subclassification of UY documents
UY_DOC_SUBTYPES = [
["0"], # not electronic
["101", "102", "103", "201", "202", "203"], # e-ticket
["111", "112", "113", "211", "212", "213"], # e-invoice
["121", "122", "123", "221", "222", "223"], # e-inv-expo
["151", "152", "153", "251", "252", "253"], # e-boleta (not implemented yet)
]
class AccountMove(models.Model):
_inherit = 'account.move'
def _get_starting_sequence(self):
""" If use documents then will create a new starting sequence using the document type code prefix and the
journal document number with a 8 padding number """
if self.journal_id.l10n_latam_use_documents and self.company_id.account_fiscal_country_id.code == "UY" and self.l10n_latam_document_type_id:
return self._l10n_uy_get_formatted_sequence()
return super()._get_starting_sequence()
def _l10n_uy_get_formatted_sequence(self, number=0):
return "%s A%07d" % (self.l10n_latam_document_type_id.doc_code_prefix, number)
def _get_last_sequence_domain(self, relaxed=False):
where_string, param = super(AccountMove, self)._get_last_sequence_domain(relaxed)
if self.company_id.account_fiscal_country_id.code == "UY" and self.l10n_latam_use_documents:
where_string += " AND l10n_latam_document_type_id = %(l10n_latam_document_type_id)s"
param['l10n_latam_document_type_id'] = self.l10n_latam_document_type_id.id or 0
return where_string, param
def _get_l10n_latam_documents_domain(self):
""" If this is a reversal or debit, suggest only related subtypes """
self.ensure_one()
domain = super()._get_l10n_latam_documents_domain()
if self.country_code == "UY" and (original_move := self.reversed_entry_id or self.debit_origin_id):
matching_subtype_codes = [
subtype for subtype in UY_DOC_SUBTYPES
if original_move.l10n_latam_document_type_id.code in subtype
]
if matching_subtype_codes:
# restrict to the codes from the subtype matching the one of the original_move (e.g. 'e-ticket')
codes = self.env["l10n_latam.document.type"].search(domain).mapped('code')
allowed_codes = set(codes).intersection(set(matching_subtype_codes[0]))
domain += [("code", "in", tuple(allowed_codes))]
return domain