diff --git a/ticketsystem/models.py b/ticketsystem/models.py index b646723..6ff02fc 100644 --- a/ticketsystem/models.py +++ b/ticketsystem/models.py @@ -26,3 +26,12 @@ class Ticket(models.Model): def __str__(self): return f"[{self.get_priority_display()}] {self.title} ({self.get_status_display()})" + +class Comment(models.Model): + ticket = models.ForeignKey("Ticket", on_delete=models.CASCADE, related_name="comments") + author = models.ForeignKey(User, on_delete=models.CASCADE) + text = models.TextField() + created_at = models.DateTimeField(auto_now_add=True) + + def __str__(self): + return f"Kommentar von {self.author} zu Ticket #{self.ticket.id}" diff --git a/ticketsystem/templates/ticketsystem/detail.html b/ticketsystem/templates/ticketsystem/detail.html index 19c855d..aae4d29 100644 --- a/ticketsystem/templates/ticketsystem/detail.html +++ b/ticketsystem/templates/ticketsystem/detail.html @@ -1,5 +1,5 @@ {% block content %} - -
+ .comment { + margin: 1rem 0; + padding: 1rem; + border-left: 4px solid #007bff; + background: #f0f4ff; + border-radius: 4px; + } + + .comment-form textarea { + width: 100%; + padding: 0.5rem; + border-radius: 4px; + border: 1px solid #ccc; + } + + .comment-form button { + margin-top: 0.5rem; + background: #007bff; + color: white; + padding: 0.5rem 1rem; + border: none; + border-radius: 4px; + } + + + +

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

- ✏️ Dieses Ticket bearbeiten + ✏️ Dieses Ticket + bearbeiten

- Status: {{ ticket.get_status_display }} + Status: {{ ticket.get_status_display }}
- Priorität: {{ ticket.get_priority_display }} + Priorität: {{ ticket.get_priority_display }}
- Beschreibung:
-
{{ ticket.description }}
+ Beschreibung:
+
{{ ticket.description }}
- Erstellt von: {{ ticket.created_by.username }} + Erstellt von: {{ ticket.created_by.username }}
- Bearbeitet von: - {% if ticket.assigned_to %} + Zugewiesen an: + {% if ticket.assigned_to %} {{ ticket.assigned_to.username }} - {% else %} + {% else %} Niemand zugewiesen - {% endif %} + {% endif %}
- 🕒 Erstellt am: {{ ticket.created_at|date:"d.m.Y H:i" }}
- 🔄 Aktualisiert: {{ ticket.updated_at|date:"d.m.Y H:i" }} + 🕒 Erstellt am: {{ ticket.created_at|date:"d.m.Y H:i" }}
+ 🔄 Aktualisiert: {{ ticket.updated_at|date:"d.m.Y H:i" }}
-
-{% endblock %} +
+ +
+

💬 Kommentare

+ + {% if ticket.comments.exists %} + {% for comment in ticket.comments.all %} +
+

{{ comment.author.username }} am {{ comment.created_at|date:"d.m.Y H:i" }}

+

{{ comment.text }}

+
+ {% endfor %} + {% else %} +

Keine Kommentare vorhanden.

+ {% endif %} + {% if user.is_authenticated %} +

📝 Neuen Kommentar schreiben

+
+ {% csrf_token %} + {{ form.as_p }} + +
+ {% endif %} +
+{% endblock %} \ No newline at end of file diff --git a/ticketsystem/templates/ticketsystem/home.html b/ticketsystem/templates/ticketsystem/home.html new file mode 100644 index 0000000..dcefd55 --- /dev/null +++ b/ticketsystem/templates/ticketsystem/home.html @@ -0,0 +1,44 @@ +{% block content %} + + +
+

Willkommen im Korrekturmanagementsystem 🎫

+

Was möchten Sie tun?

+ +
+ 📄 Alle Tickets anzeigen + ➕ Neues Ticket erstellen + 📂 Offene Tickets +
+
+{% endblock %} diff --git a/ticketsystem/urls.py b/ticketsystem/urls.py index abf1a2d..d357256 100644 --- a/ticketsystem/urls.py +++ b/ticketsystem/urls.py @@ -1,13 +1,15 @@ from django.urls import path from . import views -from .views import TicketListView, TicketCreateView, TicketUpdateView +from .views import TicketListView, TicketCreateView, TicketUpdateView, HomeView, TicketDetailView urlpatterns = [ # /ticketsystem/ - path("", TicketListView.as_view(), name="index"), + path("", HomeView.as_view(), name="home"), + # /ticketsystem/tickets + path("tickets", TicketListView.as_view(), name="ticket-list"), # /ticketsystem/detail/ - path("/", views.detail, name="detail"), + path("/", TicketDetailView.as_view(), name="detail"), # /ticketsystem/new/ path("new/", TicketCreateView.as_view(), name="create"), path("/modify/", TicketUpdateView.as_view(), name="modify"), diff --git a/ticketsystem/views.py b/ticketsystem/views.py index a5615e9..d08d751 100644 --- a/ticketsystem/views.py +++ b/ticketsystem/views.py @@ -1,11 +1,19 @@ from django.shortcuts import get_object_or_404, render -from django.views.generic import ListView +from django.views.generic import ListView, TemplateView from django.views.generic.edit import CreateView, UpdateView from django.urls import reverse_lazy +from django.views.generic.detail import DetailView +from django.views.generic.edit import FormMixin +from .forms import CommentForm +from django.urls import reverse from .models import Ticket +class HomeView(TemplateView): + template_name = "ticketsystem/home.html" + + class TicketListView(ListView): model = Ticket template_name = "ticketsystem/index.html" @@ -27,10 +35,30 @@ class TicketListView(ListView): return context -def detail(request, pk): - ticket = get_object_or_404(Ticket, pk=pk) - return render(request, "ticketsystem/detail.html", {"ticket": ticket}) +class TicketDetailView(FormMixin, DetailView): + model = Ticket # <- das ist wichtig! + template_name = "ticketsystem/detail.html" + context_object_name = "ticket" + form_class = CommentForm + def get_success_url(self): + return reverse("detail", kwargs={"pk": self.object.pk}) + + def post(self, request, *args, **kwargs): + self.object = self.get_object() + form = self.get_form() + if form.is_valid(): + comment = form.save(commit=False) + comment.ticket = self.object + comment.author = request.user + comment.save() + return super().form_valid(form) + return self.form_invalid(form) + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context["form"] = self.get_form() + return context class TicketCreateView(CreateView): model = Ticket