9namespace Bitrix\Sender\Integration\Crm;
11use Bitrix\Crm\Activity\BindingSelector;
12use Bitrix\Crm\Integrity\ActualEntitySelector;
13use Bitrix\Main\Application;
14use Bitrix\Main\DB\SqlQueryException;
15use Bitrix\Main\Loader;
16use Bitrix\Main\Localization\Loc;
17use Bitrix\Main\Web\Json;
18use Bitrix\Sender\Entity;
19use Bitrix\Sender\Recipient;
20use Bitrix\Sender\Runtime\TimeLineJob;
21use Bitrix\Sender\TimeLineQueueTable;
23Loc::loadMessages(__FILE__);
31 private const TIME_LINE_COUNT_LIMIT = 500;
40 if (!$eventData[
'SEND_RESULT'])
45 static $isModuleIncluded =
null;
46 if ($isModuleIncluded ===
null)
48 $isModuleIncluded = Loader::includeModule(
'crm');
51 if (!$isModuleIncluded)
56 if ($letter->getMessage()->isReturnCustomer())
61 $recipient = $eventData[
'RECIPIENT'];
62 $fields = $eventData[
'RECIPIENT'][
'FIELDS'];
72 'RECIPIENT_ID' => $recipient[
'ID'],
73 'POSTING_ID' => $letter->getId(),
74 'FIELDS' => Json::encode(
$fields),
76 'CONTACT_TYPE_ID' => $recipient[
'CONTACT_TYPE_ID'],
77 'CONTACT_CODE' => $recipient[
'CONTACT_CODE'],
88 static $isModuleIncluded =
null;
90 if ($isModuleIncluded ===
null)
92 $isModuleIncluded = Loader::includeModule(
'crm');
95 if (!$isModuleIncluded)
100 if ($letter->getMessage()->isReturnCustomer())
106 foreach($eventDataArray as $eventData)
108 $recipient = $eventData[
'RECIPIENT'];
109 $fields = $eventData[
'RECIPIENT'][
'FIELDS'];
112 $contactCode = !empty($recipient[
'CONTACT_CODE']) ? $recipient[
'CONTACT_CODE'] :
$entityId;
114 if (empty(
$entityId) || empty($contactCode))
120 'RECIPIENT_ID' => $recipient[
'ID'],
121 'POSTING_ID' => $letter->getId(),
122 'FIELDS' => Json::encode(
$fields),
124 'CONTACT_TYPE_ID' => $recipient[
'CONTACT_TYPE_ID'],
125 'CONTACT_CODE' => $contactCode,
143 static $isModuleIncluded =
null;
144 if ($isModuleIncluded ===
null)
146 $isModuleIncluded = Loader::includeModule(
'crm');
149 if (!$isModuleIncluded)
165 '=POSTING_ID' => $letterId
167 'limit' => self::TIME_LINE_COUNT_LIMIT
170 if(empty($queuedRows))
175 foreach ($queuedRows as $row)
177 $idsToDelete[] = $row[
'ID'];
183 $fields = Json::decode($row[
'FIELDS']);
184 if (isset(
$fields[
'CRM_ENTITY_TYPE_ID']) &&
$fields[
'CRM_ENTITY_TYPE_ID'])
186 $entityTypeId =
$fields[
'CRM_ENTITY_TYPE_ID'];
196 $row[
'CONTACT_TYPE_ID'],
211 if (!$selector->search()->hasEntities())
217 'ID' => $row[
'RECIPIENT_ID'],
218 'CONTACT_TYPE_ID' => $row[
'CONTACT_TYPE_ID'],
219 'CONTACT_CODE' => $row[
'CONTACT_CODE'],
222 $batchData[] = static::buildTimeLineEvent($selector, $letter, $recipient);
225 if (!empty($batchData))
237 return TimeLineJob::getAgentName($letterId);
242 $parameters = static::buildTimeLineEvent($selector, $letter, $recipient);
244 if(!empty($parameters))
253 $createdBy = $letter->get(
'CREATED_BY');
261 $activityBindings = BindingSelector::findBindings($selector);
262 foreach ($activityBindings as $binding)
264 $binding[
'ENTITY_ID'] = $binding[
'OWNER_ID'];
265 $binding[
'ENTITY_TYPE_ID'] = $binding[
'OWNER_TYPE_ID'];
267 'ENTITY_TYPE_ID' => $binding[
'OWNER_TYPE_ID'],
268 'ENTITY_ID' => $binding[
'OWNER_ID'],
273 'ENTITY_TYPE_ID' => $selector->getPrimaryTypeId(),
274 'ENTITY_ID' => $selector->getPrimaryId(),
275 'TYPE_CATEGORY_ID' => $letter->getMessage()->getCode(),
276 'AUTHOR_ID' => $createdBy,
278 'letterId' => $letter->getId(),
281 'id' => $recipient[
'ID'],
282 'typeId' => $recipient[
'CONTACT_TYPE_ID'],
283 'code' => $recipient[
'CONTACT_ID'],
286 'BINDINGS' => $bindings
290 protected static function getEntitySelector()
293 static $selector =
null;
296 $selector =
new ActualEntitySelector();
308 return self::getEntitySelector()->setEntity($entityTypeId,
$entityId);
313 $selector = self::getEntitySelector();
315 switch ($recipientTypeId)
318 $selector->appendEmailCriterion($recipientCode);
322 $selector->appendPhoneCriterion($recipientCode);
341 $connection = Application::getInstance()->getConnection();
342 $lockName = self::getTimelineQueueLock((
string)$letterId);
356 $connection = Application::getInstance()->getConnection();
357 $lockName = self::getTimelineQueueLock((
string)$letterId);
369 private static function getTimelineQueueLock(
string $letterId): string
371 return "time_line_queue_$letterId";
static deleteList(array $filter)
static getList(array $parameters=array())
static addMulti($rows, $ignoreEvents=false)
static createInstanceById($id=null, array $messageCodes=[])
static buildTimeLineEvent(ActualEntitySelector $selector, Entity\Base $letter, $recipient)
static addTimeLineEvent(ActualEntitySelector $selector, Entity\Base $letter, $recipient)
static lockTimelineQueue($letterId)
static onAfterPostingSendRecipient(array $eventData, Entity\Letter $letter)
static handleTimeLineEvents($letterId)
static onAfterPostingSendRecipientMultiple(array $eventDataArray, Entity\Letter $letter)
static unlockTimelineQueue($letterId)
static getEntitySelectorById($entityTypeId, $entityId)
static getEntitySelectorByRecipient($recipientTypeId, $recipientCode)
static createMulti(array $parameters)
static create(array $params)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)