Files
odoo_source/addons/l10n_ec/models/res_partner.py
T
Christopher Ormaza 35a7c559f1 [FIX] l10n_ec: Make the VAT exception clearer
closes odoo/odoo#77999

X-original-commit: 86edaaf05a65181767e775ad355f528415c29887
Signed-off-by: Josse Colpaert <jco@openerp.com>
2021-10-07 13:09:33 +00:00

58 lines
2.6 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models, api, _
from odoo.exceptions import ValidationError
import logging
_logger = logging.getLogger(__name__)
def verify_final_consumer(vat):
all_number_9 = False
try:
all_number_9 = vat and all(int(number) == 9 for number in vat) or False
except ValueError as e:
_logger.debug('Vat is not only numbers %s', e)
return all_number_9 and len(vat) == 13
class ResPartner(models.Model):
_inherit = "res.partner"
@api.constrains("vat", "country_id", "l10n_latam_identification_type_id")
def check_vat(self):
it_ruc = self.env.ref("l10n_ec.ec_ruc", False)
it_dni = self.env.ref("l10n_ec.ec_dni", False)
ecuadorian_partners = self.filtered(
lambda x: x.country_id == self.env.ref("base.ec")
)
for partner in ecuadorian_partners:
if partner.vat:
if partner.l10n_latam_identification_type_id.id in (
it_ruc.id,
it_dni.id,
):
if partner.l10n_latam_identification_type_id.id == it_dni.id and len(partner.vat) != 10:
raise ValidationError(_('If your identification type is %s, it must be 10 digits')
% it_dni.display_name)
if partner.l10n_latam_identification_type_id.id == it_ruc.id and len(partner.vat) != 13:
raise ValidationError(_('If your identification type is %s, it must be 13 digits')
% it_ruc.display_name)
final_consumer = verify_final_consumer(partner.vat)
if final_consumer:
valid = True
else:
valid = self.is_valid_ruc_ec(partner.vat)
if not valid:
error_message = ""
if partner.l10n_latam_identification_type_id.id == it_dni.id:
error_message = _("VAT %s is not valid for an Ecuadorian DNI, "
"it must be like this form 0915068258") % partner.vat
if partner.l10n_latam_identification_type_id.id == it_ruc.id:
error_message = _("VAT %s is not valid for an Ecuadorian company, "
"it must be like this form 0993143790001") % partner.vat
raise ValidationError(error_message)
return super(ResPartner, self - ecuadorian_partners).check_vat()