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 %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{% trans "Enter number with country code (e.g., 62...)" %}
+
+
+
+
+
+
+
+
{% 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