[moods] Add a nice form for checking in
This commit is contained in:
@ -1,4 +1,83 @@
|
||||
from moods.models import Mood
|
||||
import logging
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.shortcuts import redirect, render
|
||||
from django.urls import reverse
|
||||
from django.utils import timezone
|
||||
from moods.models import Mood, MoodLogData, MoodQuality
|
||||
from scrobbles.models import Scrobble
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@login_required
|
||||
def checkin(request):
|
||||
"""Two-step mood check-in wizard"""
|
||||
step = request.session.get("checkin_step", 1)
|
||||
|
||||
if request.method == "POST":
|
||||
if step == 1:
|
||||
quality = request.POST.get("mood_quality")
|
||||
if quality:
|
||||
request.session["checkin_quality"] = int(quality)
|
||||
request.session["checkin_step"] = 2
|
||||
return redirect("moods:checkin")
|
||||
qualities = [
|
||||
{"value": q.value, "name": q.name.replace("_", " ").title()}
|
||||
for q in MoodQuality
|
||||
]
|
||||
return render(
|
||||
request, "moods/checkin_quality.html", {"qualities": qualities}
|
||||
)
|
||||
|
||||
elif step == 2:
|
||||
mood_id = request.POST.get("mood")
|
||||
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,
|
||||
)
|
||||
|
||||
scrobble = Scrobble.objects.create(
|
||||
user=request.user,
|
||||
mood=mood,
|
||||
media_type=Scrobble.MediaType.MOOD,
|
||||
timestamp=timezone.now(),
|
||||
source="web_checkin",
|
||||
log=log_data.asdict,
|
||||
)
|
||||
|
||||
# Clear session data
|
||||
request.session.pop("checkin_step", None)
|
||||
request.session.pop("checkin_quality", None)
|
||||
|
||||
return redirect("moods:checkin_success")
|
||||
except Mood.DoesNotExist:
|
||||
logger.error(f"Mood with id {mood_id} not found")
|
||||
|
||||
return redirect("moods:checkin")
|
||||
|
||||
if step == 1:
|
||||
qualities = [
|
||||
{"value": q.value, "name": q.name.replace("_", " ").title()}
|
||||
for q in MoodQuality
|
||||
]
|
||||
return render(
|
||||
request, "moods/checkin_quality.html", {"qualities": qualities}
|
||||
)
|
||||
else:
|
||||
moods = Mood.objects.all()
|
||||
return render(request, "moods/checkin_mood.html", {"moods": moods})
|
||||
|
||||
|
||||
@login_required
|
||||
def checkin_success(request):
|
||||
return render(request, "moods/checkin_success.html")
|
||||
|
||||
|
||||
from scrobbles.views import ScrobbleableListView, ScrobbleableDetailView
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user