Files
Andros Fenollosa 19f4e84a30 Remove user FK from all models, add goals and promises
- Remove user ForeignKey from all 7 models (single-user app)
- Update all views, handlers, forms, admin, API, seed, and tests
- Add MonthlyGoal model with goals and promises sections
- Goals/promises: add, toggle (strikethrough), delete via LiveView
2026-03-18 15:18:50 +01:00

70 lines
1.8 KiB
Python

from django.template.loader import render_to_string
from liveview import liveview_handler, send
from app.monthly.models import MonthlyGoal
def _render_goals(year, month, kind):
items = MonthlyGoal.objects.filter(year=year, month=month, kind=kind)
target = f"#{kind}s-list"
return target, render_to_string(
"pages/monthly/partials/goals_list.html",
{"items": items, "year": year, "month": month, "kind": kind},
)
@liveview_handler("add_goal")
def add_goal(consumer, content):
form = content.get("form", {})
year = int(form.get("year", 0))
month = int(form.get("month", 0))
kind = form.get("kind", "")
text = form.get("goal_text", "").strip()
if not text or not year or not month or kind not in ("goal", "promise"):
return
MonthlyGoal.objects.create(year=year, month=month, text=text, kind=kind)
target, html = _render_goals(year, month, kind)
send(consumer, {"target": target, "html": html})
@liveview_handler("toggle_goal")
def toggle_goal(consumer, content):
data = content.get("data", {})
goal_id = data.get("data_id", "")
year = int(data.get("data_year", 0))
month = int(data.get("data_month", 0))
kind = data.get("data_kind", "")
if not goal_id:
return
try:
goal = MonthlyGoal.objects.get(id=goal_id)
goal.done = not goal.done
goal.save()
except MonthlyGoal.DoesNotExist:
return
target, html = _render_goals(year, month, kind)
send(consumer, {"target": target, "html": html})
@liveview_handler("delete_goal")
def delete_goal(consumer, content):
data = content.get("data", {})
goal_id = data.get("data_id", "")
year = int(data.get("data_year", 0))
month = int(data.get("data_month", 0))
kind = data.get("data_kind", "")
if not goal_id:
return
MonthlyGoal.objects.filter(id=goal_id).delete()
target, html = _render_goals(year, month, kind)
send(consumer, {"target": target, "html": html})