def seek_tutorial(request, lecturer_id): lecturer = get_object_or_404(Profesor, id=lecturer_id) if request.method == "POST": form = TutorialRequestForm(request.POST) if form.is_valid(): tutorial_request = PeticionCitaService.create(form, request.user.id) if PeticionCitaService.can_request(tutorial_request): tutorial_request.save() EmailViews.send_tutorial_request_mail(request, tutorial_request) messages.add_message(request, messages.SUCCESS, _("The request has been sent successfully.")) return HttpResponseRedirect("/student/tutorial/seek/%s" % lecturer_id) else: messages.add_message( request, messages.ERROR, _("Sorry, but you cannot request more than two appointments for the same teacher in the same day."), ) else: form = TutorialRequestForm(initial={"lecturer": lecturer.id}) return render_to_response( "tutorial_request/calendar.html", {"lecturer": lecturer, "form": form}, context_instance=RequestContext(request) )
def view_requests(request): if request.method == 'POST': form = DenyRequestForm(request.POST, lecturer_id=request.user.id) if form.is_valid(): PeticionCitaService.cancel(form) messages.success(request, _('Request was rejected successfully.')) else: form = DenyRequestForm(lecturer_id=request.user.id) tutorial_requests = PeticionCitaService.lecturer_requests(request.user.id, 'EC') return render_to_response('tutorial_request/list.html', {'tutorial_requests': tutorial_requests, 'form': form, 'title': _('Tutorial requests')}, context_instance=RequestContext(request))
def accept_request(request, tutorial_request_id): tutorial_request = Peticioncita.objects.get(idcita=tutorial_request_id) lecturer = Profesor.objects.get(id=request.user.id) assert lecturer == tutorial_request.profesor if PeticionCitaService.can_accept(tutorial_request): PeticionCitaService.accept(tutorial_request) EmailViews.send_tutorial_accepted_mail(tutorial_request) messages.success(request, _('Request was accepted successfully.')) else: messages.warning(request, _('There is another accepted request for this date. The request was not accepted.')) return HttpResponseRedirect('/lecturer/tutorialRequest/list')
def accept_request(request, tutorial_request_id): tutorial_request = Peticioncita.objects.get(idcita=tutorial_request_id) lecturer = Profesor.objects.get(id=request.user.id) assert lecturer == tutorial_request.profesor if PeticionCitaService.can_accept(tutorial_request): PeticionCitaService.accept(tutorial_request) EmailViews.send_tutorial_accepted_mail(tutorial_request) messages.success(request, _("Request was accepted successfully.")) else: messages.warning(request, _("There is another accepted request for this date. The request was not accepted.")) return HttpResponseRedirect("/lecturer/tutorialRequest/list")
def accept_from_mail(request): request_token = request.GET['token'] tutorial_request_id = request.GET['id'] tutorial_request = Peticioncita.objects.get(idcita=tutorial_request_id) assert PeticionCitaService.is_token_valid(tutorial_request, request_token) if PeticionCitaService.can_accept(tutorial_request): PeticionCitaService.accept(tutorial_request) messages.success(request, _('Tutorial request was accepted successfully.')) else: messages.error(request, _('You cannot accept this tutorial request due to a schedule incompatibility.')) return HttpResponseRedirect('/')
def accept_from_mail(request): request_token = request.GET["token"] tutorial_request_id = request.GET["id"] tutorial_request = Peticioncita.objects.get(idcita=tutorial_request_id) assert PeticionCitaService.is_token_valid(tutorial_request, request_token) if PeticionCitaService.can_accept(tutorial_request): PeticionCitaService.accept(tutorial_request) messages.success(request, _("Tutorial request was accepted successfully.")) else: messages.error(request, _("You cannot accept this tutorial request due to a schedule incompatibility.")) return HttpResponseRedirect("/")
def view_requests(request): if request.method == "POST": form = DenyRequestForm(request.POST, lecturer_id=request.user.id) if form.is_valid(): PeticionCitaService.cancel(form) messages.success(request, _("Request was rejected successfully.")) else: form = DenyRequestForm(lecturer_id=request.user.id) tutorial_requests = PeticionCitaService.lecturer_requests(request.user.id, "EC") return render_to_response( "tutorial_request/list.html", {"tutorial_requests": tutorial_requests, "form": form, "title": _("Tutorial requests")}, context_instance=RequestContext(request), )
def create_tutorial(request): if request.method == 'POST': student_id = request.user.alumno.id form = PeticionCitaForm(request.POST) if form.is_valid(): tutorial_request = PeticionCitaService.create(form, student_id) # Business rule: a student cannot request more than two appointments for the same lecturer and day. appointment_date = tutorial_request.fechacita.date() appointment_day = appointment_date.day appointment_month = appointment_date.month appointment_year = appointment_date.year parameters = [appointment_year, appointment_month, appointment_day, tutorial_request.profesor.id, tutorial_request.alumno.id] query = '''SELECT idcita FROM peticioncita WHERE YEAR(fechaCita)=%s AND MONTH(fechaCita)=%s AND DAY(fechaCita)=%s AND profesor=%s AND alumno=%s''' same_day_same_lecturer = len(list(Peticioncita.objects.raw(query, parameters))) if same_day_same_lecturer < 2: tutorial_request.save() messages.add_message(request, messages.SUCCESS, _('The request has been sent successfully.')) return HttpResponseRedirect('/student/tutorial/create/') else: messages.add_message(request, messages.ERROR, _( 'Sorry, but you cannot request more than two appointments for the same teacher in the same day.')) else: form = PeticionCitaForm() return render_to_response('tutorial/edit.html', {'form': form}, context_instance=RequestContext(request))
def auto_assign_tutorial(request): lecturer = Profesor.objects.get(id=request.user.id) if request.method == 'POST': form = AutoAsignTutorialForm(request.POST) if form.is_valid(): tutorial_request = PeticionCitaService.auto_assign(form, lecturer) PeticionCitaService.cancel_concurrent_requests(tutorial_request) messages.add_message(request, messages.SUCCESS, _('Tutorial assigned successfully.')) return HttpResponseRedirect('/lecturer/tutorial/assign') else: form = AutoAsignTutorialForm() return render_to_response('tutorial_request/calendar.html', {'lecturer': lecturer, 'form': form}, context_instance=RequestContext(request))
def student_all_requests(request): tutorial_requests = PeticionCitaService.student_requests(request.user.id) return render_to_response( "tutorial_request/list.html", {"tutorial_requests": tutorial_requests, "title": _("Tutorial requests")}, context_instance=RequestContext(request), )
def auto_assign_tutorial(request): lecturer = Profesor.objects.get(id=request.user.id) if request.method == "POST": form = AutoAsignTutorialForm(request.POST) if form.is_valid(): tutorial_request = PeticionCitaService.auto_assign(form, lecturer) PeticionCitaService.cancel_concurrent_requests(tutorial_request) messages.add_message(request, messages.SUCCESS, _("Tutorial assigned successfully.")) return HttpResponseRedirect("/lecturer/tutorial/assign") else: form = AutoAsignTutorialForm() return render_to_response( "tutorial_request/calendar.html", {"lecturer": lecturer, "form": form}, context_instance=RequestContext(request) )
def accepted_requests(request): if request.method == "POST": form = RejectAcceptedTutorialsForm(request.POST, lecturer_id=request.user.id) if form.is_valid(): messages.success(request, _("Tutorials was cancelled successfully.")) PeticionCitaService.cancel_all(form.cleaned_data["tutorial_requests"], form.cleaned_data["motivation"]) return HttpResponseRedirect("/tutorialRequest/accepted") if request.user.has_perm("principal.alumno"): tutorial_requests = PeticionCitaService.student_requests(request.user.id, "AC") form = None else: tutorial_requests = PeticionCitaService.lecturer_requests(request.user.id, "AC") form = None if request.method == "GET": form = RejectAcceptedTutorialsForm(lecturer_id=request.user.id) template_vars = {"tutorial_requests": tutorial_requests, "title": _("Accepted requests"), "reject_form": form} return render_to_response("tutorial_request/list.html", template_vars, context_instance=RequestContext(request))
def accepted_requests(request): if request.method == 'POST': form = RejectAcceptedTutorialsForm(request.POST, lecturer_id=request.user.id) if form.is_valid(): messages.success(request, _('Tutorials was cancelled successfully.')) PeticionCitaService.cancel_all(form.cleaned_data['tutorial_requests'], form.cleaned_data['motivation']) return HttpResponseRedirect('/tutorialRequest/accepted') if request.user.has_perm('principal.alumno'): tutorial_requests = PeticionCitaService.student_requests(request.user.id, 'AC') form = None else: tutorial_requests = PeticionCitaService.lecturer_requests(request.user.id, 'AC') form = None if request.method == 'GET': form = RejectAcceptedTutorialsForm(lecturer_id=request.user.id) template_vars = {'tutorial_requests': tutorial_requests, 'title': _('Accepted requests'), 'reject_form': form} return render_to_response('tutorial_request/list.html', template_vars, context_instance=RequestContext(request))
def seek_tutorial(request, lecturer_id): lecturer = get_object_or_404(Profesor, id=lecturer_id) if request.method == 'POST': form = TutorialRequestForm(request.POST) if form.is_valid(): tutorial_request = PeticionCitaService.create(form, request.user.id) if PeticionCitaService.can_request(tutorial_request): tutorial_request.save() EmailViews.send_tutorial_request_mail(request, tutorial_request) messages.add_message(request, messages.SUCCESS, _('The request has been sent successfully.')) return HttpResponseRedirect('/student/tutorial/seek/%s' % lecturer_id) else: messages.add_message(request, messages.ERROR, _( 'Sorry, but you cannot request more than two appointments for the same teacher in the same day.')) else: form = TutorialRequestForm(initial={'lecturer': lecturer.id}) return render_to_response('tutorial_request/calendar.html', {'lecturer': lecturer, 'form': form}, context_instance=RequestContext(request))
def create_tutorial(request): if request.method == 'POST': student_id = request.user.alumno.id form = PeticionCitaForm(request.POST) if form.is_valid(): tutorial_request = PeticionCitaService.create(form, student_id) # Business rule: a student cannot request more than two appointments for the same lecturer and day. appointment_date = tutorial_request.fechacita.date() appointment_day = appointment_date.day appointment_month = appointment_date.month appointment_year = appointment_date.year parameters = [ appointment_year, appointment_month, appointment_day, tutorial_request.profesor.id, tutorial_request.alumno.id ] query = '''SELECT idcita FROM peticioncita WHERE YEAR(fechaCita)=%s AND MONTH(fechaCita)=%s AND DAY(fechaCita)=%s AND profesor=%s AND alumno=%s''' same_day_same_lecturer = len( list(Peticioncita.objects.raw(query, parameters))) if same_day_same_lecturer < 2: tutorial_request.save() messages.add_message( request, messages.SUCCESS, _('The request has been sent successfully.')) return HttpResponseRedirect('/student/tutorial/create/') else: messages.add_message( request, messages.ERROR, _('Sorry, but you cannot request more than two appointments for the same teacher in the same day.' )) else: form = PeticionCitaForm() return render_to_response('tutorial/edit.html', {'form': form}, context_instance=RequestContext(request))
def __init__(self, *args, **kwargs): lecturer_id = kwargs.pop('lecturer_id') super(RejectAcceptedTutorialsForm, self).__init__(*args, **kwargs) self.fields['tutorial_requests'].queryset = PeticionCitaService.lecturer_requests(lecturer_id, 'AC')
def student_all_requests(request): tutorial_requests = PeticionCitaService.student_requests(request.user.id) return render_to_response('tutorial_request/list.html', {'tutorial_requests': tutorial_requests, 'title': _('Tutorial requests')}, context_instance=RequestContext(request))
def __init__(self, *args, **kwargs): lecturer_id = kwargs.pop('lecturer_id') super(RejectAcceptedTutorialsForm, self).__init__(*args, **kwargs) self.fields[ 'tutorial_requests'].queryset = PeticionCitaService.lecturer_requests( lecturer_id, 'AC')