45 lines
1.7 KiB
Python
45 lines
1.7 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import models, fields, api, _
|
|
from odoo.exceptions import ValidationError
|
|
import stdnum.de.stnr
|
|
import stdnum.exceptions
|
|
|
|
|
|
class ResCompany(models.Model):
|
|
_inherit = 'res.company'
|
|
|
|
l10n_de_stnr = fields.Char(
|
|
string="St.-Nr.",
|
|
help="Tax number. Scheme: ??FF0BBBUUUUP, e.g.: 2893081508152 https://de.wikipedia.org/wiki/Steuernummer",
|
|
tracking=True,
|
|
)
|
|
l10n_de_widnr = fields.Char(string="W-IdNr.", help="Business identification number.", tracking=True)
|
|
|
|
@api.depends('country_code')
|
|
@api.constrains('state_id', 'l10n_de_stnr')
|
|
def _validate_l10n_de_stnr(self):
|
|
for record in self:
|
|
record.get_l10n_de_stnr_national()
|
|
|
|
def get_l10n_de_stnr_national(self):
|
|
self.ensure_one()
|
|
national_steuer_nummer = None
|
|
|
|
if self.l10n_de_stnr and self.country_code == 'DE':
|
|
try:
|
|
national_steuer_nummer = stdnum.de.stnr.to_country_number(self.l10n_de_stnr, self.state_id.name)
|
|
except stdnum.exceptions.InvalidComponent:
|
|
raise ValidationError(_("Your company's SteuerNummer is not compatible with your state"))
|
|
except stdnum.exceptions.InvalidFormat:
|
|
if stdnum.de.stnr.is_valid(self.l10n_de_stnr, self.state_id.name):
|
|
national_steuer_nummer = self.l10n_de_stnr
|
|
else:
|
|
raise ValidationError(_("Your company's SteuerNummer is not valid"))
|
|
|
|
elif self.l10n_de_stnr:
|
|
national_steuer_nummer = self.l10n_de_stnr
|
|
|
|
return national_steuer_nummer
|