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.
45 KiB
🚨 STATUS.md — این فایل را اول بخوانید
⚠️ بهروزرسانی 2026-09-10: این سند تا 10 آگوست 2026 بهروزرسانی شده و تاریخچه فازهای ۰ تا ۳ را پوشش میدهد. وضعیت جاری پروژه (فاز ۳.۵ ✅ و فاز ۳.۶ — اصلاحات جلسه کارفرما 🟡 ۸۰٪) در
AGENT.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)
۱. اسکیمای دیتابیس فاز ۰ (کامل)
- بازنویسی migration
countriesبا ۴ زون مجزا +iso_code+is_active - بازنویسی migration
shipmentsمطابق Phase 0 (فیلدهای مالی + ۴ زون + nullable حقایل) - بازنویسی migration
shipping_ratesبا enumdirectionوtype(DOC_NORMAL/DOC_ECONOMY/PARCEL) - ایجاد migration
shipment_carrier_mappings(جدول جدید — نگاشت چند شرکت حمل) - ایجاد migration
shipment_tracking_events(جدول جدید — تایملاین رویدادها) - ایجاد migration
system_settings(جدول جدید — key-value برای VAT، نرخ ارز و...) - ایجاد migration
update_users(افزودنphone,role,is_active) - ایجاد migration
shipment_items(جدول جدید — اقلام گمرکی) - حل مشکل
unsignedDecimalدر Laravel 11 (استفاده ازdecimal()->unsigned()) - حل مشکل FK constraints در migrations (استفاده از
disableForeignKeyConstraints()) - اجرای همه migrations در MySQL بدون خطا
۲. مدلها و Enums (کامل)
- بازنویسی
Country.php+ روابطfromShipments()/toShipments() - بازنویسی
Shipment.php+ روابطfromCountry(),toCountry(),items(),carrierMappings(),trackingEvents() - بازنویسی
ShippingRate.php+ cast برای enums - بازنویسی
User.php+ فیلدهایphone,role,is_active+ helper methods - ایجاد مدلهای جدید:
ShipmentCarrierMapping.phpShipmentTrackingEvent.phpSystemSetting.phpWallet.php+WalletTransaction.phpDiscountCode.phpExchangeRateHistory.phpRole.php(spatie/laravel-permission)
- ایجاد ۶ 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+TransactionStatusPaymentGateway(zarinpal/wallet/manual/system)UserRole(super_admin/tracking_operator/data_entry/customer)
۳. Seeders (کامل)
- بازنویسی
CountriesTableSeederبا ۲۳۳ کشور + ۴ زون + iso_code تصحیحشده- تصحیح کدهای ISO نادرست (Bonaire BQ، Curacao CW، حذف Somaliland XS)
- حذف کشورهای تکراری ("United Arab Emirates" و "Rest of Dubai" هر دو با zone 9 و 10)
- ایجاد
SystemSettingSeeder(VAT 9%، packing 100000 IRR، profit_margin 1.25، نرخ ارزهای اولیه) - بازنویسی
DatabaseSeeder(countries + system_settings + super_admin user) - ایجاد
RoleAndPermissionSeeder(نقشهای اولیه + دسترسیهای پایه) - ایجاد
SampleDataSeeder(۵ مرسوله، ۴ تراکنش، ۳ کد تخفیف) - اجرای seeders — ۲۳۲ کشور + ۷ setting + ۱ کاربر ادمین
۴. API ترکینگ (کامل)
- ایجاد
TrackControllerبا JSON response کامل (shipment + carrier_mappings + timeline) - ایجاد
ApiKeyMiddleware(Bearer token validation) - ثبت route
GET /api/v1/track/{awb_no}با middleware API Key - تستهای موفق:
GET /api/v1/track/TEST123با API Key صحیح → 200 OK- بدون API Key → 401 Unauthorized
- با API Key نامعتبر → 403 Forbidden
۵. Filament Resources (کامل)
CountryResource— فرم ۴ زون + iso_code + is_active + فیلترهاShipmentResource— فرم کامل با ۷ Section + RelationManagers- Section: Route & Status
- Section: Weight & Dimensions
- Section: Financial Info (۱۱ فیلد مالی)
- Section: Sender Info
- Section: Receiver Info
- Section: Customs Items (Repeater ۹ ردیف)
ShippingRateResource— فرم ۱۰ zone + enum type/directionShipmentItemResource— CRUD کاملWalletResource— مدیریت کیف پولWalletTransactionResource— CRUD کامل با صفحات Create/EditPaymentResource— مشاهده تراکنشهای درگاهDiscountCodeResource— مدیریت کدهای تخفیف با form/table/filtersExchangeRateHistoryResource— مشاهده تاریخچه نرخ ارزRoleResource— مدیریت نقشها (spatie/laravel-permission)UserResource— مدیریت کاربران (spatie/laravel-permission)- RelationManagers:
CarrierMappingsRelationManager(برای Shipment)TrackingEventsRelationManager(برای Shipment)
- Pages:
ListShipments,CreateShipment,EditShipment,ViewShipmentListCountries,CreateCountry,EditCountryListShippingRates,CreateShippingRate,EditShippingRateListShipmentItems,CreateShipmentItem,EditShipmentItemListWalletTransactions,CreateWalletTransaction,EditWalletTransactionListPayments,ViewPaymentListDiscountCodes,CreateDiscountCode,EditDiscountCodeListExchangeRateHistories,ViewExchangeRateHistoryListRoles,CreateRole,EditRoleListUsers,CreateUser,EditUser
SettingsPage(Page سفارشی برای System Settings)DashboardInfoWidget— اطلاعات کلی داشبوردExchangeRateWidget— نرخ ارز زندهWalletStats— آمار کیف پولTransactionChartWidget— نمودار تراکنشهاRecentTransactionsWidget— آخرین تراکنشهاFinancialReport— گزارش مالی کامل
۶. Services (کامل)
TrackingService— getTrackingTimeline, addTrackingEvent, getShipmentWithTrackingPriceCalculatorService— محاسبه قیمت کامل مطابق EXCEL_ANALYSIS.md- مرحله ۱: وزن حجمی
- مرحله ۲: وزن قابل پرداخت
- مرحله ۳: استخراج زون از ۴ زون مجزا
- مرحله ۴: استخراج قیمت پایه از shipping_rates
- مرحله ۵: اعمال ضریب سود
- مرحله ۶: تبدیل درهم به ریال
- مرحله ۷: اضافه هزینههای جانبی
- مرحله ۸: اعمال VAT 9%
- مرحله ۹: ذخیره خروجیها
ExchangeRateService— مدیریت و ردیابی نرخ ارزZarinpalService— اتصال به درگاه پرداخت زرینپالMockZarinpalService— شبیهسازی درگاه برای تستOrderPaymentService— پرداخت سفارشات (کیف پول + درگاه)
۷. Imports (Excel) (کامل)
ShippingRatesImport— import از ۵ شیت (Import Rate, Export Rate, DocNor, DocEco, Parcel)- ۴۰۴ رکورد import شد: DocNormal: ۷۴، DocEconomy: ۷۰، Parcel: ۲۶۰
HistoricalShipmentsImport— import از شیت List فایل اصلی- ⚠️ مشکل: فایل اکسل فقط ۲ ردیف داده واقعی دارد و بقیه فرمولهای Excel هستند
- ۱ رکورد (980100010) موفقیتآمیز import شد
- Artisan Commands:
ifnex:import:rates {path}ifnex:import:shipments {path}
۸. سوییچ به Laravel 11 (کامل با نقص باقیمانده)
- تغییر
composer.json:laravel/frameworkاز^12.0به^11.0 - تغییر
morilog/jalaliاز^4.3به^3.0(v4 وجود ندارد) - اجرای
composer update— Laravel از v12.64.0 به v11.55.0 downgrade شد - رفع خطای PSR-4 در
SettingsPage.php - رفع مشکل middleware در
bootstrap/app.phpبرای Laravel 11 - رفع خطای
MethodNotAllowedHttpExceptionبرای POST/admin/login
٩. پیکربندی (کامل)
- اضافه کردن
IFNEX_API_KEYبه.env.example - اضافه کردن
CORS_ALLOWED_ORIGINSبه.env.example - اضافه کردن
IFNEX_TRACKING_RATE_LIMITبه.env.example - ایجاد
config/ifnex.phpبرای تنظیمات اختصاصی - تغییر
APP_LOCALEبهfaدر.env.example - اضافه کردن
morilog/jalaliبهcomposer.json - ایجاد
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:
->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:
->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 تست شدند |
| 🟢 پایین | تست نهایی فاز ۰ و تحویل به مشتری | ✅ انجام شد | همه موارد تست شدند |
کارهای فاز ۱ (تکمیل شده)
- موتور قیمتگذاری کامل (
PriceCalculatorService) — نوشته شد، تست با دادههای واقعی انجام شد - جدول
shipping_rates— ۱۳۸ رکورد import شد با پشتیبانی از ۵ نوع سرویس/جهت - فرم ثبت سفارش آنلاین با ۹ ردیف کالای گمرکی
- تولید PDF: AWB، INVOICE، Label — پیاده شد. قالبها بر اساس ساختار شیتهای اکسل و لوگوی استخراجشده طراحی شدند. استایل نهایی و تطبیق دقیقتر با قالبهای اکسل در فاز بعدی انجام میشود.
- ماژول ایمپورت اکسل تعرفهها — command با قابلیتهای --clear و --dry-run پیاده شد
- صفحه استعلام قیمت واقعی — رابط کاربری عمومی + API محاسبه قیمت
کارهای فاز ۲ (تکمیل شده)
- ساخت
WalletControllerبا APIهای شارژ، بررسی موجودی و تاریخچه تراکنشها - ساخت
DiscountCodeControllerبا APIهای لیست و اعتبارسنجی کده تخفیف - ساخت
UpdateExchangeRatesArtisan Command با پشتیبانی از ECB و FreeCurrencyAPI - ثبت routeهای کیف پول و تخفیف در
api.php - اضافه کردن
CURRENCY_API_KEYبه.env.exampleوconfig/ifnex.php - پاکسازی فایلهای تست و debug (
check_*.php,debug_*.php,test_*.php,inspect_*.php) - رفع CORS — تغییر از
*به دامنه مشخص از.env - حذف migrationهای قدیمی تکراری (
2023_10_27_*,2026_07_31_*) - اتصال درگاه پرداخت (زرینپال) با Mock Gateway برای تست
- ساخت
ZarinpalServiceوMockZarinpalService - ساخت
OrderPaymentServiceبرای پرداخت سفارشات - ساخت
ExchangeRateServiceوExchangeRateHistoryبرای ردیابی نرخ ارز - پنل مالی در Filament (داشبورد سود/زیان)
- تکمیل DiscountCodeResource با form/table/filters
- ساخت PaymentResource در Filament
- ساخت WalletTransactionResource با صفحات Create/Edit
- ساخت ExchangeRateHistoryResource
- تستهای Unit/Feature برای Phase 2 (24 تست، 77 assertion)
- رفع باگ WalletController::balance()
- حذف PaymentGatewayService قدیمی (استفاده نمیشد)
- زیباسازی داشبورد و صفحه لاگین Filament (رنگ Navy، Vazirmatn، RTL)
- گسترش پلاگین IFNEX Bridge برای وردپرس:
- ساخت
IFNEX_User_Bridgeبرای مدیریت توکن Sanctum کاربران وردپرس - اضافه کردن شورتکد
[ifnex_wallet_balance] - اضافه کردن شورتکد
[ifnex_transactions] - اضافه کردن AJAX handlers برای کیف پول و تراکنشها
- ساخت استایلهای CSS کامل برای تمام کامپوننتهای پلاگین
- ایجاد صفحه تست در وردپرس: http://localhost/ifnexwp/?page_id=18
- ساخت
- یکپارچگی RBAC با spatie/laravel-permission
- نصب پکیج
spatie/laravel-permission - ساخت
RoleResourceوUserResourceدر Filament - ساخت
RoleAndPermissionSeeder
- نصب پکیج
- سینک کاربران وردپرس ↔ لاراول با دستور
ifnex:sync-wp-users - طراحی سیستم یکپارچه IFNEX (DESIGN_SYSTEM.md)
- گزارشگیری مالی در Filament (FinancialReport)
- خروجی Excel برای ShipmentResource و WalletTransactionResource
کارهای فاز ۳ (تکمیل شده)
- ساخت
AuthControllerبرای ورود/خروج Sanctum مشتریان - ساخت
BridgeAuthControllerبرای لاگین مستقیم از وردپرس - ساخت
CustomerOrderControllerبا ۶ endpoint:GET /api/v1/customer/profile— پروفایل و آمارGET /api/v1/customer/countries— لیست کشورهاGET /api/v1/customer/orders— لیست سفارشاتPOST /api/v1/customer/orders— ثبت سفارش جدیدGET /api/v1/customer/orders/{shipment}— جزئیات سفارشPOST /api/v1/customer/orders/{shipment}/cancel— لغو سفارش
- ساخت
OrderPaymentServiceبرای پرداخت سفارشات- پرداخت از کیف پول:
payFromWallet() - پرداخت از درگاه:
initiateGatewayPayment() - تکمیل پرداخت بعد از callback:
completeGatewayPayment()
- پرداخت از کیف پول:
- توسعه پلاگین IFNEX Bridge برای پورتال مشتری:
- شورتکد
[ifnex_order_form]— فرم ثبت سفارش چندمرحلهای - شورتکد
[ifnex_orders_list]— لیست سفارشات - شورتکد
[ifnex_order_payment]— صفحه پرداخت سفارش - شورتکد
[ifnex_order_detail]— جزئیات سفارش - شورتکد
[ifnex_user_profile]— پروفایل کاربر - استایل
ifnex-orders.cssبرای تمام کامپوننتها - اسکریپت
ifnex-order-form.jsبرای ناوبری مراحل و AJAX - AJAX handlers:
ifnex_pay_order_wallet,ifnex_pay_order_gateway,ifnex_cancel_order
- شورتکد
- توسعه پوسته سفامشی IFNEX برای وردپرس:
- پشتیبانی چندزبانه با Polylang
- مدیریت LTR/RTL خودکار
- Customizer برای لوگو و زبان
- قالبهای archive, single, front-page
- ساختار تمیک شرکتی با لوگو IFNEX
- بهروزرسانی وردپرس به نسخه ۷.۰.۳ با بهبودهای امنیتی
- یکپارچگی Design System در Filament و وردپرس
- خروجی 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 است.
س: چه کارهایی در این جلسه انجام شد؟
ج:
- تکمیل کامل سیستم سفارشات مشتری (CustomerOrderController با ۶ endpoint)
- توسعه سرویس پرداخت سفارشات (OrderPaymentService) — کیف پول + درگاه
- ساخت AuthController و BridgeAuthController برای احراز هویت
- گسترش پلاگین IFNEX Bridge با شورتکدهای پرداخت و جزئیات سفارش
- افزودن ۲ وضعیت جدید به ShipmentStatus: pending_payment و cancelled
- توسعه پورتال مشتری در وردپرس (فرم سفارش، لیست، پرداخت، جزئیات)
- یکپارچگی RBAC با spatie/laravel-permission
- ردیابی تاریخچه نرخ ارز با ExchangeRateHistory
- طراحی سیستم یکپارچه IFNEX (DESIGN_SYSTEM.md)
- بهروزرسانی وردپرس به ۷.۰.۳
س: چه کارهایی باقی مانده؟
ج:
- تست کامل APIهای سفارشات مشتری و پرداخت
- تست کامل پلاگین وردپرس با دادههای واقعی مشتری
- راهاندازی VPS پل خارج برای API ترکینگ زنده (فاز ۴)
- اتصال به TrackingMore/17track API
فرمول محاسبه قیمت رقبا(آرشیو شد)
🛠️ Quick Commands — دستورات پرکاربرد
نصب و راهاندازی لاراول
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 سفارشی
# 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
# با 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 سفارشات مشتری
# ورود و دریافت توکن
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,...}'
پشتیبانگیری از دیتابیس
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با ۶ endpointOrderPaymentServiceبرای پرداخت از کیف پول و درگاهBridgeAuthControllerبرای لاگین از وردپرس- APIهای
/customer/orders/*و/customer/orders/{shipment}/pay-* - وضعیتهای جدید
pending_paymentوcancelledدر ShipmentStatus
- بهروزرسانی Enums:
PaymentGatewayاضافه شدن caseWALLETTrackingSourceاضافه شدن casesSYSTEMوCUSTOMER
۲۰۲۶-۰۸-۰۸
- ساخت
WalletControllerبا APIهای شارچ، بررسی موجودی و تاریخچه تراکنشها - ساخت
DiscountCodeControllerبا APIهای لیست و اعتبارسنجی کده تخفیف - ساخت
UpdateExchangeRatesArtisan 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 برای وضعیت مرسوله