[moods] Add check in form
Some checks failed
build & deploy / test (push) Failing after 1m19s
build & deploy / deploy (push) Has been skipped

This commit is contained in:
2026-04-28 17:00:02 -04:00
parent 05cbcc1967
commit 181700b05e
4 changed files with 98 additions and 20 deletions

View File

@ -1,9 +1,10 @@
import logging
from django.contrib.auth.decorators import login_required
from django.db import models
from django.shortcuts import redirect, render
from django.urls import reverse
from django.utils import timezone
from moods.models import Mood, MoodLogData, MoodQuality
from moods.models import Mood, MoodLogData, MoodQuality, MoodReason
from scrobbles.models import Scrobble
logger = logging.getLogger(__name__)
@ -11,9 +12,20 @@ logger = logging.getLogger(__name__)
@login_required
def checkin(request):
"""Two-step mood check-in wizard"""
"""Three-step mood check-in wizard"""
step = request.session.get("checkin_step", 1)
if request.GET.get("back"):
back_step = request.GET.get("back")
if back_step == "2":
request.session["checkin_step"] = 2
request.session.pop("checkin_mood_id", None)
else:
request.session.pop("checkin_step", None)
request.session.pop("checkin_quality", None)
request.session.pop("checkin_mood_id", None)
return redirect("moods:checkin")
if request.method == "POST":
if step == 1:
quality = request.POST.get("mood_quality")
@ -33,12 +45,25 @@ def checkin(request):
mood_id = request.POST.get("mood")
quality = request.session.get("checkin_quality")
if mood_id and quality:
request.session["checkin_mood_id"] = int(mood_id)
request.session["checkin_step"] = 3
return redirect("moods:checkin")
return redirect("moods:checkin")
elif step == 3:
reason_id = request.POST.get("reason")
mood_id = request.session.get("checkin_mood_id")
quality = request.session.get("checkin_quality")
if mood_id and quality:
try:
mood = Mood.objects.get(id=mood_id)
log_data = MoodLogData(
mood_quality=quality,
mood_type=mood.mood_type,
mood_reason_ids=[int(reason_id)] if reason_id else [],
)
scrobble = Scrobble.objects.create(
@ -53,6 +78,7 @@ def checkin(request):
# Clear session data
request.session.pop("checkin_step", None)
request.session.pop("checkin_quality", None)
request.session.pop("checkin_mood_id", None)
return redirect("moods:checkin_success")
except Mood.DoesNotExist:
@ -68,9 +94,24 @@ def checkin(request):
return render(
request, "moods/checkin_quality.html", {"qualities": qualities}
)
elif step == 2:
quality = request.session.get("checkin_quality", 4)
positive_qualities = [MoodQuality.NEUTRAL.value, MoodQuality.SLIGHTLY_PLEASANT.value,
MoodQuality.PLEASANT.value, MoodQuality.VERY_PLEASANT.value]
if quality in positive_qualities:
mood_groups = [
("positive", Mood.objects.filter(mood_type="positive").exclude(description__isnull=True).exclude(description="")),
("negative", Mood.objects.filter(mood_type="negative").exclude(description__isnull=True).exclude(description="")),
]
else:
mood_groups = [
("negative", Mood.objects.filter(mood_type="negative").exclude(description__isnull=True).exclude(description="")),
("positive", Mood.objects.filter(mood_type="positive").exclude(description__isnull=True).exclude(description="")),
]
return render(request, "moods/checkin_mood.html", {"mood_groups": mood_groups})
else:
moods = Mood.objects.all()
return render(request, "moods/checkin_mood.html", {"moods": moods})
reasons = MoodReason.objects.all()
return render(request, "moods/checkin_reason.html", {"reasons": reasons})
@login_required