71 lines
2.5 KiB
Python
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,
|
|
}) |