osiris/tracker/admin.py

69 lines
1.9 KiB
Python

from django.contrib import admin
from tracker.models import (
DoseLog,
Medication,
PulseReading,
ReminderSent,
ScheduledDose,
)
class ScheduledDoseInline(admin.TabularInline):
"""Edit a medication's daily doses (and their reminder times) on the medication page."""
model = ScheduledDose
extra = 1
@admin.register(Medication)
class MedicationAdmin(admin.ModelAdmin):
list_display = ["name", "is_active", "schedule_summary"]
list_filter = ["is_active"]
search_fields = ["name"]
inlines = [ScheduledDoseInline]
@admin.display(description="Schedule")
def schedule_summary(self, obj: Medication) -> str:
doses = obj.scheduled_doses.filter(is_active=True)
if not doses:
return ""
return ", ".join(
f"{d.amount} {d.get_time_of_day_display().lower()}" for d in doses
)
@admin.register(ScheduledDose)
class ScheduledDoseAdmin(admin.ModelAdmin):
list_display = ["medication", "time_of_day", "amount", "reminder_time", "is_active"]
list_filter = ["is_active", "time_of_day", "medication"]
@admin.register(ReminderSent)
class ReminderSentAdmin(admin.ModelAdmin):
"""Read-only trail of which reminders went out, for when one seems to be missing."""
list_display = ["date", "scheduled_dose", "sent_at"]
list_filter = ["date"]
def has_add_permission(self, request):
return False
def has_change_permission(self, request, obj=None):
return False
@admin.register(DoseLog)
class DoseLogAdmin(admin.ModelAdmin):
"""The history. Day-to-day ticking off happens on the Today page."""
list_display = ["date", "scheduled_dose", "taken", "taken_at"]
list_filter = ["taken", "date", "scheduled_dose__medication"]
date_hierarchy = "date"
@admin.register(PulseReading)
class PulseReadingAdmin(admin.ModelAdmin):
list_display = ["date", "bpm", "notes"]
date_hierarchy = "date"