ifnex/04_Laravel/app/Enums/ShipmentStatus.php
Kazem Alghasi 4ee1d27d44 feat: Complete customer ordering system (Phase 3)
Laravel Backend:
- Add AuthController for Sanctum token login/logout
- Add CustomerOrderController with 6 endpoints
  (profile, countries, orders CRUD, cancel)
- Extend ShipmentStatus enum with pending_payment/cancelled
- Add SampleShippingRatesSeeder (10 zones, 3 service types)
- Zone-assign 232 countries (Gulf=1, Asia=2, EU=3, East=4, US=5)
- Add migration to extend shipments.status enum
- Add test-api.php automated test suite (5 tests)

WordPress Frontend:
- Add [ifnex_order_form] multi-step wizard (4 steps)
- Add [ifnex_orders_list] with status filter & cancel action
- Add [ifnex_user_profile] with wallet & stats
- Add ifnex-orders.css (RTL-ready, IFNEX theme)
- Add ifnex-order-form.js (step navigation + AJAX)
- Add AJAX handlers (countries, calculate, submit, cancel)
- Fix plugin asset paths with dirname(__FILE__)
2026-08-10 06:09:56 +03:30

81 lines
2.7 KiB
PHP

<?php
namespace App\Enums;
enum ShipmentStatus: string
{
// ─── وضعیت‌های مشتری (قبل از پرداخت) ───
case PendingPayment = 'pending_payment'; // در انتظار پرداخت
case Cancelled = 'cancelled'; // لغو شده توسط مشتری
// ─── وضعیت‌های عملیاتی (بعد از پرداخت) ───
case Processed = 'processed'; // پردازش شده (ادمین تأیید کرده)
case PickedUp = 'picked_up'; // تحویل گرفته شده
case InTransit = 'in_transit'; // در حال حمل
case OutForDelivery = 'out_for_delivery'; // در مسیر تحویل
case Delivered = 'delivered'; // تحویل داده شده
case Failed = 'failed'; // ناموفق
case Returned = 'returned'; // برگشتی
/**
* لیبل فارسی
*/
public function label(): string
{
return match($this) {
self::PendingPayment => 'در انتظار پرداخت',
self::Cancelled => 'لغو شده',
self::Processed => 'پردازش شده',
self::PickedUp => 'تحویل گرفته شده',
self::InTransit => 'در حال حمل',
self::OutForDelivery => 'در مسیر تحویل',
self::Delivered => 'تحویل داده شده',
self::Failed => 'ناموفق',
self::Returned => 'برگشتی',
};
}
/**
* رنگ badge در Filament
*/
public function color(): string
{
return match($this) {
self::PendingPayment => 'warning',
self::Cancelled => 'gray',
self::Processed => 'info',
self::PickedUp => 'info',
self::InTransit => 'primary',
self::OutForDelivery => 'purple',
self::Delivered => 'success',
self::Failed => 'danger',
self::Returned => 'warning',
};
}
/**
* آیا این وضعیت به معنای "پرداخت شده" است؟
*/
public function isPaid(): bool
{
return in_array($this, [
self::Processed,
self::PickedUp,
self::InTransit,
self::OutForDelivery,
self::Delivered,
self::Failed,
self::Returned,
]);
}
/**
* آیا این وضعیت قابل لغو توسط مشتری است؟
*/
public function canBeCancelledByCustomer(): bool
{
return in_array($this, [
self::PendingPayment,
]);
}
}