diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 3f519f30962..bc6bc141863 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -383,11 +383,6 @@ class DataSet(openerpweb.Controller): reads = Model.read(ids, fields or False, context) reads.sort(key=lambda obj: ids.index(obj['id'])) return reads - - @openerpweb.jsonrequest - def read(self, request, model, ids, fields=False): - return self.do_search_read(request, model, ids, fields, - request.session.eval_context(request.context)) @openerpweb.jsonrequest def get(self, request, model, ids, fields=False): diff --git a/addons/base/static/src/css/base.css b/addons/base/static/src/css/base.css index 9749dc97110..a921f320b3d 100644 --- a/addons/base/static/src/css/base.css +++ b/addons/base/static/src/css/base.css @@ -1060,13 +1060,8 @@ background: linear-gradient(top, #ffffff 0%,#ebe9e9 100%); /* W3C */ color: grey; } -.openerp .oe-dialog-warning { +.openerp .oe-dialog-warning p { + padding-left: 1em; font-size: 1.2em; font-weight: bold; } -.openerp .oe-dialog-warning img { - float: left; - position: relative; - top: -0.5em; - margin:0 7px 7px 0; -} diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index 2bea20fe972..b019d7f1867 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -399,7 +399,6 @@ openerp.base.Session = openerp.base.BasicController.extend( /** @lends openerp.b on_rpc_response: function() { }, on_rpc_error: function(error) { - this.on_log(error.message, error.data.debug); }, /** * The session is validated either by login or by restoration of a previous session @@ -830,8 +829,15 @@ openerp.base.CrashManager = openerp.base.Dialog.extend({ }, on_rpc_error: function(error) { this.error = error; - if (error.code === 200) { - this.dialog_title = "OpenERP Warning"; + if (error.data.fault_code) { + var split = error.data.fault_code.split('\n')[0].split(' -- '); + if (split.length > 1) { + error.type = split.shift(); + error.data.fault_code = error.data.fault_code.substr(error.type.length + 4); + } + } + if (error.code === 200 && error.type) { + this.dialog_title = "OpenERP " + _.capitalize(error.type); this.template = 'DialogWarning'; this.open({ width: 'auto', diff --git a/addons/base/static/src/js/data.js b/addons/base/static/src/js/data.js index 046ac2997bc..b3ddd7750c8 100644 --- a/addons/base/static/src/js/data.js +++ b/addons/base/static/src/js/data.js @@ -235,7 +235,7 @@ openerp.base.DataSet = openerp.base.Controller.extend( /** @lends openerp.base. this._super(session); this.model = model; this.context = context || {}; - this.index = 0; + this.index = null; this.count = 0; }, start: function() { diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index ac937fa7302..aa69c539c00 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -36,6 +36,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV this.default_focus_button = null; this.registry = openerp.base.form.widgets; this.has_been_loaded = $.Deferred(); + this.$form_header = null; }, start: function() { //this.log('Starting FormView '+this.model+this.view_id) @@ -59,72 +60,80 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV _.each(this.widgets, function(w) { w.start(); }); - this.$element.find('div.oe_form_pager button[data-pager-action]').click(function() { + this.$form_header = this.$element.find('#' + this.element_id + '_header'); + this.$form_header.find('div.oe_form_pager button[data-pager-action]').click(function() { var action = $(this).data('pager-action'); self.on_pager_action(action); }); - this.$element.find('#' + this.element_id + '_header button.oe_form_button_save').click(this.do_save); - this.$element.find('#' + this.element_id + '_header button.oe_form_button_save_edit').click(this.do_save_edit); - this.$element.find('#' + this.element_id + '_header button.oe_form_button_cancel').click(this.do_cancel); - this.$element.find('#' + this.element_id + '_header button.oe_form_button_new').click(this.on_button_new); + this.$form_header.find('button.oe_form_button_save').click(this.do_save); + this.$form_header.find('button.oe_form_button_save_edit').click(this.do_save_edit); + this.$form_header.find('button.oe_form_button_cancel').click(this.do_cancel); + this.$form_header.find('button.oe_form_button_new').click(this.on_button_new); this.view_manager.sidebar.set_toolbar(data.fields_view.toolbar); this.has_been_loaded.resolve(); }, do_show: function () { var self = this; - self.$element.show(); - if (this.dataset.index === null || (this.dataset.index === 0 && this.dataset.ids.length == 0)) { + if (this.dataset.index === null) { // null index means we should start a new record - // 0 index with empty ids means we called the form with empty dataset (wizards, switched to form from empty list, ...) this.on_button_new(); } else { this.dataset.read_index(_.keys(this.fields_view.fields), this.on_record_loaded); } + self.$element.show(); this.view_manager.sidebar.do_refresh(true); }, do_hide: function () { this.$element.hide(); }, on_record_loaded: function(record) { + if (!record) { + throw("Form: No record received"); + } + if (!record.id) { + this.$form_header.find('.oe_form_on_create').show(); + this.$form_header.find('.oe_form_on_update').hide(); + this.$form_header.find('button.oe_form_button_new').hide(); + } else { + this.$form_header.find('.oe_form_on_create').hide(); + this.$form_header.find('.oe_form_on_update').show(); + this.$form_header.find('button.oe_form_button_new').show(); + } this.touched = false; - if (record) { - this.datarecord = record; - for (var f in this.fields) { + this.datarecord = record; + for (var f in this.fields) { + var field = this.fields[f]; + field.touched = false; + field.set_value(this.datarecord[f] || false); + field.validate(); + } + if (!record.id) { + // New record: Second pass in order to trigger the onchanges + this.touched = true; + this.show_invalid = false; + for (var f in record) { var field = this.fields[f]; - field.touched = false; - field.set_value(this.datarecord[f] || false); - field.validate(); - } - if (!record.id) { - // New record: Second pass in order to trigger the onchanges - this.touched = true; - this.show_invalid = false; - for (var f in record) { - this.on_form_changed(this.fields[f]); + if (field) { + field.touched = true; + this.do_onchange(field); } } - this.on_form_changed(); - this.show_invalid = this.ready = true; - } else { - this.log("No record received"); } + this.on_form_changed(); + this.show_invalid = this.ready = true; this.do_update_pager(record.id == null); this.do_update_sidebar(); if (this.default_focus_field) { this.default_focus_field.focus(); } }, - on_form_changed: function(widget) { - if (widget && widget.node.attrs.on_change) { - this.do_onchange(widget); - } else { - for (var w in this.widgets) { - w = this.widgets[w]; - w.process_attrs(); - w.update_dom(); - } + on_form_changed: function() { + for (var w in this.widgets) { + w = this.widgets[w]; + w.process_attrs(); + w.update_dom(); } }, on_pager_action: function(action) { @@ -157,6 +166,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV this.ready = false; var onchange = _.trim(widget.node.attrs.on_change); var call = onchange.match(/^\s?(.*?)\((.*?)\)\s?$/); + console.log("Onchange triggered for field '%s' -> %s", widget.name, onchange); if (call) { var method = call[1], args = []; var argument_replacement = { @@ -195,12 +205,14 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV on_processed_onchange: function(response, processed) { var result = response.result; if (result.value) { + console.log(" |-> Onchange Response :", result.value); for (var f in result.value) { var field = this.fields[f]; if (field) { var value = result.value[f]; processed.push(field.name); if (field.get_value() != value) { + console.log(" |-> Onchange Action : change '%s' value from '%s' to '%s'", field.name, field.get_value(), value); field.set_value(value); if (_.indexOf(processed, field.name) < 0) { this.do_onchange(field, processed); @@ -724,7 +736,8 @@ openerp.base.form.Field = openerp.base.form.Widget.extend({ this.validate(); if (!this.invalid) { this.set_value_from_ui(); - this.view.on_form_changed(this); + this.view.do_onchange(this); + this.view.on_form_changed(); } else { this.update_dom(); } @@ -863,7 +876,7 @@ openerp.base.form.FieldDatetime = openerp.base.form.Field.extend({ } }, validate: function() { - this.invalid = this.required && this.$element.find('input')[this.jqueryui_object]('getDate') === ''; + this.invalid = this.required && !this.$element.find('input')[this.jqueryui_object]('getDate'); }, focus: function() { this.$element.find('input').focus(); diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index b03bb044ba4..de95a4294e8 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -360,8 +360,14 @@

- - + +
@@ -871,10 +877,19 @@
-

- - -

+ + + + + +
+

+ + d.html_error = context.engine.tools.html_escape(d.error.data.fault_code).replace(/\n/g, '
'); +
+ +

+