diff --git a/01_Documents/IFNEX_Meeting_Summary.md b/01_Documents/IFNEX_Meeting_Summary.md new file mode 100644 index 0000000..2667a04 --- /dev/null +++ b/01_Documents/IFNEX_Meeting_Summary.md @@ -0,0 +1,161 @@ +# 📊 خلاصه جلسه ارائه IFNEX — فاز ۳ و ۳.۵ + +> **تاریخ:** 2026-08-29 +> **توسعهدهنده:** VernaSoft Group — Kazem Alghasi +> **وضعیت:** آماده ارائه به کارفرما + +--- + +## 🎯 خلاصه کلی + +پروژه IFNEX در ۵ فاز توسعه داده شده که فازهای ۰، ۱، ۲، ۳ و ۳.۵ بهطور کامل تکمیل شدهاند. این سند خلاصهای از تمام قابلیتها و موارد انجامشده را برای ارائه به کارفرما ارائه میدهد. + +--- + +## ✅ فازهای تکمیلشده + +### فاز ۰ — پایه و زیرساخت ✅ (100%) +- دیتابیس کامل با ۴ زون مجزا + ۳ نوع سرویس +- ۱۷ مدل Eloquent با Enum casts +- API ترکینگ و قیمتگذاری +- پنل Filament با ۱۰+ Resource +- مهاجرت ۳۹۵۰ رکورد تاریخی از اکسل + +### فاز ۱ — پنل مشتری وردپرس ✅ (100%) +- Bridge Auth (بدون رمز عبور) +- دشبورد جامع مشتری (۸ تب) +- فرم سفارش چندمرحلهای +- API مشتری کامل + +### فاز ۲ — پرداخت و کیف پول ✅ (100%) +- کیف پول دیجیتال با تراکنشها +- درگاه پرداخت Zarinpal + Mock Gateway +- سیستم ارز چندگانه +- تولید PDF (AWB, Invoice, Label) +- کدهای تخفیف + +### فاز ۳ — یکپارچهسازی ✅ (100%) +- ۱۸ مورد اصلاحات کارفرما +- ایمپورت/اکسپورت نرخها +- نوتیفیکیشن دیتابیس +- ۱۵ مورد اصلاح تست لوکال + +### فاز ۳.۵ — اصلاحات اساسی ✅ (90%) + +#### ۳.۵.۱ — Multi-Package ✅ +- پشتیبانی از چند بسته در یک سفارش +- محاسبه خودکار وزن حجمی از ابعاد +- فرمول استاندارد IATA: `L×W×H/5000` +- رابط کاربری Repeater (افزودن/حذف بسته) + +#### ۳.۵.۲ — فرم Invoice برای PARCEL ✅ +- مرحله جدید در فرم سفارش (فقط برای PARCEL) +- اقلام گمرکی: شرح، HS Code، تعداد، قیمت +- محاسبه خودکار مجموع فاکتور (USD) +- حداکثر ۹ قلم + +#### ۳.۵.۴ — بازطراحی PDFها ✅ +- نصب کتابخانه بارکد `picqer/php-barcode-generator` +- **AWB:** بارکد، From/To کامل، Value، Service، Type، جدول آیتمها +- **Invoice:** جدول ۹ ردیفه، اعلان قانونی، بارکد پایین +- **Label:** اندازه A5 افقی، بارکد بزرگ، اطلاعات ضروری +- شرط DOC/PARCEL (فقط PARCEL فاکتور داره) + +#### ۳.۵.۵ — اصلاحات فنی ✅ +- Enum casts در مدل Shipment +- Migrationهای جدید (shipment_packages, row_number, unit_price) +- اصلاح متدهای Filament + +#### ۳.۵.۶ — تست ترکینگ ✅ +- بازطراحی صفحه رهگیری با timeline زیبا +- باکس وضعیت با badge رنگی +- نمایش تاریخ، توضیحات، لوکیشن و منبع +- بخش شرکتهای حمل + +--- + +## 📊 آمار پروژه + +| معیار | مقدار | +|-------|-------| +| تعداد مایگریشنها | ۳۱ | +| تعداد API endpoints | ۳۰+ | +| تعداد Filament Resources | ۱۰+ | +| تعداد مدلها | ۱۷ | +| تعداد شورتکدهای وردپرس | ۱۰+ | +| تعداد کشورها با پیششماره | ۱۹۲ | +| رکوردهای تاریخی مهاجرتشده | ۳۹۵۰ | +| زبانهای پشتیبانیشده | ۲ (فارسی، انگلیسی) | +| خطوط کد (تخمینی) | ۱۷۰۰۰+ | + +--- + +## 🧪 تستهای انجامشده + +| تست | وضعیت | +|-----|--------| +| لاگین مشتری (Bridge Auth) | ✅ | +| ثبت سفارش با Multi-Package | ✅ | +| فرم Invoice برای PARCEL | ✅ | +| محاسبه قیمت | ✅ | +| پرداخت با کیف پول | ✅ | +| شارژ کیف پول | ✅ | +| نوتیفیکیشنها | ✅ | +| تولید PDF (AWB, Invoice, Label) | ✅ | +| ترکینگ چندمرحلهای | ✅ | +| پنل ادمین Filament | ✅ | + +--- + +## 📋 موارد باقیمانده + +### فاز ۳.۵ — باقیمانده (زمان دیپلوی) +- **پشتیبانی چندزبانه (i18n)** — استراتژی کامل در `IFNEX_I18N_Strategy.md` + +### فاز ۴ (آینده) — سیستم نمایندگی +- مدل نمایندگی کامل با کمیسیون +- پنل جداگانه برای نماینده +- طرح مطالعاتی آماده + +### فاز ۵ (آینده) — تجاریسازی +- مدل پولی چندلایهای (Starter / Business / Enterprise) +- فرمساز Drag & Drop +- White-label branding +- API Gateway + +--- + +## 📁 مستندات موجود + +| فایل | محتوا | +|------|-------| +| `README.md` | معرفی کلی پروژه | +| `04_Laravel/README.md` | راهنمای بکاند | +| `IFNEX_Roadmap.md` | نقشه راه ۵ فازی | +| `IFNEX_Phase0_Checklist.md` | چکلیست کامل | +| `IFNEX_File_Map.md` | نقشه فایلها | +| `IFNEX_I18N_Strategy.md` | استراتژی چندزبانه | +| `IFNEX_Commercial_Model.md` | مدل تجاری | +| `DEPLOYMENT.md` | راهنمای استقرار | + +--- + +## 🚀 قدم بعدی + +1. **دیپلوی روی سرور** (بعد از جلسه) +2. **پشتیبانی چندزبانه** (همراه با دیپلوی) +3. **سیستم نمایندگی** (فاز ۴) +4. **تجاریسازی** (فاز ۵) + +--- + +## 📞 تماس + +- **توسعهدهنده:** Kazem Alghasi +- **شرکت:** VernaSoft Group +- **ایمیل:** kazem@vernasoft.group +- **سرور تست:** api.ifnex.vernahost.ir | ifnex.vernahost.ir + +--- + +> 2026 VernaSoft Group. Internal use only. diff --git a/01_Documents/IFNEX_Phase0_Checklist.md b/01_Documents/IFNEX_Phase0_Checklist.md index 9c85beb..098fd57 100644 --- a/01_Documents/IFNEX_Phase0_Checklist.md +++ b/01_Documents/IFNEX_Phase0_Checklist.md @@ -16,11 +16,11 @@ | فاز ۱ (پنل مشتری) | ✅ تکمیل شده | 100% | | فاز ۲ (پرداخت و کیف پول) | ✅ تکمیل شده | 100% | | فاز ۳ (یکپارچهسازی) | ✅ تکمیل شده | 100% | -| **فاز ۳.۵ (اصلاحات اساسی)** | 🔄 در دست اقدام | 0% | +| **فاز ۳.۵ (اصلاحات اساسی)** | ✅ تکمیل شده (۹۰%) | 90% | | فاز ۴ (سیستم نمایندگی) | 📋 مطالعاتی | 0% | | فاز ۵ (تجاریسازی) | 📋 مطالعاتی | 0% | -> **نکته:** فاز ۳.۵ شامل اصلاحات اساسی است که پس از تست لوکال شناسایی شد. این فاز قبل از ارائه نهایی به کارفرما باید تکمیل شود. +> **نکته:** فاز ۳.۵ شامل Multi-Package، فرم Invoice، بازطراحی PDFها و تست ترکینگ است. تنها مورد باقیمانده (پشتیبانی چندزبانه i18n) به زمان دیپلوی منتقل شد. --- @@ -296,58 +296,84 @@ --- -## بخش ۱۱: فاز ۳.۵ — اصلاحات اساسی 🔄 +## بخش ۱۱: فاز ۳.۵ — اصلاحات اساسی ✅ -> ⚠️ **این بخش قبل از ارائه نهایی به کارفرما باید تکمیل شود.** +> ✅ **این فاز قبل از ارائه نهایی به کارفرما تکمیل شد.** -### ۱۱.۱ — Multi-Package در فرم سفارش مشتری 🔴 ضروری +### ۱۱.۱ — Multi-Package در فرم سفارش مشتری ✅ -**مشکل:** بکاند و پنل ادمین از چند بسته پشتیبانی میکنند، ولی فرم سفارش مشتری فقط یه بسته میگیره. +- [x] ساخت migration `shipment_packages` +- [x] ساخت مدل `ShipmentPackage` با `calculateVolumetricWeight()` +- [x] اضافهشدن رابطه `packages()` به مدل Shipment +- [x] اصلاح API `store` در CustomerOrderController — پذیرش `packages[]` +- [x] محاسبه خودکار وزن حجمی از ابعاد (L×W×H/5000) +- [x] اصلاح HTML فرم — اضافهشدن Repeater بستهها در Step 1 +- [x] اصلاح `ifnex-order-form.js` — منطق Multi-Package +- [x] اعتبارسنجی اجباری وزن واقعی و ابعاد +- [x] خلاصه وزنها (مجموع واقعی، حجمی، قابل محاسبه) +- [x] نرمالسازی ابعاد به فرمت `*` (مثلاً `5*6*9`) +- [x] تست با چند بسته -- [ ] اصلاح `ifnex-order-form.js` — افزودن قابلیت "افزودن بسته دیگر" -- [ ] اصلاح HTML فرم — نمایش لیست بستههای اضافهشده -- [ ] محاسبه مجموع وزنها و قیمت نهایی -- [ ] اصلاح `buildOrderData()` — ارسال آرایه `packages[]` -- [ ] اصلاح API `POST /customer/orders` — پذیرش `packages[]` -- [ ] ایجاد خودکار `ShipmentPackage` هنگام ثبت سفارش -- [ ] تست با چند بسته +### ۱۱.۲ — فرم Invoice برای محمولههای PARCEL ✅ -### ۱۱.۲ — فرم Invoice برای محمولههای PARCEL 🔴 ضروری +- [x] اضافهشدن مرحله جدید به فرم سفارش (مرحله ۳) +- [x] نمایش این مرحله فقط وقتی نوع = PARCEL +- [x] فیلدهای هر آیتم: شرح کالا، HS Code، تعداد، قیمت واحد +- [x] امکان افزودن چندین آیتم (تا ۹ ردیف) +- [x] محاسبه خودکار Total و نمایش مجموع +- [x] ارسال `items[]` به API +- [x] ایجاد خودکار `ShipmentItem` هنگام ثبت سفارش +- [x] ساختار ۵ مرحلهای فرم +- [x] تست با چند آیتم -**مشکل:** وقتی مشتری نوع PARCEL رو انتخاب میکنه، باید فرم اقلام گمرکی (Invoice) رو پر کنه. +### ۱۱.۳ — پشتیبانی چندزبانه (i18n) 📋 -- [ ] اضافهکردن مرحله جدید به فرم سفارش (مرحله ۲.۵) -- [ ] نمایش این مرحله فقط وقتی نوع = PARCEL -- [ ] فیلدهای هر آیتم: Description, HS Code, Quantity, Unit Price, Total -- [ ] امکان افزودن چندین آیتم (تا ۹ ردیف) -- [ ] محاسبه خودکار Total و نمایش مجموع -- [ ] ارسال `items[]` به API -- [ ] ایجاد خودکار `ShipmentItem` هنگام ثبت سفارش -- [ ] تست با چند آیتم +**وضعیت:** به زمان دیپلوی منتقل شد -### ۱۱.۳ — پشتیبانی چندزبانه (i18n) 🟡 مهم +- [ ] استخراج تمام رشتههای متنی به فایلهای ترجمه (زمان دیپلوی) +- [ ] استفاده از `__()` و `_e()` در وردپرس (زمان دیپلوی) +- [ ] استفاده از `wp_localize_script` برای ارسال ترجمهها به JS (زمان دیپلوی) +- [ ] افزودن فایلهای `.po/.mo` برای زبانهای فارسی و انگلیسی (زمان دیپلوی) +- [ ] اصلاح CSS برای پشتیبانی RTL/LTR (زمان دیپلوی) -**مشکل:** سایت ۲ زبانه (فارسی + انگلیسی) هست با Polylang، ولی: -- تمام شورتکدها و فرمها فقط فارسی هستن -- پیامهای خطا و موفقیت فقط فارسی هستن +> سند کامل استراتژی در `IFNEX_I18N_Strategy.md` موجود است. -- [ ] استخراج تمام رشتههای متنی به فایلهای ترجمه -- [ ] استفاده از `__()` و `_e()` در وردپرس -- [ ] استفاده از `wp_localize_script` برای ارسال ترجمهها به JS -- [ ] افزودن فایلهای `.po/.mo` برای زبانهای فارسی و انگلیسی -- [ ] اصلاح تمام فایلهای `ifnex-bridge/includes/*.php` -- [ ] اصلاح `ifnex-order-form.js` (استفاده از متغیرهای ترجمه) -- [ ] اصلاح CSS برای پشتیبانی RTL/LTR -- [ ] تست زبان انگلیسی +### ۱۱.۴ — بازطراحی PDFها ✅ -### ۱۱.۴ — تست و نهاییسازی 🟡 مهم +- [x] نصب `picqer/php-barcode-generator` +- [x] بازطراحی AWB با بارکد، From/To کامل، Value، Service، Type +- [x] بازطراحی Invoice با جدول ۹ ردیفه، اعلان قانونی، بارکد پایین +- [x] بازطراحی Label با اندازه A5 افقی و بارکد بزرگ +- [x] اضافهشدن شرط DOC/PARCEL برای Invoice +- [x] بارکد بهصورت base64 embed +- [x] تست تولید PDF با بارکد -- [ ] تست تولید PDF با بارکد روی سرور -- [ ] تست Multi-Package -- [ ] تست Invoice Form برای PARCEL -- [ ] تست زبان انگلیسی -- [ ] دیپلوی نهایی روی سرور -- [ ] تست نهایی روی سرور +### ۱۱.۵ — اصلاحات فنی ✅ + +- [x] اضافهشدن Enum casts به مدل Shipment (status, direction, type) +- [x] اصلاح متد `deselectAfterCompletion` → `deselectRecordsAfterCompletion` +- [x] Migration برای ستونهای `row_number` و `unit_price` در shipment_items +- [x] Migration برای nullable کردن `name` +- [x] اصلاح متدهای Enum (DocNormal/DocEconomy) + +### ۱۱.۶ — تست ترکینگ ✅ + +- [x] اصلاح API لاراول (TrackController) با `status_label` +- [x] بازطراحی صفحه رهگیری وردپرس با timeline زیبا +- [x] باکس وضعیت با badge رنگی بر اساس status +- [x] grid اطلاعات کامل (۸ فیلد) +- [x] timeline با تاریخ، توضیحات، لوکیشن و منبع +- [x] بخش شرکتهای حمل +- [x] تست موفق با محموله چندمرحلهای + +### ۱۱.۷ — تست و نهاییسازی ✅ + +- [x] تست تولید PDF با بارکد +- [x] تست Multi-Package +- [x] تست Invoice Form برای PARCEL +- [x] تست ترکینگ چندمرحلهای +- [x] تست پنل ادمین (DashboardInfoWidget) +- [ ] دیپلوی نهایی روی سرور (بعد از جلسه) --- diff --git a/01_Documents/IFNEX_Roadmap.md b/01_Documents/IFNEX_Roadmap.md index c568e63..5f3ce4c 100644 --- a/01_Documents/IFNEX_Roadmap.md +++ b/01_Documents/IFNEX_Roadmap.md @@ -2,7 +2,7 @@ > **آخرین بروزرسانی:** 2026-08-29 > **توسعهدهنده:** VernaSoft Group — Kazem Alghasi -> **وضعیت کلی:** فاز ۰، ۱، ۲، ۳ تکمیل شد ✅ — فاز ۳.۵ در دست اقدام 🔄 +> **وضعیت کلی:** فاز ۰، ۱، ۲، ۳ و ۳.۵ تکمیل شد ✅ --- @@ -14,10 +14,12 @@ | فاز ۱ | پنل مشتری وردپرس | ✅ تکمیل شده | 100% | | فاز ۲ | پرداخت و کیف پول | ✅ تکمیل شده | 100% | | فاز ۳ | یکپارچهسازی و بهبود | ✅ تکمیل شده | 100% | -| **فاز ۳.۵** | **اصلاحات اساسی** | 🔄 در دست اقدام | 0% | +| **فاز ۳.۵** | **اصلاحات اساسی** | ✅ تکمیل شده (۹۰%) | 90% | | فاز ۴ | سیستم نمایندگی | 📋 مطالعاتی | 0% | | فاز ۵ | تجاریسازی و Premium | 📋 مطالعاتی | 0% | +> **نکته:** فاز ۳.۵ شامل Multi-Package، فرم Invoice و تست ترکینگ است. تنها مورد باقیمانده (پشتیبانی چندزبانه i18n) به زمان دیپلوی منتقل شد. + --- ## فاز ۰ — پایه و زیرساخت ✅ @@ -123,78 +125,82 @@ --- -## فاز ۳.۵ — اصلاحات اساسی 🔄 +## فاز ۳.۵ — اصلاحات اساسی ✅ **هدف:** رفع نواقص شناساییشده پس از تست لوکال + افزودن قابلیتهای ضروری -> ⚠️ **این فاز قبل از ارائه نهایی به کارفرما باید تکمیل شود.** +> ✅ **این فاز قبل از ارائه نهایی به کارفرما تکمیل شد.** -### ۳.۵.۱ — Multi-Package در فرم سفارش مشتری 🔴 ضروری +### ۳.۵.۱ — Multi-Package در فرم سفارش مشتری ✅ -**مشکل:** در حال حاضر، مشتری میتونه فقط یه بسته ثبت کنه. در صورتی که: -- بکاند پشتیبانی از چند بسته (ShipmentPackage) رو داره ✅ -- پنل ادمین Filament هم Repeater برای بستهها داره ✅ -- ولی فرم سفارش مشتری (وردپرس) فقط یه بسته میگیره ❌ +**مشکل:** بکاند و پنل ادمین از چند بسته پشتیبانی میکردند، ولی فرم سفارش مشتری فقط یه بسته میگرفت. -**راه حل:** -- اضافهکردن قابلیت "افزودن بسته دیگر" در مرحله ۱ فرم سفارش -- هر بسته شامل: وزن واقعی، وزن حجمی، ابعاد، تعداد -- محاسبه مجموع وزنها و قیمت نهایی -- نمایش لیست بستههای اضافهشده قبل از تأیید نهایی +**انجام شده:** +- ✅ ساخت migration `shipment_packages` (جدول جدید) +- ✅ ساخت مدل `ShipmentPackage` با متد `calculateVolumetricWeight()` +- ✅ اضافهشدن رابطه `packages()` به مدل `Shipment` +- ✅ اصلاح API `POST /customer/orders` برای پذیرش `packages[]` +- ✅ محاسبه خودکار وزن حجمی از ابعاد (فرمول: `L×W×H/5000`) +- ✅ بازطراحی فرم سفارش با Repeater UI (افزودن/حذف بسته) +- ✅ اعتبارسنجی اجباری وزن واقعی و ابعاد +- ✅ خلاصه وزنها (مجموع واقعی، حجمی، قابل محاسبه) +- ✅ نرمالسازی ابعاد به فرمت `*` (مثلاً `5*6*9`) -**تأثیرات:** -- اصلاح `ifnex-order-form.js` (افزودن Repeater UI) -- اصلاح `buildOrderData()` (ارسال آرایه packages) -- اصلاح API `POST /customer/orders` (پذیرش packages[]) -- اصلاح مدل Shipment (ایجاد خودکار ShipmentPackage) +### ۳.۵.۲ — فرم Invoice برای محمولههای PARCEL ✅ -### ۳.۵.۲ — فرم Invoice برای محمولههای PARCEL 🔴 ضروری +**مشکل:** وقتی مشتری نوع PARCEL رو انتخاب میکرد، باید فرم اقلام گمرکی (Invoice) رو پر میکرد. -**مشکل:** وقتی مشتری نوع محموله رو PARCEL انتخاب میکنه، باید فرم Invoice (اقلام گمرکی) رو پر کنه. در حال حاضر این فرم وجود نداره. +**انجام شده:** +- ✅ اضافهشدن مرحله جدید به فرم سفارش (مرحله ۳ - اقلام گمرکی) +- ✅ نمایش این مرحله فقط وقتی نوع = PARCEL +- ✅ فیلدهای هر آیتم: شرح کالا، HS Code، تعداد، قیمت واحد (USD) +- ✅ محاسبه خودکار مجموع هر قلم +- ✅ خلاصه فاکتور (تعداد اقلام + مجموع USD) +- ✅ حداکثر ۹ قلم +- ✅ اعتبارسنجی کامل (همه فیلدها اجباری) +- ✅ نمایش اقلام در خلاصه قیمت نهایی +- ✅ ساختار ۵ مرحلهای فرم (۱: مسیر، ۲: تماس، ۳: اقلام، ۴: تخفیف، ۵: تأیید) -**راه حل:** -- اضافهکردن مرحله جدید به فرم سفارش (مرحله ۲.۵) -- نمایش این مرحله فقط وقتی نوع = PARCEL -- فیلدهای هر آیتم: Description, HS Code, Quantity, Unit Price (USD), Total (USD) -- امکان افزودن چندین آیتم (تا ۹ ردیف) -- محاسبه خودکار Total و نمایش مجموع -- ارسال items[] به API +### ۳.۵.۳ — پشتیبانی چندزبانه (i18n) 📋 -**تأثیرات:** -- اصلاح `ifnex-order-form.js` (مرحله ۲.۵ با Repeater) -- اصلاح `ifnex-order-form.blade.php` (HTML مرحله جدید) -- اصلاح API `POST /customer/orders` (پذیرش items[]) +**وضعیت:** به زمان دیپلوی منتقل شد -### ۳.۵.۳ — پشتیبانی چندزبانه (i18n) 🟡 مهم +این مورد به زمان دیپلوی منتقل شد تا همراه با تنظیمات Polylang روی سرور انجام بشه. سند کامل استراتژی در `IFNEX_I18N_Strategy.md` موجود است. -**مشکل:** سایت ۲ زبانه (فارسی + انگلیسی) هست با Polylang، ولی: -- تمام شورتکدها و فرمها فقط فارسی هستن -- پیامهای خطا و موفقیت فقط فارسی هستن -- فایلهای JS پیامهای hard-coded فارسی دارن -- فایلهای PHP رشتههای hard-coded فارسی دارن +### ۳.۵.۴ — بازطراحی PDFها ✅ -**راه حل:** -- استخراج تمام رشتههای متنی به فایلهای ترجمه -- استفاده از `__()` و `_e()` در وردپرس -- استفاده از `__('text', 'ifnex-bridge')` در فایلهای PHP پلاگین -- استفاده از `wp_localize_script` برای ارسال ترجمهها به JS -- افزودن فایلهای `.po/.mo` برای زبانهای فارسی و انگلیسی -- پشتیبانی از RTL/LTR بهصورت خودکار بر اساس زبان فعال +- ✅ نصب `picqer/php-barcode-generator` +- ✅ بازطراحی AWB با بارکد، From/To کامل، Value، Service، Type +- ✅ بازطراحی Invoice با جدول ۹ ردیفه، اعلان قانونی، بارکد پایین +- ✅ بازطراحی Label با اندازه A5 افقی و بارکد بزرگ +- ✅ اضافهشدن شرط DOC/PARCEL برای Invoice (فقط PARCEL فاکتور داره) +- ✅ بارکد بهصورت base64 embed (مطمئنترین روش) -**تأثیرات:** -- اصلاح تمام فایلهای `ifnex-bridge/includes/*.php` -- اصلاح `ifnex-order-form.js` (استفاده از متغیرهای ترجمه) -- ساخت فایلهای ترجمه در `ifnex-bridge/languages/` -- اصلاح CSS برای پشتیبانی RTL/LTR +### ۳.۵.۵ — اصلاحات فنی ✅ -### ۳.۵.۴ — تست و نهاییسازی 🟡 مهم +- ✅ اضافهشدن Enum casts به مدل Shipment (status, direction, type) +- ✅ اصلاح متد `deselectAfterCompletion` → `deselectRecordsAfterCompletion` +- ✅ Migration برای ستونهای `row_number` و `unit_price` در shipment_items +- ✅ Migration برای nullable کردن `name` +- ✅ اصلاح متدهای Enum (DocNormal/DocEconomy بهجای DOC_NORMAL/DOC_ECONOMY) -- [ ] تست تولید PDF با بارکد -- [ ] تست Multi-Package -- [ ] تست Invoice Form برای PARCEL -- [ ] تست زبان انگلیسی -- [ ] دیپلوی روی سرور -- [ ] تست نهایی روی سرور +### ۳.۵.۶ — تست ترکینگ ✅ + +- ✅ اصلاح API لاراول (TrackController) با `status_label` +- ✅ بازطراحی صفحه رهگیری وردپرس با timeline زیبا +- ✅ باکس وضعیت با badge رنگی بر اساس status +- ✅ grid اطلاعات کامل (۸ فیلد) +- ✅ timeline با تاریخ، توضیحات، لوکیشن و منبع +- ✅ بخش شرکتهای حمل +- ✅ تست موفق با محموله چندمرحلهای + +### ۳.۵.۷ — تست و نهاییسازی ✅ + +- ✅ تست تولید PDF با بارکد +- ✅ تست Multi-Package +- ✅ تست Invoice Form برای PARCEL +- ✅ تست ترکینگ چندمرحلهای +- ⏳ دیپلوی نهایی روی سرور (بعد از جلسه) --- diff --git a/03_WordPress/wp-content/plugins/ifnex-bridge/includes/tracking-form.php b/03_WordPress/wp-content/plugins/ifnex-bridge/includes/tracking-form.php index dc1ab7f..3b36312 100644 --- a/03_WordPress/wp-content/plugins/ifnex-bridge/includes/tracking-form.php +++ b/03_WordPress/wp-content/plugins/ifnex-bridge/includes/tracking-form.php @@ -11,7 +11,6 @@ if ( ! defined( 'ABSPATH' ) ) { add_action('wp_footer', 'ifnex_tracking_form_scripts'); function ifnex_tracking_form_scripts() { - // فقط اگر شورتکد در صفحه وجود دارد، اسکریپت را لود کن global $post; if (is_a($post, 'WP_Post') && has_shortcode($post->post_content, 'ifnex_tracking_form')) { ?> @@ -22,12 +21,12 @@ function ifnex_tracking_form_scripts() { form.addEventListener('submit', function(e) { e.preventDefault(); - + var input = document.getElementById('ifnex-awb-input'); var resultDiv = document.getElementById('ifnex-tracking-result'); var btn = document.getElementById('ifnex-track-btn'); var awb = input.value.trim(); - + if (!awb) { resultDiv.innerHTML = '
لطفاً شماره بارنامه را وارد کنید.
'; resultDiv.style.display = 'block'; @@ -37,21 +36,25 @@ function ifnex_tracking_form_scripts() { btn.disabled = true; btn.textContent = 'در حال جستجو...'; resultDiv.style.display = 'block'; - resultDiv.innerHTML = 'در حال جستجو...
'; + resultDiv.innerHTML = '⏳ در حال جستجو...
'; var xhr = new XMLHttpRequest(); - xhr.open('POST', '', true); + xhr.open('POST', '', true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.onload = function() { btn.disabled = false; - btn.textContent = ''; - + btn.textContent = 'رهگیری'; + if (xhr.status === 200) { - var data = JSON.parse(xhr.responseText); - if (data.success) { - resultDiv.innerHTML = data.html; - } else { - resultDiv.innerHTML = '' + data.message + '
'; + try { + var data = JSON.parse(xhr.responseText); + if (data.success) { + resultDiv.innerHTML = data.html; + } else { + resultDiv.innerHTML = '' + (data.message || 'خطا') + '
'; + } + } catch (err) { + resultDiv.innerHTML = 'پاسخ نامعتبر از سرور.
'; } } else { resultDiv.innerHTML = 'خطا در ارتباط با سرور.
'; @@ -59,20 +62,19 @@ function ifnex_tracking_form_scripts() { }; xhr.onerror = function() { btn.disabled = false; - btn.textContent = ''; + btn.textContent = 'رهگیری'; resultDiv.innerHTML = 'خطا در ارتباط با سرور.
'; }; xhr.send('action=ifnex_track_shipment&awb=' + encodeURIComponent(awb)); }); }); + false, 'message' => 'شماره بارنامه وارد نشده است.')); return; @@ -164,44 +299,129 @@ function ifnex_track_shipment_ajax() { return; } + // پشتیبانی از هر دو فرمت خروجی API (data.shipment یا مستقیم) + $shipment = $result['data']['shipment'] ?? $result; + $events = $result['data']['tracking_events'] ?? $result['timeline'] ?? array(); + $carriers = $result['data']['carrier_mappings'] ?? $result['carrier_mappings'] ?? array(); + // ساخت HTML نتیجه ob_start(); ?> -نوع:
-جهت:
- -فرستنده:
- - -گیرنده:
- -هنوز تراکنشی ثبت نشده است.
', - )); - return; - } - - ob_start(); - ?> -کد پیگیری:
- -