migrate to gtea from bistbucket
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Modules\RestaurantDelivery\Enums;
|
||||
|
||||
enum CommissionType: string
|
||||
{
|
||||
case FIXED = 'fixed';
|
||||
case PERCENTAGE = 'percentage';
|
||||
case PER_KM = 'per_km';
|
||||
case HYBRID = 'hybrid';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::FIXED => 'Fixed per delivery',
|
||||
self::PERCENTAGE => 'Percentage of delivery fee',
|
||||
self::PER_KM => 'Per kilometer',
|
||||
self::HYBRID => 'Base + Per km',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Modules\RestaurantDelivery\Enums;
|
||||
|
||||
enum RiderStatus: string
|
||||
{
|
||||
case PENDING = 'pending';
|
||||
case ACTIVE = 'active';
|
||||
case SUSPENDED = 'suspended';
|
||||
case INACTIVE = 'inactive';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::PENDING => 'Pending Verification',
|
||||
self::ACTIVE => 'Active',
|
||||
self::SUSPENDED => 'Suspended',
|
||||
self::INACTIVE => 'Inactive',
|
||||
};
|
||||
}
|
||||
|
||||
public function color(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::PENDING => '#F59E0B',
|
||||
self::ACTIVE => '#10B981',
|
||||
self::SUSPENDED => '#EF4444',
|
||||
self::INACTIVE => '#6B7280',
|
||||
};
|
||||
}
|
||||
|
||||
public function canAcceptOrders(): bool
|
||||
{
|
||||
return $this === self::ACTIVE;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Modules\RestaurantDelivery\Enums;
|
||||
|
||||
enum RiderType: string
|
||||
{
|
||||
case INTERNAL = 'internal';
|
||||
case FREELANCE = 'freelance';
|
||||
case THIRD_PARTY = 'third_party';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::INTERNAL => 'Internal',
|
||||
self::FREELANCE => 'Freelance',
|
||||
self::THIRD_PARTY => 'Third Party',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Modules\RestaurantDelivery\Enums;
|
||||
|
||||
enum VehicleType: string
|
||||
{
|
||||
case BICYCLE = 'bicycle';
|
||||
case MOTORCYCLE = 'motorcycle';
|
||||
case CAR = 'car';
|
||||
case VAN = 'van';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::BICYCLE => 'Bicycle',
|
||||
self::MOTORCYCLE => 'Motorcycle',
|
||||
self::CAR => 'Car',
|
||||
self::VAN => 'Van',
|
||||
};
|
||||
}
|
||||
|
||||
public function icon(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::BICYCLE => 'bicycle',
|
||||
self::MOTORCYCLE => 'motorcycle',
|
||||
self::CAR => 'car',
|
||||
self::VAN => 'truck',
|
||||
};
|
||||
}
|
||||
|
||||
public function maxCapacity(): float
|
||||
{
|
||||
return match ($this) {
|
||||
self::BICYCLE => 10, // kg
|
||||
self::MOTORCYCLE => 25,
|
||||
self::CAR => 50,
|
||||
self::VAN => 200,
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user