diff options
| author | Xavier Morel <xmo@openerp.com> | 2012-06-13 12:08:19 +0200 |
|---|---|---|
| committer | Xavier Morel <xmo@openerp.com> | 2012-06-13 12:08:19 +0200 |
| commit | 5ec4ecf85d1b2645f43b7dbbb8d7df88a0ec042d (patch) | |
| tree | 74318b250b97462e29a78acee991d7830a573bd2 /addons/web/static | |
| parent | 632a4dee0c31754713bf5dd4cf8cde974542fc97 (diff) | |
[FIX] O2M validation: correctly proxy validation from/to edited row of the list view, if any
bzr revid: xmo@openerp.com-20120613100819-sw93kst4dpwhnu1p
Diffstat (limited to 'addons/web/static')
| -rw-r--r-- | addons/web/static/src/js/view_form.js | 57 |
1 files changed, 42 insertions, 15 deletions
diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index fe8448f4dcc..e82a0f1818a 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2508,23 +2508,20 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ }, this)); }, is_valid: function() { - this.validate(); - return this._super(); - }, - validate: function() { - this.invalid = false; if (!this.viewmanager.views[this.viewmanager.active_view]) - return; + return true; var view = this.viewmanager.views[this.viewmanager.active_view].controller; - if (this.viewmanager.active_view === "form") { - for (var f in view.fields) { - f = view.fields[f]; - if (!f.is_valid()) { - this.invalid = true; - return; - } - } + switch (this.viewmanager.active_view) { + case 'form': + return _(view.fields).chain() + .invoke('is_valid') + .all(_.identity) + .value(); + break; + case 'list': + return view.is_valid(); } + return true; }, is_dirty: function() { this.save_any_view(); @@ -2556,6 +2553,36 @@ openerp.web.form.One2ManyDataSet = openerp.web.BufferedDataSet.extend({ openerp.web.form.One2ManyListView = openerp.web.ListView.extend({ _template: 'One2Many.listview', + is_valid: function () { + var form; + // A list not being edited is always valid + if (!(form = this.first_edition_form())) { + return true; + } + + // Otherwise validate internal form + return _(form.fields).chain() + .invoke(function () { + this.validate(); + this.update_dom(true); + return this.is_valid(); + }) + .all(_.identity) + .value(); + }, + first_edition_form: function () { + var get_form = function (group_or_list) { + if (group_or_list.edition) { + return group_or_list.edition_form; + } + return _(group_or_list.children).chain() + .map(get_form) + .compact() + .first() + .value(); + }; + return get_form(this.groups); + }, do_add_record: function () { if (this.options.editable) { this._super.apply(this, arguments); @@ -2609,7 +2636,7 @@ openerp.web.form.One2ManyListView = openerp.web.ListView.extend({ var button_result = self.o2m.dataset.call_button.apply(self.o2m.dataset, arguments); self.o2m.reload_current_view(); return button_result; - } + }; pop.on_write.add(function(id, data) { self.o2m.dataset.write(id, data, {}, function(r) { self.o2m.reload_current_view(); |
