diff --git a/vrobbler/apps/moods/templates/moods/checkin_mood.html b/vrobbler/apps/moods/templates/moods/checkin_mood.html index 67d9464..321e86e 100644 --- a/vrobbler/apps/moods/templates/moods/checkin_mood.html +++ b/vrobbler/apps/moods/templates/moods/checkin_mood.html @@ -10,17 +10,22 @@
{% csrf_token %}
- {% for mood in moods %} - + {% for group_type, group_moods in mood_groups %} +
+
{{ group_type|title }}
+
+ {% for mood in group_moods %} + + {% endfor %} {% endfor %}
- Back to quality selection + Back to quality selection
diff --git a/vrobbler/apps/moods/templates/moods/checkin_reason.html b/vrobbler/apps/moods/templates/moods/checkin_reason.html new file mode 100644 index 0000000..58adf27 --- /dev/null +++ b/vrobbler/apps/moods/templates/moods/checkin_reason.html @@ -0,0 +1,32 @@ +{% extends "base.html" %} + +{% block page_title %}Check-in - Select your reason{% endblock %} + +{% block content %} +
+
+
+

Why are you feeling this way?

+
+ {% csrf_token %} +
+ + {% for reason in reasons %} + + {% endfor %} +
+
+ +
+
+
+{% endblock %} diff --git a/vrobbler/apps/moods/views.py b/vrobbler/apps/moods/views.py index 9935e80..dd56505 100644 --- a/vrobbler/apps/moods/views.py +++ b/vrobbler/apps/moods/views.py @@ -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 diff --git a/vrobbler/templates/base.html b/vrobbler/templates/base.html index b0326f4..5feda27 100644 --- a/vrobbler/templates/base.html +++ b/vrobbler/templates/base.html @@ -217,24 +217,24 @@ {% endif %} {% if user.is_authenticated %} - + {% else %} + + {% endif %}