Skip to content

Commit

Permalink
Merge 60f96b8 into 4ed6494
Browse files Browse the repository at this point in the history
  • Loading branch information
axelstudios committed Mar 20, 2020
2 parents 4ed6494 + 60f96b8 commit ab68ede
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 26 deletions.
2 changes: 2 additions & 0 deletions seed/static/seed/js/controllers/inventory_list_controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -459,6 +459,8 @@ angular.module('BE.seed.controller.inventory_list', [])
if (col.data_type === 'datetime') {
options.cellFilter = 'date:\'yyyy-MM-dd h:mm a\'';
options.filter = inventory_service.dateFilter();
} else if (col.data_type === 'date') {
options.filter = inventory_service.dateFilter();
} else {
options.filter = inventory_service.combinedFilter();
options.sortingAlgorithm = naturalSort;
Expand Down
61 changes: 35 additions & 26 deletions seed/static/seed/js/services/inventory_service.js
Original file line number Diff line number Diff line change
Expand Up @@ -654,10 +654,12 @@ angular.module('BE.seed.service.inventory', []).factory('inventory_service', [
};

// https://regexr.com/3j1tq
var combinedRegex = /^(!?)=\s*(-?\d+)$|^(!?)=?\s*"((?:[^"]|\\")*)"$|^(<=?|>=?)\s*(-?\d+)$/;
var combinedRegex = /^(!?)=\s*(-?\d+(?:\\\.\d+)?)$|^(!?)=?\s*"((?:[^"]|\\")*)"$|^(<=?|>=?)\s*(-?\d+(?:\\\.\d+)?)$/;
inventory_service.combinedFilter = function () {
return {
condition: function (searchTerm, cellValue) {
// console.log('searchTerm:', typeof searchTerm, `|${searchTerm}|`);
// console.log('cellValue:', typeof cellValue, `|${cellValue}|`);
if (_.isNil(cellValue)) cellValue = '';
var match = true;
var searchTerms = _.map(_.split(searchTerm, ','), _.trim);
Expand All @@ -669,7 +671,7 @@ angular.module('BE.seed.service.inventory', []).factory('inventory_service', [
if (!_.isUndefined(filterData[2])) {
// Numeric Equality
operator = filterData[1];
value = filterData[2];
value = Number(filterData[2].replace('\\.', '.'));
if (operator === '!') {
// Not equal
match = cellValue != value;
Expand Down Expand Up @@ -698,7 +700,7 @@ angular.module('BE.seed.service.inventory', []).factory('inventory_service', [
return match;
}
operator = filterData[5];
value = Number(filterData[6]);
value = Number(filterData[6].replace('\\.', '.'));
switch (operator) {
case '<':
match = cellValue < value;
Expand Down Expand Up @@ -727,19 +729,24 @@ angular.module('BE.seed.service.inventory', []).factory('inventory_service', [
};
};

var dateRegex = /^(=|!=)?\s*(null|\d{4}(?:-\d{2}(?:-\d{2})?)?)$|^(<=?|>=?)\s*(\d{4}(?:-\d{2}(?:-\d{2})?)?)$/;
// https://regexr.com/50ok6
var dateRegex = /^(!?=?)\s*(""|\d{4}(?:-\d{2}(?:-\d{2})?)?)$|^(<=?|>=?)\s*(\d{4}(?:-\d{2}(?:-\d{2})?)?)$/;
inventory_service.dateFilter = function () {
return {
condition: function (searchTerm, cellValue) {
// console.log('searchTerm:', typeof searchTerm, `|${searchTerm}|`);
// console.log('cellValue:', typeof cellValue, `|${cellValue}|`);
if (_.isNil(cellValue)) cellValue = '';
var match = true;
var cellDate = Date.parse(cellValue);
var d = new Date(cellValue);
var d = moment.utc(cellValue);
var cellDate = d.valueOf();
var cellYMD = {
y: d.getFullYear(),
m: d.getMonth() + 1,
d: d.getDate()
y: d.year(),
m: d.month() + 1,
d: d.date()
};
var searchTerms = _.map(_.split(_.replace(searchTerm, /\\-/g, '-'), ','), _.trim);
// Loop over multiple comma-separated filters
_.forEach(searchTerms, function (search) {
var filterData = search.match(dateRegex);
if (filterData) {
Expand All @@ -748,23 +755,25 @@ angular.module('BE.seed.service.inventory', []).factory('inventory_service', [
// Equality condition
operator = filterData[1];
value = filterData[2];

if (value === '""') {
match = _.startsWith(operator, '!') ? !_.isEmpty(cellValue) : _.isEmpty(cellValue);
return match;
}

v = value.match(/^(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?$/);
ymd = {
y: _.parseInt(v[1]),
m: _.parseInt(v[2]),
d: _.parseInt(v[3])
};
if (_.isUndefined(operator) || _.startsWith(operator, '=')) {
// Equal
match = (value === 'null') ? (_.isNil(cellValue)) : (
cellYMD.y === ymd.y && (_.isNaN(ymd.m) || cellYMD.m === ymd.m) && (_.isNaN(ymd.d) || cellYMD.d === ymd.d)
);
if (_.startsWith(operator, '!')) {
// Not equal
match = cellYMD.y !== ymd.y || (!_.isNaN(ymd.m) && cellYMD.y === ymd.y && cellYMD.m !== ymd.m) || (!_.isNaN(ymd.m) && !_.isNaN(ymd.d) && cellYMD.y === ymd.y && cellYMD.m === ymd.m && cellYMD.d !== ymd.d);
return match;
} else {
// Not equal
match = (value === 'null') ? (!_.isNil(cellValue)) : (
cellYMD.y !== ymd.y || (!_.isNaN(ymd.m) && cellYMD.y === ymd.y && cellYMD.m !== ymd.m) || (!_.isNaN(ymd.m) && !_.isNaN(ymd.d) && cellYMD.y === ymd.y && cellYMD.m === ymd.m && cellYMD.d !== ymd.d)
);
// Equal
match = cellYMD.y === ymd.y && (_.isNaN(ymd.m) || cellYMD.m === ymd.m) && (_.isNaN(ymd.d) || cellYMD.d === ymd.d);
return match;
}
} else {
Expand All @@ -777,7 +786,7 @@ angular.module('BE.seed.service.inventory', []).factory('inventory_service', [
operator = filterData[3];
switch (operator) {
case '<':
value = Date.parse(filterData[4] + 'T00:00:00');
value = Date.parse(filterData[4] + ' 00:00:00 GMT');
match = cellDate < value;
return match;
case '<=':
Expand All @@ -792,18 +801,18 @@ angular.module('BE.seed.service.inventory', []).factory('inventory_service', [

if (filterData[4].length === 10) {
// Add a day, subtract a millisecond
value = Date.parse(filterData[4] + 'T00:00:00') + 86399999;
value = Date.parse(filterData[4] + ' 00:00:00 GMT') + 86399999;
} else if (filterData[4].length === 7) {
// Add a month, subtract a millisecond
if (ymd.m === 12) {
d = (ymd.y + 1) + '-01';
} else {
d = ymd.y + '-' + _.padStart(ymd.m + 1, 2, '0');
}
value = Date.parse(d + 'T00:00:00') - 1;
value = Date.parse(d + ' 00:00:00 GMT') - 1;
} else if (filterData[4].length === 4) {
// Add a year, subtract a millisecond
value = Date.parse((ymd.y + 1) + 'T00:00:00') - 1;
value = Date.parse((ymd.y + 1) + ' 00:00:00 GMT') - 1;
}

match = cellDate <= value;
Expand All @@ -819,24 +828,24 @@ angular.module('BE.seed.service.inventory', []).factory('inventory_service', [

if (filterData[4].length === 10) {
// Add a day, subtract a millisecond
value = Date.parse(filterData[4] + 'T00:00:00') + 86399999;
value = Date.parse(filterData[4] + ' 00:00:00 GMT') + 86399999;
} else if (filterData[4].length === 7) {
// Add a month, subtract a millisecond
if (ymd.m === 12) {
d = (ymd.y + 1) + '-01';
} else {
d = ymd.y + '-' + _.padStart(ymd.m + 1, 2, '0');
}
value = Date.parse(d + 'T00:00:00') - 1;
value = Date.parse(d + ' 00:00:00 GMT') - 1;
} else if (filterData[4].length === 4) {
// Add a year, subtract a millisecond
value = Date.parse((ymd.y + 1) + 'T00:00:00') - 1;
value = Date.parse((ymd.y + 1) + ' 00:00:00 GMT') - 1;
}

match = cellDate > value;
return match;
case '>=':
value = Date.parse(filterData[4] + 'T00:00:00');
value = Date.parse(filterData[4] + ' 00:00:00 GMT');
match = cellDate >= value;
return match;
}
Expand Down

0 comments on commit ab68ede

Please sign in to comment.