• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/delivery/requests/manager.php
  • Класс: BitrixSaleDeliveryRequestsManager
  • Вызов: Manager::deleteShipmentsFromDeliveryRequest
static function deleteShipmentsFromDeliveryRequest($requestId, array $shipmentIds)
{
	$result = new Result();

	if (empty($requestId))
	{
		$result->addError(new MainError(Loc::getMessage('SALE_DLVR_REQ_MNGR_ERROR_REQ_ID')));
		return $result;
	}

	if (empty($shipmentIds))
	{
		$result->addError(new MainError(Loc::getMessage('SALE_DLVR_REQ_MNGR_ERROR_SHP_ID_LIST_EMPTY')));
		return $result;
	}

	if (!($deliveryRequestHandler = self::getDeliveryRequestHandlerByRequestId($requestId)))
	{
		$result->addError(
			new MainError(
				Loc::getMessage(
					'SALE_DLVR_REQ_MNGR_ERROR_REQ_OBJ'
		)));

		return $result;
	}

	$checkResults = self::checkShipmentIdsBeforeDelete($shipmentIds);

	foreach ($checkResults as $res)
	{
		if (!$res->isSuccess())
		{
			$result->addErrors($res->getErrors());
			unset($shipmentIds[array_search($res->getInternalId(), $shipmentIds)]);
		}
	}

	if (empty($shipmentIds))
		return $result;

	$res = $deliveryRequestHandler->deleteShipments($requestId, $shipmentIds);
	$result->setResults($res->getResults());

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

	$results = $result->getResults();

	if (!is_array($results) || empty($results))
	{
		$result->addError(new MainError(Loc::getMessage('SALE_DLVR_REQ_MNGR_ERROR_RES_UNKNOWN')));
		return $result;
	}

	$con = MainApplication::getConnection();

	/** @var  ShipmentResult $shpRes */
	foreach ($results as $resId => $shpRes)
	{
		if (!($shpRes instanceof ShipmentResult))
		{
			$result->addError(new MainError(Loc::getMessage('SALE_DLVR_REQ_MNGR_ERROR_ANSW_TYPE').' "'.get_class($shpRes).'"'));
			continue;
		}

		if ($shpRes->isSuccess())
		{
			$shpId = intval($shpRes->getInternalId());

			if ($shpId <= 0)
			{
				$result->addError(new MainError(Loc::getMessage('SALE_DLVR_REQ_MNGR_SHP_ID_LESS_ZERO')));
				continue;
			}

			$con->queryExecute("DELETE FROM ".ShipmentTable::getTableName()." WHERE REQUEST_ID=".intval($requestId)." AND SHIPMENT_ID=".intval($shpId));
			//Unset mark about changed shipment
			self::unSetMarkerShipmentChanged($shpId);

			//If there is no more shipments in this request
			if (!ShipmentTable::getList(array('filter' => array('=REQUEST_ID' => $requestId)))->fetch())
			{
				$res = RequestTable::delete($requestId);

				if ($res->isSuccess())
				{
					$result->addMessage(
						new Message(
							Loc::getMessage(
								'SALE_DLVR_REQ_MNGR_EMPTY_REQ_DELETED',
								array('#REQUEST_ID#' => $requestId)
					)));
				}
				else
				{
					$result->addError(
						new MainError(
							Loc::getMessage(
								'SALE_DLVR_REQ_MNGR_EMPTY_REQ_NOT_DELETED',
								array('#REQUEST_LINK#' => Helper::getRequestViewLink($requestId))
							).implode('; ',$result->getErrorMessages())
					));
				}
			}
		}

		$results[$resId] = $shpRes;
	}

	$result->setResults($results);
	return $result;
}