initial commit - l10n_sk_partner

This commit is contained in:
Tomas
2026-04-05 16:03:23 +02:00
parent 53b0d0a287
commit 8606fc3492
14 changed files with 310 additions and 0 deletions
+3
View File
@@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
from . import res_partner
from . import res_company
+13
View File
@@ -0,0 +1,13 @@
# -*- coding: utf-8 -*-
from odoo import api, models
class ResCompany(models.Model):
_inherit = 'res.company'
def write(self, vals):
res = super().write(vals)
for company in self:
if company.partner_id.dic and company.income_tax_id != company.partner_id.dic:
company.income_tax_id = company.partner_id.dic
return res
+68
View File
@@ -0,0 +1,68 @@
# -*- 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