from __future__ import unicode_literals 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 def index(request): if request.user.is_authenticated(): return redirect(assignments) return redirect(login) 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(assignments) else: return redirect('/login?error=' + message) return render(request, "login.html", context) """ Saturates response with information about logged user """ 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(): 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 == '1': who.mark_as_dead() elif as_what == '0': 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() finished = vis.is_finished visform = VisitDetailForm(instance=vis) endlist.append((visform,assign,finished)) #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) 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) 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 assignment 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 assignments(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, "assignments/index.html",context) def assignment_details(request, id): form = AppointmentDetailForm(instance=Appointment.objects.get(id=id)) return wrap_response(request, 'assignments/details.html', {'form': form}) def assignment_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, 'assignments/add.html', {'form': form, 'visitID': id}) def assignment_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.checkIfFinished() return redirect(assignments) else: form = AppointmentEditForm(instance=Appointment.objects.get(id=id)) return wrap_response(request, 'assignments/edit.html', {'form': form}) def assignment_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(assignments) else: obj = Appointment.objects.get(id=id) obj.datetime_when = obj.visit.datetime_begin form = AppointmentEditForm(instance=obj) return wrap_response(request, 'assignments/edit.html', {'form': form})