public function getVisibleUnits() { if (!in_array('units', $this->_loaded)) { $this->_loadUnits(); } return parent::getVisibleUnits(); }
private function _getUnits(Product $product, array $options) { $units = []; $locations = $this->get('stock.locations'); foreach ($product->getVisibleUnits() as $unit) { // Skip units that don't meet the options criteria, if set if ($options && $options !== array_intersect_assoc($options, $unit->options)) { continue; } if (1 > $unit->getStockForLocation($locations->getRoleLocation($locations::SELL_ROLE))) { $this->_outOfStock[(int) $unit->id] = $unit->id; } $units[$unit->id] = $unit; } return $units; }
protected function _getAvailableUnits(Product $product, array $options = []) { $key = md5(serialize(array($product->id, $options))); if (!array_key_exists($key, $this->_availableUnits)) { $this->_availableUnits[$key] = []; foreach ($product->getVisibleUnits() as $unit) { // Skip units that don't meet the options criteria, if set if ($options && $options !== array_intersect_assoc($options, $unit->options)) { continue; } $this->_availableUnits[$key][$unit->id] = $unit; } } return $this->_availableUnits[$key]; }