示例#1
0
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))
示例#2
0
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))
示例#3
0
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")
示例#4
0
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")
示例#5
0
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)
	)
示例#6
0
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))