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 = $('