Pump users with related person and organization

This commit is contained in:
2025-03-28 12:57:00 +01:00
parent 9bf7690aa7
commit a2cc76e248
+67
View File
@@ -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;
}
}