public function testCalculatePrices() { // Create new prices $this->product->setPrice(self::getApplication()->getDefaultCurrencyCode(), $defaultPrice = 1); $this->product->save(); // Just check that prices for other currencies are generated $this->product->loadSpecification(); $pricing = $this->product->getPricingHandler(); $prices = $pricing->toArray(ProductPricing::BOTH); foreach (self::getApplication()->getCurrencyArray(!LiveCart::INCLUDE_DEFAULT) as $currencyCode) { $this->assertTrue(isset($prices[ProductPricing::CALCULATED][$currencyCode]) && $prices[ProductPricing::CALCULATED][$currencyCode] > 0); $this->assertFalse(isset($prices[ProductPricing::DEFINED][$currencyCode])); } }
protected function processRecord(Product $product) { $act = $this->getAction(); $field = $this->getField(); if ('manufacturer' == $act) { $product->manufacturer->set($this->params['manufacturer']); } else { if ('price' == $act) { $product->setPrice($this->params['baseCurrency'], $this->params['price']); } else { if (in_array($act, array('inc_price', 'multi_price', 'div_price'))) { $actions = array('inc_price' => 'increasePriceByPercent', 'multi_price' => 'multiplyPrice', 'div_price' => 'dividePrice'); $action = $actions[$act]; $pricing = $product->getPricingHandler(); foreach ($this->params['currencies'] as $currency) { if ($pricing->isPriceSet($currency)) { $p = $pricing->getPrice($currency); $p->{$action}($this->params['inc_price_value'], $this->params['inc_quant_price']); $p->save(); } } } else { if ('inc_stock' == $act) { $product->stockCount->set($product->stockCount->get() + $this->request->get($act)); } else { if ('addRelated' == $act) { $product->addRelatedProduct($this->params['relatedProduct']); } else { if ('copy' == $act) { $cloned = clone $product; $cloned->category->set($this->params['category']); $cloned->save(); } else { if ('addCat' == $act) { // check if the product is not assigned to this category already $relation = ActiveRecordModel::getInstanceByIdIfExists('ProductCategory', array('productID' => $product->getID(), 'categoryID' => $this->params['category']->getID())); if (!$relation->isExistingRecord() && $product->category->get() !== $category) { $relation->save(); } } else { if ('theme' == $act) { $instance = CategoryPresentation::getInstance($product); $instance->theme->set($this->params['theme']); $instance->save(); } else { if ('shippingClass' == $act) { $product->shippingClass->set(ActiveRecordModel::getInstanceByIDIfExists('ShippingClass', $this->params['shippingClass'], false)); } else { if ('taxClass' == $act) { $product->taxClass->set(ActiveRecordModel::getInstanceByIDIfExists('TaxClass', $this->params['taxClass'], false)); } else { if (substr($act, 0, 13) == 'set_specField') { $this->params['request']->remove('manufacturer'); $product->loadRequestData($this->params['request']); } else { if (substr($act, 0, 16) == 'remove_specField') { $this->params['request']->remove('manufacturer'); if ($this->params['field']->isMultiValue->get()) { // remove only selected multi-select options $product->loadRequestData($this->params['request']); } else { $product->removeAttribute($this->params['field']); } } else { parent::processRecord($product); } } } } } } } } } } } } }
public static function includeProductPrice(Product $product, &$options) { $prices = $product->getPricingHandler()->toArray(); $prices = $prices['calculated']; foreach ($options as &$option) { if (!empty($option['choices'])) { foreach ($option['choices'] as &$choice) { foreach ($prices as $currency => $price) { $instance = Currency::getInstanceByID($currency); $choice['formattedTotalPrice'][$currency] = $instance->getFormattedPrice($price + $instance->convertAmountFromDefaultCurrency($choice['priceDiff'])); } } } } }
public function saveProduct(Product $product) { /* @todo: figure out why it is necessary to explicitly mark the fields as modified to force saving */ foreach ($product->getPricingHandler()->getPrices() as $price) { $price->product->set($product); $price->product->setAsModified(); $price->currency->setAsModified(); $price->price->setAsModified(); } $product->save(ActiveRecord::PERFORM_INSERT); if (!empty($product->importedImages)) { foreach ($product->importedImages as $imageFile) { try { $image = ProductImage::getNewInstance($product); $image->save(); $image->setFile($imageFile); $image->__destruct(); } catch (Exception $e) { // invalid image } } unset($product->importedImages); } }
protected function processRecord(Product $product) { $act = $this->getAction(); $field = $this->getField(); if ('manufacturer' == $act) { $product->manufacturer->set($this->params['manufacturer']); } else { if ('price' == $act) { $product->setPrice($this->params['baseCurrency'], $this->params['price']); } else { if ('inc_price' == $act) { $pricing = $product->getPricingHandler(); foreach ($this->params['currencies'] as $currency) { if ($pricing->isPriceSet($currency)) { $p = $pricing->getPrice($currency); $p->increasePriceByPercent($this->params['inc_price_value'], $this->params['inc_quant_price']); $p->save(); } } } else { if ('inc_stock' == $act) { $product->stockCount->set($product->stockCount->get() + $this->request->get($act)); } else { if ('addRelated' == $act) { $product->addRelatedProduct($this->params['relatedProduct']); } else { if ('copy' == $act) { $cloned = clone $product; $cloned->category->set($this->params['category']); $cloned->save(); } else { if ('addCat' == $act) { // check if the product is not assigned to this category already $relation = ActiveRecordModel::getInstanceByIdIfExists('ProductCategory', array('productID' => $product->getID(), 'categoryID' => $this->params['category']->getID())); if (!$relation->isExistingRecord() && $product->category->get() !== $category) { $relation->save(); } } else { if ('theme' == $act) { $instance = CategoryPresentation::getInstance($product); $instance->theme->set($this->params['theme']); $instance->save(); } else { if ('shippingClass' == $act) { $product->shippingClass->set(ActiveRecordModel::getInstanceByIDIfExists('ShippingClass', $this->params['shippingClass'], false)); } else { if ('taxClass' == $act) { $product->taxClass->set(ActiveRecordModel::getInstanceByIDIfExists('TaxClass', $this->params['taxClass'], false)); } else { parent::processRecord($product); } } } } } } } } } } }