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

5.4 KiB
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 ذخیره نمی‌شد
  • بعد از ثبت، قیمت‌ها در فاکتور نمایش داده نمی‌شد

راه‌حل پیاده‌سازی شده:

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 های جدید:

import '../../utils/number_normalizer.dart' as number_utils;
import '../../utils/number_formatters.dart';

متدهای استفاده شده:

  • formatNumberForInput(): برای نمایش اولیه با جداکننده
  • parseFormattedNumber(): برای خواندن مقدار از فیلد
  • formatWithThousands(): برای نمایش در خلاصه
  • ThousandsSeparatorInputFormatter: برای فرمت خودکار هنگام تایپ
  • EnglishDigitsFormatter: برای تبدیل ارقام فارسی

ساختار جدید payload:

{
  '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. ✅ اعتبارسنجی: خواندن صحیح اعداد با جداکننده

🎯 نتیجه

دیالوگ ویرایش آیتم حالا:

  • ✅ زیباتر است (طراحی مدرن)
  • ✅ کاربردی‌تر است (جداکننده هزارگان)
  • ✅ قابل اعتماد است (ذخیره صحیح قیمت‌ها)
  • ✅ حرفه‌ای است (آیکون‌ها و رنگ‌بندی)

تمام مشکلات برطرف شد! 🎉