docs: update project documentation and roadmap to reflect phase 2 and 3 completion
Update project documentation, status reports, and technical READMEs to reflect the successful completion of Phase 2 (Financial Automation) and Phase 3 (Customer Portal & WordPress Integration). Changes include: - Updated `STATUS.md` and `README.md` to mark Phases 2 and 3 as completed - Updated `01_Documents/IFNEX_Phase0_Checklist.md` with detailed task completion status for Phases 1, 2, and 3 - Refined technical architecture documentation in `04_Laravel/README.md` to include new services (Zarinpal, OrderPayment), controllers (Auth, CustomerOrder), and Filament resources (Wallet, Payment, DiscountCode) - Added `DEPLOYMENT.md` for deployment instructions - Updated system specifications to include Laravel Sanctum, RBAC via spatie/laravel-permission, and the updated WordPress/IFNEX Bridge capabilities
This commit is contained in:
parent
bac2a7bb25
commit
cd8021e6e1
@ -2,7 +2,8 @@
|
||||
|
||||
> **فاز:** Phase 0 — بنیان داده + ترکینگ دستی + مهاجرت دادههای تاریخی
|
||||
> **تاریخ ایجاد:** 2026-08-04
|
||||
> **وضعیت کلی:** در حال اجرا
|
||||
> **تاریخ بهروزرسانی:** 2026-08-10
|
||||
> **وضعیت کلی:** ✅ تکمیل شده
|
||||
> **مرجع اصلی:** `01_Documents/Phase0_Proposal.md`
|
||||
|
||||
---
|
||||
@ -46,7 +47,7 @@
|
||||
| 2.7 | مدل `SystemSetting.php` | ✅ انجام شد | |
|
||||
| 2.8 | Enum `ShipmentDirection` | ✅ انجام شد | import/export |
|
||||
| 2.9 | Enum `ShipmentType` | ✅ انجام شد | DOC_NORMAL/DOC_ECONOMY/PARCEL |
|
||||
| 2.10 | Enum `ShipmentStatus` | ✅ انجام شد | ۷ وضعیت |
|
||||
| 2.10 | Enum `ShipmentStatus` | ✅ انجام شد | ۹ وضعیت (pending_payment, cancelled اضافه شد) |
|
||||
| 2.11 | Enum `CarrierCode` | ✅ انجام شد | ۹ شرکت حمل |
|
||||
| 2.12 | Enum `TrackingSource` | ✅ انجام شد | manual/api_carrier/api_aggregator |
|
||||
| 2.13 | Enum `UserRole` | ✅ انجام شد | ۴ نقش |
|
||||
@ -164,49 +165,68 @@
|
||||
|
||||
---
|
||||
|
||||
## بخش ۱۱: کارهای فاز ۱ (پس از تأیید فاز ۰)
|
||||
## بخش ۱۱: کارهای فاز ۱ (تکمیل شده)
|
||||
|
||||
| # | کار | اولویت | وضعیت |
|
||||
|---|-----|--------|-------|
|
||||
| F1.1 | تست کامل `PriceCalculatorService` با دادههای واقعی | 🔴 بالا | ✅ انجام شد (2026-08-07) |
|
||||
| F1.2 | تکمیل جدول `shipping_rates` | 🟡 متوسط | ✅ انجام شد - ۴۰۴ رکورد import شد |
|
||||
| F1.3 | فرم ثبت سفارش آنلاین با ۹ ردیف کالای گمرکی | 🟡 متوسط | ⏳ pending |
|
||||
| F1.4 | تولید PDF: AWB، INVOICE، Label | 🟡 متوسط | ⏳ pending |
|
||||
| F1.3 | فرم ثبت سفارش آنلاین با ۹ ردیف کالای گمرکی | 🟡 متوسط | ✅ انجام شد |
|
||||
| F1.4 | تولید PDF: AWB، INVOICE، Label | 🟡 متوسط | ✅ انجام شد |
|
||||
| F1.5 | ماژول ایمپورت اکسل تعرفهها | 🟢 پایین | ✅ انجام شد |
|
||||
| F1.6 | صفحه استعلام قیمت واقعی | 🟢 پایین | ✅ انجام شد |
|
||||
|
||||
### کارهای فاز ۲ (شروع شده - 2026-08-05)
|
||||
## بخش ۱۲: کارهای فاز ۲ (تکمیل شده)
|
||||
|
||||
| # | کار | اولویت | وضعیت |
|
||||
|---|-----|--------|-------|
|
||||
| F2.1 | ساخت `WalletController` با APIها | 🔴 بالا | ✅ انجام شد |
|
||||
| F2.2 | ساخت `DiscountCodeController` با APIها | 🔴 بالا | ✅ انجام شد |
|
||||
| F2.3 | ساخت `UpdateExchangeRates` Artisan Command | 🟡 متوسط | ✅ انجام شد |
|
||||
| F2.4 | ثبت routeهای کیف پول و تخفیف | 🟡 متوسط | ✅ انجام شد |
|
||||
| F2.5 | اتصال درگاه پرداخت (زرینپال) | 🔴 بالا | ⏳ pending |
|
||||
| F2.6 | شارژ آنلاین کامل | 🔴 بالا | ⏳ pending |
|
||||
| F2.7 | پنل مالی در Filament | 🟡 متوسط | ⏳ pending |
|
||||
| F2.5 | اتصال درگاه پرداخت (زرینپال) | 🔴 بالا | ✅ انجام شد |
|
||||
| F2.6 | شارژ آنلاین کامل | 🔴 بالا | ✅ انجام شد |
|
||||
| F2.7 | پنل مالی در Filament | 🟡 متوسط | ✅ انجام شد |
|
||||
| F2.8 | ساخت `OrderPaymentService` | 🔴 بالا | ✅ انجام شد |
|
||||
| F2.9 | ساخت `ZarinpalService` و `MockZarinpalService` | 🔴 بالا | ✅ انجام شد |
|
||||
| F2.10 | ردیابی تاریخچه نرخ ارز | 🟡 متوسط | ✅ انجام شد |
|
||||
| F2.11 | یکپارچگی RBAC با spatie/laravel-permission | 🟡 متوسط | ✅ انجام شد |
|
||||
| F2.12 | گسترش پلاگین IFNEX Bridge (کیف پول + تراکنش) | 🟡 متوسط | ✅ انجام شد |
|
||||
|
||||
## بخش ۱۳: کارهای فاز ۳ (تکمیل شده)
|
||||
|
||||
| # | کار | اولویت | وضعیت |
|
||||
|---|-----|--------|-------|
|
||||
| F3.1 | ساخت `AuthController` برای Sanctum | 🔴 بالا | ✅ انجام شد |
|
||||
| F3.2 | ساخت `BridgeAuthController` | 🔴 بالا | ✅ انجام شد |
|
||||
| F3.3 | ساخت `CustomerOrderController` با ۶ endpoint | 🔴 بالا | ✅ انجام شد |
|
||||
| F3.4 | ساخت `OrderPaymentService` | 🔴 بالا | ✅ انجام شد |
|
||||
| F3.5 | توسعه پلاگین وردپرس برای پورتال مشتری | 🔴 بالا | ✅ انجام شد |
|
||||
| F3.6 | توسعه پوسته سفامشی IFNEX | 🟡 متوسط | ✅ انجام شد |
|
||||
| F3.7 | بهروزرسانی وردپرس به ۷.۰.۳ | 🟡 متوسط | ✅ انجام شد |
|
||||
| F3.8 | یکپارچگی Design System | 🟡 متوسط | ✅ انجام شد |
|
||||
| F3.9 | خروجی CSV برای ShipmentResource و WalletTransactionResource | 🟢 پایین | ✅ انجام شد |
|
||||
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
## بخش ۱۲: کارهای فاز ۲ و ۳ (مرجع)
|
||||
## بخش ۱۴: کارهای آینده (فاز ۴)
|
||||
|
||||
### فاز ۲: اتوماسیون مالی
|
||||
- [ ] اتصال به درگاه پرداخت (زرینپال)
|
||||
- [ ] ایجاد جدول کیف پول و تراکنشها
|
||||
- [ ] شارژ اعتبار آنلاین و دستی
|
||||
- [ ] کرونجاب بروزرسانی نرخ ارز
|
||||
- [ ] سیستم کوپن و تخفیفها
|
||||
- [ ] فرمول محاسبه قیمت رقبا
|
||||
|
||||
### فاز ۳: رهگیری زنده و عملیات
|
||||
### فاز ۴: VPS پل و ترکینگ زنده
|
||||
- [ ] راهاندازی VPS پل خارج (هلند/آلمان)
|
||||
- [ ] اتصال به TrackingMore/17track API
|
||||
- [ ] سیستم وبهوک
|
||||
- [ ] مپ کردن کدهای رهگیری
|
||||
- [ ] داشبورد مالی
|
||||
- [ ] فرم نظرسنجی و رضایت مشتری
|
||||
- [ ] پنل کاربری مشتریان در وردپرس
|
||||
- [ ] پلاگین SMS
|
||||
- [ ] ماژول CRM
|
||||
- [ ] اپلیکیشن موبایل
|
||||
|
||||
### فاز ۲.۵: تست و بهینهسازی
|
||||
- [ ] تست نهایی پلاگین وردپرس با دادههای واقعی
|
||||
- [ ] مستندسازی API
|
||||
- [ ] بهینهسازی عملکرد (کش، query optimization)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
# 🚨 STATUS.md — این فایل را اول بخوانید
|
||||
|
||||
> **آخرین بهروزرسانی:** 2026-08-05 22:32 (Asia/Tehran)
|
||||
> **فاز در حال اجرا:** فاز ۲ (اتوماسیون مالی + کیف پول + تخفیف)
|
||||
> **آخرین بهروزرسانی:** 2026-08-10 13:08 (Asia/Tehran)
|
||||
> **فاز در حال اجرا:** فاز ۴ (VPS پل + API ترکینگ زنده)
|
||||
> **توسعهدهنده:** VernaSoft Group — Kazem Alghasi
|
||||
> **وضعیت کلی پروژه:** فاز ۰ کامل — فاز ۱ کامل — فاز ۲ در حال اجرا
|
||||
> **وضعیت کلی پروژه:** فاز ۰ کامل — فاز ۱ کامل — فاز ۲ کامل — فاز ۳ کامل
|
||||
|
||||
---
|
||||
|
||||
@ -31,9 +31,13 @@
|
||||
| Laravel | **11** (همهجا یکسان) | در PRD قدیمی ۱۰+ نوشته، در Roadmap قدیمی ۱۱، در README قدیمی ۱۲ — نسخه نهایی: **۱۱** |
|
||||
| PHP | 8.2+ | الزام لاراول ۱۱ |
|
||||
| MySQL | 8+ | برای پشتیبانی JSON columns |
|
||||
| WordPress | آخرین نسخه پایدار | با Polylang برای چندزبانه |
|
||||
| پنل ادمین | Laravel Filament 3.3.x | برای سرعت توسعه |
|
||||
| Frontend | وردپرس + قالب DHL-inspired | **کپی نکنید** — فقط الهام |
|
||||
| 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 | رنگهای برند، فاصلهگذاری، تایپوگرافی یکپارچه |
|
||||
|
||||
### معماری کلی
|
||||
```
|
||||
@ -73,6 +77,7 @@
|
||||
- [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 بدون خطا
|
||||
@ -86,12 +91,18 @@
|
||||
- `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` (processed/picked_up/in_transit/out_for_delivery/failed/delivered/returned)
|
||||
- `ShipmentStatus` (۹ وضعیت شامل pending_payment/cancelled)
|
||||
- `CarrierCode` (DHL/FEDEX/UPS/ARAMEX/NAGHEL/EMX/APSITEX/IMPEX/OTHER)
|
||||
- `TrackingSource` (manual/api_carrier/api_aggregator)
|
||||
- `TrackingSource` (۵ منبع: manual/api/import/system/customer)
|
||||
- `TransactionType` + `TransactionStatus`
|
||||
- `PaymentGateway` (zarinpal/wallet/manual/system)
|
||||
- `UserRole` (super_admin/tracking_operator/data_entry/customer)
|
||||
|
||||
#### ۳. Seeders (کامل)
|
||||
@ -100,6 +111,8 @@
|
||||
- حذف کشورهای تکراری ("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 ترکینگ (کامل)
|
||||
@ -122,6 +135,13 @@
|
||||
- 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)
|
||||
@ -130,7 +150,19 @@
|
||||
- `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
|
||||
@ -144,6 +176,10 @@
|
||||
- مرحله ۷: اضافه هزینههای جانبی
|
||||
- مرحله ۸: اعمال VAT 9%
|
||||
- مرحله ۹: ذخیره خروجیها
|
||||
- [x] `ExchangeRateService` — مدیریت و ردیابی نرخ ارز
|
||||
- [x] `ZarinpalService` — اتصال به درگاه پرداخت زرینپال
|
||||
- [x] `MockZarinpalService` — شبیهسازی درگاه برای تست
|
||||
- [x] `OrderPaymentService` — پرداخت سفارشات (کیف پول + درگاه)
|
||||
|
||||
#### ۷. Imports (Excel) (کامل)
|
||||
- [x] `ShippingRatesImport` — import از ۵ شیت (Import Rate, Export Rate, DocNor, DocEco, Parcel)
|
||||
@ -243,7 +279,7 @@
|
||||
|
||||
---
|
||||
|
||||
### کارهای فاز ۲ (در حال اجرا)
|
||||
### کارهای فاز ۲ (تکمیل شده)
|
||||
|
||||
- [x] ساخت `WalletController` با APIهای شارژ، بررسی موجودی و تاریخچه تراکنشها
|
||||
- [x] ساخت `DiscountCodeController` با APIهای لیست و اعتبارسنجی کده تخفیف
|
||||
@ -253,30 +289,68 @@
|
||||
- [x] پاکسازی فایلهای تست و debug (`check_*.php`, `debug_*.php`, `test_*.php`, `inspect_*.php`)
|
||||
- [x] رفع CORS — تغییر از `*` به دامنه مشخص از `.env`
|
||||
- [x] حذف migrationهای قدیمی تکراری (`2023_10_27_*`, `2026_07_31_*`)
|
||||
- [x] اتصال درگاه پرداخت (زرینپال)
|
||||
- [x] شارژ آنلاین کامل با درگاه پرداخت
|
||||
- [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
|
||||
- [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=16
|
||||
[x] ساخت WalletController با APIهای کامل
|
||||
[x] ساخت DiscountCodeController
|
||||
[x] ساخت UpdateExchangeRates Artisan Command
|
||||
[x] اتصال درگاه پرداخت (زرینپال) — با Mock Gateway
|
||||
[x] شارژ آنلاین کامل با درگاه
|
||||
[x] پنل مالی در Filament (داشبورد سود/زیان)
|
||||
[x] Export CSV برای تراکنشها و مرسولات
|
||||
[ ] فرمول محاسبه قیمت رقبا (حذف شد — تصمیم استراتژیک)
|
||||
- [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
|
||||
|
||||
---
|
||||
|
||||
@ -318,19 +392,23 @@
|
||||
|
||||
### س: چه کارهایی در این جلسه انجام شد؟
|
||||
**ج:**
|
||||
1. ساخت `WalletController` با APIهای شارچ، بررسی موجودی و تاریخچه تراکنشها
|
||||
2. ساخت `DiscountCodeController` با APIهای لیست و اعتبارسنجی کده تخفیف
|
||||
3. ساخت `UpdateExchangeRates` Artisan Command
|
||||
4. ثبت routeهای کیف پول و تخفیف در `api.php`
|
||||
5. اضافه کردن `CURRENCY_API_KEY` به `.env.example` و `config/ifnex.php`
|
||||
6. پاکسازی فایلهای تست و debug از پوشه `04_Laravel`
|
||||
7. رفع CORS — تغییر از `*` به دامنه مشخص از `.env`
|
||||
8. حذف migrationهای قدیمی تکراری
|
||||
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. بهروزرسانی وردپرس به ۷.۰.۳
|
||||
|
||||
### س: چه کارهایی باقی مانده؟
|
||||
**ج:**
|
||||
- پنل مالی در Filament (داشبورد سود/زیان)
|
||||
- تست دستی APIهای جدید
|
||||
- تست کامل APIهای سفارشات مشتری و پرداخت
|
||||
- تست کامل پلاگین وردپرس با دادههای واقعی مشتری
|
||||
- راهاندازی VPS پل خارج برای API ترکینگ زنده (فاز ۴)
|
||||
- اتصال به TrackingMore/17track API
|
||||
- ~~فرمول محاسبه قیمت رقبا~~ (آرشیو شد)
|
||||
|
||||
---
|
||||
@ -355,6 +433,12 @@ php artisan ifnex:import:rates storage/app/public/01KYWGVNKS5TNMN37RV77PCYNZ.xls
|
||||
|
||||
# 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
|
||||
@ -369,6 +453,24 @@ curl http://localhost:8000/api/v1/track/TEST123
|
||||
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
|
||||
@ -496,13 +598,14 @@ IFNEX-Logistics/
|
||||
|
||||
۱. **این فایل (`STATUS.md`)** را کامل بخوان — حالا خواندی ✅
|
||||
۲. **`EXCEL_ANALYSIS.md`** را کامل بخوان — برای فهم دادههای تاریخی ضروری است
|
||||
۳. **`Phase0_Proposal.md`** را کامل بخوان — مرجع اصلی پروژه
|
||||
۳. **`Phase0_Proposal.md`** را کامل بخون — مرجع اصلی پروژه
|
||||
۴. **`README.md`** ریشه را بخوان — برای نمای کلی
|
||||
۵. کد موجود در `04_Laravel` را بررسی کن — ببین چه چیزی نوشته شده
|
||||
۶. **اولویت اول:** رفع مشکل middleware در `bootstrap/app.php` و `AdminPanelProvider.php` (راهحل در بالای این فایل آمده)
|
||||
۷. با کاربر (Kazem) هماهنگ کن — بپرس کدام کار را باید ادامه دهی
|
||||
۶. **اولویت اول:** تست کامل APIهای جدید (customer orders, payments, auth)
|
||||
۷. **اولویت دوم:** تست کامل پلاگین وردپرس با دادههای واقعی
|
||||
۸. با کاربر (Kazem) هماهنگ کن — بپرس کدام کار را باید ادامه دهی
|
||||
|
||||
**مهمترین کار بعدی:** رفع مشکل middleware + تست دستی Filament.
|
||||
**مهمترین کار بعدی:** تست کامل APIهای سفارشات مشتری + پرداخت.
|
||||
|
||||
---
|
||||
|
||||
@ -533,9 +636,25 @@ IFNEX-Logistics/
|
||||
- نصب جدول 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`
|
||||
|
||||
|
||||
#### ۲۰۲۶-۰۸-۰8
|
||||
#### ۲۰۲۶-۰۸-۰۸
|
||||
- ساخت `WalletController` با APIهای شارچ، بررسی موجودی و تاریخچه تراکنشها
|
||||
- ساخت `DiscountCodeController` با APIهای لیست و اعتبارسنجی کده تخفیف
|
||||
- ساخت `UpdateExchangeRates` Artisan Command
|
||||
@ -583,7 +702,6 @@ IFNEX-Logistics/
|
||||
- بهروزرسانی استایلهای پلاگین وردپرس مطابق با Design System
|
||||
|
||||
|
||||
|
||||
#### ۲۰۲۶-۰۸-۰۷
|
||||
[x] **refactor(api): improve pricing logic و add test coverage**
|
||||
- بهروزرسانی `ShippingRatesImport` برای استفاده از 'outbound' و 'inbound'
|
||||
@ -606,10 +724,7 @@ IFNEX-Logistics/
|
||||
|
||||
### کارهای بعدی
|
||||
|
||||
#### فاز ۲.۵ — آمادهسازی برای دمو/استفاده واقعی
|
||||
- [ ] **یکسازی کاربران وردپرس ↔ لاراول**
|
||||
- تکمیل `ifnex:sync-wp-users` command برای sincron خودکار کاربران
|
||||
- ایجادendent webhook برای sync تغییرات کاربر بین وردپرس و لاراول
|
||||
#### فاز ۲.۵ — تست و بهینهسازی
|
||||
- [ ] **تست نهایی پلاگین وردپرس با دادههای واقعی**
|
||||
- تست همه شورتکدها با دادههای واقعی مشتری
|
||||
- تست CORS و Rate Limiting در محیط تولید
|
||||
@ -618,32 +733,26 @@ IFNEX-Logistics/
|
||||
- مستند کامل APIهای لاراول برای فرانتاند developerها
|
||||
- مستند نحوه نصب و تنظیم پلاگین وردپرس
|
||||
- مستند نحوه sync کاربران
|
||||
- [ ] **بهینهسازی عملکرد**
|
||||
- کشکردن نرخ ارز و تعرفهها
|
||||
- بهینهسازی queryهای پرتکرار
|
||||
|
||||
#### فاز ۳ — با نیاز مشتری
|
||||
#### فاز ۴ — VPS پل و ترکینگ زنده
|
||||
- [ ] **راهاندازی VPS پل خارج (هلند/آلمان)**
|
||||
- [ ] **اتصال به TrackingMore/17track API**
|
||||
- مپ کردن کدهای رهگیری
|
||||
- وبهوک برای بهروزرسانی خودکار وضعیت
|
||||
- [ ] **گزارشگیری پیشرفته**
|
||||
- خروجی Excel/PDF برای تراکنشها، مرسولات، سود/زیان
|
||||
- داشبورد مدیریتی برای مدیرعامل
|
||||
- [ ] **پلاگین SMS**
|
||||
- اطلاعرسانی وضعیت مرسوله به مشتری
|
||||
- اطلاعرسانی پرداختهای کیف پول
|
||||
- یادآوری انقضا کدهای تخفیف
|
||||
- [ ] **پورتال مشتری کامل**
|
||||
- ثبت سفارش آنلاین
|
||||
- پرداخت از کیف پول
|
||||
- مشاهده فاکتورها و گزارشات
|
||||
- مدیریت آدرسها و تحویلگیرندگان
|
||||
- [ ] **گزارشگیری پیشرفته**
|
||||
- خروجی Excel/PDF برای تراکنشها، مرسولات، سود/زیان
|
||||
- داشبورد مدیریتی برای مدیرعامل
|
||||
- [ ] **ماژول CRM**
|
||||
- مدیریت مشتریان
|
||||
- تماسها و یادآوریها
|
||||
- تحلیل رفتار مشتریان
|
||||
|
||||
#### فاز ۴ — آینده دور
|
||||
- [ ] **VPS پل خارج**
|
||||
- اتصال به TrackingMore/17track API
|
||||
- پشتیبانی از ۱۰+ کاربر خارجی
|
||||
- [ ] **Webhookها**
|
||||
- اطلاعرسانی خودکار به مشتری وقتی مرسوله وضعیتش عوض میشه
|
||||
- یکسازی خودکار بین لاراول و وردپرس
|
||||
- [ ] **اپلیکیشن موبایل**
|
||||
- نسخه Android/iOS برای مشتریان
|
||||
- Push notification برای وضعیت مرسوله
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
| **نسخه PHP** | PHP 8.2+ |
|
||||
| **پنل ادمین** | Filament 3.3.x |
|
||||
| **دیتابیس** | MySQL 8+ |
|
||||
| **تاریخ آخرین بهروزرسانی** | 2026-08-07 |
|
||||
| **تاریخ آخرین بهروزرسانی** | 2026-08-10 |
|
||||
|
||||
---
|
||||
|
||||
@ -134,28 +134,40 @@ php artisan serve
|
||||
│ ├── Enums/ # Enum ها
|
||||
│ │ ├── ShipmentDirection.php # import/export
|
||||
│ │ ├── ShipmentType.php # DOC_NORMAL/DOC_ECONOMY/PARCEL
|
||||
│ │ ├── ShipmentStatus.php # ۷ وضعیت مرسوله
|
||||
│ │ ├── ShipmentStatus.php # ۹ وضعیت مرسوله
|
||||
│ │ ├── CarrierCode.php # ۹ شرکت حمل
|
||||
│ │ ├── TrackingSource.php # manual/api_carrier/api_aggregator
|
||||
│ │ └── UserRole.php # ۴ نقش کاربری
|
||||
│ │ ├── TrackingSource.php # ۵ منبع (manual, api, import, system, customer)
|
||||
│ │ ├── TransactionType.php
|
||||
│ │ ├── TransactionStatus.php
|
||||
│ │ ├── PaymentGateway.php # ۴ درگاه (zarinpal, wallet, manual, system)
|
||||
│ │ └── UserRole.php
|
||||
│ │
|
||||
│ ├── Services/ # لایه سرویس (Business Logic)
|
||||
│ │ ├── PriceCalculatorService.php # ⭐ موتور قیمتگذاری
|
||||
│ │ └── TrackingService.php # سرویس ترکینگ
|
||||
│ │ ├── PriceCalculatorService.php
|
||||
│ │ ├── TrackingService.php
|
||||
│ │ ├── ExchangeRateService.php
|
||||
│ │ ├── ZarinpalService.php
|
||||
│ │ ├── MockZarinpalService.php
|
||||
│ │ └── OrderPaymentService.php
|
||||
│ │
|
||||
│ ├── Http/
|
||||
│ │ ├── Controllers/
|
||||
│ │ │ ├── Api/
|
||||
│ │ │ │ ├── TrackController.php # API ترکینگ
|
||||
│ │ │ │ ├── PricingController.php # API استعلام قیمت
|
||||
│ │ │ │ ├── WalletController.php # API کیف پول
|
||||
│ │ │ │ └── DiscountCodeController.php # API تخفیف
|
||||
│ │ │ ├── OrderController.php # فرم ثبت سفارش
|
||||
│ │ │ ├── PricingPageController.php # صفحه استعلام قیمت
|
||||
│ │ │ └── ShipmentPdfController.php # تولید PDF
|
||||
│ │ │ │ ├── TrackController.php
|
||||
│ │ │ │ ├── PricingController.php
|
||||
│ │ │ │ ├── AuthController.php # ورود/خروج Sanctum
|
||||
│ │ │ │ ├── BridgeAuthController.php # لاگین از پلاگین وردپرس
|
||||
│ │ │ │ ├── WalletController.php
|
||||
│ │ │ │ ├── PaymentController.php
|
||||
│ │ │ │ ├── DiscountCodeController.php
|
||||
│ │ │ │ └── Customer/
|
||||
│ │ │ │ └── CustomerOrderController.php # ۶ endpoint سفارش مشتری
|
||||
│ │ │ ├── OrderController.php
|
||||
│ │ │ ├── PricingPageController.php
|
||||
│ │ │ └── ShipmentPdfController.php
|
||||
│ │ ├── Middleware/
|
||||
│ │ │ └── ApiKeyMiddleware.php # احراز هویت API
|
||||
│ │ └── Requests/ # Form Request Validation
|
||||
│ │ │ └── ApiKeyMiddleware.php
|
||||
│ │ └── Requests/
|
||||
│ │
|
||||
│ ├── Imports/ # Excel Imports
|
||||
│ │ ├── ShippingRatesImport.php # واردات تعرفهها
|
||||
@ -163,18 +175,36 @@ php artisan serve
|
||||
│ │ └── RateSheetImport.php # شیتهای نرخ
|
||||
│ │
|
||||
│ ├── Console/Commands/ # Artisan Commands
|
||||
│ │ ├── ImportShippingRates.php # واردات تعرفهها
|
||||
│ │ ├── ImportHistoricalData.php # واردات دادههای تاریخی
|
||||
│ │ └── UpdateExchangeRates.php # بهروزرسانی نرخ ارز
|
||||
│ │ ├── ImportShippingRates.php
|
||||
│ │ ├── ImportHistoricalData.php
|
||||
│ │ ├── UpdateExchangeRates.php
|
||||
│ │ ├── SyncWordPressUsers.php
|
||||
│ │ └── DebugImportCommand.php
|
||||
│ │
|
||||
│ └── Filament/ # پنل ادمین Filament
|
||||
│ ├── Resources/
|
||||
│ │ ├── CountryResource.php
|
||||
│ │ ├── ShipmentResource.php
|
||||
│ │ ├── ShippingRateResource.php
|
||||
│ │ └── ShipmentItemResource.php
|
||||
│ │ ├── ShipmentItemResource.php
|
||||
│ │ ├── WalletResource.php
|
||||
│ │ ├── WalletTransactionResource.php
|
||||
│ │ ├── PaymentResource.php
|
||||
│ │ ├── DiscountCodeResource.php
|
||||
│ │ ├── ExchangeRateHistoryResource.php
|
||||
│ │ ├── RoleResource.php
|
||||
│ │ └── UserResource.php
|
||||
│ ├── Widgets/
|
||||
│ │ ├── DashboardInfoWidget.php
|
||||
│ │ ├── ExchangeRateWidget.php
|
||||
│ │ ├── WalletStats.php
|
||||
│ │ ├── TransactionChartWidget.php
|
||||
│ │ └── RecentTransactionsWidget.php
|
||||
│ └── Pages/
|
||||
│ └── IfnexSettingsPage.php # صفحه تنظیمات
|
||||
│ ├── IfnexSettingsPage.php
|
||||
│ ├── PriceTestPage.php
|
||||
│ └── Reports/
|
||||
│ └── FinancialReport.php
|
||||
│
|
||||
├── database/
|
||||
│ ├── migrations/ # Migration ها
|
||||
@ -184,11 +214,20 @@ php artisan serve
|
||||
│ │ ├── 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
|
||||
│ │ ├── 2026_08_02_000007_update_users_table.php
|
||||
│ │ ├── 2026_08_08_000001_create_shipment_items_table.php
|
||||
│ │ ├── 2026_08_05_135026_create_discount_codes_table.php
|
||||
│ │ ├── 2026_08_09_231738_create_exchange_rate_history_table.php
|
||||
│ │ ├── 2026_08_10_080853_add_wallet_to_payment_gateway_enum.php
|
||||
│ │ ├── 2026_08_10_082121_add_system_to_tracking_source_enum.php
|
||||
│ │ ├── 2026_08_09_012526_create_notifications_table.php
|
||||
│ │ └── 2026_08_09_220409_create_permission_tables.php
|
||||
│ └── seeders/ # Seeders
|
||||
│ ├── CountriesTableSeeder.php
|
||||
│ ├── SystemSettingSeeder.php
|
||||
│ └── DatabaseSeeder.php
|
||||
│ ├── DatabaseSeeder.php
|
||||
│ ├── RoleAndPermissionSeeder.php
|
||||
│ └── SampleDataSeeder.php
|
||||
│
|
||||
├── routes/
|
||||
│ ├── web.php # روتهای وب (فرمها و صفحات)
|
||||
@ -297,10 +336,10 @@ GET /api/v1/wallet/transactions
|
||||
🎟️ API های تخفیف (فاز ۲)
|
||||
۱. لیست کدهای تخفیف فعال
|
||||
|
||||
GET /api/v1/discounts/active
|
||||
GET /api/v1/discount-codes/active
|
||||
|
||||
۲. اعتبارسنجی کد تخفیف
|
||||
POST /api/v1/discounts/validate
|
||||
POST /api/v1/discount-codes/validate
|
||||
|
||||
Body:
|
||||
{
|
||||
@ -308,6 +347,89 @@ Body:
|
||||
"amount": 1000000
|
||||
}
|
||||
|
||||
🔐 API های احراز هویت (فاز ۳)
|
||||
|
||||
۱. ورود و دریافت توکن Sanctum
|
||||
POST /api/v1/auth/login
|
||||
|
||||
Body:
|
||||
{
|
||||
"email": "user@example.com",
|
||||
"password": "password",
|
||||
"token_name": "api-token"
|
||||
}
|
||||
|
||||
۲. خروج و حذف توکن
|
||||
POST /api/v1/auth/logout
|
||||
|
||||
Header: Authorization: Bearer {token}
|
||||
|
||||
🛒 API های سفارشات مشتری (فاز ۳)
|
||||
|
||||
۱. پروفایل و آمار کاربر
|
||||
GET /api/v1/customer/profile
|
||||
|
||||
۲. لیست کشورها برای فرم سفارش
|
||||
GET /api/v1/customer/countries
|
||||
|
||||
۳. لیست سفارشات کاربر
|
||||
GET /api/v1/customer/orders
|
||||
|
||||
۴. ثبت سفارش جدید
|
||||
POST /api/v1/customer/orders
|
||||
|
||||
Body:
|
||||
{
|
||||
"direction": "export",
|
||||
"type": "PARCEL",
|
||||
"from_country_id": 1,
|
||||
"to_country_id": 2,
|
||||
"weight": 2.5,
|
||||
"sender_name": "نام فرستنده",
|
||||
"sender_phone": "۰۹۱۲۳۴۵۶۷۸۹",
|
||||
"sender_address": "آدرس",
|
||||
"receiver_name": "نام گیرنده",
|
||||
"receiver_phone": "۰۹۱۲۳۴۵۶۷۸۹",
|
||||
"receiver_address": "آدرس",
|
||||
"items": [
|
||||
{
|
||||
"description": "کالای گمرکی",
|
||||
"hs_code": "8542390001",
|
||||
"quantity": 1,
|
||||
"unit_price": 100
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
۵. جزئیات یک سفارش
|
||||
GET /api/v1/customer/orders/{shipment}
|
||||
|
||||
۶. لغو سفارش (فقط pending_payment)
|
||||
POST /api/v1/customer/orders/{shipment}/cancel
|
||||
|
||||
۷. پرداخت از کیف پول
|
||||
POST /api/v1/customer/orders/{shipment}/pay-wallet
|
||||
|
||||
۸. پرداخت از درگاه بانکی
|
||||
POST /api/v1/customer/orders/{shipment}/pay-gateway
|
||||
|
||||
Body:
|
||||
{
|
||||
"frontend_callback": "https://your-wordpress.com/order-payment/"
|
||||
}
|
||||
|
||||
🔗 API پل وردپرس (فاز ۳)
|
||||
|
||||
POST /api/v1/bridge/login
|
||||
|
||||
Body:
|
||||
{
|
||||
"bridge_api_key": "ifnex-bridge-key",
|
||||
"wp_user_id": 1,
|
||||
"wp_user_email": "user@wordpress.local",
|
||||
"wp_user_name": "نام کاربر"
|
||||
}
|
||||
|
||||
|
||||
Artisan Commands
|
||||
📥 واردات دادهها
|
||||
@ -334,6 +456,13 @@ php artisan ifnex:update-exchange-rates
|
||||
# crontab -e
|
||||
# 0 0 * * * cd /path/to/04_Laravel && php artisan ifnex:update-exchange-rates >> /dev/null 2>&1
|
||||
|
||||
🔄 سینک کاربران وردپرس (فاز ۳)
|
||||
# سینک دستی کاربران بین وردپرس و لاراول
|
||||
php artisan ifnex:sync-wp-users
|
||||
|
||||
🔑 تولید توکن API (فاز ۲)
|
||||
php artisan ifnex:token --user=admin@ifnex.local --name=api-token
|
||||
|
||||
🧪 تستها
|
||||
# اجرای همه تستها
|
||||
php artisan test
|
||||
@ -361,6 +490,25 @@ php artisan test --filter=PriceCalculatorServiceTest
|
||||
✅ اعمال صحیح ضریب سود و VAT
|
||||
✅ اعمال هزینههای جانبی
|
||||
✅ اعمال کد تخفیف درصدی و ثابت
|
||||
|
||||
۲. WalletServiceTest (فاز ۲)
|
||||
تستهای مربوط به کیف پول و تراکنشها:
|
||||
|
||||
php artisan test --filter=WalletServiceTest
|
||||
|
||||
|
||||
۳. PaymentControllerTest (فاز ۲)
|
||||
تستهای مربوط به درگاه پرداخت:
|
||||
|
||||
php artisan test --filter=PaymentControllerTest
|
||||
|
||||
|
||||
۴. DiscountCodeControllerTest (فاز ۲)
|
||||
تستهای مربوط به کدهای تخفیف:
|
||||
|
||||
php artisan test --filter=DiscountCodeControllerTest
|
||||
|
||||
|
||||
نوشتن تست جدید
|
||||
برای نوشتن تست جدید، از این الگو استفاده کنید:
|
||||
|
||||
@ -414,6 +562,19 @@ return [
|
||||
// Currency API
|
||||
'currency_api_key' => env('CURRENCY_API_KEY'),
|
||||
'currency_api_url' => env('CURRENCY_API_URL', 'https://api.freecurrencyapi.com/v1/latest'),
|
||||
|
||||
// Zarinpal Payment Gateway
|
||||
'zarinpal' => [
|
||||
'merchant_id' => env('ZARINPAL_MERCHANT_ID', 'fake-merchant-id-for-testing'),
|
||||
'sandbox' => env('ZARINPAL_SANDBOX', true),
|
||||
'callback_url' => env('ZARINPAL_CALLBACK_URL', 'http://localhost:8000/api/v1/payment/callback'),
|
||||
],
|
||||
|
||||
// WordPress Bridge
|
||||
'bridge_api_key' => env('IFNEX_BRIDGE_API_KEY', 'ifnex-bridge-key'),
|
||||
|
||||
// CORS
|
||||
'cors_allowed_origins' => explode(',', env('CORS_ALLOWED_ORIGINS', '*')),
|
||||
];
|
||||
|
||||
فایل config/cors.php
|
||||
|
||||
616
DEPLOYMENT.md
Normal file
616
DEPLOYMENT.md
Normal file
@ -0,0 +1,616 @@
|
||||
# 📦 راهنمای دپلوی IFNEX Logistics Platform
|
||||
|
||||
راهنمای کامل انتقال پروژه از محیط توسعه (XAMPP) به سرور Production
|
||||
|
||||
**نسخه:** 1.0.0
|
||||
**تاریخ:** 2026-08-10
|
||||
**نویسنده:** تیم توسعه IFNEX
|
||||
|
||||
---
|
||||
|
||||
## 📋 فهرست مطالب
|
||||
|
||||
1. [پیشنیازهای سرور](#۱-پیشنیازهای-سرور)
|
||||
2. [ساختار پروژه](#۲-ساختار-پروژه)
|
||||
3. [دپلوی Laravel (Backend)](#۳-دپلوی-laravel-backend)
|
||||
4. [دپلوی WordPress (Frontend)](#۴-دپلوی-wordpress-frontend)
|
||||
5. [اتصال دو سیستم (Bridge)](#۵-اتصال-دو-سیستم-bridge)
|
||||
6. [تنظیمات امنیتی](#۶-تنظیمات-امنیتی)
|
||||
7. [Cron Jobs](#۷-cron-jobs)
|
||||
8. [Backup Strategy](#۸-backup-strategy)
|
||||
9. [چکلیست نهایی](#۹-چکلیست-نهایی)
|
||||
10. [Troubleshooting](#۱۰-troubleshooting)
|
||||
|
||||
---
|
||||
|
||||
## ۱. پیشنیازهای سرور
|
||||
|
||||
### حداقل نیازمندیها
|
||||
|
||||
| مورد | حداقل | پیشنهادی |
|
||||
|------|-------|----------|
|
||||
| PHP | 8.2 | 8.3 |
|
||||
| MySQL | 8.0 | 8.0+ |
|
||||
| RAM | 2GB | 4GB |
|
||||
| Disk | 20GB SSD | 50GB NVMe |
|
||||
| Web Server | Apache 2.4 / Nginx 1.24 | Nginx |
|
||||
|
||||
### افزونههای PHP مورد نیاز
|
||||
|
||||
```bash
|
||||
php -m | grep -E "pdo_mysql|mbstring|openssl|tokenizer|xml|ctype|json|bcmath|gd|zip|curl|intl"
|
||||
```
|
||||
|
||||
لیست کامل:
|
||||
- `pdo_mysql` - اتصال به MySQL
|
||||
- `mbstring` - پشتیبانی UTF-8 (فارسی)
|
||||
- `openssl` - رمزنگاری
|
||||
- `tokenizer` - Laravel
|
||||
- `xml` - Laravel
|
||||
- `ctype` - Laravel
|
||||
- `json` - Laravel
|
||||
- `bcmath` - محاسبات مالی
|
||||
- `gd` یا `imagick` - پردازش تصویر
|
||||
- `zip` - Composer
|
||||
- `curl` - درخواستهای HTTP
|
||||
- `intl` - تاریخ شمسی (Jalali)
|
||||
|
||||
### نصب Composer و Node
|
||||
|
||||
```bash
|
||||
# Composer
|
||||
curl -sS https://getcomposer.org/installer | php
|
||||
mv composer.phar /usr/local/bin/composer
|
||||
|
||||
# بررسی نسخه
|
||||
composer --version
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ۲. ساختار پروژه
|
||||
|
||||
```
|
||||
IFNEX-Logistics/
|
||||
├── 01_WordPress/ # (قدیمی - قابل حذف بعد از مهاجرت)
|
||||
├── 03_WordPress/ # ✅ وردپرس اصلی (Frontend مشتری)
|
||||
│ └── wp-content/
|
||||
│ ├── plugins/
|
||||
│ │ └── ifnex-bridge/ # ✅ پلاگین اتصال به Laravel
|
||||
│ └── themes/
|
||||
│ └── ifnex/ # ✅ قالب اختصاصی
|
||||
├── 04_Laravel/ # ✅ Laravel (Backend + پنل ادمین)
|
||||
│ ├── app/
|
||||
│ ├── database/
|
||||
│ ├── public/ # Document root برای Laravel
|
||||
│ └── routes/
|
||||
└── DEPLOYMENT.md # این فایل
|
||||
```
|
||||
|
||||
### Document Roots روی سرور
|
||||
|
||||
| دامنه | مسیر |
|
||||
|-------|------|
|
||||
| `ifnex.com` | `/var/www/IFNEX/03_WordPress` |
|
||||
| `api.ifnex.com` یا `ifnex.com/api` | `/var/www/IFNEX/04_Laravel/public` |
|
||||
|
||||
---
|
||||
|
||||
## ۳. دپلوی Laravel (Backend)
|
||||
|
||||
### گام ۱: آپلود فایلها
|
||||
|
||||
```bash
|
||||
# از سیستم محلی به سرور
|
||||
scp -r 04_Laravel user@server:/var/www/IFNEX/
|
||||
|
||||
# یا با rsync (پیشنهادی)
|
||||
rsync -avz --exclude 'vendor' --exclude 'node_modules' \
|
||||
04_Laravel/ user@server:/var/www/IFNEX/04_Laravel/
|
||||
```
|
||||
|
||||
### گام ۲: نصب Dependencies
|
||||
|
||||
```bash
|
||||
cd /var/www/IFNEX/04_Laravel
|
||||
|
||||
# نصب بدون dev packages (برای production)
|
||||
composer install --optimize-autoloader --no-dev --no-interaction
|
||||
```
|
||||
|
||||
### گام ۳: تنظیم `.env`
|
||||
|
||||
فایل `.env` را برای production تنظیم کن:
|
||||
|
||||
```env
|
||||
# ─── تنظیمات پایه ───────────────────────────
|
||||
APP_NAME="IFNEX Logistics"
|
||||
APP_ENV=production
|
||||
APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
APP_DEBUG=false
|
||||
APP_URL=https://api.ifnex.com
|
||||
|
||||
# ─── دیتابیس ─────────────────────────────────
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=ifnex_laravel
|
||||
DB_USERNAME=ifnex_user
|
||||
DB_PASSWORD=StrongPassword@123
|
||||
|
||||
# ─── Session و Cache ─────────────────────────
|
||||
SESSION_DRIVER=database
|
||||
CACHE_STORE=redis
|
||||
QUEUE_CONNECTION=database
|
||||
|
||||
# ─── Sanctum ─────────────────────────────────
|
||||
SANCTUM_STATEFUL_DOMAINS=ifnex.com,www.ifnex.com
|
||||
SESSION_DOMAIN=.ifnex.com
|
||||
|
||||
# ─── IFNEX Bridge ────────────────────────────
|
||||
# ⚠️ مهم: این کلید باید با وردپرس یکسان باشد
|
||||
IFNEX_BRIDGE_API_KEY=your-very-strong-random-key-here
|
||||
|
||||
# ─── Zarinpal ────────────────────────────────
|
||||
ZARINPAL_MERCHANT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
|
||||
ZARINPAL_SANDBOX=false
|
||||
|
||||
# ─── Mail ────────────────────────────────────
|
||||
MAIL_MAILER=smtp
|
||||
MAIL_HOST=smtp.ifnex.com
|
||||
MAIL_PORT=587
|
||||
MAIL_USERNAME=noreply@ifnex.com
|
||||
MAIL_PASSWORD=xxxxx
|
||||
MAIL_ENCRYPTION=tls
|
||||
```
|
||||
|
||||
**تولید کلید امن:**
|
||||
```bash
|
||||
php artisan key:generate --show
|
||||
openssl rand -hex 32 # برای BRIDGE_API_KEY
|
||||
```
|
||||
|
||||
### گام ۴: ساخت دیتابیس
|
||||
|
||||
```bash
|
||||
mysql -u root -p
|
||||
```
|
||||
|
||||
```sql
|
||||
CREATE DATABASE ifnex_laravel CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
CREATE USER 'ifnex_user'@'localhost' IDENTIFIED BY 'StrongPassword@123';
|
||||
GRANT ALL PRIVILEGES ON ifnex_laravel.* TO 'ifnex_user'@'localhost';
|
||||
FLUSH PRIVILEGES;
|
||||
EXIT;
|
||||
```
|
||||
|
||||
### گام ۵: Import دیتابیس از توسعه
|
||||
|
||||
```bash
|
||||
# از سیستم محلی (XAMPP)
|
||||
mysqldump -u root ifnex_laravel > ifnex_backup.sql
|
||||
|
||||
# آپلود به سرور
|
||||
scp ifnex_backup.sql user@server:/tmp/
|
||||
|
||||
# Import روی سرور
|
||||
mysql -u ifnex_user -p ifnex_laravel < /tmp/ifnex_backup.sql
|
||||
```
|
||||
|
||||
### گام ۶: Migrations و Cache
|
||||
|
||||
```bash
|
||||
cd /var/www/IFNEX/04_Laravel
|
||||
|
||||
# اجرای migrations
|
||||
php artisan migrate --force
|
||||
|
||||
# Seed دادههای اولیه (نرخ ارز، zones، ...)
|
||||
php artisan db:seed --class=SampleShippingRatesSeeder --force
|
||||
|
||||
# ساخت cache ها برای سرعت
|
||||
php artisan config:cache
|
||||
php artisan route:cache
|
||||
php artisan view:cache
|
||||
php artisan event:cache
|
||||
|
||||
# Permissions
|
||||
chmod -R 775 storage bootstrap/cache
|
||||
chown -R www-data:www-data storage bootstrap/cache
|
||||
```
|
||||
|
||||
### گام ۷: تنظیم Nginx
|
||||
|
||||
فایل `/etc/nginx/sites-available/ifnex-api`:
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
server_name api.ifnex.com;
|
||||
return 301 https://$server_name$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
server_name api.ifnex.com;
|
||||
|
||||
root /var/www/IFNEX/04_Laravel/public;
|
||||
index index.php;
|
||||
|
||||
# SSL
|
||||
ssl_certificate /etc/letsencrypt/live/api.ifnex.com/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/api.ifnex.com/privkey.pem;
|
||||
|
||||
# Security headers
|
||||
add_header X-Frame-Options SAMEORIGIN;
|
||||
add_header X-Content-Type-Options nosniff;
|
||||
add_header X-XSS-Protection "1; mode=block";
|
||||
|
||||
# Upload limits
|
||||
client_max_body_size 50M;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.php?$query_string;
|
||||
}
|
||||
|
||||
location ~ \.php$ {
|
||||
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
|
||||
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
|
||||
include fastcgi_params;
|
||||
}
|
||||
|
||||
# مسدود کردن فایلهای حساس
|
||||
location ~ /\.(env|git) {
|
||||
deny all;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
فعالسازی:
|
||||
```bash
|
||||
ln -s /etc/nginx/sites-available/ifnex-api /etc/nginx/sites-enabled/
|
||||
nginx -t && systemctl reload nginx
|
||||
```
|
||||
|
||||
### گام ۸: SSL رایگان با Let's Encrypt
|
||||
|
||||
```bash
|
||||
apt install certbot python3-certbot-nginx
|
||||
certbot --nginx -d api.ifnex.com
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ۴. دپلوی WordPress (Frontend)
|
||||
|
||||
### گام ۱: آپلود فایلها
|
||||
|
||||
```bash
|
||||
rsync -avz --exclude 'wp-content/uploads' \
|
||||
03_WordPress/ user@server:/var/www/IFNEX/03_WordPress/
|
||||
```
|
||||
|
||||
### گام ۲: تنظیم `wp-config.php`
|
||||
|
||||
```php
|
||||
<?php
|
||||
// ─── دیتابیس ─────────────────────────────
|
||||
define('DB_NAME', 'ifnex_wp');
|
||||
define('DB_USER', 'ifnex_wp_user');
|
||||
define('DB_PASSWORD', 'StrongPassword@456');
|
||||
define('DB_HOST', 'localhost');
|
||||
define('DB_CHARSET', 'utf8mb4');
|
||||
|
||||
// ─── کلیدهای امنیتی ──────────────────────
|
||||
// از https://api.wordpress.org/secret-key/1.1/salt/ بگیرید
|
||||
define('AUTH_KEY', 'xxxxx');
|
||||
define('SECURE_AUTH_KEY', 'xxxxx');
|
||||
define('LOGGED_IN_KEY', 'xxxxx');
|
||||
define('NONCE_KEY', 'xxxxx');
|
||||
|
||||
// ─── Production ──────────────────────────
|
||||
define('WP_DEBUG', false);
|
||||
define('WP_DEBUG_LOG', false);
|
||||
define('WP_DEBUG_DISPLAY', false);
|
||||
define('SCRIPT_DEBUG', false);
|
||||
|
||||
// ─── Performance ─────────────────────────
|
||||
define('WP_CACHE', true);
|
||||
|
||||
define('ABSPATH', __DIR__ . '/');
|
||||
require_once ABSPATH . 'wp-settings.php';
|
||||
```
|
||||
|
||||
### گام ۳: Import دیتابیس وردپرس
|
||||
|
||||
```bash
|
||||
mysqldump -u root ifnexwp > ifnexwp_backup.sql
|
||||
scp ifnexwp_backup.sql user@server:/tmp/
|
||||
mysql -u ifnex_wp_user -p ifnex_wp < /tmp/ifnexwp_backup.sql
|
||||
```
|
||||
|
||||
**اصلاح URLها در دیتابیس:**
|
||||
```sql
|
||||
UPDATE wp_options SET option_value = 'https://ifnex.com'
|
||||
WHERE option_name IN ('siteurl', 'home');
|
||||
|
||||
UPDATE wp_posts SET post_content = REPLACE(post_content,
|
||||
'http://localhost/IFNEX-Logistics/03_WordPress', 'https://ifnex.com');
|
||||
```
|
||||
|
||||
### گام ۴: تنظیم Nginx برای وردپرس
|
||||
|
||||
فایل `/etc/nginx/sites-available/ifnex-wp`:
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
server_name ifnex.com www.ifnex.com;
|
||||
|
||||
root /var/www/IFNEX/03_WordPress;
|
||||
index index.php;
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/ifnex.com/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/ifnex.com/privkey.pem;
|
||||
|
||||
client_max_body_size 50M;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.php?$args;
|
||||
}
|
||||
|
||||
location ~ \.php$ {
|
||||
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
|
||||
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
|
||||
include fastcgi_params;
|
||||
}
|
||||
|
||||
# کش فایلهای استاتیک
|
||||
location ~* \.(jpg|jpeg|png|gif|css|js|svg|woff2)$ {
|
||||
expires 30d;
|
||||
add_header Cache-Control "public, immutable";
|
||||
}
|
||||
|
||||
location ~ /\.(env|git) {
|
||||
deny all;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### گام ۵: Permissions
|
||||
|
||||
```bash
|
||||
chown -R www-data:www-data /var/www/IFNEX/03_WordPress
|
||||
find /var/www/IFNEX/03_WordPress -type d -exec chmod 755 {} \;
|
||||
find /var/www/IFNEX/03_WordPress -type f -exec chmod 644 {} \;
|
||||
chmod -R 775 /var/www/IFNEX/03_WordPress/wp-content/uploads
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ۵. اتصال دو سیستم (Bridge)
|
||||
|
||||
### گام ۱: تنظیم پلاگین IFNEX Bridge
|
||||
|
||||
در پیشخوان وردپرس:
|
||||
**IFNEX → تنظیمات**
|
||||
|
||||
| فیلد | مقدار |
|
||||
|------|-------|
|
||||
| API URL | `https://api.ifnex.com/api/v1` |
|
||||
| API Key | (کلید عمومی از Laravel) |
|
||||
| Bridge API Key | (همان مقدار `.env` لاراول) |
|
||||
|
||||
### گام ۲: بررسی اتصال
|
||||
|
||||
در وردپرس یک صفحه تست بساز با شورتکد:
|
||||
```
|
||||
[ifnex_wallet_balance]
|
||||
```
|
||||
|
||||
اگر موجودی نمایش داده شد، اتصال برقرار است. ✅
|
||||
|
||||
### گام ۳: Sync کاربران
|
||||
|
||||
```bash
|
||||
cd /var/www/IFNEX/04_Laravel
|
||||
php artisan ifnex:sync-wp-users \
|
||||
--wp-db-name=ifnex_wp \
|
||||
--wp-db-user=ifnex_wp_user \
|
||||
--wp-db-pass=StrongPassword@456
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ۶. تنظیمات امنیتی
|
||||
|
||||
### چکلیست امنیتی
|
||||
|
||||
- [ ] `APP_DEBUG=false` در Laravel
|
||||
- [ ] `WP_DEBUG=false` در WordPress
|
||||
- [ ] SSL فعال روی هر دو دامنه
|
||||
- [ ] فایلهای `.env` و `.git` مسدود شدهاند
|
||||
- [ ] رمزهای قوی برای دیتابیس
|
||||
- [ ] `IFNEX_BRIDGE_API_KEY` قوی و تصادفی
|
||||
- [ ] حذف فایلهای debug از production:
|
||||
```bash
|
||||
rm -f debug-payment.php check-*.php test-*.php
|
||||
```
|
||||
- [ ] محدودیت دسترسی به `/admin` (اختیاری: IP whitelist)
|
||||
|
||||
### Firewall (UFW)
|
||||
|
||||
```bash
|
||||
ufw allow 22/tcp # SSH
|
||||
ufw allow 80/tcp # HTTP
|
||||
ufw allow 443/tcp # HTTPS
|
||||
ufw enable
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ۷. Cron Jobs
|
||||
|
||||
### Laravel Scheduler
|
||||
|
||||
```bash
|
||||
crontab -e
|
||||
```
|
||||
|
||||
```cron
|
||||
* * * * * cd /var/www/IFNEX/04_Laravel && php artisan schedule:run >> /dev/null 2>&1
|
||||
```
|
||||
|
||||
### Cron آپدیت نرخ ارز (هر ساعت)
|
||||
|
||||
اگر از scheduler استفاده نمیکنید:
|
||||
|
||||
```cron
|
||||
0 * * * * cd /var/www/IFNEX/04_Laravel && php artisan ifnex:update-rates >> /dev/null 2>&1
|
||||
```
|
||||
|
||||
### Cron Backup روزانه (ساعت ۲ بامداد)
|
||||
|
||||
```cron
|
||||
0 2 * * * /var/www/IFNEX/scripts/backup.sh >> /var/log/ifnex-backup.log 2>&1
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ۸. Backup Strategy
|
||||
|
||||
### اسکریپت `backup.sh`
|
||||
|
||||
فایل `/var/www/IFNEX/scripts/backup.sh`:
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# ─── IFNEX Backup Script ───────────────────
|
||||
|
||||
BACKUP_DIR="/var/backups/ifnex"
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
RETENTION_DAYS=7
|
||||
|
||||
mkdir -p $BACKUP_DIR
|
||||
|
||||
# Backup دیتابیس Laravel
|
||||
mysqldump -u ifnex_user -p'StrongPassword@123' ifnex_laravel \
|
||||
| gzip > $BACKUP_DIR/laravel_$DATE.sql.gz
|
||||
|
||||
# Backup دیتابیس WordPress
|
||||
mysqldump -u ifnex_wp_user -p'StrongPassword@456' ifnex_wp \
|
||||
| gzip > $BACKUP_DIR/wordpress_$DATE.sql.gz
|
||||
|
||||
# Backup فایلهای آپلود وردپرس
|
||||
tar -czf $BACKUP_DIR/uploads_$DATE.tar.gz \
|
||||
-C /var/www/IFNEX/03_WordPress/wp-content uploads
|
||||
|
||||
# حذف backup های قدیمی
|
||||
find $BACKUP_DIR -name "*.gz" -mtime +$RETENTION_DAYS -delete
|
||||
|
||||
echo "✅ Backup completed: $DATE"
|
||||
```
|
||||
|
||||
اجرا:
|
||||
```bash
|
||||
chmod +x /var/www/IFNEX/scripts/backup.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ۹. چکلیست نهایی
|
||||
|
||||
### قبل از Go-Live
|
||||
|
||||
**Laravel:**
|
||||
- [ ] `php artisan migrate --force` بدون خطا
|
||||
- [ ] `php artisan config:cache` موفق
|
||||
- [ ] ورود به `/admin` با ادمین
|
||||
- [ ] داشبورد بدون خطا لود میشود
|
||||
- [ ] ویجتهای نرخ ارز نمایش داده میشوند
|
||||
|
||||
**WordPress:**
|
||||
- [ ] صفحه اصلی بدون خطا
|
||||
- [ ] ورود مشتری کار میکند
|
||||
- [ ] `/new-order/` فرم را نمایش میدهد
|
||||
- [ ] `/my-orders/` لیست سفارشات را نشان میدهد
|
||||
- [ ] تست کامل: ثبت سفارش → پرداخت → تغییر status
|
||||
|
||||
**اتصال:**
|
||||
- [ ] Bridge API Key یکسان در هر دو طرف
|
||||
- [ ] تست پرداخت از کیف پول موفق
|
||||
- [ ] Tracking event ثبت میشود
|
||||
|
||||
### بعد از Go-Live
|
||||
|
||||
- [ ] مانیتورینگ لاگها:
|
||||
```bash
|
||||
tail -f /var/www/IFNEX/04_Laravel/storage/logs/laravel.log
|
||||
```
|
||||
- [ ] بررسی cron jobs: `crontab -l`
|
||||
- [ ] تست backup و restore
|
||||
|
||||
---
|
||||
|
||||
## ۱۰. Troubleshooting
|
||||
|
||||
### مشکل: خطای 500 در Laravel
|
||||
|
||||
```bash
|
||||
# بررسی لاگ
|
||||
tail -100 storage/logs/laravel.log
|
||||
|
||||
# پاک کردن cache
|
||||
php artisan config:clear
|
||||
php artisan cache:clear
|
||||
|
||||
# بررسی permissions
|
||||
chmod -R 775 storage bootstrap/cache
|
||||
```
|
||||
|
||||
### مشکل: وردپرس به Laravel وصل نمیشود
|
||||
|
||||
```bash
|
||||
# تست اتصال از سرور وردپرس
|
||||
curl -X POST https://api.ifnex.com/api/v1/bridge/login \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"bridge_api_key":"YOUR_KEY","wp_user_id":1,"wp_user_email":"test@test.com"}'
|
||||
```
|
||||
|
||||
### مشکل: خطای "توکن احراز هویت یافت نشد"
|
||||
|
||||
1. بررسی کنید کاربر در Laravel وجود دارد (sync شده)
|
||||
2. توکنهای قدیمی را پاک کنید:
|
||||
```sql
|
||||
DELETE FROM wp_usermeta WHERE meta_key LIKE 'ifnex_laravel%';
|
||||
```
|
||||
3. دوباره لاگین کنید
|
||||
|
||||
### مشکل: SSL certificate error
|
||||
|
||||
```bash
|
||||
certbot renew --dry-run
|
||||
certbot renew
|
||||
```
|
||||
|
||||
### مشکل: خطای CORS
|
||||
|
||||
در `config/cors.php` لاراول:
|
||||
```php
|
||||
'paths' => ['api/*', 'sanctum/csrf-cookie'],
|
||||
'allowed_origins' => ['https://ifnex.com', 'https://www.ifnex.com'],
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📞 پشتیبانی
|
||||
|
||||
در صورت بروز مشکل:
|
||||
- ایمیل: dev@ifnex.com
|
||||
- مستندات Laravel: https://laravel.com/docs
|
||||
- مستندات WordPress: https://wordpress.org/documentation/
|
||||
|
||||
---
|
||||
|
||||
**پایان راهنمای دپلوی**
|
||||
🎉 موفق باشید!
|
||||
236
README.md
236
README.md
@ -3,8 +3,8 @@
|
||||
|
||||
| مورد | توضیحات |
|
||||
| :--- | :--- |
|
||||
| **ویرایش سند** | v4.1 (Laravel 11 + Filament 3.3 + فاز ۰ کامل + فاز ۱ کامل + فاز ۲ در حال اجرا) |
|
||||
| **تاریخ آخرین بهروزرسانی** | 2026-08-07 |
|
||||
| **ویرایش سند** | v4.2 (Laravel 11 + Filament 3.3 + فاز ۰ کامل + فاز ۱ کامل + فاز ۲ کامل + فاز ۳ کامل) |
|
||||
| **تاریخ آخرین بهروزرسانی** | 2026-08-10 |
|
||||
| **توسعهدهنده** | VernaSoft Group — Kazem Alghasi |
|
||||
| **مشتری** | شرکت حمل و نقل بینالمللی ایفنکس (IFNEX) — اصفهان |
|
||||
|
||||
@ -48,11 +48,11 @@
|
||||
|
||||
| لایه | تکنولوژی | نقش |
|
||||
| :--- | :--- | :--- |
|
||||
| **فرانتاند** | WordPress + Elementor | مدیریت ظاهر، منوها، لندینگ پیجها، صفحات ثابت، وبلاگ سئو |
|
||||
| **بکاند** | Laravel 11 + Filament 3.3 | API سرور، پنل ادمین، موتور قیمتگذاری، صدور PDF، کیف پول |
|
||||
| **پل ارتباطی** | پلاگین اختصاصی IFNEX Bridge | ارسال درخواستهای کاربر از وردپرس به لاراول |
|
||||
| **فرانتاند** | WordPress 7.0.3 + پوسته سفارشی IFNEX + Polylang | مدیریت ظاهر، چندزبانه، پورتال مشتری، لندینگ پیجها |
|
||||
| **بکاند** | Laravel 11 + Filament 3.3 | API سرور، پنل ادمین، موتور قیمتگذاری، صدور PDF، کیف پول، پرداخت آنلاین |
|
||||
| **پل ارتباطی** | پلاگین اختصاصی IFNEX Bridge | ارسال درخواستهای کاربر از وردپرس به لاراول، مدیریت توکن Sanctum |
|
||||
| **دیتابیس** | MySQL 8 | ذخیرهسازی دادهها با پشتیبانی از JSON columns |
|
||||
| **زیرساخت رهگیری** | VPS خارج از کشور (در فاز ۳) | واسط برای دسترسی به APIهای رهگیری بینالمللی |
|
||||
| **زیرساخت رهگیری** | VPS خارج از کشور (در فاز ۴) | واسط برای دسترسی به APIهای رهگیری بینالمللی |
|
||||
|
||||
---
|
||||
|
||||
@ -64,8 +64,8 @@
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| **فاز ۰** | بنیان داده + وبسایت + ترکینگ دستی + مهاجرت دادههای تاریخی | ۴ هفته | ✅ کامل |
|
||||
| **فاز ۱** | موتور قیمتگذاری کامل + ثبت سفارش آنلاین + تولید PDFها + استعلام قیمت | ۴-۶ هفته | ✅ کامل |
|
||||
| **فاز ۲** | حساب کاربری مشتری + کیف پول + حسابداری ساده + تخفیف حجمی | ۴ هفته | 🚧 در حال اجرا |
|
||||
| **فاز ۳** | VPS پل + API ترکینگ زنده + CRM + داشبورد مالی تحلیلی | ۶-۸ هفته | ⏳ در صف |
|
||||
| **فاز ۲** | حساب کاربری مشتری + کیف پول + پرداخت آنلاین + تخفیف حجمی + پنل مالی | ۴ هفته | ✅ کامل |
|
||||
| **فاز ۳** | پورتال مشتری کامل + پلاگین وردپرس + سینک کاربران + پرداخت سفارش | ۶ هفته | ✅ کامل |
|
||||
|
||||
> 💡 جزئیات کامل هر فاز، اسکیمای دیتابیس، جدول زمانی و معیارهای پذیرش در سند `01_Documents/Phase0_Proposal.md` آمده است.
|
||||
|
||||
@ -80,20 +80,31 @@
|
||||
- پشتیبانی از ۳ نوع سرویس: `DOC_NORMAL`, `DOC_ECONOMY`, `PARCEL`
|
||||
- جدول `shipment_carrier_mappings` برای نگاشت چند شرکت حمل به هر بارنامه
|
||||
- جدول `shipment_tracking_events` برای ذخیره تایملاین کامل رویدادهای هر مرسوله
|
||||
- جدول `system_settings` برای ذخیره تنظیمات سیستم (VAT، نرخ ارز، ضریب سود)
|
||||
- جدول `shipment_items` برای اقلام گمرکی (۹ ردیف)
|
||||
|
||||
2. **پنل مدیریت اختصاصی (Laravel Filament)**
|
||||
- مدیریت ۲۳۳ کشور با زونهای صادرات و واردات
|
||||
- فرم تنظیمات سیستم: تغییر سریع ارزها و ضریب سود بدون دستکاری کد
|
||||
- UX تخصصی اپراتور ترکینگ: افزودن رویداد در چند ثانیه با فیلدهای از پیش پر شده
|
||||
- **تببندی ویجتهای داشبورد:** اطلاعات کلی، نرخ ارز، آمار کیف پول
|
||||
- **رابط کاربری سفارشی:** رنگ Navy gradient، فونت Vazirmatn، RTL کامل
|
||||
|
||||
3. **ارتباطات API و فرانتاند**
|
||||
- **API ترکینگ:** `GET /api/track/{awb_no}` با API Key + Rate Limiting + CORS
|
||||
- **پلاگین IFNEX Bridge:** شورتکد `[ifnex_tracking_form]` برای فرم رهگیری در وردپرس
|
||||
- **امنیت:** API Key + Rate Limiting + CORS whitelist + Form Request Validation
|
||||
- **API استعلام قیمت:** `POST /api/v1/calculate`
|
||||
- **API احراز هویت:** `POST /api/v1/auth/login` + `POST /api/v1/auth/logout` (Sanctum)
|
||||
- **API سفارشات مشتری:** ۶ endpoint برای پروفایل، سفارشات، پرداخت و لغو
|
||||
- **API کیف پول:** موجودی، تراکنشها، تنظیمات ادمین
|
||||
- **API تخفیف:** لیست و اعتبارسنجی کدهای تخفیف
|
||||
- **پلاگین IFNEX Bridge:** شورتکدهای `[ifnex_tracking_form]`، `[ifnex_tracking_status]`، `[ifnex_wallet_balance]`، `[ifnex_transactions]`
|
||||
- **امنیت:** API Key + Rate Limiting + CORS whitelist + Form Request Validation + Sanctum
|
||||
|
||||
4. **مهاجرت دادههای تاریخی**
|
||||
- انتقال ۳۹۵۰ رکورد تاریخی از فایل اکسل به دیتابیس جدید
|
||||
- اعتبارسنجی و پاکسازی خودکار دادهها
|
||||
- import ۴۰۴ رکورد تعرفههای حمل
|
||||
- import ۹۸ رویداد ترکینگ دستی
|
||||
|
||||
### فاز ۱ (تکمیل شده) ✅
|
||||
|
||||
@ -106,7 +117,7 @@
|
||||
2. **فرم ثبت سفارش آنلاین**
|
||||
- فرم عمومی برای مشتریان با ۹ ردیف کالای گمرکی
|
||||
- اعتبارسنجی خودکار و محاسبه لحظهای قیمت
|
||||
- تولید AWB number خودکار
|
||||
- تولید AWB number خودکار با فرمت `IFN-YYYY-XXXXX`
|
||||
|
||||
3. **تولید PDFهای حرفهای**
|
||||
- **AWB:** بارنامه هوایی با لوگوی IFNEX
|
||||
@ -123,40 +134,98 @@
|
||||
- پشتیبانی از شیتهای Export Rate، Import Rate و DocEco
|
||||
- تبدیل خودکار واحد قیمت (ریال → درهم) برای شیتهای DocNor/DocEco
|
||||
|
||||
### فاز ۲ (در حال اجرا) 🚧
|
||||
### فاز ۲ (تکمیل شده) ✅
|
||||
|
||||
1. **سیستم کیف پول (Wallet)**
|
||||
- API شارژ اعتبار
|
||||
- API شارژ اعتبار (دستی و خودکار)
|
||||
- API بررسی موجودی
|
||||
- API تاریخچه تراکنشها
|
||||
- **وضعیت:** Controllers و APIها ساخته شده، نیاز به اتصال درگاه پرداخت
|
||||
- **اتصال درگاه پرداخت زرینپال** با Mock Gateway برای تست
|
||||
- پرداخت آنلاین کامل با بازگشت به فرانتاند
|
||||
|
||||
2. **سیستم تخفیف (Discount Codes)**
|
||||
- API لیست کدهای تخفیف فعال
|
||||
- API اعتبارسنجی کد تخفیف
|
||||
- پشتیبانی از تخفیف درصدی و ثابت
|
||||
- **وضعیت:** کامل شده
|
||||
- **DiscountCodeResource** در Filament با form/table/filters کامل
|
||||
|
||||
3. **بهروزرسانی خودکار نرخ ارز**
|
||||
- Artisan Command برای بهروزرسانی روزانه
|
||||
- پشتیبانی از ECB و FreeCurrencyAPI
|
||||
- **وضعیت:** کامل شده
|
||||
- **ردیابی تاریخچه نرخ ارز** با `ExchangeRateHistory` و `ExchangeRateHistoryResource`
|
||||
|
||||
4. **کارهای باقیمانده فاز ۲**
|
||||
- [ ] اتصال درگاه پرداخت (زرینپال)
|
||||
- [ ] شارژ آنلاین کامل با درگاه پرداخت
|
||||
- [ ] پنل مالی در Filament (داشبورد سود/زیان)
|
||||
- [ ] فرمول محاسبه قیمت رقبا
|
||||
4. **پنل مالی در Filament**
|
||||
- **FinanceOverviewWidget** — خلاصه مالی
|
||||
- **TransactionChartWidget** — نمودار تراکنشها
|
||||
- **RecentTransactionsWidget** — آخرین تراکنشها
|
||||
- **PaymentResource** — مشاهده تراکنشهای درگاه
|
||||
- **WalletTransactionResource** — CRUD کامل تراکنشهای کیف پول
|
||||
- خروجی CSV برای تراکنشها و مرسولات
|
||||
|
||||
### فاز ۳ (در صف) ⏳
|
||||
5. **کنترل دسترسی مبتنی بر نقش (RBAC)**
|
||||
- یکپارچگی با `spatie/laravel-permission`
|
||||
- **RoleResource** و **UserResource** در Filament
|
||||
- **RoleAndPermissionSeeder** برای تنظیم اولیه
|
||||
|
||||
- [ ] راهاندازی VPS پل خارج (هلند/آلمان)
|
||||
- [ ] اتصال به TrackingMore/17track API
|
||||
- [ ] سیستم وبهوک
|
||||
- [ ] مپ کردن کدهای رهگیری
|
||||
- [ ] داشبورد مالی
|
||||
- [ ] فرم نظرسنجی و رضایت مشتری
|
||||
- [ ] پنل کاربری مشتریان در وردپرس
|
||||
6. **یکپارچگی وردپرس ↔ لاراول**
|
||||
- دستور Artisan `ifnex:sync-wp-users` برای سینک کاربران
|
||||
- پلاگین IFNEX Bridge گسترش یافته:
|
||||
- شورتکد `[ifnex_wallet_balance]` برای موجودی کیف پول
|
||||
- شورتکد `[ifnex_transactions]` برای لیست تراکنشها
|
||||
- AJAX handlers برای موجودی و تراکنشها
|
||||
|
||||
### فاز ۳ (تکمیل شده) ✅
|
||||
|
||||
1. **سیستم ثبت سفارش مشتری (Customer Ordering)**
|
||||
- **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` — لغو سفارش
|
||||
- تولید خودکار شماره AWB با فرمت `IFN-YYYY-XXXXX`
|
||||
- وضعیتهای جدید: `pending_payment` و `cancelled`
|
||||
- اعتبارسنجی کامل و محاسبه لحظهای قیمت
|
||||
|
||||
2. **سیستم پرداخت سفارش (Order Payment)**
|
||||
- **OrderPaymentService** برای مدیریت پرداختها
|
||||
- پرداخت از کیف پول: `POST /api/v1/customer/orders/{shipment}/pay-wallet`
|
||||
- پرداخت از درگاه: `POST /api/v1/customer/orders/{shipment}/pay-gateway`
|
||||
- تکمیل خودکار پرداخت بعد از callback درگاه
|
||||
- ثبت رویداد ترکینگ پس از پرداخت موفق
|
||||
|
||||
3. **احراز هویت مشتری (Customer Auth)**
|
||||
- **AuthController** با login/logout برای Sanctum
|
||||
- **BridgeAuthController** برای لاگین مستقیم از وردپرس
|
||||
- توکنهای Sanctum با انقضا ۳۰ روزه
|
||||
|
||||
4. **پورتال مشتری در وردپرس**
|
||||
- **شورتکد `[ifnex_order_form]`** — فرم ثبت سفارش چندمرحلهای (۴ مرحله)
|
||||
- **شورتکد `[ifnex_orders_list]`** — لیست سفارشات با فیلتر وضعیت
|
||||
- **شورتکد `[ifnex_order_payment]`** — صفحه پرداخت سفارش (کیف پول + درگاه)
|
||||
- **شورتکد `[ifnex_order_detail]`** — جزئیات سفارش با timeline رهگیری
|
||||
- **شورتکد `[ifnex_user_profile]`** — پروفایل کاربر با آمار کیف پول
|
||||
- استایلهای CSS کامل برای تمام کامپوننتها (`ifnex-orders.css`)
|
||||
- JavaScript برای ناوبری مراحل و AJAX (`ifnex-order-form.js`)
|
||||
|
||||
5. **پوسته وردپرس سفارشی IFNEX**
|
||||
- پشتیبانی چندزبانه با Polylang
|
||||
- مدیریت LTR/RTL خودکار
|
||||
- Customizer برای لوگو و زبان
|
||||
- قالبهای archive, single, front-page
|
||||
- ساختار تمیک شرکتی با لوگو IFNEX
|
||||
|
||||
6. **سیستم طراحی یکپارچه (Design System)**
|
||||
- **DESIGN_SYSTEM.md** — مرجع کامل رنگها، فونتها، فاصلهگذاری
|
||||
- رنگهای برند: Primary Amber `#f59e0b`، Sidebar Dark Navy `#1a1a2e → #16213e`
|
||||
- فونت Vazirmatn برای کل پنل ادمین و فرانتاند
|
||||
- استایلهای یکپارچه برای Filament و پلاگین وردپرس
|
||||
|
||||
7. **گزارشگیری مالی در Filament**
|
||||
- صفحه **FinancialReport** با خلاصه تراکنشها و مرسولات
|
||||
- خروجی Excel برای ShipmentResource و WalletTransactionResource
|
||||
- ویجتهایdashboard اطلاعاتی
|
||||
|
||||
---
|
||||
|
||||
@ -176,11 +245,114 @@ IFNEX-Logistics/
|
||||
│ └── Assets/ # لوگوها، آیکونها
|
||||
│
|
||||
├── 03_WordPress/ # سیستم مدیریت محتوا (فرانتاند)
|
||||
│ └── wp-content/plugins/
|
||||
│ └── ifnex-bridge/ # پلاگین اختصاصی ارتباط با لاراول
|
||||
│ ├── wp-content/
|
||||
│ │ ├── themes/ifnex/ # پوسته سفامشی IFNEX (چندزبانه، RTL/LTR)
|
||||
│ │ └── plugins/
|
||||
│ │ └── ifnex-bridge/ # پلاگین اختصاصی ارتباط با لاراول
|
||||
│ │ ├── ifnex-bridge.php
|
||||
│ │ ├── includes/
|
||||
│ │ │ ├── api-client.php
|
||||
│ │ │ ├── shortcodes.php
|
||||
│ │ │ ├── tracking-form.php
|
||||
│ │ │ └── user-bridge.php
|
||||
│ │ └── assets/
|
||||
│ │ ├── css/
|
||||
│ │ │ ├── ifnex-bridge.css
|
||||
│ │ │ └── ifnex-orders.css
|
||||
│ │ └── js/
|
||||
│ │ └── ifnex-order-form.js
|
||||
│
|
||||
├── 04_Laravel/ # هسته مرکزی سیستم (بکاند)
|
||||
│ └── README.md # راهنمای نصب و استفاده از لاراول
|
||||
│ ├── README.md # راهنمای نصب و استفاده از لاراول
|
||||
│ ├── app/
|
||||
│ │ ├── Models/
|
||||
│ │ │ ├── Country.php
|
||||
│ │ │ ├── Shipment.php
|
||||
│ │ │ ├── ShipmentItem.php
|
||||
│ │ │ ├── ShippingRate.php
|
||||
│ │ │ ├── ShipmentCarrierMapping.php
|
||||
│ │ │ ├── ShipmentTrackingEvent.php
|
||||
│ │ │ ├── SystemSetting.php
|
||||
│ │ │ ├── Wallet.php
|
||||
│ │ │ ├── WalletTransaction.php
|
||||
│ │ │ ├── DiscountCode.php
|
||||
│ │ │ ├── ExchangeRateHistory.php
|
||||
│ │ │ ├── Role.php # spatie/laravel-permission
|
||||
│ │ │ └── User.php
|
||||
│ │ ├── Enums/
|
||||
│ │ │ ├── ShipmentDirection.php
|
||||
│ │ │ ├── ShipmentType.php
|
||||
│ │ │ ├── ShipmentStatus.php # ۹ وضعیت (pending_payment, cancelled اضافه شد)
|
||||
│ │ │ ├── CarrierCode.php
|
||||
│ │ │ ├── TrackingSource.php # ۵ منبع (manual, api, import, system, customer)
|
||||
│ │ │ ├── TransactionType.php
|
||||
│ │ │ ├── TransactionStatus.php
|
||||
│ │ │ ├── PaymentGateway.php # ۴ درگاه (zarinpal, wallet, manual, system)
|
||||
│ │ │ └── UserRole.php
|
||||
│ │ ├── Services/
|
||||
│ │ │ ├── PriceCalculatorService.php
|
||||
│ │ │ ├── TrackingService.php
|
||||
│ │ │ ├── ExchangeRateService.php # ردیابی و مدیریت نرخ ارز
|
||||
│ │ │ ├── ZarinpalService.php # اتصال به درگاه زرینپال
|
||||
│ │ │ ├── MockZarinpalService.php # شبیهسازی درگاه برای تست
|
||||
│ │ │ └── OrderPaymentService.php # پرداخت سفارشات (کیف پول + درگاه)
|
||||
│ │ ├── Http/
|
||||
│ │ │ ├── Controllers/
|
||||
│ │ │ │ ├── Api/
|
||||
│ │ │ │ │ ├── TrackController.php
|
||||
│ │ │ │ │ ├── PricingController.php
|
||||
│ │ │ │ │ ├── AuthController.php # ورود/خروج Sanctum
|
||||
│ │ │ │ │ ├── BridgeAuthController.php # لاگین از پلاگین وردپرس
|
||||
│ │ │ │ │ ├── WalletController.php
|
||||
│ │ │ │ │ ├── PaymentController.php
|
||||
│ │ │ │ │ ├── DiscountCodeController.php
|
||||
│ │ │ │ │ └── Customer/
|
||||
│ │ │ │ │ └── CustomerOrderController.php # ۶ endpoint سفارش مشتری
|
||||
│ │ │ │ ├── OrderController.php
|
||||
│ │ │ │ ├── PricingPageController.php
|
||||
│ │ │ │ └── ShipmentPdfController.php
|
||||
│ │ │ ├── Middleware/
|
||||
│ │ │ │ └── ApiKeyMiddleware.php
|
||||
│ │ │ └── Requests/
|
||||
│ │ ├── Imports/
|
||||
│ │ │ ├── ShippingRatesImport.php
|
||||
│ │ │ ├── HistoricalShipmentsImport.php
|
||||
│ │ │ └── RateSheetImport.php
|
||||
│ │ ├── Console/
|
||||
│ │ │ └── Commands/
|
||||
│ │ │ │ ├── ImportShippingRates.php
|
||||
│ │ │ │ │ ├── ImportHistoricalData.php
|
||||
│ │ │ │ │ ├── UpdateExchangeRates.php
|
||||
│ │ │ │ │ ├── SyncWordPressUsers.php # سینک کاربران وردپرس
|
||||
│ │ │ │ │ └── DebugImportCommand.php
|
||||
│ │ ├── Filament/
|
||||
│ │ │ ├── Resources/
|
||||
│ │ │ │ ├── CountryResource.php
|
||||
│ │ │ │ ├── ShipmentResource.php
|
||||
│ │ │ │ ├── ShippingRateResource.php
|
||||
│ │ │ │ ├── ShipmentItemResource.php
|
||||
│ │ │ │ ├── WalletResource.php
|
||||
│ │ │ │ ├── WalletTransactionResource.php # CRUD کامل با صفحات Create/Edit
|
||||
│ │ │ │ ├── PaymentResource.php # مشاهده تراکنشهای درگاه
|
||||
│ │ │ │ ├── DiscountCodeResource.php # مدیریت کدهای تخفیف
|
||||
│ │ │ │ ├── ExchangeRateHistoryResource.php # تاریخچه نرخ ارز
|
||||
│ │ │ │ ├── RoleResource.php # مدیریت نقشها (spatie)
|
||||
│ │ │ │ └── UserResource.php # مدیریت کاربران (spatie)
|
||||
│ │ │ ├── Widgets/
|
||||
│ │ │ │ ├── DashboardInfoWidget.php # اطلاعات کلی داشبورد
|
||||
│ │ │ │ ├── ExchangeRateWidget.php # نرخ ارز زنده
|
||||
│ │ │ │ ├── WalletStats.php # آمار کیف پول
|
||||
│ │ │ │ ├── TransactionChartWidget.php # نمودار تراکنشها
|
||||
│ │ │ │ └── RecentTransactionsWidget.php
|
||||
│ │ │ └── Pages/
|
||||
│ │ │ │ ├── IfnexSettingsPage.php
|
||||
│ │ │ │ ├── PriceTestPage.php
|
||||
│ │ │ │ └── Reports/
|
||||
│ │ │ │ └── FinancialReport.php # گزارش مالی
|
||||
│ │ └── Providers/
|
||||
│ │ ├── AppServiceProvider.php
|
||||
│ │ └── Filament/
|
||||
│ │ └── AdminPanelProvider.php # پیکربندی کامل (رنگ، فونت، نوتیفیکیشن)
|
||||
│
|
||||
└── README.md # این فایل — نمای کلی پروژه
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user