<?php
namespace App\Entity;
use App\Entity\Traits\TimeStampable;
use App\Repository\MissionRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: MissionRepository::class)]
#[ORM\HasLifecycleCallbacks]
class Mission
{
use TimeStampable;
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(type: 'datetime_immutable', nullable: true)]
private ?\DateTimeImmutable $startDate = null;
#[ORM\Column(type: 'datetime_immutable', nullable: true)]
private ?\DateTimeImmutable $endDate = null;
#[ORM\Column]
private ?bool $isInternal = true;
#[ORM\ManyToOne]
private ?User $createdBy = null;
#[ORM\Column(length: 255, nullable: true)]
private ?string $subject = null;
#[ORM\Column(type: Types::TEXT, nullable: true)]
private ?string $purpose = null;
#[ORM\Column(type: Types::TEXT, nullable: true)]
private ?string $observation = null;
#[ORM\Column(length: 65, nullable: true)]
private ?string $reportFilename = null;
#[ORM\Column(length: 65, nullable: true)]
private ?string $letterFilename = null;
#[ORM\OneToMany(mappedBy: 'mission', targetEntity: MissionMember::class)]
private Collection $members;
#[ORM\OneToMany(mappedBy: 'mission', targetEntity: MissionStep::class)]
private Collection $missionSteps;
public function __construct()
{
$this->createdAt = new \DateTimeImmutable();
$this->updatedAt = new \DateTimeImmutable();
$this->members = new ArrayCollection();
$this->missionSteps = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getSubject(): ?string
{
return $this->subject;
}
public function setSubject(string $subject): self
{
$this->subject = $subject;
return $this;
}
public function getStartDate(): ?\DateTimeInterface
{
return $this->startDate;
}
public function setStartDate(\DateTimeInterface $startDate): self
{
$this->startDate = $startDate;
return $this;
}
public function getEndDate(): ?\DateTimeInterface
{
return $this->endDate;
}
public function setEndDate(\DateTimeInterface $endDate): self
{
$this->endDate = $endDate;
return $this;
}
public function isIsInternal(): ?bool
{
return $this->isInternal;
}
public function setIsInternal(bool $isInternal): self
{
$this->isInternal = $isInternal;
return $this;
}
public function getCreatedBy(): ?User
{
return $this->createdBy;
}
public function setCreatedBy(?User $createdBy): self
{
$this->createdBy = $createdBy;
return $this;
}
public function getPurpose(): ?string
{
return $this->purpose;
}
public function setPurpose(?string $purpose): self
{
$this->purpose = $purpose;
return $this;
}
public function getObservation(): ?string
{
return $this->observation;
}
public function setObservation(?string $observation): self
{
$this->observation = $observation;
return $this;
}
public function getReportFilename(): ?string
{
return $this->reportFilename;
}
public function setReportFilename(?string $reportFilename): self
{
$this->reportFilename = $reportFilename;
return $this;
}
public function getLetterFilename(): ?string
{
return $this->letterFilename;
}
public function setLetterFilename(?string $letterFilename): self
{
$this->letterFilename = $letterFilename;
return $this;
}
/**
* @return Collection<int, MissionMember>
*/
public function getMembers(): Collection
{
return $this->members;
}
public function addMember(MissionMember $member): self
{
if (!$this->members->contains($member)) {
$this->members->add($member);
$member->setMission($this);
}
return $this;
}
public function removeMember(MissionMember $member): self
{
if ($this->members->removeElement($member)) {
// set the owning side to null (unless already changed)
if ($member->getMission() === $this) {
$member->setMission(null);
}
}
return $this;
}
/**
* @return Collection<int, MissionStep>
*/
public function getMissionSteps(): Collection
{
return $this->missionSteps;
}
public function addMissionStep(MissionStep $missionStep): self
{
if (!$this->missionSteps->contains($missionStep)) {
$this->missionSteps->add($missionStep);
$missionStep->setMission($this);
}
return $this;
}
public function removeMissionStep(MissionStep $missionStep): self
{
if ($this->missionSteps->removeElement($missionStep)) {
// set the owning side to null (unless already changed)
if ($missionStep->getMission() === $this) {
$missionStep->setMission(null);
}
}
return $this;
}
public function getMembersIds()
{
$idsList = [];
foreach($this->members as $member) {
$idsList[] = $member->getMember()->getId();
}
return $idsList;
}
}