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))
Example #16
0
 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))
Example #18
0
 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')