DX: [budget calculator] restore previous budget's element type to Charge/Resource kind

+ improve typing
This commit is contained in:
2023-03-28 18:11:41 +02:00
parent 0133e202d2
commit 561d069a3e
4 changed files with 69 additions and 15 deletions

View File

@@ -11,7 +11,6 @@ declare(strict_types=1);
namespace Chill\BudgetBundle\Calculator;
use Chill\BudgetBundle\Entity\AbstractElement;
use Chill\BudgetBundle\Entity\Charge;
use Chill\BudgetBundle\Entity\Resource;

View File

@@ -12,6 +12,8 @@ declare(strict_types=1);
namespace Chill\BudgetBundle\Calculator;
use Chill\BudgetBundle\Entity\AbstractElement;
use Chill\BudgetBundle\Entity\Charge;
use Chill\BudgetBundle\Entity\Resource;
use OutOfBoundsException;
use function array_key_exists;
@@ -21,11 +23,14 @@ use function implode;
class CalculatorManager
{
/**
* @var CalculatorInterface[]
* @var array<string, CalculatorInterface>
*/
protected $calculators = [];
private array $calculators = [];
protected $defaultCalculator = [];
/**
* @var string[]
*/
private array $defaultCalculator = [];
public function addCalculator(CalculatorInterface $calculator, bool $default)
{
@@ -37,7 +42,7 @@ class CalculatorManager
}
/**
* @param AbstractElement[] $elements
* @param array<Resource|Charge> $elements
*
* @return CalculatorResult[]
*/
@@ -46,23 +51,17 @@ class CalculatorManager
$results = [];
foreach ($this->defaultCalculator as $alias) {
$calculator = $this->calculators[$alias];
$result = $calculator->calculate($elements);
$result = $this->getCalculator($alias)->calculate($elements);
if (null !== $result) {
$results[$calculator->getAlias()] = $result;
$results[$alias] = $result;
}
}
return $results;
}
/**
* @param string $alias
*
* @return CalculatorInterface
*/
public function getCalculator($alias)
public function getCalculator(string $alias): CalculatorInterface
{
if (false === array_key_exists($alias, $this->calculators)) {
throw new OutOfBoundsException("The calculator with alias '{$alias}' does "