mirror of https://github.com/snachodog/mybuddy.git
82 lines
2.8 KiB
Python
82 lines
2.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
from __future__ import unicode_literals
|
|
|
|
from django.utils import timezone
|
|
|
|
from core.models import DiaperChange, Feeding, Sleep, TummyTime
|
|
|
|
|
|
def timeline(child, date):
|
|
"""
|
|
Create a time-sorted dictionary for all events for a child.
|
|
:param child: an instance of a Child.
|
|
:param date: a DateTime instance for the day to be summarized.
|
|
:returns: a list of the day's events.
|
|
"""
|
|
min_date = date
|
|
max_date = date.replace(hour=23, minute=59, second=59)
|
|
events = []
|
|
|
|
instances = DiaperChange.objects.filter(child=child).filter(
|
|
time__range=(min_date, max_date)).order_by('-time')
|
|
for instance in instances:
|
|
events.append({
|
|
'time': timezone.localtime(instance.time),
|
|
'event': '{} had a diaper change.'.format(child.first_name),
|
|
'model_name': instance.model_name,
|
|
})
|
|
|
|
instances = Feeding.objects.filter(child=child).filter(
|
|
start__range=(min_date, max_date)).order_by('-start')
|
|
for instance in instances:
|
|
events.append({
|
|
'time': timezone.localtime(instance.start),
|
|
'event': '{} started feeding.'.format(instance.child.first_name),
|
|
'model_name': instance.model_name,
|
|
'type': 'start'
|
|
})
|
|
events.append({
|
|
'time': timezone.localtime(instance.end),
|
|
'event': '{} finished feeding.'.format(instance.child.first_name),
|
|
'model_name': instance.model_name,
|
|
'type': 'end'
|
|
})
|
|
|
|
instances = Sleep.objects.filter(child=child).filter(
|
|
start__range=(min_date, max_date)).order_by('-start')
|
|
for instance in instances:
|
|
events.append({
|
|
'time': timezone.localtime(instance.start),
|
|
'event': '{} fell asleep.'.format(instance.child.first_name),
|
|
'model_name': instance.model_name,
|
|
'type': 'start'
|
|
})
|
|
events.append({
|
|
'time': timezone.localtime(instance.end),
|
|
'event': '{} woke up.'.format(instance.child.first_name),
|
|
'model_name': instance.model_name,
|
|
'type': 'end'
|
|
})
|
|
|
|
instances = TummyTime.objects.filter(child=child).filter(
|
|
start__range=(min_date, max_date)).order_by('-start')
|
|
for instance in instances:
|
|
events.append({
|
|
'time': timezone.localtime(instance.start),
|
|
'event': '{} started tummy time!'.format(
|
|
instance.child.first_name),
|
|
'model_name': instance.model_name,
|
|
'type': 'start'
|
|
})
|
|
events.append({
|
|
'time': timezone.localtime(instance.end),
|
|
'event': '{} finished tummy time.'.format(
|
|
instance.child.first_name),
|
|
'model_name': instance.model_name,
|
|
'type': 'end'
|
|
})
|
|
|
|
events.sort(key=lambda x: x['time'], reverse=True)
|
|
|
|
return events
|