/** * 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(); } }
/** * @param Order $order * @param null $value * @throws ValidationException * @throws null */ public function add($order, $value = null) { if ($order->ShippingRegionCode) { if ($orderRegion = Region_Shipping::get()->filter('Code', $order->ShippingRegionCode)->first()) { $shippingCost = 0.0; /** @var Item $item */ foreach ($order->Items() as $item) { $productRegion = $item->Product()->Shippables()->filter('RegionID', $orderRegion->ID)->first(); if ($productRegion) { $shippingCost = Zend_Locale_Math::Add($shippingCost, Zend_Locale_Math::Mul($productRegion->Price, $item->Quantity)); } } //Generate the Modification now that we have picked the correct rate $mod = new StreakRegionalShipping_Modification(); $mod->OrderID = $order->ID; $mod->RegionID = $orderRegion->ID; $mod->Price = $shippingCost; $mod->Description = "Shipping to {$orderRegion->Title}"; $mod->Value = $shippingCost; $mod->write(); } } }
public function testAddingWithBCMathAndExponent() { if (!extension_loaded('bcmath')) { $this->markTestSkipped('BCMath extension not loaded, test skipped'); return; } $this->assertEquals('1300', Zend_Locale_Math::Add('1e3', 300)); $this->assertEquals('1300', Zend_Locale_Math::Add(300, '1e3')); }