[MERGE] forward port branch 10.0 up to e6ca846c65

This commit is contained in:
Christophe Simonis
2018-09-13 10:54:06 +02:00
7 changed files with 45 additions and 34 deletions
+30 -14
View File
@@ -1,16 +1,26 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import json
import logging
import urllib2
from odoo import api, fields, models, tools, _
from odoo.exceptions import UserError
_logger = logging.getLogger(__name__)
def geo_find(addr):
def geo_find(addr, apikey=False):
if not addr:
return None
url = 'https://maps.googleapis.com/maps/api/geocode/json?sensor=false&address='
if not apikey:
raise UserError(_('''API key for GeoCoding (Places) required.\n
Save this key in System Parameters with key: google.api_key_geocode, value: <your api key>
Visit https://developers.google.com/maps/documentation/geocoding/get-api-key for more information.
'''))
url = "https://maps.googleapis.com/maps/api/geocode/json?key=%s&sensor=false&address=" % apikey
url += urllib2.quote(addr.encode('utf8'))
try:
@@ -19,6 +29,8 @@ def geo_find(addr):
raise UserError(_('Cannot contact geolocation servers. Please make sure that your Internet connection is up and running (%s).') % e)
if result['status'] != 'OK':
if result.get('error_message'):
_logger.error(result['error_message'])
return None
try:
@@ -46,22 +58,26 @@ class ResPartner(models.Model):
partner_longitude = fields.Float(string='Geo Longitude', digits=(16, 5))
date_localization = fields.Date(string='Geolocation Date')
@classmethod
def _geo_localize(cls, apikey, street='', zip='', city='', state='', country=''):
search = geo_query_address(street=street, zip=zip, city=city, state=state, country=country)
result = geo_find(search, apikey)
if result is None:
search = geo_query_address(city=city, state=state, country=country)
result = geo_find(search, apikey)
return result
@api.multi
def geo_localize(self):
# We need country names in English below
apikey = self.env['ir.config_parameter'].sudo().get_param('google.api_key_geocode')
for partner in self.with_context(lang='en_US'):
result = geo_find(geo_query_address(street=partner.street,
zip=partner.zip,
city=partner.city,
state=partner.state_id.name,
country=partner.country_id.name))
if result is None:
result = geo_find(geo_query_address(
city=partner.city,
state=partner.state_id.name,
country=partner.country_id.name
))
result = partner._geo_localize(apikey,
partner.street,
partner.zip,
partner.city,
partner.state_id.name,
partner.country_id.name)
if result:
partner.write({
'partner_latitude': result[0],
+4 -2
View File
@@ -855,7 +855,7 @@ class Lead(models.Model):
@api.model
def get_empty_list_help(self, help):
if help:
if help and help.find("oe_view_nocontent_create") == -1:
alias_record = self.env.ref("crm.mail_alias_lead_info", raise_if_not_found=False)
if alias_record and alias_record.alias_domain and alias_record.alias_name:
email = '%s@%s' % (alias_record.alias_name, alias_record.alias_domain)
@@ -863,7 +863,9 @@ class Lead(models.Model):
dynamic_help = _("""All email incoming to %s will automatically
create new opportunity. Update your business card, phone book, social media,...
Send an email right now and see it here.""") % (email_link,)
return '<p class="oe_view_nocontent_create">%s</p>%s<p>%s</p>' % (_('Click to add a new opportunity'), help, dynamic_help)
return '<p class="oe_view_nocontent_create">%s</p>%s<p class="oe_view_nocontent_alias>%s</p>' % (
_('Click to add a new opportunity'), help, dynamic_help
)
return super(Lead, self.with_context(
empty_list_help_model='crm.team',
empty_list_help_id=self._context.get('default_team_id', False),
+2 -2
View File
@@ -316,13 +316,13 @@ class HrExpense(models.Model):
@api.model
def get_empty_list_help(self, help_message):
if help_message:
if help_message and help_message.find("oe_view_nocontent_create") == -1:
alias_record = self.env.ref('hr_expense.mail_alias_expense')
if alias_record and alias_record.alias_domain and alias_record.alias_name:
link = "<a id='o_mail_test' href='mailto:%(email)s?subject=Lunch%%20with%%20customer%%3A%%20%%2412.32'>%(email)s</a>" % {
'email': '%s@%s' % (alias_record.alias_name, alias_record.alias_domain)
}
return '<p class="oe_view_nocontent_create">%s<br/>%s</p>%s' % (
return '<p class="oe_view_nocontent_create oe_view_nocontent_alias">%s<br/>%s</p>%s' % (
_('Click to add a new expense,'),
_('or send receipts by email to %s.') % (link,),
help_message)
+1 -1
View File
@@ -105,5 +105,5 @@ class MailChannel(models.Model):
@api.model
def get_empty_list_help(self, help):
if help:
return '<p">%s</p>' % (help)
return '<p>%s</p>' % (help)
return super(MailChannel, self).get_empty_list_help(help)
+3 -1
View File
@@ -341,7 +341,9 @@ class MailThread(models.AbstractModel):
'email_link': email_link
}
}
return "%(static_help)s<p>%(dyn_help)s" % {
# do not add alias two times if it was added previously
if not help or help.find("oe_view_nocontent_alias") == -1:
return '%(static_help)s<p class="oe_view_nocontent_alias">%(dyn_help)s</p>' % {
'static_help': help or '',
'dyn_help': _("You could also add a new %(document)s by sending an email to: %(email_link)s.") % {
'document': document_name,
@@ -88,19 +88,10 @@ class CrmLead(models.Model):
if lead.partner_latitude and lead.partner_longitude:
continue
if lead.country_id:
result = geo_find(geo_query_address(street=lead.street,
zip=lead.zip,
city=lead.city,
state=lead.state_id.name,
country=lead.country_id.name))
if result is None:
result = geo_find(geo_query_address(
city=lead.city,
state=lead.state_id.name,
country=lead.country_id.name
))
apikey = self.env['ir.config_parameter'].sudo().get_param('google.api_key_geocode')
result = self.env['res.partner']._geo_localize(apikey,
lead.street, lead.zip, lead.city,
lead.state_id.name, lead.country_id.name)
if result:
lead.write({
'partner_latitude': result[0],
@@ -11,7 +11,7 @@ class TestPartnerAssign(TransactionCase):
def setUp(self):
super(TestPartnerAssign, self).setUp()
def geo_find(addr):
def geo_find(addr, apikey):
return {
'Wavre, Belgium': (50.7158956, 4.6128075),
'Cannon Hill Park, B46 3AG Birmingham, United Kingdom': (52.45216, -1.898578),