Exemplo n.º 1
0
 /**
  * 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;
 }
Exemplo n.º 3
0
 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));
 }