From 023ab86684e453c506bc0eda4ce4f65d7a283c5f Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Mon, 6 Oct 2014 17:51:24 +0300 Subject: [PATCH 1/2] added new date ranges --- application/Espo/Core/SelectManagers/Base.php | 51 +++++++++++++++++++ .../Espo/Resources/i18n/en_US/Global.json | 8 ++- frontend/client/src/search-manager.js | 6 ++- frontend/client/src/views/fields/date.js | 18 +++---- frontend/client/src/views/fields/datetime.js | 2 +- 5 files changed, 72 insertions(+), 13 deletions(-) diff --git a/application/Espo/Core/SelectManagers/Base.php b/application/Espo/Core/SelectManagers/Base.php index b399a28a88..b32890dfd0 100644 --- a/application/Espo/Core/SelectManagers/Base.php +++ b/application/Espo/Core/SelectManagers/Base.php @@ -316,6 +316,57 @@ class Base case 'future': $part[$item['field'] . '>'] = date('Y-m-d'); break; + case 'currentMonth': + $dt = new \DateTime(); + $part['AND'] = array( + $item['field'] . '>=' => $dt->modify('first day of this month')->format('Y-m-d'), + $item['field'] . '<' => $dt->add(new \DateInterval('P1M'))->format('Y-m-d'), + ); + break; + case 'lastMonth': + $dt = new \DateTime(); + $part['AND'] = array( + $item['field'] . '>=' => $dt->modify('first day of last month')->format('Y-m-d'), + $item['field'] . '<' => $dt->add(new \DateInterval('P1M'))->format('Y-m-d'), + ); + break; + case 'currentQuarter': + $dt = new \DateTime(); + $quarter = ceil($dt->format('m') / 3); + $dt->modify('first day of January this year'); + $part['AND'] = array( + $item['field'] . '>=' => $dt->add(new \DateInterval('P'.(($quarter - 1) * 3).'M'))->format('Y-m-d'), + $item['field'] . '<' => $dt->add(new \DateInterval('P3M'))->format('Y-m-d'), + ); + break; + case 'lastQuarter': + $dt = new \DateTime(); + $quarter = ceil($dt->format('m') / 3); + $dt->modify('first day of January this year'); + $quarter--; + if ($quarter == 0) { + $quarter = 4; + $dt->sub('P1Y'); + } + $part['AND'] = array( + $item['field'] . '>=' => $dt->add(new \DateInterval('P'.(($quarter - 1) * 3).'M'))->format('Y-m-d'), + $item['field'] . '<' => $dt->add(new \DateInterval('P3M'))->format('Y-m-d'), + ); + break; + case 'currentYear': + $dt = new \DateTime(); + $part['AND'] = array( + $item['field'] . '>=' => $dt->modify('first day of January this year')->format('Y-m-d'), + $item['field'] . '<' => $dt->add(new \DateInterval('P1Y'))->format('Y-m-d'), + ); + break; + case 'lastYear': + $dt = new \DateTime(); + $part['AND'] = array( + $item['field'] . '>=' => $dt->modify('first day of January last year')->format('Y-m-d'), + $item['field'] . '<' => $dt->add(new \DateInterval('P1Y'))->format('Y-m-d'), + ); + break; case 'between': if (is_array($item['value'])) { $part['AND'] = array( diff --git a/application/Espo/Resources/i18n/en_US/Global.json b/application/Espo/Resources/i18n/en_US/Global.json index f5b339cff1..4111a65ca2 100644 --- a/application/Espo/Resources/i18n/en_US/Global.json +++ b/application/Espo/Resources/i18n/en_US/Global.json @@ -289,7 +289,13 @@ "between": "Between", "today": "Today", "past": "Past", - "future": "Future" + "future": "Future", + "currentMonth": "Current Month", + "lastMonth": "Last Month", + "currentQuarter": "Current Quarter", + "lastQuarter": "Last Quarter", + "currentYear": "Current Year", + "lastYear": "Last Year" }, "intSearchRanges": { "equals": "Equals", diff --git a/frontend/client/src/search-manager.js b/frontend/client/src/search-manager.js index 301377bf6e..ea1c4608d7 100644 --- a/frontend/client/src/search-manager.js +++ b/frontend/client/src/search-manager.js @@ -143,7 +143,7 @@ var where = { field: field }; - if (!value && !~['today', 'past', 'future'].indexOf(type)) { + if (!value && ~['on', 'before', 'after'].indexOf(type)) { return null; } @@ -188,7 +188,9 @@ var to = moment(value[1], this.dateTime.internalDateFormat, this.timeZone).utc().format(this.dateTime.internalDateTimeFormat); where.value = [from, to]; } - break; + break; + default: + where.type = type; } return where; diff --git a/frontend/client/src/views/fields/date.js b/frontend/client/src/views/fields/date.js index 8556ffdd05..003443f36d 100644 --- a/frontend/client/src/views/fields/date.js +++ b/frontend/client/src/views/fields/date.js @@ -31,7 +31,7 @@ Espo.define('Views.Fields.Date', 'Views.Fields.Base', function (Dep) { validations: ['required', 'date', 'after', 'before'], - searchTypeOptions: ['on', 'notOn', 'after', 'before', 'between', 'today', 'past', 'future'], + searchTypeOptions: ['on', 'after', 'before', 'between', 'today', 'past', 'future', 'currentMonth', 'lastMonth', 'currentQuarter', 'lastQuarter', 'currentYear', 'lastYear'], setup: function () { Dep.prototype.setup.call(this); @@ -130,14 +130,14 @@ Espo.define('Views.Fields.Date', 'Views.Fields.Base', function (Dep) { }, handleSearchType: function (type) { - if (~['today', 'past', 'future'].indexOf(type)) { - this.$el.find('div.primary').addClass('hidden'); + if (~['on', 'notOn', 'after', 'before'].indexOf(type)) { + this.$el.find('div.primary').removeClass('hidden'); this.$el.find('div.additional').addClass('hidden'); } else if (type == 'between') { this.$el.find('div.primary').removeClass('hidden'); this.$el.find('div.additional').removeClass('hidden'); } else { - this.$el.find('div.primary').removeClass('hidden'); + this.$el.find('div.primary').addClass('hidden'); this.$el.find('div.additional').addClass('hidden'); } }, @@ -176,11 +176,7 @@ Espo.define('Views.Fields.Date', 'Views.Fields.Base', function (Dep) { dateValue: value, dateValueTo: valueTo }; - } else if (~['today', 'past', 'future'].indexOf(type)) { - data = { - type: type - }; - } else { + } else if (~['on', 'notOn', 'after', 'before'].indexOf(type)) { if (!value) { return false; } @@ -189,6 +185,10 @@ Espo.define('Views.Fields.Date', 'Views.Fields.Base', function (Dep) { value: value, dateValue: value }; + } else { + data = { + type: type + }; } return data; }, diff --git a/frontend/client/src/views/fields/datetime.js b/frontend/client/src/views/fields/datetime.js index 64976fb1f2..f2cf322d35 100644 --- a/frontend/client/src/views/fields/datetime.js +++ b/frontend/client/src/views/fields/datetime.js @@ -29,7 +29,7 @@ Espo.define('Views.Fields.Datetime', 'Views.Fields.Date', function (Dep) { validations: ['required', 'datetime', 'after', 'before'], - searchTypeOptions: ['on', 'after', 'before', 'between', 'today', 'past', 'future'], + searchTypeOptions: ['on', 'after', 'before', 'between', 'today', 'past', 'future', 'currentMonth', 'lastMonth', 'currentQuarter', 'lastQuarter', 'currentYear', 'lastYear'], timeFormatMap: { 'HH:mm': 'H:i', From ad12f78668a215bce4c90cde6983d58d94bf2b26 Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Tue, 7 Oct 2014 10:42:51 +0300 Subject: [PATCH 2/2] change date ranges order --- frontend/client/src/views/fields/date.js | 2 +- frontend/client/src/views/fields/datetime.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/client/src/views/fields/date.js b/frontend/client/src/views/fields/date.js index 003443f36d..fa088059c9 100644 --- a/frontend/client/src/views/fields/date.js +++ b/frontend/client/src/views/fields/date.js @@ -31,7 +31,7 @@ Espo.define('Views.Fields.Date', 'Views.Fields.Base', function (Dep) { validations: ['required', 'date', 'after', 'before'], - searchTypeOptions: ['on', 'after', 'before', 'between', 'today', 'past', 'future', 'currentMonth', 'lastMonth', 'currentQuarter', 'lastQuarter', 'currentYear', 'lastYear'], + searchTypeOptions: ['today', 'past', 'future', 'currentMonth', 'lastMonth', 'currentQuarter', 'lastQuarter', 'currentYear', 'lastYear', 'on', 'after', 'before', 'between'], setup: function () { Dep.prototype.setup.call(this); diff --git a/frontend/client/src/views/fields/datetime.js b/frontend/client/src/views/fields/datetime.js index f2cf322d35..869ef213b0 100644 --- a/frontend/client/src/views/fields/datetime.js +++ b/frontend/client/src/views/fields/datetime.js @@ -29,7 +29,7 @@ Espo.define('Views.Fields.Datetime', 'Views.Fields.Date', function (Dep) { validations: ['required', 'datetime', 'after', 'before'], - searchTypeOptions: ['on', 'after', 'before', 'between', 'today', 'past', 'future', 'currentMonth', 'lastMonth', 'currentQuarter', 'lastQuarter', 'currentYear', 'lastYear'], + searchTypeOptions: ['today', 'past', 'future', 'currentMonth', 'lastMonth', 'currentQuarter', 'lastQuarter', 'currentYear', 'lastYear', 'on', 'after', 'before', 'between'], timeFormatMap: { 'HH:mm': 'H:i',