def cancel(request, shift_id, volunteer_id): if shift_id and volunteer_id: user = request.user admin = None volunteer = None try: admin = user.administrator except ObjectDoesNotExist: pass try: volunteer = user.volunteer except ObjectDoesNotExist: pass # check that either an admin or volunteer is logged in if not admin and not volunteer: return render(request, 'vms/no_volunteer_rights.html', status=403) # if a volunteer is logged in, verify that they are canceling their own shift if volunteer: if (int(volunteer.id) != int(volunteer_id)): return render(request, 'vms/no_volunteer_rights.html', status=403) if request.method == 'POST': try: cancel_shift_registration(volunteer_id, shift_id) if admin: return HttpResponseRedirect( reverse('shift:manage_volunteer_shifts', args=(volunteer_id, ))) elif volunteer: return HttpResponseRedirect( reverse('shift:view_volunteer_shifts', args=(volunteer_id, ))) else: raise Http404 except: raise Http404 else: return render(request, 'shift/cancel_shift.html', { 'shift_id': shift_id, 'volunteer_id': volunteer_id }) else: raise Http404
def test_cancel_shift_registration(self): """ Uses shifts s1, s2, s3 and volunteers v1,v2 """ # test cases when try to cancel when they aren't signed up for a shift with self.assertRaises(ObjectDoesNotExist): cancel_shift_registration(self.v1.id, self.s1.id) with self.assertRaises(ObjectDoesNotExist): cancel_shift_registration(self.v1.id, self.s2.id) with self.assertRaises(ObjectDoesNotExist): cancel_shift_registration(self.v2.id, self.s1.id) # register volunteers to shifts register(self.v1.id, self.s1.id) register(self.v2.id, self.s1.id) register(self.v2.id, self.s2.id) # test typical cases cancel_shift_registration(self.v1.id, self.s1.id) with self.assertRaises(ObjectDoesNotExist): cancel_shift_registration(self.v2.id, self.s1.id) cancel_shift_registration(self.v2.id, self.s2.id)
def cancel(request, shift_id, volunteer_id): if shift_id and volunteer_id: user = request.user admin = None volunteer = None try: admin = user.administrator except ObjectDoesNotExist: pass try: volunteer = user.volunteer except ObjectDoesNotExist: pass # check that either an admin or volunteer is logged in if not admin and not volunteer: return render(request, 'vms/no_volunteer_rights.html', status=403) # if a volunteer is logged in, verify that they are canceling their own shift if volunteer: if (int(volunteer.id) != int(volunteer_id)): return render( request, 'vms/no_volunteer_rights.html', status=403) if request.method == 'POST': try: cancel_shift_registration(volunteer_id, shift_id) if admin: vol_email = Volunteer.objects.get(pk=volunteer_id).email shift_object = get_shift_by_id(shift_id) job_object = Job.objects.get(shift=shift_object) event_object = Event.objects.get(job=job_object) message = render_to_string( 'shift/cancel_email.txt', { 'admin_first_name': admin.first_name, 'admin_last_name': admin.last_name, 'shift_start_time': shift_object.start_time, 'shift_end_time': shift_object.end_time, 'admin_email': admin.email, 'job_name': job_object.name, 'event_name': event_object.name, 'shift_date': shift_object.date, }) try: send_mail("Shift Cancelled", message, "*****@*****.**", [vol_email]) except: raise Exception("There was an error in sending email.") return HttpResponseRedirect( reverse( 'shift:manage_volunteer_shifts', args=(volunteer_id, ))) elif volunteer: return HttpResponseRedirect( reverse( 'shift:view_volunteer_shifts', args=(volunteer_id, ))) else: raise Http404 except: raise Http404 else: return render(request, 'shift/cancel_shift.html', { 'shift_id': shift_id, 'volunteer_id': volunteer_id }) else: raise Http404
def cancel(request, shift_id, volunteer_id): if shift_id and volunteer_id: user = request.user admin = None volunteer = None try: admin = user.administrator except ObjectDoesNotExist: pass try: volunteer = user.volunteer except ObjectDoesNotExist: pass # check that either an admin or volunteer is logged in if not admin and not volunteer: return render(request, 'vms/no_volunteer_rights.html', status=403) # if a volunteer is logged in, # verify that they are canceling their own shift if volunteer: if int(volunteer.id) != int(volunteer_id): return render(request, 'vms/no_volunteer_rights.html', status=403) if request.method == 'POST': try: cancel_shift_registration(volunteer_id, shift_id) if admin: vol_email = Volunteer.objects.get(pk=volunteer_id).email shift_object = get_shift_by_id(shift_id) job_object = Job.objects.get(shift=shift_object) event_object = Event.objects.get(job=job_object) message = render_to_string( 'shift/cancel_email.txt', { 'admin_first_name': admin.first_name, 'admin_last_name': admin.last_name, 'shift_start_time': shift_object.start_time, 'shift_end_time': shift_object.end_time, 'admin_email': admin.email, 'job_name': job_object.name, 'event_name': event_object.name, 'shift_date': shift_object.date, }) try: send_mail("Shift Cancelled", message, "*****@*****.**", [vol_email]) except Exception: raise Exception("There was an error in sending email.") return HttpResponseRedirect( reverse('shift:manage_volunteer_shifts', args=(volunteer_id, ))) elif volunteer: return HttpResponseRedirect( reverse('shift:view_volunteer_shifts', args=(volunteer_id, ))) else: raise Http404 except Exception: raise Http404 else: return render(request, 'shift/cancel_shift.html', { 'shift_id': shift_id, 'volunteer_id': volunteer_id }) else: raise Http404
def test_cancel_shift_registration(self): u1 = User.objects.create_user("Yoshi") u2 = User.objects.create_user("John") v1 = Volunteer( first_name="Yoshi", last_name="Turtle", address="Mario Land", city="Nintendo Land", state="Nintendo State", country="Nintendo Nation", phone_number="2374983247", email="*****@*****.**", user=u1, ) v2 = Volunteer( first_name="John", last_name="Doe", address="7 Alpine Street", city="Maplegrove", state="Wyoming", country="USA", phone_number="23454545", email="*****@*****.**", user=u2, ) v1.save() v2.save() e1 = Event(name="Open Source Event", start_date="2012-10-22", end_date="2012-10-23") e1.save() j1 = Job( name="Software Developer", start_date="2012-10-22", end_date="2012-10-23", description="A software job", event=e1, ) j2 = Job( name="Systems Administrator", start_date="2012-9-1", end_date="2012-10-26", description="A systems administrator job", event=e1, ) j1.save() j2.save() s1 = Shift(date="2012-10-23", start_time="9:00", end_time="3:00", max_volunteers=1, job=j1) s2 = Shift(date="2012-10-23", start_time="10:00", end_time="4:00", max_volunteers=2, job=j1) s3 = Shift(date="2012-10-23", start_time="12:00", end_time="6:00", max_volunteers=4, job=j2) s1.save() s2.save() s3.save() # test cases when try to cancel when they aren't signed up for a shift with self.assertRaises(ObjectDoesNotExist): cancel_shift_registration(v1.id, s1.id) with self.assertRaises(ObjectDoesNotExist): cancel_shift_registration(v1.id, s1.id) with self.assertRaises(ObjectDoesNotExist): cancel_shift_registration(v1.id, s2.id) with self.assertRaises(ObjectDoesNotExist): cancel_shift_registration(v1.id, s3.id) with self.assertRaises(ObjectDoesNotExist): cancel_shift_registration(v2.id, s1.id) with self.assertRaises(ObjectDoesNotExist): cancel_shift_registration(v2.id, s2.id) with self.assertRaises(ObjectDoesNotExist): cancel_shift_registration(v2.id, s3.id) # register volunteers to shifts register(v1.id, s1.id) register(v1.id, s2.id) register(v1.id, s3.id) register(v2.id, s1.id) register(v2.id, s2.id) register(v2.id, s3.id) # test typical cases cancel_shift_registration(v1.id, s1.id) cancel_shift_registration(v1.id, s2.id) cancel_shift_registration(v1.id, s3.id) # cancel_shift_registration(v2.id, s1.id) # why is this throwing ObjectDoesNotExist? cancel_shift_registration(v2.id, s2.id) cancel_shift_registration(v2.id, s3.id)