add name kala anbar
This commit is contained in:
1 parent
7a305b8e19
commit
767e84cbcf
2 files changed
+24
-16
No files matched your search
+13
-9
@@ -188,10 +188,9 @@ def report(request):
|
||||
@permission_required('admin_panel.ViewReportMali', raise_exception=True)
|
||||
def inventory_movements_report(request):
|
||||
"""
|
||||
گزارش جامع گردش و خروج کالا از انبار به تفکیک نوع تراکنش (گارانتی، اشانتیون، فروش و...)،
|
||||
کاربر ثبتکننده، انبار و بازه زمانی شمسی.
|
||||
گزارش جامع گردش و خروج کالا از انبار به همراه فیلتر متنی نام کالا،
|
||||
نوع تراکنش، کاربر، انبار و بازه زمانی شمسی.
|
||||
"""
|
||||
# واکشی اطلاعات اولیه برای 드롭داونهای فیلتر در قالب
|
||||
all_users = User.objects.all().order_by('first_name')
|
||||
all_stores = StoreRoom.objects.all()
|
||||
movement_choices = ProductInStore.MovementType.choices
|
||||
@@ -200,26 +199,30 @@ def inventory_movements_report(request):
|
||||
selected_type = request.GET.get('movement_type', '')
|
||||
selected_user = request.GET.get('user_id', '')
|
||||
selected_store = request.GET.get('store_id', '')
|
||||
selected_product_name = request.GET.get('product_name', '').strip() # فیلد جدید جستجوی نام کالا
|
||||
az_tarikh = request.GET.get('azTarikh', '')
|
||||
ta_tarikh = request.GET.get('taTarikh', '')
|
||||
|
||||
# ۱. کوئری پایه: اعمال select_related جهت جلوگیری از فاجعه N+1 در پایگاه داده
|
||||
# ۱. کوئری پایه بهینه
|
||||
movements_list = ProductInStore.objects.select_related(
|
||||
'Product', 'StoreRoom', 'factor__customer', 'factor__user'
|
||||
).filter(year=1400).order_by('-createdDT')
|
||||
|
||||
# ۲. اعمال فیلترهای پویای کاربر
|
||||
# ۲. اعمال فیلترهای پویا
|
||||
if selected_type:
|
||||
movements_list = movements_list.filter(movement_type=selected_type)
|
||||
|
||||
if selected_user:
|
||||
# فیلتر بر اساس کاربری که فاکتور خروج کالا را در سیستم ثبت کرده است
|
||||
movements_list = movements_list.filter(factor__user__id=_safe_int(selected_user))
|
||||
|
||||
if selected_store:
|
||||
movements_list = movements_list.filter(StoreRoom__id=_safe_int(selected_store))
|
||||
|
||||
# ۳. پردازش بازه زمانی (تبدیل تایماستمپ جاوااسکریپت به تاریخ میلادی)
|
||||
if selected_product_name:
|
||||
# فیلتر متنی حساس نبودن به حروف بزرگ و کوچک (Case-Insensitive Contains)
|
||||
movements_list = movements_list.filter(Product__product_name__icontains=selected_product_name)
|
||||
|
||||
# ۳. پردازش بازه زمانی
|
||||
if az_tarikh:
|
||||
try:
|
||||
az_dt = datetime.datetime.fromtimestamp(int(az_tarikh) / 1000.0)
|
||||
@@ -234,13 +237,13 @@ def inventory_movements_report(request):
|
||||
except (ValueError, TypeError):
|
||||
pass
|
||||
|
||||
# ۴. محاسبه آماری سریع روی نتایج فیلتر شده (بدون نیاز به پایش دستی در پایتون)
|
||||
# ۴. محاسبه آماری سریع دیتابیس روی نتایج فیلتر شده
|
||||
summary_stats = movements_list.aggregate(
|
||||
total_out_qty=Sum('s_out'),
|
||||
total_in_qty=Sum('s_in')
|
||||
)
|
||||
|
||||
# ۵. صفحهبندی نتایج (۵۰ رکورد در هر صفحه جهت حفظ سرعت لود مرورگر)
|
||||
# ۵. صفحهبندی نتایج
|
||||
paginator = Paginator(movements_list, 50)
|
||||
page_number = request.GET.get('page')
|
||||
page_obj = paginator.get_page(page_number)
|
||||
@@ -255,6 +258,7 @@ def inventory_movements_report(request):
|
||||
'movement_type': selected_type,
|
||||
'user_id': _safe_int(selected_user) if selected_user else '',
|
||||
'store_id': _safe_int(selected_store) if selected_store else '',
|
||||
'product_name': selected_product_name, # ارسال فیلد جدید به قالب برای حفظ مقدار ورودی
|
||||
'azTarikh': az_tarikh,
|
||||
'taTarikh': ta_tarikh,
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user