51 lines
2.6 KiB
Python
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
|