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 @@ code model.start_sync() - 1 + 60 minutes -1 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' @@ -75,9 +75,15 @@ 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 = $('')["html"](item.label); if (item.logo){ - var $a = $li.find('>a').addClass('o_partner_autocomplete_dropdown_item'); var $img = $('').attr('src', item.logo); $a.append($img); } - return $li; + return $("
  • ") + .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"), "$&"); + var label = ' '; + label += _.str.sprintf('%s, %s', 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 @@ - - -