コード例 #1
0
ファイル: ProductPricing.php プロジェクト: saiber/www
 /**
  * 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];
 }