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")
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")
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.")
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"
def logout(): system.logout() flash("Successfully logged out.") return redirect(url_for("login"))
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)