fix view change store

This commit is contained in:
javad committed 2026-06-10 22:57:55 +03:30
1 parent 15a6ca4fe2
commit c0939508eb
1 file changed
+21 -4
+21 -4
View File
@@ -9,11 +9,11 @@ from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse from django.http import HttpResponse
from django.urls import reverse from django.urls import reverse
from django.http import Http404, HttpResponseRedirect from django.http import Http404, HttpResponseRedirect
from django.db.models import Count, Sum from django.db.models import Count, Sum, Subquery, OuterRef, Value
from django.contrib.auth.models import Permission, User from django.contrib.auth.models import Permission, User
from django.contrib.auth import authenticate, login, logout from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.decorators import login_required, permission_required from django.contrib.auth.decorators import login_required, permission_required
from django.db.models.functions import Coalesce
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django.db.models import Q from django.db.models import Q
@@ -581,16 +581,33 @@ def store(request, s_id):
searchQS = request.POST.get('searchQS', '') searchQS = request.POST.get('searchQS', '')
mojodi = request.POST.get('mojodi', '') mojodi = request.POST.get('mojodi', '')
#return HttpResponse(mojodi 2) #return HttpResponse(mojodi 2)
# تعریف ساب‌کوئری کاملاً مستقل برای واکشی فیلد لحظه‌ای از آخرین تراکنش انبار
latest_stock_subquery = ProductInStore.objects.filter(
Product=OuterRef('pk'),
StoreRoom=storeO,
year=1400
).order_by('-createdDT', '-id').values('current_stock_at_time')[:1]
if searchQS !='': if searchQS !='':
productSum = Product.objects.filter(productinstore__StoreRoom=storeO ,productinstore__year=1400,product_name__contains=searchQS).annotate(mojodi=( Sum('productinstore__s_in') - Sum('productinstore__s_out') )) # محاسبات Sum شما دقیقاً حفظ شده و فیلد جدید به انتهای annotate اضافه شده است
productSum = Product.objects.filter(productinstore__StoreRoom=storeO ,productinstore__year=1400,product_name__contains=searchQS).annotate(
mojodi=( Sum('productinstore__s_in') - Sum('productinstore__s_out') ),
current_stock_at_time=Coalesce(Subquery(latest_stock_subquery), Value(0)) # فیلد مستقل جدید
)
if mojodi == "0": if mojodi == "0":
productSum = productSum.filter(mojodi__lte=0) productSum = productSum.filter(mojodi__lte=0)
searchStatus = True searchStatus = True
else: else:
productSum = Product.objects.filter(productinstore__StoreRoom=storeO ,productinstore__year=1400).annotate(mojodi=( Sum('productinstore__s_in') - Sum('productinstore__s_out') )) # محاسبات Sum شما دقیقاً حفظ شده و فیلد جدید به انتهای annotate اضافه شده است
productSum = Product.objects.filter(productinstore__StoreRoom=storeO ,productinstore__year=1400).annotate(
mojodi=( Sum('productinstore__s_in') - Sum('productinstore__s_out') ),
current_stock_at_time=Coalesce(Subquery(latest_stock_subquery), Value(0)) # فیلد مستقل جدید
)
if mojodi == "0": if mojodi == "0":
searchStatus = True searchStatus = True
productSum = productSum.filter(mojodi__lte=0) productSum = productSum.filter(mojodi__lte=0)
data = {'storeO': storeO,'productSum': productSum, 's_id': s_id, 'searchStatus': searchStatus, "mojodi": mojodi, 'djsearchQS':searchQS, 'productCategory': productCategory} data = {'storeO': storeO,'productSum': productSum, 's_id': s_id, 'searchStatus': searchStatus, "mojodi": mojodi, 'djsearchQS':searchQS, 'productCategory': productCategory}
return render(request, 'admin_panel/store.html', data) return render(request, 'admin_panel/store.html', data)