Add a "naps" card.

This commit is contained in:
Christopher Charbonneau Wells 2017-10-23 19:52:20 -04:00
parent 029f554dfc
commit 66a91fe534
3 changed files with 42 additions and 5 deletions

View File

@ -0,0 +1,22 @@
{% extends 'cards/sleep.html' %}
{% load duration %}
{% block header %}Today's Naps{% endblock %}
{% block title %}
{% if count %}
<strong>{{ count }} naps</strong>
{% else %}
<i class="icon icon-sad" aria-hidden="true"></i>
<strong>None yet today</strong>
<i class="icon icon-sad" aria-hidden="true"></i>
{% endif %}
{% endblock %}
{% block content %}
<div class="text-muted">
{{ total.duration__sum|duration_string }}
</div>
{% endblock %}
{% block footer %}<em>Naps are sleep entries starting 7AM - 7PM.</em>{% endblock %}

View File

@ -19,6 +19,7 @@
<div class="col-lg-4 col-md-6 col-sm-12">
{% card_sleep_last object %}
{% card_sleep_day object %}
{% card_sleep_naps_day object %}
{% card_tummytime_day object %}
</div>
<div class="col-lg-4 col-md-6 col-sm-12">

View File

@ -2,6 +2,7 @@
from __future__ import unicode_literals
from django import template
from django.db.models import Sum
from django.utils import timezone
from core.models import DiaperChange, Feeding, Sleep, Timer, TummyTime
@ -103,12 +104,25 @@ def card_sleep_day(child, date=None):
total += end - start
count = len(instances)
if count > 0:
average = total/count
else:
average = 0
return {'total': total, 'count': count, 'average': average}
return {'total': total, 'count': count}
@register.inclusion_tag('cards/sleep_naps_day.html')
def card_sleep_naps_day(child, date=None):
"""Nap information for the current day.
"""
local = timezone.localtime(date)
start_lower = local.replace(
hour=7, minute=0, second=0).astimezone(timezone.utc)
start_upper = local.replace(
hour=19, minute=0, second=0).astimezone(timezone.utc)
instances = Sleep.objects.filter(child=child) \
.filter(start__gte=start_lower, start__lte=start_upper)
return {
'total': instances.aggregate(Sum('duration')),
'count': len(instances)
}
@register.inclusion_tag('cards/timer_list.html')