From 4a28f18e944144308410aa6324971fe72c191cf1 Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 29 May 2025 15:04:02 +0200 Subject: [PATCH] feat: added new ticket status categories --- ticketsystem/models.py | 12 +- .../templates/ticketsystem/detail.html | 270 +++++++++--------- .../templates/ticketsystem/index.html | 26 +- .../templates/ticketsystem/ticket_form.html | 4 +- ticketsystem/views.py | 4 +- 5 files changed, 155 insertions(+), 161 deletions(-) diff --git a/ticketsystem/models.py b/ticketsystem/models.py index 968472e..19e8d55 100644 --- a/ticketsystem/models.py +++ b/ticketsystem/models.py @@ -4,8 +4,10 @@ from django.contrib.auth.models import User class Ticket(models.Model): STATUS_CHOICES = [ - ("open", "Offen"), + ("new", "Neu"), ("in_progress", "In Bearbeitung"), + ("resolved", "Gelöst"), + ("pending_close", "Wartend - Schließen"), ("closed", "Geschlossen"), ] @@ -17,7 +19,7 @@ class Ticket(models.Model): title = models.CharField(max_length=200) description = models.TextField() - status = models.CharField(max_length=20, choices=STATUS_CHOICES, default="open") + status = models.CharField(max_length=20, choices=STATUS_CHOICES, default="new") priority = models.CharField( max_length=10, choices=PRIORITY_CHOICES, default="medium" ) @@ -25,11 +27,7 @@ class Ticket(models.Model): User, related_name="tickets_created", on_delete=models.CASCADE ) assigned_to = models.ForeignKey( - User, - related_name="tickets_assigned", - null=True, - blank=True, - on_delete=models.SET_NULL, + User, related_name="tickets_assigned", null=True, blank=True, on_delete=models.CASCADE, ) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) diff --git a/ticketsystem/templates/ticketsystem/detail.html b/ticketsystem/templates/ticketsystem/detail.html index cfd9aeb..8233fe7 100644 --- a/ticketsystem/templates/ticketsystem/detail.html +++ b/ticketsystem/templates/ticketsystem/detail.html @@ -1,148 +1,140 @@ {% extends "ticketsystem/base.html" %} {% block content %} - - -{% if messages %} -
- {% for message in messages %} -
- {{ message }} -
- {% endfor %} -
-{% endif %} - -
- -
-

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

- -
- 🕒 Erstellt: {{ ticket.created_at|date:"d.m.Y H:i" }} | - 🔄 Aktualisiert: {{ ticket.updated_at|date:"d.m.Y H:i" }} -
- -
- {% csrf_token %} - -
- - -
- -
- - -
- -
-
- - + + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }}
-
- - -
-
- -
- - -
- - {% if view.can_edit %} - - {% else %} -

Du kannst dieses Ticket nicht bearbeiten.

- {% endif %} - -
- - -
-

💬 Kommentare ({{ ticket.comments.count }})

- - {% if ticket.comments.exists %} - {% for comment in ticket.comments.all %} -
-
- {{ comment.author.username }} - {{ comment.created_at|date:"d.m.Y H:i" }} -
-
{{ comment.text|linebreaks }}
-
{% endfor %} - {% else %} -

Keine Kommentare vorhanden.

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

📝 Neuer Kommentar

-
+
+ {% endif %} +
+ +
+

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

+
+ 🕒 Erstellt: {{ ticket.created_at|date:"d.m.Y H:i" }} | + 🔄 Aktualisiert: {{ ticket.updated_at|date:"d.m.Y H:i" }} +
+ {% csrf_token %} - - +
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+
+ + +
+ {% if view.can_edit %} + + {% else %} +

Du kannst dieses Ticket nicht bearbeiten.

+ {% endif %}
- {% endif %} -
- - -
-

🕓 Änderungen ({{ ticket.history.count }})

- - {% if ticket.history.exists %} - {% for entry in ticket.history.all %} -
-
- {{ entry.changed_by.username }} hat - {{ entry.field }} geändert + +
+

💬 Kommentare ({{ ticket.comments.count }})

+ {% if ticket.comments.exists %} + {% for comment in ticket.comments.all %} +
+
+ {{ comment.author.username }} - {{ comment.created_at|date:"d.m.Y H:i" }} +
+
{{ comment.text|linebreaks }}
+
+ {% endfor %} + {% else %} +

Keine Kommentare vorhanden.

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

📝 Neuer Kommentar

+
+ {% csrf_token %} + + +
-
- {{ entry.old_value }} → - {{ entry.new_value }} -
-
{{ entry.changed_at|date:"d.m.Y H:i" }}
-
- {% endfor %} - {% else %} -

Keine Änderungen bisher.

- {% endif %} + {% endif %} +
+ +
+

🕓 Änderungen ({{ ticket.history.count }})

+ {% if ticket.history.exists %} + {% for entry in ticket.history.all %} +
+
+ {{ entry.changed_by.username }} hat + {{ entry.field }} geändert +
+
+ {{ entry.old_value }} → + {{ entry.new_value }} +
+
{{ entry.changed_at|date:"d.m.Y H:i" }}
+
+ {% endfor %} + {% else %} +

Keine Änderungen bisher.

+ {% endif %} +
+ +
- - - -
- -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/ticketsystem/templates/ticketsystem/index.html b/ticketsystem/templates/ticketsystem/index.html index b3b69aa..48a4ddb 100644 --- a/ticketsystem/templates/ticketsystem/index.html +++ b/ticketsystem/templates/ticketsystem/index.html @@ -35,13 +35,10 @@ onchange="this.form.submit()" class="w-full h-10 px-3 border border-gray-300 rounded shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500"> - - - + {% for value, label in status_choices %} + + {% endfor %} {% if request.GET.assigned_to %} @@ -98,7 +95,10 @@ Aktive Filter: {% if selected_status %} - Status: {{ selected_status|title }} + Status: + {% for value, label in status_choices %} + {% if value == selected_status %}{{ label }}{% endif %} + {% endfor %} × @@ -148,14 +148,18 @@ - {% if ticket.status == 'open' %} - {{ ticket.get_status_display }} + {% if ticket.status == 'new' %} + {{ ticket.get_status_display }} {% elif ticket.status == 'in_progress' %} {{ ticket.get_status_display }} + {% elif ticket.status == 'resolved' %} + {{ ticket.get_status_display }} + {% elif ticket.status == 'pending_close' %} + {{ ticket.get_status_display }} {% elif ticket.status == 'closed' %} - {{ ticket.get_status_display }} + {{ ticket.get_status_display }} {% endif %} diff --git a/ticketsystem/templates/ticketsystem/ticket_form.html b/ticketsystem/templates/ticketsystem/ticket_form.html index b62ccc9..956195c 100644 --- a/ticketsystem/templates/ticketsystem/ticket_form.html +++ b/ticketsystem/templates/ticketsystem/ticket_form.html @@ -62,9 +62,9 @@ - + {% if form.status.errors %}
{{ form.status.errors }}
{% endif %} diff --git a/ticketsystem/views.py b/ticketsystem/views.py index 454988a..a1e2b33 100644 --- a/ticketsystem/views.py +++ b/ticketsystem/views.py @@ -57,9 +57,9 @@ class TicketListView(ListView): context = super().get_context_data(**kwargs) context["selected_status"] = self.request.GET.get("status", "") context["search_query"] = self.request.GET.get("q", "") + context["status_choices"] = Ticket.STATUS_CHOICES return context - class TicketDetailUpdateView(UpdateView): model = Ticket fields = ["title", "description", "status", "priority", "assigned_to"] @@ -173,7 +173,7 @@ class TicketCreateView(CreateView): def form_valid(self, form): form.instance.created_by = self.request.user - form.instance.status = "open" + form.instance.status = "new" return super().form_valid(form) def get_success_url(self):