summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/views/basic/basic_model.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static/src/js/views/basic/basic_model.js')
-rw-r--r--addons/web/static/src/js/views/basic/basic_model.js27
1 files changed, 24 insertions, 3 deletions
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 f7026f27129..42731bcf83b 100644
--- a/addons/web/static/src/js/views/basic/basic_model.js
+++ b/addons/web/static/src/js/views/basic/basic_model.js
@@ -2009,6 +2009,25 @@ var BasicModel = AbstractModel.extend({
return Object.keys(fieldsInfo && fieldsInfo[element.viewType] || {});
},
/**
+ * Returns true iff value is considered to be set for the given field's type.
+ *
+ * @private
+ * @param {any} value a value for the field
+ * @param {string} fieldType a type of field
+ * @returns {boolean}
+ */
+ _isFieldSet: function (value, fieldType) {
+ switch (fieldType) {
+ case 'boolean':
+ return true;
+ case 'one2many':
+ case 'many2many':
+ return value.count > 0;
+ default:
+ return value !== false;
+ }
+ },
+ /**
* return true if a list element is 'valid'. Such an element is valid if it
* has no sub record with an unset required field.
*
@@ -2020,11 +2039,13 @@ var BasicModel = AbstractModel.extend({
* @returns {boolean}
*/
_isX2ManyValid: function (id) {
+ var self = this;
var isValid = true;
var element = this.get(id, {raw: true});
- _.each(element.data, function (rec) {
- _.each(rec.getFieldNames(), function (fieldName) {
- if (rec.fields[fieldName].required && !rec.data[fieldName]) {
+ _.each(element.getFieldNames(), function (fieldName) {
+ var field = element.fields[fieldName];
+ _.each(element.data, function (rec) {
+ if (field.required && !self._isFieldSet(rec.data[fieldName], field.type)) {
isValid = false;
}
});