You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

275 lines
6.9 KiB
PHP

<?php
namespace App\Entity;
use App\Repository\TaskRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* A crafting task
*/
#[ORM\Entity(repositoryClass: TaskRepository::class)]
class Task {
use TBaseEntity;
/**
* @var User|null The user
*/
#[ORM\ManyToOne]
#[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')]
#[Assert\NotNull(message: 'Veuillez sélectionner un utilisateur')]
#[Assert\Valid]
private ?User $user = null;
/**
* @var Material|null The produced material
*/
#[ORM\ManyToOne]
#[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')]
#[Assert\NotNull(message: 'Veuillez sélectionner le matériau à produire')]
#[Assert\Valid]
private ?Material $producedMaterial = null;
/**
* @var Recipe|null The recipe
*/
#[ORM\ManyToOne]
#[ORM\JoinColumn(onDelete: 'CASCADE')]
#[Assert\Valid]
private ?Recipe $recipe = null;
/**
* @var int|null The quantity asked / to produce
*/
#[ORM\Column]
#[Assert\Type(type: 'integer', message: 'La quantité à produire doit être un nombre entier')]
#[Assert\NotNull(message: 'Veuillez saisir une quantité à produire')]
#[Assert\Positive(message: 'La quantité à produire doit être strictement positive')]
private ?int $quantityToProduce = null;
/**
* @var int|null The quantity already provided at the start
*/
#[ORM\Column]
#[Assert\Type(type: 'integer', message: 'La quantité de départ doit être un nombre entier')]
#[Assert\NotNull(message: 'Veuillez saisir une quantité de départ')]
#[Assert\PositiveOrZero(message: 'La quantité de départ doit être positive ou nulle')]
private ?int $quantityProvidedAtStart = null;
/**
* @var Task|null The parent task
*/
#[ORM\ManyToOne(targetEntity: self::class, inversedBy: 'childTasks')]
#[ORM\JoinColumn(onDelete: 'CASCADE')]
#[Assert\Valid]
private ?self $parentTask = null;
/**
* @var Collection<int, self> The child tasks
*/
#[ORM\OneToMany(targetEntity: self::class, mappedBy: 'parentTask', orphanRemoval: true)]
#[Assert\Valid]
private Collection $childTasks;
/**
* @var Task|null The root task
*/
#[ORM\ManyToOne(targetEntity: self::class)]
#[ORM\JoinColumn(onDelete: 'CASCADE')]
#[Assert\Valid]
private ?self $rootTask = null;
/**
* Initialization
*/
public function __construct () {
$this->childTasks = new ArrayCollection();
}
/**
* The user
*
* @return User|null The user
*/
public function getUser (): ?User {
return $this->user;
}
/**
* Set the user
*
* @param User|null $user The user
*
* @return $this
*/
public function setUser (?User $user): static {
$this->user = $user;
return $this;
}
/**
* The produced material
*
* @return Material|null The produced material
*/
public function getProducedMaterial (): ?Material {
return $this->producedMaterial;
}
/**
* Set the produced material
*
* @param Material|null $producedMaterial The produced material
*
* @return $this
*/
public function setProducedMaterial (?Material $producedMaterial): static {
$this->producedMaterial = $producedMaterial;
return $this;
}
/**
* The recipe
*
* @return Recipe|null The recipe
*/
public function getRecipe (): ?Recipe {
return $this->recipe;
}
/**
* The recipe
*
* @param Recipe|null $recipe The recipe
*
* @return $this
*/
public function setRecipe (?Recipe $recipe): static {
$this->recipe = $recipe;
return $this;
}
/**
* The quantity asked / to produce
*
* @return int|null The quantity asked / to produce
*/
public function getQuantityToProduce (): ?int {
return $this->quantityToProduce;
}
/**
* Set the quantity asked / to produce
*
* @param int $quantityToProduce The quantity asked / to produce
*
* @return $this
*/
public function setQuantityToProduce (int $quantityToProduce): static {
$this->quantityToProduce = $quantityToProduce;
return $this;
}
/**
* The quantity already provided at the start
*
* @return int|null The quantity already provided at the start
*/
public function getQuantityProvidedAtStart (): ?int {
return $this->quantityProvidedAtStart;
}
/**
* Set the quantity already provided at the start
*
* @param int $quantityProvidedAtStart The quantity already provided at the start
*
* @return $this
*/
public function setQuantityProvidedAtStart (int $quantityProvidedAtStart): static {
$this->quantityProvidedAtStart = $quantityProvidedAtStart;
return $this;
}
/**
* The parent task
*
* @return self|null The parent task
*/
public function getParentTask (): ?self {
return $this->parentTask;
}
/**
* Set the parent task
*
* @param Task|null $parentTask The parent task
*
* @return $this
*/
public function setParentTask (?self $parentTask): static {
$this->parentTask = $parentTask;
return $this;
}
/**
* The child tasks
*
* @return Collection<int, self> The child tasks
*/
public function getChildTasks (): Collection {
return $this->childTasks;
}
/**
* Add a child task
*
* @param Task $childTask The child task
*
* @return $this
*/
public function addChildTask (self $childTask): static {
if (!$this->childTasks->contains($childTask)) {
$this->childTasks->add($childTask);
$childTask->setParentTask($this);
}
return $this;
}
/**
* Remove a child task
*
* @param Task $childTask The child task
*
* @return $this
*/
public function removeChildTask (self $childTask): static {
if ($this->childTasks->removeElement($childTask)) {
// set the owning side to null (unless already changed)
if ($childTask->getParentTask() === $this) {
$childTask->setParentTask(null);
}
}
return $this;
}
/**
* The root task
*
* @return self|null The root task
*/
public function getRootTask (): ?self {
return $this->rootTask;
}
/**
* Set the root task
*
* @param Task|null $rootTask The root task
*
* @return $this
*/
public function setRootTask (?self $rootTask): static {
$this->rootTask = $rootTask;
return $this;
}
}