# -*- coding: utf-8 -*- import re from odoo import api, fields, models, _ from odoo.exceptions import ValidationError class ResPartner(models.Model): _inherit = 'res.partner' _description = 'Partner - Slovak Tax IDs' dic = fields.Char( string='DIČ', size=10, help='Daňové identifikačné číslo (napr. 2022538353).', ) is_vat_payer = fields.Boolean( string='Platca DPH', compute='_compute_is_vat_payer', store=True, help='Automaticky označené ak je vyplnené IČ DPH (VAT) s SK prefixom.', ) @api.depends('vat') def _compute_is_vat_payer(self): for partner in self: partner.is_vat_payer = bool( partner.vat and partner.vat.upper().startswith('SK') ) @api.onchange('vat') def _onchange_vat_fill_dic(self): if self.vat and self.vat.upper().startswith('SK'): dic_from_vat = self.vat[2:].strip() if not self.dic: self.dic = dic_from_vat @api.constrains('dic') def _check_dic(self): for partner in self: if partner.dic and not re.match(r'^\d{10}$', partner.dic): raise ValidationError( _('DIČ musí obsahovať presne 10 číslic (napr. 2022538353).') ) @api.constrains('vat') def _check_sk_vat(self): for partner in self: if partner.vat and partner.country_id.code == 'SK': vat = partner.vat.upper().replace(' ', '') if not re.match(r'^SK\d{10}$', vat): raise ValidationError( _('IČ DPH pre Slovensko musí byť vo formáte SK + 10 číslic ' '(napr. SK2022538353).') ) @api.constrains('company_registry') def _check_ico(self): for partner in self: if partner.company_registry and not re.match(r'^\d{8}$', partner.company_registry): raise ValidationError( _('IČO musí obsahovať presne 8 číslic (napr. 43963617).') ) def _get_company_registry_labels(self): labels = super()._get_company_registry_labels() labels['SK'] = _('IČO') return labels