[moods] Add check in form
This commit is contained in:
@ -10,17 +10,22 @@
|
|||||||
<form method="post">
|
<form method="post">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="d-grid gap-3">
|
<div class="d-grid gap-3">
|
||||||
{% for mood in moods %}
|
{% for group_type, group_moods in mood_groups %}
|
||||||
<button type="submit" name="mood" value="{{ mood.id }}"
|
<div class="text-center mt-3 mb-2">
|
||||||
class="btn btn-outline-secondary btn-lg">
|
<h5>{{ group_type|title }}</h5>
|
||||||
{% if mood.title %}{{ mood.title }}{% else %}{{ mood.uuid }}{% endif %}
|
</div>
|
||||||
{% if mood.description %}<br><small class="text-muted">{{ mood.description }}</small>{% endif %}
|
{% for mood in group_moods %}
|
||||||
</button>
|
<button type="submit" name="mood" value="{{ mood.id }}"
|
||||||
|
class="btn btn-outline-secondary btn-lg">
|
||||||
|
{% if mood.title %}{{ mood.title }}{% else %}{{ mood.uuid }}{% endif %}
|
||||||
|
{% if mood.description %}<br><small class="text-muted">{{ mood.description }}</small>{% endif %}
|
||||||
|
</button>
|
||||||
|
{% endfor %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<div class="mt-3">
|
<div class="mt-3">
|
||||||
<a href="{% url 'moods:checkin' %}" class="btn btn-link">Back to quality selection</a>
|
<a href="{% url 'moods:checkin' %}?back=1" class="btn btn-link">Back to quality selection</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
32
vrobbler/apps/moods/templates/moods/checkin_reason.html
Normal file
32
vrobbler/apps/moods/templates/moods/checkin_reason.html
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block page_title %}Check-in - Select your reason{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="container mt-5">
|
||||||
|
<div class="row justify-content-center">
|
||||||
|
<div class="col-md-8">
|
||||||
|
<h2 class="mb-4">Why are you feeling this way?</h2>
|
||||||
|
<form method="post">
|
||||||
|
{% csrf_token %}
|
||||||
|
<div class="d-grid gap-3">
|
||||||
|
<button type="submit" name="reason" value=""
|
||||||
|
class="btn btn-outline-secondary btn-lg">
|
||||||
|
No reason
|
||||||
|
</button>
|
||||||
|
{% for reason in reasons %}
|
||||||
|
<button type="submit" name="reason" value="{{ reason.id }}"
|
||||||
|
class="btn btn-outline-secondary btn-lg">
|
||||||
|
{% if reason.title %}{{ reason.title }}{% else %}{{ reason.uuid }}{% endif %}
|
||||||
|
{% if reason.description %}<br><small class="text-muted">{{ reason.description }}</small>{% endif %}
|
||||||
|
</button>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<div class="mt-3">
|
||||||
|
<a href="{% url 'moods:checkin' %}?back=2" class="btn btn-link">Back to mood selection</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
@ -1,9 +1,10 @@
|
|||||||
import logging
|
import logging
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
|
from django.db import models
|
||||||
from django.shortcuts import redirect, render
|
from django.shortcuts import redirect, render
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils import timezone
|
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
|
from scrobbles.models import Scrobble
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@ -11,9 +12,20 @@ logger = logging.getLogger(__name__)
|
|||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def checkin(request):
|
def checkin(request):
|
||||||
"""Two-step mood check-in wizard"""
|
"""Three-step mood check-in wizard"""
|
||||||
step = request.session.get("checkin_step", 1)
|
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 request.method == "POST":
|
||||||
if step == 1:
|
if step == 1:
|
||||||
quality = request.POST.get("mood_quality")
|
quality = request.POST.get("mood_quality")
|
||||||
@ -33,12 +45,25 @@ def checkin(request):
|
|||||||
mood_id = request.POST.get("mood")
|
mood_id = request.POST.get("mood")
|
||||||
quality = request.session.get("checkin_quality")
|
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:
|
if mood_id and quality:
|
||||||
try:
|
try:
|
||||||
mood = Mood.objects.get(id=mood_id)
|
mood = Mood.objects.get(id=mood_id)
|
||||||
log_data = MoodLogData(
|
log_data = MoodLogData(
|
||||||
mood_quality=quality,
|
mood_quality=quality,
|
||||||
mood_type=mood.mood_type,
|
mood_type=mood.mood_type,
|
||||||
|
mood_reason_ids=[int(reason_id)] if reason_id else [],
|
||||||
)
|
)
|
||||||
|
|
||||||
scrobble = Scrobble.objects.create(
|
scrobble = Scrobble.objects.create(
|
||||||
@ -53,6 +78,7 @@ def checkin(request):
|
|||||||
# Clear session data
|
# Clear session data
|
||||||
request.session.pop("checkin_step", None)
|
request.session.pop("checkin_step", None)
|
||||||
request.session.pop("checkin_quality", None)
|
request.session.pop("checkin_quality", None)
|
||||||
|
request.session.pop("checkin_mood_id", None)
|
||||||
|
|
||||||
return redirect("moods:checkin_success")
|
return redirect("moods:checkin_success")
|
||||||
except Mood.DoesNotExist:
|
except Mood.DoesNotExist:
|
||||||
@ -68,9 +94,24 @@ def checkin(request):
|
|||||||
return render(
|
return render(
|
||||||
request, "moods/checkin_quality.html", {"qualities": qualities}
|
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:
|
else:
|
||||||
moods = Mood.objects.all()
|
reasons = MoodReason.objects.all()
|
||||||
return render(request, "moods/checkin_mood.html", {"moods": moods})
|
return render(request, "moods/checkin_reason.html", {"reasons": reasons})
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
|||||||
@ -217,24 +217,24 @@
|
|||||||
</form>
|
</form>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
<div class="navbar-nav">
|
<div class="navbar-nav flex-row">
|
||||||
<div class="nav-item text-nowrap">
|
<div class="nav-item text-nowrap">
|
||||||
<a class="nav-link px-3" href="{% url "moods:checkin" %}">Check-in</a>
|
<a class="nav-link px-3" href="{% url "moods:checkin" %}">Check-in</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="nav-item text-nowrap">
|
<div class="nav-item text-nowrap">
|
||||||
<a class="nav-link px-3" href="{% url "profiles:profile_settings" %}">Settings</a>
|
<a class="nav-link px-3" href="{% url "profiles:profile_settings" %}">Settings</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
<div class="navbar-nav">
|
|
||||||
<div class="nav-item text-nowrap">
|
<div class="nav-item text-nowrap">
|
||||||
{% if user.is_authenticated %}
|
|
||||||
<a class="nav-link px-3" href="{% url "account_logout" %}">Sign out</a>
|
<a class="nav-link px-3" href="{% url "account_logout" %}">Sign out</a>
|
||||||
{% else %}
|
|
||||||
<a class="nav-link px-3" href="{% url "account_login" %}">Sign in</a>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<div class="navbar-nav flex-row">
|
||||||
|
<div class="nav-item text-nowrap">
|
||||||
|
<a class="nav-link px-3" href="{% url "account_login" %}">Sign in</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
|
|||||||
Reference in New Issue
Block a user