diff options
| author | Mathieu Duckerts-Antoine <dam@odoo.com> | 2018-07-06 17:08:52 +0200 |
|---|---|---|
| committer | Mathieu Duckerts-Antoine <dam@odoo.com> | 2018-08-14 12:30:51 +0200 |
| commit | 333ac27cd5c23e3e1a4f7d78828f28a2c844f8f4 (patch) | |
| tree | 763baedd55af4c60c73eb112940ae660bca37241 /addons/web/static/src/js/core/domain.js | |
| parent | 3523694b6cdce621585893100c7cfbe9495c9eff (diff) | |
[IMP] web: new TimeRangeMenu widget in search view
This commit introduces a new widget 'TimeRangeMenu' used in
the search view. It allows a user to easily:
- search data with a given date or datetime field value
in a specified period of time
- compare the data of interest with data of the previous
period or the previous year.
The time range menu is available in the search view when one
of the four following view types is instantiated:
graph, pivot, cohort, or dashboard.
Task Id: 1835644
Diffstat (limited to 'addons/web/static/src/js/core/domain.js')
| -rw-r--r-- | addons/web/static/src/js/core/domain.js | 111 |
1 files changed, 80 insertions, 31 deletions
diff --git a/addons/web/static/src/js/core/domain.js b/addons/web/static/src/js/core/domain.js index c4011b049b9..5ebc6bd22c9 100644 --- a/addons/web/static/src/js/core/domain.js +++ b/addons/web/static/src/js/core/domain.js @@ -234,78 +234,127 @@ var Domain = collections.Tree.extend({ * @param {string} period * @param {string} type ('date' or 'datetime') * @param {boolean} forTooltip indicates if domain is used to print a tooltip + * @param {string} comparisonPeriod + * @returns {string} a domain in string form */ - constructDomain: function (fieldName, period, type, forTooltip) { + constructDomain: function (fieldName, period, type, forTooltip, comparisonPeriod) { var leftBoundaryParams, rightBoundaryParams; + var offsetPeriodParams; var t = forTooltip || false; function makeInterval () { + switch (comparisonPeriod) { + case 'previous_period': + _.map(offsetPeriodParams, function (value, key) { + if (_.isNumber(value)) { + leftBoundaryParams[key] = value + (leftBoundaryParams[key] || 0); + } else { + leftBoundaryParams[key] = value + ' + ' + (leftBoundaryParams[key] || 0); + } + }); + _.map(offsetPeriodParams, function (value, key) { + if (_.isNumber(value)) { + rightBoundaryParams[key] = value + (rightBoundaryParams[key] || 0); + } else { + rightBoundaryParams[key] = value + ' + ' + (rightBoundaryParams[key] || 0); + } + }); + break; + case 'previous_year': + leftBoundaryParams.years = leftBoundaryParams.years ? leftBoundaryParams.years-- : -1; + rightBoundaryParams.years = rightBoundaryParams.years ? rightBoundaryParams.years-- : -1; + break; + } + + var stringifyParams = function (value, key) { + return key + '=' + value; + }; + var leftBoundaryStringifyParams = _.map(leftBoundaryParams, stringifyParams).join(', '); + var rightBoundaryStringifyParams = _.map(rightBoundaryParams, stringifyParams).join(', '); + if (type === 'date') { return "['&'," + - "('" + fieldName + "', '>=', (context_today() + relativedelta(" + leftBoundaryParams + ")).strftime('%Y-%m-%d'))," + - "('" + fieldName + "', '<', (context_today() + relativedelta(" + rightBoundaryParams + ")).strftime('%Y-%m-%d'))"+ + "('" + fieldName + "', '>=', (context_today() + relativedelta(" + leftBoundaryStringifyParams + ")).strftime('%Y-%m-%d'))," + + "('" + fieldName + "', '<', (context_today() + relativedelta(" + rightBoundaryStringifyParams + ")).strftime('%Y-%m-%d'))"+ "]"; } else { return "['&'," + "('" + fieldName + "', '>=', " + - "(datetime.datetime.combine(context_today() + relativedelta(" + leftBoundaryParams + "), datetime.time(0,0,0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S'))," + + "(datetime.datetime.combine(context_today() + relativedelta(" + leftBoundaryStringifyParams + "), datetime.time(0,0,0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S'))," + "('" + fieldName + "', '<', " + - "(datetime.datetime.combine(context_today() + relativedelta(" + rightBoundaryParams + "), datetime.time(0,0,0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S'))"+ + "(datetime.datetime.combine(context_today() + relativedelta(" + rightBoundaryStringifyParams + "), datetime.time(0,0,0)).to_utc()).strftime('%Y-%m-%d %H:%M:%S'))"+ "]"; } } switch (period) { case 'today': - leftBoundaryParams = ""; - rightBoundaryParams = t ? "" : "days=1"; + leftBoundaryParams = {}; + rightBoundaryParams = t ? {} : {days: 1}; + offsetPeriodParams = {days: -1}; return makeInterval(); case 'this_week': - leftBoundaryParams = "weeks=-1, days=1, weekday=0"; - rightBoundaryParams = t ? "weekday=6" : "days=1, weekday=0"; + leftBoundaryParams = {weeks: -1, days: 1, weekday: 0}; + rightBoundaryParams = t ? {weekday: 6} : {days: 1, weekday: 0}; + offsetPeriodParams = {weeks: -1}; return makeInterval(); case 'this_month': - leftBoundaryParams = "day=1"; - rightBoundaryParams = (t ? "days=-1, " : "") + "day=1, months=1"; + leftBoundaryParams = {day: 1}; + rightBoundaryParams = _.extend(t ? {days: -1} : {}, + {day: 1, months: 1}); + offsetPeriodParams = {months: -1}; return makeInterval(); case 'this_quarter': - leftBoundaryParams = "months= - (context_today().month - 1) % 3, day=1"; - rightBoundaryParams = (t ? "days=-1, " : "") + "months= 3 - (context_today().month -1 ) % 3, day=1"; + leftBoundaryParams = {months: '- (context_today().month - 1) % 3', day: 1}; + rightBoundaryParams = _.extend(t ? {days: -1} : {}, + {months: '3 - (context_today().month - 1) % 3', day: 1}); + offsetPeriodParams = {months: -3}; return makeInterval(); case 'this_year': - leftBoundaryParams = "month=1, day=1"; - rightBoundaryParams = (t ? "days=-1, " : "") + "month=1, day=1, years=1"; + leftBoundaryParams = {month: 1, day: 1}; + rightBoundaryParams = _.extend(t ? {days: -1} : {}, + {month: 1, day: 1, years: 1}); + offsetPeriodParams = {years: -1}; return makeInterval(); case 'yesterday': - leftBoundaryParams = "days=-1"; - rightBoundaryParams = (t ? "days=-1" : ""); + leftBoundaryParams = {days: -1}; + rightBoundaryParams = (t ? {days: -1} : {}); + offsetPeriodParams = {days: -1}; return makeInterval(); case 'last_week': - leftBoundaryParams = "weeks=-2, days=1, weekday=0"; - rightBoundaryParams = t ? "weeks=-1, weekday=6" : "weeks=-1, days=1, weekday=0"; + leftBoundaryParams = {weeks: -2, days: 1, weekday: 0}; + rightBoundaryParams = t ? {weeks: -1, weekday: 6} : {weeks: -1, days: 1, weekday: 0}; + offsetPeriodParams = {weeks: -1}; return makeInterval(); case 'last_month': - leftBoundaryParams = "months=-1, day=1"; - rightBoundaryParams = (t ? "days=-1 , " : "") + "day=1"; + leftBoundaryParams = {months: -1, day: 1}; + rightBoundaryParams = _.extend(t ? {days: -1} : {}, {day: 1}); + offsetPeriodParams = {months: -1}; return makeInterval(); case 'last_quarter': - leftBoundaryParams = "months= - 3 - (context_today().month - 1) % 3, day=1"; - rightBoundaryParams = (t ? "days=-1 , " : "") + "months= - (context_today().month - 1) % 3, day=1"; + leftBoundaryParams = {months: '- 3 - (context_today().month - 1) % 3', day: 1}; + rightBoundaryParams = _.extend(t ? {days: -1} : {}, + {months: '- (context_today().month - 1) % 3', day: 1}); + offsetPeriodParams = {months: -3}; return makeInterval(); case 'last_year': - leftBoundaryParams = "month=1, day=1, years=-1"; - rightBoundaryParams = (t ? "days=-1 , " : "") + "month=1, day=1"; + leftBoundaryParams = {month: 1, day: 1, years: -1}; + rightBoundaryParams = _.extend(t ? {days: -1} : {}, {month: 1, day: 1}); + offsetPeriodParams = {years: -1}; return makeInterval(); case 'last_7_days': - leftBoundaryParams = "days=-7"; - rightBoundaryParams = t ? "days=-1" : ""; + leftBoundaryParams = {days: -7}; + rightBoundaryParams = t ? {days: -1} : {}; + offsetPeriodParams = {days: -7}; return makeInterval(); case 'last_30_days': - leftBoundaryParams = "days=-30"; - rightBoundaryParams = t ? "days=-1" : ""; + leftBoundaryParams = {days: -30}; + rightBoundaryParams = t ? {days: -1} : {}; + offsetPeriodParams = {days: -30}; return makeInterval(); case 'last_365_days': - leftBoundaryParams = "days=-365"; - rightBoundaryParams = t ? "days=-1" : ""; + leftBoundaryParams = {days: -365}; + rightBoundaryParams = t ? {days: -1} : {}; + offsetPeriodParams = {days: -365}; return makeInterval(); } }, |
