Watch
1
0
Fork
You've already forked Seyyed_arc
0
forked from hesabix/arc
Seyyed_arc/docs/QUICK_SALES_DIALOG_IMPROVEMENTS.md
2026-04-14 19:34:55 +03:30

145 lines
5.4 KiB
Markdown
Executable file

# بهبودهای دیالوگ ویرایش آیتم در فاکتور سریع
## ✅ تغییرات اعمال شده
### 1. ✅ بهبود ظاهر دیالوگ
#### تغییرات طراحی:
- **استفاده از Dialog به جای AlertDialog** برای ظاهر حرفه‌ای‌تر
- **هدر رنگی** با پس‌زمینه primaryContainer
- **آیکون‌های مناسب** برای هر فیلد
- **طراحی کارتی** با border radius و shadow
- **سازماندهی بهتر** با بخش‌بندی واضح
#### بهبودهای UI:
- هدر با رنگ primary و آیکون ویرایش
- نمایش نام محصول در هدر
- فیلدهای ورودی با پس‌زمینه و border radius
- آیکون‌های prefix و suffix برای هر فیلد
- باکس خلاصه محاسبات با طراحی بهتر
- دکمه‌های پایین با استایل حرفه‌ای‌تر
### 2. ✅ استفاده از جداکننده هزارگان
#### فیلدهای بهبود یافته:
- **تعداد**: با جداکننده هزارگان (مثال: 1,000)
- **قیمت واحد**: با جداکننده هزارگان (مثال: 100,000)
- **مبلغ تخفیف**: با جداکننده هزارگان (مثال: 5,000)
- **درصد تخفیف**: بدون اعشار (مثال: 10)
- **نرخ مالیات**: بدون اعشار (مثال: 9)
#### ویژگی‌های پیاده‌سازی شده:
- استفاده از `ThousandsSeparatorInputFormatter`
- استفاده از `EnglishDigitsFormatter` برای تبدیل ارقام فارسی به انگلیسی
- استفاده از `formatNumberForInput` برای نمایش اولیه
- استفاده از `parseFormattedNumber` برای خواندن مقادیر
### 3. ✅ رفع مشکل ذخیره قیمت
#### مشکل قبلی:
- قیمت فقط در سطح اصلی line ذخیره می‌شد
- اطلاعات قیمت در extra_info ذخیره نمی‌شد
- بعد از ثبت، قیمت‌ها در فاکتور نمایش داده نمی‌شد
#### راه‌حل پیاده‌سازی شده:
```dart
final extraInfoMap = <String, dynamic>{
'unit_price': item.unitPrice,
'line_discount': lineDiscount,
'tax_amount': taxAmount,
'line_total': lineTotal,
'unit_price_source': item.unitPriceSource,
'discount_type': item.discountType,
'discount_value': item.discountValue,
'tax_rate': item.taxRate,
// ... سایر اطلاعات
};
```
**اطلاعات ذخیره شده در extra_info:**
- `unit_price`: قیمت واحد
- `line_discount`: مبلغ تخفیف
- `tax_amount`: مبلغ مالیات
- `line_total`: مبلغ کل خط
- `unit_price_source`: منبع قیمت (base/manual/priceList)
- `discount_type`: نوع تخفیف
- `discount_value`: مقدار تخفیف
- `tax_rate`: نرخ مالیات
## 🎨 جزئیات بهبودهای UI
### هدر دیالوگ:
- پس‌زمینه `primaryContainer`
- آیکون ویرایش
- عنوان "ویرایش محصول"
- نام محصول زیر عنوان
### فیلدهای ورودی:
- پس‌زمینه `surfaceContainerHighest`
- Border radius 8px
- آیکون‌های prefix مناسب
- Suffix text (ریال، %)
- Hint text برای راهنمایی
### باکس خلاصه محاسبات:
- پس‌زمینه با opacity
- Border با رنگ outline
- آیکون calculator
- نمایش تمام محاسبات با جداکننده هزارگان
- رنگ‌بندی مناسب (قرمز برای تخفیف، primary برای مبلغ نهایی)
### دکمه‌ها:
- دکمه انصراف با آیکون
- دکمه ذخیره با آیکون check
- استایل Material Design 3
- Padding مناسب
## 📝 تغییرات فنی
### Import های جدید:
```dart
import '../../utils/number_normalizer.dart' as number_utils;
import '../../utils/number_formatters.dart';
```
### متدهای استفاده شده:
- `formatNumberForInput()`: برای نمایش اولیه با جداکننده
- `parseFormattedNumber()`: برای خواندن مقدار از فیلد
- `formatWithThousands()`: برای نمایش در خلاصه
- `ThousandsSeparatorInputFormatter`: برای فرمت خودکار هنگام تایپ
- `EnglishDigitsFormatter`: برای تبدیل ارقام فارسی
### ساختار جدید payload:
```dart
{
'product_id': ...,
'quantity': ...,
'unit_price': ..., // برای سازگاری با API
'extra_info': {
'unit_price': ..., // در extra_info هم ذخیره می‌شود
'line_discount': ...,
'tax_amount': ...,
'line_total': ...,
// ... سایر اطلاعات
}
}
```
## ✅ مشکلات حل شده
1. ✅ **ظاهر دیالوگ**: بهبود کامل با طراحی Material Design 3
2. ✅ **جداکننده هزارگان**: تمام فیلدهای عددی
3. ✅ **ذخیره قیمت**: قیمت در extra_info ذخیره می‌شود
4. ✅ **نمایش خلاصه**: با جداکننده هزارگان و آیکون‌ها
5. ✅ **اعتبارسنجی**: خواندن صحیح اعداد با جداکننده
## 🎯 نتیجه
دیالوگ ویرایش آیتم حالا:
- ✅ **زیباتر** است (طراحی مدرن)
- ✅ **کاربردی‌تر** است (جداکننده هزارگان)
- ✅ **قابل اعتماد** است (ذخیره صحیح قیمت‌ها)
- ✅ **حرفه‌ای** است (آیکون‌ها و رنگ‌بندی)
تمام مشکلات برطرف شد! 🎉