diff options
Diffstat (limited to 'addons/web/static/src/js')
| -rw-r--r-- | addons/web/static/src/js/framework/pyeval.js | 2 | ||||
| -rw-r--r-- | addons/web/static/src/js/menu.js | 6 | ||||
| -rw-r--r-- | addons/web/static/src/js/views/form_relational_widgets.js | 24 | ||||
| -rw-r--r-- | addons/web/static/src/js/views/list_view.js | 14 |
4 files changed, 33 insertions, 13 deletions
diff --git a/addons/web/static/src/js/framework/pyeval.js b/addons/web/static/src/js/framework/pyeval.js index 2b553d37e0f..d0708bdf356 100644 --- a/addons/web/static/src/js/framework/pyeval.js +++ b/addons/web/static/src/js/framework/pyeval.js @@ -958,7 +958,7 @@ function eval_arg (arg) { case 'context': case 'compound_context': return pyeval('contexts', [arg]); default: - throw new Error(_t("Unknown nonliteral type " + arg.__ref)); + throw new Error(_t("Unknown nonliteral type ") + ' ' + arg.__ref); } } diff --git a/addons/web/static/src/js/menu.js b/addons/web/static/src/js/menu.js index c244305b7aa..83112ed3121 100644 --- a/addons/web/static/src/js/menu.js +++ b/addons/web/static/src/js/menu.js @@ -44,7 +44,7 @@ var Menu = Widget.extend({ }); // Hide second level submenus - this.$secondary_menus.find('.oe_menu_toggler').siblings('.oe_secondary_submenu').hide(); + this.$secondary_menus.find('.oe_menu_toggler').siblings('.oe_secondary_submenu').addClass('o_hidden'); if (self.current_menu) { self.open_menu(self.current_menu); } @@ -160,12 +160,12 @@ var Menu = Widget.extend({ $sub_menu.show(); // Hide/Show the leftbar menu depending of the presence of sub-items - this.$secondary_menus.toggle(!!$sub_menu.children().length); + this.$secondary_menus.toggleClass('o_hidden', !$sub_menu.children().length); // Activate current menu item and show parents this.$secondary_menus.find('.active').removeClass('active'); if ($main_menu !== $clicked_menu) { - $clicked_menu.parents().show(); + $clicked_menu.parents().removeClass('o_hidden'); if ($clicked_menu.is('.oe_menu_toggler')) { $clicked_menu.toggleClass('oe_menu_opened').siblings('.oe_secondary_submenu:first').toggle(); } else { diff --git a/addons/web/static/src/js/views/form_relational_widgets.js b/addons/web/static/src/js/views/form_relational_widgets.js index 624a2fa17a4..8e65677a8b3 100644 --- a/addons/web/static/src/js/views/form_relational_widgets.js +++ b/addons/web/static/src/js/views/form_relational_widgets.js @@ -320,7 +320,8 @@ var FieldMany2One = common.AbstractField.extend(common.CompletionFieldMixin, com var dataset = new data.DataSetStatic(this, this.field.relation, self.build_context()); var def = this.alive(dataset.name_get([self.get("value")])).done(function(data) { if (!data[0]) { - self.do_warn(_t("Render"), _t("No value found for the field "+self.field.string+" for value "+self.get("value"))); + self.do_warn(_t("Render"), + _.str.sprintf(_t("No value found for the field %s for value %s"), self.field.string, self.get("value"))); return; } self.display_value["" + self.get("value")] = data[0][1]; @@ -819,6 +820,7 @@ var FieldX2Many = AbstractManyField.extend({ self.is_loaded = self.is_loaded.then(function() { var view = self.get_active_view(); if (view.type === "list") { + view.controller.page = 0; return view.controller.reload_content(); } else if (view.controller.do_search) { return view.controller.do_search(self.build_domain(), self.dataset.get_context(), []); @@ -863,6 +865,9 @@ var FieldX2Many = AbstractManyField.extend({ } return true; }, + is_false: function() { + return _(this.dataset.ids).isEmpty(); + }, }); var X2ManyDataSet = data.BufferedDataSet.extend({ @@ -1259,13 +1264,16 @@ var FieldOne2Many = FieldX2Many.extend({ return this._super.apply(this, arguments); }, commit_value: function() { - var view = this.viewmanager.active_view; - if(view.type === "list" && view.controller.editable()) { - return this.mutex.def.then(function () { - return view.controller.save_edition(); - }); - } - return this.mutex.def; + var self = this; + return this.is_loaded.then(function() { + var view = self.viewmanager.active_view; + if(view.type === "list" && view.controller.editable()) { + return self.mutex.def.then(function () { + return view.controller.save_edition(); + }); + } + return self.mutex.def; + }); }, }); diff --git a/addons/web/static/src/js/views/list_view.js b/addons/web/static/src/js/views/list_view.js index d905dfdadfd..9a87b7fd6b3 100644 --- a/addons/web/static/src/js/views/list_view.js +++ b/addons/web/static/src/js/views/list_view.js @@ -4,6 +4,7 @@ odoo.define('web.ListView', function (require) { var core = require('web.core'); var data = require('web.data'); +var data_manager = require('web.data_manager'); var DataExport = require('web.DataExport'); var formats = require('web.formats'); var common = require('web.list_common'); @@ -36,6 +37,7 @@ var row_decoration = [ var ListView = View.extend({ _template: 'ListView', accesskey: "l", + require_fields: true, defaults: _.extend({}, View.prototype.defaults, { // records can be selected one by one selectable: true, @@ -151,6 +153,7 @@ var ListView = View.extend({ } }, willStart: function() { + var self = this; // Retrieve the decoration defined on the model's list view this.decoration = _.pick(this.fields_view.arch.attrs, function(value, key) { return row_decoration.indexOf(key) >= 0; @@ -158,7 +161,10 @@ var ListView = View.extend({ this.decoration = _.mapObject(this.decoration, function(value) { return py.parse(py.tokenize(value)); }); - return this._super(); + var fields_def = data_manager.load_fields(this.dataset).then(function(fields_get) { + self.fields_get = fields_get; + }); + return $.when(this._super(), fields_def); }, /** * Set a custom Group construct as the root of the List View. @@ -1379,6 +1385,12 @@ ListView.Groups = Class.extend({ } } else { group_label = group.value; + var grouped_on_field = self.view.fields_get[group.grouped_on]; + if (grouped_on_field.type === 'selection') { + group_label = _.find(grouped_on_field.selection, function(selection) { + return selection[0] === group.value; + }); + } if (group_label instanceof Array) { group_label = group_label[1]; } |
