src/Entity/User.php line 17

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Entity\{UserTimestampableTrait};
  4. use App\Repository\UserRepository;
  5. use Doctrine\Common\Collections\ArrayCollection;
  6. use Doctrine\Common\Collections\Collection;
  7. use Doctrine\ORM\Mapping as ORM;
  8. use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
  9. use Symfony\Component\Security\Core\User\UserInterface;
  10. use Symfony\Component\Validator\Constraints as Assert;
  11. /**
  12.  * @ORM\Entity(repositoryClass=UserRepository::class)
  13.  */
  14. class User implements UserInterfacePasswordAuthenticatedUserInterface
  15. {
  16.     use TimestampableTrait;
  17.     const ACTIVE 'active';
  18.     const INACTIVE 'inactive';
  19.     const PENDING_CONFIRMATION 'pending confirmation';
  20.     const AWAITING_DOCUMENTS 'awaiting documents';
  21.     const PENDING_RYVUP 'pending ryvup verification';
  22.     const DECLINED_RYVUP 'declined by ryvup';
  23.     /**
  24.      * @ORM\Id
  25.      * @ORM\GeneratedValue
  26.      * @ORM\Column(type="integer")
  27.      */
  28.     private $id;
  29.     /**
  30.      * @ORM\Column(type="string", length=20, nullable=true)
  31.      */
  32.     private $civility;
  33.     /**
  34.      * @ORM\Column(type="string", length=60)
  35.      */
  36.     private $lastname;
  37.     /**
  38.      * @ORM\Column(type="string", length=60)
  39.      */
  40.     private $firstname;
  41.     /**
  42.      * @ORM\Column(type="string", length=180, unique=true)
  43.      */
  44.     private $email;
  45.     /**
  46.      * @ORM\Column(type="json")
  47.      */
  48.     private $roles = [];
  49.     
  50.     /**
  51.      * @var string The hashed password
  52.      * @ORM\Column(type="string", nullable=true)
  53.      */
  54.     private $password;
  55.     /**
  56.      * @ORM\Column(type="string")
  57.      */
  58.     private $status;
  59.     /**
  60.      * @ORM\Column(type="datetime", nullable=true)
  61.      */
  62.     private $latestLogin;
  63.     /**
  64.      * @ORM\Column(type="string", length=255, nullable=true)
  65.      */
  66.     private $avatar;
  67.     /**
  68.      * @Assert\Image(maxSize="2M")
  69.      */
  70.     private $fileAvatar;
  71.     /**
  72.      * @ORM\OneToOne(targetEntity=Client::class, mappedBy="user", cascade={"persist", "remove"})
  73.      */
  74.     private $client;
  75.     /**
  76.      * @ORM\OneToOne(targetEntity=Transporteur::class, mappedBy="user", cascade={"persist", "remove"})
  77.      */
  78.     private $transporteur;
  79.     /**
  80.      * @ORM\OneToOne(targetEntity=Collaborateur::class, mappedBy="user", cascade={"persist", "remove"})
  81.      */
  82.     private $collaborateur;
  83.     /**
  84.      * @ORM\OneToMany(targetEntity=Devis::class, mappedBy="user", cascade={"remove"}, orphanRemoval=true)
  85.      */
  86.     private $devis;
  87.     /**
  88.      * @ORM\Column(type="float")
  89.      */
  90.     private $creditBalance 0.00;
  91.     /**
  92.      * @ORM\OneToMany(targetEntity=CreditTransaction::class, mappedBy="user", orphanRemoval=true)
  93.      */
  94.     private $creditTransactions;
  95.     /**
  96.      * @ORM\OneToMany(targetEntity=Invoice::class, mappedBy="user", orphanRemoval=true)
  97.      */
  98.     private $invoices;
  99.     public function __construct()
  100.     {
  101.         $this->devis = new ArrayCollection();
  102.         $this->creditTransactions = new ArrayCollection();
  103.         $this->invoices = new ArrayCollection();
  104.     }
  105.     public function preUpdate()
  106.     {
  107.         $this->lastname ucwords(strtolower($this->lastname));
  108.         $this->firstname ucwords(strtolower($this->firstname));
  109.         $this->email strtolower($this->email);
  110.     }
  111.     public function getId(): ?int
  112.     {
  113.         return $this->id;
  114.     }
  115.     public function getCivility(): ?string
  116.     {
  117.         return $this->civility;
  118.     }
  119.     public function setCivility(string $civility): self
  120.     {
  121.         $this->civility $civility;
  122.         return $this;
  123.     }
  124.     public function getLastname(): ?string
  125.     {
  126.         return $this->lastname;
  127.     }
  128.     public function setLastname(string $lastname): self
  129.     {
  130.         $this->lastname $lastname;
  131.         return $this;
  132.     }
  133.     public function getFirstname(): ?string
  134.     {
  135.         return $this->firstname;
  136.     }
  137.     public function setFirstname(string $firstname): self
  138.     {
  139.         $this->firstname $firstname;
  140.         return $this;
  141.     }
  142.     public function getEmail(): ?string
  143.     {
  144.         return $this->email;
  145.     }
  146.     public function setEmail(string $email): self
  147.     {
  148.         $this->email $email;
  149.         return $this;
  150.     }
  151.     /**
  152.      * A visual identifier that represents this user.
  153.      *
  154.      * @see UserInterface
  155.      */
  156.     public function getUserIdentifier(): string
  157.     {
  158.         return (string) $this->email;
  159.     }
  160.     /**
  161.      * @deprecated since Symfony 5.3, use getUserIdentifier instead
  162.      */
  163.     public function getUsername(): string
  164.     {
  165.         return (string) $this->email;
  166.     }
  167.     /**
  168.      * @see UserInterface
  169.      */
  170.     public function getRoles(): array
  171.     {
  172.         $roles $this->roles;
  173.         // guarantee every user at least has ROLE_USER
  174.         $roles[] = 'ROLE_USER';
  175.         return array_unique($roles);
  176.     }
  177.     public function setRoles(array $roles): self
  178.     {
  179.         $this->roles $roles;
  180.         return $this;
  181.     }
  182.     /**
  183.      * @see PasswordAuthenticatedUserInterface
  184.      */
  185.     public function getPassword(): string
  186.     {
  187.         return $this->password;
  188.     }
  189.     public function setPassword(string $password): self
  190.     {
  191.         $this->password $password;
  192.         return $this;
  193.     }
  194.     
  195.     public function isStatus(): ?string
  196.     {
  197.         return $this->status;
  198.     }
  199.     public function setStatus(string $status): self
  200.     {
  201.         $this->status $status;
  202.         return $this;
  203.     }
  204.     public function getLatestLogin(): ?\DateTimeInterface
  205.     {
  206.         return $this->latestLogin;
  207.     }
  208.     public function setLatestLogin(?\DateTimeInterface $latestLogin): self
  209.     {
  210.         $this->latestLogin $latestLogin;
  211.         return $this;
  212.     }
  213.     public function getAvatar(): ?string
  214.     {
  215.         return $this->avatar;
  216.     }
  217.     public function setAvatar(?string $avatar): self
  218.     {
  219.         $this->avatar $avatar;
  220.         return $this;
  221.     }
  222.     public function getFileAvatar()
  223.     {
  224.         return $this->fileAvatar;
  225.     }
  226.     public function setFileAvatar($fileAvatar)
  227.     {
  228.         $this->fileAvatar $fileAvatar;
  229.         return $this;
  230.     }
  231.     public function getStatus(): ?string
  232.     {
  233.         return $this->status;
  234.     }
  235.     
  236.     /**
  237.      * Returning a salt is only needed, if you are not using a modern
  238.      * hashing algorithm (e.g. bcrypt or sodium) in your security.yaml.
  239.      *
  240.      * @see UserInterface
  241.      */
  242.     public function getSalt(): ?string
  243.     {
  244.         return null;
  245.     }
  246.     /**
  247.      * @see UserInterface
  248.      */
  249.     public function eraseCredentials()
  250.     {
  251.         // If you store any temporary, sensitive data on the user, clear it here
  252.         // $this->plainPassword = null;
  253.     }
  254.     public function getClient(): ?Client
  255.     {
  256.         return $this->client;
  257.     }
  258.     public function setClient(?Client $client): self
  259.     {
  260.         // unset the owning side of the relation if necessary
  261.         if ($client === null && $this->client !== null) {
  262.             $this->client->setUser(null);
  263.         }
  264.         // set the owning side of the relation if necessary
  265.         if ($client !== null && $client->getUser() !== $this) {
  266.             $client->setUser($this);
  267.         }
  268.         $this->client $client;
  269.         return $this;
  270.     }
  271.     public function getTransporteur(): ?Transporteur
  272.     {
  273.         return $this->transporteur;
  274.     }
  275.     public function setTransporteur(?Transporteur $transporteur): self
  276.     {
  277.         // unset the owning side of the relation if necessary
  278.         if ($transporteur === null && $this->transporteur !== null) {
  279.             $this->transporteur->setUser(null);
  280.         }
  281.         // set the owning side of the relation if necessary
  282.         if ($transporteur !== null && $transporteur->getUser() !== $this) {
  283.             $transporteur->setUser($this);
  284.         }
  285.         $this->transporteur $transporteur;
  286.         return $this;
  287.     }
  288.     public function getCollaborateur(): ?Collaborateur
  289.     {
  290.         return $this->collaborateur;
  291.     }
  292.     public function setCollaborateur(?Collaborateur $collaborateur): self
  293.     {
  294.         // unset the owning side of the relation if necessary
  295.         if ($collaborateur === null && $this->collaborateur !== null) {
  296.             $this->collaborateur->setUser(null);
  297.         }
  298.         // set the owning side of the relation if necessary
  299.         if ($collaborateur !== null && $collaborateur->getUser() !== $this) {
  300.             $collaborateur->setUser($this);
  301.         }
  302.         $this->collaborateur $collaborateur;
  303.         return $this;
  304.     }
  305.     /**
  306.      * @return Collection<int, Devis>
  307.      */
  308.     public function getDevis(): Collection
  309.     {
  310.         return $this->devis;
  311.     }
  312.     public function addDevi(Devis $devi): self
  313.     {
  314.         if (!$this->devis->contains($devi)) {
  315.             $this->devis[] = $devi;
  316.             $devi->setUser($this);
  317.         }
  318.         return $this;
  319.     }
  320.     public function removeDevi(Devis $devi): self
  321.     {
  322.         if ($this->devis->removeElement($devi)) {
  323.             // set the owning side to null (unless already changed)
  324.             if ($devi->getUser() === $this) {
  325.                 $devi->setUser(null);
  326.             }
  327.         }
  328.         return $this;
  329.     }
  330.     public function getCreditBalance(): ?float
  331.     {
  332.         return $this->creditBalance;
  333.     }
  334.     public function setCreditBalance(float $creditBalance): self
  335.     {
  336.         $this->creditBalance $creditBalance;
  337.         return $this;
  338.     }
  339.     public function debitCredits(int $credits): bool
  340.     {
  341.         if ($this->creditBalance >= $credits) {
  342.             $this->creditBalance -= $credits;
  343.             return true;
  344.         }
  345.         return false;
  346.     }
  347.     public function rechargeCredits(int $credits): self
  348.     {
  349.         $this->creditBalance += $credits;
  350.         
  351.         return $this;
  352.     }
  353.     /**
  354.      * @return Collection<int, CreditTransaction>
  355.      */
  356.     public function getCreditTransactions(): Collection
  357.     {
  358.         return $this->creditTransactions;
  359.     }
  360.     public function addCreditTransaction(CreditTransaction $creditTransaction): self
  361.     {
  362.         if (!$this->creditTransactions->contains($creditTransaction)) {
  363.             $this->creditTransactions[] = $creditTransaction;
  364.             $creditTransaction->setUser($this);
  365.         }
  366.         return $this;
  367.     }
  368.     public function removeCreditTransaction(CreditTransaction $creditTransaction): self
  369.     {
  370.         if ($this->creditTransactions->removeElement($creditTransaction)) {
  371.             // set the owning side to null (unless already changed)
  372.             if ($creditTransaction->getUser() === $this) {
  373.                 $creditTransaction->setUser(null);
  374.             }
  375.         }
  376.         return $this;
  377.     }
  378.     /**
  379.      * @return Collection<int, Invoice>
  380.      */
  381.     public function getInvoices(): Collection
  382.     {
  383.         return $this->invoices;
  384.     }
  385.     public function addInvoice(Invoice $invoice): self
  386.     {
  387.         if (!$this->invoices->contains($invoice)) {
  388.             $this->invoices[] = $invoice;
  389.             $invoice->setUser($this);
  390.         }
  391.         return $this;
  392.     }
  393.     public function removeInvoice(Invoice $invoice): self
  394.     {
  395.         if ($this->invoices->removeElement($invoice)) {
  396.             // set the owning side to null (unless already changed)
  397.             if ($invoice->getUser() === $this) {
  398.                 $invoice->setUser(null);
  399.             }
  400.         }
  401.         return $this;
  402.     }
  403. }