Ejemplo n.º 1
0
 /**
  * @param Shipment $shipment
  * @return array
  * @throws ArgumentException
  * @throws NotSupportedException
  */
 private static function reserveShipment(Shipment $shipment)
 {
     if ($shipment->isReserved()) {
         new SystemException("shipment already reserved");
     }
     $result = array();
     /** @var ShipmentCollection $shipmentCollection */
     $shipmentCollection = $shipment->getCollection();
     /** @var OrderBase $order */
     $order = $shipmentCollection->getOrder();
     /** @var ShipmentItemCollection $shipmentCollection */
     $shipmentItemCollection = $shipment->getShipmentItemCollection();
     /** @var ShipmentItem $shipmentItem */
     foreach ($shipmentItemCollection as $shipmentIndex => $shipmentItem) {
         $poolQuantity = static::getReservationPoolItem($order->getInternalId(), $shipmentItem->getBasketItem());
         if ($poolQuantity === null || floatval($shipmentItem->getQuantity()) == floatval($shipmentItem->getReservedQuantity())) {
             continue;
         }
         $needReserved = floatval($shipmentItem->getQuantity()) - floatval($shipmentItem->getReservedQuantity());
         $resultQuantity = static::reserveShipmentItem($shipmentItem, $poolQuantity - $needReserved > 0 ? $needReserved : $poolQuantity);
         $poolQuantity -= $resultQuantity;
         static::setReservationPoolItem($order->getInternalId(), $shipmentItem->getBasketItem(), $poolQuantity);
         $result[$shipmentItem->getBasketCode()] = $resultQuantity;
     }
     return $result;
 }