Files
civic-fix/civicfix/core/views.py
T
2025-08-21 11:39:39 +05:30

101 lines
3.8 KiB
Python

from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.auth import authenticate, login
from django.contrib.auth.decorators import login_required
from django.contrib.auth.forms import AuthenticationForm
from .models import Issue, IssueCategory, User
from .forms import CitizenRegistrationForm, IssueForm
def home(request):
total_issues = Issue.objects.count()
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]
# 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
context = {
'total_issues': total_issues,
'resolved_issues': resolved_issues,
'active_users': active_users,
'municipal_departments': municipal_departments,
'recent_issues': recent_issues,
}
return render(request, 'core/index.html', context)
@login_required
def citizen_dashboard(request):
if not request.user.is_citizen:
messages.error(request, 'Access denied. Citizen role required.')
return redirect('home')
# Get only basic data for now
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, 'core/citizen_dashboard.html', context)
@login_required
def report_issue(request):
if not request.user.is_citizen:
messages.error(request, 'Access denied. Citizen role required.')
return redirect('home')
if request.method == 'POST':
form = IssueForm(request.POST, request.FILES)
if form.is_valid():
issue = form.save(commit=False)
issue.reporter = request.user
issue.save()
messages.success(request, 'Issue reported successfully!')
return redirect('citizen_dashboard')
else:
messages.error(request, 'Please correct the errors below.')
else:
form = IssueForm()
return render(request, 'core/report_issue.html', {'form': form})
def register(request):
if request.method == 'POST':
form = CitizenRegistrationForm(request.POST)
if form.is_valid():
user = form.save()
messages.success(request, 'Registration successful! Please login.')
return redirect('login')
else:
form = CitizenRegistrationForm()
return render(request, 'core/register.html', {'form': form})
def custom_login(request):
if request.method == 'POST':
form = AuthenticationForm(request, data=request.POST)
if form.is_valid():
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
messages.success(request, f'Welcome back, {username}!')
return redirect('home')
else:
messages.error(request, 'Invalid username or password.')
else:
messages.error(request, 'Invalid username or password.')
else:
form = AuthenticationForm()
return render(request, 'core/login.html', {'form': form})