diff --git a/addons/mrp/models/stock_warehouse.py b/addons/mrp/models/stock_warehouse.py index ab9f26d7300..37c08c19ab0 100644 --- a/addons/mrp/models/stock_warehouse.py +++ b/addons/mrp/models/stock_warehouse.py @@ -29,12 +29,12 @@ class StockWarehouse(models.Model): return result def _get_manufacture_route_id(self): - manufacture_route_id = self.env.ref('mrp.route_warehouse0_manufacture').id - if not manufacture_route_id: - manufacture_route_id = self.env['stock.location.route'].search([('name', 'like', _('Manufacture'))], limit=1).id - if not manufacture_route_id: + manufacture_route = self.env.ref('mrp.route_warehouse0_manufacture', raise_if_not_found=False) + if not manufacture_route: + manufacture_route = self.env['stock.location.route'].search([('name', 'like', _('Manufacture'))], limit=1) + if not manufacture_route: raise exceptions.UserError(_('Can\'t find any generic Manufacture route.')) - return manufacture_route_id + return manufacture_route.id def _get_manufacture_pull_rules_values(self, route_values): if not self.manu_type_id: diff --git a/addons/web_editor/static/src/js/editor/rte.js b/addons/web_editor/static/src/js/editor/rte.js index dd506158b22..c23cadd1f0f 100644 --- a/addons/web_editor/static/src/js/editor/rte.js +++ b/addons/web_editor/static/src/js/editor/rte.js @@ -290,9 +290,12 @@ var RTEWidget = Widget.extend({ }); // start element observation - $(document).on('content_changed', '.o_editable', function (event) { - self.trigger_up('rte_change', {target: event.target}); - $(this).addClass('o_dirty'); + $(document).on('content_changed', '.o_editable', function (ev) { + self.trigger_up('rte_change', {target: ev.target}); + if (!ev.__isDirtyHandled) { + $(this).addClass('o_dirty'); + ev.__isDirtyHandled = true; + } }); $('#wrapwrap, .o_editable').on('click.rte', '*', this, this._onClick.bind(this)); @@ -408,6 +411,10 @@ var RTEWidget = Widget.extend({ save: function (context) { var self = this; + $('.o_editable') + .destroy() + .removeClass('o_editable o_is_inline_editable'); + var $dirty = $('.o_dirty'); $dirty .removeAttr('contentEditable')