docs: update project documentation and roadmap
- update `IFNEX_File_Map.md` to include new migrations and models from phases 2 and 3 - update `IFNEX_Phase0_Checklist.md` to reflect completed status of phase 0 and progress on subsequent phases - add `IFNEX_Roadmap.md` to outline project milestones and future development stages
This commit is contained in:
parent
98181abc45
commit
6a4a619261
@ -1,202 +1,232 @@
|
||||
# 📂 نقشه فایلهای فاز ۰ — IFNEX Laravel
|
||||
# نقشه فایلهای پروژه IFNEX
|
||||
|
||||
> هر فایل را از پوشه `IFNEX_Laravel_Phase0/` در ریشهی پروژه Laravel (مثلاً `04_Laravel/`) کپی کنید.
|
||||
> **آخرین بروزرسانی:** 2026-08-29
|
||||
|
||||
---
|
||||
|
||||
## ۱. Migrations (۸ فایل)
|
||||
## ۱. Migrations
|
||||
|
||||
| # | آدرس مقصد در پروژه Laravel |
|
||||
|---|---|
|
||||
| 1 | `database/migrations/2026_08_02_000001_create_countries_table.php` |
|
||||
| 2 | `database/migrations/2026_08_02_000002_create_shipments_table.php` |
|
||||
| 3 | `database/migrations/2026_08_02_000003_create_shipment_carrier_mappings_table.php` |
|
||||
| 4 | `database/migrations/2026_08_02_000004_create_shipment_tracking_events_table.php` |
|
||||
| 5 | `database/migrations/2026_08_02_000005_create_shipment_items_table.php` |
|
||||
| 6 | `database/migrations/2026_08_02_000006_create_shipping_rates_table.php` |
|
||||
| 7 | `database/migrations/2026_08_02_000007_create_system_settings_table.php` |
|
||||
| 8 | `database/migrations/2026_08_02_000008_create_users_table.php` |
|
||||
| # | فایل | فاز |
|
||||
|---|------|-----|
|
||||
| 1 | `database/migrations/..._create_countries_table.php` | ۰ |
|
||||
| 2 | `database/migrations/..._create_shipments_table.php` | ۰ |
|
||||
| 3 | `database/migrations/..._create_shipment_carrier_mappings_table.php` | ۰ |
|
||||
| 4 | `database/migrations/..._create_shipment_tracking_events_table.php` | ۰ |
|
||||
| 5 | `database/migrations/..._create_shipment_items_table.php` | ۰ |
|
||||
| 6 | `database/migrations/..._create_shipping_rates_table.php` | ۰ |
|
||||
| 7 | `database/migrations/..._create_system_settings_table.php` | ۰ |
|
||||
| 8 | `database/migrations/..._create_users_table.php` | ۰ |
|
||||
| 9 | `database/migrations/..._create_currencies_table.php` | ۲ |
|
||||
| 10 | `database/migrations/..._create_shipment_packages_table.php` | ۲ |
|
||||
| 11 | `database/migrations/..._create_shipment_status_histories_table.php` | ۲ |
|
||||
| 12 | `database/migrations/..._add_state_notes_to_shipments_table.php` | ۲ |
|
||||
| 13 | `database/migrations/..._add_calling_code_to_countries_table.php` | ۲ |
|
||||
| 14 | `database/migrations/..._create_wallets_table.php` | ۲ |
|
||||
| 15 | `database/migrations/..._create_wallet_transactions_table.php` | ۲ |
|
||||
|
||||
---
|
||||
|
||||
## ۲. Models (۸ فایل)
|
||||
## ۲. Models
|
||||
|
||||
| # | آدرس مقصد در پروژه Laravel |
|
||||
|---|---|
|
||||
| 1 | `app/Models/Country.php` |
|
||||
| 2 | `app/Models/Shipment.php` |
|
||||
| 3 | `app/Models/ShipmentCarrierMapping.php` |
|
||||
| 4 | `app/Models/ShipmentTrackingEvent.php` |
|
||||
| 5 | `app/Models/ShipmentItem.php` |
|
||||
| 6 | `app/Models/ShippingRate.php` |
|
||||
| 7 | `app/Models/SystemSetting.php` |
|
||||
| 8 | `app/Models/User.php` |
|
||||
| # | فایل | فاز |
|
||||
|---|------|-----|
|
||||
| 1 | `app/Models/Country.php` | ۰ |
|
||||
| 2 | `app/Models/Shipment.php` | ۰+۲ |
|
||||
| 3 | `app/Models/ShipmentCarrierMapping.php` | ۰ |
|
||||
| 4 | `app/Models/ShipmentTrackingEvent.php` | ۰+۲ |
|
||||
| 5 | `app/Models/ShipmentItem.php` | ۰ |
|
||||
| 6 | `app/Models/ShipmentPackage.php` | ۲ |
|
||||
| 7 | `app/Models/ShipmentStatusHistory.php` | ۲ |
|
||||
| 8 | `app/Models/ShippingRate.php` | ۰ |
|
||||
| 9 | `app/Models/SystemSetting.php` | ۰ |
|
||||
| 10 | `app/Models/User.php` | ۰+۲ |
|
||||
| 11 | `app/Models/Currency.php` | ۲ |
|
||||
| 12 | `app/Models/Wallet.php` | ۲ |
|
||||
| 13 | `app/Models/WalletTransaction.php` | ۲ |
|
||||
|
||||
---
|
||||
|
||||
## ۳. Seeders (۳ فایل)
|
||||
## ۳. Filament Resources
|
||||
|
||||
| # | آدرس مقصد در پروژه Laravel |
|
||||
|---|---|
|
||||
| 1 | `database/seeders/DatabaseSeeder.php` |
|
||||
| 2 | `database/seeders/CountriesTableSeeder.php` |
|
||||
| 3 | `database/seeders/SystemSettingSeeder.php` |
|
||||
| # | فایل | فاز |
|
||||
|---|------|-----|
|
||||
| 1 | `app/Filament/Resources/CountryResource.php` | ۰ |
|
||||
| 2 | `app/Filament/Resources/CountryResource/Pages/ListCountries.php` | ۰ |
|
||||
| 3 | `app/Filament/Resources/CountryResource/Pages/CreateCountry.php` | ۰ |
|
||||
| 4 | `app/Filament/Resources/CountryResource/Pages/EditCountry.php` | ۰ |
|
||||
| 5 | `app/Filament/Resources/ShipmentResource.php` | ۰+۳ |
|
||||
| 6 | `app/Filament/Resources/ShipmentResource/Pages/ListShipments.php` | ۰ |
|
||||
| 7 | `app/Filament/Resources/ShipmentResource/Pages/CreateShipment.php` | ۰ |
|
||||
| 8 | `app/Filament/Resources/ShipmentResource/Pages/ViewShipment.php` | ۰+۳ |
|
||||
| 9 | `app/Filament/Resources/ShipmentResource/Pages/EditShipment.php` | ۰ |
|
||||
| 10 | `app/Filament/Resources/ShipmentResource/RelationManagers/TrackingEventsRelationManager.php` | ۰+۲ |
|
||||
| 11 | `app/Filament/Resources/ShipmentResource/RelationManagers/CarrierMappingsRelationManager.php` | ۰ |
|
||||
| 12 | `app/Filament/Resources/ShipmentResource/RelationManagers/ItemsRelationManager.php` | ۰ |
|
||||
| 13 | `app/Filament/Resources/ShippingRateResource.php` | ۰ |
|
||||
| 14 | `app/Filament/Resources/ShippingRateResource/Pages/ListShippingRates.php` | ۰ |
|
||||
| 15 | `app/Filament/Resources/ShippingRateResource/Pages/CreateShippingRate.php` | ۰ |
|
||||
| 16 | `app/Filament/Resources/ShippingRateResource/Pages/EditShippingRate.php` | ۰ |
|
||||
| 17 | `app/Filament/Resources/CurrencyResource.php` | ۲ |
|
||||
| 18 | `app/Filament/Resources/CurrencyResource/Pages/ListCurrencies.php` | ۲ |
|
||||
| 19 | `app/Filament/Resources/CurrencyResource/Pages/CreateCurrency.php` | ۲ |
|
||||
| 20 | `app/Filament/Resources/CurrencyResource/Pages/EditCurrency.php` | ۲ |
|
||||
|
||||
---
|
||||
|
||||
## ۴. Fil> Filament Resources (۱۲ فایل)
|
||||
## ۴. Filament Pages
|
||||
|
||||
| # | آدرس مقصد در پروژه Laravel |
|
||||
|---|---|
|
||||
| 1 | `app/Filament/Resources/CountryResource.php` |
|
||||
| 2 | `app/Filament/Resources/CountryResource/Pages/ListCountries.php` |
|
||||
| 3 | `app/Filament/Resources/CountryResource/Pages/CreateCountry.php` |
|
||||
| 4 | `app/Filament/Resources/CountryResource/Pages/EditCountry.php` |
|
||||
| 5 | `app/Filament/Resources/ShipmentResource.php` |
|
||||
| 6 | `app/Filament/Resources/ShipmentResource/Pages/ListShipments.php` |
|
||||
| 7 | `app/Filament/Resources/ShipmentResource/Pages/CreateShipment.php` |
|
||||
| 8 | `app/Filament/Resources/ShipmentResource/Pages/ViewShipment.php` |
|
||||
| 9 | `app/Filament/Resources/ShipmentResource/Pages/EditShipment.php` |
|
||||
| 10 | `app/Filament/Resources/ShipmentResource/RelationManagers/CarrierMappingsRelationManager.php` |
|
||||
| 11 | `app/Filament/Resources/ShipmentResource/RelationManagers/TrackingEventsRelationManager.php` |
|
||||
| 12 | `app/Filament/Resources/ShipmentResource/RelationManagers/ItemsRelationManager.php` |
|
||||
| 13 | `app/Filament/Resources/ShippingRateResource.php` |
|
||||
| 14 | `app/Filament/Resources/ShippingRateResource/Pages/ListShippingRates.php` |
|
||||
| 15 | `app/Filament/Resources/ShippingRateResource/Pages/CreateShippingRate.php` |
|
||||
| 16 | `app/Filament/Resources/ShippingRateResource/Pages/EditShippingRate.php` |
|
||||
| # | فایل | فاز |
|
||||
|---|------|-----|
|
||||
| 1 | `app/Filament/Pages/SettingsPage.php` | ۰ |
|
||||
| 2 | `app/Filament/Pages/PriceTestPage.php` | ۰ |
|
||||
| 3 | `app/Filament/Pages/ImportRatesPage.php` | ۲ |
|
||||
| 4 | `resources/views/filament/pages/settings-page.blade.php` | ۰ |
|
||||
| 5 | `resources/views/filament/pages/price-test-page.blade.php` | ۰ |
|
||||
| 6 | `resources/views/filament/pages/import-rates.blade.php` | ۲ |
|
||||
|
||||
---
|
||||
|
||||
## ۵. Filament Pages + Widget (۳ فایل)
|
||||
## ۵. Controllers
|
||||
|
||||
| # | آدرس مقصد در پروژه Laravel |
|
||||
|---|---|
|
||||
| 1 | `app/Filament/Pages/SettingsPage.php` |
|
||||
| 2 | `app/Filament/Pages/PriceTestPage.php` |
|
||||
| 3 | `app/Filament/Widgets/ShipmentStatsWidget.php` |
|
||||
| # | فایل | فاز |
|
||||
|---|------|-----|
|
||||
| 1 | `app/Http/Controllers/Api/TrackController.php` | ۰ |
|
||||
| 2 | `app/Http/Controllers/Api/PricingController.php` | ۰ |
|
||||
| 3 | `app/Http/Controllers/Api/AuthController.php` | ۱ |
|
||||
| 4 | `app/Http/Controllers/Api/BridgeAuthController.php` | ۱ |
|
||||
| 5 | `app/Http/Controllers/Api/Customer/CustomerOrderController.php` | ۱+۲ |
|
||||
| 6 | `app/Http/Controllers/Api/WalletController.php` | ۲ |
|
||||
| 7 | `app/Http/Controllers/Api/PaymentController.php` | ۲ |
|
||||
| 8 | `app/Http/Controllers/Api/DiscountCodeController.php` | ۲ |
|
||||
| 9 | `app/Http/Controllers/Api/MockGatewayController.php` | ۲ |
|
||||
| 10 | `app/Http/Controllers/OrderController.php` | ۱ |
|
||||
| 11 | `app/Http/Controllers/PricingPageController.php` | ۱ |
|
||||
| 12 | `app/Http/Controllers/ShipmentPdfController.php` | ۱ |
|
||||
|
||||
---
|
||||
|
||||
## ۶. Filament Blade Views (۲ فایل)
|
||||
## ۶. Services
|
||||
|
||||
| # | آدرس مقصد در پروژه Laravel |
|
||||
|---|---|
|
||||
| 1 | `resources/views/filament/pages/settings-page.blade.php` |
|
||||
| 2 | `resources/views/filament/pages/price-test-page.blade.php` |
|
||||
| # | فایل | فاز |
|
||||
|---|------|-----|
|
||||
| 1 | `app/Services/PriceCalculatorService.php` | ۰ |
|
||||
| 2 | `app/Services/TrackingService.php` | ۰ |
|
||||
| 3 | `app/Services/PdfService.php` | ۱ |
|
||||
| 4 | `app/Services/OrderPaymentService.php` | ۲ |
|
||||
|
||||
---
|
||||
|
||||
## ۷. Services (۲ فایل)
|
||||
## ۷. Notifications
|
||||
|
||||
| # | آدرس مقصد در پروژه Laravel |
|
||||
|---|---|
|
||||
| 1 | `app/Services/PriceCalculatorService.php` |
|
||||
| 2 | `app/Services/TrackingService.php` |
|
||||
| # | فایل | فاز |
|
||||
|---|------|-----|
|
||||
| 1 | `app/Notifications/ShipmentUpdatedNotification.php` | ۳ |
|
||||
|
||||
---
|
||||
|
||||
## ۸. Controllers (۲ فایل)
|
||||
## ۸. Imports / Exports
|
||||
|
||||
| # | آدرس مقصد در پروژه Laravel |
|
||||
|---|---|
|
||||
| 1 | `app/Http/Controllers/Api/PricingController.php` |
|
||||
| 2 | `app/Http/Controllers/Api/TrackController.php` |
|
||||
| # | فایل | فاز |
|
||||
|---|------|-----|
|
||||
| 1 | `app/Imports/OldShipmentsImport.php` | ۰ |
|
||||
| 2 | `app/Imports/ShippingRatesImport.php` | ۰ |
|
||||
| 3 | `app/Exports/ShippingRatesTemplateExport.php` | ۳ |
|
||||
|
||||
---
|
||||
|
||||
## ۹. Middleware (۱ فایل)
|
||||
## ۹. Middleware
|
||||
|
||||
| # | آدرس مقصد در پروژه Laravel |
|
||||
|---|---|
|
||||
| 1 | `app/Http/Middleware/ApiKeyAuth.php` |
|
||||
| # | فایل | فاز |
|
||||
|---|------|-----|
|
||||
| 1 | `app/Http/Middleware/ApiKeyMiddleware.php` | ۰ |
|
||||
|
||||
---
|
||||
|
||||
## ۱۰. Form Requests (۲ فایل)
|
||||
## ۱۰. Enums
|
||||
|
||||
| # | آدرس مقصد در پروژه Laravel |
|
||||
|---|---|
|
||||
| 1 | `app/Http/Requests/Api/CalculatePriceRequest.php` |
|
||||
| 2 | `app/Http/Requests/Api/TrackShipmentRequest.php` |
|
||||
| # | فایل | فاز |
|
||||
|---|------|-----|
|
||||
| 1 | `app/Enums/ShipmentStatus.php` | ۰ |
|
||||
| 2 | `app/Enums/ShipmentDirection.php` | ۰ |
|
||||
| 3 | `app/Enums/ShipmentType.php` | ۰ |
|
||||
|
||||
---
|
||||
|
||||
## ۱۱. Imports (۳ فایل)
|
||||
## ۱۱. PDF Views
|
||||
|
||||
| # | آدرس مقصد در پروژه Laravel |
|
||||
|---|---|
|
||||
| 1 | `app/Imports/OldShipmentsImport.php` |
|
||||
| 2 | `app/Imports/ShippingRatesImport.php` |
|
||||
| 3 | `app/Imports/ShippingRatesMultiSheetImport.php` |
|
||||
| # | فایل | فاز |
|
||||
|---|------|-----|
|
||||
| 1 | `resources/views/pdfs/awb.blade.php` | ۱ |
|
||||
| 2 | `resources/views/pdfs/label.blade.php` | ۱ |
|
||||
| 3 | `resources/views/pdfs/invoice.blade.php` | ۱ |
|
||||
|
||||
---
|
||||
|
||||
## ۱۲. Provider (۱ فایل)
|
||||
## ۱۲. Routes
|
||||
|
||||
| # | آدرس مقصد در پروژه Laravel |
|
||||
|---|---|
|
||||
| 1 | `app/Providers/AdminPanelProvider.php` |
|
||||
|
||||
> ⚠️ **مهم:** این فایل را در `bootstrap/providers.php` هم ثبت کنید:
|
||||
> ```php
|
||||
> return [
|
||||
> App\Providers\AdminPanelProvider::class,
|
||||
> ];
|
||||
> ```
|
||||
| # | فایل | فاز |
|
||||
|---|------|-----|
|
||||
| 1 | `routes/api.php` | ۰+۱+۲ |
|
||||
| 2 | `routes/web.php` | ۱ |
|
||||
|
||||
---
|
||||
|
||||
## ۱۳. Config (۲ فایل)
|
||||
## ۱۳. Config
|
||||
|
||||
| # | آدرس مقصد در پروژه Laravel |
|
||||
|---|---|
|
||||
| 1 | `config/ifnex.php` |
|
||||
| 2 | `config/cors.php` |
|
||||
| # | فایل | فاز |
|
||||
|---|------|-----|
|
||||
| 1 | `config/ifnex.php` | ۰ |
|
||||
| 2 | `config/cors.php` | ۰ |
|
||||
|
||||
---
|
||||
|
||||
## ۱۴. Routes (۱ فایل)
|
||||
## ۱۴. وردپرس — پلاگین IFNEX Bridge
|
||||
|
||||
| # | آدرس مقصد در پروژه Laravel |
|
||||
|---|---|
|
||||
| 1 | `routes/api.php` |
|
||||
| # | فایل | فاز |
|
||||
|---|------|-----|
|
||||
| 1 | `ifnex-bridge/ifnex-bridge.php` | ۱ |
|
||||
| 2 | `ifnex-bridge/includes/api-client.php` | ۰ |
|
||||
| 3 | `ifnex-bridge/includes/user-bridge.php` | ۱+۲+۳ |
|
||||
| 4 | `ifnex-bridge/includes/shortcodes.php` | ۱+۲+۳ |
|
||||
| 5 | `ifnex-bridge/includes/tracking-form.php` | ۰ |
|
||||
| 6 | `ifnex-bridge/assets/css/ifnex-orders.css` | ۱+۲+۳ |
|
||||
| 7 | `ifnex-bridge/assets/css/ifnex-bridge.css` | ۰ |
|
||||
| 8 | `ifnex-bridge/assets/js/ifnex-order-form.js` | ۱+۳ |
|
||||
|
||||
---
|
||||
|
||||
## ۱۵. Bootstrap (۱ فایل)
|
||||
## ۱۵. وردپرس — قالب IFNEX
|
||||
|
||||
| # | آدرس مقصد در پروژه Laravel |
|
||||
|---|---|
|
||||
| 1 | `bootstrap/app.php` |
|
||||
| # | فایل | فاز |
|
||||
|---|------|-----|
|
||||
| 1 | `ifnex/style.css` | ۱ |
|
||||
| 2 | `ifnex/functions.php` | ۱ |
|
||||
| 3 | `ifnex/header.php` | ۱ |
|
||||
| 4 | `ifnex/footer.php` | ۱ |
|
||||
| 5 | `ifnex/front-page.php` | ۱ |
|
||||
| 6 | `ifnex/page.php` | ۱ |
|
||||
| 7 | `ifnex/template-login.php` | ۱ |
|
||||
| 8 | `ifnex/template-parts/hero.php` | ۱ |
|
||||
| 9 | `ifnex/template-parts/services.php` | ۱ |
|
||||
| 10 | `ifnex/template-parts/how-it-works.php` | ۱ |
|
||||
| 11 | `ifnex/template-parts/stats.php` | ۱ |
|
||||
| 12 | `ifnex/template-parts/testimonials.php` | ۱ |
|
||||
| 13 | `ifnex/template-parts/cta.php` | ۱ |
|
||||
| 14 | `ifnex/inc/customizer.php` | ۱ |
|
||||
| 15 | `ifnex/inc/enqueue.php` | ۱ |
|
||||
| 16 | `ifnex/assets/css/main.css` | ۱ |
|
||||
| 17 | `ifnex/assets/js/main.js` | ۱ |
|
||||
|
||||
---
|
||||
|
||||
## ۱۶. Environment (۱ فایل)
|
||||
## ۱۶. Seeders
|
||||
|
||||
| # | آدرس مقصد در پروژه Laravel |
|
||||
|---|---|
|
||||
| 1 | `.env.example` |
|
||||
| # | فایل | فاز |
|
||||
|---|------|-----|
|
||||
| 1 | `database/seeders/DatabaseSeeder.php` | ۰ |
|
||||
| 2 | `database/seeders/CountriesTableSeeder.php` | ۰ |
|
||||
| 3 | `database/seeders/SystemSettingSeeder.php` | ۰ |
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ فایلهایی که باید حذف شوند (قدیمی)
|
||||
|
||||
| # | آدرس | دلیل |
|
||||
|---|---|---|
|
||||
| 1 | `01_Documents/PRD_v2.md` | قدیمی — فقط ۲ زون و ۲ نوع سرویس |
|
||||
| 2 | `01_Documents/Project_Roadmap.md` | قدیمی — نقشه راه ۳ فازی (الان ۴ فازی) |
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ فایلهایی که باید دستی اصلاح شوند
|
||||
|
||||
| # | فایل | تغییر |
|
||||
|---|---|---|
|
||||
| 1 | `composer.json` | `"laravel/framework": "^12.0"` → `"^11.0"` |
|
||||
| 2 | `composer.json` | اضافه کردن `"morilog/jalali": "^5.*"` |
|
||||
| 3 | `bootstrap/providers.php` | اضافه کردن `App\Providers\AdminPanelProvider::class` |
|
||||
| 4 | فونت Vazirmatn | نصب: `npm install @fontsource/vazirmatn` یا CDN |
|
||||
|
||||
---
|
||||
|
||||
> مجموع: **۵۶ فایل** قابل دانلود + **۴ تغییر دستی**
|
||||
> مجموع تقریبی: **۱۰۰+ فایل** بین لاراول و وردپرس
|
||||
|
||||
@ -1,450 +1,291 @@
|
||||
# ✅ چکلیست فاز ۰ — IFNEX Phase 0 Checklist
|
||||
# چکلیست فاز ۰ — IFNEX Phase 0 Checklist
|
||||
|
||||
> **مرجع:** Phase0_Proposal.docx + EXCEL_ANALYSIS.md + STATUS.md
|
||||
> **تاریخ:** August 2026
|
||||
> **وضعیت:** در دست اقدام
|
||||
> **وضعیت:** فاز ۰ تکمیل شده + فاز ۱/۲ بخشی انجام شده
|
||||
> **توسعهدهنده:** VernaSoft Group — Kazem Alghasi
|
||||
> **آخرین بروزرسانی:** 2026-08-29
|
||||
|
||||
---
|
||||
|
||||
## 🔴 بخش ۱: اصلاح اسکیمای دیتابیس (حیاتی — قبل از هر چیز)
|
||||
## وضعیت کلی
|
||||
|
||||
| فاز | وضعیت | درصد |
|
||||
|------|-------|------|
|
||||
| فاز ۰ (پایه) | تکمیل شده | 100% |
|
||||
| فاز ۱ (پنل مشتری) | انجام شده | 100% |
|
||||
| فاز ۲ (پرداخت و کیف پول) | انجام شده | 100% |
|
||||
| فاز ۳ (یکپارچهسازی) | در دست اقدام | 60% |
|
||||
|
||||
---
|
||||
|
||||
## بخش ۱: اصلاح اسکیمای دیتابیس
|
||||
|
||||
### 1.1 بازنویسی Migration `countries`
|
||||
- [ ] حذف `export_zone` و `import_zone` (۲ زون قدیمی)
|
||||
- [ ] اضافه کردن `export_zone_parcel` (TINYINT 1-10)
|
||||
- [ ] اضافه کردن `export_zone_doc` (TINYINT 1-10)
|
||||
- [ ] اضافه کردن `import_zone_parcel` (TINYINT 1-10)
|
||||
- [ ] اضافه کردن `import_zone_doc` (TINYINT 1-10)
|
||||
- [ ] اضافه کردن `iso_code` (CHAR(2) UNIQUE)
|
||||
- [ ] اضافه کردن `is_active` (BOOLEAN default true)
|
||||
- [ ] اصلاح `name` — بدون کد ISO در پرانتز (مثلاً `Afghanistan` نه `Afghanistan (AF)`)
|
||||
- [x] حذف `export_zone` و `import_zone` (۲ زون قدیمی)
|
||||
- [x] اضافه کردن `export_zone_parcel` (TINYINT 1-10)
|
||||
- [x] اضافه کردن `export_zone_doc` (TINYINT 1-10)
|
||||
- [x] اضافه کردن `import_zone_parcel` (TINYINT 1-10)
|
||||
- [x] اضافه کردن `import_zone_doc` (TINYINT 1-10)
|
||||
- [x] اضافه کردن `iso_code` (CHAR(2) UNIQUE)
|
||||
- [x] اضافه کردن `is_active` (BOOLEAN default true)
|
||||
- [x] اضافه کردن `calling_code` (VARCHAR 10 NULL) — فاز ۲
|
||||
- [x] اصلاح `name` — بدون کد ISO در پرانتز
|
||||
|
||||
### 1.2 بازنویسی Migration `shipments`
|
||||
- [ ] حذف `forwarder_track_id` (جایگزین با جدول مجزا)
|
||||
- [ ] تغییر `type` از STRING به ENUM: `DOC_NORMAL`, `DOC_ECONOMY`, `PARCEL`
|
||||
- [ ] تغییر `direction` از STRING به ENUM: `import`, `export` (نه Outbound/Inbound)
|
||||
- [ ] تغییر `status` از STRING به ENUM (وضعیتهای استاندارد)
|
||||
- [ ] اضافه کردن `from_country_id` (FK → countries.id)
|
||||
- [ ] اضافه کردن `to_country_id` (FK → countries.id)
|
||||
- [ ] اضافه کردن فیلدهای مالی غایب:
|
||||
- [ ] `domestic_pickup` (DECIMAL 12,2 default 0)
|
||||
- [ ] `domestic_delivery` (DECIMAL 12,2 default 0)
|
||||
- [ ] `warehousing_cost` (DECIMAL 12,2 default 0)
|
||||
- [ ] `vat_amount` (DECIMAL 12,2 default 0)
|
||||
- [ ] تبدیل فیلدهای غیرضروری فاز ۰ به `nullable`:
|
||||
- [ ] `weight`, `volumetric_weight`, `chargeable_weight`, `dimensions`
|
||||
- [ ] `reason_for_export`, `forwarder`
|
||||
- [ ] تمام فیلدهای مالی (shipping_price, extra_service, packing_cost, discount, total_fee, net_dirham, net_rial)
|
||||
- [ ] sender_company, sender_id_number, receiver_company, receiver_id_number
|
||||
- [ ] حذف `user_id` از فاز ۰ (مشتریان در فاز ۲ اضافه میشوند) یا nullable کردن
|
||||
- [x] حذف `forwarder_track_id` (جایگزین با جدول مجزا)
|
||||
- [x] تغییر `type` از STRING به ENUM: `DOC_NORMAL`, `DOC_ECONOMY`, `PARCEL`
|
||||
- [x] تغییر `direction` از STRING به ENUM: `import`, `export`
|
||||
- [x] تغییر `status` از STRING به ENUM (وضعیتهای استاندارد)
|
||||
- [x] اضافه کردن `from_country_id` (FK → countries.id)
|
||||
- [x] اضافه کردن `to_country_id` (FK → countries.id)
|
||||
- [x] اضافه کردن فیلدهای مالی: `domestic_pickup`, `domestic_delivery`, `warehousing_cost`, `vat_amount`
|
||||
- [x] تبدیل فیلدهای غیرضروری به `nullable`
|
||||
- [x] اضافه کردن `state_notes` (فیلد وضعیت و یادداشت مشتری) — فاز ۲
|
||||
- [x] اضافه کردن `cod_amount` (مبلغ COD) — فاز ۲
|
||||
- [x] رابطه `packages()` و `statusHistories()` — فاز ۲
|
||||
|
||||
### 1.3 ایجاد Migration `shipment_carrier_mappings` (جدول جدید)
|
||||
- [ ] `id` (BIGINT PK)
|
||||
- [ ] `shipment_id` (FK → shipments.id, cascadeOnDelete)
|
||||
- [ ] `carrier_code` (ENUM: DHL, FEDEX, UPS, ARAMEX, NAGHEL, EMX, APSITEX, IMPEX, OTHER)
|
||||
- [ ] `carrier_tracking_number` (VARCHAR 50)
|
||||
- [ ] `booking_number` (VARCHAR 50 NULL)
|
||||
- [ ] `direction` (ENUM: import, export)
|
||||
- [ ] `delivery_status` (ENUM NULL)
|
||||
- [ ] `last_synced_at` (TIMESTAMP NULL — برای فاز ۳)
|
||||
- [ ] `manually_updated_at` (TIMESTAMP NULL)
|
||||
- [ ] `notes` (TEXT NULL — مثلاً 100AED disposal charge)
|
||||
- [ ] `created_at`, `updated_at`
|
||||
### 1.3 ایجاد Migration `shipment_carrier_mappings`
|
||||
- [x] تمام فیلدها طبق طرح اولیه
|
||||
- [x] RelationManager در Filament با CRUD کامل
|
||||
|
||||
### 1.4 ایجاد Migration `shipment_tracking_events` (جدول جدید)
|
||||
- [ ] `id` (BIGINT PK)
|
||||
- [ ] `shipment_id` (FK → shipments.id, cascadeOnDelete)
|
||||
- [ ] `event_date` (DATE)
|
||||
- [ ] `event_time` (TIME)
|
||||
- [ ] `location` (VARCHAR 200 NULL — مثلاً DUBAI, MUSCAT)
|
||||
- [ ] `event_description` (VARCHAR 500 — مثلاً Picked up by Naqel)
|
||||
- [ ] `delivery_status` (ENUM NULL — اگر رویداد مرتبط با تحویل باشد)
|
||||
- [ ] `source` (ENUM: manual, api_carrier, api_aggregator — فاز ۰: فقط manual)
|
||||
- [ ] `carrier_mapping_id` (FK NULL — برای فاز ۳)
|
||||
- [ ] `raw_payload` (JSON NULL — برای فاز ۳)
|
||||
- [ ] `created_at`
|
||||
### 1.4 ایجاد Migration `shipment_tracking_events`
|
||||
- [x] تمام فیلدها طبق طرح اولیه
|
||||
- [x] اضافه کردن فیلد `source` (manual/api/system) — فاز ۲
|
||||
- [x] RelationManager در Filament با CRUD کامل
|
||||
|
||||
### 1.5 بازنویسی Migration `system_settings`
|
||||
- [ ] تغییر از ساختار ستونی به ساختار key-value:
|
||||
- [ ] `key` (VARCHAR 100 UNIQUE)
|
||||
- [ ] `value` (DECIMAL 15,4)
|
||||
- [ ] `description` (VARCHAR 255)
|
||||
- [ ] `updated_by` (FK → users.id)
|
||||
- [ ] `updated_at`
|
||||
- [x] تغییر به ساختار key-value
|
||||
|
||||
### 1.6 بازنویسی Migration `users`
|
||||
- [ ] اضافه کردن `phone` (VARCHAR 20 NULL)
|
||||
- [ ] اضافه کردن `role` (ENUM: super_admin, tracking_operator, data_entry, customer)
|
||||
- [ ] اضافه کردن `is_active` (BOOLEAN default true)
|
||||
- [x] اضافه کردن `phone`, `role`, `is_active`
|
||||
|
||||
### 1.7 اصلاح Migration `shipping_rates`
|
||||
- [ ] تغییر `type` از STRING به ENUM: `DOC_NORMAL`, `DOC_ECONOMY`, `PARCEL`
|
||||
- [ ] تغییر `direction` از STRING به ENUM: `import`, `export`
|
||||
- [x] تغییر `type` و `direction` به ENUM
|
||||
|
||||
### 1.8 جداول جدید فاز ۱/۲
|
||||
- [x] `currencies` — جدول ارزها (code, name, symbol, rate_to_rial, rate_to_aed, is_active)
|
||||
- [x] `shipment_packages` — بستههای چندگانه هر مرسوله (package_no, weight, dimensions)
|
||||
- [x] `shipment_status_histories` — تاریخچه تغییرات وضعیت (from_status, to_status, reason, changed_by)
|
||||
- [x] `wallets` — کیف پول کاربران
|
||||
- [x] `wallet_transactions` — تراکنشهای کیف پول
|
||||
- [x] `notifications` — نوتیفیکیشنهای دیتابیس (Laravel default)
|
||||
|
||||
---
|
||||
|
||||
## 🟡 بخش ۲: اصلاح و ایجاد Model ها
|
||||
## بخش ۲: Model ها
|
||||
|
||||
### 2.1 بازنویسی `Country.php`
|
||||
- [ ] اضافه کردن fillable: `iso_code`, `export_zone_parcel`, `export_zone_doc`, `import_zone_parcel`, `import_zone_doc`, `is_active`
|
||||
- [ ] حذف `export_zone`, `import_zone` از fillable
|
||||
- [ ] اضافه کردن `casts` برای `is_active` → boolean
|
||||
|
||||
### 2.2 بازنویسی `Shipment.php`
|
||||
- [ ] اضافه کردن `direction` cast → enum
|
||||
- [ ] اضافه کردن `type` cast → enum
|
||||
- [ ] اضافه کردن `status` cast → enum
|
||||
- [ ] اضافه کردن fillable: `from_country_id`, `to_country_id`, `domestic_pickup`, `domestic_delivery`, `warehousing_cost`, `vat_amount`
|
||||
- [ ] حذف `forwarder_track_id` از fillable
|
||||
- [ ] اضافه کردن رابطه `carrierMappings()` (HasMany)
|
||||
- [ ] اضافه کردن رابطه `trackingEvents()` (HasMany)
|
||||
- [ ] اضافه کردن رابطه `fromCountry()` (BelongsTo)
|
||||
- [ ] اضافه کردن رابطه `toCountry()` (BelongsTo)
|
||||
|
||||
### 2.3 ایجاد `ShipmentCarrierMapping.php`
|
||||
- [ ] fillable: تمام فیلدهای جدول
|
||||
- [ ] casts: `direction` → enum, `last_synced_at` → datetime
|
||||
- [ ] رابطه `shipment()` (BelongsTo)
|
||||
|
||||
### 2.4 ایجاد `ShipmentTrackingEvent.php`
|
||||
- [ ] fillable: تمام فیلدهای جدول
|
||||
- [ ] casts: `event_date` → date, `event_time` → datetime, `source` → enum
|
||||
- [ ] رابطه `shipment()` (BelongsTo)
|
||||
|
||||
### 2.5 بازنویسی `SystemSetting.php`
|
||||
- [ ] تغییر به ساختار key-value
|
||||
- [ ] اضافه کردن متد `get($key)` — استخراج مقدار با کلید
|
||||
- [ ] اضافه کردن متد `set($key, $value)` — تنظیم مقدار
|
||||
- [ ] اضافه کردن رابطه `updatedBy()` (BelongsTo)
|
||||
|
||||
### 2.6 بازنویسی `User.php`
|
||||
- [ ] اضافه کردن fillable: `phone`, `role`, `is_active`
|
||||
- [ ] اضافه کردن casts: `is_active` → boolean
|
||||
- [ ] اضافه کردن متد `isSuperAdmin()`, `isTrackingOperator()`, `isDataEntry()`
|
||||
|
||||
### 2.7 بازنویسی `ShippingRate.php`
|
||||
- [ ] تغییر `type` به enum: `DOC_NORMAL`, `DOC_ECONOMY`, `PARCEL`
|
||||
- [ ] تغییر `direction` به enum: `import`, `export`
|
||||
- [x] `Country.php` — با ۴ زون + iso_code + calling_code + is_active
|
||||
- [x] `Shipment.php` — با enum casts + روابط کامل + packages + statusHistories
|
||||
- [x] `ShipmentCarrierMapping.php` — با relation + enum casts
|
||||
- [x] `ShipmentTrackingEvent.php` — با relation + enum casts + source
|
||||
- [x] `ShipmentItem.php` — با relation
|
||||
- [x] `ShipmentPackage.php` — با belongsTo(Shipment) — فاز ۲
|
||||
- [x] `ShipmentStatusHistory.php` — با booted auto-fill changed_by — فاز ۲
|
||||
- [x] `ShippingRate.php` — با enum casts
|
||||
- [x] `SystemSetting.php` — با get/set متدها
|
||||
- [x] `User.php` — با role + is_active + wallet relation
|
||||
- [x] `Currency.php` — با fillable + casts — فاز ۲
|
||||
- [x] `Wallet.php` — فاز ۲
|
||||
- [x] `WalletTransaction.php` — فاز ۲
|
||||
|
||||
---
|
||||
|
||||
## 🟡 بخش ۳: Seeders
|
||||
## بخش ۳: Seeders
|
||||
|
||||
### 3.1 بازنویسی `CountriesTableSeeder.php`
|
||||
- [ ] استخراج نام کشور و iso_code از فرمت `Afghanistan (AF)`
|
||||
- [ ] تنظیم ۴ زون مجزا (از شیت Zone اکسل):
|
||||
- [ ] `export_zone_parcel` — از ستون PARCEL شیت Zone
|
||||
- [ ] `export_zone_doc` — از ستون DOCUMENT شیت Zone
|
||||
- [ ] `import_zone_parcel` — از شیت COUNTRIES ستون IMPORT ZONES
|
||||
- [ ] `import_zone_doc` — از شیت COUNTRIES (نیاز به تأیید مشتری)
|
||||
- [ ] ایران (IR) را بدون زون تنظیم (مبدا/مقصد داخلی)
|
||||
- [ ] تنظیم `is_active = true` برای همه
|
||||
|
||||
### 3.2 بازنویسی `SystemSettingSeeder.php`
|
||||
- [ ] ساختار key-value:
|
||||
- [ ] `('vat_rate', 0.09, 'VAT rate — 9%')`
|
||||
- [ ] `('packing_cost_default', 100000, 'Default packing cost in IRR')`
|
||||
- [ ] `('profit_margin', 1.25, 'Profit margin — set per company')`
|
||||
- [ ] `('aed_to_irr', 455000, 'AED to IRR exchange rate')`
|
||||
- [ ] `('usd_to_irr', 0, 'USD to IRR exchange rate')`
|
||||
- [ ] `('cny_to_irr', 0, 'CNY to IRR exchange rate')`
|
||||
- [ ] `('eur_to_irr', 0, 'EUR to IRR exchange rate')`
|
||||
|
||||
### 3.3 بازنویسی `DatabaseSeeder.php`
|
||||
- [ ] اضافه کردن CountriesTableSeeder
|
||||
- [ ] اضافه کردن SystemSettingSeeder
|
||||
- [ ] ایجاد User اولیه با نقش `super_admin`
|
||||
- [ ] حذف User::factory
|
||||
- [x] `CountriesTableSeeder.php` — با ۴ زون مجزا
|
||||
- [x] `SystemSettingSeeder.php` — با ساختار key-value
|
||||
- [x] `DatabaseSeeder.php` — با User اولیه super_admin
|
||||
|
||||
---
|
||||
|
||||
## 🟢 بخش ۴: API و Controller ها
|
||||
## بخش ۴: API و Controller ها
|
||||
|
||||
### 4.1 ایجاد `TrackController.php` (حیاتی — فاز ۰)
|
||||
- [ ] `GET /api/track/{awb_no}` — تایملاین ترکینگ
|
||||
- [ ] جستجوی shipment با awb_no
|
||||
- [ ] برگرداندن رویدادهای ترکینگ مرتبشده (تاریخ + زمان)
|
||||
- [ ] برگرداندن اطلاعات پایه مرسوله (direction, type, status, sender, receiver)
|
||||
- [ ] برگرداندن نگاشتهای شرکت حمل (carrier_mappings)
|
||||
- [ ] Response در قالب JSON مرتب
|
||||
- [ ] اگر AWB پیدا نشد → 404 با پیام مناسب
|
||||
### ۴.۱ API ترکینگ
|
||||
- [x] `GET /api/v1/track/{awb_no}` — تایملاین کامل
|
||||
- [x] `TrackController.php` — با timeline + carrier mappings
|
||||
|
||||
### 4.2 اصلاح `PricingController.php`
|
||||
- [ ] تغییر `type` validation به ۳ مقدار: `DOC_NORMAL`, `DOC_ECONOMY`, `PARCEL`
|
||||
- [ ] اضافه کردن API Key authentication middleware
|
||||
- [ ] اضافه کردن Rate Limiting (60 req/min)
|
||||
- [ ] تغییر مسیر به `POST /api/calculate-price` (در فاز ۱)
|
||||
### ۴.۲ API قیمتگذاری
|
||||
- [x] `POST /api/v1/calculate` — با ۳ نوع سرویس + VAT + هزینههای جانبی
|
||||
- [x] `PricingController.php` — با API Key + Rate Limiting
|
||||
|
||||
### 4.3 تنظیمات امنیتی API
|
||||
- [ ] ایجاد Middleware برای API Key (header: `Authorization: Bearer {key}`)
|
||||
- [ ] تنظیم Rate Limiting در `RouteServiceProvider`
|
||||
- [ ] تنظیم CORS در `config/cors.php` — فقط دامنهی وردپرس تولیدی
|
||||
- [ ] اعتبارسنجی ورودیها با Form Request
|
||||
### ۴.۳ API احراز هویت
|
||||
- [x] `POST /api/v1/auth/login` — ورود با email + password
|
||||
- [x] `POST /api/v1/auth/logout` — خروج ( Sanctum)
|
||||
- [x] `POST /api/v1/bridge/login` — Bridge Auth (WordPress → Laravel)
|
||||
|
||||
### 4.4 اصلاح `routes/api.php`
|
||||
- [ ] اضافه کردن `GET /api/track/{awb_no}` (فاز ۰)
|
||||
- [ ] گروهبندی مسیرها با middleware (api_key + throttle)
|
||||
- [ ] حفظ `GET /api/calculate-price` (فاز ۱)
|
||||
### ۴.۴ API پنل مشتری (فاز ۱/۲)
|
||||
- [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] `POST /api/v1/customer/orders/{shipment}/pay-wallet` — پرداخت از کیف پول
|
||||
- [x] `POST /api/v1/customer/orders/{shipment}/pay-gateway` — پرداخت از درگاه
|
||||
- [x] `GET /api/v1/customer/notifications` — نوتیفیکیشنها — فاز ۲
|
||||
- [x] `POST /api/v1/customer/notifications/{id}/read` — خواندن نوتیفیکیشن — فاز ۲
|
||||
|
||||
### ۴.۵ API کیف پول (فاز ۲)
|
||||
- [x] `GET /api/v1/wallet/balance` — موجودی
|
||||
- [x] `GET /api/v1/wallet/transactions` — تراکنشها
|
||||
|
||||
### ۴.۶ API پرداخت (فاز ۲)
|
||||
- [x] `POST /api/v1/payment/redirect` — انتقال به درگاه
|
||||
- [x] `GET /api/v1/payment/check/{transaction}` — بررسی وضعیت
|
||||
- [x] Mock Gateway (شبیهسازی درگاه پرداخت)
|
||||
|
||||
---
|
||||
|
||||
## 🟢 بخش ۵: Filament Admin Panel
|
||||
## بخش ۵: Filament Admin Panel
|
||||
|
||||
### 5.1 بازنویسی `CountryResource.php`
|
||||
- [ ] اضافه کردن فیلدهای ۴ زون در فرم
|
||||
- [ ] اضافه کردن فیلد `iso_code`
|
||||
- [ ] اضافه کردن فیلد `is_active` (toggle)
|
||||
- [ ] نمایش ۴ زون در جدول
|
||||
### ۵.۱ منابع (Resources)
|
||||
- [x] `CountryResource` — با ۴ زون + iso_code + calling_code + is_active
|
||||
- [x] `ShipmentResource` — با ستونهای جدید + CSV export +Packages Repeater + changeStatus bulkAction
|
||||
- [x] `ShippingRateResource` — با ۳ نوع سرویس
|
||||
- [x] `CurrencyResource` — CRUD ارزها — فاز ۲
|
||||
|
||||
### 5.2 بازنویسی `ShipmentResource.php`
|
||||
- [ ] حذف `forwarder_track_id` از فرم
|
||||
- [ ] تغییر `type` به Select با ۳ گزینه: DOC_NORMAL, DOC_ECONOMY, PARCEL
|
||||
- [ ] تغییر `direction` به Select با ۲ گزینه: import, export
|
||||
- [ ] اضافه کردن `from_country_id` و `to_country_id` (Select از کشورها)
|
||||
- [ ] اضافه کردن فیلدهای مالی غایب (domestic_pickup, domestic_delivery, warehousing_cost, vat_amount)
|
||||
- [ ] تبدیل فیلدهای غیرضروری فاز ۰ به `nullable`
|
||||
- [ ] حذف `user_id` از فرم (یا nullable)
|
||||
### ۵.۲ RelationManagers
|
||||
- [x] `TrackingEventsRelationManager` — با فیلد `source` — فاز ۲
|
||||
- [x] `CarrierMappingsRelationManager` — با CRUD کامل
|
||||
- [x] `ItemsRelationManager` — اقلام مرسوله
|
||||
|
||||
### 5.3 ایجاد `ShipmentCarrierMappingResource.php` (یا RelationManager)
|
||||
- [ ] فرم افزودن نگاشت شرکت حمل:
|
||||
- [ ] Select `carrier_code` (۸ گزینه + OTHER)
|
||||
- [ ] `carrier_tracking_number`
|
||||
- [ ] `booking_number` (nullable)
|
||||
- [ ] `direction` (import/export)
|
||||
- [ ] `notes` (nullable)
|
||||
- [ ] نمایش در صفحهی مرسوله بهصورت RelationManager
|
||||
### ۵.۳ صفحات سفارشی
|
||||
- [x] `SettingsPage` — تنظیمات key-value
|
||||
- [x] `PriceTestPage` — تست قیمتگذاری
|
||||
- [x] `ImportRatesPage` — آپلود اکسل نرخها + دانلود template — فاز ۲
|
||||
|
||||
### 5.4 ایجاد `ShipmentTrackingEventResource.php` (یا RelationManager) ⭐ حیاتی
|
||||
- [ ] UX اختصاصی اپراتور ترکینگ:
|
||||
- [ ] جستجوی سریع با کد AWB
|
||||
- [ ] فرم افزودن رویداد:
|
||||
- [ ] `event_date` (پیشفرض: امروز)
|
||||
- [ ] `event_time` (پیشفرض: اکنون)
|
||||
- [ ] `delivery_status` (Select از لیست ۸-۱۰ حالت آماده)
|
||||
- [ ] `location` (متن ساده)
|
||||
- [ ] `event_description` (متن ساده)
|
||||
- [ ] `source` (hidden — پیشفرض: manual)
|
||||
- [ ] دکمه «ذخیره و افزودن بعدی» — برای ثبت سریع چند رویداد
|
||||
- [ ] نمایش تایملاین رویدادها در صفحهی مرسوله
|
||||
### ۵.۴ PDF
|
||||
- [x] `PdfService` — با loadMissing (packages, fromCountry, toCountry, items)
|
||||
- [x] `awb.blade.php` — با asset() برای تصاویر + جدول بستهها
|
||||
- [x] `label.blade.php` — با asset() برای تصاویر
|
||||
- [x] `invoice.blade.php` — فاکتور
|
||||
|
||||
### 5.5 بازنویسی `SettingsPage.php`
|
||||
- [ ] تغییر به ساختار key-value
|
||||
- [ ] فرم داینامیک: هر تنظیم یک فیلد با label از description
|
||||
- [ ] اضافه کردن `vat_rate` (0.09)
|
||||
- [ ] اضافه کردن `packing_cost_default` (100,000 ریال)
|
||||
- [ ] ذخیره `updated_by` (کاربر فعلی)
|
||||
|
||||
### 5.6 بازنویسی `PriceTestPage.php`
|
||||
- [ ] تغییر `type` به ۳ گزینه: DOC_NORMAL, DOC_ECONOMY, PARCEL
|
||||
- [ ] نمایش زون استخراجشده (کدام زون استفاده شد)
|
||||
- [ ] اضافه کردن محاسبه VAT و هزینههای جانبی
|
||||
|
||||
### 5.7 اصلاح `ShippingRateResource.php`
|
||||
- [ ] تغییر `type` به ۳ گزینه: DOC_NORMAL, DOC_ECONOMY, PARCEL
|
||||
- [ ] تغییر `direction` به: import, export
|
||||
|
||||
### 5.8 تنظیمات Filament
|
||||
- [ ] تنظیم زبان فارسی پنل (fa)
|
||||
- [ ] تنظیم navigation groups (مدیریت، ترکینگ، مالی، تنظیمات)
|
||||
- [ ] تنظیم نقشها و دسترسیها (Filament Shield یا دستی)
|
||||
### ۵.۵ نوتیفیکیشن ادمین
|
||||
- [x] `ShipmentUpdatedNotification` — با لیست فیلدهای تغییر کرده
|
||||
- [x] `afterSave` hook در ShipmentResource — ارسال نوتیفیکیشن
|
||||
|
||||
---
|
||||
|
||||
## 🟢 بخش ۶: Services
|
||||
## بخش ۶: Services
|
||||
|
||||
### 6.1 اصلاح `PriceCalculatorService.php`
|
||||
- [ ] استفاده از ۴ زون مجزا (نه ۲ زون):
|
||||
- [ ] اگر type=PARCEL → `export_zone_parcel` / `import_zone_parcel`
|
||||
- [ ] اگر type=DOC_* → `export_zone_doc` / `import_zone_doc`
|
||||
- [ ] پشتیبانی از ۳ نوع سرویس: DOC_NORMAL, DOC_ECONOMY, PARCEL
|
||||
- [ ] اضافه کردن محاسبه VAT (9%)
|
||||
- [ ] اضافه کردن هزینههای جانبی (domestic_pickup, packing, warehousing, delivery)
|
||||
- [ ] محاسبه sub-total قبل از VAT
|
||||
- [ ] خروجی کامل: base_price, net_dirham, net_rial, vat_amount, total_fee
|
||||
|
||||
### 6.2 ایجاد `TrackingService.php` (فاز ۰)
|
||||
- [ ] متد `getTrackingTimeline($awb_no)` — دریافت تایملاین
|
||||
- [ ] متد `addTrackingEvent($shipment_id, $data)` — افزودن رویداد دستی
|
||||
- [ ] متد `getShipmentWithTracking($awb_no)` — مرسوله + رویدادها + نگاشتها
|
||||
- [x] `PriceCalculatorService.php` — با ۴ زون + ۳ نوع + VAT + هزینههای جانبی
|
||||
- [x] `TrackingService.php` — تایملاین + افزودن رویداد
|
||||
- [x] `PdfService.php` — تولید PDF (AWB, Label, Invoice)
|
||||
- [x] `OrderPaymentService.php` — پرداخت از کیف پول و درگاه — فاز ۲
|
||||
|
||||
---
|
||||
|
||||
## 🔵 بخش ۷: Import و مهاجرت داده
|
||||
## بخش ۷: Import و مهاجرت داده
|
||||
|
||||
### 7.1 اصلاح `OldShipmentsImport.php`
|
||||
- [ ] اصلاح ایندکسهای ستونها (مطابق EXCEL_ANALYSIS.md شیت List):
|
||||
- [ ] ستون ۱: HAWB No. (ایندکس ۰)
|
||||
- [ ] ستون ۲: Date (ایندکس ۱)
|
||||
- [ ] ستون ۳: Forwarder (ایندکس ۲)
|
||||
- [ ] ستون ۴-۵: From/To (ایندکس ۳-۴)
|
||||
- [ ] ستون ۶: Zone (ایندکس ۵)
|
||||
- [ ] ستون ۷: Service/Direction (ایندکس ۶)
|
||||
- [ ] ستون ۸: Type (ایندکس ۷)
|
||||
- [ ] و غیره...
|
||||
- [ ] تبدیل `type` به ۳ مقدار: DOC_NORMAL, DOC_ECONOMY, PARCEL
|
||||
- [ ] تبدیل `direction` به: import, export
|
||||
- [ ] تبدیل نام کشورها از `Iran (IR)` به `iso_code` برای lookup
|
||||
- [ ] فیلتر رکوردهای خالی
|
||||
- [ ] اعتبارسنجی دادهها
|
||||
|
||||
### 7.2 اصلاح `ShippingRatesImport.php`
|
||||
- [ ] پشتیبانی از ۳ نوع سرویس (نه ۲):
|
||||
- [ ] شیت DocNor → type = DOC_NORMAL
|
||||
- [ ] شیت DocEco → type = DOC_ECONOMY
|
||||
- [ ] شیت Parcel → type = PARCEL
|
||||
- [ ] پشتیبانی از فرمت Long format (شیتهای DocNor/DocEco/Parcel)
|
||||
- [ ] پشتیبانی از فرمت Wide format (شیتهای Import/Export Rate)
|
||||
|
||||
### 7.3 ایجاد مهاجرت ترکینگ دستی
|
||||
- [ ] اسکریپت مهاجرت شیت Sheet1 فایل `Data entry 2026-06-28.xlsx`
|
||||
- [ ] نگاشت به `shipment_tracking_events` با `source = manual`
|
||||
- [ ] مهاجرت شیت Refrence به `shipment_carrier_mappings`
|
||||
|
||||
### 7.4 تست مهاجرت
|
||||
- [ ] مقایسه تعداد رکوردهای مهاجرتدادهشده با اکسل
|
||||
- [ ] نمونهگیری ۵۰ رکورد برای بررسی دقیق
|
||||
- [ ] تست مهاجرت حداقل ۱۰ مرسوله با رویداد ترکینگ
|
||||
- [x] `OldShipmentsImport.php` — مهاجرت ۳۹۵۰ رکورد تاریخی
|
||||
- [x] `ShippingRatesImport.php` — ایمپورت نرخها (بدون SystemSetting)
|
||||
- [x] `ShippingRatesTemplateExport.php` — دانلود template اکسل (FromArray)
|
||||
|
||||
---
|
||||
|
||||
## 🔵 بخش ۸: پلاگین وردپرس IFNEX Bridge
|
||||
## بخش ۸: پلاگین وردپرس IFNEX Bridge
|
||||
|
||||
### 8.1 ساختار پلاگین
|
||||
- [ ] ایجاد `ifnex-bridge.php` (فایل اصلی پلاگین)
|
||||
- [ ] ایجاد `includes/api-client.php` (ارتباط با API لاراول)
|
||||
- [ ] ایجاد `includes/shortcodes.php` (ثبت شورتکدها)
|
||||
- [ ] ایجاد `includes/tracking-form.php` (فرم رهگیری)
|
||||
- [ ] ایجاد `assets/css/ifnex-tracking.css`
|
||||
- [ ] ایجاد `assets/js/ifnex-tracking.js`
|
||||
### ۸.۱ ساختار پلاگین
|
||||
- [x] `ifnex-bridge.php` — فایل اصلی پلاگین
|
||||
- [x] `includes/api-client.php` — ارتباط با API (قدیمی)
|
||||
- [x] `includes/user-bridge.php` — Bridge Auth + API احرازشده
|
||||
- [x] `includes/shortcodes.php` — تمام شورتکدها
|
||||
- [x] `includes/tracking-form.php` — فرم رهگیری (قدیمی)
|
||||
- [x] `assets/css/ifnex-orders.css` — استایل کامل (v1.6.0)
|
||||
- [x] `assets/css/ifnex-bridge.css` — استایل ترکینگ
|
||||
- [x] `assets/js/ifnex-order-form.js` — فرم سفارش + هشدار آدرس انگلیسی
|
||||
|
||||
### 8.2 شورتکد رهگیری مرسوله ⭐ حیاتی
|
||||
- [ ] `[ifnex_tracking_form]` — فرم جستجوی کد AWB
|
||||
- [ ] ارسال درخواست به `GET /api/track/{awb_no}` لاراول
|
||||
- [ ] نمایش تایملاین رویدادها (طراحی شبیه DHL)
|
||||
- [ ] نمایش اطلاعات پایه مرسوله
|
||||
- [ ] نمایش خطای «مرسوله پیدا نشد» اگر AWB معتبر نباشد
|
||||
- [ ] لودینگ و UX روان
|
||||
### ۸.۲ شورتکدها
|
||||
- [x] `[ifnex_tracking_form]` — فرم رهگیری مرسوله
|
||||
- [x] `[ifnex_tracking_status]` — نمایش مستقیم وضعیت
|
||||
- [x] `[ifnex_wallet_balance]` — موجودی کیف پول
|
||||
- [x] `[ifnex_transactions]` — تاریخچه تراکنشها (با استایل جدید)
|
||||
- [x] `[ifnex_user_profile]` — پروفایل مشتری
|
||||
- [x] `[ifnex_orders_list]` — لیست سفارشات
|
||||
- [x] `[ifnex_order_form]` — فرم ثبت سفارش چند مرحلهای
|
||||
- [x] `[ifnex_order_payment]` — صفحه پرداخت
|
||||
- [x] `[ifnex_order_detail]` — جزئیات سفارش
|
||||
- [x] `[ifnex_customer_dashboard]` — پنل جامع مشتری (داشبورد + سفارشات + کیف پول + تراکنشها + اعلانها + رهگیری + پروفایل)
|
||||
|
||||
### 8.3 شورتکد استعلام قیمت (ساده — فاز ۰)
|
||||
- [ ] `[ifnex_price_inquiry]` — فرم دریافت شماره موبایل + اطلاعات اولیه
|
||||
- [ ] نمایش پیام «کارشناس ما تماس میگیرد»
|
||||
- [ ] ذخیره اطلاعات برای پیگیری
|
||||
### ۸.۳ استایل تراکنشها — فاز ۲
|
||||
- [x] استایل کامل برای `.ifnex-transactions-*` — مطابق دشبورد مدرن
|
||||
|
||||
### 8.4 امنیت پلاگین
|
||||
- [ ] API Key در تنظیمات پلاگین (نه هاردکد)
|
||||
- [ ] sanitize_text_field برای تمام ورودیها
|
||||
- [ ] esc_html و esc_attr برای خروجیها
|
||||
- [ ] Nonce برای فرمها
|
||||
### ۸.۴ هشدار آدرس انگلیسی — فاز ۲
|
||||
- [x] تشخیص متن انگلیسی در آدرس (sender + receiver)
|
||||
- [x] نمایش هشدار اسلایدی با انیمیشن
|
||||
|
||||
### ۸.۵ نوتیفیکیشن پنل کاربری — فاز ۲
|
||||
- [x] تب اعلانها در دشبورد
|
||||
- [x] بج تعداد خواندهنشده در سایدبار
|
||||
- [x] لیست نوتیفیکیشنها با استایل مدرن
|
||||
- [x] لینک به سفارش مرتبط
|
||||
- [x] API لاراول برای دریافت/خواندن نوتیفیکیشن
|
||||
|
||||
---
|
||||
|
||||
## 🔵 بخش ۹: وبسایت وردپرس
|
||||
## بخش ۹: وبسایت وردپرس
|
||||
|
||||
### 9.1 نصب و راهاندازی
|
||||
- [ ] نصب وردپرس روی هاست مشتری
|
||||
- [ ] تنظیمات امنیتی (HTTPS، فایروال، محدودیت ورود)
|
||||
- [ ] نصب و تنظیم قالب (light mode، RTL-friendly، DHL-inspired)
|
||||
### ۹.۱ قالب IFNEX
|
||||
- [x] نصب و تنظیم قالب سفارشی
|
||||
- [x] front-page.php — لندینگ پیج
|
||||
- [x] header.php / footer.php
|
||||
- [x] template-parts (hero, services, how-it-works, stats, testimonials, cta)
|
||||
- [x] template-login.php — صفحه ورود
|
||||
|
||||
### 9.2 لندینگ پیج
|
||||
- [ ] بخش معرفی شرکت
|
||||
- [ ] بخش خدمات (صادرات، واردات، داخلی)
|
||||
- [ ] بخش «چرا ما» (مزیت رقابتی)
|
||||
- [ ] فراخوان به اقدام (Call to Action)
|
||||
|
||||
### 9.3 صفحات ثابت
|
||||
- [ ] درباره ما
|
||||
- [ ] تماس با ما
|
||||
- [ ] قوانین و مقررات
|
||||
- [ ] سوالات متداول (FAQ)
|
||||
- [ ] حریم خصوصی
|
||||
|
||||
### 9.4 صفحه رهگیری مرسوله
|
||||
- [ ] شورتکد `[ifnex_tracking_form]` در صفحه
|
||||
- [ ] طراحی تایملاین شبیه DHL
|
||||
- [ ] تست عملکرد
|
||||
|
||||
### 9.5 صفحه استعلام قیمت
|
||||
- [ ] شورتکد `[ifnex_price_inquiry]` در صفحه
|
||||
- [ ] فرم ساده (موبایل + مبدا + مقصد + وزن تقریبی)
|
||||
- [ ] پیام «کارشناس ما تماس میگیرد»
|
||||
|
||||
### 9.6 وبلاگ سئو
|
||||
- [ ] نصب بخش وبلاگ
|
||||
- [ ] پست ۱: تفاوت صادرات و واردات
|
||||
- [ ] پست ۲: نحوه محاسبه وزن حجمی
|
||||
- [ ] پست ۳: راهنمای انتخاب شرکت حمل مناسب
|
||||
|
||||
### 9.7 سئو و چندزبانه
|
||||
- [ ] meta tags و sitemap XML و schema markup
|
||||
- [ ] ثبت در Google Search Console
|
||||
- [ ] نصب Polylang (آماده برای آینده)
|
||||
- [ ] تست سرعت بارگذاری (< ۳ ثانیه)
|
||||
### ۹.۲ صفحات
|
||||
- [x] لندینگ پیج
|
||||
- [x] صفحه رهگیری
|
||||
- [x] صفحه استعلام قیمت (PricingPageController)
|
||||
|
||||
---
|
||||
|
||||
## 🔵 بخش ۱۰: اصلاحات فنی عمومی
|
||||
## بخش ۱۰: موارد اخیر فاز ۳ (۱۷ مورد کارفرما)
|
||||
|
||||
### 10.1 `composer.json`
|
||||
- [ ] تغییر `laravel/framework` از `^12.0` به `^11.0`
|
||||
- [ ] اضافه کردن `morilog/jalali` (برای تبدیل تاریخ در لایه نمایش)
|
||||
|
||||
### 10.2 تنظیمات `.env.example`
|
||||
- [ ] اضافه کردن `IFNEX_API_KEY=` (برای احراز هویت وردپرس)
|
||||
- [ ] اضافه کردن `CORS_ALLOWED_ORIGINS=` (فقط دامنهی وردپرس)
|
||||
- [ ] اضافه کردن `IFNEX_TRACKING_RATE_LIMIT=60` (درخواست در دقیقه)
|
||||
|
||||
### 10.3 Config اختصاصی
|
||||
- [ ] ایجاد `config/ifnex.php` (تنظیمات اختصاصی پروژه)
|
||||
- [ ] API Key
|
||||
- [ ] CORS whitelist
|
||||
- [ ] Rate limits
|
||||
- [ ] Carrier codes list
|
||||
- [ ] Tracking status list
|
||||
|
||||
### 10.4 تستها
|
||||
- [ ] تست Migration ها (php artisan migrate --seed)
|
||||
- [ ] تست API ترکینگ (GET /api/track/{awb_no})
|
||||
- [ ] تست API قیمتگذاری (GET /api/calculate-price)
|
||||
- [ ] تست مهاجرت دادههای تاریخی
|
||||
- [ ] تست پنل Filament (CRUD + ترکینگ)
|
||||
- [ ] تست پلاگین وردپرس
|
||||
- [ ] تست امنیتی (CORS, Rate Limiting, API Key)
|
||||
- [x] ۱. رفع `openUrlInNewTab()` روی اکشنهای PDF در ViewShipment
|
||||
- [x] ۲. رفع `ShippingRatesImport` (حذف SystemSetting + تبدیل ارز)
|
||||
- [x] ۳. رفع تصاویر PDF (asset() بجای public_path())
|
||||
- [x] ۴. رفع label.blade.php تصاویر
|
||||
- [x] ۵. ستونهای جدید ShipmentResource (fromCountry, toCountry, route, phones, cod_amount)
|
||||
- [x] ۶. حذف reason_for_export تکراری
|
||||
- [x] ۷. رفع CSV label ($status?->label())
|
||||
- [x] ۸. Packages Repeater (collapsible)
|
||||
- [x] ۹. changeStatus به عنوان bulkAction
|
||||
- [x] ۱۰. afterSave hook برای ShipmentUpdatedNotification
|
||||
- [x] ۱۱. Currency CRUD (Resource + Pages + Migration + Model)
|
||||
- [x] ۱۲. RelationManagers (Create/Edit/Delete) + فیلد source
|
||||
- [x] ۱۳. سیستم نوتیفیکیشن دیتابیس
|
||||
- [x] ۱۴. Multi-package (migration + model + PDF)
|
||||
- [x] ۱۵. ImportRatesPage (دکمهها + دانلود template + ایمپورت)
|
||||
- [x] ۱۶. استایل تراکنشهای وردپرس
|
||||
- [x] ۱۷. هشدار انگلیسی بودن آدرس
|
||||
- [x] ۱۸. نوتیفیکیشن پنل کاربری وردپرس (تب + API + CSS)
|
||||
- [ ] ۱۹. سیستم نمایندگی (طرح مطالعاتی آماده — منتظر تصمیم کارفرما)
|
||||
|
||||
---
|
||||
|
||||
## 📋 بخش ۱۱: مستندات
|
||||
## بخش ۱۱: مستندات
|
||||
|
||||
- [ ] راهنمای نصب پروژه (Installation Guide)
|
||||
- [x] IFNEX_Phase0_Checklist.md (همین فایل)
|
||||
- [x] IFNEX_File_Map.md — نقشه فایلهای پروژه
|
||||
- [x] IFNEX_Roadmap.md — نقشه راه جامع ۴ فازی
|
||||
- [ ] راهنمای اپراتور (Operator Manual) با اسکرینشات
|
||||
- [ ] مستندات API (مسیرها، پارامترها، نمونه پاسخها)
|
||||
- [ ] جلسه آموزشی ۴ ساعته برای اپراتورها
|
||||
- [ ] مستندات API (OpenAPI/Swagger)
|
||||
|
||||
---
|
||||
|
||||
## 📅 بخش ۱۲: جدول زمانی (۴ هفته)
|
||||
## خط قرمزها — هرگز این کارها را نکن
|
||||
|
||||
| هفته | زیرفاز ۰.الف (وردپرس) | زیرفاز ۰.ب (لاراول) | خروجی |
|
||||
|------|------------------------|----------------------|-------|
|
||||
| **هفته ۱** | نصب وردپرس + انتخاب قالب + صفحات اصلی | اصلاح Migration ها + Model ها + Seeders | محیط آماده + جداول دیتابیس |
|
||||
| **هفته ۲** | لندینگ پیج + صفحات ثابت + وبلاگ | API ترکینگ + TrackController + Filament ترکینگ | صفحات آماده + API قابل تست |
|
||||
| **هفته ۳** | صفحه رهگیری + شورتکد + فرم استعلام | پنل Filament کامل + UX اپراتور + پلاگین Bridge | ترکینگ دستی فعال |
|
||||
| **هفته ۴** | سئو + Polylang + تست | مهاجرت ۳۹۵۰ رکورد + تست نهایی + رفع باگ | تحویل فاز ۰ |
|
||||
- هرگز جدول countries را به ۲ زون برگردانی
|
||||
- هرگز فقط ۲ نوع سرویس پیاده کن (۳ نوع الزامی است)
|
||||
- هرگز ترکینگ را در وردپرس پیاده کن
|
||||
- هرگز فیلدهای مالی (VAT, Packing, Warehousing) را حذف کن
|
||||
- هرگز از رنگ/لوگو DHL کپی کن
|
||||
- هرگز PDF را به فارسی بسازی
|
||||
- هرگز تاریخ را شمسی در DB ذخیره کنی
|
||||
- هرگز از CORS `*` استفاده کنی
|
||||
- هرگز فایل .env را در Git کامیت کنی
|
||||
|
||||
---
|
||||
|
||||
## 🚫 خط قرمزها — هرگز این کارها را نکن
|
||||
|
||||
- ❌ هرگز جدول countries را به ۲ زون برگردانی
|
||||
- ❌ هرگز فقط ۲ نوع سرویس پیاده کن (۳ نوع الزامی است)
|
||||
- ❌ هرگز ترکینگ را در وردپرس پیاده کن
|
||||
- ❌ هرگز فیلدهای مالی (VAT, Packing, Warehousing) را حذف کن
|
||||
- ❌ هرگز از رنگ/لوگو DHL کپی کن
|
||||
- ❌ هرگز PDF را به فارسی بسازی
|
||||
- ❌ هرگز تاریخ را شمسی در DB ذخیره کنی
|
||||
- ❌ هرگز از CORS `*` استفاده کنی
|
||||
- ❌ هرگز فایل .env را در Git کامیت کنی
|
||||
- ❌ هرگز فاز ۱ را قبل از تأیید فاز ۰ شروع کنی
|
||||
|
||||
---
|
||||
|
||||
> © 2026 VernaSoft Group. Internal use only.
|
||||
> 2026 VernaSoft Group. Internal use only.
|
||||
|
||||
197
01_Documents/IFNEX_Roadmap.md
Normal file
197
01_Documents/IFNEX_Roadmap.md
Normal file
@ -0,0 +1,197 @@
|
||||
# نقشه راه پروژه IFNEX
|
||||
|
||||
> **آخرین بروزرسانی:** 2026-08-29
|
||||
> **توسعهدهنده:** VernaSoft Group — Kazem Alghasi
|
||||
|
||||
---
|
||||
|
||||
## خلاصه وضعیت
|
||||
|
||||
| فاز | عنوان | وضعیت | درصد |
|
||||
|------|-------|--------|------|
|
||||
| فاز ۰ | پایه و زیرساخت | تکمیل شده | 100% |
|
||||
| فاز ۱ | پنل مشتری وردپرس | تکمیل شده | 100% |
|
||||
| فاز ۲ | پرداخت و کیف پول | تکمیل شده | 100% |
|
||||
| فاز ۳ | یکپارچهسازی و بهبود | در دست اقدام | 60% |
|
||||
| فاز ۴ (آینده) | سیستم نمایندگی | مطالعاتی | 0% |
|
||||
|
||||
---
|
||||
|
||||
## فاز ۰ — پایه و زیرساخت ✅
|
||||
|
||||
**هدف:** ساخت زیرساخت API لاراول + پنل ادمین Filament + ترکینگ دستی
|
||||
|
||||
### انجام شده:
|
||||
- دیتابیس کامل با ۴ زون مجزا + ۳ نوع سرویس
|
||||
- Model ها با Enum casts و روابط کامل
|
||||
- Seeders کشورها و تنظیمات
|
||||
- API ترکینگ (`GET /api/v1/track/{awb}`)
|
||||
- API قیمتگذاری (`POST /api/v1/calculate`)
|
||||
- پنل Filament: Country, Shipment, ShippingRate Resources
|
||||
- RelationManagers: TrackingEvents, CarrierMappings, Items
|
||||
- صفحات سفارشی: Settings, PriceTest, ImportRates
|
||||
- مهاجرت ۳۹۵۰ رکورد تاریخی
|
||||
- ایمپورت/اکسپورت نرخها (Excel)
|
||||
|
||||
---
|
||||
|
||||
## فاز ۱ — پنل مشتری وردپرس ✅
|
||||
|
||||
**هدف:** ثبت سفارش، لیست سفارشات، جزئیات و رهگیری در سایت وردپرس
|
||||
|
||||
### انجام شده:
|
||||
- Bridge Auth (وردپرس → لاراول بدون رمز عبور)
|
||||
- شورتکدهای وردپرس: فرم سفارش چند مرحلهای، لیست سفارشات، جزئیات، پرداخت
|
||||
- دشبورد جامع مشتری (داشبورد، سفارشات، کیف پول، تراکنشها، اعلانها، رهگیری، پروفایل)
|
||||
- API مشتری: پروفایل، کشورها، سفارشات، لغو
|
||||
- قالب سفارشی IFNEX برای وردپرس
|
||||
|
||||
---
|
||||
|
||||
## فاز ۲ — پرداخت و کیف پول ✅
|
||||
|
||||
**هدف:** سیستم پرداخت آنلاین و کیف پول
|
||||
|
||||
### انجام شده:
|
||||
- جدول کیف پول و تراکنشها
|
||||
- API کیف پول (موجودی، تراکنشها)
|
||||
- پرداخت از کیف پول و درگاه بانکی
|
||||
- Mock Gateway (شبیهسازی درگاه)
|
||||
- سیستم ارز (Currency CRUD)
|
||||
- Multi-package (بستههای چندگانه مرسوله)
|
||||
- تاریخچه تغییرات وضعیت (ShipmentStatusHistory)
|
||||
- نوتیفیکیشن دیتابیس (ادمین و مشتری)
|
||||
|
||||
---
|
||||
|
||||
## فاز ۳ — یکپارچهسازی و بهبود 🔄
|
||||
|
||||
**هدف:** اصلاحات کارفرما، بهبود UI/UX، استانداردسازی
|
||||
|
||||
### انجام شده (۱۷ مورد کارفرما):
|
||||
1. رفع اکشنهای PDF در ViewShipment
|
||||
2. رفع ShippingRatesImport
|
||||
3. رفع تصاویر PDF (asset بجای public_path)
|
||||
4. ستونهای جدید جدول Shipment
|
||||
5. Packages Repeater در فرم
|
||||
6. changeStatus به عنوان bulkAction
|
||||
7. afterSave hook نوتیفیکیشن
|
||||
8. Currency CRUD
|
||||
9. فیلد source در TrackingEvents
|
||||
10. ImportRatesPage (دکمهها + template)
|
||||
11. استایل تراکنشهای وردپرس
|
||||
12. هشدار آدرس انگلیسی
|
||||
13. نوتیفیکیشن پنل کاربری وردپرس
|
||||
|
||||
### باقیمانده:
|
||||
- [ ] سیستم نمایندگی (طرح مطالعاتی آماده)
|
||||
- [ ] مستندات API (OpenAPI/Swagger)
|
||||
- [ ] راهنمای اپراتور
|
||||
- [ ] تستهای واحد و Integration
|
||||
- [ ] بهبود سئو وبسایت وردپرس
|
||||
|
||||
---
|
||||
|
||||
## فاز ۴ (آینده) — سیستم نمایندگی 📋
|
||||
|
||||
**وضعیت:** طرح مطالعاتی آماده — منتظر تصمیم کارفرما
|
||||
|
||||
### مدلهای پیشنهادی:
|
||||
|
||||
| مدل | توضیح | پیچیدگی |
|
||||
|-----|-------|---------|
|
||||
| A) کد معرف ساده | هر کاربر یه کد معرف داره، درصدی از سود به معرف میرسه | کم |
|
||||
| B) نمایندگی کامل | پنل جداگانه، گزارش فروش، کمیسیون | متوسط |
|
||||
| C) زیرعاملدهی | نماینده زیرمجموعه تعریف میکنه (چند سطحی) | زیاد |
|
||||
|
||||
**پیشنهاد:** شروع با مدل B و امکان ارتقا به C
|
||||
|
||||
### جداول دیتابیس پیشنهادی:
|
||||
- `agents` — اطلاعات نماینده (agent_code, commission_rate, parent_agent_id)
|
||||
- `agent_customers` — تخصیص مشتریان به نماینده
|
||||
- `agent_commissions` — محاسبه و پرداخت کمیسیونها
|
||||
|
||||
### فازهای پیادهسازی:
|
||||
1. جداول + مدل + ثبتنام با کد معرف
|
||||
2. محاسبه خودکار کمیسیون هنگام ثبت سفارش
|
||||
3. پنل نماینده در Filament (گزارشها + تسویه)
|
||||
4. لینک معرف اختصاصی + صفحه لندینگ ثبتنام
|
||||
|
||||
---
|
||||
|
||||
## معماری پروژه
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────┐
|
||||
│ کاربر نهایی │
|
||||
│ (مرورگر وب / موبایل) │
|
||||
└──────────────────┬──────────────────────────────┘
|
||||
│
|
||||
┌──────────▼──────────┐
|
||||
│ وبسایت وردپرس │
|
||||
│ (ifnex.vernahost.ir) │
|
||||
│ │
|
||||
│ ─ قالب IFNEX │
|
||||
│ ─ پلاگین IFNEX │
|
||||
│ Bridge │
|
||||
│ ─ دشبورد مشتری │
|
||||
│ ─ فرم سفارش │
|
||||
│ ─ صفحه پرداخت │
|
||||
└──────────┬──────────┘
|
||||
│ API (Sanctum/Bridge)
|
||||
┌──────────▼──────────┐
|
||||
│ API لاراول │
|
||||
│ (api.ifnex.vernahost) │
|
||||
│ │
|
||||
│ ─ قیمتگذاری │
|
||||
│ ─ سفارشات مشتری │
|
||||
│ ─ کیف پول │
|
||||
│ ─ پرداخت │
|
||||
│ ─ نوتیفیکیشن │
|
||||
└──────────┬──────────┘
|
||||
│
|
||||
┌──────────▼──────────┐
|
||||
│ پنل ادمین Filament │
|
||||
│ (api.ifnex.vernahost) │
|
||||
│ /panel │
|
||||
│ │
|
||||
│ ─ مرسولات │
|
||||
│ ─ نرخها │
|
||||
│ ─ کشورها │
|
||||
│ ─ ارزها │
|
||||
│ ─ ترکینگ │
|
||||
│ ─ تنظیمات │
|
||||
└─────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## تکنولوژیها
|
||||
|
||||
| لایه | تکنولوژی |
|
||||
|------|---------|
|
||||
| بکاند | Laravel 11 + PHP 8.2 |
|
||||
| پنل ادمین | Filament 3.x |
|
||||
| فرانتاند | WordPress + قالب سفارشی |
|
||||
| پرداخت | Mock Gateway + آماده برای Zarinpal/IDPay |
|
||||
| PDF | Dompdf |
|
||||
| Excel | maatwebsite/excel |
|
||||
| بارکد | picqer/php-barcode-generator |
|
||||
| تاریخ | morilog/jalali |
|
||||
| احراز هویت | Laravel Sanctum + Bridge Auth |
|
||||
| دیتابیس | MySQL |
|
||||
| سرور | HestiaCP + SSH |
|
||||
|
||||
---
|
||||
|
||||
## محیطها
|
||||
|
||||
| محیط | دامنه | وضعیت |
|
||||
|------|-------|--------|
|
||||
| تست/تولید | api.ifnex.vernahost.ir | فعال |
|
||||
| تست/تولید | ifnex.vernahost.ir | فعال |
|
||||
| لوکال | localhost:8000 | توسعه |
|
||||
|
||||
---
|
||||
|
||||
> 2026 VernaSoft Group. Internal use only.
|
||||
Loading…
Reference in New Issue
Block a user