check validity of UID-Nr. and store result (check_vies_approx) in chatter if OK; add additional search filter to product (manufactoring_number)

develop
Andreas Osim 2018-12-13 13:21:36 +01:00
parent fa150c332a
commit 33bde10dfd
3 changed files with 54 additions and 1 deletions

View File

@ -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']+'<br>'\
+result['traderName']+'<br>'+result['traderCompanyType']+'<br>'+result['traderAddress']\
+'<br>Abfrage-Nr: '+result['requestIdentifier']
record.message_post(body='<b>UID-Nr geprüft:</b><br>%s' % msg_post)
@api.multi
@api.constrains('is_company', 'vat')
def _check_unique_vat(self):

View File

@ -116,6 +116,7 @@
<field name="inherit_id" ref="product.product_template_search_view"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='categ_id']" position="after">
<field name="manufacturing_number" string="Herstellnummer" filter_domain="[('manufacturing_number','ilike',self)]"/>
<filter string="Produktart" domain="[]" context="{'group_by':'type'}"/>
<filter string="Interne Kategorie" domain="[]" context="{'group_by':'categ_id'}"/>
<filter string="Materialtyp" domain="[]" context="{'group_by':'material_type_id'}"/>

View File

@ -17,6 +17,18 @@
<field name="name2" placeholder="Unternehmen 2"/>
</h3>
</xpath>
<xpath expr="//field[@name='vat']" position="replace">
<label for="vat"/>
<div class="o_row" name="vat_group">
<field name="vat" placeholder="e.g. BE0477472701"/>
<field name="warn_vat_date" attrs="{'invisible':True}"/>
<field name="date_vat_check" attrs="{'readonly':True,'invisible':['|','|',('warn_vat_date','=',True),('vat','=',False),('vat','=','')]}"
style="padding-left:30px;padding-right:30px;"/>
<field name="date_vat_check" attrs="{'readonly':True,'invisible':['|','|',('warn_vat_date','=',False),('vat','=',False),('vat','=','')]}"
style="padding-left:30px;padding-right:30px;background-color:red;"/>
<button class="btn btn-primary oe_read_only" attrs="{'invisible':['|',('vat','=',False),('vat','=','')]}" type="object" name="action_check_vat" string="Prüfen"/>
</div>
</xpath>
<field name="opt_out" position="attributes">
<attribute name="groups"/>