From 3e9556e1ef9564adb8acd903d37b3fad13c5b2d5 Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Wed, 21 Jul 2021 12:11:15 +0300 Subject: [PATCH] ics event changes --- .../FieldProcessing/Email/IcsDataLoader.php | 2 + .../Espo/Resources/i18n/en_US/Email.json | 7 +- .../Resources/metadata/clientDefs/Email.json | 23 +++++ .../Resources/metadata/entityDefs/Email.json | 10 ++- .../detail.tpl | 0 ...create-event-button.js => create-event.js} | 11 ++- .../views/email/record/panels/default-side.js | 50 +---------- client/src/views/email/record/panels/event.js | 87 +++++++++++++++++++ 8 files changed, 138 insertions(+), 52 deletions(-) rename client/res/templates/email/fields/{create-event-button => create-event}/detail.tpl (100%) rename client/src/views/email/fields/{create-event-button.js => create-event.js} (93%) create mode 100644 client/src/views/email/record/panels/event.js diff --git a/application/Espo/Classes/FieldProcessing/Email/IcsDataLoader.php b/application/Espo/Classes/FieldProcessing/Email/IcsDataLoader.php index 0fa2f22a65..91d83e513d 100644 --- a/application/Espo/Classes/FieldProcessing/Email/IcsDataLoader.php +++ b/application/Espo/Classes/FieldProcessing/Email/IcsDataLoader.php @@ -156,6 +156,8 @@ class IcsDataLoader implements Loader $this->loadCreatedEvent($entity, $espoEvent, $eventData); $entity->set('icsEventData', $eventData); + + $entity->set('icsEventDateStart', $espoEvent->getDateStart()); } private function loadCreatedEvent(Entity $entity, EspoEvent $espoEvent, object $eventData): void diff --git a/application/Espo/Resources/i18n/en_US/Email.json b/application/Espo/Resources/i18n/en_US/Email.json index 2f61ea122f..24353fc7e4 100644 --- a/application/Espo/Resources/i18n/en_US/Email.json +++ b/application/Espo/Resources/i18n/en_US/Email.json @@ -55,7 +55,9 @@ "icsContents": "ICS Contents", "icsEventData": "ICS Event Data", "icsEventUid": "ICS Event UID", - "createdEvent": "Created Event" + "createdEvent": "Created Event", + "event": "Event", + "icsEventDateStart": "ICS Event Date Start" }, "links": { "replied": "Replied", @@ -110,7 +112,8 @@ "Filters": "Filters", "Folders": "Folders", "No Subject": "No Subject", - "View Users": "View Users" + "View Users": "View Users", + "Event": "Event" }, "strings": { "sendingFailed": "Email sending failed" diff --git a/application/Espo/Resources/metadata/clientDefs/Email.json b/application/Espo/Resources/metadata/clientDefs/Email.json index 1e4b2a183e..e1692aadc3 100644 --- a/application/Espo/Resources/metadata/clientDefs/Email.json +++ b/application/Espo/Resources/metadata/clientDefs/Email.json @@ -27,6 +27,17 @@ "replied", "replies" ], + "sidePanels": { + "detail": [ + { + "name": "event", + "label": "Event", + "view": "views/email/record/panels/event", + "isForm": true, + "hidden": true + } + ] + }, "menu":{ "list":{ "buttons":[ @@ -119,6 +130,18 @@ ] } } + }, + "panels": { + "event": { + "visible": { + "conditionGroup": [ + { + "type": "isNotEmpty", + "attribute": "icsEventDateStart" + } + ] + } + } } }, "filterList":[ diff --git a/application/Espo/Resources/metadata/entityDefs/Email.json b/application/Espo/Resources/metadata/entityDefs/Email.json index ac7307ec0f..237aeba39d 100644 --- a/application/Espo/Resources/metadata/entityDefs/Email.json +++ b/application/Espo/Resources/metadata/entityDefs/Email.json @@ -347,10 +347,16 @@ "maxLength": 255, "index": true }, - "createEventButton": { + "icsEventDateStart": { + "type": "datetime", + "readOnly": true, + "notStorable": true + }, + "createEvent": { "type": "base", "disabled": true, - "notStorable": true + "notStorable": true, + "view": "views/email/fields/create-event" }, "createdEvent": { "type": "linkParent", diff --git a/client/res/templates/email/fields/create-event-button/detail.tpl b/client/res/templates/email/fields/create-event/detail.tpl similarity index 100% rename from client/res/templates/email/fields/create-event-button/detail.tpl rename to client/res/templates/email/fields/create-event/detail.tpl diff --git a/client/src/views/email/fields/create-event-button.js b/client/src/views/email/fields/create-event.js similarity index 93% rename from client/src/views/email/fields/create-event-button.js rename to client/src/views/email/fields/create-event.js index f51900d9f5..5d674d02a7 100644 --- a/client/src/views/email/fields/create-event-button.js +++ b/client/src/views/email/fields/create-event.js @@ -26,14 +26,21 @@ * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ -define('views/email/fields/create-event-button', ['views/fields/base', 'lib!espo'], function (Dep, Espo) { +define('views/email/fields/create-event', ['views/fields/base', 'lib!espo'], function (Dep, Espo) { return Dep.extend({ - detailTemplate: 'email/fields/create-event-button/detail', + detailTemplate: 'email/fields/create-event/detail', eventEntityType: 'Meeting', + getAttributeList: function () { + return [ + 'icsEventData', + 'createdEventId', + ]; + }, + events: { 'click [data-action="createEvent"]': function () { this.createEvent(); diff --git a/client/src/views/email/record/panels/default-side.js b/client/src/views/email/record/panels/default-side.js index c80573adac..dafa6b8fa9 100644 --- a/client/src/views/email/record/panels/default-side.js +++ b/client/src/views/email/record/panels/default-side.js @@ -39,62 +39,20 @@ define('views/email/record/panels/default-side', 'views/record/panels/default-si noLabel: true, }); - this.fieldList.push({ - name: 'createEventButton', - view: 'views/email/fields/create-event-button', - noLabel: true, - readOnly: true, - }); - - this.fieldList.push({ - name: 'createdEvent', - readOnly: true, - }); - this.controlHasAttachmentField(); - this.controlCreateEventButtonField(); this.listenTo(this.model, 'change:hasAttachment', this.controlHasAttachmentField, this); - this.listenTo(this.model, 'change:icsEventData', this.controlCreateEventButtonField, this); - this.listenTo(this.model, 'change:createdEventId', this.controlCreateEventButtonField, this); }, controlHasAttachmentField: function () { if (this.model.get('hasAttachment')) { this.recordViewObject.showField('hasAttachment'); + + return; } - else { - this.recordViewObject.hideField('hasAttachment'); - } + + this.recordViewObject.hideField('hasAttachment'); }, - controlCreateEventButtonField: function () { - if (!this.model.get('icsEventData')) { - this.recordViewObject.hideField('createEventButton'); - this.recordViewObject.showField('createdEvent'); - - return; - } - - let eventData = this.model.get('icsEventData'); - - if (eventData.createdEvent) { - this.recordViewObject.hideField('createEventButton'); - this.recordViewObject.showField('createdEvent'); - - return; - } - - if (!this.model.get('createdEventId')) { - this.recordViewObject.hideField('createdEvent'); - this.recordViewObject.showField('createEventButton'); - - return; - } - - this.recordViewObject.hideField('createEventButton'); - this.recordViewObject.showField('createdEvent'); - }, }); - }); diff --git a/client/src/views/email/record/panels/event.js b/client/src/views/email/record/panels/event.js new file mode 100644 index 0000000000..9fe349a355 --- /dev/null +++ b/client/src/views/email/record/panels/event.js @@ -0,0 +1,87 @@ +/************************************************************************ + * This file is part of EspoCRM. + * + * EspoCRM - Open Source CRM application. + * Copyright (C) 2014-2021 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko + * Website: https://www.espocrm.com + * + * EspoCRM is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * EspoCRM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with EspoCRM. If not, see http://www.gnu.org/licenses/. + * + * The interactive user interfaces in modified source and object code versions + * of this program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU General Public License version 3. + * + * In accordance with Section 7(b) of the GNU General Public License version 3, + * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. + ************************************************************************/ + +define('views/email/record/panels/event', 'views/record/panels/side', function (Dep) { + + return class extends Dep { + + setupFields() { + super.setupFields(); + + this.fieldList.push({ + name: 'icsEventDateStart', + readOnly: true, + labelText: this.translate('dateStart', 'fields', 'Meeting'), + }); + + this.fieldList.push({ + name: 'createdEvent', + readOnly: true, + }); + + this.fieldList.push({ + name: 'createEvent', + readOnly: true, + noLabel: true, + }); + + this.controlEventField(); + + this.listenTo(this.model, 'change:icsEventData', this.controlEventField, this); + this.listenTo(this.model, 'change:createdEventId', this.controlEventField, this); + } + + controlEventField() { + if (!this.model.get('icsEventData')) { + this.recordViewObject.hideField('createEvent'); + this.recordViewObject.showField('createdEvent'); + + return; + } + + let eventData = this.model.get('icsEventData'); + + if (eventData.createdEvent) { + this.recordViewObject.hideField('createEvent'); + this.recordViewObject.showField('createdEvent'); + + return; + } + + if (!this.model.get('createdEventId')) { + this.recordViewObject.hideField('createdEvent'); + this.recordViewObject.showField('createEvent'); + + return; + } + + this.recordViewObject.hideField('createEvent'); + this.recordViewObject.showField('createdEvent'); + } + }; +});