• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/compatible/ordercompatibility.php
  • Класс: BitrixSaleCompatibleOrderCompatibility
  • Вызов: OrderCompatibility::syncShipmentCollectionFromRequest
static function syncShipmentCollectionFromRequest(SaleShipmentCollection $shipmentCollection, array $fields)
{
	$result = new SaleResult();

	$countShipments = count($shipmentCollection);
	$baseShipment = null;

	if ($countShipments <= 2 && $shipmentCollection->isExistsSystemShipment())
	{
		/** @var SaleShipment $shipment */
		foreach ($shipmentCollection as $shipment)
		{
			if ($shipment->isSystem())
				continue;

			$baseShipment = $shipment;
		}
	}
	else
	{
		return $result;
	}

	/** @var SaleOrder $order */
	if (!$order = $shipmentCollection->getOrder())
	{
		throw new MainObjectNotFoundException('Entity "Order" not found');
	}


	if ($baseShipment === null)
	{
		return $result;
	}

	if (isset($fields['ALLOW_DELIVERY']) && strval($fields['ALLOW_DELIVERY']) != '')
	{
		if ($baseShipment->getField('ALLOW_DELIVERY') != $fields['ALLOW_DELIVERY'])
		{
			if ($fields['ALLOW_DELIVERY'] == "Y")
			{
				/** @var SaleResult $r */
				$r = $baseShipment->allowDelivery();
			}
			else
			{
				/** @var SaleResult $r */
				$r = $baseShipment->disallowDelivery();
			}

			if ($r->isSuccess())
			{
				$order->setFieldNoDemand('ALLOW_DELIVERY', $fields['ALLOW_DELIVERY']);
			}
			else
			{
				$result->addErrors($r->getErrors());
			}
		}
	}


	if (isset($fields['DEDUCTED']) && strval($fields['DEDUCTED']) != '')
	{
		if ($baseShipment->getField('DEDUCTED') != $fields['DEDUCTED'])
		{
			if ($fields['DEDUCTED'] == "Y")
			{
				/** @var SaleResult $r */
				$r = $baseShipment->tryShip();
			}
			else
			{
				/** @var SaleResult $r */
				$r = $baseShipment->tryUnship();
			}

			if ($r->isSuccess())
			{
				$order->setFieldNoDemand('DEDUCTED', $fields['DEDUCTED']);
			}
			else
			{
				$result->addErrors($r->getErrors());
			}
		}
	}

	return $result;
}