Skip to content

Commit

Permalink
Add complete button for PIT requests
Browse files Browse the repository at this point in the history
  • Loading branch information
tnurse18 committed Jan 17, 2021
1 parent 4f983c4 commit 5d0e106
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 3 deletions.
23 changes: 23 additions & 0 deletions projection/tests.py
Expand Up @@ -535,3 +535,26 @@ def test_cancel_pit_request(self):

self.assertRedirects(self.client.post(reverse("projection:cancel-request", args=[2])),
reverse("projection:pit-schedule"))

def test_mark_pit_complete(self):
projectionist = models.Projectionist(user=self.user)
projectionist.save()
level = models.PITLevel.objects.create(name_short="P2", name_long="PIT2", ordering=1)
level.save()
request = models.PitRequest(projectionist=projectionist, level=level, scheduled_for=timezone.now())
request.save()

# The user should not have permission to mark a PIT as complete by default
self.assertOk(self.client.get(reverse("projection:pit-complete", args=[1])), 403)

permission = Permission.objects.get(codename="edit_pits")
self.user.user_permissions.add(permission)

# Only POST requests are permitted
self.assertOk(self.client.get(reverse("projection:pit-complete", args=[1])), 405)

self.assertRedirects(self.client.post(reverse("projection:pit-complete", args=[1])),
reverse('projection:pit-schedule'))

self.assertFalse(models.PitRequest.objects.filter(pk=request.pk).exists())
self.assertTrue(models.PitInstance.objects.filter(projectionist=projectionist).exists())
1 change: 1 addition & 0 deletions projection/urls.py
Expand Up @@ -24,4 +24,5 @@
url(r'^training/(?P<id>[0-9a-f]+)/update/$', views.pit_request_update, name="edit-request"),
url(r'^training/manage/(?P<id>[0-9a-f]+)/$', views.manage_pit_request, name="manage-request"),
url(r'^training/(?P<pk>[0-9a-f]+)/cancel/$', views.CancelPITRequest.as_view(), name="cancel-request"),
url(r'^training/(?P<id>[0-9a-f]+)/done/$', views.pit_complete, name="pit-complete")
]
21 changes: 20 additions & 1 deletion projection/views.py
Expand Up @@ -3,6 +3,7 @@

from crispy_forms.layout import Submit
from django.contrib import messages
from django.views.decorators.http import require_POST
from django.contrib.auth.decorators import login_required, permission_required
from django.db.models import Q
from django.conf import settings
Expand All @@ -15,7 +16,7 @@
from helpers.mixins import HasPermMixin, LoginRequiredMixin
from projection.forms import (BulkCreateForm, BulkUpdateForm, DateEntryFormSetBase, ProjectionistForm,
ProjectionistUpdateForm, PITRequestForm, PITRequestAdminForm, PITFormset)
from projection.models import PITLevel, Projectionist, PitRequest
from projection.models import PITLevel, Projectionist, PitRequest, PitInstance
from emails.generators import GenericEmailGenerator


Expand Down Expand Up @@ -279,6 +280,24 @@ def pit_schedule(request):
return render(request, 'projection_pit_schedule.html', context)


@login_required
@permission_required('projection.edit_pits', raise_exception=True)
@require_POST
def pit_complete(request, id):
""" Mark a PIT as complete """
pit = get_object_or_404(PitRequest, pk=id)

# Add the PIT to the user's record automatically
try:
PitInstance.objects.get(projectionist=pit.projectionist, pit_level=pit.level)
except PitInstance.DoesNotExist:
PitInstance.objects.create(projectionist=pit.projectionist, pit_level=pit.level, created_on=pit.scheduled_for)

pit.delete()
messages.success(request, 'PIT updated successfully!')
return HttpResponseRedirect(reverse('projection:pit-schedule'))


class CancelPITRequest(LoginRequiredMixin, HasPermMixin, DeleteView):
model = PitRequest
template_name = "form_cancel_request.html"
Expand Down
10 changes: 8 additions & 2 deletions site_tmpl/projection_pit_schedule.html
Expand Up @@ -26,8 +26,14 @@ <h3>Approved</h3>
<td>{{ request.projectionist }}</td>
<td>{{ request.level }}</td>
<td>{{ request.scheduled_for }}</td>
<td><a href="{% url "projection:manage-request" request.id %}" class="btn btn-primary">Modify</a>
<a href="{% url "projection:cancel-request" request.id %}" class="btn btn-danger">Cancel</a></td>
<td>
<form style="display: inline" action="{% url 'projection:pit-complete' request.id %}" method="post">
{% csrf_token %}
<button class="btn btn-success" type="submit">Complete</button>
</form>
<a href="{% url "projection:manage-request" request.id %}" class="btn btn-primary">Modify</a>
<a href="{% url "projection:cancel-request" request.id %}" class="btn btn-danger">Cancel</a>
</td>
</tr>
{% endfor %}
</table>
Expand Down

0 comments on commit 5d0e106

Please sign in to comment.