• Модуль: 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');
	}
}