summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/core/domain.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static/src/js/core/domain.js')
-rw-r--r--addons/web/static/src/js/core/domain.js111
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();
}
},