+
+
-
- {{ factor.create_date | toJalali }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- {{ factor.user.first_name }} {{ factor.user.last_name }}
+
+
+ {% if search_query or az_tarikh or ta_tarikh or filter_status != 'all' or filter_type != 'all' %}
+
+
+ وضعیت: نتایج در حال حاضر بر اساس فیلترهای انتخابی شما محدود شدهاند.
-
- {{ factor.amount }}
-
+
+ حذف فیلترها و نمایش همه فاکتورها
+
+
+ {% endif %}
+
+
+
+
+
+ | شماره |
+ نوع فاکتور |
+ تاریخ ثبت |
+ سررسید |
+ مبلغ (تومان) |
+ نوع پرداخت |
+ توضیحات / بابت |
+ کاربر ثبت کننده |
+ وضعیت |
+ عملیات |
+
+
+
+ {% if factorha %}
+ {% for factor in factorha %}
+
+
+ | {{ factor.id }} |
+
+
+ {% if factor.FactorType == 'Nasb' %}نصب
+ {% elif factor.FactorType == 'Khadamat' %}خدمات
+ {% elif factor.FactorType == 'Garranty' %}گارانتی
+ {% else %}{{ factor.FactorType }}{% endif %}
+ |
+
+ {{ factor.create_date | toJalali }} |
+
+
+ {% if factor.deadline %}
+ {{ factor.deadline | toJalali }}
+ {% else %}
+ —
+ {% endif %}
+ |
+
+ {{ factor.amount }} |
+
+
+ {% if factor.PayType == 'naghd' %}نقدی
+ {% elif factor.PayType == 'cardToCard' %}کارت به کارت
+ {% elif factor.PayType == 'kartKhan' %}کارتخوان
+ {% elif factor.PayType == 'nesiye' %}نسیه
+ {% elif factor.PayType == 'check' %}چک
+ {% else %}{{ factor.PayType }}{% endif %}
+ |
+
+
+ {{ factor.desc | default:"—" }}
+ |
+
+ {{ factor.user.first_name }} {{ factor.user.last_name }} |
+
+
+ {% if not factor.is_active %}
+ باطل شده
+ {% else %}
+ {% if factor.pay_status == 'paid' %}
+ پرداخت شده
+ {% elif factor.pay_status == 'unpaid' %}
+ معوق / مانده
+ {% elif factor.pay_status == 'cancell' %}
+ لغو شده
+ {% else %}
+ {{ factor.pay_status }}
+ {% endif %}
+ {% endif %}
+ |
+
+
+
+ مشاهده
+
+ |
+
+
+ {% endfor %}
+ {% else %}
+
+ |
+ هیچ فاکتوری با فیلترهای مشخص شده یافت نشد.
+ |
+
+ {% endif %}
+
+
-
- {% endfor %}
+
+
{% endblock %}
-
{% block BodyCustomer2 %}
+{% endblock %}
+{% block jsEnd %}
+{{ block.super }}
+
{% endblock %}
\ No newline at end of file
diff --git a/admin_panel/views.py b/admin_panel/views.py
index ea39851..95e9834 100644
--- a/admin_panel/views.py
+++ b/admin_panel/views.py
@@ -693,14 +693,68 @@ def customerNew2(request ,c_id):
@login_required(login_url='/panel/p_login/')
-def customerFactors(request ,c_id):
- customer = Customer.objects.get(id=c_id)
+def customerFactors(request, c_id):
+ customer = get_object_or_404(Customer, id=c_id)
categorys = ProductCategory.objects.all()
- factorha = Factor.objects.filter(customer__id = c_id).order_by('-create_date')
- #all_prd = serializers.serialize("json", all_prda)
- #return JsonResponse(all_prd,safe = False)
+
+ # کوئری پایه برای دریافت همه فاکتورهای این مشتری
+ factor_qs = Factor.objects.filter(customer=customer)
+
+ # دریافت پارامترهای فیلتر و جستجو از آدرس URL
+ search_query = request.GET.get('search_factor', '').strip()
+ filter_status = request.GET.get('status', 'all')
+ filter_type = request.GET.get('type', 'all')
+ az_tarikh = request.GET.get('az_tarikh', '').strip()
+ ta_tarikh = request.GET.get('ta_tarikh', '').strip()
+
+ # ۱. اعمال فیلتر جستجو (شناسه فاکتور یا متن توضیحات)
+ if search_query:
+ if search_query.isdigit():
+ factor_qs = factor_qs.filter(models.Q(id=int(search_query)) | models.Q(desc__icontains=search_query))
+ else:
+ factor_qs = factor_qs.filter(models.Q(desc__icontains=search_query))
+
+ # ۲. اعمال فیلتر وضعیت پرداخت و حذف نرم
+ if filter_status != 'all':
+ if filter_status == 'deleted':
+ factor_qs = factor_qs.filter(is_active=False)
+ else:
+ factor_qs = factor_qs.filter(pay_status=filter_status, is_active=True)
+
+ # ۳. اعمال فیلتر نوع فاکتور (نصب، خدمات، گارانتی)
+ if filter_type != 'all':
+ factor_qs = factor_qs.filter(FactorType=filter_type)
+
+ # ۴. اعمال فیلتر تاریخ شروع (از تاریخ)
+ if az_tarikh:
+ az_gregorian = _parse_jalali_date(az_tarikh)
+ if az_gregorian:
+ az_datetime = datetime.datetime.combine(az_gregorian, datetime.time.min)
+ factor_qs = factor_qs.filter(create_date__gte=az_datetime)
+
+ # ۵. اعمال فیلتر تاریخ پایان (تا تاریخ)
+ if ta_tarikh:
+ ta_gregorian = _parse_jalali_date(ta_tarikh)
+ if ta_gregorian:
+ ta_datetime = datetime.datetime.combine(ta_gregorian, datetime.time.max)
+ factor_qs = factor_qs.filter(create_date__lte=ta_datetime)
+
+ # مرتبسازی بر اساس آخرین تاریخ ایجاد
+ factorha = factor_qs.order_by('-create_date')
+
dateNow = datetime.datetime.now().date
- data = {'customer': customer, 'categorys': categorys, 'dateNow': dateNow, 'factorha': factorha}
+
+ data = {
+ 'customer': customer,
+ 'categorys': categorys,
+ 'dateNow': dateNow,
+ 'factorha': factorha,
+ 'search_query': search_query,
+ 'filter_status': filter_status,
+ 'filter_type': filter_type,
+ 'az_tarikh': az_tarikh,
+ 'ta_tarikh': ta_tarikh
+ }
return render(request, 'admin_panel/customerIDFactor.html', data)
@login_required(login_url='/panel/p_login/')