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

	$registry = SaleRegistry::getInstance(SaleRegistry::REGISTRY_TYPE_ORDER);
	/** @var SaleOrder $orderClass */
	$orderClass = $registry->getOrderClassName();

	foreach($params as $param)
	{
		if(intval($param->status) <= 0 && $param->description == '')
			continue;

		$mappedStatuses = $this->getMappedStatuses();

		if(!empty($mappedStatuses[$param->status]))
		{
			/** @var Order $order */
			$order = $orderClass::load($param->orderId);
			$shipmentCollection = null;
			$oShipment = null;

			if($order)
			{
				/** @var BitrixSaleShipmentCollection  $shipmentCollection */
				$shipmentCollection = $order->getShipmentCollection();
			}

			if($shipmentCollection)
			{
				/** @var Shipment $oShipment */
				$oShipment = $shipmentCollection->getItemById($param->shipmentId);
			}

			if($oShipment)
			{
				$res = $oShipment->setField('STATUS_ID', $mappedStatuses[$param->status]);

				if($res->isSuccess())
				{
					$res = $order->save();

					if(!$res->isSuccess())
						$result->addErrors($res->getErrors());
				}
				else
				{
					$result->addErrors($res->getErrors());
				}
			}
		}
	}

	$this->sendOnStatusesChangedEvent($params);
	$this->sendStatusChangedMail($params);
	return $result;
}