public function setStockLevel(Unit $unit, array $row, $location = 'web')
 {
     $stockKey = $this->_headingKeys->getKey('stock');
     if (!is_string($location) && !$location instanceof Location\Location) {
         throw new \InvalidArgumentException('Location must be either a string or an instance of Location');
     } elseif (!array_key_exists($stockKey, $row)) {
         throw new \LogicException('No stock column in row!');
     }
     $stockLevel = (int) $row[$stockKey];
     if ($stockLevel > 0) {
         $location = $location instanceof Location\Location ? $location : $this->_locations->get($location);
         $this->_stockManager->setReason($this->_reason);
         $this->_stockManager->set($unit, $location, $stockLevel);
     }
 }
 protected function _loadItem($itemResult, $itemEntity, $return)
 {
     // Cast decimals to float
     $itemEntity->balance = $itemEntity->balance ? (double) $itemEntity->balance : null;
     $itemEntity->calculatedBalance = $itemEntity->calculatedBalance ? (double) $itemEntity->calculatedBalance : null;
     $itemEntity->remainingBalance = $itemEntity->remainingBalance ? (double) $itemEntity->remainingBalance : null;
     $itemEntity->accepted = null !== $itemEntity->accepted ? (bool) $itemEntity->accepted : null;
     $itemEntity->listPrice = (double) $itemEntity->listPrice;
     $itemEntity->actualPrice = (double) $itemEntity->actualPrice;
     $itemEntity->net = (double) $itemEntity->net;
     $itemEntity->discount = (double) $itemEntity->discount;
     $itemEntity->tax = (double) $itemEntity->tax;
     $itemEntity->taxRate = (double) $itemEntity->taxRate;
     $itemEntity->productTaxRate = (double) $itemEntity->productTaxRate;
     $itemEntity->gross = (double) $itemEntity->gross;
     $itemEntity->rrp = (double) $itemEntity->rrp;
     // Only load the order and refunds if one is attached to the return
     if ($itemEntity->orderID) {
         $itemEntity->order = $this->_orderLoader->getByID($itemEntity->orderID);
         // Grab the item from the order for easy access
         if ($itemEntity->orderItemID) {
             $itemEntity->orderItem = $itemEntity->order->items[$itemEntity->orderItemID];
             $itemEntity->unit = $itemEntity->orderItem->getUnit();
         }
         $itemEntity->note = $this->_orderLoader->getEntityLoader('notes')->getByID($itemEntity->noteID, $itemEntity->order);
         // $itemEntity->document = $this->_orderLoader->getEntityLoader('documents')->getByID($itemResult->documentID, $itemEntity->order);
     }
     if ($itemEntity->exchangeItemID) {
         $itemEntity->exchangeItem = $this->_orderLoader->getEntityLoader('items')->getByID($itemEntity->exchangeItemID, $itemEntity->order ?: null);
     }
     if (!$itemEntity->unit) {
         $itemEntity->unit = $this->_unitLoader->getByID($itemEntity->unitID);
     }
     $itemEntity->reason = $this->_reasons->get($itemResult->reason);
     $itemEntity->status = $this->_statuses->get($itemResult->status_code);
     if ($itemResult->returned_stock_location and $this->_stockLocations->exists($itemResult->returned_stock_location)) {
         $itemEntity->returnedStockLocation = $this->_stockLocations->get($itemResult->returned_stock_location);
     }
     $itemEntity->returnedStock = (bool) $itemEntity->returnedStock;
     $itemEntity = $this->_loadDocument($itemEntity, $return);
     return $itemEntity;
 }