From 56c383c608198dba092c4e3adb11f42072adeb60 Mon Sep 17 00:00:00 2001 From: Daniel Subiabre Date: Wed, 26 Feb 2025 14:30:19 +0100 Subject: [PATCH 1/3] Add pumping for projects costs --- src/Benzina/ProjectsBudgetPump.php | 90 ++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 src/Benzina/ProjectsBudgetPump.php diff --git a/src/Benzina/ProjectsBudgetPump.php b/src/Benzina/ProjectsBudgetPump.php new file mode 100644 index 0000000..0407fa9 --- /dev/null +++ b/src/Benzina/ProjectsBudgetPump.php @@ -0,0 +1,90 @@ +hasAllKeys($sample, self::COST_KEYS)) { + return true; + } + + return false; + } + + public function pump(mixed $record): void + { + if (empty($record['cost']) || empty($record['amount'])) { + return; + } + + $project = $this->getBudgetProject($record); + if ($project === null) { + return; + } + + $budgetItem = new BudgetItem(); + $budgetItem->setTranslatableLocale($project->getLocales()[0]); + $budgetItem->setProject($project); + $budgetItem->setType($this->getCostType($record)); + $budgetItem->setTitle($record['cost']); + $budgetItem->setDescription($record['description'] ?? $record['cost']); + + $money = new Money($record['amount'] * 100, 'EUR'); + + if ($record['required'] > 0) { + $budgetItem->setOptimum($money); + } else { + $budgetItem->setMinimum($money); + } + + $this->persist($budgetItem); + } + + private function getBudgetProject(array $record): ?Project + { + return $this->projectRepository->findOneBy(['migratedId' => $record['project']]); + } + + private function getCostType(array $record): BudgetItemType + { + switch ($record['type']) { + case 'task': + return BudgetItemType::Task; + case 'material': + return BudgetItemType::Material; + default: + return BudgetItemType::Infrastructure; + } + } +} From 42f52578347762bb20db499bf39e7041f8cae8ab Mon Sep 17 00:00:00 2001 From: Daniel Subiabre Date: Wed, 26 Feb 2025 15:07:29 +0100 Subject: [PATCH 2/3] Add pumping for project rewards --- src/Benzina/ProjectsRewardsPump.php | 96 +++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 src/Benzina/ProjectsRewardsPump.php diff --git a/src/Benzina/ProjectsRewardsPump.php b/src/Benzina/ProjectsRewardsPump.php new file mode 100644 index 0000000..7b7a7e6 --- /dev/null +++ b/src/Benzina/ProjectsRewardsPump.php @@ -0,0 +1,96 @@ +hasAllKeys($sample, self::REWARD_KEYS)) { + return true; + } + + return false; + } + + public function pump(mixed $record): void + { + if (empty($record['reward']) || empty($record['amount'])) { + return; + } + + if ($record['type'] !== 'individual') { + return; + } + + $project = $this->getBudgetProject($record); + if ($project === null) { + return; + } + + $reward = new Reward(); + $reward->setProject($project); + $reward->setTitle($record['reward']); + $reward->setDescription($record['description'] ?? $record['reward']); + $reward->setMoney(new Money($record['amount'] * 100, 'EUR')); + $reward->setHasUnits($record['units'] > 0); + $reward->setUnitsTotal($record['units'] ?? 0); + $reward->setUnitsAvailable($record['units'] ?? 0); + + $this->persist($reward); + } + + private function getBudgetProject(array $record): ?Project + { + return $this->projectRepository->findOneBy(['migratedId' => $record['project']]); + } + + private function getCostType(array $record): BudgetItemType + { + switch ($record['type']) { + case 'task': + return BudgetItemType::Task; + case 'material': + return BudgetItemType::Material; + default: + return BudgetItemType::Infrastructure; + } + } +} From 5b77fe345820ceaac2b409a1e97b6dc592494728 Mon Sep 17 00:00:00 2001 From: Daniel Subiabre Date: Wed, 26 Feb 2025 15:36:32 +0100 Subject: [PATCH 3/3] Code fixes by php-cs-fixer --- src/Benzina/ProjectsRewardsPump.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Benzina/ProjectsRewardsPump.php b/src/Benzina/ProjectsRewardsPump.php index 7b7a7e6..52acb12 100644 --- a/src/Benzina/ProjectsRewardsPump.php +++ b/src/Benzina/ProjectsRewardsPump.php @@ -3,7 +3,6 @@ namespace App\Benzina; use App\Entity\Money; -use App\Entity\Project\BudgetItem; use App\Entity\Project\BudgetItemType; use App\Entity\Project\Project; use App\Entity\Project\Reward;