Example #1
0
 /**
  * Round all approved amount down to nearest full unit
  *
  * @param  ClaimArray $claims
  * @param  SEK $funds
  * @return SEK
  */
 public function allocate(ClaimArray $claims, SEK $funds)
 {
     $strategy = new \byrokrat\amount\Rounder\RoundDown();
     $sumBeforeAction = $claims->sumApprovedAmounts();
     foreach ($claims as $claim) {
         $claim->setApprovedAmount($claim->getApprovedAmount()->roundTo(0, $strategy));
     }
     return $funds->subtract($claims->sumApprovedAmounts()->subtract($sumBeforeAction));
 }
Example #2
0
 /**
  * Calculate current ratio
  *
  * @param  ClaimArray $claims
  * @param  SEK $funds
  * @return SEK
  */
 private function calculateRatio(ClaimArray $claims, SEK $funds)
 {
     $notApproved = $claims->sumNotApprovedAmounts();
     if ($notApproved->isZero()) {
         return $notApproved;
     }
     $ratio = $funds->divideBy($notApproved);
     $one = new SEK('1');
     return $ratio->isGreaterThan($one) ? $one : $ratio;
 }
Example #3
0
 public function beforeAmountNode(AmountNode $node)
 {
     try {
         $node->setAttribute('amount', SEK::createFromSignalString($node->getValue()));
     } catch (AmountException $e) {
         $this->addError("Invalid signaled amount %s on line %s", $node->getValue(), (string) $node->getLineNr());
     }
 }
Example #4
0
 public function testCreateFromExchange()
 {
     $sek = SEK::createFromExchange(new EUR('10'), '10');
     $this->assertInstanceOf('byrokrat\\amount\\Currency\\SEK', $sek);
     $this->assertEquals('100', $sek->getAmount());
 }