summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorRémi Rahir <rar@odoo.com>2018-09-21 16:33:20 +0200
committerRémi Rahir <rar@odoo.com>2018-09-25 22:28:43 +0200
commit7838bde2a8a6980cf217ffe0e8838cb1e3f52c2d (patch)
tree5d1b3a073347a00cac68b71f301b564c6f22211b /addons
parent302bd149dc0c4aa902df12312f243e8ed93f9666 (diff)
[IMP] partner_autocomplete: diverse improvements
- CRON changed to 60min - Fixed display/rendering issues with autocomplete widgets. - Moved 'Insufficient credit' banner - Editable endpoint for partner_autocomplete service
Diffstat (limited to 'addons')
-rw-r--r--addons/iap/models/iap.py2
-rw-r--r--addons/partner_autocomplete/data/cron.xml2
-rw-r--r--addons/partner_autocomplete/models/res_config_settings.py6
-rw-r--r--addons/partner_autocomplete/models/res_partner.py24
-rw-r--r--addons/partner_autocomplete/static/src/js/partner_autocomplete_core.js3
-rw-r--r--addons/partner_autocomplete/static/src/js/partner_autocomplete_many2one.js22
-rw-r--r--addons/partner_autocomplete/static/src/scss/partner_autocomplete.scss32
-rw-r--r--addons/partner_autocomplete/static/tests/partner_autocomplete_tests.js2
-rw-r--r--addons/partner_autocomplete/views/res_config_settings_views.xml9
-rw-r--r--addons/partner_autocomplete/views/res_partner_views.xml6
10 files changed, 63 insertions, 45 deletions
diff --git a/addons/iap/models/iap.py b/addons/iap/models/iap.py
index 8d6b85e6d73..6bc661d3fdd 100644
--- a/addons/iap/models/iap.py
+++ b/addons/iap/models/iap.py
@@ -199,7 +199,7 @@ class IapAccount(models.Model):
}
credit = jsonrpc(url=url, params=params)
- account.write({'insufficient_credit': credit == 0})
+ account.sudo().write({'insufficient_credit': credit == 0})
return credit
diff --git a/addons/partner_autocomplete/data/cron.xml b/addons/partner_autocomplete/data/cron.xml
index f382d10f7f2..bd27eb7e38f 100644
--- a/addons/partner_autocomplete/data/cron.xml
+++ b/addons/partner_autocomplete/data/cron.xml
@@ -4,7 +4,7 @@
<field name="model_id" ref="model_res_partner_autocomplete_sync"/>
<field name="state">code</field>
<field name="code">model.start_sync()</field>
- <field name="interval_number">1</field>
+ <field name="interval_number">60</field>
<field name="interval_type">minutes</field>
<field name="numbercall">-1</field>
<field eval="False" name="doall"/>
diff --git a/addons/partner_autocomplete/models/res_config_settings.py b/addons/partner_autocomplete/models/res_config_settings.py
index f28046d6189..63e550abb84 100644
--- a/addons/partner_autocomplete/models/res_config_settings.py
+++ b/addons/partner_autocomplete/models/res_config_settings.py
@@ -9,9 +9,11 @@ class ResConfigSettings(models.TransientModel):
partner_autocomplete_insufficient_credit = fields.Boolean('Insufficient credit', default=lambda self: self.env['iap.account'].get('partner_autocomplete').insufficient_credit)
@api.multi
- def redirect_to_buy_autocmplete_credit(self):
+ def redirect_to_buy_autocomplete_credit(self):
+ Account = self.env['iap.account']
+ Account.get('partner_autocomplete').sudo().write({'insufficient_credit': False})
return {
'type': 'ir.actions.act_url',
- 'url': self.env['iap.account'].get_credits_url('partner_autocomplete'),
+ 'url': Account.get_credits_url('partner_autocomplete'),
'target': '_new',
}
diff --git a/addons/partner_autocomplete/models/res_partner.py b/addons/partner_autocomplete/models/res_partner.py
index 60d5b182222..dcb7d107ed3 100644
--- a/addons/partner_autocomplete/models/res_partner.py
+++ b/addons/partner_autocomplete/models/res_partner.py
@@ -10,7 +10,7 @@ from odoo.addons.iap.models.iap import InsufficientCreditError
_logger = logging.getLogger(__name__)
-PARTNER_REMOTE_URL = 'https://partner-autocomplete.odoo.com/iap/partner_autocomplete'
+DEFAULT_ENDPOINT = 'https://partner-autocomplete.odoo.com'
class ResPartner(models.Model):
_name = 'res.partner'
@@ -76,8 +76,14 @@ class ResPartner(models.Model):
return country_id, state_id
@api.model
+ def get_endpoint(self):
+ url = self.env['ir.config_parameter'].sudo().get_param('iap.partner_autocomplete.endpoint', DEFAULT_ENDPOINT)
+ url += '/iap/partner_autocomplete'
+ return url
+
+ @api.model
def _rpc_remote_api(self, action, params, timeout=15):
- url = '%s/%s' % (PARTNER_REMOTE_URL, action)
+ url = '%s/%s' % (self.get_endpoint(), action)
account = self.env['iap.account'].get('partner_autocomplete')
params.update({
'db_uuid': self.env['ir.config_parameter'].sudo().get_param('database.uuid'),
@@ -90,10 +96,9 @@ class ResPartner(models.Model):
except (ConnectionError, HTTPError, exceptions.AccessError) as exception:
_logger.error('Autocomplete API error: %s' % str(exception))
return False, str(exception)
- except InsufficientCreditError:
- account = self.env['iap.account'].get('partner_autocomplete')
- if account:
- account.write({'insufficient_credit': True})
+ except InsufficientCreditError as exception:
+ _logger.warning('Insufficient Credits for Autocomplete Service: %s' % str(exception))
+ account.sudo().write({'insufficient_credit': True})
return False, 'Insufficient Credit'
@api.model
@@ -172,9 +177,8 @@ class ResPartner(models.Model):
@api.multi
def write(self, values):
- record = super(ResPartner, self).write(values)
+ res = super(ResPartner, self).write(values)
if len(self) == 1:
- for partner in self:
- partner._update_autocomplete_data(values.get('vat', False))
+ self._update_autocomplete_data(values.get('vat', False))
- return record
+ return res
diff --git a/addons/partner_autocomplete/static/src/js/partner_autocomplete_core.js b/addons/partner_autocomplete/static/src/js/partner_autocomplete_core.js
index 05bd10c9114..0b709021e7b 100644
--- a/addons/partner_autocomplete/static/src/js/partner_autocomplete_core.js
+++ b/addons/partner_autocomplete/static/src/js/partner_autocomplete_core.js
@@ -43,7 +43,8 @@ return {
return suggestion.website;
});
clearbitSuggestions.forEach(function (suggestion) {
- if (websites.indexOf(suggestion.website) < 0) {
+ if (websites.indexOf(suggestion.domain) < 0) {
+ websites.push(suggestion.domain);
odooSuggestions.push(suggestion);
}
});
diff --git a/addons/partner_autocomplete/static/src/js/partner_autocomplete_many2one.js b/addons/partner_autocomplete/static/src/js/partner_autocomplete_many2one.js
index 40780df75ce..6abf1751461 100644
--- a/addons/partner_autocomplete/static/src/js/partner_autocomplete_many2one.js
+++ b/addons/partner_autocomplete/static/src/js/partner_autocomplete_many2one.js
@@ -65,16 +65,19 @@ var PartnerField = FieldMany2One.extend({
*/
_modifyAutompleteRendering: function (){
var api = this.$input.data('ui-autocomplete');
- var renderWithoutLogo = api._renderItem;
- api._renderItem = function ( ul, item ) {
- var $li = renderWithoutLogo.call(this, ul, item);
+ api._renderItem = function(ul, item){
+ ul.addClass('o_partner_autocomplete_dropdown');
+ var $a = $('<a/>')["html"](item.label);
if (item.logo){
- var $a = $li.find('>a').addClass('o_partner_autocomplete_dropdown_item');
var $img = $('<img/>').attr('src', item.logo);
$a.append($img);
}
- return $li;
+ return $("<li></li>")
+ .data("item.autocomplete",item)
+ .append($a)
+ .appendTo(ul)
+ .addClass(item.classname);
};
},
@@ -104,20 +107,17 @@ var PartnerField = FieldMany2One.extend({
Autocomplete.autocomplete(search_val).then(function (suggestions) {
var choices = [];
if (suggestions && suggestions.length) {
- choices.push({
- label: _t('Create and Edit from Autocomplete :'),
- });
_.each(suggestions, function (suggestion) {
- var label =_.str.sprintf('%s - %s', suggestion.label, suggestion.description);
- label = label.replace(new RegExp(search_val, "gi"), "<b>$&</b>");
+ var label = '<i class="fa fa-magic text-muted"/> ';
+ label += _.str.sprintf('%s, <span class="text-muted">%s</span>', suggestion.label, suggestion.description);
choices.push({
label: label,
action: function () {
self._createPartner(suggestion);
},
- classname: 'o_m2o_dropdown_option',
logo: suggestion.logo,
+ classname: 'o_partner_autocomplete_dropdown_item',
});
});
}
diff --git a/addons/partner_autocomplete/static/src/scss/partner_autocomplete.scss b/addons/partner_autocomplete/static/src/scss/partner_autocomplete.scss
index a63e2434b6f..d70477e7cb3 100644
--- a/addons/partner_autocomplete/static/src/scss/partner_autocomplete.scss
+++ b/addons/partner_autocomplete/static/src/scss/partner_autocomplete.scss
@@ -18,11 +18,29 @@
}
}
-.ui-autocomplete .ui-menu-item > a.o_partner_autocomplete_dropdown_item {
- > img {
- float: right;
- width: 20px;
- height: 20px;
+.ui-autocomplete.o_partner_autocomplete_dropdown {
+ > .ui-menu-item:nth-of-type(1n+16) {
+ display: none;
}
-
-} \ No newline at end of file
+ > .o_partner_autocomplete_dropdown_item {
+ > a {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ position: relative;
+ padding-right: 50px;
+ padding-left: 40px;
+ max-width: 400px;
+ > img {
+ position: absolute;
+ width: 20px;
+ height: 20px;
+ right: 20px;
+ top: 3px;
+ }
+ }
+ }
+ > .ui-menu-item.ui-state-focus .text-muted {
+ color: white !important;
+ }
+}
diff --git a/addons/partner_autocomplete/static/tests/partner_autocomplete_tests.js b/addons/partner_autocomplete/static/tests/partner_autocomplete_tests.js
index 5e7a3ae3c1e..5eebcf85ce0 100644
--- a/addons/partner_autocomplete/static/tests/partner_autocomplete_tests.js
+++ b/addons/partner_autocomplete/static/tests/partner_autocomplete_tests.js
@@ -37,7 +37,7 @@ odoo.define('partner_autocomplete.tests', function (require) {
QUnit.module('partner_autocomplete', {
before: function () {
var suggestions = [
- {name: "Odoo", website: "odoo.com", logo: "odoo.com/logo.png", vat: "BE0477472701"}
+ {name: "Odoo", website: "odoo.com", domain: "odoo.com", logo: "odoo.com/logo.png", vat: "BE0477472701"}
];
var enrich_data = {
diff --git a/addons/partner_autocomplete/views/res_config_settings_views.xml b/addons/partner_autocomplete/views/res_config_settings_views.xml
index 8c97b9e4aeb..13889bc52a2 100644
--- a/addons/partner_autocomplete/views/res_config_settings_views.xml
+++ b/addons/partner_autocomplete/views/res_config_settings_views.xml
@@ -9,11 +9,11 @@
<widget name="iap_credit_checker" service_name="partner_autocomplete"/>
</div>
- <xpath expr="//div[hasclass('app_settings_block')]" position="before">
- <field name="partner_autocomplete_insufficient_credit" invisible="1"/>
- <div class="alert alert-info alert-dismissible fade show pt-2 pb-2" role="alert" attrs="{'invisible': [('partner_autocomplete_insufficient_credit', '=', False)]}">
+ <xpath expr="//div[hasclass('app_settings_block')][@data-key='general_settings']/div[1]" position="before">
+ <div class="alert alert-info alert-dismissible fade show pt-2 pb-2" role="alert" attrs="{'invisible': [('partner_autocomplete_insufficient_credit', '=', False)]}" data-showfor="crm,general_settings">
+ <field name="partner_autocomplete_insufficient_credit" invisible="1"/>
<i class="fa fa-exclamation-triangle text-warning"></i> &amp;nbsp; You don't have credits to auto-complete companies' data anymore.
- <button name="redirect_to_buy_autocmplete_credit" type="object" class="btn-link">
+ <button name="redirect_to_buy_autocomplete_credit" type="object" class="btn-link">
<i class="fa fa-arrow-right"/>
Buy more credits
</button>
@@ -25,4 +25,3 @@
</field>
</record>
</odoo>
-
diff --git a/addons/partner_autocomplete/views/res_partner_views.xml b/addons/partner_autocomplete/views/res_partner_views.xml
index d7234bb3774..380e2246fa7 100644
--- a/addons/partner_autocomplete/views/res_partner_views.xml
+++ b/addons/partner_autocomplete/views/res_partner_views.xml
@@ -15,9 +15,6 @@
<field name="partner_gid" invisible="True"/>
<field name="additional_info" invisible="True"/>
</xpath>
- <xpath expr="//div[hasclass('oe_title')]/div[hasclass('o_row')]/field[@name='parent_id']" position="attributes">
- <attribute name="help">You can find a customer, a contact, etc. by its Name, TIN, Email or Internal Reference.</attribute>
- </xpath>
</field>
</record>
@@ -36,9 +33,6 @@
<field name="partner_gid" invisible="True"/>
<field name="additional_info" invisible="True"/>
</xpath>
- <xpath expr="//div[hasclass('oe_title')]/div[hasclass('o_row')]/field[@name='parent_id']" position="attributes">
- <attribute name="help">You can find a customer, a contact, etc. by its Name, TIN, Email or Internal Reference.</attribute>
- </xpath>
</field>
</record>