diff options
| author | Christophe Simonis <chs@odoo.com> | 2018-11-23 12:11:32 +0100 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2018-11-23 12:11:32 +0100 |
| commit | 7a0243ec15d916102ec4502db01ae5e70d6912cd (patch) | |
| tree | 29c940dcab4e9f7c834b8a5e899e394d8f821794 /addons/web/static/src | |
| parent | 75477052a03530df791348cdcf819f5bedd46284 (diff) | |
| parent | b3052b690fad15feb3211525666d4962bc1a24ac (diff) | |
[MERGE] forward port branch 12.0 up to b3052b690fa
Diffstat (limited to 'addons/web/static/src')
7 files changed, 44 insertions, 18 deletions
diff --git a/addons/web/static/src/js/fields/basic_fields.js b/addons/web/static/src/js/fields/basic_fields.js index b324d6f2efa..53fbf99a8cd 100644 --- a/addons/web/static/src/js/fields/basic_fields.js +++ b/addons/web/static/src/js/fields/basic_fields.js @@ -501,6 +501,7 @@ var FieldDate = InputField.extend({ // use the session timezone when formatting dates this.formatOptions.timezone = true; this.datepickerOptions = _.defaults( + {}, this.nodeOptions.datepicker || {}, {defaultDate: this.value} ); diff --git a/addons/web/static/src/js/fields/upgrade_fields.js b/addons/web/static/src/js/fields/upgrade_fields.js index 445cc18cf81..dd91ca2efc2 100644 --- a/addons/web/static/src/js/fields/upgrade_fields.js +++ b/addons/web/static/src/js/fields/upgrade_fields.js @@ -146,7 +146,6 @@ var UpgradeBoolean = FieldBoolean.extend(AbstractFieldUpgrade, { * @private */ _insertEnterpriseLabel: function ($enterpriseLabel) { - if(this.name==='module_partner_autocomplete') debugger; var $el = this.$label || this.$el; $el.append(' ').append($enterpriseLabel); }, 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 d0f15aeb369..345b76856b6 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -1492,6 +1492,11 @@ var BasicModel = AbstractModel.extend({ record._rawChanges[name] = val; return; } + if (record._rawChanges[name]) { + // if previous _rawChanges exists, clear them since the field is now knwon + // and restoring outdated onchange over posterious change is wrong + delete record._rawChanges[name]; + } var oldValue = name in record._changes ? record._changes[name] : record.data[name]; var id; if (field.type === 'many2one') { @@ -2838,11 +2843,6 @@ var BasicModel = AbstractModel.extend({ relationField: field.relation_field, viewType: view ? view.type : fieldInfo.viewType, }); - // set existing changes to the list - if (record._changes && record._changes[fieldName]) { - list._changes = self.localData[record._changes[fieldName]]._changes; - record._changes[fieldName] = list.id; - } record.data[fieldName] = list.id; if (!fieldInfo.__no_fetch) { var def = self._readUngroupedList(list).then(function () { @@ -3674,7 +3674,7 @@ var BasicModel = AbstractModel.extend({ model: params.modelName, offset: params.offset || (type === 'record' ? _.indexOf(res_ids, res_id) : 0), openGroupByDefault: params.openGroupByDefault, - orderedBy: params.orderedBy || [], + orderedBy: params.orderedBy || (params.context && params.context.orderedBy) || [], orderedResIDs: params.orderedResIDs, parentID: params.parentID, rawContext: params.rawContext, @@ -4382,6 +4382,7 @@ var BasicModel = AbstractModel.extend({ if (options.context !== undefined) { element.context = options.context; + element.orderedBy = options.context.orderedBy || element.orderedBy; } if (options.domain !== undefined) { element.domain = options.domain; diff --git a/addons/web/static/src/js/views/list/list_controller.js b/addons/web/static/src/js/views/list/list_controller.js index 612cc1eee02..ab3adbf5922 100644 --- a/addons/web/static/src/js/views/list/list_controller.js +++ b/addons/web/static/src/js/views/list/list_controller.js @@ -84,6 +84,14 @@ var ListController = BasicController.extend({ return $.Deferred().resolve(); } }, + /* + * @override + */ + getContext: function () { + var context = this._super.apply(this, arguments); + context.orderedBy = this.model.get(this.handle, {raw: true}).orderedBy || []; + return context; + }, /** * Returns the list of currently selected res_ids (with the check boxes on * the left) @@ -199,6 +207,7 @@ var ListController = BasicController.extend({ } else { this.selectedRecords = []; } + params.selectedRecords = this.selectedRecords; return this._super.apply(this, arguments); }, diff --git a/addons/web/static/src/js/views/search/favorites_menu.js b/addons/web/static/src/js/views/search/favorites_menu.js index a40f38d4095..46949e901a3 100644 --- a/addons/web/static/src/js/views/search/favorites_menu.js +++ b/addons/web/static/src/js/views/search/favorites_menu.js @@ -103,9 +103,17 @@ return Widget.extend({ var controllerContext; this.trigger_up('get_controller_context', { callback: function (ctx) { - controllerContext = ctx; + if (ctx && ctx.orderedBy) { + var sort = _.map(ctx.orderedBy, function (obj) { + var order = obj.asc ? 'ASC' : 'DESC'; + return obj.name + ' ' + order; + }); + self.searchview.dataset.set_sort(sort); + } + controllerContext = _.omit(ctx, ['orderedBy']); }, }); + var results = pyUtils.eval_domains_and_contexts({ domains: [], contexts: [user_context].concat(search.contexts.concat(controllerContext || [])), @@ -186,7 +194,18 @@ return Widget.extend({ category: _t("Custom Filter"), icon: 'fa-star', field: { - get_context: function () { return filter.context; }, + get_context: function () { + var sortParsed = JSON.parse(filter.sort || "[]"); + var orderedBy = []; + _.each(sortParsed, function (sort) { + orderedBy.push({ + name: sort[0] === '-' ? sort.slice(1) : sort, + asc: sort[0] === '-' ? false : true, + }); + }); + + return _.defaults({}, filter.context, {orderedBy : orderedBy}); + }, get_groupby: function () { return [filter.context]; }, // facet is not used get_domain: function (facet, noEvaluation) { diff --git a/addons/web/static/src/js/views/search/search_inputs.js b/addons/web/static/src/js/views/search/search_inputs.js index 1c7873237cc..43fbea08f9c 100644 --- a/addons/web/static/src/js/views/search/search_inputs.js +++ b/addons/web/static/src/js/views/search/search_inputs.js @@ -346,7 +346,8 @@ var BooleanField = SelectionField.extend(/** @lends instance.web.search.BooleanF */ var DateField = Field.extend(/** @lends instance.web.search.DateField# */{ value_from: function (facetValue) { - return time.date_to_str(facetValue.get('value')); + var serverFormat = (this.attrs && this.attrs.type === 'datetime') ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD'; + return facetValue.get('valueAsMoment').clone().format(serverFormat); }, complete: function (needle) { // Make sure the needle has a correct format before the creation of the moment object. See @@ -371,7 +372,7 @@ var DateField = Field.extend(/** @lends instance.web.search.DateField# */{ facet: { category: this.attrs.string, field: this, - values: [{label: date_string, value: m.toDate()}] + values: [{label: date_string, value: m.toDate(), valueAsMoment: m.clone()}] } }]); } @@ -388,11 +389,7 @@ var DateField = Field.extend(/** @lends instance.web.search.DateField# */{ * @class * @extends instance.web.DateField */ -var DateTimeField = DateField.extend(/** @lends instance.web.search.DateTimeField# */{ - value_from: function (facetValue) { - return time.datetime_to_str(facetValue.get('value')); - } -}); +var DateTimeField = DateField; var ManyToOneField = CharField.extend({ default_operator: {}, diff --git a/addons/web/static/src/scss/form_view.scss b/addons/web/static/src/scss/form_view.scss index 6171762ed1f..31032a75cc2 100644 --- a/addons/web/static/src/scss/form_view.scss +++ b/addons/web/static/src/scss/form_view.scss @@ -343,13 +343,13 @@ } } - :not(.o_row) > .o_field_widget, + :not(.o_row):not(.o_data_cell) > .o_field_widget, .o_row > .o_field_widget:last-child { // Note: this does not take care // of an invisible last-child but // it does not really matter // Makes extra buttons (e.g. m2o external button) overflow on the // right padding of the parent element - .o_input_dropdown { + > .o_input_dropdown { flex: 1 0 auto; } } |
