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\Localization\Loc; use Bitrix\Main\Loader; class OrdersTab { use Exception; // trait use Accounts; // trait protected const XML_ID_PREFIX = 'OZON'; public function __construct($objects = []) { try { $this->main = $objects['Main'] ?? new Main(); $this->moduleId = $this->main->getModuleId(); $this->wrappers = new Wrappers($objects); $this->suffix = strtoupper($this->moduleId); $this->rfbsStatuses = new RfbsStatuses(); if (!Loader::IncludeModule('sale')) { throw new SystemException("Sale module isn`t installed"); } } catch (SystemException $exception) { $this->exceptionHandler($exception); } } public function loadJs() { \Bitrix\Main\Page\Asset::getInstance()->addJs("/bitrix/js/wbs24.ozonapinew/splitOrder.js"); \Bitrix\Main\Page\Asset::getInstance()->addJs("/bitrix/js/wbs24.ozonapinew/ordersTab.js"); } public function loadCss() { global $APPLICATION; $APPLICATION->SetAdditionalCSS("/bitrix/css/".$this->moduleId."/ordersTab.css?".time()); } public static function onInit() { $ordersTab = new OrdersTab(); // проверка прав доступа if (!$ordersTab->main->checkRights()) return; $ordersTab->loadJs(); $ordersTab->loadCss(); return array( "TABSET" => "Wbs24OzonOrdersTab", "GetTabs" => array("Wbs24\\Ozonapinew\\OrdersTab", "mygetTabs"), "ShowTab" => array("Wbs24\\Ozonapinew\\OrdersTab", "myshowTab"), "Action" => array("Wbs24\\Ozonapinew\\OrdersTab", "myaction"), "Check" => array("Wbs24\\Ozonapinew\\OrdersTab", "mycheck"), ); } public static function myaction($arArgs) { // Действие после сохранения заказа. Возвращаем true / false // Сообщение $GLOBALS["APPLICATION"]->ThrowException("Ошибка!!!", "ERROR"); return true; } public static function mycheck($arArgs) { // Проверки перед сохранением. Возвращаем true / false return true; } public static function mygetTabs($arArgs) { $ordersTab = new OrdersTab(); $traidingPlatformOrder = $ordersTab->checkIsOrderFromTraidingPlatform($arArgs['ID']); $suffix = $ordersTab->suffix; if ($traidingPlatformOrder) { return [ [ "DIV" => "edit1", "TAB" => Loc::getMessage($suffix.'.COLLECT_ORDER_ON_OZON'), "ICON" => "sale", "TITLE" => Loc::getMessage($suffix.'.TITLE'), "SORT" => 1 ] ]; } } public function checkIsOrderFromTraidingPlatform($orderId) { $filter = [ '%=XML_ID' => self::XML_ID_PREFIX.'%', 'ID' => $orderId, ]; $orders = \Bitrix\Sale\Order::getList([ 'select' => ['ID', 'STATUS_ID'], 'filter' => $filter, 'order' => ['ID' => 'ASC'], ]); if ($orderResult = $orders->fetch()) { return $orderResult['ID']; } return false; } public function getLangPhrases() { $suffix = $this->suffix; $splitOrderLang = [ 'title' => Loc::getMessage($suffix.".SPLIT_ORDER_PACKAGE_TITLE"), 'package_button' => Loc::getMessage($suffix.".SPLIT_ORDER_PACKAGE_BUTTON"), 'quantity' => Loc::getMessage($suffix.".SPLIT_ORDER_QUANTITY"), 'pretext' => Loc::getMessage($suffix.".SPLIT_ORDER_PRETEXT"), 'move' => Loc::getMessage($suffix.".SPLIT_ORDER_MOVE"), 'error' => Loc::getMessage($suffix.".SPLIT_ORDER_ERROR"), ]; return $splitOrderLang; } public static function myshowTab($divName, $arArgs, $bVarsFromForm) { if ($divName == "edit1") { $ordersTab = new OrdersTab(); $orderProperties = $ordersTab->getOrderProperties($arArgs["ID"]); $externalId = $orderProperties['external_id']; $accountIndex = $orderProperties['account_index']; $shipmentDate = $orderProperties['shipment_date']; $ordersState = new OrdersState($accountIndex); $orderInfo = $ordersState->getOrdersInformation($externalId); $suffix = $ordersTab->suffix; $saveApiLog = $ordersTab->wrappers->Option->get($ordersTab->moduleId, 'saveApiLog'); $debug = ($saveApiLog == 'Y') ? 'true' : 'false'; $langSplitOrderPhrazes = $ordersTab->getLangPhrases(); $rfbsStatusesObject = $ordersTab->getRfbsStatusesObject(); $rfbsStatusesObject->addScript(); $rfbsLangPhrases = $rfbsStatusesObject->getLangPhrases(); ?> <script> { let OrdersTab = new Wbs24OzonapinewOrdersTab(); OrdersTab.debug = <?=$debug?>; let packageNumber = "<?=Loc::getMessage($suffix.'.PACKAGE_NUMBER')?>"; document.addEventListener("DOMContentLoaded", function () { OrdersTab.triggerGettingDomElements(<?=$arArgs["ID"]?>, <?=$accountIndex?>); let OrderSplit = new Wbs24OzonapinewSplitOrder(<?=$arArgs["ID"]?>, <?=$accountIndex?>, <?=\CUtil::PHPToJSObject($langSplitOrderPhrazes)?>); OrderSplit.runOrderSplit("<?=$externalId?>"); let RfbsStatusesObject = new Wbs24OzonapinewRfbsStatuses(<?=$accountIndex?>, "<?=$externalId?>", <?=\CUtil::PHPToJSObject($rfbsLangPhrases)?>); RfbsStatusesObject.run(); OrderSplit.trackButtonPressCollectOrder("<?=$externalId?>"); OrdersTab.trackButtonPressPackageLabel("<?=$externalId?>"); OrdersTab.trackButtonPressActCreate("<?=$orderInfo['delivery_method_id']?>", "<?=$externalId?>"); OrdersTab.trackButtonPressCancelOrder("<?=$externalId?>"); <?=( $orderInfo['disabled_act'] && $orderInfo['act_create_id'] && !$orderInfo['act'] ? 'OrdersTab.setActLink("'.$orderInfo['act_create_id'].'", "'.$externalId.'");' : '' )?> <?=( $orderInfo['disabled_package_label'] && !$orderInfo['package_label'] ? 'OrdersTab.setPackageLabelLink("'.$externalId.'");' : '' )?> }); } </script> <style> table { font-size: inherit !important; } </style> <tr> <td colspan="2"> <div class="adm-info-message-wrap" style="text-align:left;"> <div class="adm-info-message"> <div><?=Loc::getMessage($suffix.".ORDERS_TAB_TEXT")?></div> </div> </div> </td> </tr> <tr class="heading"> <td colspan="2"> <div><?=Loc::getMessage($suffix.".ORDERS_TAB_NOTE")?></div> </td> </tr> <?if(!$orderInfo['cancelled_order']):?> <tr class="js-order-collect-tr"> <td colspan="2"> <hr> </td> </tr> <tr class="js-order-collect-tr"> <td width="50%" style="padding-top:0;"><input type="submit" <?= $orderInfo['success_ship'] ? 'disabled' : ''?> class="wbs24_start-collect-btn" value="<?= Loc::getMessage($suffix.".START_COLLECT_ORDER")?>"></td> <td width="50%" style="padding-top:0;"></td> </tr> <tr class="js-order-collect-tr"> <td colspan="2" width="100%" style="padding-top:0;"><div id="wbs24-packages"></div></td> </tr> <tr class="js-order-collect-tr"> <td width="50%" style="padding-top:0;"><input type="submit" <?= $orderInfo['success_ship'] ? 'disabled' : ''?> data-property="packagesCount" class="wbs24_add-new-package" value="<?= Loc::getMessage($suffix.".ADD_NEW_PACKAGE")?>"></td> <td width="50%" style="padding-top:0;"><?= Loc::getMessage($suffix.".ADD_NEW_PACKAGE_NOTE")?></td> </tr> <tr class="js-order-collect-tr"> <td class="adm-detail-content-cell-l" width="50%"> <input type="submit" <?=$orderInfo['success_ship'] ? 'disabled' : ''?> class="wbs24_collect-btn" value="<?=Loc::getMessage($suffix.".COLLECT_ORDER")?>"> </td> <td class="adm-detail-content-cell-r" width="50%"> <span style='background:green;padding:5px;border-radius:3px;display:<?=$orderInfo['success_ship'] ? "inline-block" : "none"?>' class='wbs24_collect_td' ><?=Loc::getMessage($suffix.".ORDER_SUCCESSFULLY_COLLECTED")?></span> <span style='background:red;padding:5px;border-radius:3px;display:none;' class='js-wbs24-order-error' data-error="TRANSITION_IS_NOT_POSSIBLE"><?=Loc::getMessage($suffix.".ORDER_ERROR_TRANSITION_IS_NOT_POSSIBLE")?></span> <span style='background:red;padding:5px;border-radius:3px;display:none;' class='js-wbs24-order-error' data-error="HAS_INCORRECT_TPL_INTEGRATION_TYPE"><?=Loc::getMessage($suffix.".ORDER_ERROR_HAS_INCORRECT_TPL_INTEGRATION_TYPE")?></span> <span style='background:red;padding:5px;border-radius:3px;display:none;' class='js-wbs24-order-error' data-error="POSTING_NOT_FOUND"><?=Loc::getMessage($suffix.".ORDER_ERROR_POSTING_NOT_FOUND")?></span> <span style='background:red;padding:5px;border-radius:3px;display:none;' class='js-wbs24-order-error' data-error="POSTING_ALREADY_CANCELLED"><?=Loc::getMessage($suffix.".ORDER_ERROR_POSTING_ALREADY_CANCELLED")?></span> <span style='background:red;padding:5px;border-radius:3px;display:none;' class='js-wbs24-order-error' data-error="POSTING_ALREADY_SHIPPED"><?=Loc::getMessage($suffix.".ORDER_ERROR_POSTING_ALREADY_SHIPPED")?></span> <span style='background:red;padding:5px;border-radius:3px;display:none;' class='js-wbs24-order-error' data-error="HAS_INCORRECT_STATUS"><?=Loc::getMessage($suffix.".ORDER_ERROR_HAS_INCORRECT_STATUS")?></span> <span style='background:red;padding:5px;border-radius:3px;display:none;' class='js-wbs24-order-error' data-error="HAS_INCORRECT_PRODUCT_QUANTITY"><?=Loc::getMessage($suffix.".ORDER_ERROR_HAS_INCORRECT_PRODUCT_QUANTITY")?></span> <span style='background:red;padding:5px;border-radius:3px;display:none;' class='js-wbs24-order-error' data-error="UNKNOWN_PRODUCT_DEFINED"><?=Loc::getMessage($suffix.".ORDER_ERROR_UNKNOWN_PRODUCT_DEFINED")?></span> <span style='background:red;padding:5px;border-radius:3px;display:none;' class='js-wbs24-order-error' data-error="EXEMPLAR_INFO_ALREADY_DEFINED"><?=Loc::getMessage($suffix.".ORDER_ERROR_EXEMPLAR_INFO_ALREADY_DEFINED")?></span> <span style='background:red;padding:5px;border-radius:3px;display:none;' class='js-wbs24-order-error' data-error="MANDATORY_MARK_REDUNDANT"><?=Loc::getMessage($suffix.".ORDER_ERROR_MANDATORY_MARK_REDUNDANT")?></span> <span style='background:red;padding:5px;border-radius:3px;display:none;' class='js-wbs24-order-error' data-error="UNKNOWN"><?=Loc::getMessage($suffix.".ORDER_ERROR_UNKNOWN")?></span> </td> </tr> <tr class="js-order-collect-tr"> <td width="50%" style="padding-top:0;"> </td> <td width="50%" style="padding-top:0;"><small><?=Loc::getMessage($suffix.".COLLECT_ORDER_NOTE")?></small></td> </tr> <tr class="js-order-collect-tr"> <td class="adm-detail-content-cell-l"> <input type="submit" <?=$orderInfo['success_ship'] && !$orderInfo['disabled_act'] ? '' : 'disabled'?> class="wbs24_act-create" value="<?=Loc::getMessage($suffix.".CREATE_ACT")?>"> </td> <td class="adm-detail-content-cell-r"> <span style='background:red;padding:5px;border-radius:3px;display:none;' class='js-wbs24-act-error' ><?=Loc::getMessage($suffix.".ACT_ERROR")?></span> <span style='background:yellow;padding:5px;border-radius:3px;display:<?=$orderInfo['disabled_act'] && !$orderInfo['act'] ? "inline-block" : "none"?>' class='js-wbs24-act-status' ><?=Loc::getMessage($suffix.".ACT_STATUS_IN_PROCESS")?></span> <a href="<?=$orderInfo['act'] ?>" target="_blank" class='wbs24_act_td' style='display:<?=$orderInfo['act'] ? "inline-block" : "none"?>'><?=Loc::getMessage($suffix.".OPEN_ACT_PAGE")?></a> </td> </tr> <tr class="js-order-collect-tr"> <td width="50%" style="padding-top:0;"> </td> <td width="50%" style="padding-top:0;"> <small> <?=Loc::getMessage($suffix.".ORDER_SHIPMENT_DATE")?>: <b><?=$shipmentDate?></b><br> <?=Loc::getMessage($suffix.".CREATE_ACT_NOTE")?> </small> </td> </tr> <tr class="js-order-collect-tr"> <td class="adm-detail-content-cell-l"> <input type="submit" <?=$orderInfo['success_ship'] && !$orderInfo['disabled_package_label'] ? '' : 'disabled'?> class="wbs24_package-label" value="<?=Loc::getMessage($suffix.".PACKAGE_LABEL")?>"> </td> <td class="adm-detail-content-cell-r"> <span style='background:yellow;padding:5px;border-radius:3px;display:<?=$orderInfo['disabled_package_label'] && !$orderInfo['package_label'] && $orderInfo['attempts_package_label'] < 5 ? "inline-block" : "none"?>' class='js-wbs24-package-label-status'><?=Loc::getMessage($suffix.".PACKAGE_LABEL_IN_PROCESS")?></span> <a href="<?=$orderInfo['package_label'] ?>" class='wbs24_package_td' target="_blank" style='display:<?=$orderInfo['package_label'] ? "inline-block" : "none"?>'><?=Loc::getMessage($suffix.".OPEN_LABEL_PAGE")?></a> <span style='background:red;padding:5px;border-radius:3px;display:<?=$orderInfo['disabled_package_label'] && !$orderInfo['package_label'] && $orderInfo['attempts_package_label'] > 5 ? "inline-block" : "none"?>' class='js-wbs24-package-label-status'><?=Loc::getMessage($suffix.".PACKAGE_LABEL_AUTO_ERROR")?></span> </td> </tr> <tr class="js-order-collect-tr"> <td width="50%" style="padding-top:0;"> </td> <td width="50%" style="padding-top:0;"><small><?=Loc::getMessage($suffix.".PACKAGE_LABEL_NOTE")?></small></td> </tr> <?endif;?> <tr> <td colspan="2"> <hr> </td> </tr> <tr> <td class="adm-detail-content-cell-l" width="50%"> <input type="submit" class="js-order-cancel" <?=$orderInfo['cancelled_order'] ? 'disabled' : ''?> value="<?=Loc::getMessage($suffix.".ORDER_CANCEL")?>" data-confirm-message="<?=Loc::getMessage($suffix.".ORDER_CANCEL_CONFIRM")?>" > </td> <td class="adm-detail-content-cell-r" width="50%"> <span style='background:red;padding:5px;border-radius:3px;display:none' class='js-order-cancel-error-label' ><?=Loc::getMessage($suffix.".ORDER_CANCEL_ERROR_LABEL")?></span> <span style='background:red;padding:5px;border-radius:3px;display:<?=$orderInfo['cancelled_order'] ? "inline-block" : "none"?>' class='js-order-cancel-label'><?=Loc::getMessage($suffix.".ORDER_CANCEL_LABEL")?></span> </td> </tr> <tr> <td width="50%" style="padding-top:0;"> </td> <td width="50%" style="padding-top:0;"><small><?=Loc::getMessage($suffix.".ORDER_CANCEL_NOTE")?></small></td> </tr> <tr> <td colspan="2"> <hr> </td> </tr> <tr> <td colspan="2"> <div class="adm-info-message-wrap" style="text-align:left;"> <div class="adm-info-message"> <div><?=Loc::getMessage($suffix.".ORDERS_TAB_BOTTOM_TEXT")?></div> </div> </div> </td> </tr> <? $html = $rfbsStatusesObject->getButtons($orderInfo); echo $html; } } protected function getRfbsStatusesObject() { return $this->rfbsStatuses; } protected function getOrderProperties($orderId) { $order = \Bitrix\Sale\Order::load($orderId); $collection = $order->getPropertyCollection(); $xmlId = $order->getField("XML_ID"); $accountIndex = $this->getAccountIndexByXmlId($xmlId); $this->setAccount($accountIndex); $externalIdProp = $collection->getItemByOrderPropertyId( intval($this->wrappers->Option->get($this->moduleId, 'propertyOfExternalOrderNumber')) ); if ($externalIdProp) { $externalId = $externalIdProp->getValue(); } $shipmentDateProp = $collection->getItemByOrderPropertyId( intval($this->wrappers->Option->get($this->moduleId, 'propertyOfShipmentDate')) ); if ($shipmentDateProp) { $shipmentDate = $shipmentDateProp->getValue(); } return [ 'external_id' => $externalId, 'account_index' => $accountIndex, 'shipment_date' => $shipmentDate, ]; } protected function getAccountIndexByXmlId($xmlId) { preg_match('/'.self::XML_ID_PREFIX.'(\d*)_(.+)/', $xmlId, $matches); $accountIndex = $matches[1] ?: 1; return $accountIndex; } }