122 $authorId =
$config->get(
'LETTER_CREATED_BY_ID');
124 $crmEntityId =
$message->getRecipientCode();
127 if (!$this->responsibleQueue || $this->responsibleQueue->getId() <>
$message->getId())
129 $responsibleList =
$config->get(
'ASSIGNED_BY');
130 if ($responsibleList)
132 $responsibleList = explode(
',', $responsibleList);
134 if (empty($responsibleList))
136 $responsibleList = [$authorId];
138 $this->responsibleQueue = (
new Queue(
'sender/rc',
$message->getId()))
141 ->setValues($responsibleList);
143 if (
$config->get(
'CHECK_WORK_TIME') ===
'Y')
145 $this->responsibleQueue->enableWorkTimeCheck();
149 $entityFields[
'TITLE'] =
$message->replaceFields(
$config->get(
'TITLE'),
'#', $crmEntityTypeId);
150 $assignedId = $this->getAssignedWithCrmData((
int)$crmEntityTypeId, (
int)$crmEntityId);
151 $isAssignedById = (
$config->get(
'LINK_WITH_RESPONSIBLE') ===
'Y') && $assignedId;
152 $entityFields[
'ASSIGNED_BY_ID'] = $isAssignedById ? $assignedId : $this->responsibleQueue->next();
154 $selector = (
new ActualEntitySelector())
155 ->setEntity($crmEntityTypeId, $crmEntityId)
157 $facility =
new EntityManageFacility($selector);
158 $facility->enableAutoGenRc();
160 if (
$config->get(
'ALWAYS_ADD') ===
'Y' ||
$config->get(
'FROM_PREVIOUS') ===
'Y')
162 $facility->setRegisterMode(EntityManageFacility::REGISTER_MODE_ALWAYS_ADD);
165 $crmRegisterOptions = [
'CURRENT_USER' => $authorId];
170 if (empty($entityFields[
'SOURCE_ID']))
172 $entityFields[
'SOURCE_ID'] =
'RC_GENERATOR';
174 $facility->registerLead($entityFields,
true, $crmRegisterOptions);
178 if (empty($entityFields[
'SOURCE_ID']))
180 $entityFields[
'SOURCE_ID'] =
'RC_GENERATOR';
188 if (
$config->get(
'FROM_PREVIOUS') ===
'Y')
192 if(!$lastDeal || !$lastOrder)
194 $this->responsibleQueue->previous();
198 $entityFields += $lastDeal;
202 $registeredId = $facility->registerDeal($entityFields,
true, $crmRegisterOptions);
204 if($registeredId &&
$config->get(
'FROM_PREVIOUS') ===
'Y')
207 $this->copyOrder($lastDeal[
'ID'], $registeredId);
215 if (!$facility->getRegisteredId())
217 $this->responsibleQueue->previous();
226 $commentId = Timeline\CommentEntry::create([
227 'TYPE_ID' =>
Timeline\TimelineType::COMMENT,
228 'AUTHOR_ID' => $authorId,
233 'ENTITY_TYPE_ID' => $facility->getRegisteredTypeId(),
234 'ENTITY_ID' => $facility->getRegisteredId(),
238 'ASSOCIATED_ENTITY_TYPE_ID' => $facility->getRegisteredTypeId(),
239 'ASSOCIATED_ENTITY_ID' => $facility->getRegisteredId()
242 return $commentId > 0;
260 if ($facility->canAddDeal() && !is_numeric($categoryId))
266 $categoryId = (int) $categoryId;
267 $categories = array_map(
270 return (
int) $category[
'ID'];
272 DealCategory::getAll(
true)
275 if (!in_array($categoryId, $categories))
277 $categoryId = $categories[0];
286 $categoryFilters = [];
287 if ($facility->getSelector()->getCompanyId())
289 $categoryFilters[] = [
290 '=COMPANY_ID' => $facility->getSelector()->getCompanyId()
293 if ($facility->getSelector()->getContactId())
295 $categoryFilters[] = [
296 '=CONTACT_ID' => $facility->getSelector()->getContactId()
299 foreach ($categoryFilters as $categoryFilter)
301 $categoryFilter[
'=STAGE_SEMANTIC_ID'] = [
302 PhaseSemantics::PROCESS,
303 PhaseSemantics::SUCCESS
305 $dealRow = DealTable::getRow([
306 'select' => [
'CATEGORY_ID'],
307 'filter' => $categoryFilter,
309 'order' => [
'DATE_CREATE' =>
'DESC']
316 $categoryId = $dealRow[
'CATEGORY_ID'];
322 protected function getLastDeal(EntityManageFacility $facility, $days)
326 if ($facility->getSelector()->getCompanyId())
329 '=COMPANY_ID' => $facility->getSelector()->getCompanyId()
332 if ($facility->getSelector()->getContactId())
335 '=CONTACT_ID' => $facility->getSelector()->getContactId()
338 foreach ($dealFilters as $dealFilter)
340 $dealFilter[
'=STAGE_SEMANTIC_ID'] = [
341 PhaseSemantics::SUCCESS
345 $dateCreate = (new \DateTime())->modify(
"-$days days");
347 $beginningOfTheDay = DateTime::createFromPhp($dateCreate->setTime(0,0,0));
348 $endOfTheDay = DateTime::createFromPhp($dateCreate->setTime(23,59,59));
350 $dealFilter[
'<DATE_CREATE'] = $endOfTheDay;
351 $dealFilter[
'>DATE_CREATE'] = $beginningOfTheDay;
353 $dealFilter[
'=HAS_PRODUCTS'] = 1;
355 $dealRow = DealTable::getRow([
356 'select' => [
'ID',
'CURRENCY_ID',
'RECEIVED_AMOUNT'],
357 'filter' => $dealFilter,
359 'order' => [
'DATE_CREATE' =>
'DESC']
423 $basketItem = $newBasket->createItem($item->getField(
'MODULE'), $item->getProductId());