<?php
namespace App\Entity;
use App\Repository\PointOfSaleRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation as Serializer;
use JMS\Serializer\Annotation\Expose;
use JMS\Serializer\Annotation\Groups;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* @ORM\Entity(repositoryClass=PointOfSaleRepository::class)
*
* @UniqueEntity("code")
*
* @Serializer\ExclusionPolicy("ALL")
*/
class PointOfSale
{
/**
* Identifiant unique
*
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*
* @Expose
* @Groups({"export_point_of_sale_datatable", "point_of_sale","point_sale"})
*/
private ?int $id = NULL;
/**
* Code
*
* @ORM\Column(type="string", length=10, unique=true)
*
* @Expose
* @Groups({"export_point_of_sale_datatable", "point_of_sale", "user"})
*/
private ?string $code = NULL;
/**
* Nom
*
* @ORM\Column(type="string", length=255)
*
* @Expose
* @Groups({"export_point_of_sale_datatable", "point_of_sale", "user"})
*/
private ?string $name = NULL;
/**
* Ville
*
* @ORM\Column(type="string", length=255)
*
* @Expose
* @Groups({ "export_point_of_sale_datatable", "point_of_sale", "user"})
*/
private ?string $city = NULL;
/**
* Actif / Inactif
*
* @ORM\Column(type="boolean", options={"default":true})
*
* @Expose
* @Groups({ "export_point_of_sale_datatable", "point_of_sale"})
*/
private ?bool $enabled = TRUE;
/**
* Utilisateur dans le point de vente
*
* @ORM\OneToMany(targetEntity=User::class, mappedBy="pointOfSale")
* @Expose
* @Groups({"point_of_sale"})
*/
private Collection $users;
/**
* Utilisateurs qui gèrent le point de vente
*
* @ORM\ManyToMany(targetEntity=User::class, inversedBy="managedPointOfSales")
*/
private Collection $managers;
/**
* @ORM\ManyToOne(targetEntity=User::class, inversedBy="createdPointOfSales")
*
* @Expose
* @Groups({"point_of_sale"})
*/
private ?User $createdBy = NULL;
/**
* @ORM\OneToOne(targetEntity=PointOfSaleAddress::class, cascade={"persist", "remove"})
*/
private ?PointOfSaleAddress $address = NULL;
public function __construct()
{
$this->users = new ArrayCollection();
$this->managers = new ArrayCollection();
}
public function __toString()
{
return $this->getCode();
}
public function getId(): ?int
{
return $this->id;
}
public function getCode(): ?string
{
return $this->code;
}
public function setCode(string $code): self
{
$this->code = $code;
return $this;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
public function getCity(): ?string
{
return $this->city;
}
public function setCity(string $city): self
{
$this->city = $city;
return $this;
}
/**
* @return Collection<int, User>
*/
public function getUsers(): Collection
{
return $this->users;
}
public function addUser(User $user): self
{
if (!$this->users->contains($user)) {
$this->users[] = $user;
$user->setPointOfSale($this);
}
return $this;
}
public function removeUser(User $user): self
{
if ($this->users->removeElement($user)) {
// set the owning side to null (unless already changed)
if ($user->getPointOfSale() === $this) {
$user->setPointOfSale(NULL);
}
}
return $this;
}
public function isEnabled(): ?bool
{
return $this->enabled;
}
public function setEnabled(bool $enabled): self
{
$this->enabled = $enabled;
return $this;
}
/**
* @return Collection<int, User>
*/
public function getManagers(): Collection
{
return $this->managers;
}
public function addManager(User $manager): self
{
if (!$this->managers->contains($manager)) {
$this->managers[] = $manager;
}
return $this;
}
public function removeManager(User $manager): self
{
$this->managers->removeElement($manager);
return $this;
}
public function getCreatedBy(): ?User
{
return $this->createdBy;
}
public function setCreatedBy(?User $createdBy): self
{
$this->createdBy = $createdBy;
return $this;
}
public function getAddress(): ?PointOfSaleAddress
{
return $this->address;
}
public function setAddress(?PointOfSaleAddress $address): self
{
$this->address = $address;
return $this;
}
}