/** * Iterate over the order items and calculate the gst * for each depending on StreakGSTModule.config.currency_percentages() * * @param Order $order * @param null $value * @throws ValidationException * @throws null */ public function add($order, $value = null) { $gst = new Price(); $gst->setCurrency(ShopConfig::current_shop_config()->BaseCurrency); $descriptions = array(); /** @var Price|null $calculated */ $calculated = null; /** @var Item $item */ foreach ($order->Items() as $item) { if ($price = $item->Price()) { $currency = $price->getCurrency(); if ($rate = self::rate_for_currency($currency)) { if (!$calculated) { $calculated = new Price(); } $percentage = Zend_Locale_Math::Div($rate, 100.0, 10); $taxed = Zend_Locale_Math::Mul($price, $percentage, 10); $temp = Zend_Locale_Math::Add($calculated, $taxed, 10); $calculated->setAmount($temp); $descriptions[$currency] = static::description($currency); } } } if ($calculated) { $mod = new StreakGST_Modification(); $mod->OrderID = $order->ID; $mod->Price = 0; $mod->Description = implode("<br/>\n", $descriptions); $mod->GST = $calculated->getAmount(); $mod->Value = $calculated->getAmount(); $mod->write(); } }
/** * Returns the amount minus percentage from Measure. * * @param Price $forAmount * @return Price */ public function discountedAmount($forAmount) { if ($this->owner->UsePercentageColumn) { $price = new Price(); if ($forAmount instanceof Money) { $price->setAmount($forAmount->getAmount()); $price->setCurrency($forAmount->getCurrency()); } else { $price->setAmount($forAmount); $price->setCurrency(ShopConfig::current_shop_config()->BaseCurrency); } // only recalculate if there is a percentage if ($this->owner->Measure != 0) { $original = $price->getAmount(); $percentage = Zend_Locale_Math::Div($this->owner->Measure, self::OneHundred, 10); $difference = Zend_Locale_Math::Mul($original, $percentage, 10); $price->setAmount(Zend_Locale_Math::Sub($original, $difference, 10)); } return $price; } return null; }
public function testDivisionWithBCMathAndExponent() { if (!extension_loaded('bcmath')) { $this->markTestSkipped('BCMath extension not loaded, test skipped'); return; } $this->assertEquals('500', Zend_Locale_Math::Div('1e3', 2)); }