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 %}
+
+ {% 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
+
+
+{% 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)