-
Carlos Vega authoredCarlos Vega authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
visit.py 3.92 KiB
# coding=utf-8
import logging
from django.shortcuts import get_object_or_404, redirect
from notifications import waiting_for_appointment
from web.models.study_visit_list import VISIT_LIST_GENERIC, VISIT_LIST_MISSING_APPOINTMENTS, \
VISIT_LIST_APPROACHING_WITHOUT_APPOINTMENTS, VISIT_LIST_APPROACHING_FOR_MAIL_CONTACT, VISIT_LIST_EXCEEDED_TIME, \
VISIT_LIST_UNFINISHED, VISIT_LIST_CHOICES
from . import wrap_response
from ..forms import VisitDetailForm, VisitAddForm, SubjectDetailForm, StudySubjectDetailForm
from ..models import Visit, Appointment, StudySubject, MailTemplate
logger = logging.getLogger(__name__)
def show_visits(request, visit_list_type):
context = {
'visit_list_type': visit_list_type,
'list_description': VISIT_LIST_CHOICES[visit_list_type]
}
return wrap_response(request, 'visits/index.html', context)
def visits(request):
return show_visits(request, VISIT_LIST_GENERIC)
def visits_with_missing_appointments(request):
return show_visits(request, VISIT_LIST_MISSING_APPOINTMENTS)
def approaching_visits_without_appointments(request):
return show_visits(request, VISIT_LIST_APPROACHING_WITHOUT_APPOINTMENTS)
def approaching_visits_for_mail_contact(request):
return show_visits(request, VISIT_LIST_APPROACHING_FOR_MAIL_CONTACT)
def exceeded_visits(request):
return show_visits(request, VISIT_LIST_EXCEEDED_TIME)
def unfinished_visits(request):
return show_visits(request, VISIT_LIST_UNFINISHED)
def visit_details(request, id):
displayed_visit = get_object_or_404(Visit, id=id)
if request.method == 'POST':
visit_form = VisitDetailForm(request.POST, request.FILES, instance=displayed_visit)
if visit_form.is_valid():
visit_form.save()
else:
visit_form = VisitDetailForm(instance=displayed_visit)
visit_finished = displayed_visit.is_finished
visit_id = displayed_visit.id
study_subject = displayed_visit.subject
list_of_appointments = displayed_visit.appointment_set.all()
can_finish = not waiting_for_appointment(displayed_visit)
for appointment in list_of_appointments:
if appointment.status == Appointment.APPOINTMENT_STATUS_SCHEDULED:
can_finish = False
study_subject_form = StudySubjectDetailForm(instance=study_subject)
subject_form = SubjectDetailForm(instance=study_subject.subject)
languages = []
if study_subject.subject.default_written_communication_language:
languages.append(study_subject.subject.default_written_communication_language)
languages.extend(study_subject.subject.languages.all())
return wrap_response(request, 'visits/details.html', {
'default_visit_duration' : study_subject.study.default_visit_duration_in_months,
'visit_form': visit_form,
'study_subject_form': study_subject_form,
'subject_form': subject_form,
'loApp': list_of_appointments,
'visFinished': visit_finished,
'canFinish': can_finish,
'vid': visit_id,
'visit': displayed_visit,
'mail_templates': MailTemplate.get_visit_mail_templates(languages)})
def visit_mark(request, id, as_what):
visit = get_object_or_404(Visit, id=id)
if as_what == 'finished':
visit.mark_as_finished()
return redirect('web.views.visit_details', id=id)
def visit_add(request, subject_id=-1):
if request.method == 'POST':
form = VisitAddForm(request.POST, request.FILES)
args = {'form': form}
if form.is_valid():
visit = form.save()
return redirect('web.views.visit_details', visit.id)
else:
subjects = StudySubject.objects.filter(id=subject_id)
subject = None
if len(subjects) > 0:
subject = subjects[0]
form = VisitAddForm(initial={'subject': subject})
args = {'form': form, 'default_visit_duration': subject.study.default_visit_duration_in_months}
return wrap_response(request, 'visits/add.html', args)