Update all project documentation including README, Roadmap, Status, and Agent guides to reflect the transition to Phase 3.6 (Client Meeting Adjustments). Key documentation updates: - Documented the new order approval flow (pending_approval -> approved). - Added details for shipment commitment forms and document download system. - Included Kavenegar SMS integration and Audit Log implementation. - Updated API endpoint references for new verification and commitment routes. - Reflected increased project metrics (migrations, models, and API endpoints). - Updated deployment notes regarding SMS configuration.
766 lines
45 KiB
Markdown
766 lines
45 KiB
Markdown
# 🚨 STATUS.md — این فایل را اول بخوانید
|
||
|
||
> ⚠️ **بهروزرسانی 2026-09-10:** این سند تا **10 آگوست 2026** بهروزرسانی شده و تاریخچه فازهای ۰ تا ۳ را پوشش میدهد. **وضعیت جاری پروژه (فاز ۳.۵ ✅ و فاز ۳.۶ — اصلاحات جلسه کارفرما 🟡 ۸۰٪) در [`AGENT.md`](../AGENT.md) و [`IFNEX_Roadmap.md`](IFNEX_Roadmap.md) نگهداری میشود** — برای وضعیت فعلی و کارهای باقیمانده آن دو سند را ببینید. بخشهای پایین این فایل را بهعنوان تاریخچه و مرجع خط قرمزها بخوانید.
|
||
|
||
> **آخرین بهروزرسانی محتوا:** 2026-08-10 13:08 (Asia/Tehran)
|
||
> **فاز در حال اجرا (فعلی):** فاز ۳.۶ — اصلاحات جلسه کارفرما (تاریخچه: این سند تا فاز ۳ را ثبت کرده است)
|
||
> **توسعهدهنده:** VernaSoft Group — Kazem Alghasi
|
||
> **وضعیت کلی پروژه:** فاز ۰ کامل — فاز ۱ کامل — فاز ۲ کامل — فاز ۳ کامل — فاز ۳.۵ کامل — فاز ۳.۶ در حال تکمیل (۸۰٪)
|
||
|
||
---
|
||
|
||
## ⚠️ هشدار حیاتی — قبل از هر کاری بخوانید
|
||
|
||
این پروژه دارای **سه سند تاریخی** است که با هم تناقض دارند. فقط یکی از آنها معتبر است:
|
||
|
||
| فایل | وضعیت | اقدام |
|
||
|------|-------|-------|
|
||
| `01_Documents/Phase0_Proposal.md` | 🗄️ حذف شده از مخزن | محتوای معتبر آن در `AGENT.md` و `IFNEX_Roadmap.md` ادغام شده است |
|
||
| `01_Documents/PRD_v2.md` (در archives) | ❌ قدیمی و ناقص | فقط برای مرجع تاریخی — به اسکیمای دیتابیس آن اعتماد نکنید |
|
||
| `01_Documents/Project_Roadmap.md` (در archives) | ❌ قدیمی (۳ فازی) | فقط برای مرجع تاریخی — به فازبندی آن اعتماد نکنید |
|
||
| `01_Documents/EXCEL_ANALYSIS.md` | ✅ **مرجع تحلیل اکسل** | حتماً بخوانید قبل از کار با دادههای تاریخی |
|
||
| `README.md` (ریشه) | ✅ بهروز | برای نمای کلی بخوانید |
|
||
| `AGENT.md` (ریشه) | ✅ **مرجع اصلی وضعیت و قراردادها** | اول این را بخوانید |
|
||
|
||
> 🔴 **قانون طلایی:** هرجا بین اسناد تناقض دیدی، به `Phase0_Proposal.md` اعتماد کن. اسناد قدیمی فقط برای فهم تاریخچهی تصمیمات نگه داشته شدهاند.
|
||
|
||
---
|
||
|
||
## 📌 Quick Reference — نسخهها و معماری
|
||
|
||
### تکنولوژیها (قفلشده)
|
||
| مورد | نسخه/مقدار | دلیل |
|
||
|------|------------|------|
|
||
| Laravel | **11** (همهجا یکسان) | در PRD قدیمی ۱۰+ نوشته، در Roadmap قدیمی ۱۱، در README قدیمی ۱۲ — نسخه نهایی: **۱۱** |
|
||
| PHP | 8.2+ | الزام لاراول ۱۱ |
|
||
| MySQL | 8+ | برای پشتیبانی JSON columns |
|
||
| WordPress | ۷.۰.۳ | با پوسته سفامشی IFNEX + Polylang برای چندزبانه |
|
||
| پنل ادمین | Laravel Filament 3.3.x | رنگ Navy gradient، فونت Vazirmatn، RTL کامل |
|
||
| Frontend | وردپرس + پوسته IFNEX | **کپی نکنید** — فقط الهام |
|
||
| Authentication | Laravel Sanctum | توکنهای Bearer برای API مشتری |
|
||
| Permissions | spatie/laravel-permission | RBAC برای پنل ادمین |
|
||
| Payment Gateway | زرینپال (Zarinpal) | با Mock Gateway برای تست |
|
||
| Design System | IFNEX Design System | رنگهای برند، فاصلهگذاری، تایپوگرافی یکپارچه |
|
||
|
||
### معماری کلی
|
||
```
|
||
┌─────────────────┐ REST API ┌─────────────────┐
|
||
│ WordPress │ ←─────────────────────→ │ Laravel 11 │
|
||
│ (Frontend) │ پلاگین IFNEX Bridge │ (Backend) │
|
||
│ │ │ + Filament │
|
||
└─────────────────┘ └────────┬────────┘
|
||
│
|
||
┌────────┴────────┐
|
||
│ MySQL 8 │
|
||
└─────────────────┘
|
||
│
|
||
(فاز ۳) │
|
||
┌────────┴────────┐
|
||
│ VPS پل خارج │
|
||
│ (هلند/آلمان) │
|
||
└────────┬────────┘
|
||
│
|
||
┌────────┴────────┐
|
||
│ TrackingMore / │
|
||
│ 17track API │
|
||
└─────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## ✅ وضعیت فعلی کار
|
||
|
||
### کارهای انجامشده (تا تاریخ 2026-08-04)
|
||
|
||
#### ۱. اسکیمای دیتابیس فاز ۰ (کامل)
|
||
- [x] بازنویسی migration `countries` با ۴ زون مجزا + `iso_code` + `is_active`
|
||
- [x] بازنویسی migration `shipments` مطابق Phase 0 (فیلدهای مالی + ۴ زون + nullable حقایل)
|
||
- [x] بازنویسی migration `shipping_rates` با enum `direction` و `type` (DOC_NORMAL/DOC_ECONOMY/PARCEL)
|
||
- [x] ایجاد migration `shipment_carrier_mappings` (جدول جدید — نگاشت چند شرکت حمل)
|
||
- [x] ایجاد migration `shipment_tracking_events` (جدول جدید — تایملاین رویدادها)
|
||
- [x] ایجاد migration `system_settings` (جدول جدید — key-value برای VAT، نرخ ارز و...)
|
||
- [x] ایجاد migration `update_users` (افزودن `phone`, `role`, `is_active`)
|
||
- [x] ایجاد migration `shipment_items` (جدول جدید — اقلام گمرکی)
|
||
- [x] حل مشکل `unsignedDecimal` در Laravel 11 (استفاده از `decimal()->unsigned()`)
|
||
- [x] حل مشکل FK constraints در migrations (استفاده از `disableForeignKeyConstraints()`)
|
||
- [x] اجرای همه migrations در MySQL بدون خطا
|
||
|
||
#### ۲. مدلها و Enums (کامل)
|
||
- [x] بازنویسی `Country.php` + روابط `fromShipments()` / `toShipments()`
|
||
- [x] بازنویسی `Shipment.php` + روابط `fromCountry()`, `toCountry()`, `items()`, `carrierMappings()`, `trackingEvents()`
|
||
- [x] بازنویسی `ShippingRate.php` + cast برای enums
|
||
- [x] بازنویسی `User.php` + فیلدهای `phone`, `role`, `is_active` + helper methods
|
||
- [x] ایجاد مدلهای جدید:
|
||
- `ShipmentCarrierMapping.php`
|
||
- `ShipmentTrackingEvent.php`
|
||
- `SystemSetting.php`
|
||
- `Wallet.php` + `WalletTransaction.php`
|
||
- `DiscountCode.php`
|
||
- `ExchangeRateHistory.php`
|
||
- `Role.php` (spatie/laravel-permission)
|
||
- [x] ایجاد ۶ enum:
|
||
- `ShipmentDirection` (import/export)
|
||
- `ShipmentType` (DOC_NORMAL/DOC_ECONOMY/PARCEL)
|
||
- `ShipmentStatus` (۹ وضعیت شامل pending_payment/cancelled)
|
||
- `CarrierCode` (DHL/FEDEX/UPS/ARAMEX/NAGHEL/EMX/APSITEX/IMPEX/OTHER)
|
||
- `TrackingSource` (۵ منبع: manual/api/import/system/customer)
|
||
- `TransactionType` + `TransactionStatus`
|
||
- `PaymentGateway` (zarinpal/wallet/manual/system)
|
||
- `UserRole` (super_admin/tracking_operator/data_entry/customer)
|
||
|
||
#### ۳. Seeders (کامل)
|
||
- [x] بازنویسی `CountriesTableSeeder` با ۲۳۳ کشور + ۴ زون + iso_code تصحیحشده
|
||
- تصحیح کدهای ISO نادرست (Bonaire BQ، Curacao CW، حذف Somaliland XS)
|
||
- حذف کشورهای تکراری ("United Arab Emirates" و "Rest of Dubai" هر دو با zone 9 و 10)
|
||
- [x] ایجاد `SystemSettingSeeder` (VAT 9%، packing 100000 IRR، profit_margin 1.25، نرخ ارزهای اولیه)
|
||
- [x] بازنویسی `DatabaseSeeder` (countries + system_settings + super_admin user)
|
||
- [x] ایجاد `RoleAndPermissionSeeder` (نقشهای اولیه + دسترسیهای پایه)
|
||
- [x] ایجاد `SampleDataSeeder` (۵ مرسوله، ۴ تراکنش، ۳ کد تخفیف)
|
||
- [x] اجرای seeders — ۲۳۲ کشور + ۷ setting + ۱ کاربر ادمین
|
||
|
||
#### ۴. API ترکینگ (کامل)
|
||
- [x] ایجاد `TrackController` با JSON response کامل (shipment + carrier_mappings + timeline)
|
||
- [x] ایجاد `ApiKeyMiddleware` (Bearer token validation)
|
||
- [x] ثبت route `GET /api/v1/track/{awb_no}` با middleware API Key
|
||
- [x] تستهای موفق:
|
||
- `GET /api/v1/track/TEST123` با API Key صحیح → **200 OK**
|
||
- بدون API Key → **401 Unauthorized**
|
||
- با API Key نامعتبر → **403 Forbidden**
|
||
|
||
#### ۵. Filament Resources (کامل)
|
||
- [x] `CountryResource` — فرم ۴ زون + iso_code + is_active + فیلترها
|
||
- [x] `ShipmentResource` — فرم کامل با ۷ Section + RelationManagers
|
||
- Section: Route & Status
|
||
- Section: Weight & Dimensions
|
||
- Section: Financial Info (۱۱ فیلد مالی)
|
||
- Section: Sender Info
|
||
- Section: Receiver Info
|
||
- Section: Customs Items (Repeater ۹ ردیف)
|
||
- [x] `ShippingRateResource` — فرم ۱۰ zone + enum type/direction
|
||
- [x] `ShipmentItemResource` — CRUD کامل
|
||
- [x] `WalletResource` — مدیریت کیف پول
|
||
- [x] `WalletTransactionResource` — CRUD کامل با صفحات Create/Edit
|
||
- [x] `PaymentResource` — مشاهده تراکنشهای درگاه
|
||
- [x] `DiscountCodeResource` — مدیریت کدهای تخفیف با form/table/filters
|
||
- [x] `ExchangeRateHistoryResource` — مشاهده تاریخچه نرخ ارز
|
||
- [x] `RoleResource` — مدیریت نقشها (spatie/laravel-permission)
|
||
- [x] `UserResource` — مدیریت کاربران (spatie/laravel-permission)
|
||
- [x] RelationManagers:
|
||
- `CarrierMappingsRelationManager` (برای Shipment)
|
||
- `TrackingEventsRelationManager` (برای Shipment)
|
||
- [x] Pages:
|
||
- `ListShipments`, `CreateShipment`, `EditShipment`, `ViewShipment`
|
||
- `ListCountries`, `CreateCountry`, `EditCountry`
|
||
- `ListShippingRates`, `CreateShippingRate`, `EditShippingRate`
|
||
- `ListShipmentItems`, `CreateShipmentItem`, `EditShipmentItem`
|
||
- `ListWalletTransactions`, `CreateWalletTransaction`, `EditWalletTransaction`
|
||
- `ListPayments`, `ViewPayment`
|
||
- `ListDiscountCodes`, `CreateDiscountCode`, `EditDiscountCode`
|
||
- `ListExchangeRateHistories`, `ViewExchangeRateHistory`
|
||
- `ListRoles`, `CreateRole`, `EditRole`
|
||
- `ListUsers`, `CreateUser`, `EditUser`
|
||
- [x] `SettingsPage` (Page سفارشی برای System Settings)
|
||
- [x] `DashboardInfoWidget` — اطلاعات کلی داشبورد
|
||
- [x] `ExchangeRateWidget` — نرخ ارز زنده
|
||
- [x] `WalletStats` — آمار کیف پول
|
||
- [x] `TransactionChartWidget` — نمودار تراکنشها
|
||
- [x] `RecentTransactionsWidget` — آخرین تراکنشها
|
||
- [x] `FinancialReport` — گزارش مالی کامل
|
||
|
||
#### ۶. Services (کامل)
|
||
- [x] `TrackingService` — getTrackingTimeline, addTrackingEvent, getShipmentWithTracking
|
||
- [x] `PriceCalculatorService` — محاسبه قیمت کامل مطابق EXCEL_ANALYSIS.md
|
||
- مرحله ۱: وزن حجمی
|
||
- مرحله ۲: وزن قابل پرداخت
|
||
- مرحله ۳: استخراج زون از ۴ زون مجزا
|
||
- مرحله ۴: استخراج قیمت پایه از shipping_rates
|
||
- مرحله ۵: اعمال ضریب سود
|
||
- مرحله ۶: تبدیل درهم به ریال
|
||
- مرحله ۷: اضافه هزینههای جانبی
|
||
- مرحله ۸: اعمال VAT 9%
|
||
- مرحله ۹: ذخیره خروجیها
|
||
- [x] `ExchangeRateService` — مدیریت و ردیابی نرخ ارز
|
||
- [x] `ZarinpalService` — اتصال به درگاه پرداخت زرینپال
|
||
- [x] `MockZarinpalService` — شبیهسازی درگاه برای تست
|
||
- [x] `OrderPaymentService` — پرداخت سفارشات (کیف پول + درگاه)
|
||
|
||
#### ۷. Imports (Excel) (کامل)
|
||
- [x] `ShippingRatesImport` — import از ۵ شیت (Import Rate, Export Rate, DocNor, DocEco, Parcel)
|
||
- ۴۰۴ رکورد import شد: DocNormal: ۷۴، DocEconomy: ۷۰، Parcel: ۲۶۰
|
||
- [x] `HistoricalShipmentsImport` — import از شیت List فایل اصلی
|
||
- ⚠️ **مشکل:** فایل اکسل فقط ۲ ردیف داده واقعی دارد و بقیه فرمولهای Excel هستند
|
||
- ۱ رکورد (980100010) موفقیتآمیز import شد
|
||
- [x] Artisan Commands:
|
||
- `ifnex:import:rates {path}`
|
||
- `ifnex:import:shipments {path}`
|
||
|
||
#### ۸. سوییچ به Laravel 11 (کامل با نقص باقیمانده)
|
||
- [x] تغییر `composer.json`: `laravel/framework` از `^12.0` به `^11.0`
|
||
- [x] تغییر `morilog/jalali` از `^4.3` به `^3.0` (v4 وجود ندارد)
|
||
- [x] اجرای `composer update` — Laravel از v12.64.0 به v11.55.0 downgrade شد
|
||
- [x] رفع خطای PSR-4 در `SettingsPage.php`
|
||
- [x] رفع مشکل middleware در `bootstrap/app.php` برای Laravel 11
|
||
- [x] رفع خطای `MethodNotAllowedHttpException` برای POST `/admin/login`
|
||
|
||
#### ٩. پیکربندی (کامل)
|
||
- [x] اضافه کردن `IFNEX_API_KEY` به `.env.example`
|
||
- [x] اضافه کردن `CORS_ALLOWED_ORIGINS` به `.env.example`
|
||
- [x] اضافه کردن `IFNEX_TRACKING_RATE_LIMIT` به `.env.example`
|
||
- [x] ایجاد `config/ifnex.php` برای تنظیمات اختصاصی
|
||
- [x] تغییر `APP_LOCALE` به `fa` در `.env.example`
|
||
- [x] اضافه کردن `morilog/jalali` به `composer.json`
|
||
- [x] ایجاد `config/cors.php`
|
||
|
||
---
|
||
|
||
### 🔴 Code Review Findings — نیاز به رفع
|
||
|
||
| # | فایل | مشکل | وضعیت | راهحل |
|
||
|---|------|------|-------|-------|
|
||
| 1 | `bootstrap/app.php` | گروه `web` تعریف نشده | ✅ انجام شد | `$middleware->group('web', [...])` اضافه شد |
|
||
| 2 | `AdminPanelProvider.php` | Middlewareهای طولانی به صورت لیست دستی | ✅ انجام شد | استفاده از گروه `web` به جای لیست دستی |
|
||
| 3 | `bootstrap/app.php` | `statefulApi` تعریف نشده | 🟡 آینده | برای احراز هویت SPA در فاز بعد لازم است |
|
||
|
||
**توضیح مشکل #1:**
|
||
در Laravel 11، گروه `web` بهصورت خودکار تعریف نمیشود. Filament برای لاگین نیاز به Session, Cookies, CSRF, ShareErrors دارد. فعلاً کار میکند چون در `AdminPanelProvider.php` همه Middlewareها به صورت لیست دستی نوشته شدهاند، اما این روش **خوب نیست** و مطابق Laravel 11 conventions نیست. اگر جایی از `web` group استفاده شود، کار نمیکند.
|
||
|
||
**راهحل پیشنهادی برای `bootstrap/app.php`:**
|
||
```php
|
||
->withMiddleware(function (Middleware $middleware): void {
|
||
$middleware->api(prepend: \Illuminate\Http\Middleware\HandleCors::class);
|
||
|
||
$middleware->group('web', [
|
||
\Illuminate\Cookie\Middleware\EncryptCookies::class,
|
||
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
|
||
\Illuminate\Session\Middleware\StartSession::class,
|
||
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
||
\Illuminate\Foundation\Http\Middleware\ValidateCsrfToken::class,
|
||
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||
]);
|
||
})
|
||
```
|
||
|
||
**راهحل پیشنهادی برای `AdminPanelProvider.php` بعد از تعریف گروه `web`:**
|
||
```php
|
||
->middleware([
|
||
'web',
|
||
\Filament\Http\Middleware\Authenticate::class,
|
||
])
|
||
```
|
||
|
||
---
|
||
|
||
### 🔴 مشکل — مهاجرت دادههای تاریخی
|
||
|
||
**وضعیت:** فایل اکسل مرسولات فعلی فقط دادههای نمونه/قدیمی دارد و برای import کامل مناسب نیست.
|
||
**راهحل:** هر فایل اکسل جدید که مشتری تحویل دهد، باید قابل import باشد. نیازی به مهاجرت همه دادههای قدیمی نیست.
|
||
**فایل ترکینگ:** `01_Documents/Data entry 2026-06-28.xlsx` — شامل ۶ شیت: Sheet1, Refrence, Paste, copy, Delivered, test
|
||
**وضعیت:** **فایل موجود است** — مهاجrut دادههای ترکینگ میتواند انجام شود.
|
||
|
||
---
|
||
|
||
### کارهای در دست اقدام (فاز ۰)
|
||
|
||
| اولویت | کار | وضعیت | توضیحات |
|
||
|--------|-----|-------|---------|
|
||
| 🔴 بالا | تست دستی کامل Filament (ورود + CRUD) | ✅ انجام شد | همه Resources + RelationManagers + Settings کار میکنند |
|
||
| 🟡 متوسط | مهاجرت دادههای ترکینگ از `01_Documents/Data entry 2026-06-28.xlsx` | ✅ انجام شد | 98 رویداد import شد، 8 shipment |
|
||
| 🟡 متوسط | ساخت پلاگین وردپرس IFNEX Bridge | ✅ انجام شد | شورتکدهای [ifnex_tracking_form] و [ifnex_tracking_status] کار میکنند |
|
||
| 🟡 متوسط | تست API Track با نمونههای بیشتر | ✅ انجام شد | AWB 980100010 و 980103619 تست شدند |
|
||
| 🟢 پایین | تست نهایی فاز ۰ و تحویل به مشتری | ✅ انجام شد | همه موارد تست شدند |
|
||
|
||
---
|
||
|
||
### کارهای فاز ۱ (تکمیل شده)
|
||
|
||
- [x] موتور قیمتگذاری کامل (`PriceCalculatorService`) — نوشته شد، تست با دادههای واقعی انجام شد
|
||
- [x] جدول `shipping_rates` — ۱۳۸ رکورد import شد با پشتیبانی از ۵ نوع سرویس/جهت
|
||
- [x] فرم ثبت سفارش آنلاین با ۹ ردیف کالای گمرکی
|
||
- [x] تولید PDF: AWB، INVOICE، Label — پیاده شد. قالبها بر اساس ساختار شیتهای اکسل و لوگوی استخراجشده طراحی شدند. استایل نهایی و تطبیق دقیقتر با قالبهای اکسل در فاز بعدی انجام میشود.
|
||
- [x] ماژول ایمپورت اکسل تعرفهها — command با قابلیتهای --clear و --dry-run پیاده شد
|
||
- [x] صفحه استعلام قیمت واقعی — رابط کاربری عمومی + API محاسبه قیمت
|
||
|
||
---
|
||
|
||
### کارهای فاز ۲ (تکمیل شده)
|
||
|
||
- [x] ساخت `WalletController` با APIهای شارژ، بررسی موجودی و تاریخچه تراکنشها
|
||
- [x] ساخت `DiscountCodeController` با APIهای لیست و اعتبارسنجی کده تخفیف
|
||
- [x] ساخت `UpdateExchangeRates` Artisan Command با پشتیبانی از ECB و FreeCurrencyAPI
|
||
- [x] ثبت routeهای کیف پول و تخفیف در `api.php`
|
||
- [x] اضافه کردن `CURRENCY_API_KEY` به `.env.example` و `config/ifnex.php`
|
||
- [x] پاکسازی فایلهای تست و debug (`check_*.php`, `debug_*.php`, `test_*.php`, `inspect_*.php`)
|
||
- [x] رفع CORS — تغییر از `*` به دامنه مشخص از `.env`
|
||
- [x] حذف migrationهای قدیمی تکراری (`2023_10_27_*`, `2026_07_31_*`)
|
||
- [x] اتصال درگاه پرداخت (زرینپال) با Mock Gateway برای تست
|
||
- [x] ساخت `ZarinpalService` و `MockZarinpalService`
|
||
- [x] ساخت `OrderPaymentService` برای پرداخت سفارشات
|
||
- [x] ساخت `ExchangeRateService` و `ExchangeRateHistory` برای ردیابی نرخ ارز
|
||
- [x] پنل مالی در Filament (داشبورد سود/زیان)
|
||
- [x] تکمیل DiscountCodeResource با form/table/filters
|
||
- [x] ساخت PaymentResource در Filament
|
||
- [x] ساخت WalletTransactionResource با صفحات Create/Edit
|
||
- [x] ساخت ExchangeRateHistoryResource
|
||
- [x] تستهای Unit/Feature برای Phase 2 (24 تست، 77 assertion)
|
||
- [x] رفع باگ WalletController::balance()
|
||
- [x] حذف PaymentGatewayService قدیمی (استفاده نمیشد)
|
||
- [x] زیباسازی داشبورد و صفحه لاگین Filament (رنگ Navy، Vazirmatn، RTL)
|
||
- [x] گسترش پلاگین IFNEX Bridge برای وردپرس:
|
||
- [x] ساخت `IFNEX_User_Bridge` برای مدیریت توکن Sanctum کاربران وردپرس
|
||
- [x] اضافه کردن شورتکد `[ifnex_wallet_balance]`
|
||
- [x] اضافه کردن شورتکد `[ifnex_transactions]`
|
||
- [x] اضافه کردن AJAX handlers برای کیف پول و تراکنشها
|
||
- [x] ساخت استایلهای CSS کامل برای تمام کامپوننتهای پلاگین
|
||
- [x] ایجاد صفحه تست در وردپرس: http://localhost/ifnexwp/?page_id=18
|
||
- [x] یکپارچگی RBAC با spatie/laravel-permission
|
||
- [x] نصب پکیج `spatie/laravel-permission`
|
||
- [x] ساخت `RoleResource` و `UserResource` در Filament
|
||
- [x] ساخت `RoleAndPermissionSeeder`
|
||
- [x] سینک کاربران وردپرس ↔ لاراول با دستور `ifnex:sync-wp-users`
|
||
- [x] طراحی سیستم یکپارچه IFNEX (DESIGN_SYSTEM.md)
|
||
- [x] گزارشگیری مالی در Filament (FinancialReport)
|
||
- [x] خروجی Excel برای ShipmentResource و WalletTransactionResource
|
||
|
||
### کارهای فاز ۳ (تکمیل شده)
|
||
|
||
- [x] ساخت `AuthController` برای ورود/خروج Sanctum مشتریان
|
||
- [x] ساخت `BridgeAuthController` برای لاگین مستقیم از وردپرس
|
||
- [x] ساخت `CustomerOrderController` با ۶ endpoint:
|
||
- [x] `GET /api/v1/customer/profile` — پروفایل و آمار
|
||
- [x] `GET /api/v1/customer/countries` — لیست کشورها
|
||
- [x] `GET /api/v1/customer/orders` — لیست سفارشات
|
||
- [x] `POST /api/v1/customer/orders` — ثبت سفارش جدید
|
||
- [x] `GET /api/v1/customer/orders/{shipment}` — جزئیات سفارش
|
||
- [x] `POST /api/v1/customer/orders/{shipment}/cancel` — لغو سفارش
|
||
- [x] ساخت `OrderPaymentService` برای پرداخت سفارشات
|
||
- [x] پرداخت از کیف پول: `payFromWallet()`
|
||
- [x] پرداخت از درگاه: `initiateGatewayPayment()`
|
||
- [x] تکمیل پرداخت بعد از callback: `completeGatewayPayment()`
|
||
- [x] توسعه پلاگین IFNEX Bridge برای پورتال مشتری:
|
||
- [x] شورتکد `[ifnex_order_form]` — فرم ثبت سفارش چندمرحلهای
|
||
- [x] شورتکد `[ifnex_orders_list]` — لیست سفارشات
|
||
- [x] شورتکد `[ifnex_order_payment]` — صفحه پرداخت سفارش
|
||
- [x] شورتکد `[ifnex_order_detail]` — جزئیات سفارش
|
||
- [x] شورتکد `[ifnex_user_profile]` — پروفایل کاربر
|
||
- [x] استایل `ifnex-orders.css` برای تمام کامپوننتها
|
||
- [x] اسکریپت `ifnex-order-form.js` برای ناوبری مراحل و AJAX
|
||
- [x] AJAX handlers: `ifnex_pay_order_wallet`, `ifnex_pay_order_gateway`, `ifnex_cancel_order`
|
||
- [x] توسعه پوسته سفامشی IFNEX برای وردپرس:
|
||
- [x] پشتیبانی چندزبانه با Polylang
|
||
- [x] مدیریت LTR/RTL خودکار
|
||
- [x] Customizer برای لوگو و زبان
|
||
- [x] قالبهای archive, single, front-page
|
||
- [x] ساختار تمیک شرکتی با لوگو IFNEX
|
||
- [x] بهروزرسانی وردپرس به نسخه ۷.۰.۳ با بهبودهای امنیتی
|
||
- [x] یکپارچگی Design System در Filament و وردپرس
|
||
- [x] خروجی CSV برای ShipmentResource و WalletTransactionResource
|
||
|
||
---
|
||
|
||
## 🚫 خط قرمزها (DO NOT) — هرگز این کارها را نکن
|
||
|
||
### 🚫 اسکیمای دیتابیس
|
||
- **NEVER** جدول `countries` را به ۲ زون برگردانی — ۴ زون مجزا (export_parcel, export_doc, import_parcel, import_doc) الزامی است.
|
||
- **NEVER** فقط ۲ نوع سرویس پیاده کن — ۳ نوع الزامی است: `DOC_NORMAL`, `DOC_ECONOMY`, `PARCEL`.
|
||
- **NEVER** فیلد `forwarder_track_id` را بهعنوان فیلد واحد در `shipments` نگه دار — باید `shipment_carrier_mappings` استفاده شود.
|
||
- **NEVER** فیلدهای مالی مهم (VAT، Domestic Pickup، Domestic Delivery، Warehousing Cost، Extra Service، Packing Cost) را حذف کن.
|
||
- **NEVER** فیلد `status` در `shipments` را به String تغییر دهی — Enum استفاده کن.
|
||
|
||
### 🚫 معماری
|
||
- **NEVER** ترکینگ را در وردپرس پیاده کن — همیشه در لاراول.
|
||
- **NEVER** در وردپرس پردازش دادهی سفارش انجام دهی — تمام فرمها از طریق پلاگین IFNEX Bridge به لاراول ارسال میشوند.
|
||
- **NEVER** API لاراول را بدون API Key، Rate Limiting و CORS whitelist بگذاری.
|
||
- **NEVER** از CORS `*` استفاده کنی — فقط دامنهی تولیدی وردپرس باید whitelist شود.
|
||
- **NEVER** تاریخها را به شمسی در دیتابیس ذخیره کنی — همیشه timestamp میلادی.
|
||
|
||
### 🚫 طراحی و کپیرایت
|
||
- **NEVER** از رنگ، لوگو یا عناصر هویت بصری DHL کپی کنی.
|
||
- **NEVER** خروجی PDF (AWB، Invoice، Label) را به فارسی بسازی — انگلیسی باشد.
|
||
|
||
### 🚫 فرآیند
|
||
- **NEVER** فایل `.env` را در Git کامیت کنی.
|
||
- **NEVER** `APP_DEBUG=true` را در محیط تولید بگذاری.
|
||
- **NEVER** اسکوپ فاز ۰ را بدون Change Request رسمی تغییر دهی.
|
||
- **NEVER** فاز ۱ را قبل از تأیید رسمی فاز ۰ توسط مشتری شروع کنی.
|
||
|
||
---
|
||
|
||
## ❓ سوالات متداول (FAQ)
|
||
|
||
### س: کدام نسخه لاراول استفاده کنم؟
|
||
**ج:** لاراول **۱۱**. این نسخه در `STATUS.md` قفل شده و در `composer.json` هم تنظیم شده است.
|
||
|
||
### س: مهاجرت دادههایHistorical چقدر مهم است؟
|
||
**ج:** هر فایل اکسل جدید که مشتری تحویل دهد، باید قابل import باشد. نیازی به مهاجرت همه دادههای قدیمی نیست. فایل ترکینگ `Data entry 2026-06-28.xlsx` موجود است و قابل import است.
|
||
|
||
### س: چه کارهایی در این جلسه انجام شد؟
|
||
**ج:**
|
||
1. تکمیل کامل سیستم سفارشات مشتری (CustomerOrderController با ۶ endpoint)
|
||
2. توسعه سرویس پرداخت سفارشات (OrderPaymentService) — کیف پول + درگاه
|
||
3. ساخت AuthController و BridgeAuthController برای احراز هویت
|
||
4. گسترش پلاگین IFNEX Bridge با شورتکدهای پرداخت و جزئیات سفارش
|
||
5. افزودن ۲ وضعیت جدید به ShipmentStatus: pending_payment و cancelled
|
||
6. توسعه پورتال مشتری در وردپرس (فرم سفارش، لیست، پرداخت، جزئیات)
|
||
7. یکپارچگی RBAC با spatie/laravel-permission
|
||
8. ردیابی تاریخچه نرخ ارز با ExchangeRateHistory
|
||
9. طراحی سیستم یکپارچه IFNEX (DESIGN_SYSTEM.md)
|
||
10. بهروزرسانی وردپرس به ۷.۰.۳
|
||
|
||
### س: چه کارهایی باقی مانده؟
|
||
**ج:**
|
||
- تست کامل APIهای سفارشات مشتری و پرداخت
|
||
- تست کامل پلاگین وردپرس با دادههای واقعی مشتری
|
||
- راهاندازی VPS پل خارج برای API ترکینگ زنده (فاز ۴)
|
||
- اتصال به TrackingMore/17track API
|
||
- ~~فرمول محاسبه قیمت رقبا~~ (آرشیو شد)
|
||
|
||
---
|
||
|
||
## 🛠️ Quick Commands — دستورات پرکاربرد
|
||
|
||
### نصب و راهاندازی لاراول
|
||
```bash
|
||
cd 04_Laravel
|
||
composer install
|
||
cp .env.example .env
|
||
php artisan key:generate
|
||
php artisan migrate --force
|
||
php artisan db:seed --force
|
||
php artisan serve
|
||
```
|
||
|
||
### Artisan Commands سفارشی
|
||
```bash
|
||
# Import shipping rates
|
||
php artisan ifnex:import:rates storage/app/public/01KYWGVNKS5TNMN37RV77PCYNZ.xlsx
|
||
|
||
# Import historical shipments
|
||
php artisan ifnex:import:shipments storage/app/public/01KYWGVNKS5TNMN37RV77PCYNZ.xlsx
|
||
|
||
# Update exchange rates
|
||
php artisan ifnex:update-exchange-rates
|
||
|
||
# Sync WordPress users
|
||
php artisan ifnex:sync-wp-users
|
||
```
|
||
|
||
### تست API Track
|
||
```bash
|
||
# با API Key صحیح
|
||
curl -H "Authorization: Bearer ifnex-local-dev-key" http://localhost:8000/api/v1/track/TEST123
|
||
|
||
# بدون API Key
|
||
curl http://localhost:8000/api/v1/track/TEST123
|
||
|
||
# با API Key نامعتبر
|
||
curl -H "Authorization: Bearer wrong-key" http://localhost:8000/api/v1/track/TEST123
|
||
```
|
||
|
||
### تست API سفارشات مشتری
|
||
```bash
|
||
# ورود و دریافت توکن
|
||
curl -X POST http://localhost:8000/api/v1/auth/login \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"email":"admin@ifnex.local","password":"password"}'
|
||
|
||
# لیست سفارشات (با توکن)
|
||
curl -H "Authorization: Bearer {token}" \
|
||
http://localhost:8000/api/v1/customer/orders
|
||
|
||
# ثبت سفارش جدید
|
||
curl -X POST http://localhost:8000/api/v1/customer/orders \
|
||
-H "Authorization: Bearer {token}" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"direction":"export","type":"PARCEL","from_country_id":1,"to_country_id":2,"weight":2.5,...}'
|
||
```
|
||
|
||
### پشتیبانگیری از دیتابیس
|
||
```bash
|
||
mysqldump -u root -p ifnex_db > backups/ifnex_$(date +%Y%m%d).sql
|
||
```
|
||
|
||
---
|
||
|
||
## 📂 ساختار پوشههای پروژه (پس از تکمیل فاز ۰)
|
||
|
||
```
|
||
IFNEX-Logistics/
|
||
├── 01_Documents/
|
||
│ ├── STATUS.md ⭐ این فایل — اول بخوان
|
||
│ ├── Phase0_Proposal.md ⭐ مرجع اصلی پروژه
|
||
│ ├── EXCEL_ANALYSIS.md ⭐ تحلیل فایلهای اکسل
|
||
│ ├── PRD_v2.md (قدیمی — مرجع تاریخی)
|
||
│ ├── Project_Roadmap.md (قدیمی — مرجع تاریخی)
|
||
│ └── IFNEX_Phase0_Checklist.md (چکلیست فاز ۰)
|
||
│
|
||
├── 02_Design/
|
||
│ └── Assets/ (لوگوها، آیکونها، فایلهای فیگما)
|
||
│
|
||
├── 03_WordPress/
|
||
│ └── wp-content/plugins/
|
||
│ └── ifnex-bridge/ (پلاگین اختصاصی)
|
||
│ ├── ifnex-bridge.php
|
||
│ ├── includes/
|
||
│ │ ├── api-client.php
|
||
│ │ ├── shortcodes.php
|
||
│ │ └── tracking-form.php
|
||
│ └── assets/
|
||
│ ├── css/
|
||
│ └── js/
|
||
│
|
||
├── 04_Laravel/
|
||
│ ├── app/
|
||
│ │ ├── Models/
|
||
│ │ │ ├── Country.php
|
||
│ │ │ ├── Shipment.php
|
||
│ │ │ ├── ShipmentCarrierMapping.php
|
||
│ │ │ ├── ShipmentTrackingEvent.php
|
||
│ │ │ ├── SystemSetting.php
|
||
│ │ │ ├── ShippingRate.php
|
||
│ │ │ ├── ShipmentItem.php
|
||
│ │ │ └── User.php
|
||
│ │ ├── Enums/
|
||
│ │ │ ├── ShipmentDirection.php
|
||
│ │ │ ├── ShipmentType.php
|
||
│ │ │ ├── ShipmentStatus.php
|
||
│ │ │ ├── CarrierCode.php
|
||
│ │ │ ├── TrackingSource.php
|
||
│ │ │ └── UserRole.php
|
||
│ │ ├── Services/
|
||
│ │ │ ├── TrackingService.php
|
||
│ │ │ └── PriceCalculatorService.php
|
||
│ │ ├── Http/
|
||
│ │ │ ├── Controllers/
|
||
│ │ │ │ └── Api/
|
||
│ │ │ │ ├── TrackController.php
|
||
│ │ │ │ └── PricingController.php
|
||
│ │ │ └── Middleware/
|
||
│ │ │ └── ApiKeyMiddleware.php
|
||
│ │ ├── Imports/
|
||
│ │ │ ├── ShippingRatesImport.php
|
||
│ │ │ ├── HistoricalShipmentsImport.php
|
||
│ │ │ └── RateSheetImport.php
|
||
│ │ ├── Console/
|
||
│ │ │ └── Commands/
|
||
│ │ │ ├── ImportShippingRates.php
|
||
│ │ │ ├── ImportHistoricalData.php
|
||
│ │ │ └── DebugImportCommand.php
|
||
│ │ ├── Filament/
|
||
│ │ │ ├── Resources/
|
||
│ │ │ │ ├── CountryResource.php
|
||
│ │ │ │ ├── ShipmentResource.php
|
||
│ │ │ │ │ ├── Pages/
|
||
│ │ │ │ │ │ ├── CreateShipment.php
|
||
│ │ │ │ │ │ ├── EditShipment.php
|
||
│ │ │ │ │ │ ├── ViewShipment.php
|
||
│ │ │ │ │ │ └── ListShipments.php
|
||
│ │ │ │ │ └── RelationManagers/
|
||
│ │ │ │ │ ├── CarrierMappingsRelationManager.php
|
||
│ │ │ │ │ └── TrackingEventsRelationManager.php
|
||
│ │ │ │ ├── ShippingRateResource.php
|
||
│ │ │ │ └── ShipmentItemResource.php
|
||
│ │ │ └── Pages/
|
||
│ │ │ └── IfnexSettingsPage.php
|
||
│ │ └── Providers/
|
||
│ │ ├── AppServiceProvider.php
|
||
│ │ └── Filament/
|
||
│ │ └── AdminPanelProvider.php
|
||
│ ├── database/
|
||
│ │ ├── migrations/
|
||
│ │ │ ├── 2026_08_02_000001_create_countries_table.php
|
||
│ │ │ ├── 2026_08_02_000002_create_shipments_table.php
|
||
│ │ │ ├── 2026_08_02_000003_create_shipping_rates_table.php
|
||
│ │ │ ├── 2026_08_02_000004_create_shipment_carrier_mappings_table.php
|
||
│ │ │ ├── 2026_08_02_000005_create_shipment_tracking_events_table.php
|
||
│ │ │ ├── 2026_08_02_000006_create_system_settings_table.php
|
||
│ │ │ └── 2026_08_02_000007_update_users_table.php
|
||
│ │ └── seeders/
|
||
│ │ ├── CountriesTableSeeder.php
|
||
│ │ ├── SystemSettingSeeder.php
|
||
│ │ └── DatabaseSeeder.php
|
||
│ ├── routes/
|
||
│ │ ├── web.php
|
||
│ │ └── api.php
|
||
│ ├── config/
|
||
│ │ ├── ifnex.php
|
||
│ │ └── cors.php
|
||
│ ├── bootstrap/
|
||
│ │ └── app.php
|
||
│ └── .env.example
|
||
│
|
||
├── README.md
|
||
├── composer.json
|
||
└── .gitignore
|
||
```
|
||
|
||
---
|
||
|
||
## 🎯 گام بعدی برای ادامهی کار
|
||
|
||
اگر نمونهی جدیدی از AI Agent هستی که میخواهی کار را ادامه دهی، این مراحل را به ترتیب برو:
|
||
|
||
۱. **این فایل (`STATUS.md`)** را کامل بخوان — حالا خواندی ✅
|
||
۲. **`EXCEL_ANALYSIS.md`** را کامل بخوان — برای فهم دادههای تاریخی ضروری است
|
||
۳. **`Phase0_Proposal.md`** را کامل بخون — مرجع اصلی پروژه
|
||
۴. **`README.md`** ریشه را بخوان — برای نمای کلی
|
||
۵. کد موجود در `04_Laravel` را بررسی کن — ببین چه چیزی نوشته شده
|
||
۶. **اولویت اول:** تست کامل APIهای جدید (customer orders, payments, auth)
|
||
۷. **اولویت دوم:** تست کامل پلاگین وردپرس با دادههای واقعی
|
||
۸. با کاربر (Kazem) هماهنگ کن — بپرس کدام کار را باید ادامه دهی
|
||
|
||
**مهمترین کار بعدی:** تست کامل APIهای سفارشات مشتری + پرداخت.
|
||
|
||
---
|
||
|
||
## 📞 تماس
|
||
|
||
- **توسعهدهنده اصلی:** Kazem Alghasi (VernaSoft Group)
|
||
- **مشتری:** شرکت IFNEX اصفهان
|
||
- **مخزن:** https://www.git.vernahost.ir/gitmodir110/ifnex
|
||
|
||
اگر سوالی داشتی که در این فایل یا `EXCEL_ANALYSIS.md` یا `Phase0_Proposal.md` پاسخ آن نبود، از کاربر بپرس — حدس نزن.
|
||
|
||
---
|
||
|
||
### کارهای انجامشده اخیر (آگوست ۲۰۲۶)
|
||
|
||
### 2026-08-10
|
||
- رفع باگ ExportAction در ShipmentResource و WalletTransactionResource
|
||
- جایگزینی ExportAction با Action ساده + CSV native (بدون نیاز به maatwebsite/excel)
|
||
- ساخت صفحات CreateWalletTransaction و EditWalletTransaction
|
||
- اصلاح match expression برای TransactionType enum
|
||
- سفارشیسازی تم Filament:
|
||
* رنگ Primary = Amber (#f59e0b)
|
||
* Sidebar = Dark Navy gradient (#1a1a2e → #16213e)
|
||
* فونت Vazirmatn برای فارسی
|
||
* RTL کامل
|
||
* Scrollbar سفارشی
|
||
* Login Page با گرادیان زیبا
|
||
- نصب جدول notifications برای database notifications
|
||
- بهینهسازی استفاده از متدهای color() و label() در Enumها
|
||
- تست کامل داشبورد مالی و منوهای مختلف
|
||
- **تکمیل کامل پورتال مشتری وردپرس:**
|
||
- شورتکد `[ifnex_order_form]` — فرم ثبت سفارش چندمرحلهای
|
||
- شورتکد `[ifnex_orders_list]` — لیست سفارشات با فیلتر وضعیت
|
||
- شورتکد `[ifnex_order_payment]` — صفحه پرداخت سفارش (کیف پول + درگاه)
|
||
- شورتکد `[ifnex_order_detail]` — جزئیات سفارش با timeline رهگیری
|
||
- شورتکد `[ifnex_user_profile]` — پروفایل کاربر با آمار کیف پول
|
||
- استایل `ifnex-orders.css` و اسکریپت `ifnex-order-form.js`
|
||
- AJAX handlers برای پرداخت از کیف پول و درگاه
|
||
- **تکمیل سیستم پرداخت سفارشات:**
|
||
- `CustomerOrderController` با ۶ endpoint
|
||
- `OrderPaymentService` برای پرداخت از کیف پول و درگاه
|
||
- `BridgeAuthController` برای لاگین از وردپرس
|
||
- APIهای `/customer/orders/*` و `/customer/orders/{shipment}/pay-*`
|
||
- وضعیتهای جدید `pending_payment` و `cancelled` در ShipmentStatus
|
||
- **بهروزرسانی Enums:**
|
||
- `PaymentGateway` اضافه شدن case `WALLET`
|
||
- `TrackingSource` اضافه شدن cases `SYSTEM` و `CUSTOMER`
|
||
|
||
#### ۲۰۲۶-۰۸-۰۸
|
||
- ساخت `WalletController` با APIهای شارچ، بررسی موجودی و تاریخچه تراکنشها
|
||
- ساخت `DiscountCodeController` با APIهای لیست و اعتبارسنجی کده تخفیف
|
||
- ساخت `UpdateExchangeRates` Artisan Command
|
||
- ثبت routeهای کیف پول و تخفیف در `api.php`
|
||
- اضافه کردن `CURRENCY_API_KEY` به `.env.example` و `config/ifnex.php`
|
||
- پاکسازی فایلهای تست و debug از پوشه `04_Laravel`
|
||
- رفع CORS — تغییر از `*` به دامنه مشخص از `.env`
|
||
- حذف migrationهای قدیمی تکراری
|
||
- نصب و پیکربندی Laravel Sanctum برای API authentication
|
||
- ساخت Artisan Command `ifnex:token` برای تولید توکن API
|
||
- تست کامل APIهای کیف پول با curl
|
||
- ساخت ZarinpalService برای اتصال به درگاه پرداخت واقعی
|
||
- ساخت MockZarinpalService برای تست بدون Merchant ID
|
||
- ساخت MockGatewayController با UI زیبا برای شبیهسازی درگاه
|
||
- تست کامل flow پرداخت آنلاین (redirect → verify → complete)
|
||
- رفع باگ double-click در PaymentController
|
||
- ساخت صفحه Payment Result با UI موفق/ناموفق
|
||
- رفع باگ WalletController::balance() — کیف پول خودکار ایجاد میشود
|
||
- حذف PaymentGatewayService قدیمی (استفاده نمیشد)
|
||
- ساخت پنل مالی Filament با ۳ Widget: FinanceOverviewWidget، TransactionChartWidget، RecentTransactionsWidget
|
||
- تکمیل DiscountCodeResource با form/table/filters کامل
|
||
- ساخت PaymentResource در Filament برای مشاهده تراکنشهای درگاه
|
||
- نوشتن ۲۱ تست جدید Phase 2: WalletServiceTest (8)، PaymentControllerTest (5)، DiscountCodeControllerTest (6)
|
||
- رفع باگ CHECK constraint در migration discount_codes (enum type: percent → percentage)
|
||
- رفع باگ Wallet::isFrozen() — مدیریت null برای مقدار پیشفرض
|
||
- بهروزرسانی STATUS.md با کارهای انجامشده Phase 2
|
||
- گسترش پلاگین IFNEX Bridge:
|
||
- ساخت `IFNEX_User_Bridge` برای مدیریت توکن Sanctum کاربران وردپرس
|
||
- اضافه کردن شورتکد `[ifnex_wallet_balance]` با نمایش موجودی کیف پول
|
||
- اضافه کردن شورتکد `[ifnex_transactions]` با لیست تراکنشهای کاربر
|
||
- اضافه کردن AJAX handlers برای موجودی کیف پول و تراکنشها
|
||
- ساخت استایلهای CSS کامل برای تمام کامپوننتهای پلاگین
|
||
- ایجاد صفحه تست در وردپرس: http://localhost/ifnexwp/?page_id=18
|
||
- رفع باگ صفحه لاگین Filament (MethodNotAllowed)
|
||
- حذف فایلهای سفارشی لاگین و بازگشت به پیشفرض Filament
|
||
- رفع باگ DiscountCode enum: تغییر از `percent` به `percentage`
|
||
- ساخت `SampleDataSeeder` برای دادههای نمونه (۵ مرسوله، ۴ تراکنش، ۳ کد تخفیف)
|
||
- ساخت دستور Artisan `ifnex:sync-wp-users` برای یکسازی کاربران وردپرس ↔ لاراول
|
||
- تست زنده پلاگین وردپرس — همه APIها با موفقیت تست شدند
|
||
- پاکسازی فایلهای تست و اضافی از ریشه پروژه
|
||
- افزودن خروجی Excel برای تراکنشها و مرسولات در Filament
|
||
- ساخت صفحه گزارشگیری مالی در Filament: خلاصه مالی، تراکنشها، مرسولات
|
||
- ساخت Design System یکپارچه IFNEX برای استفاده در Filament و وردپرس
|
||
- بهروزرسانی استایلهای Filament مطابق با Design System
|
||
- بهروزرسانی استایلهای پلاگین وردپرس مطابق با Design System
|
||
|
||
|
||
#### ۲۰۲۶-۰۸-۰۷
|
||
[x] **refactor(api): improve pricing logic و add test coverage**
|
||
- بهروزرسانی `ShippingRatesImport` برای استفاده از 'outbound' و 'inbound'
|
||
- Refactor `PriceCalculatorService` با ساختار ماژولارتر
|
||
- بهروزرسانی مدل `ShippingRate` با Property Casting برای zones
|
||
- اضافه شدن `HasFactory` به مدلهای `Country` و `ShippingRate`
|
||
- اضافه شدن Factories جدید برای تست
|
||
- پیادهسازی تستهای Feature و Service برای `PriceCalculatorService`
|
||
- ✅ تمام تستها پاس شدند
|
||
|
||
#### ۲۰۲۶-۰۸-۰۵
|
||
[x] **refactor(api): expose wallet و discount endpoints**
|
||
- ساخت `WalletController` با APIهای شارژ، بررسی موجودی و تاریخچه
|
||
- ساخت `DiscountCodeController` با APIهای لیست و اعتبارسنجی
|
||
- ساخت `UpdateExchangeRates` Artisan Command
|
||
- ثبت routeهای کیف پول و تخفیف در `api.php`
|
||
- پاکسازی فایلهای تست و debug
|
||
- رفع CORS - تغییر از `*` به دامنه مشخص
|
||
|
||
|
||
### کارهای بعدی
|
||
|
||
#### فاز ۲.۵ — تست و بهینهسازی
|
||
- [ ] **تست نهایی پلاگین وردپرس با دادههای واقعی**
|
||
- تست همه شورتکدها با دادههای واقعی مشتری
|
||
- تست CORS و Rate Limiting در محیط تولید
|
||
- تست عملکرد offline/timeout
|
||
- [ ] **مستندسازی API**
|
||
- مستند کامل APIهای لاراول برای فرانتاند developerها
|
||
- مستند نحوه نصب و تنظیم پلاگین وردپرس
|
||
- مستند نحوه sync کاربران
|
||
- [ ] **بهینهسازی عملکرد**
|
||
- کشکردن نرخ ارز و تعرفهها
|
||
- بهینهسازی queryهای پرتکرار
|
||
|
||
#### فاز ۴ — VPS پل و ترکینگ زنده
|
||
- [ ] **راهاندازی VPS پل خارج (هلند/آلمان)**
|
||
- [ ] **اتصال به TrackingMore/17track API**
|
||
- مپ کردن کدهای رهگیری
|
||
- وبهوک برای بهروزرسانی خودکار وضعیت
|
||
- [ ] **گزارشگیری پیشرفته**
|
||
- خروجی Excel/PDF برای تراکنشها، مرسولات، سود/زیان
|
||
- داشبورد مدیریتی برای مدیرعامل
|
||
- [ ] **پلاگین SMS**
|
||
- اطلاعرسانی وضعیت مرسوله به مشتری
|
||
- اطلاعرسانی پرداختهای کیف پول
|
||
- یادآوری انقضا کدهای تخفیف
|
||
- [ ] **ماژول CRM**
|
||
- مدیریت مشتریان
|
||
- تماسها و یادآوریها
|
||
- تحلیل رفتار مشتریان
|
||
- [ ] **اپلیکیشن موبایل**
|
||
- نسخه Android/iOS برای مشتریان
|
||
- Push notification برای وضعیت مرسوله
|
||
|
||
---
|
||
|
||
## 🚫 خط قرمزها (DO NOT) — هرگز این کارها را نکن
|