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})