*/ #[ORM\OneToMany(targetEntity: OrderItem::class, mappedBy: 'foodOrder', orphanRemoval: true)] private Collection $orderItems; #[ORM\Column(length: 255, options: [ 'default' => 'nobody', ])] private string|null $createdBy = 'nobody'; public function __construct() { $this->orderItems = new ArrayCollection; $this->open(); } public function getId(): Ulid|null { return $this->id; } public function getCreatedAt(): DateTimeImmutable { return $this->id->getDateTime(); } public function getClosedAt(): DateTimeImmutable|null { return $this->closedAt; } public function setClosedAt(DateTimeImmutable|null $closedAt): static { $this->closedAt = $closedAt; return $this; } public function isClosed(): bool { return $this->closedAt instanceof DateTimeImmutable && $this->closedAt->getTimestamp() <= (new DateTimeImmutable)->getTimestamp(); } public function close(): static { return $this->setClosedAt(new DateTimeImmutable); } public function open(): static { $this->closedAt = (new DateTimeImmutable)->add(new DateInterval('PT1H')); return $this; } public function getFoodVendor(): FoodVendor|null { return $this->foodVendor; } public function setFoodVendor(FoodVendor|null $foodVendor): static { $this->foodVendor = $foodVendor; return $this; } /** * @return Collection */ public function getOrderItems(): Collection { return $this->orderItems; } public function addOrderItem(OrderItem $orderItem): static { if (! $this->orderItems->contains($orderItem)) { $this->orderItems->add($orderItem); $orderItem->setFoodOrder($this); } return $this; } public function removeOrderItem(OrderItem $orderItem): static { // set the owning side to null (unless already changed) if ($this->orderItems->removeElement($orderItem) && $orderItem->getFoodOrder() === $this) { $orderItem->setFoodOrder(null); } return $this; } public function getCreatedBy(): string|null { return $this->createdBy; } public function setCreatedBy(string $createdBy): static { $this->createdBy = $createdBy; return $this; } }