migrate to gtea from bistbucket

This commit is contained in:
2026-03-15 17:08:23 +07:00
commit 129ca2260c
3716 changed files with 566316 additions and 0 deletions

View File

@@ -0,0 +1,209 @@
<?php
declare(strict_types=1);
namespace Modules\RestaurantDelivery\Enums;
enum DeliveryStatus: string
{
case PENDING = 'pending';
case CONFIRMED = 'confirmed';
case PREPARING = 'preparing';
case READY_FOR_PICKUP = 'ready_for_pickup';
case RIDER_ASSIGNED = 'rider_assigned';
case RIDER_AT_RESTAURANT = 'rider_at_restaurant';
case PICKED_UP = 'picked_up';
case ON_THE_WAY = 'on_the_way';
case ARRIVED = 'arrived';
case DELIVERED = 'delivered';
case CANCELLED = 'cancelled';
case FAILED = 'failed';
public function label(): string
{
return match ($this) {
self::PENDING => 'Order Placed',
self::CONFIRMED => 'Order Confirmed',
self::PREPARING => 'Preparing',
self::READY_FOR_PICKUP => 'Ready for Pickup',
self::RIDER_ASSIGNED => 'Rider Assigned',
self::RIDER_AT_RESTAURANT => 'Rider at Restaurant',
self::PICKED_UP => 'Picked Up',
self::ON_THE_WAY => 'On The Way',
self::ARRIVED => 'Arrived',
self::DELIVERED => 'Delivered',
self::CANCELLED => 'Cancelled',
self::FAILED => 'Failed',
};
}
public function description(): string
{
return match ($this) {
self::PENDING => 'Waiting for restaurant confirmation',
self::CONFIRMED => 'Restaurant is preparing your food',
self::PREPARING => 'Your food is being prepared',
self::READY_FOR_PICKUP => 'Food is ready, waiting for rider',
self::RIDER_ASSIGNED => 'A rider has been assigned',
self::RIDER_AT_RESTAURANT => 'Rider has arrived at restaurant',
self::PICKED_UP => 'Rider has picked up your order',
self::ON_THE_WAY => 'Rider is on the way to you',
self::ARRIVED => 'Rider has arrived at your location',
self::DELIVERED => 'Order has been delivered',
self::CANCELLED => 'Order has been cancelled',
self::FAILED => 'Delivery failed',
};
}
public function color(): string
{
return match ($this) {
self::PENDING => '#6B7280',
self::CONFIRMED => '#3B82F6',
self::PREPARING => '#F59E0B',
self::READY_FOR_PICKUP => '#8B5CF6',
self::RIDER_ASSIGNED => '#06B6D4',
self::RIDER_AT_RESTAURANT => '#14B8A6',
self::PICKED_UP => '#22C55E',
self::ON_THE_WAY => '#10B981',
self::ARRIVED => '#059669',
self::DELIVERED => '#047857',
self::CANCELLED => '#EF4444',
self::FAILED => '#DC2626',
};
}
public function icon(): string
{
return match ($this) {
self::PENDING => 'clock',
self::CONFIRMED => 'check-circle',
self::PREPARING => 'fire',
self::READY_FOR_PICKUP => 'package',
self::RIDER_ASSIGNED => 'user-check',
self::RIDER_AT_RESTAURANT => 'map-pin',
self::PICKED_UP => 'shopping-bag',
self::ON_THE_WAY => 'truck',
self::ARRIVED => 'home',
self::DELIVERED => 'check-double',
self::CANCELLED => 'x-circle',
self::FAILED => 'alert-triangle',
};
}
public function canTransitionTo(DeliveryStatus $newStatus): bool
{
$allowedTransitions = match ($this) {
self::PENDING => [self::CONFIRMED, self::CANCELLED],
self::CONFIRMED => [self::PREPARING, self::CANCELLED],
self::PREPARING => [self::READY_FOR_PICKUP, self::CANCELLED],
self::READY_FOR_PICKUP => [self::RIDER_ASSIGNED, self::CANCELLED],
self::RIDER_ASSIGNED => [self::RIDER_AT_RESTAURANT, self::CANCELLED, self::READY_FOR_PICKUP], // Can reassign
self::RIDER_AT_RESTAURANT => [self::PICKED_UP, self::CANCELLED],
self::PICKED_UP => [self::ON_THE_WAY, self::FAILED],
self::ON_THE_WAY => [self::ARRIVED, self::FAILED],
self::ARRIVED => [self::DELIVERED, self::FAILED],
self::DELIVERED => [],
self::CANCELLED => [],
self::FAILED => [],
};
return in_array($newStatus, $allowedTransitions);
}
public function isActive(): bool
{
return ! in_array($this, [self::DELIVERED, self::CANCELLED, self::FAILED]);
}
public function isCompleted(): bool
{
return $this === self::DELIVERED;
}
public function isCancelled(): bool
{
return $this === self::CANCELLED;
}
public function isFailed(): bool
{
return $this === self::FAILED;
}
public function isPickedUp(): bool
{
return in_array($this, [self::PICKED_UP, self::ON_THE_WAY, self::ARRIVED, self::DELIVERED]);
}
public function requiresRider(): bool
{
return in_array($this, [
self::RIDER_ASSIGNED,
self::RIDER_AT_RESTAURANT,
self::PICKED_UP,
self::ON_THE_WAY,
self::ARRIVED,
]);
}
public function isTrackable(): bool
{
return in_array($this, [
self::RIDER_ASSIGNED,
self::RIDER_AT_RESTAURANT,
self::PICKED_UP,
self::ON_THE_WAY,
self::ARRIVED,
]);
}
public static function activeStatuses(): array
{
return [
self::PENDING,
self::CONFIRMED,
self::PREPARING,
self::READY_FOR_PICKUP,
self::RIDER_ASSIGNED,
self::RIDER_AT_RESTAURANT,
self::PICKED_UP,
self::ON_THE_WAY,
self::ARRIVED,
];
}
public static function completedStatuses(): array
{
return [self::DELIVERED, self::CANCELLED, self::FAILED];
}
public static function riderActiveStatuses(): array
{
return [
self::RIDER_ASSIGNED,
self::RIDER_AT_RESTAURANT,
self::PICKED_UP,
self::ON_THE_WAY,
self::ARRIVED,
];
}
public function sortOrder(): int
{
return match ($this) {
self::PENDING => 1,
self::CONFIRMED => 2,
self::PREPARING => 3,
self::READY_FOR_PICKUP => 4,
self::RIDER_ASSIGNED => 5,
self::RIDER_AT_RESTAURANT => 6,
self::PICKED_UP => 7,
self::ON_THE_WAY => 8,
self::ARRIVED => 9,
self::DELIVERED => 10,
self::CANCELLED => 11,
self::FAILED => 12,
};
}
}