- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/entitymarker.php
- Класс: BitrixSaleEntityMarker
- Вызов: EntityMarker::tryFixErrors
static function tryFixErrors()
{
static $orderList = array();
$orderSaveList = array();
$lastOrderId = null;
$registry = SaleRegistry::getInstance(SaleRegistry::REGISTRY_TYPE_ORDER);
/** @var SaleOrder $orderClass */
$orderClass = $registry->getOrderClassName();
$result = new Result();
$res = static::getList(array(
'filter' => array(
'=TYPE' => static::ENTITY_MARKED_TYPE_AUTO,
'!=SUCCESS' => static::ENTITY_SUCCESS_CODE_DONE
),
'select' => array('ID', 'ENTITY_TYPE', 'ENTITY_ID', 'CODE', 'ORDER_ID'),
'order' => array('ORDER_ID' => 'ASC', 'ID' => 'DESC')
));
while($data = $res->fetch())
{
if (array_key_exists($data['ORDER_ID'], $orderList))
{
$order = $orderList[$data['ORDER_ID']];
}
else
{
$order = $orderClass::load($data['ORDER_ID']);
$orderList[$data['ORDER_ID']] = $order;
}
if (!$entity = static::getEntity($order, $data['ENTITY_TYPE'], $data['ENTITY_ID']))
{
continue;
}
if ($lastOrderId !== null && $lastOrderId !== $order->getId())
{
if (isset($orderSaveList[$lastOrderId]))
{
$r = $orderSaveList[$lastOrderId]->save();
unset($orderSaveList[$lastOrderId]);
}
}
if (!($entity instanceof IEntityMarker))
{
continue;
}
$r = $entity->tryFixError($data['CODE']);
if ($r->isSuccess())
{
$data['SUCCESS'] = static::ENTITY_SUCCESS_CODE_DONE;
if (!array_key_exists($data['ORDER_ID'], $orderSaveList))
{
$orderSaveList[$order->getId()] = $order;
}
}
else
{
$data['SUCCESS'] = static::ENTITY_SUCCESS_CODE_FAIL;
}
static::updateMarker($data['ID'], $data, $order, $entity);
$lastOrderId = $order->getId();
}
if (!empty($orderSaveList))
{
foreach ($orderSaveList as $order)
{
$order->save();
}
}
foreach ($orderList as $order)
{
static::saveMarkers($order);
}
return $result;
}