/** * Convert current product prices to array * * @param string $part Which part of array prices you want to get ('defined', 'calculated' or 'both') */ public function toArray($part = null, $listPrice = false) { if (!in_array($part, array('defined', 'calculated', 'both'))) { $part = 'both'; } $field = $listPrice ? 'listPrice' : 'price'; $ruleController = $this->application->getBusinessRuleController(); $defined = array(); foreach ($this->prices as $inst) { $defPrice = $inst->{$field}->get(); $curr = $inst->currency->get()->getID(); if ('price' == $field) { $defined[$curr] = $inst->getPriceByGroup($ruleController->getContext()->getUserGroupID()); if ($defined[$curr] != $defPrice) { $this->setListPrice($curr, $defPrice); } } else { $defined[$curr] = $defPrice; } } if ($listPrice) { $defined = array_merge($defined, $this->listPrices); } $baseCurrency = $this->application->getDefaultCurrencyCode(); $basePrice = isset($defined[$baseCurrency]) ? $defined[$baseCurrency] : 0; $formattedPrice = $calculated = array(); $parent = $this->product->parent->get(); $setting = $this->product->getChildSetting('price'); foreach ($this->application->getCurrencySet() as $id => $currency) { if (!empty($defined[$id])) { $calculated[$id] = $defined[$id]; } else { $calculated[$id] = ProductPrice::calculatePrice($this->product, $currency, $basePrice); } if (!$calculated[$id] && $listPrice) { continue; } if ($parent && ($setting != Product::CHILD_OVERRIDE || !$calculated[$id])) { $parentPrice = $parent->getPrice($id); $calculated[$id] += $parentPrice * ($setting != Product::CHILD_ADD ? 1 : -1); } if (!$listPrice) { $calculated[$id] = $this->application->getDisplayTaxPrice($calculated[$id], $this->product); $discountedPrice = $ruleController->getProductPrice($this->product, $calculated[$id], $currency->getID()); if ($discountedPrice != $calculated[$id]) { $this->setListPrice($currency->getID(), $calculated[$id]); $calculated[$id] = $discountedPrice; } } if ((double) $calculated[$id] || !$listPrice) { $formattedPrice[$id] = $currency->getFormattedPrice($calculated[$id]); } } $return = array('defined' => $defined, 'calculated' => $calculated, 'formattedPrice' => $formattedPrice); return 'both' == $part ? $return : $return[$part]; }