mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-11-23 10:01:04 +00:00
Merge pull request #1749 from joachimesque/summary-goals
Display completed goal on Annual Summary page
This commit is contained in:
commit
1ff653ddeb
2 changed files with 44 additions and 1 deletions
|
@ -192,6 +192,31 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{% if goal_status and goal_status.percent >= 100 %}
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column has-text-centered">
|
||||||
|
<h2 class="title is-3 is-serif">
|
||||||
|
{% with goal=goal_status.goal goal_percent=goal_status.percent %}
|
||||||
|
{% blocktrans trimmed count counter=goal %}
|
||||||
|
{{ display_name }} set a goal of reading {{ goal }} book in {{ year }},<br />
|
||||||
|
and achieved {{ goal_percent }}% of that goal
|
||||||
|
{% plural %}
|
||||||
|
{{ display_name }} set a goal of reading {{ goal }} books in {{ year }},<br />
|
||||||
|
and achieved {{ goal_percent }}% of that goal
|
||||||
|
{% endblocktrans %}
|
||||||
|
{% endwith %}
|
||||||
|
</h2>
|
||||||
|
<p class="subtitle is-5">{% trans "Way to go!" %}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column is-one-fifth is-offset-two-fifths">
|
||||||
|
<hr />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% if ratings_total > 0 %}
|
{% if ratings_total > 0 %}
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<div class="column has-text-centered">
|
<div class="column has-text-centered">
|
||||||
|
|
|
@ -24,7 +24,7 @@ LAST_DAY = 15
|
||||||
class AnnualSummary(View):
|
class AnnualSummary(View):
|
||||||
"""display a summary of the year for the current user"""
|
"""display a summary of the year for the current user"""
|
||||||
|
|
||||||
def get(self, request, username, year):
|
def get(self, request, username, year): # pylint: disable=too-many-locals
|
||||||
"""get response"""
|
"""get response"""
|
||||||
|
|
||||||
user = get_user_from_username(request.user, username)
|
user = get_user_from_username(request.user, username)
|
||||||
|
@ -79,6 +79,9 @@ class AnnualSummary(View):
|
||||||
)
|
)
|
||||||
ratings_stats = ratings.aggregate(Avg("rating"))
|
ratings_stats = ratings.aggregate(Avg("rating"))
|
||||||
|
|
||||||
|
# annual goal status
|
||||||
|
goal_status = get_goal_status(user, year)
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
"summary_user": user,
|
"summary_user": user,
|
||||||
"year": year,
|
"year": year,
|
||||||
|
@ -101,6 +104,7 @@ class AnnualSummary(View):
|
||||||
review.book.id for review in ratings.filter(rating=5)
|
review.book.id for review in ratings.filter(rating=5)
|
||||||
],
|
],
|
||||||
"paginated_years": paginated_years,
|
"paginated_years": paginated_years,
|
||||||
|
"goal_status": goal_status,
|
||||||
}
|
}
|
||||||
|
|
||||||
return TemplateResponse(request, "annual_summary/layout.html", data)
|
return TemplateResponse(request, "annual_summary/layout.html", data)
|
||||||
|
@ -208,3 +212,17 @@ def get_books_from_shelfbooks(books_ids):
|
||||||
books = models.Edition.objects.filter(id__in=books_ids).order_by(ordered)
|
books = models.Edition.objects.filter(id__in=books_ids).order_by(ordered)
|
||||||
|
|
||||||
return books
|
return books
|
||||||
|
|
||||||
|
|
||||||
|
def get_goal_status(user, year):
|
||||||
|
"""return a dict with the year's goal status"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
goal = models.AnnualGoal.objects.get(user=user, year=year)
|
||||||
|
except models.AnnualGoal.DoesNotExist:
|
||||||
|
return None
|
||||||
|
|
||||||
|
if goal.privacy != "public":
|
||||||
|
return None
|
||||||
|
|
||||||
|
return dict(**goal.progress, **{"goal": goal.goal})
|
||||||
|
|
Loading…
Reference in a new issue