4namespace Bitrix\Sale\Rest\Synchronization;
7use Bitrix\Main\Context;
8use Bitrix\Main\Engine\Controller;
9use Bitrix\Main\Engine\Response\Converter;
11use Bitrix\Main\EventResult;
12use Bitrix\Main\Localization\Loc;
13use Bitrix\Sale\EntityMarker;
15use Bitrix\Sale\OrderHistory;
16use Bitrix\Sale\OrderTable;
17use Bitrix\Sale\Registry;
18use Bitrix\Sale\Rest\Externalizer;
19use Bitrix\Sale\Rest\Internalizer;
20use Bitrix\Sale\Result;
37 $this->request = Context::getCurrent()->getRequest();
40 public function incomingReplication($id=
'', $xmlId=
'',
$action=
'', $accessToken=
'')
50 $id = $this->request->getPost(
'data')[
'FIELDS'][
'ID'];
52 $xmlId = $this->request->getPost(
'data')[
'FIELDS'][
'XML_ID'];
54 $action = $this->request->getPost(
'data')[
'FIELDS'][
'ACTION'];
55 if($accessToken ===
'')
56 $accessToken = $this->request->getPost(
'auth')[
'access_token'];
59 LoggerDiag::addMessage(
'SYNCHRONIZER_INCOMING_REPLICATION_INCOMING_REQUEST', var_export([
'id'=>$id,
'xmlId'=>$xmlId,
' action'=>
$action,
'accessToken'=>$accessToken],
true));
62 $r =
$instance->getClient()->checkAccessToken($accessToken);
65 LoggerDiag::addMessage(
'SYNCHRONIZER_INCOMING_REPLICATION_CHECK_ACCESS_TOKEN_SUCCESS', var_export([
'access_token'=>$accessToken],
true));
69 if(
$action == self::MODE_DELETE)
73 LoggerDiag::addMessage(
'SYNCHRONIZER_INCOMING_REPLICATION_FILTER_BY_XML_ID', var_export([
'xmlId'=>$xmlId],
true));
77 $orderClass = $registry->getOrderClassName();
80 $orders = $orderClass::loadByFilter([
'filter'=>[
'XML_ID'=>$xmlId]]);
83 LoggerDiag::addMessage(
'SYNCHRONIZER_INCOMING_REPLICATION_FILTER_BY_XML_ID_SUCCESS', var_export($orders,
true));
85 $controllerOrder = new \Bitrix\Sale\Controller\Order();
86 LoggerDiag::addMessage(
'SYNCHRONIZER_INCOMING_REPLICATION_DELETED_BY_INTERNAL_ID', var_export($orders[0],
true));
89 $controllerOrder->importDeleteAction($orders[0]);
90 if(
count($controllerOrder->getErrors())>0)
92 $r->addErrors($controllerOrder->getErrors());
100 $r->addError(
new Error(
'Order not found',
'ORDER_NOT_FOUND'));
106 LoggerDiag::addMessage(
'SYNCHRONIZER_INCOMING_REPLICATION_REQUEST_EXTERNAL_ENTITY_BY_ID', var_export([
'id'=>$id],
true));
111 'auth'=>$accessToken,
117 LoggerDiag::addMessage(
'SYNCHRONIZER_INCOMING_REPLICATION_REQUEST_EXTERNAL_ENTITY_BY_ID_SUCCESS', var_export([
'sale.order.get'=>$r->getData()[
'DATA'][
'result']],
true));
119 $r = $this->
import($r->getData()[
'DATA'][
'result']);
122 $result->setData([
'DATA'=>$r->getData()[
'DATA']]);
124 $orderId = isset($r->getData()[
'DATA'][
'ORDER'][
'ID'])?$r->getData()[
'DATA'][
'ORDER'][
'ID']:0;
125 $siteId = isset($r->getData()[
'DATA'][
'ORDER'][
'LID'])?$r->getData()[
'DATA'][
'ORDER'][
'LID']:
'';
129 'direction'=>
'incoming',
136 self::addActionOrderHistory(
139 'typeName'=>
'ORDER_SYNCHRONIZATION_IMPORT',
140 'fields'=>[
'EXTERNAL_ORDER_ID'=>$id]
148 'direction'=>
'incoming',
150 'errorMessage'=>$r->getErrorMessages()[0]
161 $r->addError(
new Error(
'Action udefined'));
170 $result->addErrors($r->getErrors());
176 'auth'=>$accessToken,
177 'errors'=>
$result->getErrorMessages()
188 'result'=>
$result->getData()[
'DATA']
202 return new EventResult( EventResult::SUCCESS,
null,
'sale');
205 return new EventResult( EventResult::SUCCESS,
null,
'sale');
233 LoggerDiag::addMessage(
'SYNCHRONIZER_OUTCOMING_REPLICATION_OUTCOMING_REQUEST', var_export([
'id'=>
$order->getId(),
'mode'=>$mode],
true));
236 $synchronizer =
new self();
237 $r = $synchronizer->refreshToken();
242 if($mode == self::MODE_DELETE)
244 $xmlId =
$order->getField(
'XML_ID')<>
'' ?
$order->getField(
'XML_ID'):
'';
246 LoggerDiag::addMessage(
'SYNCHRONIZER_OUTCOMING_REPLICATION_REQUEST_EXTERNAL_ENTITY_BY_XML_ID', var_export([
'xmlId'=>$xmlId],
true));
261 LoggerDiag::addMessage(
'SYNCHRONIZER_OUTCOMING_REPLICATION_REQUEST_EXTERNAL_ENTITY_BY_XML_ID_SUCCESS', var_export([
'sale.order.list'=>$r->getData()[
'DATA']],
true));
263 if(
count($r->getData()[
'DATA'][
'result'][
'orders'])>0)
265 $fields = $r->getData()[
'DATA'][
'result'][
'orders'][0];
270 'sale.order.importdelete',
278 LoggerDiag::addMessage(
'SYNCHRONIZER_OUTCOMING_REPLICATION_REQUEST_DELETED_EXTERNAL_ENTITY_BY_ID_SUCCESS', var_export([
'sale.order.importdelete.result'=>$r->getData()[
'DATA']],
true));
280 if($r->getData()[
'DATA'][
'result']<>1)
282 LoggerDiag::addMessage(
'SYNCHRONIZER_OUTCOMING_REPLICATION_REQUEST_RESULT_DELETED_EXTERNAL_ENTITY_BY_ID_ERROR');
283 $result->addError(
new Error(
'Error delete - '.
$fields[
'id'],
'ERROR_DELETED_EXTERNAL_ORDER'));
286 LoggerDiag::addMessage(
'SYNCHRONIZER_OUTCOMING_REPLICATION_REQUEST_RESULT_DELETED_EXTERNAL_ENTITY_BY_ID_SUCCESS');
295 LoggerDiag::addMessage(
'SYNCHRONIZER_OUTCOMING_REPLICATION_REQUEST_LIST_EXTERNAL_ENTITIES_BY_XML_ID_ERROR');
300 elseif($mode == self::MODE_SAVE)
302 $controllerOrder = new \Bitrix\Sale\Controller\Order();
304 $r = $synchronizer->requesPrepareData(
305 $controllerOrder->getAction(
$order)
309 LoggerDiag::addMessage(
'SYNCHRONIZER_OUTCOMING_REPLICATION_GET_INTERNAL_FIELDS', var_export([
'fields'=>$r->getData()[
'DATA']],
true));
315 'fields'=>$r->getData()[
'DATA']
322 $externalOrderId = $r->getData()[
'DATA'][
'result'][
'order'][
'id'];
323 if(intval($externalOrderId)>0)
327 'direction'=>
'outcoming',
329 'orderId'=>
$order->getId(),
330 'siteId'=>
$order->getSiteId()
335 LoggerDiag::addMessage(
'SYNCHRONIZER_OUTCOMING_REPLICATION_GET_INTERNAL_FIELDS_SUCCESS', var_export([
'sale.order.import.result'=>$r->getData()[
'DATA']],
true));
346 $r->addError(
new Error(
'Mode udefined'));
347 LoggerDiag::addMessage(
'SYNCHRONIZER_OUTCOMING_REPLICATION_UNKNOWN_COMMAND', var_export([
'mode'=>$mode],
true));
351 $result->addErrors($r->getErrors());
355 LoggerDiag::addMessage(
'SYNCHRONIZER_OUTCOMING_REPLICATION_REFRESH_ACCESS_TOKEN_ERROR', var_export($r->getErrorMessages(),
true));
361 self::addActionOrderHistory(
364 'orderId'=>
$order->getId(),
365 'typeName'=>
'ORDER_SYNCHRONIZATION_EXPORT'
370 'CODE'=>self::SYNCHRONIZER_MARKER_ERROR,
371 'ORDER_ID'=>
$order->getId(),
372 'ENTITY_ID'=>
$order->getId()
375 OrderTable::update(
$order->getId(), [
'MARKED'=>
'N']);
378 'orderId'=>
$order->getId(),
380 'result'=>$r->getData()[
'DATA']
385 self::addActionOrderHistory(
388 'orderId'=>
$order->getId(),
389 'typeName'=>
'ORDER_SYNCHRONIZATION_EXPORT_ERROR',
391 'ERROR' =>
$result->getErrorMessages()
398 $result->addWarning(
new Error(Loc::getMessage(
'SYNCH_OUTCOMING_REPLICATION_OUTCOMING_ORDER_ERROR', [
'#ERROR_MESSAGE#'=>
$result->getErrorMessages()[0]]), self::SYNCHRONIZER_MARKER_ERROR));
403 OrderTable::update(
$order->getId(), [
'MARKED'=>
'Y']);
411 public function refreshToken()
416 $r = $client->refreshToken(
$instance->getRefreshToken());
419 $data = $r->getData()[
'DATA'];
448 $fields[
'ORDER'][
'TRADE_BINDINGS'][] = [
449 'XML_ID'=>
$fields[
'ORDER'][
'ID'],
450 'EXTERNAL_ORDER_ID'=>
$fields[
'ORDER'][
'ID'],
451 'TRADING_PLATFORM_XML_ID'=>
$manager->getTradePlatformsXmlId(
$fields[
'ORDER'][
'LID'])
456 $fields = $externalizer->process()->getData()[
'data'];
460 $respons = new \Bitrix\Main\Engine\Response\Json(
$fields);
469 $result->addError(
new Error(
'Reques prepare data empty respons'));
481 $process = $internalizer->process();
483 if($process->isSuccess())
485 $fields = $process->getData()[
'data'][
'fields'];
489 $orderController = new \Bitrix\Sale\Controller\Order();
497 $errors[] =
new Error(
'SYNCH_OUTCOMING_REPLICATION_IMPORT_INTERNAL_ERROR');
501 if(
count($orderController->getErrors())>0)
503 $errors = $orderController->getErrors();
518 $r->setData([
'DATA'=>
$result]);
534 if(
$params[
'type'] ==
'success')
544 if(
$params[
'direction'] ==
'incoming')
546 if(
$params[
'type'] ==
'success')
548 $message = Loc::getMessage(
'SYNCH_OUTCOMING_REPLICATION_EXTERNAL_SYSTEM_MESS_EXPORT_ORDER_SUCCESS', [
549 '#EXTERNAL_SYSTEM#'=>($siteName<>
''?
' ('.$siteName.
')':
''),
555 $message = Loc::getMessage(
'SYNCH_OUTCOMING_REPLICATION_EXTERNAL_SYSTEM_MESS_EXPORT_ORDER_ERROR', [
556 '#EXTERNAL_SYSTEM#'=>($siteName<>
''?
' ('.$siteName.
')':
''),
557 '#ERROR_MESSAGE#'=>(
$params[
'errorMessage']<>
''?
$params[
'errorMessage']:
'')
561 if(
$params[
'direction'] ==
'outcoming')
563 $message = Loc::getMessage(
'SYNCH_OUTCOMING_REPLICATION_EXTERNAL_SYSTEM_MESS_IMPORT_EXTERNAL_ORDER', [
564 '#EXTERNAL_SYSTEM#'=>($siteName<>
''?
' ('.$siteName.
')':
''),
570 'sale.synchronizer.addTimelineAfterOrderModify',
573 'orderId'=>$externalOrderId,
586 private static function addActionOrderHistory(
array $params)
593 $orderHistory = $registry->getOrderHistoryClassName();
595 $orderHistory::addAction(
603 $orderHistory::collectEntityFields(
'ORDER',
$params[
'orderId']);
609 $r = \CSite::GetList();
610 while ($row = $r->fetch())
static saveMarkers(Order $order=null)
static deleteByFilter(array $values)
static getInstance($type)
const REGISTRY_TYPE_ORDER
static addMessage($messageId, $message='')
requesPrepareData(array $fields)
onSaleOrderSaved(Order $order)
static outcomingReplication(Order $order, $mode)
const SYNCHRONIZER_MARKER_ERROR
static addMarkedTimelineExternalSystem($externalOrderId, array $params)
onSaleBeforeOrderDelete(Order $order)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']