• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/delivery/tracking/manager.php
  • Класс: BitrixSaleDeliveryTrackingManager
  • Вызов: Manager::updateStatuses
protected function updateStatuses()
{
	$result = new Result();
	$checkPeriod = self::getCheckPeriod();

	if($checkPeriod <= 0)
		return $result;

	$lastChage = BitrixMainTypeDateTime::createFromTimestamp(time()-self::$activeStatusLiveTime);
	$lastUpdate = BitrixMainTypeDateTime::createFromTimestamp(time()-$checkPeriod*60*60);

	$dbRes = ShipmentTable::getList(array(
		'filter' => array(
			'!=TRACKING_NUMBER' => false,
			'!=DELIVERY_ID' => false,
			array(
				'LOGIC' => 'OR',
				array(
					'LOGIC' => 'AND',
					array('!=TRACKING_STATUS' => Statuses::HANDED),
					array('!=TRACKING_STATUS' => Statuses::RETURNED),
				),
				array('=TRACKING_STATUS' => false)
			),
			array(
				'LOGIC' => 'OR',
				array(
					'LOGIC' => 'AND',
					array('=TRACKING_LAST_CHANGE' => false),
					array('>=DATE_INSERT' => $lastChage),
				),
				array('>=TRACKING_LAST_CHANGE' => $lastChage)
			),
			array(
				'LOGIC' => 'OR',
				array('=TRACKING_LAST_CHECK' => false),
				array('<=TRACKING_LAST_CHECK' => $lastUpdate)
			)
		),
		'select' => array(
			'ID', 'ORDER_ID', 'DELIVERY_ID', 'TRACKING_STATUS', 'TRACKING_NUMBER'
		),
		'order' => array(
			'DELIVERY_ID' => 'ASC'
		)
	));

	$deliveryId = 0;
	$shipmentsData = array();

	while($shipment = $dbRes->fetch())
	{
		if(!isset($shipmentsData[$shipment['DELIVERY_ID']]))
			$shipmentsData[$shipment['DELIVERY_ID']] = array();

		if($shipment['TRACKING_NUMBER'] == '')
			continue;

		$shipmentsData[$shipment['DELIVERY_ID']][$shipment['TRACKING_NUMBER']] = array(
			'SHIPMENT_ID' => $shipment['ID'],
			'ORDER_ID' => $shipment['ORDER_ID'],
			'DELIVERY_ID' => $shipment['DELIVERY_ID'],
			'TRACKING_STATUS' => $shipment['TRACKING_STATUS']
		);

		if($shipment['DELIVERY_ID'] != $deliveryId && $deliveryId > 0)
		{
			$res = $this->processStatusesByDelivery($deliveryId, $shipmentsData[$deliveryId]);

			if($res->isSuccess())
			{
				$data = $res->getData();

				if(!empty($data))
					$result->setData(array_merge($result->getData(), $data));
			}
			else
			{
				$result->addErrors($res->getErrors());
			}

			$deliveryId = $shipment['DELIVERY_ID'];
		}

		if($deliveryId <= 0)
			$deliveryId = $shipment['DELIVERY_ID'];
	}

	if($deliveryId > 0)
	{
		$res = $this->processStatusesByDelivery($deliveryId, $shipmentsData[$deliveryId]);

		if($res->isSuccess())
		{
			$data = $res->getData();

			if(!empty($data))
				$result->setData(array_merge($result->getData(), $data));
		}
		else
		{
			$result->addErrors($res->getErrors());
		}
	}

	return $result;
}