%PDF- %PDF-
Server IP : 37.220.80.31 / Your IP : 3.129.249.117 Web Server : Apache/2.4.52 (Ubuntu) System : Linux 3051455-guretool.twc1.net 5.15.0-107-generic #117-Ubuntu SMP Fri Apr 26 12:26:49 UTC 2024 x86_64 User : www-root ( 1010) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/sale/lib/exchange/integration/controller/ |
Upload File : |
<?php namespace Bitrix\Sale\Exchange\Integration\Controller; use Bitrix\Main\Engine\Controller; use Bitrix\Main\Error; use Bitrix\Main\Localization\Loc; use Bitrix\Sale\OrderTable; use Bitrix\Sale\Result; Loc::loadMessages(__FILE__); class Stepper extends Controller { const BATCH_LENGTH = 50; public function activityBatchAction(array $list, $total=0, $start=0) { $batch = array_slice($list, 0, static::BATCH_LENGTH, true); $slice = array_slice($list, static::BATCH_LENGTH, null, true); $start += count($batch); $b = $this->getUnprocessedItems($batch); $batch = $b->getData(); foreach (array_keys($batch) as $orderId) { OrderTable::update($orderId, ['IS_SYNC_B24' => 'Y']); } $result['progress'] = round((100*$start)/$total); $result['process'] = [ 'items' => $batch, 'list' => $slice, 'total' => $total, 'start' => $start ]; if($start == $total) { $result['finish'] = true; } if(count($b->getErrorMessages())>0) { $result['error'] = implode("<br>", $b->getErrorMessages()); } return $result; } public function progressBarAction($value) { require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_before.php"); ob_start(); $message = new \CAdminMessage(''); $message->ShowMessage(array( "TYPE" => "PROGRESS", "DETAILS" => '#PROGRESS_BAR#'. '<div class="adm-loc-ri-statusbar">'.Loc::getMessage('SALE_ORDER_REQUEST_STATUS').': <span class="bx-ui-loc-ri-loader"></span> <span class="bx-ui-loc-ri-status-text">'.Loc::getMessage('SALE_ORDER_REQUEST_STATUS_PROCESS').'</span></div>', "HTML" => true, "PROGRESS_TOTAL" => 100, "PROGRESS_VALUE" => $value, "PROGRESS_TEMPLATE" => '<span class="bx-ui-loc-ri-percents">#PROGRESS_VALUE#</span>%' )); $res = ob_get_clean(); return $res; } public function messageOKAction() { return $this->messageByTypeAction(Loc::getMessage('SALE_ORDER_REQUEST_ORDER_IDS_OK'),'OK'); } public function messageByTypeAction($message, $type) { require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_before.php"); if($type == 'ERROR') { $adminMessage = new \CAdminMessage( array( "DETAILS" => $message, "TYPE" => "ERROR", "HTML" => true ) ); } else { $adminMessage = new \CAdminMessage( array( "DETAILS" => $message, "TYPE" => "OK", "HTML" => true ) ); } return $adminMessage->Show(); } static protected function getInActiveOrders($orderIds) { $registry = \Bitrix\Sale\Registry::getInstance(\Bitrix\Sale\Registry::REGISTRY_TYPE_ORDER); /** @var \Bitrix\Sale\Order $orderClass */ $orderClass = $registry->getOrderClassName(); $r=[]; if(count($orderIds)>0) { $list = $orderClass::getList([ 'select'=>['ID'], 'filter'=>['ID'=>$orderIds, 'IS_SYNC_B24'=>'Y'] ])->fetchAll(); if(count($list)>0) { foreach ($list as $l) { $r[] = $l['ID']; } } } return $r; } protected function getUnprocessedItems($items) { $result = new Result(); $list = []; $orderIds = array_keys($items); $inActiveOrders = static::getInActiveOrders($orderIds); foreach ($items as $index => $item) { $r = $this->checkInActiveOrder($index, $inActiveOrders); if($r->isSuccess()) { $list[$index] = $item; } else { $result->addError(new Error(Loc::getMessage('SALE_ORDER_APP_REST_SENDER_ORDER_ERROR').$index.' '.implode(', ', $r->getErrorMessages()))); } } $result->setData($list); return $result; } protected function checkInActiveOrder($id, $list) { $r = new \Bitrix\Sale\Result(); if(count($list)>0) { if(in_array($id, $list)) { $r->addError(new Error(Loc::getMessage('SALE_ORDER_APP_REST_SENDER_Y'))); } } return $r; } }