<?php
namespace WebBundle\Entity;
use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\PersistentCollection;
use Exception;
use FlexApp\Constant\TimeConstant;
use Serializable;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Serializer\Annotation\Groups;
use WebBundle\Helper\App;
use WebBundle\Helper\UserHelper;
use WebBundle\Validator\Constraints as AcmeAssert;
/**
* User.
*
* @AcmeAssert\UniqueUserEmail
* @AcmeAssert\ValidUserEmail
* @AcmeAssert\ValidUserPass
* @ORM\Table(name="user", indexes={@ORM\Index(name="user_token_idx", columns={"token"})},
* options={"comment" = "Пользователи"})
* @ORM\Entity(repositoryClass="WebBundle\Repository\UserRepository")
* @UniqueEntity("email")
*/
class User implements UserInterface, PasswordAuthenticatedUserInterface, Serializable
{
public const ROLE_DEFAULT = 'ROLE_USER';
/**
* @var int|null
* @Groups("serialize")
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var ?string
* @Groups("serialize")
*
* @ORM\Column(name="unid", type="string", unique=true, nullable=true, length=36,
* options={"comment" = "идентификатор пользователя на портале"})
*/
private ?string $unid = null;
/**
* @var ?string
* @Groups("serialize")
*
* @ORM\Column(name="corporate_unid", type="string", unique=true, nullable=true, length=36,
* options={"comment" = "идентификатор юр. польователя на портале"})
*/
private ?string $corporateUnid = null;
/**
* @var string
* @Groups("serialize")
*
* @ORM\Column(name="token", type="string", length=64, unique=true)
*/
private $token;
/**
* @var bool
*
* @ORM\Column(name="is_active", type="boolean",
* options={"default" = 1, "comment"="Активирован (1 - да, 0 - нет)"}))
*/
private $isActive;
/**
* @var bool
*
* @ORM\Column(name="proved", type="boolean", nullable=true,
* options={"default" = false, "comment"="Проверенный, снимает ограничение на лимит в заказе (true - да, false - нет)"}))
*/
private $proved;
/**
* @var string
*
* @ORM\Column(name="alias", type="string", length=300)
* options={"comment"="Псевдоним пользователя"}))
*/
private $alias;
/**
* @var string
*
* @ORM\Column(name="foreign_alias", type="string", length=300, nullable=true)
* options={"comment"="Псевдоним для иностранцев"}))
*/
private $foreignAlias;
/**
* @var string
*
* @ORM\Column(name="lotus_name", type="string", length=100, nullable=true)
*/
private $lotusName;
/**
* @ORM\OneToMany(targetEntity="Factory", mappedBy="user", cascade={"persist", "remove"})
**/
private $factories;
/**
* @ORM\OneToMany(targetEntity="TransExEntity", mappedBy="autor")
*/
private $transEx;
/**
* @var PersistentCollection|OrderAddress[]
* @ORM\OneToMany(targetEntity="OrderAddress", mappedBy="user", cascade={"persist", "remove"})
*/
private $orderAddresses;
/**
* Encrypted password.
*
* @ORM\Column(type="string")
* @var string
*/
protected $password;
/** @var bool */
protected $changePassword = null;
/** @var string */
protected $passwordNew;
/** @var string */
protected $passwordRepeat;
/** @var string */
protected $passwordOld;
/**
* @ORM\ManyToMany(targetEntity="Participant", mappedBy="participants")
*/
private $participants;
/**
* @var bool
*
* @ORM\Column(name="expired", type="boolean", nullable=true)
*/
private $expired = null;
/**
* @var DateTime
*
* @ORM\Column(name="expires_at", type="datetime", nullable=true)
*/
private $expires_at = null;
/**
* @var bool
*
* @ORM\Column(name="credentials_expired", type="boolean", nullable=true)
*/
private $credentials_expired = null;
/**
* @var DateTime
*
* @ORM\Column(name="credentials_expire_at", type="datetime", nullable=true)
*/
private $credentials_expire_at = null;
/**
* @ORM\OneToMany(targetEntity="FactoryUser", mappedBy="user")
*/
private $factoryUser;
/**
* @var string
*
* @ORM\Column(name="last_ip", type="string", length=130, nullable=true)
* options={"comment"="Последний IP юзера"}))
*/
private $lastIp;
/**
* @var string
*
* @ORM\Column(name="source", type="string", length=130, nullable=true)
* options={"comment"="Помечаем откуда пришел клиент"}))
*/
private $source;
/**
* @var string
*/
private $country;
/**
* @var string
*/
private $zip;
/**
* @var string|null
* @ORM\Column(name="social_network", type="string", length=130, nullable=true)
* options={"comment"="указываем какой соц.сеть"}))
*/
private $social_network;
/**
* @var string|null
* @ORM\Column(name="social_network_id", type="string", nullable=true)
* options={"comment"="id соц.сеть"}))
*/
private $social_network_id;
/**
* @var string
* @ORM\Column(name="google_id", type="string", nullable=true)
*/
private $google_id;
/**
* @var string
* @ORM\Column(name="fb_id", type="string", nullable=true,
* options={"comment"="facebook id соц.сеть"})
*/
private $fb_id;
/**
* @var string
* @ORM\Column(name="vk_id", type="string", nullable=true)
*/
private $vk_id;
/**
* @var string
* @ORM\Column(name="ig_id", type="string", nullable=true)
* options={"comment"="instagram id соц.сеть"})
*/
private $ig_id;
/**
* @var string
* @ORM\Column(name="test", type="boolean", nullable=true)
* options={"comment"="для проверки тестового функционала"})
*/
private $test;
/**
* Токен контакта на портале исправлен
*
* @var bool|null
* @ORM\Column(name="token_fixed", type="boolean", nullable=true)
*/
private $tokenFixed;
/**
* @var int|null
* @ORM\Column(name="bid", type="integer", nullable=true, options={"comment" = "ID привязанной фабрики"})
*/
private $bid;
/**
* @Groups("serialize")
* @ORM\Column(name="email", type="string", length=180, unique=true)
*/
private $email;
/**
* @ORM\Column(name="salt", type="string", nullable=true)
*/
private $salt;
/**
* @ORM\Column(name="review_request_sent", type="boolean", nullable=true)
*/
public ?bool $reviewRequestSent;
private $plainPassword;
/**
* @ORM\Column(name="username", type="string", length=180, nullable=true)
*/
private $username;
/**
* @ORM\Column(type="array")
*/
private array $roles = [];
/**
* @ORM\Column(type="boolean")
*/
private $enabled = true;
/**
* @ORM\Column(name="confirmation_token", type="string", length=180, nullable=true, unique=true)
*/
private $confirmationToken;
/**
* @ORM\Column(name="last_login", type="datetime", nullable=true)
*/
private $lastLogin;
/**
* @ORM\Column(name="password_requested_at", type="datetime", nullable=true)
*/
private $passwordRequestedAt;
/**
* Поле безопасности для нового сайта (БД используется одна и та же, поэтому добавляем изначально здесь)
*
* @ORM\Column(name="security_field", type="string", options={"default" = ""})
*/
private string $securityField = '';
/**
* @ORM\Column(name="created_at", type="datetime", nullable=true)
*/
private ?DateTime $createdAt;
/**
* @ORM\Column(name="is_legal_entity", type="boolean", nullable=true)
*/
private ?bool $isLegalEntity;
/**
* @ORM\Column(name="companyName", type="string", nullable=true)
*/
private ?string $companyName;
/**
* @ORM\Column(name="vatNumber", type="string", nullable=true)
*/
private ?string $vatNumber;
/**
* @ORM\Column(name="lang", type="string", nullable=true)
*/
private ?string $lang;
/**
* @return string
*/
public function getFactoriesCount()
{
return count($this->factories);
}
public function __construct()
{
$this->isActive = true;
$this->factories = new ArrayCollection();
$this->participants = new ArrayCollection();
$this->factoryUser = new ArrayCollection();
$this->transEx = new ArrayCollection();
$this->orderAddresses = new ArrayCollection();
$this->createdAt = new DateTime();
}
/**
* Get stringRoles.
*
* @return string
*/
public function getStringRoles()
{
return $this->roles ? implode(',', $this->roles) : '';
}
/**
* Get id.
*
* @return int|null
*/
public function getId(): ?int
{
return $this->id;
}
/**
* Set unid.
*
* @param string|null $unid
*
* @return User
*/
public function setUnid(?string $unid): User
{
$this->unid = $unid;
return $this;
}
/**
* Get unid.
*
* @return string
*/
public function getUnid()
{
return $this->unid;
}
/**
* Set unid.
*
* @param string|null $unid
*
* @return User
*/
public function setCorporateUnid(?string $unid): User
{
$this->corporateUnid = $unid;
return $this;
}
/**
* Get unid.
*
* @return ?string
*/
public function getCorporateUnid(): ?string
{
return $this->corporateUnid;
}
/**
* Set token.
*
* @param string $token
*
* @return User
*/
public function setToken($token): User
{
$this->token = $token;
return $this;
}
/**
* Get token.
*
* @return string
*/
public function getToken(): ?string
{
return $this->token;
}
/**
* Set isActive.
*
* @param bool $isActive
*
* @return User
*/
public function setIsActive($isActive): User
{
$this->isActive = $isActive;
return $this;
}
/**
* Get isActive.
*
* @return bool
*/
public function getIsActive(): bool
{
return $this->isActive;
}
/**
* Set alias.
*
* @param string $alias
*
* @return User
*/
public function setAlias(string $alias): User
{
$this->alias = $alias;
return $this;
}
/**
* Get alias.
* @Groups("serialize")
* @return string
*/
public function getAlias(): string
{
return $this->alias;
}
/**
* @return string
*/
public function getAliasOrEmail(): string
{
return $this->alias ? $this->getAlias() : $this->getEmail();
}
/**
* Set foreignAlias.
*
* @param string $foreignAlias
*
* @return User
*/
public function setForeignAlias($foreignAlias): User
{
$this->foreignAlias = $foreignAlias;
return $this;
}
/**
* Get foreignAlias.
*
* @return ?string
*/
public function getForeignAlias(): ?string
{
return $this->foreignAlias;
}
/**
* Get nameComment.
*
* @return ?string
*/
public function getNameComment(): ?string
{
return $this->foreignAlias ?: $this->alias;
}
/**
* {@inheritdoc}
*/
public function eraseCredentials()
{
}
/**
* @see Serializable::serialize()
*/
public function serialize()
{
return serialize([
$this->id,
$this->email,
$this->password,
// see section on salt below
$this->salt,
$this->username,
]);
}
/**
* @see \Serializable::unserialize()
*
* @param string $serialized
*/
public function unserialize($serialized)
{
[$this->id, $this->email, $this->password, // see section on salt below
$this->salt, $this->username,
] = unserialize($serialized);
}
public function setPassSalt($pass, $salt)
{
$this->password = $pass;
$this->salt = $salt;
}
public function isAccountNonExpired()
{
return true;
}
public function isAccountNonLocked()
{
return true;
}
public function isCredentialsNonExpired()
{
return true;
}
public function isEnabled()
{
return $this->enabled;
}
/**
* Добавил временно, т.к. по умолчанию сделано для всех, что активен
* как везде проставим нормально, то поправить на
* AdmBundle/Service/UsersService.php.
*
* @return bool
*/
public function isEnabledAlt()
{
return $this->enabled;
}
public function __toString()
{
return $this->alias ? $this->alias . '(' . $this->getUsername() . ')' : $this->getUsername();
}
/**
* @return mixed
*/
public function getFactories()
{
return $this->factories;
}
/**
* @param mixed $factories
*/
public function setFactories($factories)
{
$this->factories = $factories;
}
/**
* Set proved.
*
* @param bool $proved
*
* @return User
*/
public function setProved($proved)
{
$this->proved = $proved ? $proved : false;
return $this;
}
/**
* Get proved.
*
* @return bool
*/
public function getProved()
{
return $this->proved;
}
/**
* Add factory.
*
* @return User
*/
public function addFactory(Factory $factory)
{
$this->factories[] = $factory;
return $this;
}
/**
* Remove factory.
*/
public function removeFactory(Factory $factory)
{
$this->factories->removeElement($factory);
}
/**
* @return bool
*/
public function isChangePassword()
{
return $this->changePassword;
}
/**
* @param bool $changePassword
*/
public function setChangePassword($changePassword)
{
$this->changePassword = $changePassword;
}
/**
* @return string
*/
public function getPasswordRepeat()
{
return $this->passwordRepeat;
}
/**
* @param string $passwordRepeat
*/
public function setPasswordRepeat($passwordRepeat)
{
$this->passwordRepeat = $passwordRepeat;
}
/**
* @return string
*/
public function getPasswordNew()
{
return $this->passwordNew;
}
/**
* @param string $passwordNew
*/
public function setPasswordNew($passwordNew)
{
$this->passwordNew = $passwordNew;
}
/**
* @return string
*/
public function getPasswordOld()
{
return $this->passwordOld;
}
/**
* @param string $passwordOld
*/
public function setPasswordOld($passwordOld)
{
$this->passwordOld = $passwordOld;
}
/**
* @return ArrayCollection
*/
public function getParticipants()
{
return $this->participants;
}
/**
* Add participants.
*
* @return $this
*/
public function addParticipants(Participant $participants)
{
$this->participants[] = $participants;
return $this;
}
/**
* Remove participants.
*/
public function removeParticipants(Participant $participants)
{
$this->participants->removeElement($participants);
}
/**
* @return mixed
*/
public function getFactoryUser()
{
return $this->factoryUser;
}
/**
* @param mixed $factoryUser
*/
public function setFactoryUser($factoryUser)
{
$this->factoryUser = $factoryUser;
}
/**
* @param string $lastIp
*
* @return User
*/
public function setLastIp($lastIp = null)
{
$this->lastIp = $lastIp ? $lastIp : null;
return $this;
}
/**
* @return string
*/
public function getLastIp()
{
return $this->lastIp;
}
/**
* @return string
*/
public function getCountry()
{
return $this->country;
}
/**
* @param string $country
*/
public function setCountry($country)
{
$this->country = $country;
}
/**
* @return string
*/
public function getZip()
{
return $this->zip;
}
/**
* @param string $zip
*/
public function setZip($zip)
{
$this->zip = $zip;
}
/**
* @return string
*/
public function getSource()
{
return $this->source;
}
/**
* @param string|null $source
* @return $this
*/
public function setSource(?string $source): User
{
$this->source = $source;
return $this;
}
/**
* @return $this
*/
public function addTransEx(TransExEntity $transEx): User
{
if (!$this->transEx->contains($transEx)) {
$this->transEx->add($transEx);
$transEx->setAutor($this);
}
return $this;
}
public function removeTransEx(TransExEntity $transEx)
{
$this->transEx->removeElement($transEx);
}
/**
* @return \Doctrine\Common\Collections\Collection
*/
public function getTransEx()
{
return $this->transEx;
}
public function addOrderAddress(OrderAddress $orderAddress): User
{
$orderAddress->setUser($this);
$this->orderAddresses[] = $orderAddress;
return $this;
}
/**
* Remove orderAddress.
*/
public function removeOrderAddress(OrderAddress $orderAddress)
{
$this->orderAddresses->removeElement($orderAddress);
}
/**
* Get orderAddresses.
*
* @return ArrayCollection
*/
public function getOrderAddresses()
{
return $this->orderAddresses;
}
/**
* Set expired.
*
* @param bool|null $expired
*
* @return User
*/
public function setExpired($expired = null)
{
$this->expired = $expired;
return $this;
}
/**
* Get expired.
*
* @return bool|null
*/
public function getExpired()
{
return $this->expired;
}
/**
* Set expiresAt.
*
* @param DateTime|null $expiresAt
*
* @return User
*/
public function setExpiresAt($expiresAt = null)
{
$this->expires_at = $expiresAt;
return $this;
}
/**
* Get expiresAt.
*
* @return DateTime|null
*/
public function getExpiresAt()
{
return $this->expires_at;
}
/**
* Set credentialsExpired.
*
* @param bool|null $credentialsExpired
*
* @return User
*/
public function setCredentialsExpired($credentialsExpired = null)
{
$this->credentials_expired = $credentialsExpired;
return $this;
}
/**
* Get credentialsExpired.
*
* @return bool|null
*/
public function getCredentialsExpired()
{
return $this->credentials_expired;
}
/**
* Set credentialsExpireAt.
*
* @param DateTime|null $credentialsExpireAt
*
* @return User
*/
public function setCredentialsExpireAt($credentialsExpireAt = null)
{
$this->credentials_expire_at = $credentialsExpireAt;
return $this;
}
/**
* Get credentialsExpireAt.
*
* @return DateTime|null
*/
public function getCredentialsExpireAt()
{
return $this->credentials_expire_at;
}
/**
* Add participant.
*
* @return User
*/
public function addParticipant(Participant $participant)
{
$this->participants[] = $participant;
return $this;
}
/**
* Remove participant.
*
* @return bool TRUE if this collection contained the specified element, FALSE otherwise
*/
public function removeParticipant(Participant $participant)
{
return $this->participants->removeElement($participant);
}
/**
* Add factoryUser.
*
* @return User
*/
public function addFactoryUser(FactoryUser $factoryUser)
{
$this->factoryUser[] = $factoryUser;
return $this;
}
/**
* Remove factoryUser.
*
* @return bool TRUE if this collection contained the specified element, FALSE otherwise
*/
public function removeFactoryUser(FactoryUser $factoryUser)
{
return $this->factoryUser->removeElement($factoryUser);
}
/**
* Set lotusName.
*
* @param string|null $lotusName
*
* @return User
*/
public function setLotusName($lotusName = null)
{
$this->lotusName = $lotusName;
return $this;
}
/**
* Get lotusName.
*
* @return string|null
*/
public function getLotusName()
{
return $this->lotusName;
}
/**
* @return array|mixed|string
*/
public function getContactWorkGroup()
{
$oMemcache = App::getMemcache();
$keyCache = 'contact_work_group-' . $this->username;
$data = $oMemcache->get($keyCache);
if (!$data) {
$portal = App::getContainer()->get('portal');
$result = $portal->getContactWorkGroup($this->username);
if (!empty($result['success']) and $result['success']) {
$data = $result['result'];
$positionRu = !empty($data['workGroup']) ? $data['workGroup'] : null;
$positionEn = $data['workGroupEng'];
$oMemcache->set($keyCache, $data, MEMCACHE_COMPRESSED, (int) TimeConstant::HOUR * 8);
}
}
$positionRu = !empty($data['workGroup']) ? $data['workGroup'] : null;
$position = (is_array($positionRu) and !empty($positionRu['0'])) ? $positionRu['0'] : null;
return $position;
}
/**
* Get alias.
*
* @return string
*/
public function getAliasJob()
{
$alias = explode(' ', $this->alias);
$out = $this->alias;
if ($alias and is_array($alias)) {
$out = (!empty($alias['0']) ? $alias['0'] : null) . ' ' . (!empty($alias['1']) ? $alias['1'] : null);
}
return $out;
}
public function setSocialNetwork(string $social_network)
{
$this->social_network = $social_network;
return $this;
}
public function getSocialNetwork(): ?string
{
return $this->social_network;
}
public function setSocialNetworkId(string $social_network_id)
{
$this->social_network_id = $social_network_id;
return $this;
}
public function getSocialNetworkId(): ?string
{
return $this->social_network_id;
}
public function setGoogleId(string $google_id): User
{
$this->google_id = $google_id;
return $this;
}
public function getGoogleId(): ?string
{
return $this->google_id;
}
public function setFbId(string $fb_id): User
{
$this->fb_id = $fb_id;
return $this;
}
public function getFbId(): ?string
{
return $this->fb_id;
}
public function setVkId(string $vk_id): User
{
$this->vk_id = $vk_id;
return $this;
}
public function getVkId(): ?string
{
return $this->vk_id;
}
public function setIgId(string $ig_id): User
{
$this->ig_id = $ig_id;
return $this;
}
public function getIgId(): ?string
{
return $this->ig_id;
}
public function setTest(bool $test): User
{
$this->test = $test;
return $this;
}
/**
* @return bool|null
*/
public function getTest()
{
return $this->test;
}
public function getTokenFixed(): bool
{
return (bool) $this->tokenFixed;
}
public function setTokenFixed(?bool $tokenFixed): void
{
$this->tokenFixed = (bool) $tokenFixed;
}
public function getBid(): ?int
{
return $this->bid;
}
public function setBid(?int $bid): User
{
$this->bid = $bid;
return $this;
}
public function isEqualTo(UserInterface $user)
{
return $this->id === $user->getId();
}
/**
* @return string
*/
public function getPassword(): string
{
return $this->password;
}
/**
* @param string $password
*/
public function setPassword(string $password): void
{
$this->password = $password;
}
public function getSalt()
{
return $this->salt;
}
public function getUsername(): string
{
if (UserHelper::isEmployee($this->email)) {
return (string) $this->username;
}
return (string) $this->email;
}
public function getUserIdentifier(): string
{
return (string) $this->email;
}
/**
* @return mixed
*/
public function getPlainPassword()
{
return $this->plainPassword;
}
/**
* @param mixed $plainPassword
*/
public function setPlainPassword($plainPassword): self
{
$this->plainPassword = $plainPassword;
return $this;
}
/**
* @return mixed
*/
public function getEmail()
{
return $this->email;
}
/**
* @param mixed $email
*/
public function setEmail(string $email): self
{
$encoding = mb_detect_encoding($email);
$email = $encoding
? mb_convert_case($email, MB_CASE_LOWER, $encoding)
: mb_convert_case($email, MB_CASE_LOWER);
$this->email = $email;
return $this;
}
/**
* @param mixed $username
* @throws Exception
*/
public function setUsername($username): User
{
if (empty($this->email)) {
throw new Exception('Email пользователя необходимо устанавливать до установки username, чтоб можно было выполнить проверку isEmployee() при установке username.');
}
if (!UserHelper::isEmployee((string) $this->email)) {
$this->username = null;
return $this;
}
if ((null === $username || '' === $username) && UserHelper::isEmployee((string) $this->email)) {
return $this;
}
$this->username = $username;
return $this;
}
/**
* @return mixed
*/
public function getConfirmationToken()
{
return $this->confirmationToken;
}
/**
* @param mixed $confirmationToken
*/
public function setConfirmationToken($confirmationToken): void
{
$this->confirmationToken = $confirmationToken;
}
/**
* @param mixed $salt
*/
public function setSalt($salt): void
{
$this->salt = $salt;
}
public function getRoles()
{
$roles = $this->roles;
// we need to make sure to have at least one role
$roles[] = static::ROLE_DEFAULT;
return array_values(array_unique($roles));
}
public function hasRole($role): bool
{
return in_array(strtoupper($role), $this->getRoles(), true);
}
public function isSuperAdmin(): bool
{
return $this->hasRole('ROLE_SUPER_ADMIN');
}
public function removeRole($role)
{
if (false !== $key = array_search(strtoupper($role), $this->roles, true)) {
unset($this->roles[$key]);
$this->roles = array_values($this->roles);
}
return $this;
}
public function setRoles(array $roles)
{
$this->roles = [];
foreach ($roles as $role) {
$this->addRole($role);
}
return $this;
}
public function addRole($role)
{
$role = strtoupper($role);
if ($role === static::ROLE_DEFAULT) {
return $this;
}
if (!in_array($role, $this->roles, true)) {
$this->roles[] = $role;
}
return $this;
}
/**
* @return mixed
*/
public function getLastLogin()
{
return $this->lastLogin;
}
/**
* @param mixed $lastLogin
*/
public function setLastLogin($lastLogin): void
{
$this->lastLogin = $lastLogin;
}
/**
* @return mixed
*/
public function getPasswordRequestedAt()
{
return $this->passwordRequestedAt;
}
/**
* @param mixed $passwordRequestedAt
*/
public function setPasswordRequestedAt($passwordRequestedAt): void
{
$this->passwordRequestedAt = $passwordRequestedAt;
}
/**
* @param bool $enabled
*/
public function setEnabled(bool $enabled): void
{
$this->enabled = $enabled;
}
/**
* @throws Exception
*/
public function getMainRecipientAddress(): OrderAddress
{
if ($this->orderAddresses->count() === 0) {
$orderAddress = new OrderAddress();
$orderAddress->setIsMainRecipient(true);
$orderAddress->setToken($this->token ?: UserHelper::getInstance()->getToken());
$this->addOrderAddress($orderAddress);
return $orderAddress;
}
foreach ($this->orderAddresses as $orderAddress) {
if ($orderAddress->isMainRecipient()) {
return $orderAddress;
}
}
//Если ни один из адресов не является главным - возвращаем первый из них
/** @var OrderAddress $orderAddress */
$orderAddress = $this->orderAddresses->first();
$orderAddress->setIsMainRecipient(true);
return $orderAddress;
}
/**
* @Groups("serialize")
*/
public function getSex(): ?int
{
if (!empty($this->orderAddresses) && $this->orderAddresses->count() > 0) {
foreach ($this->orderAddresses as $orderAddress) {
if ($orderAddress->getSex() !== null) {
return $orderAddress->getSex();
}
}
}
return null;
}
/**
* @return DateTime|null
*/
public function getCreatedAt(): ?DateTime
{
return $this->createdAt;
}
/**
* @param DateTime|null $createdAt
*/
public function setCreatedAt(?DateTime $createdAt): void
{
$this->createdAt = $createdAt;
}
/**
* @return bool|null
*/
public function getIsLegalEntity(): ?bool
{
return $this->isLegalEntity;
}
/**
* @param bool|null $isLegalEntity
*/
public function setIsLegalEntity(?bool $isLegalEntity): void
{
$this->isLegalEntity = $isLegalEntity;
}
public function getDeliveryAddresses(): ?\Generator
{
foreach ($this->orderAddresses as $address) {
/** @var OrderAddress $address */
if ($address->isDelivery()) {
yield $address;
}
}
return null;
}
public function getPaymentAddress(): ?OrderAddress
{
/** @var OrderAddress $address */
foreach ($this->orderAddresses as $address) {
if ($address->isPayment()) {
return $address;
}
}
return null;
}
/**
* @return string|null
*/
public function getLang(): ?string
{
return $this->lang;
}
/**
* @param string|null $lang
*/
public function setLang(string $lang = 'en'): self
{
$this->lang = $lang;
return $this;
}
/**
* @param string $securityField
*/
public function setSecurityField(string $securityField): void
{
$this->securityField = $securityField;
}
}