5.5 KiB
Executable file
سناریوی حفظ inventory_transfer در Backend و حذف از Frontend
سوال اصلی
آیا میتوانیم inventory_transfer را در Backend حفظ کنیم (برای محاسبات) اما از Frontend حذف کنیم (عدم نمایش به کاربر)؟
پاسخ: ✅ بله، کاملاً امکانپذیر است
وضعیت فعلی
Backend (باید حفظ شود):
- ✅
warehouse_service.py: ایجاد سند حسابداری باdocument_type='inventory_transfer' - ✅
kardex_service.py: mapping برای نمایش نام در کاردکس - ✅
document_repository.py: mapping برای نمایش نام - ✅
invoice_service.py: استفاده در_iter_product_movementsبرای محاسبات موجودی
Frontend (باید حذف شود):
- ✅
inventory_transfers_page.dart- حذف شده - ✅
inventory_transfer_form_dialog.dart- حذف شده - ✅
inventory_transfer_service.dart- حذف شده - ✅ منوی "حوالهها" (shipments) - حذف شده
- ✅ route
/business/:business_id/inventory-transfers- حذف شده - ⚠️
kardex_page.dart: فیلترinventory_transfer- باید حذف شود - ⚠️
document_model.dart: case برایinventory_transfer- باید حذف شود
آیا کاربر نیاز به بخش inventory_transfers دارد؟
❌ خیر، کاربر نیازی به ایجاد مستقیم inventory_transfer ندارد:
-
کاربر میتواند از طریق Warehouse Documents انتقال ایجاد کند:
- ایجاد Warehouse Document با
doc_type='transfer' - پست کردن آن
- خودکار یک سند حسابداری با
document_type='inventory_transfer'ایجاد میشود
- ایجاد Warehouse Document با
-
کاربر نیازی به مشاهده لیست inventory_transfers ندارد:
- انتقالها از طریق Warehouse Documents مدیریت میشوند
- سند حسابداری در کاردکس نمایش داده میشود (که کافی است)
-
کاربر نیازی به ویرایش/حذف مستقیم inventory_transfer ندارد:
- ویرایش/حذف از طریق Warehouse Documents انجام میشود
- سند حسابداری به صورت خودکار بهروزرسانی میشود
مزایای این رویکرد
- ✅ حفظ محاسبات:
inventory_transferدر Backend حفظ میشود و در محاسبات استفاده میشود - ✅ سادهسازی UI: کاربر فقط با Warehouse Documents کار میکند
- ✅ تفکیک واضح: انتقال موجودی = Warehouse Document، سند حسابداری = فقط برای محاسبات
- ✅ عدم نیاز به migration: دادههای موجود حفظ میشوند
تغییرات لازم
Frontend - حذف از UI (اما حفظ در کاردکس):
1. kardex_page.dart - حذف فیلتر inventory_transfer:
فعلی:
FilterOption(value: 'inventory_transfer', label: t.warehouseTransfers),
باید حذف شود - چون کاربر نیازی به فیلتر کردن انتقالهای موجودی ندارد. اما همچنان در کاردکس نمایش داده میشود (به عنوان یک سند حسابداری).
یا میتوانیم نگه داریم - اگر کاربر بخواهد فقط انتقالهای موجودی را در کاردکس ببیند.
2. document_model.dart - حذف case برای inventory_transfer:
فعلی:
case 'inventory_transfer':
return 'انتقال موجودی';
باید حذف شود - چون کاربر نباید مستقیماً با inventory_transfer کار کند. اما میتوانیم از mapping در Backend استفاده کنیم.
یا میتوانیم نگه داریم - برای نمایش نام در کاردکس.
توصیه
گزینه 1: حذف کامل از Frontend (پیشنهادی)
حذف:
- فیلتر
inventory_transferازkardex_page.dart - case
inventory_transferازdocument_model.dart
نتیجه:
- کاربر نمیتواند فیلتر کند
- اما همچنان در کاردکس نمایش داده میشود (با نام از Backend)
- کاربر فقط با Warehouse Documents کار میکند
گزینه 2: حفظ در کاردکس (برای گزارشگیری)
نگه داشتن:
- فیلتر
inventory_transferدرkardex_page.dart - case
inventory_transferدرdocument_model.dart
نتیجه:
- کاربر میتواند فیلتر کند
- برای گزارشگیری مفید است
- اما همچنان نمیتواند مستقیماً ایجاد/ویرایش کند
نتیجهگیری
✅ بله، میتوانیم inventory_transfer را در Backend حفظ کنیم و از Frontend حذف کنیم:
- Backend: حفظ
inventory_transferبرای محاسبات و کاردکس - Frontend: حذف فیلتر و case (یا نگه داشتن برای گزارشگیری)
- کاربر: فقط با Warehouse Documents کار میکند
- محاسبات: همچنان از
inventory_transferاستفاده میشود
این بهترین رویکرد است چون:
- ✅ محاسبات حفظ میشود
- ✅ UI ساده میشود
- ✅ کاربر فقط با یک سیستم کار میکند (Warehouse Documents)