- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/entitymarker.php
- Класс: BitrixSaleEntityMarker
- Вызов: EntityMarker::refreshMarkers
static function refreshMarkers(Order $order)
{
if ($order->getId() == 0)
{
return;
}
$markList = [];
$filter = [
'filter' => [
'=ORDER_ID' => $order->getId(),
'!=SUCCESS' => static::ENTITY_SUCCESS_CODE_DONE
],
'select' => ['ID', 'ENTITY_TYPE', 'ENTITY_ID', 'CODE', 'SUCCESS'],
'order' => ['ID' => 'DESC']
];
$res = static::getList($filter);
while($markerData = $res->fetch())
{
if (!empty($markList[$markerData['ENTITY_TYPE']])
&& !empty($markList[$markerData['ENTITY_TYPE']][$markerData['ENTITY_ID']])
&& $markerData['CODE'] == $markList[$markerData['ENTITY_TYPE']][$markerData['ENTITY_ID']]
)
{
continue;
}
if ($markerData['SUCCESS'] != static::ENTITY_SUCCESS_CODE_DONE)
{
$markList[$markerData['ENTITY_TYPE']][$markerData['ENTITY_ID']][] = $markerData['CODE'];
}
$poolItemSuccess = static::getPoolItemSuccess(
$order,
$markerData['ID'],
$markerData['ENTITY_TYPE'],
$markerData['ENTITY_ID'],
$markerData['CODE']
);
if ($poolItemSuccess && $poolItemSuccess == static::ENTITY_SUCCESS_CODE_DONE)
{
foreach ($markList[$markerData['ENTITY_TYPE']][$markerData['ENTITY_ID']] as $markerIndex => $markerCode)
{
if ($markerData['CODE'] == $markerCode)
{
unset($markList[$markerData['ENTITY_TYPE']][$markerData['ENTITY_ID']][$markerIndex]);
}
}
if (empty($markList[$markerData['ENTITY_TYPE']][$markerData['ENTITY_ID']]))
{
unset($markList[$markerData['ENTITY_TYPE']][$markerData['ENTITY_ID']]);
}
}
if (empty($markList[$markerData['ENTITY_TYPE']]))
{
unset($markList[$markerData['ENTITY_TYPE']]);
}
}
if (!empty($markList))
{
foreach ($markList as $markEntityType => $markEntityList)
{
foreach ($markEntityList as $markEntityId => $markEntityCodeList)
{
if (empty($markEntityCodeList))
{
if (($entity = static::getEntity($order, $markEntityType, $markEntityId)) && ($entity instanceof IEntityMarker))
{
if ($entity->canMarked())
{
$markedField = $entity->getMarkField();
$entity->setField($markedField, 'N');
}
}
}
}
}
}
if (empty($markList) && !static::hasErrors($order))
{
$shipmentCollection = $order->getShipmentCollection();
if ($shipmentCollection->isMarked())
{
/** @var Shipment $shipment */
foreach ($shipmentCollection as $shipment)
{
if ($shipment->isMarked())
{
$shipment->setField('MARKED', 'N');
}
}
}
$paymentCollection = $order->getPaymentCollection();
if ($paymentCollection->isMarked())
{
/** @var Payment $payment */
foreach ($paymentCollection as $payment)
{
if ($payment->isMarked())
{
$payment->setField('MARKED', 'N');
}
}
}
$order->setField('MARKED', 'N');
}
}