From 48923270af16e110c489bf774d5401bd7975e509 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Wed, 11 Feb 2026 04:45:32 +0000 Subject: [PATCH] Autosave: 20260211-044531 --- core/__pycache__/views.cpython-311.pyc | Bin 107013 -> 108467 bytes core/templates/core/barcode_labels.html | 24 ++++--- core/templates/core/invoices.html | 86 ++++++++++++++++++++++++ core/templates/core/purchases.html | 37 ++++++++++ core/views.py | 46 +++++++++++-- 5 files changed, 180 insertions(+), 13 deletions(-) diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index ed38371fedd97b7adc2bdb34ae7bed8cd9d3f031..8b344bae98a8ba06e4ec916f2f4767e49985f1df 100644 GIT binary patch delta 7469 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 IHT3rVH?d5es{jB1 delta 6627 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 kKCTfp;MJg*06&)^+|aow-mix={x#@{-_~K<3 {% endif %} + @@ -202,5 +207,86 @@ {% include "core/pagination.html" with page_obj=sales %} + + + + + {% endblock %} \ No newline at end of file diff --git a/core/templates/core/purchases.html b/core/templates/core/purchases.html index 3b9da07..db5c412 100644 --- a/core/templates/core/purchases.html +++ b/core/templates/core/purchases.html @@ -15,6 +15,43 @@ + +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + + + +
+
+
+
+ {% if messages %}
{% for message in messages %} diff --git a/core/views.py b/core/views.py index 90d3046..baf20a0 100644 --- a/core/views.py +++ b/core/views.py @@ -733,19 +733,55 @@ def delete_sale_return(request, pk): # --- Purchases --- -@login_required @login_required def purchases(request): - purchases = Purchase.objects.all().order_by('-created_at') + # Base QuerySet + purchases_qs = Purchase.objects.select_related('supplier', 'created_by').all().order_by('-created_at') + + # Filtering + search_query = request.GET.get('q', '') + start_date = request.GET.get('start_date') + end_date = request.GET.get('end_date') + supplier_id = request.GET.get('supplier') + + if search_query: + purchases_qs = purchases_qs.filter( + Q(invoice_number__icontains=search_query) | + Q(notes__icontains=search_query) | + Q(id__icontains=search_query) + ) + + if start_date: + purchases_qs = purchases_qs.filter(created_at__date__gte=start_date) + + if end_date: + purchases_qs = purchases_qs.filter(created_at__date__lte=end_date) + + if supplier_id: + purchases_qs = purchases_qs.filter(supplier_id=supplier_id) + + # Pagination + paginator = Paginator(purchases_qs, 20) + page_number = request.GET.get('page') + page_obj = paginator.get_page(page_number) + + # Context Data payment_methods = PaymentMethod.objects.filter(is_active=True) site_settings = SystemSetting.objects.first() if not site_settings: site_settings = SystemSetting.objects.create() - + + suppliers = Supplier.objects.all().order_by('name') + return render(request, 'core/purchases.html', { - 'purchases': purchases, + 'purchases': page_obj, 'payment_methods': payment_methods, - 'site_settings': site_settings + 'site_settings': site_settings, + 'suppliers': suppliers, + 'search_query': search_query, + 'start_date': start_date, + 'end_date': end_date, + 'selected_supplier': int(supplier_id) if supplier_id and supplier_id.isdigit() else None }) @login_required