diff --git a/kraut_incident/models.py b/kraut_incident/models.py
index ffc322d..8dbfba4 100644
--- a/kraut_incident/models.py
+++ b/kraut_incident/models.py
@@ -60,6 +60,9 @@ class Task(models.Model):
status = models.CharField(max_length=2, choices=status_choices, default='op')
responsible = models.ManyToManyField(Contact, blank=True)
+ class Meta:
+ ordering = ['-status']
+
class Account(models.Model):
"""Describe an account
"""
diff --git a/kraut_incident/templates/kraut_incident/incident_details.html b/kraut_incident/templates/kraut_incident/incident_details.html
index 279cde7..8bc9236 100644
--- a/kraut_incident/templates/kraut_incident/incident_details.html
+++ b/kraut_incident/templates/kraut_incident/incident_details.html
@@ -229,14 +229,19 @@
Incident Information
- Name | Status | Short Description |
+ Name | Status | Short Description | |
{% for t in incident.tasks.all %}
{{ t.name }} |
- {{ t.get_status_display }} |
+ {% if t.get_status_display == 'Open' %}Open{% else %}{{ t.get_status_display }}{% endif %} |
{{ t.description }} |
+
+
+
+
+ |
{% endfor %}
diff --git a/kraut_incident/urls.py b/kraut_incident/urls.py
index 47a108d..24e35c8 100644
--- a/kraut_incident/urls.py
+++ b/kraut_incident/urls.py
@@ -13,6 +13,9 @@
url(r'^incident/(?P\d+)/add/contact/$', views.add_contact_incident, name='add_contact_incident'),
url(r'^incident/(?P\d+)/remove/handler/(?P\d+)/$', views.remove_handler_incident, name='remove_handler_incident'),
url(r'^incident/(?P\d+)/remove/contact/(?P\d+)/$', views.remove_contact_incident, name='remove_contact_incident'),
+ url(r'^incident/(?P\d+)/remove/task/(?P\d+)/$', views.remove_task_incident, name='remove_task_incident'),
+ url(r'^incident/(?P\d+)/resolve/task/(?P\d+)/$', views.resolve_task_incident, name='resolve_task_incident'),
+ url(r'^incident/(?P\d+)/abort/task/(?P\d+)/$', views.abort_task_incident, name='abort_task_incident'),
url(r'^incident/(?P\d+)/add/comment/$', views.comment_incident, name='comment_incident'),
url(r'^incident/(?P\d+)/del/comment/(?P\d+)/$', views.delete_comment_incident, name='delete_comment_incident'),
url(r'^create_contact/$', views.create_contact, name='create_contact'),
diff --git a/kraut_incident/views.py b/kraut_incident/views.py
index 28fa92a..2ca71d1 100644
--- a/kraut_incident/views.py
+++ b/kraut_incident/views.py
@@ -15,6 +15,8 @@
from kraut_incident.models import Contact, Handler, Incident, IncidentComment, TemplateTask, Task
from kraut_incident.utils import slicedict
+import datetime
+
# Create your views here.
@login_required
@@ -27,6 +29,65 @@ def list_incidents(request):
context = {}
return render(request, 'kraut_incident/incident_list.html', context)
+@login_required
+def abort_task_incident(request, incident_id, task_id):
+ """abort a task from an incident
+ """
+ context = {}
+ try:
+ inc = Incident.objects.get(id=incident_id)
+ except Incident.DoesNotExist:
+ messages.error(request, 'The requested incident does not exist!')
+ return render(request, 'kraut_incident/incident_list.html', context)
+ try:
+ task = Task.objects.get(id=task_id)
+ except Task.DoesNotExist:
+ messages.error(request, 'The requested task does not exist!')
+ return render(request, 'kraut_incident/incident_list.html', context)
+ task.status = 'ab'
+ task.finish_time = datetime.datetime.now()
+ task.save()
+ return HttpResponseRedirect(reverse("incidents:view_incident", kwargs={'incident_id': incident_id}))
+
+@login_required
+def resolve_task_incident(request, incident_id, task_id):
+ """resolve a task from an incident
+ """
+ context = {}
+ try:
+ inc = Incident.objects.get(id=incident_id)
+ except Incident.DoesNotExist:
+ messages.error(request, 'The requested incident does not exist!')
+ return render(request, 'kraut_incident/incident_list.html', context)
+ try:
+ task = Task.objects.get(id=task_id)
+ except Task.DoesNotExist:
+ messages.error(request, 'The requested task does not exist!')
+ return render(request, 'kraut_incident/incident_list.html', context)
+ task.status = 'do'
+ task.finish_time = datetime.datetime.now()
+ task.save()
+ return HttpResponseRedirect(reverse("incidents:view_incident", kwargs={'incident_id': incident_id}))
+
+@login_required
+def remove_task_incident(request, incident_id, task_id):
+ """remove a task from an incident
+ """
+ context = {}
+ try:
+ inc = Incident.objects.get(id=incident_id)
+ except Incident.DoesNotExist:
+ messages.error(request, 'The requested incident does not exist!')
+ return render(request, 'kraut_incident/incident_list.html', context)
+ try:
+ task = Task.objects.get(id=task_id)
+ except Task.DoesNotExist:
+ messages.error(request, 'The requested task does not exist!')
+ return render(request, 'kraut_incident/incident_list.html', context)
+ inc.tasks.remove(task)
+ inc.save()
+ return HttpResponseRedirect(reverse("incidents:view_incident", kwargs={'incident_id': incident_id}))
+
@login_required
def remove_contact_incident(request, incident_id, contact_id):
"""remove contact person from incident