/** * 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; }
/** * @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 testMultiplyingWithBCMathAndExponent() { if (!extension_loaded('bcmath')) { $this->markTestSkipped('BCMath extension not loaded, test skipped'); return; } $this->assertEquals('2000', Zend_Locale_Math::Mul('1e3', 2)); $this->assertEquals('2000', Zend_Locale_Math::Mul(2, '1e3')); }