From a9982130ddbfc578dabc52b3f8dc7583e3729b26 Mon Sep 17 00:00:00 2001 From: Paul Date: Sat, 3 May 2025 00:55:19 +0200 Subject: [PATCH] feat: added create ticket site --- .../templates/ticketsystem/detail.html | 70 +++++++++++++++++ .../templates/ticketsystem/index.html | 77 +++++++++++++++++++ .../templates/ticketsystem/ticket_form.html | 57 ++++++++++++++ ticketsystem/urls.py | 5 +- ticketsystem/views.py | 44 +++++++++-- 5 files changed, 246 insertions(+), 7 deletions(-) create mode 100644 ticketsystem/templates/ticketsystem/detail.html create mode 100644 ticketsystem/templates/ticketsystem/index.html create mode 100644 ticketsystem/templates/ticketsystem/ticket_form.html diff --git a/ticketsystem/templates/ticketsystem/detail.html b/ticketsystem/templates/ticketsystem/detail.html new file mode 100644 index 0000000..f209410 --- /dev/null +++ b/ticketsystem/templates/ticketsystem/detail.html @@ -0,0 +1,70 @@ +{% block content %} + + +
+

🎫 Ticket #{{ ticket.id }} – {{ ticket.title }}

+ +
+ Status: {{ ticket.get_status_display }} +
+ +
+ Priorität: {{ ticket.get_priority_display }} +
+ +
+ Beschreibung:
+
{{ ticket.description }}
+
+ +
+ Erstellt von: {{ ticket.created_by.username }} +
+ +
+ Bearbeitet von: + {% if ticket.assigned_to %} + {{ ticket.assigned_to.username }} + {% else %} + Niemand zugewiesen + {% endif %} +
+ +
+ đź•’ Erstellt am: {{ ticket.created_at|date:"d.m.Y H:i" }}
+ 🔄 Aktualisiert: {{ ticket.updated_at|date:"d.m.Y H:i" }} +
+
+{% endblock %} diff --git a/ticketsystem/templates/ticketsystem/index.html b/ticketsystem/templates/ticketsystem/index.html new file mode 100644 index 0000000..bedb312 --- /dev/null +++ b/ticketsystem/templates/ticketsystem/index.html @@ -0,0 +1,77 @@ +{% block content %} + + +
+

🎫 Alle Tickets

+ +

+ âž• Neues Ticket +

+ +
+ + +
+ + {% for ticket in tickets %} +
+ + #{{ ticket.id }} – {{ ticket.title }} + +
+ Status: {{ ticket.get_status_display }} | + Priorität: {{ ticket.get_priority_display }} | + Angelegt am {{ ticket.created_at|date:"d.m.Y H:i" }} +
+
+ {% empty %} +

Es sind derzeit keine Tickets vorhanden.

+ {% endfor %} +
+{% endblock %} \ No newline at end of file diff --git a/ticketsystem/templates/ticketsystem/ticket_form.html b/ticketsystem/templates/ticketsystem/ticket_form.html new file mode 100644 index 0000000..ad10e7b --- /dev/null +++ b/ticketsystem/templates/ticketsystem/ticket_form.html @@ -0,0 +1,57 @@ +{% block content %} + + +
+

🎫 Neues Ticket erstellen

+
+ {% csrf_token %} + {{ form.as_p }} + +
+
+{% endblock %} \ No newline at end of file diff --git a/ticketsystem/urls.py b/ticketsystem/urls.py index f685fb4..195e1c2 100644 --- a/ticketsystem/urls.py +++ b/ticketsystem/urls.py @@ -1,10 +1,13 @@ from django.urls import path from . import views +from .views import TicketListView, TicketCreateView urlpatterns = [ # /ticketsystem/ - path("", views.index, name="index"), + path("", TicketListView.as_view(), name="index"), # /ticketsystem/detail/ path("/", views.detail, name="detail"), + # /ticketsystem/new/ + path("new/", TicketCreateView.as_view(), name="create"), ] \ No newline at end of file diff --git a/ticketsystem/views.py b/ticketsystem/views.py index b10be1e..c254226 100644 --- a/ticketsystem/views.py +++ b/ticketsystem/views.py @@ -1,12 +1,44 @@ -from django.http import HttpResponse +from django.shortcuts import get_object_or_404, render +from django.views.generic import ListView +from django.views.generic.edit import CreateView +from django.urls import reverse_lazy + from .models import Ticket -def index(request): - latest_ticket_list = Ticket.objects.order_by("-created_at")[:5] - output = ", ".join([t.title for t in latest_ticket_list]) - return HttpResponse(output) +class TicketListView(ListView): + model = Ticket + template_name = "ticketsystem/index.html" + context_object_name = "tickets" + ordering = ["-created_at"] # neueste zuerst + paginate_by = 10 # optional: Pagination (10 Tickets pro Seite) + + def get_queryset(self): + queryset = super().get_queryset() + status = self.request.GET.get("status") + + if status: + queryset = queryset.filter(status=status) + return queryset + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context["selected_status"] = self.request.GET.get("status", "") + return context def detail(request, ticket_id): - return HttpResponse("You're looking at Ticket %s." % ticket_id) + ticket = get_object_or_404(Ticket, pk=ticket_id) + return render(request, "ticketsystem/detail.html", {"ticket": ticket}) + + +class TicketCreateView(CreateView): + model = Ticket + fields = ["title", "description", "priority", "assigned_to"] # user & status setzen wir automatisch + template_name = "ticketsystem/ticket_form.html" + success_url = reverse_lazy("index") + + def form_valid(self, form): + form.instance.created_by = self.request.user # Der angemeldete User wird automatisch gesetzt + form.instance.status = "open" # Neues Ticket beginnt immer als "offen" + return super().form_valid(form)