minor update
This commit is contained in:
+25
-18
@@ -8,7 +8,7 @@ from django.db.models import Exists, OuterRef
|
||||
from django.http import JsonResponse
|
||||
from django.shortcuts import render, redirect, get_object_or_404
|
||||
from django.views.decorators.http import require_POST
|
||||
from .models import Issue, IssueCategory, User, Vote, Comment, Department
|
||||
from .models import Issue, User, Vote, Comment, Department
|
||||
from .forms import CitizenRegistrationForm, IssueForm, CommentForm, IssueAssignForm
|
||||
|
||||
def home(request):
|
||||
@@ -16,15 +16,12 @@ def home(request):
|
||||
resolved_issues = Issue.objects.filter(status='resolved').count()
|
||||
active_users = User.objects.filter(is_active=True).count()
|
||||
|
||||
# Get recently reported issues (last 3 issues)
|
||||
recent_issues = Issue.objects.all().order_by('-created_at')[:3]
|
||||
|
||||
for issue in recent_issues:
|
||||
issue.user_has_voted = issue.has_user_voted(request.user) if request.user.is_authenticated else False
|
||||
|
||||
# Get municipal departments count (assuming you have a Department model)
|
||||
# If you don't have one yet, you can use a placeholder or create the model
|
||||
municipal_departments = 5 # Placeholder - replace with actual count when you have the model
|
||||
municipal_departments = 5
|
||||
|
||||
context = {
|
||||
'total_issues': total_issues,
|
||||
@@ -46,12 +43,10 @@ def citizen_dashboard(request):
|
||||
all_user_issues = Issue.objects.filter(reporter=request.user)
|
||||
user_issues_display = all_user_issues.order_by('-created_at')[:5]
|
||||
resolved_count = all_user_issues.filter(status='resolved').count()
|
||||
categories = IssueCategory.objects.all()
|
||||
|
||||
context = {
|
||||
'user_issues': user_issues_display,
|
||||
'resolved_count': resolved_count,
|
||||
'categories': categories,
|
||||
'issue_form': IssueForm(),
|
||||
}
|
||||
return render(request, 'dashboard/citizen_dashboard.html', context)
|
||||
@@ -67,6 +62,7 @@ def report_issue(request):
|
||||
if form.is_valid():
|
||||
issue = form.save(commit=False)
|
||||
issue.reporter = request.user
|
||||
issue.status = "reported" # default status
|
||||
issue.save()
|
||||
messages.success(request, 'Issue reported successfully!')
|
||||
return redirect('citizen_dashboard')
|
||||
@@ -87,26 +83,19 @@ def view_all_issues(request):
|
||||
user_vote_subq = Vote.objects.filter(user=request.user, issue_id=OuterRef('pk'))
|
||||
issues = (
|
||||
Issue.objects
|
||||
.select_related('category', 'reporter')
|
||||
.select_related('reporter')
|
||||
.annotate(user_has_voted=Exists(user_vote_subq))
|
||||
.order_by('-created_at')
|
||||
)
|
||||
|
||||
categories = IssueCategory.objects.all()
|
||||
|
||||
# Optional filters (status/category) if you wired the dropdowns
|
||||
# Optional filter (status only now)
|
||||
status = request.GET.get('status') or ''
|
||||
category_id = request.GET.get('category') or ''
|
||||
if status:
|
||||
issues = issues.filter(status=status)
|
||||
if category_id:
|
||||
issues = issues.filter(category_id=category_id)
|
||||
|
||||
return render(request, 'issues/view_all_issues.html', {
|
||||
'issues': issues,
|
||||
'categories': categories,
|
||||
'selected_status': status,
|
||||
'selected_category': category_id,
|
||||
})
|
||||
|
||||
|
||||
@@ -307,6 +296,24 @@ def resolver_check(user):
|
||||
return user.is_resolver
|
||||
|
||||
@login_required
|
||||
@user_passes_test(resolver_check)
|
||||
@user_passes_test(lambda u: u.is_resolver)
|
||||
def department_dashboard(request):
|
||||
return render(request, "dashboard/department_dashboard.html")
|
||||
departments = request.user.departments.all()
|
||||
issues = Issue.objects.filter(department__in=departments).order_by('-created_at')
|
||||
return render(request, "dashboard/department_dashboard.html", {"issues": issues, "departments": departments})
|
||||
|
||||
@login_required
|
||||
@user_passes_test(lambda u: u.is_resolver)
|
||||
def update_issue_status(request, issue_id):
|
||||
issue = get_object_or_404(Issue, id=issue_id)
|
||||
|
||||
# Make sure the user belongs to the department assigned to the issue
|
||||
if issue.department not in request.user.departments.all():
|
||||
return redirect("department_dashboard")
|
||||
|
||||
if request.method == "POST":
|
||||
new_status = request.POST.get("status")
|
||||
if new_status in [Issue.STATUS_IN_PROGRESS, Issue.STATUS_RESOLVED]:
|
||||
issue.status = new_status
|
||||
issue.save()
|
||||
return redirect("department_dashboard")
|
||||
Reference in New Issue
Block a user