summaryrefslogtreecommitdiff
path: root/addons/web/static/src
diff options
context:
space:
mode:
authorMathieu Duckerts-Antoine <dam@odoo.com>2020-01-28 11:42:59 +0000
committerMathieu Duckerts-Antoine <dam@odoo.com>2020-02-03 13:57:17 +0000
commit95f40530f344df3f38d67e5c092b0862e866c5e9 (patch)
treeef0973c16acd413129634ad7d83b4ae1680bee96 /addons/web/static/src
parent68f5883aff595d1c9ac3e928b7d3bbedd09868dd (diff)
[FIX] web: fix date filters
Issue If month - 1 or month - 2 are in the previous year, the filter is incorrect. ex: Date = Jan. 2020, Filter = Dec. 2019 => last_year__last_month = 2018-12 instead 2019-12 Cause If date is 2020-01-20 Selecting December => adding param "last_month" Selecting 2019 => adding param "last_year" Applying "last_month" => date become 2019-12-01 Applying "last_year" => date become 2018-12-01 Solution Detect the right year to activate by default when a month is selected and no year is selected. With that solution it is not possible to get records in Jan. 2020 or in Dec. 2019 only for instance but the global functioning of date filters stays the same as before. OPW-2169528 closes odoo/odoo#44208 X-original-commit: 096fdc7d3fe0799aa761c6ad3597569a002c698e Signed-off-by: Nicolas Lempereur (nle) <nle@odoo.com> Co-authored-by: Jason Van Malder <jvm@odoo.com>
Diffstat (limited to 'addons/web/static/src')
-rw-r--r--addons/web/static/src/js/views/control_panel/control_panel_model.js14
-rw-r--r--addons/web/static/src/js/views/control_panel/control_panel_view.js40
2 files changed, 33 insertions, 21 deletions
diff --git a/addons/web/static/src/js/views/control_panel/control_panel_model.js b/addons/web/static/src/js/views/control_panel/control_panel_model.js
index dc7ab303abd..80a6a6a441d 100644
--- a/addons/web/static/src/js/views/control_panel/control_panel_model.js
+++ b/addons/web/static/src/js/views/control_panel/control_panel_model.js
@@ -420,7 +420,7 @@ var ControlPanelModel = mvc.Model.extend({
}
if (filter.currentOptionIds) {
filter.currentOptionIds.clear();
- }
+ }
})
group.activeFilterIds = [];
});
@@ -459,9 +459,13 @@ var ControlPanelModel = mvc.Model.extend({
acc.push(y.optionId);
}
return acc;
- },
+ },
[]
);
+ const defaultYearId = (optionId) => {
+ const year = filter.options.find(o => o.optionId === optionId).defaultYear;
+ return filter.options.find(o => o.setParam.year === year).optionId;
+ };
if (filter.type === 'filter') {
const alreadyActive = group.activeFilterIds.some(isEqualTo([filterId]));
@@ -486,7 +490,7 @@ var ControlPanelModel = mvc.Model.extend({
filter.currentOptionIds.add(optionId);
if (!selectedYears().length) {
// Here we add 'this_year' as options if no option of type year is already selected.
- filter.currentOptionIds.add('this_year');
+ filter.currentOptionIds.add(defaultYearId(optionId));
}
}
} else if (filter.type === 'groupBy') {
@@ -726,8 +730,8 @@ var ControlPanelModel = mvc.Model.extend({
return pyUtils.assembleDomains(domains, 'AND');
},
/**
- * Return an array containing 'facets' used to create the content of the search bar.
- *
+ * Return an array containing 'facets' used to create the content of the search bar.
+ *
* @returns {Object}
*/
_getFacets: function () {
diff --git a/addons/web/static/src/js/views/control_panel/control_panel_view.js b/addons/web/static/src/js/views/control_panel/control_panel_view.js
index 0c862c7cc72..c2d4e3ebf33 100644
--- a/addons/web/static/src/js/views/control_panel/control_panel_view.js
+++ b/addons/web/static/src/js/views/control_panel/control_panel_view.js
@@ -13,7 +13,6 @@ var Domain = require('web.Domain');
var DEFAULT_INTERVAL = controlPanelViewParameters.DEFAULT_INTERVAL;
var DEFAULT_PERIOD = controlPanelViewParameters.DEFAULT_PERIOD;
var INTERVAL_OPTIONS = controlPanelViewParameters.INTERVAL_OPTIONS;
-var PERIOD_OPTIONS = controlPanelViewParameters.PERIOD_OPTIONS;
const OPTION_GENERATORS = controlPanelViewParameters.OPTION_GENERATORS;
var Factory = mvc.Factory;
@@ -74,18 +73,28 @@ var ControlPanelView = Factory.extend({
this.fields = viewInfo.fields;
this.referenceMoment = moment();
- this.optionGenerators = OPTION_GENERATORS.map(o => {
- const description = o.description ?
+
+ const setDescriptions = (options) => {
+ return options.map(o => {
+ const oClone = JSON.parse(JSON.stringify(o));
+ const description = o.description ?
o.description.toString () :
- this.referenceMoment.clone().set(o.setParam).add(o.addParam).format(o.format);
- return _.extend({}, o, {description: description});
- });
- PERIOD_OPTIONS = PERIOD_OPTIONS.map(option =>
- _.extend({}, option, {description: option.description.toString()})
- );
- INTERVAL_OPTIONS = INTERVAL_OPTIONS.map(option =>
- _.extend({}, option, {description: option.description.toString()})
- );
+ this.referenceMoment.clone().add(o.addParam).format(o.format);
+ return _.extend(oClone, {description: description});
+ });
+ };
+ const process = (options) => {
+ return options.map(o => {
+ const date = this.referenceMoment.clone().set(o.setParam).add(o.addParam);
+ delete o.addParam;
+ o.setParam[o.granularity] = date[o.granularity]();
+ o.defaultYear = date.year();
+ return o;
+ });
+ }
+
+ this.optionGenerators = process(setDescriptions(OPTION_GENERATORS));
+ this.intervalOptions = setDescriptions(INTERVAL_OPTIONS);
this.controllerParams.modelName = params.modelName;
@@ -196,7 +205,7 @@ var ControlPanelView = Factory.extend({
filter.fieldType = this.fields[attrs.fieldName].type;
if (_.contains(['date', 'datetime'], filter.fieldType)) {
filter.hasOptions = true;
- filter.options = INTERVAL_OPTIONS;
+ filter.options = this.intervalOptions;
filter.defaultOptionId = attrs.defaultInterval ||
DEFAULT_INTERVAL;
filter.currentOptionIds = new Set();
@@ -227,10 +236,9 @@ var ControlPanelView = Factory.extend({
*/
_getDateFilterBasicDomains: function (filter) {
const _constructBasicDomain = (y, o) => {
- const addParam = _.extend({}, y.addParam, o ? o.addParam : {});
- const setParam = _.extend({}, y.setParam, o ? o.setParam : {});
+ const setParam = Object.assign({}, y.setParam, o ? o.setParam : {});
const granularity = o ? o.granularity : y.granularity;
- const date = this.referenceMoment.clone().set(setParam).add(addParam);
+ const date = this.referenceMoment.clone().set(setParam);
let leftBound = date.clone().startOf(granularity).locale('en');
let rightBound = date.clone().endOf(granularity).locale('en');