-
Piotr Gawron authoredPiotr Gawron authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
views.py 10.04 KiB
from __future__ import unicode_literals
from django.contrib.auth.decorators import login_required
from django.shortcuts import redirect, render
from django.http import HttpResponse
from django.template import loader
from django.views import generic
from .models import *
from .forms import *
from .auth import * # Own wrapper for django logging in/out
from django.forms import modelformset_factory
from django.shortcuts import render
from django.db.models import Q
import collections
import datetime
# See https://docs.djangoproject.com/en/1.10/topics/http/views/#customizing-error-views
# They should work ONLY in production! (DEBUG=False)
handler404 = 'web.views.e404_page_not_found'
handler500 = 'web.views.e500_error'
handler403 = 'web.views.e403_permission_denied'
handler400 = 'web.views.e400_bad_request'
def index(request):
if request.user.is_authenticated():
return redirect(appointments)
return redirect(login)
def e404_page_not_found(request):
return render(request, "errors/404.html", context)
def e500_error(request):
return render(request, "errors/500.html", context)
def e403_permission_denied(request):
return render(request, "errors/403.html", context)
def e400_bad_request(request):
return render(request, "errors/400.html", context)
def login(request):
context = {
'state' : 'initial'
}
if request.GET and request.GET.get('error'):
context['state'] = request.GET.get('error')
if request.method == "POST" and request.POST:
state, message = do_login(request)
if state == True:
return redirect(appointments)
else:
return redirect('/login?error=' + message)
return render(request, "login.html", context)
"""
Saturates response with information about logged user
"""
@login_required
def wrap_response(request, template, params):
person, role = Worker.get_details(request.user)
final_params = params.copy()
final_params.update({
'person' : person,
'role': role
})
return render(request, template, final_params)
def logout(request):
state, message = do_logout(request)
return redirect('/login?error=' + message)
def visits(request):
visit_list = Visit.objects.order_by('-datetime_begin')
context = {
'visit_list': visit_list
}
return wrap_response(request, 'visits/index.html', context)
def visit_details(request, id):
displayedVisit = Visit.objects.get(id=id)
visFinished = displayedVisit.is_finished
vid = displayedVisit.id
displayedSubject = displayedVisit.subject
listOfAppointments = displayedVisit.appointment_set.all()
vform = VisitDetailForm(instance=displayedVisit)
sform = SubjectDetailForm(instance=displayedSubject)
return wrap_response(request, 'visits/details.html', {'vform': vform, 'sform': sform, 'loApp': listOfAppointments, 'visFinished': visFinished, 'vid': vid})
def visit_add(request):
if request.method == 'POST':
form = VisitAddForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect(visits)
else:
form = VisitAddForm()
return wrap_response(request, 'visits/add.html', {'form': form})
def subjects(request):
subjects_list = Subject.objects.order_by('-last_name')
context = {
'subjects_list': subjects_list
}
return wrap_response(request, 'subjects/index.html', context)
def subject_add(request):
if request.method == 'POST':
form = SubjectAddForm(request.POST, request.FILES)
if form.is_valid():
screening_number = form.cleaned_data['screening_number']
if screening_number == '':
screening_number = get_new_screening_number()
form.save()
return redirect(subjects)
else:
form = SubjectAddForm()
return wrap_response(request, 'subjects/add.html', {'form': form})
def subject_details(request, id):
form = SubjectDetailForm(instance=Subject.objects.get(id=id))
sid = id
return wrap_response(request, 'subjects/details.html', {'form': form, 'sid': sid})
def subject_edit(request, id):
if request.method == 'POST':
form = SubjectEditForm(request.POST, request.FILES, instance=Subject.objects.get(id=id))
if form.is_valid():
form.save()
return redirect(subjects)
else:
form = SubjectEditForm(instance=Subject.objects.get(id=id))
return wrap_response(request, 'subjects/edit.html', {'form': form, 'id':id})
def subject_delete(request, id):
if request.method == 'POST':
Subject.objects.get(id=id).delete()
return redirect(subjects)
else:
form = SubjectEditForm(instance=Subject.objects.get(id=id))
return wrap_response(request, 'subjects/delete.html', {'form': form})
def subject_mark(request, id, as_what):
who = Subject.objects.get(id=id)
if as_what == 'dead':
who.mark_as_dead()
elif as_what == 'rejected':
who.mark_as_rejected()
return redirect(subject_edit, id=id)
def subject_visit_details(request, id):
locsubject = Subject.objects.get(id=id)
visits = locsubject.visit_set.all()
endlist = []
for vis in visits:
assign = vis.appointment_set.all()
print assign
finished = vis.is_finished
visid = vis.id
visform = VisitDetailForm(instance=vis)
endlist.append((visform,assign,finished,visid))
#print len(endlist)
#print endlist[0]
return wrap_response(request, 'subjects/visitdetails.html', {'display': endlist})
def doctors(request):
doctors_list = Worker.objects.order_by('-last_name')
context = {
'doctors_list': doctors_list
}
return wrap_response(request, "doctors/index.html", context)
def doctor_add(request):
if request.method == 'POST':
form = WorkerAddForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect(doctors)
else:
form = WorkerAddForm()
return wrap_response(request, 'doctors/add.html', {'form': form})
def doctor_edit(request, doctor_id):
if request.method == 'POST':
form = WorkerEditForm(request.POST, request.FILES, instance=Worker.objects.get(id=doctor_id))
if form.is_valid():
form.save()
return redirect(doctors)
else:
form = WorkerEditForm(instance=Worker.objects.get(id=doctor_id))
return wrap_response(request, 'doctors/edit.html', {'form': form})
def doctor_details(request, doctor_id):
form = WorkerDetailForm(instance=Worker.objects.get(id=doctor_id))
return wrap_response(request, 'doctors/details.html', {'form': form})
def doctor_availability(request, doctor_id):
avall = Avaibility.objects.filter(person=doctor_id)
avmon = avall.filter(day_number=1)
avtue = avall.filter(day_number=2)
avwed = avall.filter(day_number=3)
avthu = avall.filter(day_number=4)
avfri = avall.filter(day_number=5)
avsat = avall.filter(day_number=6)
avsun = avall.filter(day_number=7)
context = {
'avmon': avmon,
'avtue': avtue,
'avwed': avwed,
'avthu': avthu,
'avfri': avfri,
'avsat': avsat,
'avsun': avsun,
'id': doctor_id
}
return wrap_response(request, "doctors/availability_index.html", context)
def doctor_availability_delete(request, doctor_id, availability_id):
availibility = Avaibility.objects.filter(id=availability_id)
if len(availibility) > 0:
availibility.delete()
return redirect(doctoravail, id=doctor_id)
def equipment_def(request):
equipment_list = Item.objects.order_by('-name')
context = {
'equipment_list': equipment_list
}
return wrap_response(request, "eqdef/index.html", context)
def equipment_and_rooms(request):
return wrap_response(request, "equipment_and_rooms/index.html", {})
def mail_templates(request):
return wrap_response(request, "mail_templates/index.html", {})
"""
#An initial draft of a function that was supposed to suggest date, room and worker for an appointment
def suggest_details(Appointment appoint):
avaibleWorkers = Worker.objects.get()
if appoint.appointment_type__required_worker == 'DOCTOR':
avaibleWorkers.filter(role='DOCTOR')
elif appoint.appointment_type__required_worker == 'NURSE':
avaibleWorkers.filter(role__in=['DOCTOR','NURSE'])
elif appoint.appointment_type__required_worker == 'PSYCHOLOGIST':
avaibleWorkers.filter(role__in=['DOCTOR','PSYCHOLOGIST'])
avaibleRooms = Room.objects.get
requireditems = appoint.appointment_type.required_equipment.filter(is_fixed=True)
reduce(operator.and_, (Q(equipment__contains=requireditems) for x in avaibleRooms))
"""
def appointments(request):
futureDate = datetime.datetime.now()+datetime.timedelta(days=93)
planning_list = Appointment.objects.filter(datetime_when__isnull=True, visit__datetime_begin__lt = futureDate)
approaching_list = Appointment.objects.filter(datetime_when__gt = datetime.datetime.now())
for plan in planning_list:
plan.datetime_when = plan.visit.datetime_begin
context = {
'planning_list': planning_list,
'approaching_list': approaching_list
}
return wrap_response(request, "appointments/index.html",context)
def appointment_details(request, id):
form = AppointmentDetailForm(instance=Appointment.objects.get(id=id))
return wrap_response(request, 'appointments/details.html', {'form': form})
def appointment_add(request, id):
if request.method == 'POST':
form = AppointmentAddForm(request.POST, request.FILES)
form.fields['visit'].widget = forms.HiddenInput()
if form.is_valid():
form.save()
return redirect(visit_details, id=id)
else:
form = AppointmentAddForm(initial={'visit': id})
form.fields['visit'].widget = forms.HiddenInput()
return wrap_response(request, 'appointments/add.html', {'form': form, 'visitID': id})
def appointment_edit(request, id):
if request.method == 'POST':
form = AppointmentEditForm(request.POST, request.FILES, instance=Appointment.objects.get(id=id))
if form.is_valid():
form.save()
data = form.cleaned_data
vis = data['visit']
visit = Visit.objects.get(id=vis.id)
visit.end_if_appointments_were_finished()
return redirect(appointments)
else:
form = AppointmentEditForm(instance=Appointment.objects.get(id=id))
return wrap_response(request, 'appointments/edit.html', {'form': form})
def appointment_edit_datetime(request, id):
if request.method == 'POST':
form = AppointmentEditForm(request.POST, request.FILES, instance=Appointment.objects.get(id=id))
if form.is_valid():
form.save()
return redirect(appointments)
else:
obj = Appointment.objects.get(id=id)
obj.datetime_when = obj.visit.datetime_begin
form = AppointmentEditForm(instance=obj)
return wrap_response(request, 'appointments/edit.html', {'form': form})