Added support for relative date ranges in segments

This commit is contained in:
Andris Reinman 2016-06-01 16:36:24 +03:00
parent 9bd6db2624
commit a229f80e22
11 changed files with 169 additions and 14 deletions

View file

@ -140,7 +140,9 @@ module.exports.get = (id, callback) => {
case 'number':
case 'date':
case 'birthday':
if (rule.value.range) {
if (rule.value.relativeRange) {
rule.formatted = (rule.value.start ? rule.value.start + ' days ' + (rule.value.startDirection ? 'after' : 'before') + ' today' : 'today') + ' … ' + (rule.value.end ? rule.value.end + ' days ' + (rule.value.endDirection ? 'after' : 'before') + ' today' : 'today');
} else if (rule.value.range) {
rule.formatted = (rule.value.start || '') + ' … ' + (rule.value.end || '');
} else {
rule.formatted = rule.value.value || '';
@ -294,7 +296,15 @@ module.exports.createRule = (segmentId, rule, callback) => {
case 'date':
case 'birthday':
case 'number':
if (rule.range) {
if (column.type === 'date' && rule.range === 'relative') {
value = {
relativeRange: true,
start: Number(rule.startRelative) || 0,
startDirection: Number(rule.startDirection) ? 1 : 0,
end: Number(rule.endRelative) || 0,
endDirection: Number(rule.endDirection) ? 1 : 0
};
} else if (rule.range === 'yes') {
value = {
range: true,
start: rule.start,
@ -389,7 +399,9 @@ module.exports.getRule = (id, callback) => {
case 'number':
case 'date':
case 'birthday':
if (rule.value.range) {
if (rule.value.relativeRange) {
rule.formatted = (rule.value.start ? rule.value.start + ' days ' + (rule.value.startDirection ? 'after' : 'before') + ' today' : 'today') + ' … ' + (rule.value.end ? rule.value.end + ' days ' + (rule.value.endDirection ? 'after' : 'before') + ' today' : 'today');
} else if (rule.value.range) {
rule.formatted = (rule.value.start || '') + ' … ' + (rule.value.end || '');
} else {
rule.formatted = rule.value.value || '';
@ -445,7 +457,15 @@ module.exports.updateRule = (id, rule, callback) => {
case 'date':
case 'birthday':
case 'number':
if (rule.range) {
if (column.type === 'date' && rule.range === 'relative') {
value = {
relativeRange: true,
start: Number(rule.startRelative) || 0,
startDirection: Number(rule.startDirection) ? 1 : 0,
end: Number(rule.endRelative) || 0,
endDirection: Number(rule.endDirection) ? 1 : 0
};
} else if (rule.range === 'yes') {
value = {
range: true,
start: rule.start,
@ -527,6 +547,11 @@ module.exports.getQuery = (id, prefix, callback) => {
let query = [];
let values = [];
let getRelativeDate = (days, direction) => {
let date = new Date(Date.now() + (direction ? 1 : -1) * days * 24 * 3600 * 1000);
return date.toISOString().substr(0, 10);
};
let getDate = (value, nextDay) => {
let parts = value.trim().split(/\D/);
let year = Number(parts.shift()) || 0;
@ -579,7 +604,15 @@ module.exports.getQuery = (id, prefix, callback) => {
}
break;
case 'date':
if (rule.value.range) {
if (rule.value.relativeRange) {
// start
query.push(prefix + '`' + rule.columnType.column + '` >= ?');
values.push(getDate(getRelativeDate(rule.value.start, rule.value.startDirection)));
// end
query.push(prefix + '`' + rule.columnType.column + '` < ?');
values.push(getDate(getRelativeDate(rule.value.end, rule.value.endDirection), true));
} else if (rule.value.range) {
if (rule.value.start) {
query.push(prefix + '`' + rule.columnType.column + '` >= ?');
values.push(getDate(rule.value.start));

View file

@ -87,8 +87,10 @@ module.exports.authenticate = (username, password, callback) => {
if (!result) {
return callback(null, false);
}
let user = tools.convertKeys(rows[0]);
return callback(null, {
id: rows[0].id,
id: user.id,
username
});
});