summaryrefslogtreecommitdiff
path: root/addons/web/static
diff options
context:
space:
mode:
authorAdrien Dieudonne <adr@odoo.com>2018-08-29 09:38:01 +0200
committerAdrien Dieudonne <adr@odoo.com>2018-08-31 09:53:00 +0200
commit671155c37629c63f7b982b5e14ff20c170d9632e (patch)
treef6021384a0d68c0b4d0be32105103008dd7fbc81 /addons/web/static
parent334b57fbf6ee05ecbf9c8b3082a0e4ed2732a8df (diff)
[FIX] web: domain: quarter and last quarter
Before this commit, it was not possible to compare data if the time range selected was quarter or last quarter. String and integer was concatenated and the returned domain to evaluate was wrong: -3 3 - (context_today().month - 1) % 3 instead of: -3 + 3 - (context_today().month - 1) % 3 Offset period param is always an integer but it's not the case of boundary params. For 'quarter' and 'last quarter', it's an expression to evaluate. Anyway, this part of code will be refactored in a while but it's important to make the test to avoid this king of issue.
Diffstat (limited to 'addons/web/static')
-rw-r--r--addons/web/static/src/js/core/domain.js12
-rw-r--r--addons/web/static/tests/views/search_view_tests.js189
2 files changed, 161 insertions, 40 deletions
diff --git a/addons/web/static/src/js/core/domain.js b/addons/web/static/src/js/core/domain.js
index 01d9aaee8ff..c31feb61a8f 100644
--- a/addons/web/static/src/js/core/domain.js
+++ b/addons/web/static/src/js/core/domain.js
@@ -244,18 +244,16 @@ var Domain = collections.Tree.extend({
function makeInterval () {
switch (comparisonPeriod) {
case 'previous_period':
- _.map(offsetPeriodParams, function (value, key) {
- if (_.isNumber(value)) {
+ _.each(offsetPeriodParams, function (value, key) {
+ if (!leftBoundaryParams[key] ||_.isNumber(leftBoundaryParams[key])) {
leftBoundaryParams[key] = value + (leftBoundaryParams[key] || 0);
} else {
- leftBoundaryParams[key] = value + ' + ' + (leftBoundaryParams[key] || 0);
+ leftBoundaryParams[key] = value + ' + ' + leftBoundaryParams[key];
}
- });
- _.map(offsetPeriodParams, function (value, key) {
- if (_.isNumber(value)) {
+ if (!rightBoundaryParams[key] || _.isNumber(rightBoundaryParams[key])) {
rightBoundaryParams[key] = value + (rightBoundaryParams[key] || 0);
} else {
- rightBoundaryParams[key] = value + ' + ' + (rightBoundaryParams[key] || 0);
+ rightBoundaryParams[key] = value + ' + ' + rightBoundaryParams[key];
}
});
break;
diff --git a/addons/web/static/tests/views/search_view_tests.js b/addons/web/static/tests/views/search_view_tests.js
index 9b1248bb309..c2b06f2c49a 100644
--- a/addons/web/static/tests/views/search_view_tests.js
+++ b/addons/web/static/tests/views/search_view_tests.js
@@ -3,6 +3,7 @@ odoo.define('web.search_view_tests', function (require) {
var testUtils = require('web.test_utils');
var createActionManager = testUtils.createActionManager;
+var patchDate = testUtils.patchDate;
QUnit.module('Search View', {
beforeEach: function () {
@@ -184,6 +185,82 @@ QUnit.module('Search View', {
'<filter string="Date Field Groupby" name="coolName" context="{\'group_by\': \'date_field:day\'}"/>' +
'</search>',
};
+
+ this.periodOptions = [
+ 'today',
+ 'this_week',
+ 'this_month',
+ 'this_quarter',
+ 'this_year',
+ 'yesterday',
+ 'last_week',
+ 'last_month',
+ 'last_quarter',
+ 'last_year',
+ 'last_7_days',
+ 'last_30_days',
+ 'last_365_days'
+ ];
+
+ // assuming that the current time is: 2017-03-22:01:00:00
+ this.periodDomains = [
+ // today
+ ['&', ["date_field", ">=", "2017-03-22"],["date_field", "<", "2017-03-23"]],
+ // this week
+ ['&', ["date_field", ">=", "2017-03-20"],["date_field", "<", "2017-03-27"]],
+ // this month
+ ['&', ["date_field", ">=", "2017-03-01"],["date_field", "<", "2017-04-01"]],
+ // this quarter
+ ['&', ["date_field", ">=", "2017-01-01"],["date_field", "<", "2017-04-01"]],
+ // this year
+ ['&', ["date_field", ">=", "2017-01-01"],["date_field", "<", "2018-01-01"]],
+ // yesterday
+ ['&', ["date_field", ">=", "2017-03-21"],["date_field", "<", "2017-03-22"]],
+ // last week
+ ['&', ["date_field", ">=", "2017-03-13"],["date_field", "<", "2017-03-20"]],
+ // last month
+ ['&', ["date_field", ">=", "2017-02-01"],["date_field", "<", "2017-03-01"]],
+ // last quarter
+ ['&', ["date_field", ">=", "2016-10-01"],["date_field", "<", "2017-01-01"]],
+ // last year
+ ['&', ["date_field", ">=", "2016-01-01"],["date_field", "<", "2017-01-01"]],
+ // last 7 days (whole days)
+ ['&', ["date_field", ">=", "2017-03-15"],["date_field", "<", "2017-03-22"]],
+ // last 30 days
+ ['&', ["date_field", ">=", "2017-02-20"],["date_field", "<", "2017-03-22"]],
+ // last 365 days
+ ['&', ["date_field", ">=", "2016-03-22"],["date_field", "<", "2017-03-22"]],
+ ];
+
+ // assuming that the current time is: 2017-03-22:01:00:00
+ this.previousPeriodDomains = [
+ // today - 1 day
+ ['&', ["date_field", ">=", "2017-03-21"],["date_field", "<", "2017-03-22"]],
+ // this week - 1 week
+ ['&', ["date_field", ">=", "2017-03-13"],["date_field", "<", "2017-03-20"]],
+ // this month - 1 month
+ ['&', ["date_field", ">=", "2017-02-01"],["date_field", "<", "2017-03-01"]],
+ // this quarter - 3 months
+ ['&', ["date_field", ">=", "2016-10-01"],["date_field", "<", "2017-01-01"]],
+ // this year - 1 year
+ ['&', ["date_field", ">=", "2016-01-01"],["date_field", "<", "2017-01-01"]],
+ // yesterday - 1 day
+ ['&', ["date_field", ">=", "2017-03-20"],["date_field", "<", "2017-03-21"]],
+ // last week - 1 week
+ ['&', ["date_field", ">=", "2017-03-06"],["date_field", "<", "2017-03-13"]],
+ // last month - 1 month
+ ['&', ["date_field", ">=", "2017-01-01"],["date_field", "<", "2017-02-01"]],
+ // last quarter - 3 months
+ ['&', ["date_field", ">=", "2016-07-01"],["date_field", "<", "2016-10-01"]],
+ // last year - 1 year
+ ['&', ["date_field", ">=", "2015-01-01"],["date_field", "<", "2016-01-01"]],
+ // last 7 days (whole days) - 1 week
+ ['&', ["date_field", ">=", "2017-03-08"],["date_field", "<", "2017-03-15"]],
+ // last 30 days - 30 days
+ ['&', ["date_field", ">=", "2017-01-21"],["date_field", "<", "2017-02-20"]],
+ // last 365 days
+ ['&', ["date_field", ">=", "2015-03-23"],["date_field", "<", "2016-03-22"]],
+ ];
},
}, function () {
QUnit.module('Groupby Menu');
@@ -420,43 +497,14 @@ QUnit.module('Search View', {
});
QUnit.test('filter by a date field using period works', function (assert) {
-
assert.expect(14);
+ var self = this;
+
this.archs['partner,4,search'] = '<search>'+
'<filter string="AAA" name="some_filter" date="date_field" default_period="this_week"></filter>' +
'</search>';
- var domains = [
- [],
- // today
- ['&', ["date_field", ">=", "2017-03-22"],["date_field", "<", "2017-03-23"]],
- // this week
- ['&', ["date_field", ">=", "2017-03-20"],["date_field", "<", "2017-03-27"]],
- // this month
- ['&', ["date_field", ">=", "2017-03-01"],["date_field", "<", "2017-04-01"]],
- // this quarter
- ['&', ["date_field", ">=", "2017-01-01"],["date_field", "<", "2017-04-01"]],
- // this year
- ['&', ["date_field", ">=", "2017-01-01"],["date_field", "<", "2018-01-01"]],
- // yesterday
- ['&', ["date_field", ">=", "2017-03-21"],["date_field", "<", "2017-03-22"]],
- // last week
- ['&', ["date_field", ">=", "2017-03-13"],["date_field", "<", "2017-03-20"]],
- // last month
- ['&', ["date_field", ">=", "2017-02-01"],["date_field", "<", "2017-03-01"]],
- // last quarter
- ['&', ["date_field", ">=", "2016-10-01"],["date_field", "<", "2017-01-01"]],
- // last year
- ['&', ["date_field", ">=", "2016-01-01"],["date_field", "<", "2017-01-01"]],
- // last 7 days (whole days)
- ['&', ["date_field", ">=", "2017-03-15"],["date_field", "<", "2017-03-22"]],
- // last 30 days
- ['&', ["date_field", ">=", "2017-02-20"],["date_field", "<", "2017-03-22"]],
- // last 365 days
- ['&', ["date_field", ">=", "2016-03-22"],["date_field", "<", "2017-03-22"]],
- ];
-
var RealDate = window.Date;
window.Date = function TestDate() {
@@ -472,8 +520,8 @@ QUnit.module('Search View', {
archs: this.archs,
data: this.data,
mockRPC: function (route, args) {
- if (route === '/web/dataset/search_read') {
- assert.deepEqual(args.domain, domains.shift());
+ if (route === '/web/dataset/search_read' && args.domain.length) {
+ assert.deepEqual(args.domain, self.periodDomains.shift());
}
return this._super.apply(this, arguments);
},
@@ -485,6 +533,13 @@ QUnit.module('Search View', {
$('.o_search_options .fa-filter').click();
// open menu options
$('.o_menu_item').click();
+
+ var periodOptions = $('.o_menu_item .o_item_option').map(function () {
+ return $(this).data('option_id');
+ }).toArray();
+ assert.deepEqual(periodOptions, this.periodOptions,
+ "13 period options should be available:");
+
$('.o_menu_item .o_item_option[data-option_id="today"]').click();
$('.o_menu_item .o_item_option[data-option_id="this_week"]').click();
$('.o_menu_item .o_item_option[data-option_id="this_month"]').click();
@@ -664,5 +719,73 @@ QUnit.module('Search View', {
actionManager.destroy();
});
+ QUnit.test('time range menu in comparison mode', function (assert) {
+ assert.expect(43);
+
+ var self = this;
+
+ var periodOptionText, periodOptionValue;
+ var unpatchDate = patchDate(2017, 2, 22, 1, 0, 0);
+
+ var actionManager = createActionManager({
+ actions: this.actions,
+ archs: this.archs,
+ data: this.data,
+ mockRPC: function (route, args) {
+ if (route === '/web/dataset/call_kw/partner/read_group') {
+ var timeRangeMenuData = args.kwargs.context.timeRangeMenuData;
+ if (timeRangeMenuData) {
+ assert.deepEqual(timeRangeMenuData.timeRange,
+ self.periodDomains.shift(),
+ "time range domain for " + periodOptionText);
+ assert.deepEqual(timeRangeMenuData.comparisonTimeRange,
+ self.previousPeriodDomains.shift(),
+ "comparaison time range domain for " + periodOptionText);
+ }
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+ // time range menu should be available in graph view
+ actionManager.doAction(4);
+
+ var $timeRangeMenu = $('.o_time_range_menu');
+ assert.strictEqual($timeRangeMenu.not('.o_hidden').length, 1,
+ "Time range menu should be visible");
+ assert.strictEqual($('.o_facet_values').length, 0,
+ "Search view has no facet");
+
+ var $periodOptions = $timeRangeMenu.find('.o_time_range_selector option');
+ var periodOptions = $periodOptions.map(function () {
+ return $(this).val();
+ }).toArray();
+ assert.deepEqual(periodOptions, this.periodOptions,
+ "13 period options should be available:");
+
+ $periodOptions.each(function () {
+ periodOptionText = $(this).text().trim();
+ periodOptionValue = $(this).val();
+ // opens time range menu dropdown
+ $('.o_time_range_menu_button').click();
+ var $timeRangeMenu = $('.o_time_range_menu');
+ // comparison is not checked by default
+ if (!$timeRangeMenu.find('.o_comparison_checkbox').is(':checked')) {
+ $timeRangeMenu.find('.o_comparison_checkbox').click();
+ assert.strictEqual($('.o_comparison_time_range_selector:visible').length, 1,
+ "Comparison has to be checked (only at the first time)");
+ }
+ // select one period option to test it
+ $timeRangeMenu.find('.o_time_range_selector').val(periodOptionValue);
+ // apply
+ $timeRangeMenu.find('.o_apply_range').click();
+ assert.strictEqual($('.o_facet_values').text().trim(),
+ "Date: " + periodOptionText + " / Previous Period",
+ "Facet should be updated with this period: " + periodOptionValue);
+ });
+
+ unpatchDate();
+ actionManager.destroy();
+ });
+
});
});