diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index 98e1a48..ed38371 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/supplier_payments.html b/core/templates/core/supplier_payments.html index cb3bd3e..bf91b1e 100644 --- a/core/templates/core/supplier_payments.html +++ b/core/templates/core/supplier_payments.html @@ -5,14 +5,24 @@ {% block content %}
-
+

{% trans "Supplier Payments" %}

{% trans "History of payments made to suppliers" %}

- - {% trans "Purchase Invoices" %} - + +
diff --git a/core/templates/core/users.html b/core/templates/core/users.html index d053fe9..3616eba 100644 --- a/core/templates/core/users.html +++ b/core/templates/core/users.html @@ -311,16 +311,21 @@ {% regroup permissions by content_type as perm_list %} {% for g in perm_list %} - + -
{{ g.grouper.name|capfirst }}
-
{{ g.grouper.app_label }}
+
+ + +
{% for perm in g.list %} {% if "view" in perm.codename %}
- +
{% endif %} {% endfor %} @@ -329,7 +334,7 @@ {% for perm in g.list %} {% if "add" in perm.codename %}
- +
{% endif %} {% endfor %} @@ -338,7 +343,7 @@ {% for perm in g.list %} {% if "change" in perm.codename %}
- +
{% endif %} {% endfor %} @@ -347,7 +352,7 @@ {% for perm in g.list %} {% if "delete" in perm.codename %}
- +
{% endif %} {% endfor %} @@ -401,16 +406,21 @@ {% regroup permissions by content_type as perm_list %} {% for g in perm_list %} - + -
{{ g.grouper.name|capfirst }}
-
{{ g.grouper.app_label }}
+
+ + +
{% for perm in g.list %} {% if "view" in perm.codename %}
- +
{% endif %} {% endfor %} @@ -419,7 +429,7 @@ {% for perm in g.list %} {% if "add" in perm.codename %}
- +
{% endif %} {% endfor %} @@ -428,7 +438,7 @@ {% for perm in g.list %} {% if "change" in perm.codename %}
- +
{% endif %} {% endfor %} @@ -437,7 +447,7 @@ {% for perm in g.list %} {% if "delete" in perm.codename %}
- +
{% endif %} {% endfor %} @@ -511,6 +521,8 @@ document.addEventListener('DOMContentLoaded', function() { // Reset checkboxes document.querySelectorAll('.edit-group-perm').forEach(cb => cb.checked = false); + // Reset Select All checkboxes in Edit Modal + document.querySelectorAll('.module-select-all-edit').forEach(cb => cb.checked = false); // Fetch group permissions fetch(`/api/group-details/${id}/`) @@ -525,6 +537,24 @@ document.addEventListener('DOMContentLoaded', function() { }); }); }); + + // Handle "Select All" for Add Group Modal + document.querySelectorAll('.module-select-all').forEach(master => { + master.addEventListener('change', function() { + const moduleId = this.dataset.target; + const checkboxes = document.querySelectorAll(`.module-${moduleId}`); + checkboxes.forEach(cb => cb.checked = this.checked); + }); + }); + + // Handle "Select All" for Edit Group Modal + document.querySelectorAll('.module-select-all-edit').forEach(master => { + master.addEventListener('change', function() { + const moduleId = this.dataset.target; + const checkboxes = document.querySelectorAll(`.module-edit-${moduleId}`); + checkboxes.forEach(cb => cb.checked = this.checked); + }); + }); }); {% endblock %} \ No newline at end of file diff --git a/core/views.py b/core/views.py index 9bb5ec8..90d3046 100644 --- a/core/views.py +++ b/core/views.py @@ -851,10 +851,28 @@ def delete_purchase(request, pk): messages.success(request, _("Purchase deleted.")) return redirect('purchases') +@login_required @login_required def supplier_payments(request): - payments = PurchasePayment.objects.all().order_by('-payment_date') - return render(request, 'core/supplier_payments.html', {'payments': payments}) + payments = PurchasePayment.objects.select_related('purchase', 'purchase__supplier', 'created_by').all().order_by('-payment_date') + + search_query = request.GET.get('search', '') + if search_query: + payments = payments.filter( + Q(purchase__invoice_number__icontains=search_query) | + Q(purchase__supplier__name__icontains=search_query) | + Q(notes__icontains=search_query) | + Q(payment_method_name__icontains=search_query) + ) + + paginator = Paginator(payments, 20) + page_number = request.GET.get('page') + page_obj = paginator.get_page(page_number) + + return render(request, 'core/supplier_payments.html', { + 'payments': page_obj, + 'search_query': search_query + }) # --- Purchase Returns ---