491 lines
27 KiB
Markdown
491 lines
27 KiB
Markdown
# 🚨 STATUS.md — این فایل را اول بخوانید
|
||
|
||
> **آخرین بهروزرسانی:** 2026-08-04 11:31 (Asia/Tehran)
|
||
> **فاز در حال اجرا:** فاز ۲ (حساب کاربری مشتری + کیف پول + تخفیف حجمی)
|
||
> **توسعهدهنده:** VernaSoft Group — Kazem Alghasi
|
||
> **وضعیت کلی پروژه:** فاز ۰ کامل — فاز ۱ کامل — فاز ۲ در صف
|
||
|
||
---
|
||
|
||
## ⚠️ هشدار حیاتی — قبل از هر کاری بخوانید
|
||
|
||
این پروژه دارای **سه سند تاریخی** است که با هم تناقض دارند. فقط یکی از آنها معتبر است:
|
||
|
||
| فایل | وضعیت | اقدام |
|
||
|------|-------|-------|
|
||
| `01_Documents/Phase0_Proposal.md` | ✅ **معتبر و مرجع اصلی** | حتماً کامل بخوانید |
|
||
| `01_Documents/PRD_v2.md` | ❌ قدیمی و ناقص | فقط برای مرجع تاریخی — به اسکیمای دیتابیس آن اعتماد نکنید |
|
||
| `01_Documents/Project_Roadmap.md` | ❌ قدیمی (۳ فازی) | فقط برای مرجع تاریخی — به فازبندی آن اعتماد نکنید |
|
||
| `01_Documents/EXCEL_ANALYSIS.md` | ✅ **مرجع تحلیل اکسل** | حتماً بخوانید قبل از کار با دادههای تاریخی |
|
||
| `README.md` (ریشه) | ✅ بهروز (نسخه ۲) | برای نمای کلی بخوانید |
|
||
|
||
> 🔴 **قانون طلایی:** هرجا بین اسناد تناقض دیدی، به `Phase0_Proposal.md` اعتماد کن. اسناد قدیمی فقط برای فهم تاریخچهی تصمیمات نگه داشته شدهاند.
|
||
|
||
---
|
||
|
||
## 📌 Quick Reference — نسخهها و معماری
|
||
|
||
### تکنولوژیها (قفلشده)
|
||
| مورد | نسخه/مقدار | دلیل |
|
||
|------|------------|------|
|
||
| Laravel | **11** (همهجا یکسان) | در PRD قدیمی ۱۰+ نوشته، در Roadmap قدیمی ۱۱، در README قدیمی ۱۲ — نسخه نهایی: **۱۱** |
|
||
| PHP | 8.2+ | الزام لاراول ۱۱ |
|
||
| MySQL | 8+ | برای پشتیبانی JSON columns |
|
||
| WordPress | آخرین نسخه پایدار | با Polylang برای چندزبانه |
|
||
| پنل ادمین | Laravel Filament 3.3.x | برای سرعت توسعه |
|
||
| Frontend | وردپرس + قالب DHL-inspired | **کپی نکنید** — فقط الهام |
|
||
|
||
### معماری کلی
|
||
```
|
||
┌─────────────────┐ 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] حل مشکل `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`
|
||
- [x] ایجاد ۶ enum:
|
||
- `ShipmentDirection` (import/export)
|
||
- `ShipmentType` (DOC_NORMAL/DOC_ECONOMY/PARCEL)
|
||
- `ShipmentStatus` (processed/picked_up/in_transit/out_for_delivery/failed/delivered/returned)
|
||
- `CarrierCode` (DHL/FEDEX/UPS/ARAMEX/NAGHEL/EMX/APSITEX/IMPEX/OTHER)
|
||
- `TrackingSource` (manual/api_carrier/api_aggregator)
|
||
- `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] اجرای 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] RelationManagers:
|
||
- `CarrierMappingsRelationManager` (برای Shipment)
|
||
- `TrackingEventsRelationManager` (برای Shipment)
|
||
- [x] Pages:
|
||
- `ListShipments`, `CreateShipment`, `EditShipment`, `ViewShipment`
|
||
- `ListCountries`, `CreateCountry`, `EditCountry`
|
||
- `ListShippingRates`, `CreateShippingRate`, `EditShippingRate`
|
||
- `ListShipmentItems`, `CreateShipmentItem`, `EditShipmentItem`
|
||
- [x] `SettingsPage` (Page سفارشی برای System Settings)
|
||
|
||
#### ۶. Services (کامل)
|
||
- [x] `TrackingService` — getTrackingTimeline, addTrackingEvent, getShipmentWithTracking
|
||
- [x] `PriceCalculatorService` — محاسبه قیمت کامل مطابق EXCEL_ANALYSIS.md
|
||
- مرحله ۱: وزن حجمی
|
||
- مرحله ۲: وزن قابل پرداخت
|
||
- مرحله ۳: استخراج زون از ۴ زون مجزا
|
||
- مرحله ۴: استخراج قیمت پایه از shipping_rates
|
||
- مرحله ۵: اعمال ضریب سود
|
||
- مرحله ۶: تبدیل درهم به ریال
|
||
- مرحله ۷: اضافه هزینههای جانبی
|
||
- مرحله ۸: اعمال VAT 9%
|
||
- مرحله ۹: ذخیره خروجیها
|
||
|
||
#### ۷. 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 محاسبه قیمت
|
||
|
||
---
|
||
|
||
## 🚫 خط قرمزها (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. بازنویسی کامل اسکیمای دیتابیس (۷ migration جدید)
|
||
2. بازنویسی تمام Modelها + ایجاد ۶ Enum
|
||
3. بازنویسی Seeders (countries + system_settings)
|
||
4. ایجاد API TrackController + ApiKeyMiddleware
|
||
5. بازنویسی کامل Filament Resources + RelationManagers + SettingsPage
|
||
6. ایجاد Services (TrackingService + PriceCalculatorService)
|
||
7. ایجاد Imports (ShippingRatesImport + HistoricalShipmentsImport)
|
||
8. ایجاد Artisan Commands (ifnex:import:rates, ifnex:import:shipments)
|
||
9. سوییچ به Laravel 11 + رفع همه خطاهای مربوطه
|
||
10. import ۴۰۴ shipping rate + ۱ shipment تاریخی
|
||
11. **Code Review کامل** — شناسایی مشکل middleware و ارائه راهحل
|
||
12. بهروزرسانی تمام داکیومنتها و حذف ارجاع به ۳۹۵۰ رکورد قدیمی
|
||
|
||
### س: چه کارهایی باقی مانده؟
|
||
**ج:**
|
||
1. رفع مشکل middleware `web` group در `bootstrap/app.php`
|
||
2. ساده کردن `AdminPanelProvider.php` بعد از تعریف گروه `web`
|
||
3. تست دستی Filament (ورود + CRUD)
|
||
4. مهاجرت دادههای ترکینگ از فایل `Data entry 2026-06-28.xlsx`
|
||
5. ساخت پلاگین وردپرس IFNEX Bridge
|
||
6. تست کامل API Track
|
||
7. تولید PDF (فاز ۱)
|
||
|
||
---
|
||
|
||
## 🛠️ 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
|
||
```
|
||
|
||
### تست 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
|
||
```
|
||
|
||
### پشتیبانگیری از دیتابیس
|
||
```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` را بررسی کن — ببین چه چیزی نوشته شده
|
||
۶. **اولویت اول:** رفع مشکل middleware در `bootstrap/app.php` و `AdminPanelProvider.php` (راهحل در بالای این فایل آمده)
|
||
۷. با کاربر (Kazem) هماهنگ کن — بپرس کدام کار را باید ادامه دهی
|
||
|
||
**مهمترین کار بعدی:** رفع مشکل middleware + تست دستی Filament.
|
||
|
||
---
|
||
|
||
## 📞 تماس
|
||
|
||
- **توسعهدهنده اصلی:** Kazem Alghasi (VernaSoft Group)
|
||
- **مشتری:** شرکت IFNEX اصفهان
|
||
- **مخزن:** https://www.git.vernahost.ir/gitmodir110/ifnex
|
||
|
||
اگر سوالی داشتی که در این فایل یا `EXCEL_ANALYSIS.md` یا `Phase0_Proposal.md` پاسخ آن نبود، از کاربر بپرس — حدس نزن.
|
||
|
||
---
|
||
|
||
© 2026 VernaSoft Group. Internal use only.
|