diff --git a/client/modules/crm/src/views/meeting/fields/date-end.js b/client/modules/crm/src/views/meeting/fields/date-end.js
index 6a9e1dd327..dae266b8ca 100644
--- a/client/modules/crm/src/views/meeting/fields/date-end.js
+++ b/client/modules/crm/src/views/meeting/fields/date-end.js
@@ -36,6 +36,8 @@ define('crm:views/meeting/fields/date-end', 'views/fields/datetime-optional', fu
noneOptionIsHidden: true,
+ isEnd: true,
+
setup: function () {
Dep.prototype.setup.call(this);
diff --git a/client/modules/crm/src/views/task/fields/date-end.js b/client/modules/crm/src/views/task/fields/date-end.js
index 0ed5213fab..e55440fb28 100644
--- a/client/modules/crm/src/views/task/fields/date-end.js
+++ b/client/modules/crm/src/views/task/fields/date-end.js
@@ -34,6 +34,8 @@ Espo.define('crm:views/task/fields/date-end', 'views/fields/datetime-optional',
listTemplate: 'crm:task/fields/date-end/detail',
+ isEnd: true,
+
data: function () {
var data = Dep.prototype.data.call(this);
diff --git a/client/src/views/fields/datetime-optional.js b/client/src/views/fields/datetime-optional.js
index 4052fd14ed..0c64242822 100644
--- a/client/src/views/fields/datetime-optional.js
+++ b/client/src/views/fields/datetime-optional.js
@@ -84,7 +84,7 @@ define('views/fields/datetime-optional', 'views/fields/datetime', function (Dep)
noneOption: [{
label: this.noneOption,
value: this.noneOption,
- }]
+ }],
};
if (this.emptyTimeInInlineEditDisabled && this.isInlineEditMode() || this.noneOptionIsHidden) {
@@ -93,7 +93,7 @@ define('views/fields/datetime-optional', 'views/fields/datetime', function (Dep)
$time.timepicker(o);
- $time.parent().find('button.time-picker-btn').on('click', function () {
+ $time.parent().find('button.time-picker-btn').on('click', () => {
$time.timepicker('show');
});
},
@@ -113,14 +113,17 @@ define('views/fields/datetime-optional', 'views/fields/datetime', function (Dep)
data[this.name] = value;
data[this.nameDate] = null;
- } else {
+ }
+ else {
if (date !== '') {
data[this.nameDate] = this.getDateTime().fromDisplayDate(date);
var dateTimeValue = data[this.nameDate] + ' 00:00:00';
- dateTimeValue = moment.utc(dateTimeValue)
- .tz(this.getConfig().get('timeZone') || 'UTC')
+ dateTimeValue = moment
+ .tz(dateTimeValue, this.getConfig().get('timeZone') || 'UTC')
+ .add(this.isEnd ? 1 : 0, 'days')
+ .utc()
.format(this.getDateTime().internalDateTimeFullFormat);
data[this.name] = dateTimeValue;
@@ -130,6 +133,7 @@ define('views/fields/datetime-optional', 'views/fields/datetime', function (Dep)
data[this.name] = null;
}
}
+
return data;
},
@@ -190,7 +194,8 @@ define('views/fields/datetime-optional', 'views/fields/datetime', function (Dep)
validateRequired: function () {
if (this.isRequired()) {
if (this.model.get(this.name) === null && this.model.get(this.nameDate) === null) {
- var msg = this.translate('fieldIsRequired', 'messages').replace('{field}', this.getLabelText());
+ var msg = this.translate('fieldIsRequired', 'messages')
+ .replace('{field}', this.getLabelText());
this.showValidationMessage(msg);
diff --git a/client/src/views/fields/duration.js b/client/src/views/fields/duration.js
index 850d63c73b..c4913ea19a 100644
--- a/client/src/views/fields/duration.js
+++ b/client/src/views/fields/duration.js
@@ -69,20 +69,21 @@ define('views/fields/duration', 'views/fields/enum', function (Dep) {
this.seconds = moment(
this.model.get(this.endField)).unix() - moment(this.model.get(this.startField)
).unix();
- }
- else {
- if (start) {
- var end = this._getDateEnd();
- this.model.set(this.endField, end, {silent: true});
- }
+ return;
+ }
+
+ if (start) {
+ var end = this._getDateEnd();
+
+ this.model.set(this.endField, end, {silent: true});
}
},
init: function () {
Dep.prototype.init.call(this);
- this.listenTo(this, 'render', function () {
+ this.listenTo(this, 'render', () => {
this.calculateSeconds();
var durationOptions = '';
@@ -93,19 +94,20 @@ define('views/fields/duration', 'views/fields/enum', function (Dep) {
options.push(this.seconds);
}
- options.sort(function (a, b) {
+ options.sort((a, b) => {
return a - b;
});
- options.forEach(function (d) {
+ options.forEach((d) => {
durationOptions += '';
- }.bind(this));
+ (d === this.seconds ? 'selected' : '') + '>' +
+ this.stringifyDuration(d) + '';
+ });
this.durationOptions = durationOptions;
this.stringValue = this.stringifyDuration(this.seconds);
- }.bind(this));
+ });
},
setup: function () {
@@ -172,19 +174,19 @@ define('views/fields/duration', 'views/fields/enum', function (Dep) {
if (this.mode === 'edit') {
this.$duration = this.$el.find('.main-element');
- this.$duration.on('change', function () {
+ this.$duration.on('change', () => {
this.seconds = parseInt(this.$duration.val());
this.updateDateEnd();
this.$duration.find('option.custom').remove();
- }.bind(this));
+ });
}
this.stopListening(this.model, 'change:' + this.endField);
this.stopListening(this.model, 'change:' + this.endField);
- this.listenTo(this.model, 'change:' + this.endField, function () {
+ this.listenTo(this.model, 'change:' + this.endField, () => {
var start = this.model.get(this.startField);
var end = this.model.get(this.endField);
@@ -195,7 +197,7 @@ define('views/fields/duration', 'views/fields/enum', function (Dep) {
this.seconds = moment(end).unix() - moment(start).unix();
this.updateDuration();
- }.bind(this));
+ });
this.listenTo(this.model, 'change:' + this.startField, this.updateDateEnd);
@@ -211,9 +213,9 @@ define('views/fields/duration', 'views/fields/enum', function (Dep) {
this.updateDateEnd();
}
else {
- this.endFieldView.once('after:render', function () {
+ this.endFieldView.once('after:render', () => {
this.updateDateEnd();
- }.bind(this));
+ });
}
}
}
@@ -235,7 +237,10 @@ define('views/fields/duration', 'views/fields/enum', function (Dep) {
if (seconds) {
endUnix = moment.utc(start).unix() + seconds;
- end = moment.unix(endUnix).utc().format(this.getDateTime().internalDateFormat);
+ end = moment.unix(endUnix)
+ .utc()
+ .add(-1, 'day')
+ .format(this.getDateTime().internalDateFormat);
}
else {
end = start;
@@ -272,20 +277,19 @@ define('views/fields/duration', 'views/fields/enum', function (Dep) {
if (this.model.get('isAllDay')) {
var end = this._getDateEndDate();
- setTimeout(function () {
+ setTimeout(() => {
this.model.set(this.endField + 'Date', end, {updatedByDuration: true});
- }.bind(this), 1);
+ }, 1);
return;
}
var end = this._getDateEnd();
- setTimeout(function () {
+ setTimeout(() => {
this.model.set(this.endField, end, {updatedByDuration: true});
-
this.model.set(this.endField + 'Date', null);
- }.bind(this), 1);
+ }, 1);
},
updateDuration: function () {
@@ -294,42 +298,46 @@ define('views/fields/duration', 'views/fields/enum', function (Dep) {
if (seconds < 0) {
if (this.mode === 'edit') {
this.$duration.val('');
+
+ return;
}
- else {
- this.setup();
- this.render();
- }
+
+ this.setup();
+ this.render();
+
+ return;
}
- else {
- if (this.mode === 'edit') {
- this.$duration.find('option.custom').remove();
- var $o = $('