예제 #1
0
def search():
    if request.method == "POST":
        form = SearchForm(request.form)
        if form.validate():
            # TODO: change template's ABN detail field to rating when implemented
            query = form.query.data
            search_type = form.search_type.data
            if search_type == "name":
                results = system.search.search_HC_name(query)
                results_kind = "HC"
                prev_type = "name"
            elif search_type == "suburb":
                results = system.search.search_HC_suburb(query)
                results_kind = "HC"
                prev_type = "suburb"
            elif search_type == "service":
                results = system.search.search_HP_service(query)
                results_kind = "HP"
                prev_type = "service"
            else:
                # by provider's name
                results = system.search.search_HP_name(query)
                results_kind = "HP"
                prev_type = "provider"
            return render_template(
                "search.html",
                results=results,
                results_kind=results_kind,
                prev_type=prev_type,
                query=query,
            )
        else:
            flash("Invalid search request.")
        return render_template("search.html", query=query)
    return render_template("search.html")
예제 #2
0
def login():

    if current_user.is_authenticated:
        return redirect(url_for("home"))

    if request.method == "POST":
        form = LoginForm(request.form)

        if form.validate():
            if system.login(form.email.data, form.password.data):
                redir = request.args.get("next")
                flash("Successfully logged in.")
                return redirect(redir or url_for("home"))

            error_messages = [
                "Login failed, please check your email and password."
            ]
            return render_template("login.html",
                                   email=form.email.data,
                                   error_messages=error_messages)

        else:
            return render_template("login.html",
                                   email=form.email.data,
                                   error_messages=form.lerrors)

    return render_template("login.html")
예제 #3
0
def appointment_info(bid):
    # Make sure that it can be converted to an int
    try:
        bid = int(bid)
    except ValueError as e:
        abort(404)
    booking = system.booking_system.get_booking_by_id(bid, current_user)
    if booking:
        patient = booking.user
        if request.method == "POST":
            form = NoteForm(request.form)
            if form.validate():
                # Most of this stuff should really be in HealthCareSystem
                date = datetime.now()
                new_note = Note(copy(current_user), form.note.data,
                                form.medication.data, date)
                system.add_patient_note(new_note, patient)
            else:
                flash(form.lerrors)
            return render_template(
                "appointment.html",
                booking=booking,
                patient=patient,
                note=form.note.data,
                medication=form.medication.data,
            )

        # If GET request
        # Rather hacky way to create "newlines" in HTML, but probably the least hacky.
        return render_template("appointment.html",
                               booking=booking,
                               patient=patient)
    # If booking not found
    abort(404)
 def add_patient_note(self, note, patient):
     bookings = self.booking_system.get_user_bookings(note.provider)
     for b in bookings:
         #lol = str(datetime.now())
         #flash(lol)  
         x = b.time.replace(minute = (b.time.minute+30)%60)
         #flash('1')
         if x.minute == 00:
             #flash('2')
             x = x.replace(hour=(x.hour+1)%24)
         #lol = str(x)
         #flash(lol)
         #lol = str(b.time)
         #flash(lol)
         #lol = str(note.datetime)
         #flash(lol)
         if note.datetime <= x and note.datetime >= b.time:           #if current time inside appointment time
             loader = CSVLoader(self.base_path)
             loader.write_HP_notes(note, patient)
             patient.add_note(note)
             flash('Note Added Successfully')
             return
     flash("Note Failed - Not within an appointment.")
예제 #5
0
 def add_rating(self, rating, patient, name, system):
     bookings = system.booking_system.get_user_bookings(patient, "past")
     loader = CSVLoader(self.root_path)
     for b in bookings:
         if b.HC == name or b.HP == name:  # checks both centre and provider
             flash("Rating submitted.")
             if b.HC == name:
                 rate_type = 'centre'
             else:
                 rate_type = 'provider'
             # iterate in csv file to check for previous ratings, and re-rate.
             for r in name.ratings:  # centre
                 if r.patient == patient:
                     r.value = rate.value
                     flash('Changed Rating - Previously Rated')
                     return rate_type
             name.add_rating(rate)
             flash('Added Rating')
             return rate_type
     flash("Failed to submit rating - Never booked.")
     return "failure"
예제 #6
0
def logout():
    system.logout()
    flash("Successfully logged out.")
    return redirect(url_for("login"))
예제 #7
0
def book_appointment(provider, centre):
    provider = system.get_user_by_id(provider)
    centre = system.hc_manager.get_HC_by_name(centre)
    # 404 if provider or centre does not exist in our system.
    if not provider or not centre:
        abort(404)

    booking_date = request.args.get("date")
    if booking_date:
        # Validate date
        try:
            year, month, day = booking_date.split("-")
            booking_date = date(int(year), int(month), int(day))
            if booking_date < datetime.now().date():
                raise Exception("date provided is before current date.")
        except (ValueError, Exception) as e:
            flash("Invalid date: " + str(e))
            return render_template("book_appointment.html",
                                   provider=provider,
                                   centre=centre)
        times = system.booking_system.booking_availabilities(
            provider, booking_date)
        # Handle submitted forms
        if request.method == "POST":
            form = BookingForm(request.form)
            if form.validate():
                booking_datetime = datetime.combine(booking_date,
                                                    form.time.data)
                if booking_datetime > datetime.now():
                    loader = CSVLoader(app.root_path)
                    new_booking = Booking(centre, provider, booking_datetime,
                                          copy(current_user), form.note.data)
                    booking_system.make_booking(new_booking)
                    loader.write_booking(new_booking)
                    flash("Booking Successful!")
                    return redirect(url_for("appointments"))
                else:
                    flash("Appointments cannot be made in the past.")
            else:
                flash(form.errors)
            return render_template(
                "book_appointment.html",
                times=times,
                provider=provider,
                centre=centre,
                date=request.args.get("date"),
                note=form.note.data,
            )
        # If a valid booking_date was provided but it's a GET request
        else:
            return render_template(
                "book_appointment.html",
                times=times,
                provider=provider,
                centre=centre,
                date=request.args.get("date"),
            )
    # No valid date provided
    if booking_date == "":
        flash("Please enter a date.")
    return render_template("book_appointment.html",
                           provider=provider,
                           centre=centre)