<?php
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* @ORM\Entity(repositoryClass="App\Repository\CompanyRepository")
* @ORM\HasLifecycleCallbacks
* @UniqueEntity(
* fields={"name"},
* message="Le nom est déjà utilisé."
* )
*/
class Company
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string")
*/
private $name;
/**
* @ORM\Column(type="string", nullable=true)
*/
private $slug;
/**
* @ORM\Column(type="string", nullable=true)
*/
private $logoFilename;
/**
* @ORM\Column(type="string",nullable=true)
*/
private $offerName;
/**
* @ORM\Column(type="date", nullable=true)
*/
private $expired_at;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $user_limit;
/**
* @ORM\Column(type="string", length=255,options={"default"="activated"})
*/
private $status;
/**
* @ORM\Column(type="json", nullable=true)
*/
private $features = [];
/**
* @ORM\Column(type="json", nullable=true)
*/
private $documents = [];
/**
* @ORM\Column(type="datetime_immutable", options={"default"="CURRENT_TIMESTAMP"})
*/
private $created_at;
/**
* @ORM\Column(type="datetime_immutable", options={"default"="CURRENT_TIMESTAMP"})
*/
private $updated_at;
/**
* @ORM\OneToMany(targetEntity="User", mappedBy="company", fetch="LAZY", cascade={"remove"})
*
*/
private $users;
/**
* @ORM\OneToMany(targetEntity=Job::class, mappedBy="company",cascade={"remove"})
*/
private $jobs;
/**
* @ORM\OneToMany(targetEntity=Department::class, mappedBy="company",cascade={"remove"})
*/
private $departments;
/**
* @ORM\OneToMany(targetEntity=Message::class, mappedBy="company", orphanRemoval=true)
*/
private $messages;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $jwpLogoFilename;
/**
* @ORM\OneToMany(targetEntity=Site::class, mappedBy="company")
*/
private $sites;
public function __construct()
{
$this->jobs = new ArrayCollection();
$this->departments = new ArrayCollection();
$this->users = new ArrayCollection();
$this->setStatus('activated');
$this->messages = new ArrayCollection();
$this->sites = new ArrayCollection();
}
/**
* @return mixed
*/
public function getId()
{
return $this->id;
}
/**
* @param mixed $id
*/
public function setId($id)
{
$this->id = $id;
}
/**
* @return mixed
*/
public function getName()
{
return $this->name;
}
/**
* @param mixed $name
*/
public function setName($name)
{
$this->name = $name;
}
/**
* @return mixed
*/
public function getLogoFilename()
{
return $this->logoFilename;
}
/**
* @param mixed $logoFilename
*/
public function setLogoFilename($logoFilename): void
{
$this->logoFilename = $logoFilename;
}
/**
* @return mixed
*/
public function getUsers()
{
return $this->users;
}
/**
* @ORM\PostRemove()
*/
public function removeLogo()
{
if($this->getLogoFilename()){
$file = $this->getAbsolutePath();
if ($file) {
unlink($file);
}
}
}
protected function getAbsolutePath()
{
return __DIR__ . '/../../public/img/company/logo/'.$this->logoFilename;
}
/**
* @return mixed
*/
public function getSlug()
{
return $this->slug;
}
/**
* @param mixed $slug
*/
public function setSlug($slug): void
{
$this->slug = $slug;
}
/**
* @return Collection|Job[]
*/
public function getJobs(): Collection
{
return $this->jobs;
}
public function addJob(Job $job): self
{
if (!$this->jobs->contains($job)) {
$this->jobs[] = $job;
$job->setCompany($this);
}
return $this;
}
public function removeJob(Job $job): self
{
if ($this->jobs->removeElement($job)) {
// set the owning side to null (unless already changed)
if ($job->getCompany() === $this) {
$job->setCompany(null);
}
}
return $this;
}
/**
* @return Collection|Department[]
*/
public function getDepartments(): Collection
{
return $this->departments;
}
public function addDepartment(Department $department): self
{
if (!$this->departments->contains($department)) {
$this->departments[] = $department;
$department->setCompany($this);
}
return $this;
}
public function removeDepartment(Department $department): self
{
if ($this->departments->removeElement($department)) {
// set the owning side to null (unless already changed)
if ($department->getCompany() === $this) {
$department->setCompany(null);
}
}
return $this;
}
/**
* @return mixed
*/
public function getUserLimit()
{
return $this->user_limit;
}
/**
* @param mixed $user_limit
*/
public function setUserLimit($user_limit): void
{
$this->user_limit = $user_limit;
}
/**
* @return mixed
*/
public function getStatus()
{
return $this->status;
}
/**
* @param mixed $status
*/
public function setStatus($status): void
{
$this->status = $status;
}
/**
* @return array|null
*/
public function getFeatures()
{
return $this->features;
}
/**
* @param array $features
*/
public function setFeatures(array $features): void
{
$this->features = $features;
}
/**
* @ORM\PrePersist
*/
public function setCreatedAtValue(): void
{
$this->created_at =new \DateTimeImmutable();
$this->updated_at =new \DateTimeImmutable();
}
/**
* @ORM\PreUpdate
*/
public function setUpdatedAtValue(): void
{
$this->updated_at =new \DateTimeImmutable();
}
/**
* @return mixed
*/
public function getCreatedAt()
{
return $this->created_at;
}
/**
* @param mixed $created_at
*/
public function setCreatedAt($created_at): void
{
$this->created_at = $created_at;
}
/**
* @return mixed
*/
public function getUpdatedAt()
{
return $this->updated_at;
}
/**
* @param mixed $updated_at
*/
public function setUpdatedAt($updated_at): void
{
$this->updated_at = $updated_at;
}
/**
* @return array|null
*/
public function getDocuments()
{
return $this->documents;
}
/**
* @param array $documents
*/
public function setDocuments(array $documents): void
{
$this->documents = $documents;
}
/**
* @return mixed
*/
public function getExpiredAt()
{
return $this->expired_at;
}
/**
* @param mixed $expired_at
*/
public function setExpiredAt($expired_at): void
{
$this->expired_at = $expired_at;
}
/**
* @return mixed
*/
public function getOfferName()
{
return $this->offerName;
}
/**
* @param mixed $offerName
*/
public function setOfferName($offerName): void
{
$this->offerName = $offerName;
}
/**
* @return Collection<int, Message>
*/
public function getMessages(): Collection
{
return $this->messages;
}
public function addMessage(Message $message): self
{
if (!$this->messages->contains($message)) {
$this->messages[] = $message;
$message->setCompany($this);
}
return $this;
}
public function removeMessage(Message $message): self
{
if ($this->messages->removeElement($message)) {
// set the owning side to null (unless already changed)
if ($message->getCompany() === $this) {
$message->setCompany(null);
}
}
return $this;
}
public function getJwpLogoFilename(): ?string
{
return $this->jwpLogoFilename;
}
public function setJwpLogoFilename(?string $jwpLogoFilename): self
{
$this->jwpLogoFilename = $jwpLogoFilename;
return $this;
}
/**
* @return Collection<int, Site>
*/
public function getSites(): Collection
{
return $this->sites;
}
public function addSite(Site $site): self
{
if (!$this->sites->contains($site)) {
$this->sites[] = $site;
$site->setCompany($this);
}
return $this;
}
public function removeSite(Site $site): self
{
if ($this->sites->removeElement($site)) {
// set the owning side to null (unless already changed)
if ($site->getCompany() === $this) {
$site->setCompany(null);
}
}
return $this;
}
}