From a2cc76e248e504ee2786d89a09ba976310497904 Mon Sep 17 00:00:00 2001 From: Daniel Subiabre Date: Fri, 28 Mar 2025 12:57:00 +0100 Subject: [PATCH] Pump users with related person and organization --- src/Benzina/UsersPump.php | 67 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/src/Benzina/UsersPump.php b/src/Benzina/UsersPump.php index bb92baf..a1ff962 100644 --- a/src/Benzina/UsersPump.php +++ b/src/Benzina/UsersPump.php @@ -2,7 +2,10 @@ namespace App\Benzina; +use App\Entity\User\Organization; +use App\Entity\User\Person; use App\Entity\User\User; +use App\Entity\User\UserType; use App\Service\UserService; use Goteo\Benzina\Pump\ArrayPumpTrait; use Goteo\Benzina\Pump\DoctrinePumpTrait; @@ -37,6 +40,12 @@ class UsersPump implements PumpInterface $user->setMigratedId($record['id']); $user->setDateCreated($this->getDateCreated($record)); $user->setDateUpdated(new \DateTime()); + $user->setType($this->getUserType($record)); + + match ($user->getType()) { + UserType::Individual => $user = $this->setUserPerson($record, $user), + UserType::Organization => $user = $this->setUserOrganization($record, $user), + }; $this->persist($user, $context); ++$this->userCount; @@ -65,4 +74,62 @@ class UsersPump implements PumpInterface return new \DateTime($record['modified']); } + + private function getUserType(array $record): UserType + { + switch ($record['legal_entity']) { + case 0: + case 1: + return UserType::Individual; + case 2: + case 3: + case 4: + case 5: + case 6: + return UserType::Organization; + default: + return UserType::Individual; + } + } + + private function setUserPerson(array $record, User $user): User + { + $namePieces = \explode(' ', $record['name']); + $namePiecesCount = \count($namePieces); + + $firstName = $record['name']; + $lastName = ''; + + if ($namePiecesCount === 2) { + [$firstName, $lastName] = $namePieces; + } + + if ($namePiecesCount === 3) { + $firstName = $namePieces[0]; + $lastName = \join(' ', \array_slice($namePieces, 1)); + } + + if ($namePiecesCount > 3) { + $firstName = \join(' ', \array_slice($namePieces, 0, 2)); + $lastName = \join(' ', \array_slice($namePieces, 2)); + } + + $person = new Person(); + $person->setFirstName($firstName); + $person->setLastName($lastName); + + $user->setPerson($person); + + return $user; + } + + private function setUserOrganization(array $record, User $user): User + { + $org = new Organization(); + $org->setBusinessName($record['name']); + + $user->setOrganization($org); + + return $user; + } }