diff --git a/core/timeline.py b/core/timeline.py index 4f95e9cc..9c7c01c2 100644 --- a/core/timeline.py +++ b/core/timeline.py @@ -17,27 +17,69 @@ def get_objects(child, 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') + _add_diaper_changes(child, min_date, max_date, events) + _add_feedings(child, min_date, max_date, events) + _add_sleeps(child, min_date, max_date, events) + _add_tummy_times(child, min_date, max_date, events) + + events.sort(key=lambda x: x['time'], reverse=True) + + return events + + +def _add_tummy_times(child, min_date, max_date, events): + instances = TummyTime.objects.filter(child=child).filter( + start__range=(min_date, max_date)).order_by('-start') for instance in instances: - contents = [] - if instance.wet: - contents.append('💧wet') - if instance.solid: - contents.append('💩solid') + edit_link = reverse('core:tummytime-update', args=[instance.id]) events.append({ - 'time': timezone.localtime(instance.time), - 'event': _('%(child)s had a diaper change.') % { - 'child': child.first_name + 'time': timezone.localtime(instance.start), + 'event': _('%(child)s started tummy time!') % { + 'child': instance.child.first_name }, - 'details': _('Contents: %(contents)s') % { - 'contents': ', '.join(contents), + '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': reverse('core:diaperchange-update', - args=[instance.id]), - 'model_name': instance.model_name + 'edit_link': edit_link, + 'duration': timesince.timesince(instance.start, now=instance.end), + 'model_name': instance.model_name, + 'type': 'end' }) + +def _add_sleeps(child, min_date, max_date, events): + 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, + 'duration': timesince.timesince(instance.start, now=instance.end), + 'model_name': instance.model_name, + 'type': 'end' + }) + + +def _add_feedings(child, min_date, max_date, events): instances = Feeding.objects.filter(child=child).filter( start__range=(min_date, max_date)).order_by('-start') for instance in instances: @@ -69,54 +111,25 @@ def get_objects(child, date): 'type': 'end' }) - instances = Sleep.objects.filter(child=child).filter( - start__range=(min_date, max_date)).order_by('-start') + +def _add_diaper_changes(child, min_date, max_date, events): + instances = DiaperChange.objects.filter(child=child).filter( + time__range=(min_date, max_date)).order_by('-time') for instance in instances: - edit_link = reverse('core:sleep-update', args=[instance.id]) + contents = [] + if instance.wet: + contents.append('💧wet') + if instance.solid: + contents.append('💩solid') events.append({ - 'time': timezone.localtime(instance.start), - 'event': _('%(child)s fell asleep.') % { - 'child': instance.child.first_name + 'time': timezone.localtime(instance.time), + 'event': _('%(child)s had a diaper change.') % { + 'child': 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 + 'details': _('Contents: %(contents)s') % { + 'contents': ', '.join(contents), }, - 'edit_link': edit_link, - 'duration': timesince.timesince(instance.start, now=instance.end), - 'model_name': instance.model_name, - 'type': 'end' + 'edit_link': reverse('core:diaperchange-update', + args=[instance.id]), + 'model_name': instance.model_name }) - - 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, - 'duration': timesince.timesince(instance.start, now=instance.end), - 'model_name': instance.model_name, - 'type': 'end' - }) - - events.sort(key=lambda x: x['time'], reverse=True) - - return events