type, [OrderBuilderType::FROM_BASKET, OrderBuilderType::WITH_PICKUP, OrderBuilderType::COMPLETED], true); } #[\Override] public function isCompleted(): bool { return in_array($this->type, [OrderBuilderType::WITH_PICKUP, OrderBuilderType::COMPLETED], true); } #[\Override] public function getBuilderType(): OrderBuilderType { return $this->type; } #[\Override] public function withPickupTimeSlot(ShopId $shopId, PickupTimeSlot $timeSlot): OrderBuilderCompleted { $this->type = OrderBuilderType::WITH_PICKUP; $this->shopId = $shopId; $this->pickupTimeSlot = $timeSlot; return $this; } #[\Override] public function getBasket(): Basket { return $this->basket; } #[\Override] public function getShopperId(): ShopperId { return $this->shopperId; } #[\Override] public function getShopId(): ShopId { return $this->shopId; } #[\Override] public function getPickupTimeSlot(): PickupTimeSlot { return $this->pickupTimeSlot; } public static function fromBasket(Basket $basket, ShopperId $shopperId): OrderBuilderWithBasket { return new self( OrderBuilderType::FROM_BASKET, $basket, $shopperId ); } }