<?php
namespace App\Entity;
use App\Repository\OfficeRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation as Serializer;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* @ORM\Table(indexes={ @ORM\Index(name="idx_office_module_id", columns={"module_id"}), @ORM\Index(name="idx_office_program_id", columns={"program_id"}) })
* @ORM\Entity(repositoryClass=OfficeRepository::class)
* @Serializer\ExclusionPolicy("ALL")
* @UniqueEntity(
* fields={"name"},
* errorPath="name",
* message="Une fonction existe avec le même nom"
* )
*/
class Office extends BaseEntity
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
* @Serializer\Expose
* @Serializer\Groups({"office", "user_profile"})
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
* @Serializer\Expose
* @Serializer\Groups({"office", "user_profile"})
*/
private $name;
/**
* @ORM\OneToMany(targetEntity=UserOffice::class, mappedBy="office", fetch="EXTRA_LAZY")
*/
private $userOffices;
/**
* @ORM\ManyToMany(targetEntity=Job::class, mappedBy="offices")
*/
private $jobs;
/**
* @ORM\ManyToOne(targetEntity=Module::class, inversedBy="offices")
* @ORM\JoinColumn(name="module_id", referencedColumnName="id", nullable=true, onDelete="SET NULL")
*/
private $module;
/**
* @ORM\ManyToOne(targetEntity=Program::class, inversedBy="offices")
* @ORM\JoinColumn(name="program_id", referencedColumnName="id", nullable=true, onDelete="SET NULL")
*/
private $program;
/**
* @ORM\ManyToOne(targetEntity=Live::class, inversedBy="offices")
*/
private $live;
/**
* @ORM\OneToMany(targetEntity=User::class, mappedBy="office", fetch="EXTRA_LAZY")
*/
private $users;
/**
* @ORM\ManyToMany(targetEntity=SubsidiaryCompany::class, mappedBy="offices")
*/
private $subsidiaryCompanies;
/**
* @ORM\OneToMany(targetEntity=Target::class, mappedBy="office", fetch="EXTRA_LAZY")
*/
private $targets;
public function __construct()
{
$this->userOffices = new ArrayCollection();
$this->jobs = new ArrayCollection();
$this->users = new ArrayCollection();
$this->targets = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
/**
* @return Collection<int, UserOffice>
*/
public function getUserOffices(): Collection
{
return $this->userOffices;
}
public function addUserOffice(UserOffice $userOffice): self
{
if (!$this->userOffices->contains($userOffice)) {
$this->userOffices[] = $userOffice;
$userOffice->setOffice($this);
}
return $this;
}
public function removeUserOffice(UserOffice $userOffice): self
{
if ($this->userOffices->removeElement($userOffice)) {
// set the owning side to null (unless already changed)
if ($userOffice->getOffice() === $this) {
$userOffice->setOffice(null);
}
}
return $this;
}
/**
* @return Collection<int, Job>
*/
public function getJobs(): Collection
{
return $this->jobs;
}
public function addJob(Job $job): self
{
if (!$this->jobs->contains($job)) {
$this->jobs[] = $job;
$job->addOffice($this);
}
return $this;
}
public function removeJob(Job $job): self
{
if ($this->jobs->removeElement($job)) {
$job->removeOffice($this);
}
return $this;
}
public function getModule(): ?Module
{
return $this->module;
}
public function setModule(?Module $module): self
{
$this->module = $module;
return $this;
}
public function getProgram(): ?Program
{
return $this->program;
}
public function setProgram(?Program $program): self
{
$this->program = $program;
return $this;
}
public function getLive(): ?Live
{
return $this->live;
}
public function setLive(?Live $live): self
{
$this->live = $live;
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->setOffice($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->getOffice() === $this) {
$user->setOffice(null);
}
}
return $this;
}
/**
* @return Collection<int, SubsidiaryCompany>
*/
public function getSubsidiaryCompanies(): Collection
{
return $this->subsidiaryCompanies;
}
public function addSubsidiaryCompany(SubsidiaryCompany $subsidiaryCompany): self
{
if (!$this->subsidiaryCompanies->contains($subsidiaryCompany)) {
$this->subsidiaryCompanies[] = $subsidiaryCompany;
$subsidiaryCompany->addOffice($this);
}
return $this;
}
public function removeSubsidiaryCompany(SubsidiaryCompany $subsidiaryCompany): self
{
if ($this->subsidiaryCompanies->removeElement($subsidiaryCompany)) {
$subsidiaryCompany->removeOffice($this);
}
return $this;
}
/**
* @return Collection<int, Target>
*/
public function getTarges(): Collection
{
return $this->targets;
}
public function addTarget(Target $target): self
{
if (!$this->targets->contains($target)) {
$this->targets[] = $target;
$target->setOffice($this);
}
return $this;
}
public function removeTarget(Target $target): self
{
if ($this->targets->removeElement($target)) {
// set the owning side to null (unless already changed)
if ($target->getOffice() === $this) {
$target->setOffice(null);
}
}
return $this;
}
}