Files
l10n_sk_partner/models/res_partner.py
T
Tomas a410c4bcb6 feat: viditeľnosť IČO/DIČ pre SZČO + odberateľ vpravo v hlavičke (v2.0.9)
- 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)
2026-04-29 22:56:03 +02:00

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