mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-09-03 13:33:48 +00:00
initial commit
This commit is contained in:
22
Calculator/CalculatorInterface.php
Normal file
22
Calculator/CalculatorInterface.php
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
/*
|
||||
*
|
||||
*/
|
||||
namespace Chill\AMLI\BudgetBundle\Calculator;
|
||||
|
||||
use Chill\AMLI\BudgetBundle\Entity\AbstractElement;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Julien Fastré <julien.fastre@champs-libres.coop>
|
||||
*/
|
||||
interface CalculatorInterface
|
||||
{
|
||||
/**
|
||||
*
|
||||
* @param AbstractElement[] $elements
|
||||
*/
|
||||
public function calculate(array $elements) : ?CalculatorResult;
|
||||
|
||||
public function getAlias();
|
||||
}
|
67
Calculator/CalculatorManager.php
Normal file
67
Calculator/CalculatorManager.php
Normal file
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
/*
|
||||
*
|
||||
*/
|
||||
namespace Chill\AMLI\BudgetBundle\Calculator;
|
||||
|
||||
use Chill\AMLI\BudgetBundle\Entity\AbstractElement;
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @author Julien Fastré <julien.fastre@champs-libres.coop>
|
||||
*/
|
||||
class CalculatorManager
|
||||
{
|
||||
/**
|
||||
*
|
||||
* @var CalculatorInterface[]
|
||||
*/
|
||||
protected $calculators = [];
|
||||
|
||||
protected $defaultCalculator = [];
|
||||
|
||||
public function addCalculator(CalculatorInterface $calculator, bool $default)
|
||||
{
|
||||
$this->calculators[$calculator::getAlias()] = $calculator;
|
||||
|
||||
if ($default) {
|
||||
$this->defaultCalculator[] = $calculator::getAlias();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string $alias
|
||||
* @return CalculatorInterface
|
||||
*/
|
||||
public function getCalculator($alias)
|
||||
{
|
||||
if (FALSE === \array_key_exists($alias, $this->calculators)) {
|
||||
throw new \OutOfBoundsException("The calculator with alias '$alias' does "
|
||||
. "not exists. Possible values are ". \implode(", ", \array_keys($this->calculators)));
|
||||
}
|
||||
|
||||
return $this->calculators[$alias];
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param AbstractElement[] $elements
|
||||
* @return CalculatorResult[]
|
||||
*/
|
||||
public function calculateDefault(array $elements)
|
||||
{
|
||||
$results = [];
|
||||
|
||||
foreach ($this->defaultCalculator as $alias) {
|
||||
$calculator = $this->calculators[$alias];
|
||||
$result = $calculator->calculate($elements);
|
||||
|
||||
if ($result !== null) {
|
||||
$results[$calculator::getAlias()] = $result;
|
||||
}
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
}
|
23
Calculator/CalculatorResult.php
Normal file
23
Calculator/CalculatorResult.php
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
/*
|
||||
*
|
||||
*/
|
||||
namespace Chill\AMLI\BudgetBundle\Calculator;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @author Julien Fastré <julien.fastre@champs-libres.coop>
|
||||
*/
|
||||
class CalculatorResult
|
||||
{
|
||||
const TYPE_RATE = 'rate';
|
||||
const TYPE_CURRENCY = 'currency';
|
||||
const TYPE_PERCENTAGE = 'percentage';
|
||||
|
||||
public $type;
|
||||
|
||||
public $result;
|
||||
|
||||
public $label;
|
||||
}
|
Reference in New Issue
Block a user