a410c4bcb6
- Default krajiny SK pri novom kontakte (ak je hlavná firma slovenská) - IČO/DIČ/Platca DPH viditeľné aj pre fyzické osoby (SZČO), nie len firmy - Skrytie duplicitného IČO v Sales & Purchase → Misc pre SK partnerov (l10n_sk pridáva svoje IČO pri VAT, takže by bol duplikát) - Override viditeľnosti l10n_sk poľa company_registry — viditeľné aj keď krajina ešte nie je nastavená (lepšia UX pri vytváraní nového kontaktu) - Odberateľ vpravo v hlavičke faktúry (nový report layout)
78 lines
2.6 KiB
Python
78 lines
2.6 KiB
Python
# -*- 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
|
|
|
|
@api.model
|
|
def default_get(self, fields_list):
|
|
defaults = super().default_get(fields_list)
|
|
if 'country_id' in fields_list and not defaults.get('country_id'):
|
|
company_country = self.env.company.country_id
|
|
if company_country and company_country.code == 'SK':
|
|
defaults['country_id'] = company_country.id
|
|
return defaults
|