9 KiB
Executable file
9 KiB
Executable file
TODO: پیادهسازی کامل قابلیت چاپ فاکتور بعد از صدور
این فایل شامل لیست کارهای لازم برای پیادهسازی کامل قابلیت "چاپ فاکتور بعد از صدور" در صفحه فاکتور جدید است.
وضعیت فعلی
مشکلات شناسایی شده:
- ✅ UI برای تنظیمات چاپ وجود دارد اما اجرا نمیشود
- ✅ تنظیمات چاپ (پرینتر، سایز کاغذ، قالب) hard-coded هستند
- ✅ متد دریافت PDF در
InvoiceServiceوجود ندارد - ✅ شناسه فاکتور از پاسخ
createInvoiceاستخراج نمیشود - ✅ بعد از ذخیره فاکتور، چاپ انجام نمیشود
قابلیتهای موجود:
- ✅ API endpoint برای دریافت PDF:
/invoices/business/{business_id}/{invoice_id}/pdf - ✅ API از query parameters
paper_sizeوorientationپشتیبانی میکند - ✅ API از
template_idپشتیبانی میکند - ✅ سیستم تنظیمات چاپ کسبوکار (
BusinessPrintSettings) وجود دارد - ✅
ApiClient.downloadPdf()برای دانلود PDF موجود است
کارهای لازم برای پیادهسازی
1. پیادهسازی اولیه چاپ بعد از ذخیره (MVP)
1.1. افزودن متد دریافت PDF به InvoiceService
- افزودن متد
downloadInvoicePdf()به کلاسInvoiceService - پشتیبانی از پارامترهای
paper_size,orientation,template_id - استفاده از endpoint موجود:
/invoices/business/{business_id}/{invoice_id}/pdf
1.2. اصلاح متد _saveInvoice در NewInvoicePage
- استخراج
idفاکتور از پاسخcreateInvoice - بررسی وضعیت
_printAfterSave - در صورت فعال بودن، دانلود PDF بعد از ذخیره موفق
- مدیریت خطا در صورت عدم موفقیت در چاپ
1.3. استفاده از تنظیمات پیشفرض
- استفاده از
paper_sizeوorientationاز تنظیمات کسبوکار (در صورت موجود بودن) - استفاده از
template_idاز تنظیمات کسبوکار (در صورت موجود بودن)
2. بهبود UI و تنظیمات چاپ
2.1. بارگذاری تنظیمات چاپ کسبوکار
- بارگذاری تنظیمات چاپ از
BusinessApiService.getPrintSettings() - استفاده از تنظیمات اختصاصی نوع فاکتور (در صورت موجود بودن)
- استفاده از تنظیمات عمومی (در صورت عدم وجود تنظیمات اختصاصی)
2.2. لیست پرینترهای واقعی
- بررسی امکان استفاده از Web Printing API در Flutter Web
- پیادهسازی دریافت لیست پرینترهای سیستم (در صورت امکان)
- در صورت عدم امکان، استفاده از تنظیمات ذخیرهشده کاربر
- جایگزینی لیست hard-coded با لیست داینامیک
نکته: در Flutter Web، چاپ مستقیم به پرینتر از طریق JavaScript امکانپذیر است:
- استفاده از
window.print()برای چاپ PDF - استفاده از Web Printing API (در صورت پشتیبانی مرورگر)
- استفاده از
html.windowبرای دسترسی به API های مرورگر
2.3. لیست قالبهای چاپ واقعی
- بارگذاری لیست قالبهای چاپ از API
- استفاده از
ReportTemplateServiceبرای دریافت قالبهای موجود - فیلتر قالبها بر اساس
module_key: "invoices"وsubtype: "detail" - جایگزینی لیست hard-coded با لیست داینامیک
2.4. سایز کاغذ و جهت
- استفاده از لیست استاندارد سایزهای کاغذ (A4, A5, A6, Letter, Legal, 80mm, ...)
- پشتیبانی از جهت عمودی (portrait) و افقی (landscape)
- استفاده از تنظیمات پیشفرض از
BusinessPrintSettings
3. قابلیت "فاکتور رسمی"
3.1. تعریف و پیادهسازی
- تعریف دقیق "فاکتور رسمی" (احتمالاً شامل مهر و امضا)
- بررسی اینکه آیا این قابلیت باید از
BusinessPrintSettings.show_stampاستفاده کند - در صورت نیاز، افزودن پارامتر
is_officialبه API endpoint
3.2. یکپارچهسازی با تنظیمات کسبوکار
- استفاده از
show_stampوshow_logoاز تنظیمات کسبوکار - نمایش/عدم نمایش مهر و امضا بر اساس تنظیمات
4. چاپ مستقیم به پرینتر (پیشرفته)
4.1. بررسی امکانپذیری
- بررسی پشتیبانی مرورگر از Web Printing API
- بررسی امکان استفاده از
window.print()در Flutter Web - بررسی نیاز به استفاده از پکیجهای third-party
4.2. پیادهسازی (در صورت امکان)
- استفاده از
dart:htmlبرای دسترسی بهwindow.print() - ایجاد یک iframe موقت برای نمایش PDF
- فراخوانی
window.print()روی iframe - مدیریت خطا و fallback به دانلود PDF
نکته: در Flutter Web، میتوان از کد زیر استفاده کرد:
import 'dart:html' as html;
import 'dart:js' as js;
// برای چاپ مستقیم
html.window.print();
5. بهبود تجربه کاربری
5.1. مدیریت وضعیت چاپ
- نمایش loading indicator هنگام دانلود PDF
- نمایش پیام موفقیت/خطا بعد از چاپ
- عدم هدایت به لیست فاکتورها تا زمان تکمیل چاپ (در صورت نیاز)
5.2. ذخیره تنظیمات کاربر
- ذخیره تنظیمات چاپ آخرین استفاده شده در localStorage
- بارگذاری تنظیمات ذخیرهشده در بارگذاری صفحه
- استفاده از تنظیمات پیشفرض در صورت عدم وجود تنظیمات ذخیرهشده
5.3. اعتبارسنجی تنظیمات
- بررسی صحت
template_idقبل از ارسال به API - بررسی صحت
paper_sizeوorientation - نمایش پیام خطا در صورت تنظیمات نامعتبر
6. تست و مستندسازی
6.1. تست عملکرد
- تست چاپ بعد از ذخیره فاکتور
- تست با انواع مختلف فاکتور (فروش، خرید، تولید، ...)
- تست با تنظیمات مختلف (سایز کاغذ، جهت، قالب)
- تست مدیریت خطا
6.2. مستندسازی
- مستندسازی نحوه استفاده از قابلیت
- مستندسازی تنظیمات چاپ
- مستندسازی API endpoints مرتبط
اولویتبندی
اولویت بالا (MVP):
- ✅ افزودن متد دریافت PDF به InvoiceService
- ✅ اصلاح متد
_saveInvoiceبرای چاپ بعد از ذخیره - ✅ استفاده از تنظیمات پیشفرض از BusinessPrintSettings
اولویت متوسط:
- ✅ بارگذاری تنظیمات چاپ کسبوکار
- ✅ لیست قالبهای چاپ واقعی
- ✅ بهبود تجربه کاربری (loading, error handling)
اولویت پایین (ویژگیهای پیشرفته):
- ✅ لیست پرینترهای واقعی
- ✅ چاپ مستقیم به پرینتر
- ✅ ذخیره تنظیمات کاربر
نکات فنی
API Endpoints مرتبط:
GET /invoices/business/{business_id}/{invoice_id}/pdf- دریافت PDF فاکتور- Query parameters:
template_id,paper_size,orientation,disposition
- Query parameters:
GET /businesses/{business_id}/print-settings- دریافت تنظیمات چاپPUT /businesses/{business_id}/print-settings- بهروزرسانی تنظیمات چاپ
فایلهای مرتبط:
hesabixUI/hesabix_ui/lib/pages/business/new_invoice_page.dart- صفحه فاکتور جدیدhesabixUI/hesabix_ui/lib/services/invoice_service.dart- سرویس فاکتورhesabixUI/hesabix_ui/lib/services/business_api_service.dart- سرویس کسبوکارhesabixUI/hesabix_ui/lib/core/api_client.dart- کلاینت APIhesabixAPI/adapters/api/v1/invoices.py- API endpoint فاکتورهاhesabixAPI/app/services/business_service.py- سرویس کسبوکار (backend)
مدلهای مرتبط:
BusinessPrintSettings- تنظیمات چاپ کسبوکارReportTemplate- قالبهای گزارش
تاریخچه تغییرات
- 2024-XX-XX: ایجاد فایل TODO اولیه