Adding activity output

Bug fixing
This commit is contained in:
Kumi 2021-02-21 20:59:39 +01:00
parent 261531f9bf
commit bbb062ca0e
3 changed files with 59 additions and 5 deletions

View file

@ -8,7 +8,7 @@ from dateutil.relativedelta import relativedelta
from .models import Status
def moodstats(mindate=None, maxdate=None, days=7):
def moodstats(user, mindate=None, maxdate=None, days=7):
hv.extension('bokeh')
maxdate = maxdate or timezone.now()
@ -27,7 +27,7 @@ def moodstats(mindate=None, maxdate=None, days=7):
pointdict = {"date": [], "value": [], "color": []}
for status in Status.objects.filter(timestamp__gte=mindate, timestamp__lte=maxdate):
for status in Status.objects.filter(user=user, timestamp__gte=mindate, timestamp__lte=maxdate):
if status.mood:
pointdict["date"].append(status.timestamp)
pointdict["value"].append(status.mood.value)
@ -48,6 +48,21 @@ def moodstats(mindate=None, maxdate=None, days=7):
line = hv.Curve(pointtuples)
output = points * line
output.opts(tools=["xwheel_zoom"])
output.opts(tools=["xwheel_zoom"], ylim=(0, 5))
return output
def activitystats(user, mindate=None, maxdate=None, days=7):
maxdate = maxdate or timezone.now()
mindate = mindate or (maxdate - relativedelta(days=days))
output = {}
for status in Status.objects.filter(user=user, timestamp__gte=mindate, timestamp__lte=maxdate):
for activity in status.activity_set:
if activity in output.keys():
output[activity] += 1
else:
output[activity] = 1
return output

View file

@ -19,6 +19,31 @@
</div>
</div>
</div>
<div class="col-xl-4 col-lg-5">
<div class="card shadow mb-4">
<!-- Card Header - Dropdown -->
<div class="card-header py-3 d-flex flex-row align-items-center justify-content-between">
<h6 class="m-0 font-weight-bold text-primary">Activities</h6>
</div>
<!-- Card Body -->
<div class="card-body">
<table>
<tr>
<th>Activity</th>
<th>Count</th>
</tr>
{% for activity, count in activities.items %}
<tr>
<td style="color:{{ activity.color }};"><i class="{{ activity.icon }}"></i><b> {{ activity }}</b></td>
<td style="text-align: right;">{{ count }}</td>
</tr>
{% endfor %}
</table>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -9,7 +9,7 @@ from django.utils.decorators import method_decorator
from .models import Status, Activity, Mood, StatusMedia, StatusActivity
from .forms import StatusForm
from .statistics import moodstats
from .statistics import moodstats, activitystats
from common.helpers import get_upload_path
from common.templatetags.images import hvhtml
@ -330,8 +330,22 @@ class MoodStatisticsView(LoginRequiredMixin, TemplateView):
template_name = "mood/statistics.html"
def get_context_data(self, **kwargs):
startdate = self.request.GET.get("start")
enddate = self.request.GET.get("end")
if enddate:
maxdate = datetime.strptime(enddate, "%Y-%m-%d")
else:
maxdate = timezone.now()
if startdate:
mindate = datetime.strptime(startdate, "%Y-%m-%d")
else:
mindate = maxdate - relativedelta.relativedelta(weeks=1)
context = super().get_context_data(**kwargs)
context["title"] = "Statistics"
context["activities"] = activitystats(self.request.user, mindate, maxdate)
return context
class MoodCSVView(LoginRequiredMixin, View):
@ -383,5 +397,5 @@ class MoodPlotView(LoginRequiredMixin, View):
else:
mindate = maxdate - relativedelta.relativedelta(weeks=1)
res.write(hvhtml(moodstats(mindate, maxdate)))
res.write(hvhtml(moodstats(request.user, mindate, maxdate)))
return res