<?php
namespace App\Entity;
use AllowDynamicProperties;
use App\Entity\ObjectValue\MainAccountInformation;
use App\Manager\DonneeCompteClientManager;
use App\Entity\WateringTips\WateringTips;
use App\Security\RoleInterface;
use App\Validator\Constraints\ValidSwiftMailerEmail;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* @ORM\Entity(repositoryClass="App\Repository\App\UserRepository")
* @UniqueEntity(
* fields={"email"},
* message="my_profile.form.email.already_taken"
* )
* @ORM\Table(
* name="`User`",
* uniqueConstraints={@ORM\UniqueConstraint(name="email", columns={"email"})}
* )
*/
#[AllowDynamicProperties]
class User implements UserInterface
{
public const TYPE_MAIN = 'main';
public const TYPE_CONTACT = 'contact';
public const TYPE_GUEST = 'guest';
public const TYPE_BIG_ACCOUNT = 'GRAND COMPTE';
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*
* @var int
*/
protected $id;
/**
* @ORM\Column(type="string")
*
* @var string
*/
protected $type = User::TYPE_CONTACT;
/**
* @ORM\Column(type="decimal", precision=18, scale=0, nullable=false)
*
* @var int
*/
protected $customerNumber;
/**
* @ORM\Column(type="string")
*
* @var string
*/
protected $password;
/**
* @ORM\Column(type="string", nullable=true)
* @ValidSwiftMailerEmail
*
* @var string
*/
protected $email;
/**
* @ORM\Column(type="string", nullable=true)
* @ValidSwiftMailerEmail
*
* @var string
*/
protected $newEmail;
/**
* @ORM\Column(type="string", nullable=true)
*
* @var ?string
*/
protected $emailUpdateToken;
/**
* @ORM\Column(type="boolean")
*
* @var bool
*/
protected $activated = false;
/**
* @ORM\Column(type="datetime", nullable=true)
*
* @var \DateTime
*/
protected $initializationDate;
/**
* @ORM\Column(type="datetime", nullable=true)
*
* @var \DateTime
*/
protected $activationDate;
/**
* @ORM\Column(type="datetime", nullable=true)
*
* @var \DateTime
*/
protected $lastConnexionDate;
/**
* @ORM\Column(type="boolean")
*
* @var bool
*/
protected $newsletter = false;
/**
* @ORM\Column(type="boolean")
*
* @var bool
*/
protected $waterQualityAnalysis = false;
/**
* @ORM\Column(type="boolean")
*
* @var bool
*/
protected $monthlyConsumption = false;
/**
* @ORM\Column(type="string", nullable=true)
*
* @var ?string
*/
protected $passwordCreationToken;
/**
* @ORM\Column(type="string", nullable=true)
*
* @var ?string
*/
protected $picture;
/**
* @ORM\OneToMany(targetEntity="App\Entity\User", mappedBy="mainAccount")
*
* var array
*/
protected $contacts;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="contacts")
* @ORM\JoinColumn(name="main_account_id", referencedColumnName="id")
*
* @var User
*/
protected $mainAccount;
/**
* @ORM\OneToOne(targetEntity="App\Entity\Contact", cascade={"persist", "remove"})
* @ORM\JoinColumn(name="contact_information_id", referencedColumnName="id")
*
* @var Contact
*/
protected $contactInformation;
/** @var string */
protected $civility;
/** @var string */
protected $firstName;
/** @var string */
protected $lastName;
/** @var string */
protected $connexionId;
/** @var string */
protected $pictureUrl;
/** @var array */
protected $roles = [RoleInterface::ROLE_USER];
/** @var MainAccountInformation */
protected $mainAccountInformation;
/** @var DonneeCompteClient|null $donneeCompteClientManager */
protected DonneeCompteClient|null $donneeCompteClientManager;
/**
* @ORM\OneToMany(targetEntity=SuiviConsoActivation::class, mappedBy="customer", orphanRemoval=true)
*/
private $suiviConsoActivations;
/**
* @var Collection<WateringTips>
* @ORM\OneToMany(
* targetEntity="App\Entity\WateringTips\WateringTips",
* mappedBy="user",
* cascade={"remove"},
* orphanRemoval=true
* )
*/
private $wateringTips;
public function __construct()
{
$this->suiviConsoActivations = new ArrayCollection();
$this->wateringTips = new ArrayCollection();
}
public function getRoles(): array
{
return $this->roles;
}
/**
* @return User
*/
public function addRole(string $role): self
{
$this->roles[] = $role;
return $this;
}
/**
* @return User
*/
public function addRoles(array $roles): self
{
foreach ($roles as $role) {
if (is_string($role)) {
$this->addRole($role);
}
}
return $this;
}
public function hasRole(string $role): bool
{
return in_array($role, $this->roles);
}
public function getPassword(): string
{
return $this->password;
}
/**
* @return null|string
*/
public function getSalt(): string
{
return '';
}
public function getUsername(): string
{
return $this->lastName . ' ' . $this->firstName;
}
public function eraseCredentials(): void
{
}
public function getId(): int
{
return $this->id;
}
public function setId(int $id): User
{
$this->id = $id;
return $this;
}
public function getType(): string
{
return $this->type;
}
public function setType(string $type): User
{
$this->type = $type;
return $this;
}
public function getCustomerNumber(): ?int
{
return $this->customerNumber;
}
/**
* @return User
*/
public function setCustomerNumber(int $customerNumber): self
{
$this->customerNumber = $customerNumber;
return $this;
}
/**
* @return User
*/
public function setPassword(string $password): self
{
$this->password = $password;
return $this;
}
public function getEmail(): ?string
{
return $this->email;
}
/**
* @param string $email
*
* @return User
*/
public function setEmail(?string $email): self
{
$this->email = $email;
return $this;
}
public function getNewEmail(): ?string
{
return $this->newEmail;
}
/**
* @param string $newEmail
*
* @return User
*/
public function setNewEmail(?string $newEmail): self
{
$this->newEmail = $newEmail;
return $this;
}
public function getEmailUpdateToken(): ?string
{
return $this->emailUpdateToken;
}
/**
* @param string $emailUpdateToken
*
* @return User
*/
public function setEmailUpdateToken(?string $emailUpdateToken): self
{
$this->emailUpdateToken = $emailUpdateToken;
return $this;
}
public function getInitializationDate(): \DateTime
{
return $this->initializationDate;
}
/**
* @return User
*/
public function setInitializationDate(\DateTime $initializationDate): self
{
$this->initializationDate = $initializationDate;
return $this;
}
public function getActivationDate(): ?\DateTime
{
return $this->activationDate;
}
/**
* @return User
*/
public function setActivationDate(?\DateTime $activationDate): self
{
$this->activationDate = $activationDate;
return $this;
}
public function getLastConnexionDate(): ?\DateTime
{
return $this->lastConnexionDate;
}
/**
* @return User
*/
public function setLastConnexionDate(?\DateTime $lastConnexionDate): self
{
$this->lastConnexionDate = $lastConnexionDate;
return $this;
}
public function getPasswordCreationToken(): ?string
{
return $this->passwordCreationToken;
}
/**
* @return User
*/
public function setPasswordCreationToken(?string $token): self
{
$this->passwordCreationToken = $token;
return $this;
}
public function getContactInformation(): ?Contact
{
return $this->contactInformation;
}
/**
* @return User
*/
public function setContactInformation(Contact $contactInformation): self
{
$this->contactInformation = $contactInformation;
return $this;
}
/**
* @return mixed
*/
public function getContacts()
{
return $this->contacts;
}
/**
* @param mixed $contacts
*
* @return User
*/
public function setContacts($contacts)
{
$this->contacts = $contacts;
return $this;
}
public function getMainAccount(): ?User
{
return $this->mainAccount;
}
public function setMainAccount(User $mainAccount): User
{
$this->mainAccount = $mainAccount;
return $this;
}
public function getCivility(): ?string
{
return $this->civility;
}
/**
* @return User
*/
public function setCivility(?string $civility): self
{
$this->civility = $civility;
return $this;
}
public function getFirstName(): ?string
{
return $this->firstName;
}
/**
* @return User
*/
public function setFirstName(?string $firstName): self
{
$this->firstName = $firstName;
return $this;
}
public function getLastName(): ?string
{
return $this->lastName;
}
/**
* @return User
*/
public function setLastName(?string $lastName): self
{
$this->lastName = $lastName;
return $this;
}
public function getConnexionId(): ?string
{
return $this->connexionId;
}
/**
* @return User
*/
public function setConnexionId(?string $connexionId): self
{
$this->connexionId = $connexionId;
return $this;
}
public function hasNewsletter(): bool
{
return $this->newsletter;
}
/**
* @return User
*/
public function setNewsletter(bool $newsletter): self
{
$this->newsletter = $newsletter;
return $this;
}
public function hasWaterQualityAnalysis(): bool
{
return $this->waterQualityAnalysis;
}
public function setWaterQualityAnalysis(bool $waterQualityAnalysis): self
{
$this->waterQualityAnalysis = $waterQualityAnalysis;
return $this;
}
public function hasMonthlyConsumption(): bool
{
return $this->monthlyConsumption;
}
public function setMonthlyConsumption(bool $monthlyConsumption): self
{
$this->monthlyConsumption = $monthlyConsumption;
return $this;
}
public function isActivated(): bool
{
return $this->activated;
}
/**
* @return User
*/
public function setActivated(bool $activated): self
{
$this->activated = $activated;
return $this;
}
public function getPicture(): ?string
{
return $this->picture;
}
/**
* @return User
*/
public function setPicture(?string $picture): self
{
$this->picture = $picture;
return $this;
}
public function getPictureUrl(): ?string
{
return $this->pictureUrl;
}
/**
* @return User
*/
public function setPictureUrl(?string $pictureUrl): self
{
$this->pictureUrl = $pictureUrl;
return $this;
}
public function getMainAccountInformation(): ?MainAccountInformation
{
return $this->mainAccountInformation;
}
public function setMainAccountInformation(MainAccountInformation $mainAccountInformation): User
{
$this->mainAccountInformation = $mainAccountInformation;
return $this;
}
public function isMainAccount(): bool
{
return User::TYPE_MAIN === $this->type;
}
public function isGuest(): bool
{
return User::TYPE_GUEST === $this->type;
}
public function isContact(): bool
{
return User::TYPE_CONTACT === $this->type;
}
/**
* @return Collection|SuiviConsoActivation[]
*/
public function getSuiviConsoActivations(): Collection
{
return $this->suiviConsoActivations;
}
public function addSuiviConsoActivation(SuiviConsoActivation $suiviConsoActivation): self
{
if (!$this->suiviConsoActivations->contains($suiviConsoActivation)) {
$this->suiviConsoActivations[] = $suiviConsoActivation;
$suiviConsoActivation->setCustomer($this);
}
return $this;
}
public function removeSuiviConsoActivation(SuiviConsoActivation $suiviConsoActivation): self
{
if ($this->suiviConsoActivations->removeElement($suiviConsoActivation)) {
// set the owning side to null (unless already changed)
if ($suiviConsoActivation->getCustomer() === $this) {
$suiviConsoActivation->setCustomer(null);
}
}
return $this;
}
public function getDonneeCompteClient(): DonneeCompteClient|null
{
return $this->donneeCompteClient ?? null;
}
public function setDonneeCompteClient(DonneeCompteClient|null $donneeCompteClient): User
{
$this->donneeCompteClient = $donneeCompteClient;
return $this;
}
public function getFullname(): string
{
return $this->lastName . ' ' . $this->firstName;
}
}