mybuddy/core/timeline.py

120 lines
4.2 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
from django.urls import reverse
from django.utils import timezone
from django.utils.translation import gettext as _
from core.models import DiaperChange, Feeding, Sleep, TummyTime
def get_objects(child, date):
"""
Create a time-sorted dictionary of 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:
2021-07-06 20:48:08 +00:00
contents = []
if instance.wet:
contents.append('💧wet')
if instance.solid:
contents.append('💩solid')
events.append({
'time': timezone.localtime(instance.time),
'event': _('%(child)s had a diaper change.') % {
'child': child.first_name
},
2021-07-06 20:48:08 +00:00
'details': _('Contents: %(contents)s') % {
'contents': ', '.join(contents),
},
'edit_link': reverse('core:diaperchange-update',
args=[instance.id]),
'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:
2021-07-02 19:30:51 +00:00
details = None
edit_link = reverse('core:feeding-update', args=[instance.id])
2021-07-02 19:30:51 +00:00
if instance.amount:
details = _('Amount: %(amount).0f') % {
'amount': instance.amount,
}
events.append({
'time': timezone.localtime(instance.start),
'event': _('%(child)s started feeding.') % {
'child': instance.child.first_name
},
2021-07-02 19:30:51 +00:00
'details': details,
'edit_link': edit_link,
'model_name': instance.model_name,
'type': 'start'
})
events.append({
'time': timezone.localtime(instance.end),
'event': _('%(child)s finished feeding.') % {
'child': instance.child.first_name
},
2021-07-02 19:30:51 +00:00
'details': details,
'edit_link': edit_link,
'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:
edit_link = reverse('core:sleep-update', args=[instance.id])
events.append({
'time': timezone.localtime(instance.start),
'event': _('%(child)s fell asleep.') % {
'child': instance.child.first_name
},
'edit_link': edit_link,
'model_name': instance.model_name,
'type': 'start'
})
events.append({
'time': timezone.localtime(instance.end),
'event': _('%(child)s woke up.') % {
'child': instance.child.first_name
},
'edit_link': edit_link,
'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:
edit_link = reverse('core:tummytime-update', args=[instance.id])
events.append({
'time': timezone.localtime(instance.start),
'event': _('%(child)s started tummy time!') % {
'child': instance.child.first_name
},
'edit_link': edit_link,
'model_name': instance.model_name,
'type': 'start'
})
events.append({
'time': timezone.localtime(instance.end),
'event': _('%(child)s finished tummy time.') % {
'child': instance.child.first_name
},
'edit_link': edit_link,
'model_name': instance.model_name,
'type': 'end'
})
events.sort(key=lambda x: x['time'], reverse=True)
return events