Skip to content
Snippets Groups Projects
views.py 10 KiB
Newer Older
from __future__ import unicode_literals
from django.contrib.auth.decorators import login_required
Jacek Lebioda's avatar
Jacek Lebioda committed
from django.shortcuts import redirect, render
Jacek Lebioda's avatar
Jacek Lebioda committed
from django.http import HttpResponse
from django.template import loader
from .models import *
from .forms import *
Jacek Lebioda's avatar
Jacek Lebioda committed
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
Jacek Lebioda's avatar
Jacek Lebioda committed
import datetime
Jacek Lebioda's avatar
Jacek Lebioda committed

Jacek Lebioda's avatar
Jacek Lebioda committed
# 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'


Jacek Lebioda's avatar
Jacek Lebioda committed
def index(request):
Jacek Lebioda's avatar
Jacek Lebioda committed
	if request.user.is_authenticated():
		return redirect(appointments)
	return redirect(login)
Jacek Lebioda's avatar
Jacek Lebioda committed
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)


Jacek Lebioda's avatar
Jacek Lebioda committed
def login(request):
Jacek Lebioda's avatar
Jacek Lebioda committed
	context = {
		'state' : 'initial'
	}
	if request.GET and request.GET.get('error'):
		context['state'] = request.GET.get('error')
Jacek Lebioda's avatar
Jacek Lebioda committed
	if request.method == "POST" and request.POST:
		state, message = do_login(request)
		if state == True:
			return redirect(appointments)
Jacek Lebioda's avatar
Jacek Lebioda committed
		else:
			return redirect('/login?error=' + message)
Jacek Lebioda's avatar
Jacek Lebioda committed
	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):
Jacek Lebioda's avatar
Jacek Lebioda committed
	visit_list = Visit.objects.order_by('-datetime_begin')
Piotr Matyjaszyk's avatar
Piotr Matyjaszyk committed
	context = {
		'visit_list': visit_list
	}

	return wrap_response(request, 'visits/index.html', context)
def visit_details(request, id):
	displayedVisit = Visit.objects.get(id=id)
Jacek Lebioda's avatar
Jacek Lebioda committed
	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})
Piotr Matyjaszyk's avatar
Piotr Matyjaszyk committed
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):
Jacek Lebioda's avatar
Jacek Lebioda committed
	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):
Piotr Matyjaszyk's avatar
Piotr Matyjaszyk committed
	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()
Piotr Matyjaszyk's avatar
Piotr Matyjaszyk committed
			form.save()
			return redirect(subjects)
Piotr Matyjaszyk's avatar
Piotr Matyjaszyk committed
	else:
		form = SubjectAddForm()
Piotr Matyjaszyk's avatar
Piotr Matyjaszyk committed
	return wrap_response(request, 'subjects/add.html', {'form': form})
def subject_details(request, id):
Jacek Lebioda's avatar
Jacek Lebioda committed
	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':
Jacek Lebioda's avatar
Jacek Lebioda committed
		form = SubjectEditForm(request.POST, request.FILES, instance=Subject.objects.get(id=id))
		if form.is_valid():
			form.save()
			return redirect(subjects)
Jacek Lebioda's avatar
Jacek Lebioda committed
		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':
Jacek Lebioda's avatar
Jacek Lebioda committed
		Subject.objects.get(id=id).delete()
		return redirect(subjects)
Jacek Lebioda's avatar
Jacek Lebioda committed
		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)
	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()
		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):
Jacek Lebioda's avatar
Jacek Lebioda committed
	doctors_list = Worker.objects.order_by('-last_name')
	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))
Jacek Lebioda's avatar
Jacek Lebioda committed
		if form.is_valid():
			form.save()
			return redirect(doctors)
	else:
		form = WorkerEditForm(instance=Worker.objects.get(id=doctor_id))
Jacek Lebioda's avatar
Jacek Lebioda committed
	return wrap_response(request, 'doctors/edit.html', {'form': form})
def doctor_details(request, doctor_id):
	form = WorkerDetailForm(instance=Worker.objects.get(id=doctor_id))
Jacek Lebioda's avatar
Jacek Lebioda committed
	return wrap_response(request, 'doctors/details.html', {'form': form})
def doctor_availability(request, doctor_id):
	avall = Avaibility.objects.filter(person=doctor_id)
Jacek Lebioda's avatar
Jacek Lebioda committed
	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)

	context = {
		'avmon': avmon,
		'avtue': avtue,
		'avwed': avwed,
		'avthu': avthu,
		'avfri': avfri,
		'avsat': avsat,
		'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)
Jacek Lebioda's avatar
Jacek Lebioda committed
	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)
Jacek Lebioda's avatar
Jacek Lebioda committed
	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):
Jacek Lebioda's avatar
Jacek Lebioda committed
	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})