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