check validity of UID-Nr. and store result (check_vies_approx) in chatter if OK; add additional search filter to product (manufactoring_number)
parent
fa150c332a
commit
33bde10dfd
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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'}"/>
|
||||
|
|
|
|||
|
|
@ -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"/>
|
||||
|
|
|
|||
Loading…
Reference in New Issue