From 0fa8b3da0b8da3ac95499cea4a67fee6bce608dc Mon Sep 17 00:00:00 2001 From: yuri Date: Mon, 18 Jun 2018 16:13:36 +0300 Subject: [PATCH] mail merge only with address --- .../Crm/Resources/i18n/en_US/Campaign.json | 3 ++- .../Resources/layouts/Campaign/detail.json | 2 +- .../metadata/clientDefs/Campaign.json | 11 +++++++++ .../metadata/entityDefs/Campaign.json | 4 ++++ .../Espo/Modules/Crm/Services/Campaign.php | 24 ++++++++++++++++++- 5 files changed, 41 insertions(+), 3 deletions(-) diff --git a/application/Espo/Modules/Crm/Resources/i18n/en_US/Campaign.json b/application/Espo/Modules/Crm/Resources/i18n/en_US/Campaign.json index 9847baae9d..abc28c2a92 100644 --- a/application/Espo/Modules/Crm/Resources/i18n/en_US/Campaign.json +++ b/application/Espo/Modules/Crm/Resources/i18n/en_US/Campaign.json @@ -23,7 +23,8 @@ "contactsTemplate": "Contacts Template", "leadsTemplate": "Leads Template", "accountsTemplate": "Accounts Template", - "usersTemplate": "Users Template" + "usersTemplate": "Users Template", + "mailMergeOnlyWithAddress": "Skip records w/o filled address" }, "links": { "targetLists": "Target Lists", diff --git a/application/Espo/Modules/Crm/Resources/layouts/Campaign/detail.json b/application/Espo/Modules/Crm/Resources/layouts/Campaign/detail.json index b5a89704d8..5a13f54d2c 100644 --- a/application/Espo/Modules/Crm/Resources/layouts/Campaign/detail.json +++ b/application/Espo/Modules/Crm/Resources/layouts/Campaign/detail.json @@ -14,7 +14,7 @@ "name": "mailMerge", "rows":[ [{"name":"contactsTemplate"}, {"name":"leadsTemplate"}], - [{"name":"accountsTemplate"}, {"name":"usersTemplate"}] + [{"name":"accountsTemplate"}, {"name":"mailMergeOnlyWithAddress"}] ] } ] diff --git a/application/Espo/Modules/Crm/Resources/metadata/clientDefs/Campaign.json b/application/Espo/Modules/Crm/Resources/metadata/clientDefs/Campaign.json index 54b6b94a52..72a6d7f6cf 100644 --- a/application/Espo/Modules/Crm/Resources/metadata/clientDefs/Campaign.json +++ b/application/Espo/Modules/Crm/Resources/metadata/clientDefs/Campaign.json @@ -153,6 +153,17 @@ } ] } + }, + "mailMergeOnlyWithAddress": { + "visible": { + "conditionGroup": [ + { + "type": "equals", + "attribute": "type", + "value": "Mail" + } + ] + } } }, "panels": { diff --git a/application/Espo/Modules/Crm/Resources/metadata/entityDefs/Campaign.json b/application/Espo/Modules/Crm/Resources/metadata/entityDefs/Campaign.json index 7d2d6e510c..9f0b57e388 100644 --- a/application/Espo/Modules/Crm/Resources/metadata/entityDefs/Campaign.json +++ b/application/Espo/Modules/Crm/Resources/metadata/entityDefs/Campaign.json @@ -162,6 +162,10 @@ "type": "link", "view": "crm:views/campaign/fields/template", "targetEntityType": "User" + }, + "mailMergeOnlyWithAddress": { + "type": "bool", + "default": true } }, "links": { diff --git a/application/Espo/Modules/Crm/Services/Campaign.php b/application/Espo/Modules/Crm/Services/Campaign.php index af2da130fd..72e7ac1752 100644 --- a/application/Espo/Modules/Crm/Services/Campaign.php +++ b/application/Espo/Modules/Crm/Services/Campaign.php @@ -43,6 +43,13 @@ class Campaign extends \Espo\Services\Record $this->addDependency('container'); } + protected $entityTypeAddressFieldListMap = [ + 'Account' => ['billingAddress', 'shippingAddress'], + 'Contact' => ['address'], + 'Lead' => ['address'], + 'User' => [] + ]; + public function loadAdditionalFields(Entity $entity) { parent::loadAdditionalFields($entity); @@ -348,6 +355,8 @@ class Campaign extends \Espo\Services\Record } } + $addressFieldList = $this->entityTypeAddressFieldListMap[$targetEntityType]; + $targetListCollection = $campaign->get('targetLists'); foreach ($targetListCollection as $targetList) { if (!$campaign->get($link . 'TemplateId')) continue; @@ -361,8 +370,21 @@ class Campaign extends \Espo\Services\Record if (!empty($metTargetHash[$hashId])) { continue; } - $targetEntityList[] = $e; $metTargetHash[$hashId] = true; + + if ($campaign->get('mailMergeOnlyWithAddress')) { + if (empty($addressFieldList)) continue; + $hasAddress = false; + foreach ($addressFieldList as $addressField) { + if ($e->get($addressField . 'Street') || $e->get($addressField . 'PostalCode')) { + $hasAddress = true; + break; + } + } + if (!$hasAddress) continue; + } + + $targetEntityList[] = $e; } }