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__)
81 lines
2.7 KiB
PHP
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,
|
|
]);
|
|
}
|
|
} |