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; + } + } +} diff --git a/src/Benzina/ProjectsRewardsPump.php b/src/Benzina/ProjectsRewardsPump.php new file mode 100644 index 0000000..52acb12 --- /dev/null +++ b/src/Benzina/ProjectsRewardsPump.php @@ -0,0 +1,95 @@ +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; + } + } +}