Feat: Add quetiapine support to medication tracking
- Implement migration script to add quetiapine and quetiapine_doses columns to existing CSV data. - Update DataManager to include quetiapine and quetiapine_doses in data handling. - Modify MedTrackerApp to manage quetiapine entries and doses. - Enhance UIManager to include quetiapine in the user interface for medication selection and display. - Update tests to cover new quetiapine functionality, including sample data and DataManager tests.
This commit is contained in:
+54
-11
@@ -138,6 +138,7 @@ class UIManager:
|
||||
"hydroxyzine": (tk.IntVar(value=0), "Hydroxyzine 25mg"),
|
||||
"gabapentin": (tk.IntVar(value=0), "Gabapentin 100mg"),
|
||||
"propranolol": (tk.IntVar(value=0), "Propranolol 10mg"),
|
||||
"quetiapine": (tk.IntVar(value=0), "Quetiapine 25mg"),
|
||||
}
|
||||
|
||||
for idx, (_med_name, (var, text)) in enumerate(medicine_vars.items()):
|
||||
@@ -197,6 +198,7 @@ class UIManager:
|
||||
"Hydroxyzine",
|
||||
"Gabapentin",
|
||||
"Propranolol",
|
||||
"Quetiapine",
|
||||
"Note",
|
||||
]
|
||||
|
||||
@@ -212,6 +214,7 @@ class UIManager:
|
||||
"Hydroxyzine 25mg",
|
||||
"Gabapentin 100mg",
|
||||
"Propranolol 10mg",
|
||||
"Quetiapine 25mg",
|
||||
"Note",
|
||||
]
|
||||
|
||||
@@ -228,6 +231,7 @@ class UIManager:
|
||||
("Hydroxyzine", 120, "center"),
|
||||
("Gabapentin", 120, "center"),
|
||||
("Propranolol", 120, "center"),
|
||||
("Quetiapine", 120, "center"),
|
||||
("Note", 300, "w"),
|
||||
]
|
||||
|
||||
@@ -286,9 +290,16 @@ class UIManager:
|
||||
if len(values) == 10:
|
||||
# Old format: date, dep, anx, slp, app, bup, hydro, gaba, prop, note
|
||||
date, dep, anx, slp, app, bup, hydro, gaba, prop, note = values
|
||||
bup_doses, hydro_doses, gaba_doses, prop_doses = "", "", "", ""
|
||||
bup_doses, hydro_doses, gaba_doses, prop_doses, quet_doses = (
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
)
|
||||
quet = 0
|
||||
elif len(values) == 14:
|
||||
# New format with dose tracking
|
||||
# Old new format with dose tracking (without quetiapine)
|
||||
(
|
||||
date,
|
||||
dep,
|
||||
@@ -305,11 +316,9 @@ class UIManager:
|
||||
prop_doses,
|
||||
note,
|
||||
) = values
|
||||
else:
|
||||
# Fallback for unexpected format
|
||||
self.logger.warning(f"Unexpected number of values in edit: {len(values)}")
|
||||
# Pad with default values
|
||||
values_list = list(values) + [""] * (14 - len(values))
|
||||
quet, quet_doses = 0, ""
|
||||
elif len(values) == 16:
|
||||
# New format with quetiapine and dose tracking
|
||||
(
|
||||
date,
|
||||
dep,
|
||||
@@ -324,8 +333,33 @@ class UIManager:
|
||||
gaba_doses,
|
||||
prop,
|
||||
prop_doses,
|
||||
quet,
|
||||
quet_doses,
|
||||
note,
|
||||
) = values_list[:14]
|
||||
) = values
|
||||
else:
|
||||
# Fallback for unexpected format
|
||||
self.logger.warning(f"Unexpected number of values in edit: {len(values)}")
|
||||
# Pad with default values
|
||||
values_list = list(values) + [""] * (16 - len(values))
|
||||
(
|
||||
date,
|
||||
dep,
|
||||
anx,
|
||||
slp,
|
||||
app,
|
||||
bup,
|
||||
bup_doses,
|
||||
hydro,
|
||||
hydro_doses,
|
||||
gaba,
|
||||
gaba_doses,
|
||||
prop,
|
||||
prop_doses,
|
||||
quet,
|
||||
quet_doses,
|
||||
note,
|
||||
) = values_list[:16]
|
||||
|
||||
# Create variables and fields
|
||||
vars_dict = self._create_edit_fields(edit_win, date, dep, anx, slp, app)
|
||||
@@ -333,7 +367,7 @@ class UIManager:
|
||||
# Medicine checkboxes
|
||||
current_row = 6 # After the 5 fields (date, dep, anx, slp, app)
|
||||
med_vars = self._create_medicine_checkboxes(
|
||||
edit_win, current_row, bup, hydro, gaba, prop
|
||||
edit_win, current_row, bup, hydro, gaba, prop, quet
|
||||
)
|
||||
vars_dict.update(med_vars)
|
||||
|
||||
@@ -347,6 +381,7 @@ class UIManager:
|
||||
"hydroxyzine": hydro_doses,
|
||||
"gabapentin": gaba_doses,
|
||||
"propranolol": prop_doses,
|
||||
"quetiapine": quet_doses,
|
||||
},
|
||||
)
|
||||
vars_dict.update(dose_vars)
|
||||
@@ -474,6 +509,7 @@ class UIManager:
|
||||
hydro: int,
|
||||
gaba: int,
|
||||
prop: int,
|
||||
quet: int,
|
||||
) -> dict[str, tk.IntVar]:
|
||||
"""Create medicine checkboxes in the edit window."""
|
||||
ttk.Label(parent, text="Treatment:").grid(
|
||||
@@ -487,6 +523,7 @@ class UIManager:
|
||||
"hydroxyzine": (hydro, "Hydroxyzine 25mg"),
|
||||
"gabapentin": (gaba, "Gabapentin 100mg"),
|
||||
"propranolol": (prop, "Propranolol 10mg"),
|
||||
"quetiapine": (quet, "Quetiapine 25mg"),
|
||||
}
|
||||
|
||||
vars_dict: dict[str, tk.IntVar] = {}
|
||||
@@ -514,7 +551,13 @@ class UIManager:
|
||||
# Extract dose data from the text widgets
|
||||
dose_data = {}
|
||||
|
||||
for medicine in ["bupropion", "hydroxyzine", "gabapentin", "propranolol"]:
|
||||
for medicine in [
|
||||
"bupropion",
|
||||
"hydroxyzine",
|
||||
"gabapentin",
|
||||
"propranolol",
|
||||
"quetiapine",
|
||||
]:
|
||||
dose_text_key = f"{medicine}_doses_text"
|
||||
|
||||
if dose_text_key in vars_dict and isinstance(
|
||||
@@ -526,7 +569,6 @@ class UIManager:
|
||||
)
|
||||
else:
|
||||
dose_data[medicine] = ""
|
||||
dose_data[medicine] = ""
|
||||
|
||||
callbacks["save"](
|
||||
parent,
|
||||
@@ -539,6 +581,7 @@ class UIManager:
|
||||
vars_dict["hydroxyzine"].get(),
|
||||
vars_dict["gabapentin"].get(),
|
||||
vars_dict["propranolol"].get(),
|
||||
vars_dict["quetiapine"].get(),
|
||||
vars_dict["note"].get(),
|
||||
dose_data,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user