← Back
Editing: AgencyImportTransformer.php
<?php namespace App\Import; use App\Entity\Adresse; use App\Entity\Agency; use App\Entity\AgencyPrestataire; use App\Entity\AgentFrequency; use App\Entity\Periode; use App\Entity\Prestataire; use App\Entity\User; use App\Service\SolutionService; use Doctrine\ORM\EntityManagerInterface; class AgencyImportTransformer { private ?Agency $agency = null; public function __construct( private readonly EntityManagerInterface $entityManager, private readonly SolutionService $solutionService ) { } public function __invoke(object $obj, array &$values, int $position, Agency $agency, array &$providers): void { $this->agency = $agency; match (get_class($obj)) { User::class => $this->transformUser($obj, $values), Adresse::class => $this->transformAddress($values), AgencyPrestataire::class => $this->transformAgencyProvider($obj, $values, $position, $providers), default => '' }; } private function transformUser(User $obj, array &$values): void { $obj->addSolution($this->solutionService->getCurrent()); if (isset($values['frequenceControle']) && $values['frequenceControle']) { /** @var Periode $period */ $period = $this->entityManager->getRepository(Periode::class)->findOneBy( ['nom' => $values['frequenceControle']] ); $agentFrequency = $this->getFrequency($obj); $agentFrequency->setAgent($obj); $agentFrequency->setFrequencyPeriod($period); $agentFrequency->setSolution($this->solutionService->getCurrent()); $agentFrequency->setFrequencyValue($values['objectifControle']); if (!$agentFrequency->getId()) { $obj->addAgentFrequency($agentFrequency); } else { $this->entityManager->persist($agentFrequency); } unset($values['frequenceControle'], $values['objectifControle']); } $values['agency'] = $this->agency; $values['username'] = $values['email']; $values['enabled'] = 1; } private function transformAddress(array &$values): void { $values['agency'] = $this->agency; $values['notifyBreakdown'] = false; } /** * @param Prestataire[] $providers */ private function transformAgencyProvider( AgencyPrestataire $obj, array &$values, int $position, array $providers ): void { $values['mailContact'] = trim($values['mailContact']); $emailContacts = explode(';', $values['mailContact']); foreach ($emailContacts as $key => $emailContact) { $agencyProvider = $this->fetchAgencyProviderFromEmail( $emailContact, $providers[$position] ) ?? new AgencyPrestataire(); if (0 === $key) { $providers[$position]->addAgencyPrestataire($obj); $values['mailContact'] = $emailContact; continue; } $agencyProvider->setMailContact($emailContact); $agencyProvider->setPrestataire($providers[$position]); $agencyProvider->setAgency($this->agency); $agencyProvider->setNomContact($values['nomContact']); $agencyProvider->setPrenomContact($values['prenomContact']); $agencyProvider->setTelephone($values['telephone']); $providers[$position]->addAgencyPrestataire($agencyProvider); } $values['prestataire'] = $providers[$position]; $values['agency'] = $this->agency; } private function fetchAgencyProviderFromEmail(string $email, Prestataire $prestataire): ?AgencyPrestataire { $repository = $this->entityManager->getRepository(AgencyPrestataire::class); return $repository->findOneBy([ 'mailContact' => $email, 'prestataire' => $prestataire, ]); } private function getFrequency(User $obj): AgentFrequency { if ($obj->getAgentFrequencies()) { foreach ($obj->getAgentFrequencies() as $frequency) { if ($frequency->getSolution()->getId() === $this->solutionService->getCurrent()->getId()) { return $frequency; } } } return new AgentFrequency(); } }
Save File
Cancel