diff --git a/atdb/taskdatabase/forms.py b/atdb/taskdatabase/forms.py index c6c3ec4eda3308820bb9627564f16b492443bef8..79d1160c3f085f8a78f15ef04b76d1af9bc0a430 100644 --- a/atdb/taskdatabase/forms.py +++ b/atdb/taskdatabase/forms.py @@ -1,9 +1,11 @@ from django import forms class QualityAnnotationForm(forms.Form): - annotation = forms.CharField(label='', - widget=forms.Textarea( - attrs={'rows': 12,'cols': 85} - ), - max_length=1000) + annotation = forms.CharField(label='', widget=forms.Textarea(attrs={'rows': 12,'cols': 85}),required=False,max_length=1000) return_to_page = forms.IntegerField(widget=forms.HiddenInput) + + +class DiscardAnnotationForm(forms.Form): + annotation = forms.CharField(label='', widget=forms.Textarea(attrs={'rows': 3, 'cols': 85}), required=False, + max_length=250) + return_to_page = forms.IntegerField(widget=forms.HiddenInput) diff --git a/atdb/taskdatabase/templates/taskdatabase/discarded/headers.html b/atdb/taskdatabase/templates/taskdatabase/discarded/headers.html index cb27d6cc9006a2bf1680706790282391b9ccffd3..6a08ee853f618b2662896c47c2b5512ce210dc97 100644 --- a/atdb/taskdatabase/templates/taskdatabase/discarded/headers.html +++ b/atdb/taskdatabase/templates/taskdatabase/discarded/headers.html @@ -1,21 +1,21 @@ <tr> - <th> + <th width="5%"> <a href="{% url 'sort-tasks' '-pk' 'discarded' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a> ID <a href="{% url 'sort-tasks' 'id' 'discarded' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a> </th> <th>Details</th> - <th> + <th width="8%"> <a href="{% url 'sort-tasks' '-status' 'discarded' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a> Status <a href="{% url 'sort-tasks' 'status' 'discarded' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a> </th> - <th> + <th width="8%"> <a href="{% url 'sort-tasks' '-project' 'discarded' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a> Project <a href="{% url 'sort-tasks' 'project' 'discarded' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a> </th> - <th> + <th width="8%"> <a href="{% url 'sort-tasks' '-sas_id' 'discarded' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-up"></i></a> SAS_ID <a href="{% url 'sort-tasks' 'sas_id' 'discarded' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a> diff --git a/atdb/taskdatabase/templates/taskdatabase/failures/confirm_discard.html b/atdb/taskdatabase/templates/taskdatabase/failures/confirm_discard.html index f69b24b98f03639f86d3744f775ab8715240dbad..8f30325f106e5f2e562216e76671b01a54527ce2 100644 --- a/atdb/taskdatabase/templates/taskdatabase/failures/confirm_discard.html +++ b/atdb/taskdatabase/templates/taskdatabase/failures/confirm_discard.html @@ -9,13 +9,18 @@ <form action="./{{ page }}" method="POST">{% csrf_token %} <div class="text-center"> - <h4>Are you sure you want to discard task {{ task.id }}?</h4> + <h5>Are you sure you want to discard task {{ task.id }}?</h5> + Enter a reason for discarding (optional) + {% csrf_token %} - <p> - <button class="btn btn-success btn-sm" type="submit"><i class="fas fa-check"></i> OK</button> - <a href="{% url 'failures' %}" class="btn btn-warning btn-sm" role="button"><i class="fas fa-times-circle"></i> Cancel</a>  - </p> + <div> + {{ my_form }} </div> + <p> + <button class="btn btn-success btn-sm" type="submit"><i class="fas fa-check"></i> OK</button> + <a href="{% url 'failures' %}" class="btn btn-warning btn-sm" role="button"><i class="fas fa-times-circle"></i> Cancel</a>  + </p> + </div> </form> </div> diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py index 4f687a9cede8c7752e6cd79b36583b3d9c5d2732..b652df0001bbd8896f13bfbdfda014a050263f62 100644 --- a/atdb/taskdatabase/views.py +++ b/atdb/taskdatabase/views.py @@ -24,7 +24,7 @@ from rest_framework.request import Request from django.conf import settings from .models import Task, Status, Workflow, LogEntry, Configuration, Job, PostProcessingRule, Monitor, LatestMonitor from .tables import TaskTable -from .forms import QualityAnnotationForm +from .forms import QualityAnnotationForm, DiscardAnnotationForm from django.db.models import Q from .serializers import \ @@ -1107,16 +1107,17 @@ def TaskDiscard(request, pk, new_status, page=0): task = Task.objects.get(pk=pk) if request.method == "POST": + form = DiscardAnnotationForm(request.POST) # set the cleanup_policy, which states what the cleanup service should do with it. task.cleanup_policy = task.status - # also add an annotation - try: - task.remarks['discard_reason'] = task.status - except: - task.remarks = {} - task.remarks['discard_reason'] = task.status + if form.is_valid(): + try: + task.remarks['discard_reason'] = request.POST.get("annotation", "") + except: + task.remarks = {} + task.remarks['discard_reason'] = request.POST.get("annotation", "") # set the status to discard and save it task.new_status = new_status @@ -1125,8 +1126,18 @@ def TaskDiscard(request, pk, new_status, page=0): # return to the failures page return redirect_with_params('failures', '?page=' + page) - # if not a POST, then render the confirmaton page, which will return to this function with a POST. - return render(request, "taskdatabase/failures/confirm_discard.html", {'task': task, 'page': page}) + else: + # a GET means that the form should be presented to be filled in + try: + discard_reason = task.remarks['discard_reason'] + except: + discard_reason = "" + + my_form = DiscardAnnotationForm(initial={'annotation': discard_reason, 'return_to_page': page}) + + # if not a POST, then render the confirmaton page, which will return to this function with a POST. + return render(request, "taskdatabase/failures/confirm_discard.html", + {'task': task, 'my_form': my_form, 'page': page}) @@ -1140,7 +1151,7 @@ def TaskDiscardSasId(request, pk, new_status, page=0): tasks = Task.objects.filter(sas_id=sas_id) if request.method == "POST": - form = QualityAnnotationForm(request.POST) + form = DiscardAnnotationForm(request.POST) for task in tasks: task.cleanup_policy = task.status @@ -1167,7 +1178,7 @@ def TaskDiscardSasId(request, pk, new_status, page=0): count=tasks.count() - my_form = QualityAnnotationForm(initial={'annotation': discard_reason, 'return_to_page': page}) + my_form = DiscardAnnotationForm(initial={'annotation': discard_reason, 'return_to_page': page}) # if not a POST, then render the confirmaton page, which will return to this function with a POST. return render(request, "taskdatabase/validation/confirm_discard.html",