Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/cvetdv.ru/bitrix/modules/yandex.market/lib/trading/entity/salecrm/ |
Upload File : |
<?php namespace Yandex\Market\Trading\Entity\SaleCrm; use Yandex\Market; use Yandex\Market\Trading\Entity as TradingEntity; use Bitrix\Main; use Bitrix\Crm; /** * @property Crm\Order\Order $internalOrder */ class Order extends TradingEntity\Sale\Order { public function getAdminEditUrl() { if (Main\Application::getInstance()->getContext()->getRequest()->isAdminSection()) { return parent::getAdminEditUrl(); } return sprintf( '/shop/orders/details/%s/', (int)$this->getId() ); } public function getContacts() { $communication = $this->internalOrder->getContactCompanyCollection(); if ($communication === null) { return []; } $result = []; /** @var Crm\Order\ContactCompanyEntity $contact */ foreach ($communication as $contact) { if (!$contact->isPrimary()) { continue; } $result[$contact::getEntityType()] = $contact->getField('ENTITY_ID'); } return $result; } protected function fillStatus($status, $payload = null) { if (Crm\Order\OrderStatus::getSemanticID($status) === Crm\PhaseSemantics::FAILURE) { return Market\Result\Facade::merge([ $this->cancelOrder($payload), parent::fillStatus($status) ]); } return parent::fillStatus($status); } public function fillContacts(array $contacts) { return Market\Result\Facade::merge([ $this->setOrderContacts($contacts), $this->setDealContacts($contacts), $this->resetOrderRequisiteLink(), ]); } protected function setOrderContacts(array $contacts) { try { $communication = $this->internalOrder->getContactCompanyCollection(); $result = new Main\Result(); if ($communication === null) { return $result; } $communication->clearCollection(); if (isset($contacts[\CCrmOwnerType::Contact])) { $contact = Crm\Order\Contact::create($communication); $contact->setField('ENTITY_ID', $contacts[\CCrmOwnerType::Contact]); $contact->setField('IS_PRIMARY', 'Y'); $communication->addItem($contact); } if (isset($contacts[\CCrmOwnerType::Company])) { $company = Crm\Order\Company::create($communication); $company->setField('ENTITY_ID', $contacts[\CCrmOwnerType::Company]); $company->setField('IS_PRIMARY', 'Y'); $communication->addItem($company); } } catch (Main\SystemException $exception) { $result = new Main\Result(); $result->addError(new Main\Error($exception->getMessage())); } return $result; } protected function resetOrderRequisiteLink() { $result = new Main\Result(); $collection = $this->internalOrder->getContactCompanyCollection(); if ($collection === null) { return $result; } $entity = $collection->getPrimaryCompany() ?: $collection->getPrimaryContact(); if ($entity === null) { return $result; } $requisites = $entity->getRequisiteList(); $requisite = end($requisites); $bankRequisites = $entity->getBankRequisiteList(); $bankRequisite = end($bankRequisites); $fields = [ 'REQUISITE_ID' => 0, 'BANK_DETAIL_ID' => 0, ]; if ($requisite !== false) { $fields['REQUISITE_ID'] = $requisite['ID']; } if ($bankRequisite !== false) { $fields['BANK_DETAIL_ID'] = $bankRequisite['ID']; } $this->internalOrder->setRequisiteLink($fields); return $result; } protected function setDealContacts(array $contacts) { $result = new Main\Result(); $dealId = $this->dealId(); if ($dealId <= 0) { return $result; } $fields = []; if (isset($contacts[\CCrmOwnerType::Company])) { $fields['COMPANY_ID'] = $contacts[\CCrmOwnerType::Company]; } if (isset($contacts[\CCrmOwnerType::Contact])) { $fields['CONTACT_ID'] = $contacts[\CCrmOwnerType::Contact]; } if (empty($fields)) { return $result; } $updater = new \CCrmDeal(false); $updated = $updater->Update($dealId, $fields, [ 'DISABLE_USER_FIELD_CHECK' => true, ]); if (!$updated) { $result->addError(new Main\Error($updater->LAST_ERROR)); } return $result; } protected function dealId() { if (method_exists($this->internalOrder, 'getDealBinding')) { $binding = $this->internalOrder->getDealBinding(); if ($binding === null) { return null; } $result = $binding->getDealId(); } else if (method_exists($this->internalOrder, 'getEntityBinding')) { $binding = $this->internalOrder->getEntityBinding(); if ($binding === null || $binding->getOwnerTypeId() !== \CCrmOwnerType::Deal) { return null; } $result = $binding->getOwnerId(); } else { $result = null; } return $result; } }