summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/views/basic
diff options
context:
space:
mode:
authorAaron Bohy <aab@odoo.com>2017-09-30 10:50:41 +0200
committerAaron Bohy <aab@odoo.com>2017-09-30 15:59:24 +0200
commit776bac6a069fc1ef2d6bea0e85a0737e3cefecef (patch)
treec54fcc05989722a9acd1ab4ada8e3ad013dbc93d /addons/web/static/src/js/views/basic
parent16eb262c60a3b46f89cb706504a8c2d3dc755e08 (diff)
[FIX] web: don't discard x2many rows coming from default_get
Problem occured in the MRP Production wizard (with a consumed product tracked by serial number). The opened record is a new record, and its one2many has 2 default rows that are prefilled. If the user edited one of the quantities in those rows, and set an invalid value instead (e.g. a letter), the row was removed without notice when it was focused out. This was because the model wasn't aware that a change has been done on the record, and as the record was flagged as new, it was simply abandonned.
Diffstat (limited to 'addons/web/static/src/js/views/basic')
-rw-r--r--addons/web/static/src/js/views/basic/basic_controller.js9
-rw-r--r--addons/web/static/src/js/views/basic/basic_model.js11
2 files changed, 20 insertions, 0 deletions
diff --git a/addons/web/static/src/js/views/basic/basic_controller.js b/addons/web/static/src/js/views/basic/basic_controller.js
index 481fc0cf4dd..c899530de07 100644
--- a/addons/web/static/src/js/views/basic/basic_controller.js
+++ b/addons/web/static/src/js/views/basic/basic_controller.js
@@ -19,6 +19,7 @@ var BasicController = AbstractController.extend(FieldManagerMixin, {
custom_events: _.extend({}, AbstractController.prototype.custom_events, FieldManagerMixin.custom_events, {
discard_changes: '_onDiscardChanges',
reload: '_onReload',
+ set_dirty: '_onSetDirty',
sidebar_data_asked: '_onSidebarDataAsked',
translate: '_onTranslate',
}),
@@ -554,6 +555,14 @@ var BasicController = AbstractController.extend(FieldManagerMixin, {
}
},
/**
+ * @private
+ * @param {OdooEvent} ev
+ */
+ _onSetDirty: function (ev) {
+ ev.stopPropagation(); // prevent other controllers from handling this request
+ this.model.setDirty(ev.data.dataPointID);
+ },
+ /**
* Handler used to get all the data necessary when a custom action is
* performed through the sidebar.
*
diff --git a/addons/web/static/src/js/views/basic/basic_model.js b/addons/web/static/src/js/views/basic/basic_model.js
index 9e7fb8b78ef..57c4a1f3743 100644
--- a/addons/web/static/src/js/views/basic/basic_model.js
+++ b/addons/web/static/src/js/views/basic/basic_model.js
@@ -948,6 +948,17 @@ var BasicModel = AbstractModel.extend({
record.fieldsInfo = _.defaults(record.fieldsInfo, viewInfo.fieldsInfo);
},
/**
+ * Manually sets a resource as dirty. This is used to notify that a field
+ * has been modified, but with an invalid value. In that case, the value is
+ * not sent to the basic model, but the record should still be flagged as
+ * dirty so that it isn't discarded without any warning.
+ *
+ * @param {string} id a resource id
+ */
+ setDirty: function (id) {
+ this.localData[id]._isDirty = true;
+ },
+ /**
* For list resources, this changes the orderedBy key.
*
* @param {string} list_id id for the list resource