diff --git a/application/Espo/Modules/Crm/Resources/metadata/clientDefs/Contact.json b/application/Espo/Modules/Crm/Resources/metadata/clientDefs/Contact.json index 56d185e3a0..5cd1641368 100644 --- a/application/Espo/Modules/Crm/Resources/metadata/clientDefs/Contact.json +++ b/application/Espo/Modules/Crm/Resources/metadata/clientDefs/Contact.json @@ -60,7 +60,9 @@ "layout": "listForContact", "createAttributeMap": { "accountId": "accountId", - "accountName": "accountName" + "accountName": "accountName", + "id": "contactId", + "name": "contactName" }, "selectHandler": "handlers/select-related/same-account" }, diff --git a/application/Espo/ORM/BaseEntity.php b/application/Espo/ORM/BaseEntity.php index 01d9c803cf..95993bdccd 100644 --- a/application/Espo/ORM/BaseEntity.php +++ b/application/Espo/ORM/BaseEntity.php @@ -86,7 +86,7 @@ class BaseEntity implements Entity $this->entityType = $entityType; $this->entityManager = $entityManager; - $this->attributes = $defs['attributes'] /*?? $defs['fields']*/ ?? $this->attributes; + $this->attributes = $defs['attributes'] ?? $this->attributes; $this->relations = $defs['relations'] ?? $this->relations; if ($valueAccessorFactory) { @@ -247,7 +247,7 @@ class BaseEntity implements Entity ); } - // @todo Remove support in v9.0. + // @todo Remove support in v10.0. if ($this->hasRelation($attribute) && $this->id && $this->entityManager) { trigger_error( "Accessing related records with Entity::get is deprecated. " . @@ -337,7 +337,7 @@ class BaseEntity implements Entity $value = $this->fetchedValuesContainer[$attribute] ?? null; if ($value === null) { - return $value; + return null; } $type = $this->getAttributeType($attribute); diff --git a/application/Espo/Tools/EmailTemplate/InsertField/Service.php b/application/Espo/Tools/EmailTemplate/InsertField/Service.php index 6cc514c4ca..35ea108865 100644 --- a/application/Espo/Tools/EmailTemplate/InsertField/Service.php +++ b/application/Espo/Tools/EmailTemplate/InsertField/Service.php @@ -116,6 +116,7 @@ class Service $recordService = $this->recordServiceContainer->get($entityType); + $recordService->loadAdditionalFields($e); $recordService->prepareEntityForOutput($e); $ignoreTypeList = [ diff --git a/client/src/views/fields/array.js b/client/src/views/fields/array.js index a8e813d93d..ff19338bbc 100644 --- a/client/src/views/fields/array.js +++ b/client/src/views/fields/array.js @@ -120,7 +120,7 @@ class ArrayFieldView extends BaseFieldView { const itemHtmlList = []; (this.selected || []).forEach(value => { - itemHtmlList.push(this.getItemHtml(value)); + itemHtmlList.push(this.getItemHtml(value || '')); }); // noinspection JSValidateTypes diff --git a/client/src/views/fields/link-multiple-with-columns-with-primary.js b/client/src/views/fields/link-multiple-with-columns-with-primary.js index ee3a8f4a2c..f262ef53d3 100644 --- a/client/src/views/fields/link-multiple-with-columns-with-primary.js +++ b/client/src/views/fields/link-multiple-with-columns-with-primary.js @@ -41,7 +41,7 @@ class LinkMultipleWithColumnsWithPrimaryFieldView extends LinkMultipleWithColumn primaryLink getAttributeList() { - let list = super.getAttributeList(); + const list = super.getAttributeList(); list.push(this.primaryIdAttribute); list.push(this.primaryNameAttribute); @@ -58,10 +58,10 @@ class LinkMultipleWithColumnsWithPrimaryFieldView extends LinkMultipleWithColumn super.setup(); this.events['click [data-action="switchPrimary"]'] = e => { - let $target = $(e.currentTarget); - let id = $target.data('id'); + const $target = $(e.currentTarget); + const id = $target.data('id'); - LinkMultipleWithPrimaryFieldView.prototype.switchPrimary.call(this, id); + this.switchPrimary(id); }; this.primaryId = this.model.get(this.primaryIdAttribute); @@ -78,8 +78,23 @@ class LinkMultipleWithColumnsWithPrimaryFieldView extends LinkMultipleWithColumn this.primaryName = id ? this.nameHash[id] : null; + } - this.trigger('change'); + switchPrimary(id) { + const $switch = this.$el.find(`[data-id="${id}"][data-action="switchPrimary"]`); + + if (!$switch.hasClass('active')) { + this.$el.find('button[data-action="switchPrimary"]') + .removeClass('active') + .children() + .addClass('text-muted'); + + $switch.addClass('active').children().removeClass('text-muted'); + + this.setPrimaryId(id); + + this.trigger('change'); + } } renderLinks() { @@ -96,7 +111,7 @@ class LinkMultipleWithColumnsWithPrimaryFieldView extends LinkMultipleWithColumn getValueForDisplay() { if (this.isDetailMode() || this.isListMode()) { - let itemList = []; + const itemList = []; if (this.primaryId) { itemList.push( @@ -147,15 +162,15 @@ class LinkMultipleWithColumnsWithPrimaryFieldView extends LinkMultipleWithColumn return LinkMultipleWithPrimaryFieldView.prototype.addLinkHtml.call(this, id, name); } - let $el = super.addLinkHtml(id, name); + const $el = super.addLinkHtml(id, name); - let isPrimary = (id === this.primaryId); + const isPrimary = (id === this.primaryId); - let $star = $('') + const $star = $('') .addClass('fas fa-star fa-sm') - .addClass(!isPrimary ? 'text-muted' : '') + .addClass(!isPrimary ? 'text-muted' : ''); - let $button = $('