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

193 lines
5.2 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.addons.l10n_ec.models.res_partner import PartnerIdTypeEc
from odoo import fields, models, api
_DOCUMENTS_MAPPING = {
"01": [
'ec_dt_01',
'ec_dt_02',
'ec_dt_04',
'ec_dt_05',
'ec_dt_08',
'ec_dt_09',
'ec_dt_11',
'ec_dt_12',
'ec_dt_16',
'ec_dt_20',
'ec_dt_21',
'ec_dt_41',
'ec_dt_42',
'ec_dt_43',
'ec_dt_45',
'ec_dt_47',
'ec_dt_48'
],
"02": [
'ec_dt_03',
'ec_dt_04',
'ec_dt_05',
'ec_dt_09',
'ec_dt_19',
'ec_dt_41',
'ec_dt_294',
'ec_dt_344'
],
"03": [
'ec_dt_03',
'ec_dt_04',
'ec_dt_05',
'ec_dt_09',
'ec_dt_15',
'ec_dt_19',
'ec_dt_41',
'ec_dt_45',
'ec_dt_294',
'ec_dt_344'
],
"04": [
'ec_dt_01',
'ec_dt_04',
'ec_dt_05',
'ec_dt_41',
'ec_dt_44',
'ec_dt_47',
'ec_dt_48',
'ec_dt_49',
'ec_dt_50',
'ec_dt_51',
'ec_dt_52',
'ec_dt_370',
'ec_dt_371',
'ec_dt_372',
'ec_dt_373'
],
"05": [
'ec_dt_01',
'ec_dt_04',
'ec_dt_05',
'ec_dt_41',
'ec_dt_44',
'ec_dt_47',
'ec_dt_48',
'ec_dt_370',
'ec_dt_371',
'ec_dt_372',
'ec_dt_373'
],
"06": [
'ec_dt_01',
'ec_dt_04',
'ec_dt_05',
'ec_dt_41',
'ec_dt_44',
'ec_dt_47',
'ec_dt_48',
'ec_dt_370',
'ec_dt_371',
'ec_dt_372',
'ec_dt_373'
],
"07": [
'ec_dt_01',
'ec_dt_04',
'ec_dt_05',
],
"09": [
'ec_dt_01',
'ec_dt_04',
'ec_dt_05',
'ec_dt_15',
'ec_dt_16',
'ec_dt_41',
'ec_dt_47',
'ec_dt_48',
],
"20": [
'ec_dt_01',
'ec_dt_04',
'ec_dt_05',
'ec_dt_15',
'ec_dt_16',
'ec_dt_41',
'ec_dt_47',
'ec_dt_48'
],
"21": [
'ec_dt_01',
'ec_dt_04',
'ec_dt_05',
'ec_dt_15',
'ec_dt_16',
'ec_dt_41',
'ec_dt_47',
'ec_dt_48'
],
}
class AccountMove(models.Model):
_inherit = "account.move"
l10n_ec_sri_payment_id = fields.Many2one(
comodel_name="l10n_ec.sri.payment",
string="Payment Method (SRI)",
help="Ecuador: Payment Methods Defined by the SRI.",
)
@api.model
def _get_l10n_ec_documents_allowed(self, identification_code):
documents_allowed = self.env['l10n_latam.document.type']
for document_ref in _DOCUMENTS_MAPPING.get(identification_code.value, []):
document_allowed = self.env.ref('l10n_ec.%s' % document_ref, False)
if document_allowed:
documents_allowed |= document_allowed
return documents_allowed
def _get_l10n_latam_documents_domain(self):
self.ensure_one()
domain = super()._get_l10n_latam_documents_domain()
if self.country_code == 'EC' and self.journal_id.l10n_latam_use_documents:
if self.debit_origin_id: # show/hide the debit note document type
domain.extend([('internal_type', '=', 'debit_note')])
elif self.move_type in ('out_invoice', 'in_invoice'):
domain.extend([('internal_type', '=', 'invoice')])
allowed_documents = self._get_l10n_ec_documents_allowed(PartnerIdTypeEc.get_ats_code_for_partner(self.partner_id, self.move_type))
domain.extend([('id', 'in', allowed_documents.ids)])
return domain
def _get_ec_formatted_sequence(self, number=0):
return "%s %s-%s-%09d" % (
self.l10n_latam_document_type_id.doc_code_prefix,
self.journal_id.l10n_ec_entity,
self.journal_id.l10n_ec_emission,
number,
)
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.country_id.code == "EC"
):
if self.l10n_latam_document_type_id:
return self._get_ec_formatted_sequence()
return super()._get_starting_sequence()
def _get_last_sequence_domain(self, relaxed=False):
where_string, param = super(AccountMove, self)._get_last_sequence_domain(relaxed)
if self.country_code == "EC" and self.l10n_latam_use_documents:
internal_type = self.l10n_latam_document_type_id.internal_type
document_types = self.env['l10n_latam.document.type'].search([
('internal_type', '=', internal_type),
('country_id.code', '=', 'EC'),
])
if document_types:
where_string += """
AND l10n_latam_document_type_id in %(l10n_latam_document_type_id)s
"""
param["l10n_latam_document_type_id"] = tuple(document_types.ids)
return where_string, param