<?php
namespace App\Entity;
use App\Repository\CancelEventApplicationRepository;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity(repositoryClass=CancelEventApplicationRepository::class)
*/
class CancelEventApplication
{
const STATUS_OPEN = 'open'; // the cancel application is open
const STATUS_ACCEPTED = 'accepted'; // the cancel application accepted
const STATUS_REFUSED = 'refused'; // the cancel application refused
const STATUS_DELETED = 'deleted'; // the cancel application deleted
/**
* Available statuses for the cancel event application
*/
const STATUSES = [
self::STATUS_OPEN,
self::STATUS_ACCEPTED,
self::STATUS_REFUSED,
self::STATUS_DELETED
];
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity=Event::class, inversedBy="cancelEventApplications")
* @ORM\JoinColumn(nullable=false)
*/
private $event;
/**
* @ORM\ManyToOne(targetEntity=Specialist::class, inversedBy="cancelEventApplications")
* @ORM\JoinColumn(nullable=true)
*/
private $specialist;
/**
* @ORM\ManyToOne(targetEntity=Specialist::class)
* @ORM\JoinColumn(nullable=true)
*/
private $newSpecialist;
/**
* @ORM\Column(type="string", length=50, nullable=true)
* @Assert\Choice(choices=self::STATUSES)
*/
private $status = self::STATUS_OPEN;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Assert\NotBlank(message="La raison destinée à l'administrateur doit être remplit")
*/
private $reasonToAdmin;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $reasonToSpecialist;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $reasonToCompany;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $reasonToClient;
/**
* @ORM\Column(type="datetime", options={"default": "CURRENT_TIMESTAMP"})
* @Gedmo\Timestampable(on="create")
*/
private $createdAt;
/**
* @ORM\Column(type="datetime", options={"default": "CURRENT_TIMESTAMP"})
* @Gedmo\Timestampable(on="update")
*/
private $updatedAt;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $updatedBy;
public function __construct()
{
$this->createdAt = new \DateTime();
$this->updatedAt = new \DateTime();
}
public function getId(): ?int
{
return $this->id;
}
public function getEvent(): ?Event
{
return $this->event;
}
public function setEvent(?Event $event): self
{
$this->event = $event;
return $this;
}
public function getSpecialist(): ?Specialist
{
return $this->specialist;
}
public function setSpecialist(?Specialist $specialist): self
{
$this->specialist = $specialist;
return $this;
}
public function getNewSpecialist(): ?Specialist
{
return $this->newSpecialist;
}
public function setNewSpecialist(?Specialist $newSpecialist): self
{
$this->newSpecialist = $newSpecialist;
return $this;
}
public function getStatus(): ?string
{
return $this->status;
}
public function setStatus(?string $status): self
{
$this->status = $status;
return $this;
}
public function getReasonToAdmin(): ?string
{
return $this->reasonToAdmin;
}
public function setReasonToAdmin(?string $reasonToAdmin): self
{
$this->reasonToAdmin = $reasonToAdmin;
return $this;
}
public function getReasonToSpecialist(): ?string
{
return $this->reasonToSpecialist;
}
public function setReasonToSpecialist(?string $reasonToSpecialist): self
{
$this->reasonToSpecialist = $reasonToSpecialist;
return $this;
}
public function getReasonToCompany(): ?string
{
return $this->reasonToCompany;
}
public function setReasonToCompany(?string $reasonToCompany): self
{
$this->reasonToCompany = $reasonToCompany;
return $this;
}
public function getReasonToClient(): ?string
{
return $this->reasonToClient;
}
public function setReasonToClient(?string $reasonToClient): self
{
$this->reasonToClient = $reasonToClient;
return $this;
}
public function getCreatedAt(): ?\DateTimeInterface
{
return $this->createdAt;
}
public function setCreatedAt(\DateTimeInterface $createdAt): self
{
$this->createdAt = $createdAt;
return $this;
}
public function getUpdatedAt(): ?\DateTimeInterface
{
return $this->updatedAt;
}
public function setUpdatedAt(\DateTimeInterface $updatedAt): self
{
$this->updatedAt = $updatedAt;
return $this;
}
public function getUpdatedBy(): ?string
{
return $this->updatedBy;
}
public function setUpdatedBy(?string $updatedBy): self
{
$this->updatedBy = $updatedBy;
return $this;
}
/**
* Vérif si la demande n'a pas encore été traitée
* @return bool
*/
public function isOpen(): bool
{
return ($this->status === self::STATUS_OPEN) ? true : false;
}
/**
* Vérif si la demande a été acceptée
* @return bool
*/
public function isAccepted(): bool
{
return ($this->status === self::STATUS_ACCEPTED) ? true : false;
}
/**
* Vérif si la demande a été refusée
* @return bool
*/
public function isRefused(): bool
{
return ($this->status === self::STATUS_REFUSED) ? true : false;
}
/**
* Vérif si la demande a été supprimée
* @return bool
*/
public function isDeleted(): bool
{
return ($this->status === self::STATUS_DELETED) ? true : false;
}
/**
* Vérif si la demande est cloturée
* @return bool
*/
public function isClosed(): bool
{
return ($this->isAccepted() || $this->isRefused() || $this->isDeleted()) ? true : false;
}
}