diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index ed38371..8b344ba 100644 Binary files a/core/__pycache__/views.cpython-311.pyc and b/core/__pycache__/views.cpython-311.pyc differ diff --git a/core/templates/core/barcode_labels.html b/core/templates/core/barcode_labels.html index f792fd0..15ad3dd 100644 --- a/core/templates/core/barcode_labels.html +++ b/core/templates/core/barcode_labels.html @@ -219,11 +219,8 @@ page-break-after: always; box-sizing: border-box; - /* Use Flexbox for Grid Layout - More reliable for print */ - display: flex !important; - flex-wrap: wrap !important; - justify-content: flex-start !important; - align-items: flex-start !important; + /* Revert to Block + Float for reliability in all print engines */ + display: block !important; } /* Direct print container override */ @@ -238,13 +235,24 @@ box-sizing: border-box; text-align: center; overflow: hidden; - display: flex; + /* Float strategy for grid */ + float: left !important; + /* Keep flex for INTERNAL content alignment only */ + display: flex !important; flex-direction: column; justify-content: center; align-items: center; - /* REMOVED width: 100% to prevent full-width expansion */ + page-break-inside: avoid; - float: left; /* Fallback */ + page-break-after: avoid; + margin: 0 !important; + } + + /* Clearfix for sheet if needed, though usually fixed height handles it */ + .label-sheet::after { + content: ""; + display: table; + clear: both; } /* --- SHEET CONFIGURATIONS (Flexbox + Explicit Dimensions) --- */ diff --git a/core/templates/core/invoices.html b/core/templates/core/invoices.html index 30d4f09..aa7a1bf 100644 --- a/core/templates/core/invoices.html +++ b/core/templates/core/invoices.html @@ -112,6 +112,11 @@ {% 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