feat: add prescription refills column to planner table and email (#207)

- Add 6th column 'Prescription refills' to frontend Planner table
- Add matching column to backend planner email (HTML + plaintext)
- Show remaining refills for meds with prescription tracking, '–' otherwise
- Add backend translations for new column header (EN + DE)
- Add frontend i18n keys for prescription refills column
- Update planner tests with medications table schema

Closes #203
This commit is contained in:
Daniel Volz
2026-02-14 20:21:09 +01:00
committed by GitHub
parent 6ff0ad2745
commit 150be1e114
6 changed files with 78 additions and 3 deletions
+1
View File
@@ -207,6 +207,7 @@
"medication": "Medikament",
"usage": "Verbrauch",
"blistersNeeded": "Blister benötigt",
"prescriptionRefills": "Rezept-Nachfüllungen",
"blisters": "Blister",
"available": "Verfügbar"
}
+1
View File
@@ -207,6 +207,7 @@
"medication": "Medication",
"usage": "Usage",
"blistersNeeded": "Blisters needed",
"prescriptionRefills": "Prescription refills",
"blisters": "Blisters",
"available": "Available"
}
+6 -2
View File
@@ -196,16 +196,19 @@ export function PlannerPage() {
</form>
{plannerRows.length > 0 && (
<>
<div className="table">
<div className="table table-6">
<div className="table-head">
<span>{t("planner.table.medication")}</span>
<span>{t("planner.table.usage")}</span>
<span>{t("planner.table.blistersNeeded")}</span>
<span>{t("planner.table.prescriptionRefills")}</span>
<span>{t("planner.table.available")}</span>
<span>{t("table.status")}</span>
</div>
{plannerRows.map((row) => {
const med = meds.find((m) => m.name === row.medicationName);
const med =
meds.find((m) => m.id === row.medicationId) || meds.find((m) => m.name === row.medicationName);
const remainingRefills = med?.prescriptionEnabled ? (med.prescriptionRemainingRefills ?? 0) : null;
return (
<div key={row.medicationId} className="table-row clickable" onClick={() => med && openMedDetail(med)}>
<span data-label={t("planner.table.medication")} className="cell-with-avatar">
@@ -219,6 +222,7 @@ export function PlannerPage() {
<span data-label={t("planner.table.blisters")}>
{row.packageType === "bottle" ? "" : `${row.blistersNeeded} × ${row.blisterSize}`}
</span>
<span data-label={t("planner.table.prescriptionRefills")}>{remainingRefills ?? ""}</span>
<span data-label={t("planner.table.available")}>
{row.packageType === "bottle" ? (
`${Math.round(row.loosePills * 10) / 10} ${Math.round(row.loosePills * 10) / 10 === 1 ? t("common.pill") : t("common.pills")}`