diff --git a/ext/custom-addons/dp_custom/models/res_partner.py b/ext/custom-addons/dp_custom/models/res_partner.py index 8f8bde9c..cb3e7ff9 100644 --- a/ext/custom-addons/dp_custom/models/res_partner.py +++ b/ext/custom-addons/dp_custom/models/res_partner.py @@ -26,7 +26,13 @@ from odoo.addons.queue_job.job import job from odoo import tools, api, fields, models, _ from odoo.exceptions import ValidationError +from dateutil.relativedelta import relativedelta +import dateutil.parser +try: + import stdnum.eu.vat as stdnum_vat +except ImportError: + stdnum_vat = None class PartnerEventListener(Component): _name = 'res.partner.listener' @@ -63,7 +69,8 @@ class Partner(models.Model): partner_sector_id = fields.Many2one(comodel_name='res.partner.sector', string='Branche') active = fields.Boolean(track_visibility='onchange') portal_export_pending = fields.Boolean(string='Portal Export ausständig') - date_vat_check = fields.Date(string='Datum der letzten UID-Prüfung') + date_vat_check = fields.Date(string='Datum der letzten UID-Prüfung', default='2000-01-01') + warn_vat_date = fields.Boolean(compute='_get_warn_date', store=False, default=False) collective_bill = fields.Boolean(string='Sammelrechnung', default=True) country_id = fields.Many2one('res.country', string='Country', ondelete='restrict', default=_default_country_id) commission_account_ids = fields.Many2many(comodel_name='commission.account', string='Provisionsempfänger') @@ -74,6 +81,39 @@ class Partner(models.Model): ('portal_id_uniq', 'unique(portal_id)', 'Die Portal-ID muss eindeutig sein') ] + @api.multi + def _get_warn_date(self): + for record in self: + if record.date_vat_check: + date_today = fields.Date.from_string(fields.Date.context_today(self)) + warn_date = date_today - relativedelta(months=+3) + check_date = dateutil.parser.parse(record.date_vat_check).date() + if check_date < warn_date: + record.warn_vat_date = True + + @api.multi + def action_check_vat(self): + for record in self: + if record.vat: + vat_country, vat_number = self._split_vat(record.vat) + try: + result = stdnum_vat.check_vies_approx(vat_country+vat_number,"ATU54619104") + except Exception as ex: + # Avoid blocking the client when the service is unreachable/unavailable + return {} + + if not result['valid']: + vat_valid = self.vies_vat_check(vat_country, vat_number) + if not vat_valid: + raise ValidationError( + _("UID-INVALID: Die UID '%s' ist ungültig oder hat ein falsches Format") % record.vat) + + record.date_vat_check = fields.Date.today() + msg_post = result['countryCode']+result['vatNumber']+'
'\ + +result['traderName']+'
'+result['traderCompanyType']+'
'+result['traderAddress']\ + +'
Abfrage-Nr: '+result['requestIdentifier'] + record.message_post(body='UID-Nr geprüft:
%s' % msg_post) + @api.multi @api.constrains('is_company', 'vat') def _check_unique_vat(self): diff --git a/ext/custom-addons/dp_custom/views/product_views.xml b/ext/custom-addons/dp_custom/views/product_views.xml index 0a3ac137..5f12c708 100644 --- a/ext/custom-addons/dp_custom/views/product_views.xml +++ b/ext/custom-addons/dp_custom/views/product_views.xml @@ -116,6 +116,7 @@ + diff --git a/ext/custom-addons/dp_custom/views/res_partner_views.xml b/ext/custom-addons/dp_custom/views/res_partner_views.xml index 19448302..dd914f3f 100644 --- a/ext/custom-addons/dp_custom/views/res_partner_views.xml +++ b/ext/custom-addons/dp_custom/views/res_partner_views.xml @@ -17,6 +17,18 @@ + +