def patient_reservations(request): response_data = {"patient": None} if request.method == 'POST': form = Patient_detail_form(request.POST) if form.is_valid(): hexdigest = get_hexdigest(form.cleaned_data["ident_hash"]) try: response_data["patient"] = Patient.objects.get(ident_hash=hexdigest) except Patient.DoesNotExist: pass return render_to_response("patient_reservations.html", response_data, context_instance=RequestContext(request))
def patient_reservations(request): response_data = {"patient": None} if request.method == 'POST': form = Patient_detail_form(request.POST) if form.is_valid(): hexdigest = get_hexdigest(form.cleaned_data["ident_hash"]) try: response_data["patient"] = Patient.objects.get( ident_hash=hexdigest) except Patient.DoesNotExist: pass return render_to_response("patient_reservations.html", response_data, context_instance=RequestContext(request))
def patient_details(request): response_data = { "first_name": "", "last_name": "", "phone_number": "", "email": "", } if request.method == 'POST': form = Patient_detail_form(request.POST) if form.is_valid(): hexdigest = get_hexdigest(form.cleaned_data["ident_hash"]) try: patient = Patient.objects.get(ident_hash=hexdigest) response_data = { "first_name": patient.first_name, "last_name": patient.last_name, "phone_number": patient.phone_number, "email": patient.email, } except Patient.DoesNotExist: pass return HttpResponse(json.dumps(response_data), "application/json")
def office_page(request, office_id, for_date=None): office = get_object_or_404(Medical_office, published=True, pk=office_id) if not request.user.is_authenticated() and not office.public: # forbidden office return HttpResponseRedirect("/") message = None start_date = date.today() end_date = start_date + timedelta(office.days_to_generate) if not request.user.is_authenticated(): start_date += timedelta(1) while not is_reservation_on_date(start_date, office): start_date += timedelta(1) if start_date == end_date: break if for_date: actual_date = datetime.strptime(for_date, "%Y-%m-%d").date() if actual_date < start_date: actual_date = start_date else: actual_date = start_date reservation_id = 0 if request.method == 'POST': form = Patient_form(request.POST) form.fields["exam_kind"].queryset = office.exam_kinds.all() if form.is_valid(): try: reservation = form.cleaned_data["reservation"] actual_date = reservation.starting_time.date() reservation_id = reservation.id if request.user.is_authenticated(): if reservation.status not in (2, 4): raise BadStatus() else: if reservation.status != 2: raise BadStatus() datetime_limit = datetime.combine(date.today() + timedelta(1), time(0, 0)) if reservation.starting_time < datetime_limit: raise DateInPast() hexdigest = get_hexdigest(form.cleaned_data["ident_hash"]) patient, patient_created = Patient.objects.get_or_create(ident_hash=hexdigest, defaults={ "first_name": form.cleaned_data["first_name"], "last_name": form.cleaned_data["last_name"], "ident_hash": form.cleaned_data["ident_hash"], "phone_number": form.cleaned_data["phone_number"], "email": form.cleaned_data["email"], }) if not patient_created and patient.has_reservation(): messages.error(request, render_to_string("messages/cancel.html", { "reservation": patient.visit_reservations.get(starting_time__gte=datetime.now()), "user": request.user, })) return HttpResponseRedirect("/cancel/%d/" % reservation.office_id) if not patient_created: patient.first_name = form.cleaned_data["first_name"] patient.last_name = form.cleaned_data["last_name"] patient.phone_number = form.cleaned_data["phone_number"] patient.email = form.cleaned_data["email"] patient.save() reservation.patient = patient reservation.exam_kind = form.cleaned_data["exam_kind"] reservation.status = 3 reservation.booked_at = datetime.now() reservation.booked_by = request.user.username reservation.save() if patient.email: send_notification(reservation) messages.success(request, render_to_string("messages/booked.html", { "reservation": reservation, })) return HttpResponseRedirect("/booked/%d/%s/" % ( reservation.office_id, actual_date.strftime("%Y-%m-%d"))) except DateInPast: message = _("You cannot make reservation for today or date in the past.") except BadStatus: message = _("The reservation has been already booked. Please try again.") reservation_id = 0 else: r_val = form["reservation"].value() if r_val: reservation_id = int(r_val) actual_date = Visit_reservation.objects.get(pk=reservation_id).starting_time.date() else: form = Patient_form() form.fields["exam_kind"].queryset = office.exam_kinds.all() office_data = { "id": office.id, "name": office.name, "reservations": office.reservations(actual_date), "days_status": json.dumps(office.days_status(start_date, end_date)) } return render_to_response( "index.html", { "offices": get_offices(request.user), "office": office_data, "form": form, "message": message, "start_date": start_date, "actual_date": actual_date, "end_date": end_date, "reservation_id": reservation_id, }, context_instance=RequestContext(request) )
def office_page(request, office_id, for_date=None): office = get_object_or_404(Medical_office, published=True, pk=office_id) if not request.user.is_authenticated( ) and not office.public: # forbidden office return HttpResponseRedirect("/") message = None start_date = date.today() end_date = start_date + timedelta(office.days_to_generate) if not request.user.is_authenticated(): start_date += timedelta(1) while not is_reservation_on_date(start_date, office): start_date += timedelta(1) if start_date == end_date: break if for_date: actual_date = datetime.strptime(for_date, "%Y-%m-%d").date() if actual_date < start_date: actual_date = start_date else: actual_date = start_date reservation_id = 0 if request.method == 'POST': form = Patient_form(request.POST) form.fields["exam_kind"].queryset = office.exam_kinds.all() if form.is_valid(): try: reservation = form.cleaned_data["reservation"] actual_date = reservation.starting_time.date() reservation_id = reservation.id if request.user.is_authenticated(): if reservation.status not in (2, 4): raise BadStatus() else: if reservation.status != 2: raise BadStatus() datetime_limit = datetime.combine(date.today() + timedelta(1), time(0, 0)) if reservation.starting_time < datetime_limit: raise DateInPast() hexdigest = get_hexdigest(form.cleaned_data["ident_hash"]) patient, patient_created = Patient.objects.get_or_create( ident_hash=hexdigest, defaults={ "first_name": form.cleaned_data["first_name"], "last_name": form.cleaned_data["last_name"], "ident_hash": form.cleaned_data["ident_hash"], "phone_number": form.cleaned_data["phone_number"], "email": form.cleaned_data["email"], }) if not patient_created and patient.has_reservation(): messages.error( request, render_to_string( "messages/cancel.html", { "reservation": patient.visit_reservations.get( starting_time__gte=datetime.now()), "user": request.user, })) return HttpResponseRedirect("/cancel/%d/" % reservation.office_id) if not patient_created: patient.first_name = form.cleaned_data["first_name"] patient.last_name = form.cleaned_data["last_name"] patient.phone_number = form.cleaned_data["phone_number"] patient.email = form.cleaned_data["email"] patient.save() reservation.patient = patient reservation.exam_kind = form.cleaned_data["exam_kind"] reservation.status = 3 reservation.booked_at = datetime.now() reservation.booked_by = request.user.username reservation.save() if patient.email: send_notification(reservation) messages.success( request, render_to_string("messages/booked.html", { "reservation": reservation, })) return HttpResponseRedirect( "/booked/%d/%s/" % (reservation.office_id, actual_date.strftime("%Y-%m-%d"))) except DateInPast: message = _( "You cannot make reservation for today or date in the past." ) except BadStatus: message = _( "The reservation has been already booked. Please try again." ) reservation_id = 0 else: r_val = form["reservation"].value() if r_val: reservation_id = int(r_val) actual_date = Visit_reservation.objects.get( pk=reservation_id).starting_time.date() else: form = Patient_form() form.fields["exam_kind"].queryset = office.exam_kinds.all() office_data = { "id": office.id, "name": office.name, "reservations": office.reservations(actual_date), "days_status": json.dumps(office.days_status(start_date, end_date)) } return render_to_response("index.html", { "offices": get_offices(request.user), "office": office_data, "form": form, "message": message, "start_date": start_date, "actual_date": actual_date, "end_date": end_date, "reservation_id": reservation_id, }, context_instance=RequestContext(request))