<?phpnamespace App\Entity;use App\Repository\PurchaseItemRepository;use Doctrine\Common\Collections\ArrayCollection;use Doctrine\Common\Collections\Collection;use Doctrine\ORM\Mapping as ORM;use Doctrine\DBAL\Types\Types;use App\Validator\Constraints as CustomAssert;#[ORM\Entity(repositoryClass: PurchaseItemRepository::class)]class PurchaseItem{ #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column] private ?int $id = null; #[ORM\Column(length: 255)] private ?string $activityName = null; #[ORM\Column] private ?int $activityPrice = null; #[ORM\Column] private ?string $activityCategoryTitle = null; #[ORM\Column(type: Types::DATETIME_MUTABLE)] private ?\DateTimeInterface $activityStart = null; #[ORM\Column(type: Types::DATETIME_MUTABLE)] private ?\DateTimeInterface $activityEnd = null; #[ORM\Column] private ?int $quantity = null; #[ORM\Column] private ?int $total = null; #[ORM\ManyToOne(inversedBy: 'purchaseItems')] private ?Activity $activity = null; #[ORM\ManyToOne(inversedBy: 'purchaseItems')] private ?Calendar $calendar = null; #[ORM\ManyToOne(inversedBy: 'purchaseItems')] #[ORM\JoinColumn(nullable: false)] private ?Purchase $purchase = null; #[ORM\ManyToMany(targetEntity: Payment::class, mappedBy: 'PurchaseItems')] private Collection $payments; public function __construct() { $this->payments = new ArrayCollection(); } // #[ORM\Column] // private ?int $activitieStock = null; public function __toString() { return (string) $this->id; // or any other property you want to represent the entity with } public function getId(): ?int { return $this->id; } public function getActivity(): ?Activity { return $this->activity; } public function setActivity(?Activity $activity): self { $this->activity = $activity; return $this; } public function getActivityCategoryTitle(): ?string { return $this->activityCategoryTitle; } public function setActivityCategoryTitle(string $activityCategoryTitle): self { $this->activityCategoryTitle = $activityCategoryTitle; return $this; } public function getPurchase(): ?Purchase { return $this->purchase; } public function setPurchase(?Purchase $purchase): self { $this->purchase = $purchase; if(!$purchase->getPurchaseItems()->contains($this)) { $purchase->addPurchaseItem($this); } return $this; } public function getActivityName(): ?string { return $this->activityName; } public function setActivityName(string $activityName): self { $this->activityName = $activityName; return $this; } public function getActivityStart(): ?\DateTimeInterface { return $this->activityStart; } public function setActivityStart(?\DateTimeInterface $activityStart): void { $this->activityStart = $activityStart; } public function getActivityEnd(): ?\DateTimeInterface { return $this->activityEnd; } public function setActivityEnd(?\DateTimeInterface $activityEnd): void { $this->activityEnd = $activityEnd; } public function getActivityPrice(): ?int { return $this->activityPrice; } public function setActivityPrice(?int $activityPrice): self { if ($activityPrice === null) { // Si le prix de l'activité est null, récupérez le prix par défaut de CategorySetting $categorySetting = $this->getActivity()->getCategory()->getCategorySetting(); $activityPrice = $categorySetting ? $categorySetting->getPrice() : 0; } $this->activityPrice = $activityPrice; return $this; } public function getCalendar(): ?Calendar { return $this->calendar; } public function setCalendar(?Calendar $calendar): self { $this->calendar = $calendar; return $this; } public function getQuantity(): ?int { return $this->quantity; } public function setQuantity(int $quantity): self { $this->quantity = $quantity; return $this; } public function getNewQuantity(): ?int { return $this->quantity; } public function getTotal(): ?int { // Vérifiez d'abord si les deux valeurs sont définies if ($this->activityPrice !== null && $this->quantity !== null) { // Calculez le total en multipliant le prix de l'activité par la quantité return $this->activityPrice * $this->quantity; } else { // Si l'une des valeurs est null, retournez null return null; } } public function setTotal(int $total): self { $this->total = $total; return $this; } /** * @return Collection<int, Payment> */ public function getPayments(): Collection { if ($this->payments->isEmpty()) { $defaultPayment = new Payment(); $defaultPayment->setValue(0.00); return new ArrayCollection([$defaultPayment]); } return $this->payments; } public function addPayment(Payment $payment): static { if (!$this->payments->contains($payment)) { $this->payments->add($payment); $payment->addPurchaseItem($this); } return $this; } public function removePayment(Payment $payment): static { if ($this->payments->removeElement($payment)) { $payment->removePurchaseItem($this); } return $this; } }