def doctorNewSlot(): if not helper.check_doctor_privilege(): return redirect("/login") doctor_id = current_user.get_id() date = datetime.datetime.strptime(request.form['date'], "%m/%d/%Y") startTime = datetime.datetime.strptime(request.form['startTime'], helper.TIME_FORMAT) total_slots = request.form['slotNumber'] t_seg = Time_segment.query.filter( Time_segment.t_seg_starttime == startTime).one() # check if a time slot exists for the datetime exist_slot = Time_slot.query.filter( Time_slot.doctor_id == doctor_id, Time_slot.slot_seg_id == t_seg.t_seg_id, Time_slot.slot_date == date).first() if exist_slot: return make_response({'ret': 1, 'msg': 'Slot Already Created'}) time_slot = Time_slot(slot_date=date, n_total=total_slots, n_booked=0, slot_seg_id=t_seg.t_seg_id, doctor_id=doctor_id) db.session.add(time_slot) try: db.session.commit() return make_response(jsonify({'ret': 0})) except: db.session.rollback() return make_response(jsonify({'ret': "Database error"})) return make_response({"ret": 0})
def viewMC(): if not (helper.check_doctor_privilege() or helper.check_nurse_privilege()): return redirect("/loadHomePage") patient_id = request.form['patientID'] helper.load_id2name_map() table = Application.query.filter( Application.patient_id == patient_id, Application.status == StatusEnum.finished).all() return make_response( jsonify({ 'patientID': str(patient_id), 'patientName': helper.id2name(patient_id), 'appts': [{ 'appID': str(table[i].id), 'mcID': table[i].mc_id, 'date': table[i].date.strftime(helper.DATE_FORMAT), 'time': table[i].time.strftime(helper.TIME_FORMAT), 'doctor': helper.id2name(table[i].doctor_id), 'symptoms': table[i].symptoms } for i in range(len(table))] }))
def goViewMC(): if not (helper.check_doctor_privilege() or helper.check_nurse_privilege()): return redirect("/loadHomePage") patient_id = request.form['patientID'] helper.load_id2name_map() return render_template('doctorNurseViewMC.html', patientID=patient_id, patientName=helper.id2name(patient_id))
def doctorFinishAppt(): if not helper.check_doctor_privilege(): return redirect("/login") app_id = request.form['appID'] appt = Application.query.filter(Application.id == app_id).first() appt.status = StatusEnum.finished try: db.session.commit() return make_response(jsonify({'ret': 0})) except: db.session.rollback() return make_response(jsonify({'ret': "Database error"}))
def doctorEditDiag(): if not helper.check_doctor_privilege(): return redirect("/login") mc_id = request.form['mcID'] diagnosis = request.form['diagnosis'] mc = Medical_record.query.filter(Medical_record.id == mc_id).first() if not mc: return make_response({"ret": "Medical Record Not Found!"}) mc.diagnosis = diagnosis try: db.session.commit() except: db.session.rollback() return make_response(jsonify({'ret': "Database error"})) return make_response(jsonify({'ret': 0}))
def doctorTodayAppt(): if not helper.check_doctor_privilege(): return redirect("/login") doctorID = current_user.get_id() appt_list = helper.doc2appts(doctorID, 0) helper.load_id2name_map() return make_response( jsonify([{ "appID": str(appt_list[i].id), "date": appt_list[i].date.strftime(helper.DATE_FORMAT), "time": appt_list[i].time.strftime(helper.TIME_FORMAT), "nurse": helper.id2name(appt_list[i].approver_id), "patient": helper.id2name(appt_list[i].patient_id), "symptoms": appt_list[i].symptoms } for i in range(len(appt_list))]))
def doctorFutureAppt(): if not helper.check_doctor_privilege(): return redirect("/login") if request.method == "POST": start_date = request.form["startDate"] end_date = request.form["endDate"] elif request.method == "GET": start_date = 0 end_date = 0 doctorID = current_user.get_id() # if start date is given, use it directly; o.w. set it to today if start_date == datetime.datetime.today().strftime(helper.DATE_FORMAT): filter = True if start_date: start_date = datetime.datetime.strptime(start_date, helper.DATE_FORMAT) else: start_date = datetime.datetime.today() # similar to start date if end_date: end_date = datetime.datetime.strptime(end_date, helper.DATE_FORMAT) if end_date: apps = helper.doc2appts(doctorID, period=(end_date - start_date).days, start_date=start_date) else: apps = helper.doc2appts(doctorID, start_date=start_date, limit='no') if filter: for i in range(len(apps)): if datetime.datetime.combine( apps[i].date, apps[i].time ) < datetime.datetime.now() - timedelta(minutes=30): apps.pop(i) helper.load_id2name_map() return make_response( jsonify([{ "appID": app.id, "date": app.date.strftime(helper.DATE_FORMAT), "time": app.time.strftime(helper.TIME_FORMAT), "nurse": helper.id2name(app.approver_id), "patient": helper.id2name(app.patient_id), "symptoms": app.symptoms, } for app in apps]))
def getPatientInfo(): if not (helper.check_doctor_privilege() or helper.check_nurse_privilege()): return redirect("/login") p_id = request.form['patientID'] patient = db.session.query(Patient).filter(Patient.id == p_id).first() gender = patient.gender if gender: gender = gender.value return make_response( jsonify({ "ret": 0, "age": patient.age, "gender": gender, "bloodType": patient.blood_type, "allergies": patient.allergies, "chronics": patient.chronics, "medications": patient.medications }), 200)
def doctorAddPrescrip(): if not helper.check_doctor_privilege(): return redirect("/login") mc_id = request.form['mcID'] medicine = request.form['medicine'] dose = request.form['dose'] comments = request.form['comments'] prescription = Prescription(medicine=medicine, dose=dose, comments=comments, mc_id=mc_id) db.session.add(prescription) try: db.session.commit() return make_response(jsonify({'ret': 0})) except: db.session.rollback() return make_response(jsonify({'ret': "Database error"}))
def getLabReports(): if not (helper.check_doctor_privilege() or helper.check_nurse_privilege()): return redirect("/loadHomePage") mc_id = request.form['mcID'] mc = Medical_record.query.filter(Medical_record.id == mc_id).first() if not mc: return make_response({"ret": "Medical Record Not Found!"}) return make_response( jsonify({ "ret": 0, "labReports": [{ "lr_type": lr.lr_type, "id": lr.id, "nurse_comments": lr.nurse_comment, "doctor_comments": lr.doctor_comment, "file_path": lr.file_path } for lr in mc.lab_reports] }))
def doctorGetPrescrip(): if not helper.check_doctor_privilege(): return redirect("/login") mc_id = request.form['mcID'] mc = Medical_record.query.filter(Medical_record.id == mc_id).first() if not mc: return make_response({"ret": "Medical Record Not Found!"}) prescription_list = Prescription.query.filter( Prescription.mc_id == mc_id).all() return make_response( jsonify({ "ret": 0, "prescriptions": [{ "id": pres.id, "medicine": pres.medicine, "dose": pres.dose, "comments": pres.comments } for pres in prescription_list] }))
def doctorGoViewAppt(appID): if not helper.check_doctor_privilege(): return redirect("/login") appt_res = Application.query.filter(Application.id == appID).first() finished = False if appt_res.status.value == "finished": finished = True helper.load_id2name_map() return render_template('doctorViewAppt.html', appID=appt_res.id, date=appt_res.date.strftime(helper.DATE_FORMAT), time=appt_res.time.strftime(helper.TIME_FORMAT), approverID=appt_res.approver_id, patientID=appt_res.patient_id, patient=helper.id2name(appt_res.patient_id), symptoms=appt_res.symptoms, comments=appt_res.reject_reason, mcID=appt_res.mc_id, finished=finished)
def doctorPastAppt(): if not helper.check_doctor_privilege(): return redirect("/login") if request.method == "POST": start_date = request.form["startDate"] end_date = request.form["endDate"] elif request.method == "GET": start_date = 0 end_date = 0 doctorID = current_user.get_id() if start_date: start_date = datetime.datetime.strptime(start_date, helper.DATE_FORMAT) if end_date: end_date = datetime.datetime.strptime(end_date, helper.DATE_FORMAT) else: end_date = datetime.date.today() if start_date: apps = helper.doc2appts(doctorID, period=(end_date - start_date).days, direction='past', start_date=end_date) else: apps = helper.doc2appts(doctorID, start_date=start_date, direction='past', limit='no') helper.load_id2name_map() return make_response( jsonify([{ "appID": app.id, "date": app.date.strftime(helper.DATE_FORMAT), "time": app.time.strftime(helper.TIME_FORMAT), "nurse": helper.id2name(app.approver_id), "patient": helper.id2name(app.patient_id), "symptoms": app.symptoms, } for app in apps]))
def doctorGetSlots(): if not helper.check_doctor_privilege(): return redirect("/login") doctor_id = current_user.get_id() t_slots = Time_slot.query.filter(Time_slot.doctor_id == doctor_id).all() ret = { "ret": 0, "data": [{ "title": f'total: {item.n_total}, booked: {item.n_booked}', "start": item.slot_date.strftime(helper.DATE_FORMAT) + "T" + Time_segment.query.filter(Time_segment.t_seg_id == item.slot_seg_id ).one().t_seg_starttime.strftime( helper.TIME_FORMAT) } for item in t_slots] } return make_response(jsonify(ret), 200)
def doctorReqLabReport(): if not helper.check_doctor_privilege(): return redirect("/login") mc_id = request.form['mcID'] patient_id = Medical_record.query.filter( Medical_record.id == mc_id).first().patient_id lr_type = request.form['type'] comments = request.form['comments'] lab_report = Lab_report(doctor_comment=comments, lr_type=lr_type, mc_id=mc_id, patient_id=patient_id) db.session.add(lab_report) try: db.session.commit() return make_response(jsonify({'ret': 0})) except: db.session.rollback() return make_response(jsonify({'ret': "Database error"}))
def doctorOnGoingAppt(): if not helper.check_doctor_privilege(): return redirect("/login") doctorID = current_user.get_id() nowtime = datetime.datetime.now() appt_list = helper.doc2appts(doctorID, 0) now_approved_appts = [] for appt in appt_list: appt_date_time = datetime.datetime.combine(appt.date, appt.time) if appt_date_time <= nowtime <= appt_date_time + timedelta(minutes=30): now_approved_appts.append(appt) helper.load_id2name_map() return make_response( jsonify([{ "appID": appt.id, "date": appt.date.strftime(helper.DATE_FORMAT), "time": appt.time.strftime(helper.TIME_FORMAT), "nurse": helper.id2name(appt.approver_id), "patient": helper.id2name(appt.patient_id), "symptoms": appt.symptoms } for appt in now_approved_appts]))
def doctorAllAppt(): if not helper.check_doctor_privilege(): return redirect("/login") return render_template('doctorAllAppt.html')
def userViewAppt(): if request.method == "POST": mc_id = request.form['mcID'] elif request.method == "GET": mc_id = request.args.get('mcID') mc = Medical_record.query.filter(Medical_record.id == mc_id).first() if not mc: return make_response({"ret": "Medical Record Not Found!"}) if helper.check_patient_privilege(): if current_user.get_id() != mc.patient_id: return redirect(url_for("/login")) # passed medical record existence check and user privilege check prescription_list = Prescription.query.filter( Prescription.mc_id == mc_id).all() lab_reports = mc.lab_reports ret = { "ret": "0", "preExam": { "bodyTemperature": str(mc.body_temperature), "heartRate": str(mc.heart_rate), "lowBloodPressure": str(mc.low_blood_pressure), "highBloodPressure": str(mc.high_blood_pressure), "weight": str(mc.weight), "height": str(mc.height), "state": mc.state.value }, "diagnosis": mc.diagnosis, "prescriptions": [{ "id": pres.id, "medicine": pres.medicine, "dose": pres.dose, "comments": pres.comments } for pres in prescription_list], "labReports": [{ "lr_type": lr.lr_type, "id": lr.id, "doctor_comments": lr.doctor_comment, "nurse_comments": lr.nurse_comment, "file_path": lr.file_path } for lr in lab_reports] } # get the lab report types for doctor for lab report request creation if request.form['type'] == "1": if not helper.check_doctor_privilege(): return make_response( {"ret": "Access to lab report types not granted"}) lab_r_types = Lab_report_type.query.all() ret["labReportTypes"] = [{ "type": lrt.type, "description": lrt.description } for lrt in lab_r_types] return make_response(jsonify(ret))