Source code for app.views.prescriptions
from datetime import datetime
from flask import Blueprint
from flask import redirect
from flask import render_template
from flask import request
from flask import url_for
from flask_login import login_required
from app import db
from app.models.forms import PrescriptionForm
from app.models.medication import Prescription
from app.models.persons import Patient
from app.utils import adherence
bp = Blueprint("prescriptions", __name__)
[docs]@bp.route("/patients/<int:patient_id>/new-prescription", methods=("GET", "POST"))
@login_required
def add_prescription(patient_id):
"""Route to add a patient prescription via a form."""
rx_form = PrescriptionForm()
patient = Patient.query.filter_by(id=patient_id).first()
if request.method == "POST":
f = request.form
# Basic data directly from form input
rx_fields = {
"drug": f.get("drug"),
"desc": f.get("desc"),
"strength": int(f.get("strength")),
"strength_unit": f.get("strength_unit"),
"quantity": int(f.get("quantity")),
"form": f.get("form"),
"amount": int(f.get("amount")),
"route": f.get("route"),
"duration": int(f.get("duration")),
"duration_unit": f.get("duration_unit")[:-1],
"refills": int(f.get("refills")),
"time_of_day": f"{f.get('time_of_day_am')}, {f.get('time_of_day_pm')}",
"start_date": datetime.strptime(f.get("start_date"), "%m/%d/%Y"),
}
# Time of day
if f.get("time_of_day_am"):
if f.get("time_of_day_pm"):
tod = "AM, PM"
else:
tod = "AM"
elif f.get("time_of_day_pm"):
tod = "PM"
else:
tod = None
rx_fields["time_of_day"] = tod
# Translate dosage to frequency info
freq_info = adherence.DOSAGE_TO_FREQ[f.get("dosage")]
rx_fields["freq"] = freq_info["freq"]
rx_fields["freq_repeat"] = freq_info["freq_repeat"]
rx_fields["freq_repeat_unit"] = freq_info["freq_repeat_unit"]
# Non-form data; autofilled
rx_fields["created"] = datetime.now()
rx_fields["refill_num"] = 0
rx_fields["last_refill_date"] = rx_fields["start_date"]
rx_fields["patient"] = patient
# Next refill day, days until next refill
next_refill_date = adherence.get_next_refill_date(
rx_fields["start_date"],
rx_fields["duration"],
rx_fields["duration_unit"],
rx_fields["refills"],
rx_fields["refill_num"],
)
rx_fields["next_refill_date"] = next_refill_date
days_until_refill = adherence.get_days_until_refill(
datetime.now(), next_refill_date
)
rx_fields["days_until_refill"] = days_until_refill
# Create Rx
rx = Prescription(**rx_fields)
db.session.add(rx)
db.session.commit()
return redirect(url_for("patients.profile", patient_id=patient_id))
return render_template(
"prescriptions/add_prescription.html", patient=patient, form=rx_form
)