forked from hesabix/arc
145 lines
5.4 KiB
Markdown
Executable file
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. ✅ **اعتبارسنجی**: خواندن صحیح اعداد با جداکننده
|
|
|
|
## 🎯 نتیجه
|
|
|
|
دیالوگ ویرایش آیتم حالا:
|
|
- ✅ **زیباتر** است (طراحی مدرن)
|
|
- ✅ **کاربردیتر** است (جداکننده هزارگان)
|
|
- ✅ **قابل اعتماد** است (ذخیره صحیح قیمتها)
|
|
- ✅ **حرفهای** است (آیکونها و رنگبندی)
|
|
|
|
تمام مشکلات برطرف شد! 🎉
|
|
|