38475-vm/core/views.py
2026-02-16 13:17:54 +00:00

71 lines
2.5 KiB
Python

from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from .models import Ticket, Comment
from .forms import TicketForm, CommentForm
@login_required
def dashboard(request):
"""User dashboard showing their tickets."""
if request.user.is_staff:
tickets = Ticket.objects.all()
else:
tickets = Ticket.objects.filter(created_by=request.user)
context = {
'tickets': tickets,
'open_count': tickets.filter(status='open').count(),
'pending_count': tickets.filter(status='pending').count(),
'resolved_count': tickets.filter(status='resolved').count(),
}
return render(request, 'core/index.html', context)
@login_required
def ticket_create(request):
"""View to create a new ticket."""
if request.method == 'POST':
form = TicketForm(request.POST)
if form.is_valid():
ticket = form.save(commit=False)
ticket.created_by = request.user
ticket.save()
messages.success(request, "Ticket created successfully!")
return redirect('dashboard')
else:
form = TicketForm()
return render(request, 'core/ticket_form.html', {'form': form})
@login_required
def ticket_detail(request, pk):
"""View ticket details and handle comments."""
ticket = get_object_or_404(Ticket, pk=pk)
# Simple permission check
if not request.user.is_staff and ticket.created_by != request.user:
messages.error(request, "You do not have permission to view this ticket.")
return redirect('dashboard')
if request.method == 'POST':
# Check if it's a comment or a status update
if 'status' in request.POST and request.user.is_staff:
ticket.status = request.POST.get('status')
ticket.save()
messages.success(request, f"Status updated to {ticket.get_status_display()}")
return redirect('ticket_detail', pk=pk)
comment_form = CommentForm(request.POST)
if comment_form.is_valid():
comment = comment_form.save(commit=False)
comment.ticket = ticket
comment.author = request.user
comment.save()
messages.success(request, "Reply added!")
return redirect('ticket_detail', pk=pk)
else:
comment_form = CommentForm()
return render(request, 'core/ticket_detail.html', {
'ticket': ticket,
'comment_form': comment_form,
})