diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc
index 2ec5074..499a72a 100644
Binary files a/core/__pycache__/views.cpython-311.pyc and b/core/__pycache__/views.cpython-311.pyc differ
diff --git a/core/templates/base.html b/core/templates/base.html
index f1305e7..1f614ac 100644
--- a/core/templates/base.html
+++ b/core/templates/base.html
@@ -33,17 +33,44 @@
{% if user.is_authenticated %}
- {% if user.is_staff or user.is_superuser or user.managed_teams.exists or user.assigned_projects.exists %}
+ {# Dashboard #}
+ {% if user.is_staff or user.is_superuser or perms.core.view_project or user.managed_teams.exists or user.assigned_projects.exists %}
+ {% else %}
+ {# Fallback for existing users if strict mode is not desired, but user requested hiding. #}
+ {# I will leave it visible ONLY if they are supervisors to maintain status quo for them if they lack permissions #}
+ {% if user.managed_teams.exists or user.assigned_projects.exists %}
+
+ {% endif %}
+ {% endif %}
- {% if user.is_staff or user.is_superuser or user.managed_teams.exists or user.assigned_projects.exists %}
+ {# History #}
+ {% if user.is_staff or user.is_superuser or perms.core.view_worklog or user.managed_teams.exists or user.assigned_projects.exists %}
+ {% if selected_worker or selected_team or selected_project or selected_payment_status and selected_payment_status != 'all' %}
+
+ Clear all filters
+
+ {% else %}
+ Showing all records
+ {% endif %}
+
+
+ Total Value
+ R {{ total_amount|floatformat:2 }}
+
- {% endif %}
diff --git a/core/views.py b/core/views.py
index 9c0cc92..655c5d2 100644
--- a/core/views.py
+++ b/core/views.py
@@ -24,6 +24,8 @@ def is_staff_or_supervisor(user):
"""Check if user is staff or manages at least one team/project."""
if user.is_staff or user.is_superuser:
return True
+ if user.has_perm('core.view_project'):
+ return True
return user.managed_teams.exists() or user.assigned_projects.exists()
@login_required
@@ -141,11 +143,16 @@ def log_attendance(request):
conflicts.append(conflict_entry)
if conflicts:
+ # Prepare worker rates for JS calculation
+ worker_qs = form.fields['workers'].queryset
+ worker_rates = {w.id: float(w.day_rate) for w in worker_qs}
+
context = {
'form': form,
'team_workers_json': json.dumps(team_workers_map),
'conflicting_workers': conflicts,
'is_conflict': True,
+ 'worker_rates_json': json.dumps(worker_rates),
}
return render(request, 'core/log_attendance.html', context)
@@ -203,9 +210,14 @@ def log_attendance(request):
else:
form = WorkLogForm(user=request.user if request.user.is_authenticated else None)
+ # Pass worker rates for frontend total calculation
+ worker_qs = form.fields['workers'].queryset
+ worker_rates = {w.id: float(w.day_rate) for w in worker_qs}
+
context = {
'form': form,
- 'team_workers_json': json.dumps(team_workers_map)
+ 'team_workers_json': json.dumps(team_workers_map),
+ 'worker_rates_json': json.dumps(worker_rates)
}
return render(request, 'core/log_attendance.html', context)
@@ -831,4 +843,4 @@ def create_receipt(request):
return render(request, 'core/create_receipt.html', {
'form': form,
'items': items
- })
+ })
\ No newline at end of file