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/rospirotorg.ru/bitrix/modules/wbs24.ozonapinew/lib/ |
Upload File : |
<?php namespace Wbs24\Ozonapinew; use Bitrix\Main\{ Event, EventResult }; class EventHandlers { use Accounts; use OrdersHelper; const XML_ID_PREFIX = 'OZON'; protected $main; protected $moduleId; protected $wrappers; protected $OrdersStack; public function __construct($accountIndex = 1, $objects = []) { $this->main = $objects['Main'] ?? new Main(); $this->moduleId = $this->main->getModuleId(); $this->wrappers = new Wrappers($objects); $this->setAccount($accountIndex); $this->OrdersStack = $objects['OrdersStack'] ?? new OrdersStack($accountIndex); $this->MainController = $objects['MainController'] ?? new Controller\Main(); // сборка заказа на OZON $this->autoShipOrder = $this->wrappers->Option->get( $this->moduleId, 'autoShipOrder' ); } public static function onBeforeCreateOrderHandler(Event $event) { $param = $event->getParameters(); $resultOrder =& $param[0]; $accountIndex = $resultOrder['account_index']; $handlers = new EventHandlers($accountIndex); $eventParam = $handlers->deliveryProcessing($resultOrder); $handlers->ordersStackProcessing($resultOrder, $eventParam); return new EventResult(EventResult::SUCCESS, $eventParam); } public function deliveryProcessing(&$resultOrder) { $deliveryServiceId = $this->getDeliveryServiceId($resultOrder); $eventParam = []; if (is_numeric($deliveryServiceId)) { $resultOrder['deliveryServiceId'] = $deliveryServiceId; } if ($deliveryServiceId == 'disallow') { $eventParam['disallow'] = true; } return $eventParam; } protected function getDeliveryServiceId($resultOrder) { $deliveryServiceIdOnMarketplace = $resultOrder['delivery_method']['id']; $deliveryServiceIdOnBitrix = $this->wrappers->Option->get($this->moduleId, 'delivery_'.$deliveryServiceIdOnMarketplace); if ($deliveryServiceIdOnBitrix == 'nothing') { $deliveryServiceIdOnBitrix = false; } return $deliveryServiceIdOnBitrix; } public function ordersStackProcessing($resultOrder, $eventParam) { if ($eventParam['disallow']) { $externalId = $resultOrder['posting_number']; $this->OrdersStack->cleanStack([$externalId]); } } public static function changeOrderStatus(Event $event) { $order = $event->getParameter("ENTITY"); $currentStatus = $event->getParameter("VALUE"); if (!$order) return; self::postProcess($order, $currentStatus); return new \Bitrix\Main\EventResult( \Bitrix\Main\EventResult::SUCCESS ); } public static function cancelOrder(Event $event) { $order = $event->getParameter("ENTITY"); if (!$order) return; if ($order->isCanceled()) { self::postProcess($order, 'cancel_flag'); } } public static function paidOrder(Event $event) { $order = $event->getParameter("ENTITY"); if (!$order) return; if ($order->isPaid()) { self::postProcess($order, 'payment_flag'); } } public static function allowDelivery(Event $event) { $shipment = $event->getParameter("ENTITY"); $orderId = $shipment->getField('ORDER_ID'); $order = \Bitrix\Sale\Order::load($orderId); if (!$order) return; if ($order->isAllowDelivery()) { self::postProcess($order, 'delivery_flag'); } } public static function changeShipment(Event $event) { $shipment = $event->getParameter("ENTITY"); $orderId = $shipment->getField('ORDER_ID'); $order = \Bitrix\Sale\Order::load($orderId); if (!$order) return; if ($order->isShipped()) { self::postProcess($order, 'shipping_flag'); } } public static function postProcess($order, $changedValue, $dontCheckRequest = false) { $orderId = $order->getId(); $xmlId = $order->getField('XML_ID'); preg_match('/'.self::XML_ID_PREFIX.'(\d*)_(.+)/', $xmlId, $matches); $accountIndex = $matches[1] ?: 1; $EventHandlers = new EventHandlers($accountIndex); $isOrderFromModule = $EventHandlers->checkIsOrderFromTraidingPlatform($orderId); $isAdminRequest = $EventHandlers->isAdminRequest(); if ($dontCheckRequest) $isAdminRequest = true; if ( $isOrderFromModule && $isAdminRequest ) { $EventHandlers->checkNeedMakeApiRequest( $changedValue, $orderId, $xmlId ); } } protected function isAdminRequest() { $isAdminRequest = false; $request = \Bitrix\Main\Context::getCurrent()->getRequest(); $requestedPage = $request->getRequestedPage(); if (strpos($requestedPage, 'admin/sale_order') !== false) { $isAdminRequest = true; } return $isAdminRequest; } protected function checkNeedMakeApiRequest( $currentStatusOrFlagValue, $orderId, $xmlId ) { $accountIndex = $this->wrappers->Option->getAccountIndex(); $externalId = $this->getExternalId($orderId); if (!$externalId) return; if ( $currentStatusOrFlagValue == $this->autoShipOrder ) { $this->MainController->process( [ 'action' => 'shipOrder', 'externalId' => $externalId, 'orderId' => $orderId, 'accountIndex' => $accountIndex, ] ); } } public static function loadPage() { $accountIndex = 1; // устаналиваем номер аккаунта - 1, так как нам не важен аккаунт в данной функции $EventHandlers = new EventHandlers($accountIndex); $EventHandlers->MainController->process( [ 'action' => 'checkUpAgents', 'accountIndex' => $accountIndex, ] ); } }