minor update

This commit is contained in:
2025-08-26 12:05:43 +05:30
parent 0d78cce3dd
commit adbfec2b10
27 changed files with 120 additions and 262 deletions
+25 -18
View File
@@ -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")