You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
3.7 KiB
127 lines
3.7 KiB
# -*- coding: utf-8 -*-
|
|
# Copyright 2017 LasLabs Inc.
|
|
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
|
|
|
|
from odoo import api, fields, models
|
|
|
|
|
|
class WizardAddressValidate(models.TransientModel):
|
|
_name = 'wizard.address.validate'
|
|
_description = 'Validate Address Wizard'
|
|
|
|
partner_id = fields.Many2one(
|
|
string='Partner',
|
|
comodel_name='res.partner',
|
|
required=True,
|
|
default=lambda s: s._default_partner_id(),
|
|
)
|
|
interface_id = fields.Many2one(
|
|
string='Validation Interface',
|
|
comodel_name='address.validate',
|
|
default=lambda s: s._default_interface_id(),
|
|
)
|
|
street = fields.Char()
|
|
street2 = fields.Char()
|
|
city = fields.Char()
|
|
zip = fields.Char()
|
|
state_id = fields.Many2one(
|
|
string='State',
|
|
comodel_name='res.country.state',
|
|
)
|
|
country_id = fields.Many2one(
|
|
string='Country',
|
|
comodel_name='res.country',
|
|
)
|
|
latitude = fields.Float()
|
|
longitude = fields.Float()
|
|
is_valid = fields.Boolean()
|
|
validation_messages = fields.Text()
|
|
street_original = fields.Char(
|
|
related='partner_id.street',
|
|
readonly=True,
|
|
)
|
|
street2_original = fields.Char(
|
|
related='partner_id.street2',
|
|
readonly=True,
|
|
)
|
|
city_original = fields.Char(
|
|
related='partner_id.city',
|
|
readonly=True,
|
|
)
|
|
zip_original = fields.Char(
|
|
related='partner_id.zip',
|
|
readonly=True,
|
|
)
|
|
state_id_original = fields.Many2one(
|
|
string='State',
|
|
comodel_name='res.country.state',
|
|
related='partner_id.state_id',
|
|
readonly=True,
|
|
)
|
|
country_id_original = fields.Many2one(
|
|
string='Country',
|
|
comodel_name='res.country',
|
|
related='partner_id.country_id',
|
|
readonly=True,
|
|
)
|
|
latitude_original = fields.Float(
|
|
string='Latitude',
|
|
related='partner_id.latitude',
|
|
readonly=True,
|
|
)
|
|
longitude_original = fields.Float(
|
|
string='Longitude',
|
|
related='partner_id.longitude',
|
|
readonly=True,
|
|
)
|
|
|
|
@api.model
|
|
def _default_partner_id(self):
|
|
active_model = self.env.context.get('active_model')
|
|
active_id = self.env.context.get('active_id')
|
|
if active_model == 'res.partner':
|
|
return active_id
|
|
if active_model == 'res.company':
|
|
company = self.env['res.company'].browse(active_id)
|
|
return company.partner_id.id
|
|
|
|
@api.model
|
|
def _default_interface_id(self):
|
|
return self.env.user.company_id.default_address_validate_id.id
|
|
|
|
@api.multi
|
|
def action_validate(self):
|
|
"""Get the suggested address from the provider."""
|
|
self.ensure_one()
|
|
self.write(
|
|
self.interface_id.get_address(self.partner_id)
|
|
)
|
|
return {
|
|
'context': self.env.context,
|
|
'view_type': 'form',
|
|
'view_mode': 'form',
|
|
'res_model': self._name,
|
|
'src_model': 'res.partner',
|
|
'res_id': self.id,
|
|
'view_id': False,
|
|
'type': 'ir.actions.act_window',
|
|
'target': 'new',
|
|
}
|
|
|
|
@api.multi
|
|
def action_confirm(self):
|
|
"""Copy the validated information to the partner."""
|
|
for record in self:
|
|
record.partner_id.write({
|
|
'street': record.street,
|
|
'street2': record.street2,
|
|
'city': record.city,
|
|
'state_id': record.state_id.id,
|
|
'country_id': record.country_id.id,
|
|
'zip': record.zip,
|
|
'latitude': record.latitude,
|
|
'longitude': record.longitude,
|
|
})
|
|
return {
|
|
'type': 'ir.actions.act_window_close',
|
|
}
|