diff --git a/01_Documents/IFNEX_Phase0_Checklist.md b/01_Documents/IFNEX_Phase0_Checklist.md index 26354af..2ef230c 100644 --- a/01_Documents/IFNEX_Phase0_Checklist.md +++ b/01_Documents/IFNEX_Phase0_Checklist.md @@ -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) --- diff --git a/01_Documents/STATUS.md b/01_Documents/STATUS.md index be87f29..f499750 100644 --- a/01_Documents/STATUS.md +++ b/01_Documents/STATUS.md @@ -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 برای وضعیت مرسوله diff --git a/04_Laravel/README.md b/04_Laravel/README.md index 5b1167c..da80b65 100644 --- a/04_Laravel/README.md +++ b/04_Laravel/README.md @@ -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 diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md new file mode 100644 index 0000000..cb09778 --- /dev/null +++ b/DEPLOYMENT.md @@ -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 + 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/ + +--- + +**پایان راهنمای دپلوی** +🎉 موفق باشید! \ No newline at end of file diff --git a/README.md b/README.md index 99f01d4..8319317 100644 --- a/README.md +++ b/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 # این فایل — نمای کلی پروژه