diff --git a/src/Bundle/ChillBudgetBundle/Calculator/CalculatorInterface.php b/src/Bundle/ChillBudgetBundle/Calculator/CalculatorInterface.php index 9acb2ff86..2662b896a 100644 --- a/src/Bundle/ChillBudgetBundle/Calculator/CalculatorInterface.php +++ b/src/Bundle/ChillBudgetBundle/Calculator/CalculatorInterface.php @@ -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; diff --git a/src/Bundle/ChillBudgetBundle/Calculator/CalculatorManager.php b/src/Bundle/ChillBudgetBundle/Calculator/CalculatorManager.php index 934c22e36..7987bdfdf 100644 --- a/src/Bundle/ChillBudgetBundle/Calculator/CalculatorManager.php +++ b/src/Bundle/ChillBudgetBundle/Calculator/CalculatorManager.php @@ -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 */ - 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 $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 " diff --git a/src/Bundle/ChillBudgetBundle/migrations/Version20230328155010.php b/src/Bundle/ChillBudgetBundle/migrations/Version20230328155010.php new file mode 100644 index 000000000..ed524940e --- /dev/null +++ b/src/Bundle/ChillBudgetBundle/migrations/Version20230328155010.php @@ -0,0 +1,56 @@ +addSql(<<<'SQL' + WITH type_to_id AS ( + SELECT DISTINCT charge.charge_id AS id, charge.type + FROM chill_budget.charge + WHERE type <> '' + ) + UPDATE chill_budget.charge_type + SET kind = type_to_id.type + FROM type_to_id + WHERE type_to_id.type <> '' AND type_to_id.id = charge_type.id + SQL); + + $this->addSql(<<<'SQL' + WITH type_to_id AS ( + SELECT DISTINCT resource.resource_id AS id, resource.type + FROM chill_budget. resource + WHERE type <> '' + ) + UPDATE chill_budget.resource_type + SET kind = type_to_id.type + FROM type_to_id + WHERE type_to_id.type <> '' AND type_to_id.id = resource_type.id + SQL); + } + + public function down(Schema $schema): void + { + $this->addSql("UPDATE chill_budget.resource_type SET kind=md5(random()::text) WHERE kind = ''"); + $this->addSql("UPDATE chill_budget.charge_type SET kind=md5(random()::text) WHERE kind = ''"); + } +} diff --git a/tests/app b/tests/app index 5e478fdfb..5b35e7ccd 160000 --- a/tests/app +++ b/tests/app @@ -1 +1 @@ -Subproject commit 5e478fdfbf429baf3ce852ae69eb1f7101b1b416 +Subproject commit 5b35e7ccd0735e5593835e28acbf82386c18e1b6