Pump users with related person and organization
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user