Refactor dashboard as a separate app.

This commit is contained in:
Christopher Charbonneau Wells 2017-08-18 09:02:31 -04:00
parent fe2b704d16
commit c908ae6e2b
14 changed files with 55 additions and 33 deletions

View File

@ -22,6 +22,7 @@ INSTALLED_APPS = [
'api',
'babyblotter',
'core',
'dashboard',
'rest_framework',
'widget_tweaks',

View File

@ -15,4 +15,5 @@ urlpatterns = [
url(r'', include('api.urls', namespace='api')),
url(r'', include('core.urls')),
url(r'', include('dashboard.urls')),
]

View File

@ -6,13 +6,8 @@ from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.DashboardRedirect.as_view(), name='dashboard'),
url(r'^dashboard/$', views.Dashboard.as_view(), name='dashboard'),
url(r'children/$', views.ChildList.as_view(), name='child-list'),
url(r'children/add/$', views.ChildAdd.as_view(), name='child-add'),
url(r'children/(?P<slug>[^/.]+)/dashboard/$',
views.ChildDashboard.as_view(), name='child-dashboard'),
url(r'children/(?P<pk>[0-9]+)/$', views.ChildUpdate.as_view(),
name='child-update'),
url(r'children/(?P<slug>[^/.]+)/$', views.ChildUpdate.as_view(),

View File

@ -2,10 +2,9 @@
from __future__ import unicode_literals
from django.core.urlresolvers import resolve
from django.contrib.auth.mixins import (LoginRequiredMixin,
PermissionRequiredMixin)
from django.contrib.auth.mixins import PermissionRequiredMixin
from django.urls import reverse
from django.views.generic.base import TemplateView, RedirectView
from django.views.generic.base import RedirectView
from django.views.generic.detail import DetailView
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.views.generic.list import ListView
@ -15,27 +14,6 @@ from .forms import (ChildForm, DiaperChangeForm, FeedingForm, SleepForm,
TimerForm, TummyTimeForm)
class DashboardRedirect(LoginRequiredMixin, RedirectView):
# Show the overall dashboard or a child dashboard if one Child instance.
def get(self, request, *args, **kwargs):
if Child.objects.count() == 1:
child_instance = Child.objects.first()
self.url = reverse('child-dashboard', args={child_instance.slug})
else:
self.url = reverse('dashboard')
return super(DashboardRedirect, self).get(request, *args, **kwargs)
class Dashboard(LoginRequiredMixin, TemplateView):
template_name = 'core/dashboard.html'
class ChildDashboard(PermissionRequiredMixin, DetailView):
model = Child
permission_required = ('core.view_child',)
template_name = 'core/child_dashboard.html'
class ChildList(PermissionRequiredMixin, ListView):
model = Child
permission_required = ('core.view_child',)

0
dashboard/__init__.py Normal file
View File

View File

View File

@ -1,5 +1,5 @@
{% extends 'babyblotter/page.html' %}
{% load dashboard_cards %}
{% load dashboard %}
{% block title %}Dashboard - {{ object }}{% endblock %}
@ -8,7 +8,7 @@
<div class="container">
<div class="row align-items-start text-center">
<div class="col-sm-12 col-md-4">
{% feeding_last object %}
{% card_feeding_last object %}
</div>
<div class="col-sm-12 col-md-4">
last feeding

View File

View File

@ -9,7 +9,7 @@ from core.models import Feeding
register = template.Library()
@register.inclusion_tag('dashboard_cards/feeding_last.html')
def feeding_last(child):
@register.inclusion_tag('cards/feeding_last.html')
def card_feeding_last(child):
feeding_instance = Feeding.objects.filter(child=child).last()
return {'feeding': feeding_instance}

3
dashboard/tests.py Normal file
View File

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

13
dashboard/urls.py Normal file
View File

@ -0,0 +1,13 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.DashboardRedirect.as_view(), name='dashboard'),
url(r'^dashboard/$', views.Dashboard.as_view(), name='dashboard'),
url(r'children/(?P<slug>[^/.]+)/dashboard/$',
views.ChildDashboard.as_view(), name='child-dashboard'),
]

31
dashboard/views.py Normal file
View File

@ -0,0 +1,31 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.contrib.auth.mixins import (LoginRequiredMixin,
PermissionRequiredMixin)
from django.urls import reverse
from django.views.generic.base import TemplateView, RedirectView
from django.views.generic.detail import DetailView
from core.models import Child
class DashboardRedirect(LoginRequiredMixin, RedirectView):
# Show the overall dashboard or a child dashboard if one Child instance.
def get(self, request, *args, **kwargs):
if Child.objects.count() == 1:
child_instance = Child.objects.first()
self.url = reverse('child-dashboard', args={child_instance.slug})
else:
self.url = reverse('dashboard')
return super(DashboardRedirect, self).get(request, *args, **kwargs)
class Dashboard(LoginRequiredMixin, TemplateView):
template_name = 'dashboard/dashboard.html'
class ChildDashboard(PermissionRequiredMixin, DetailView):
model = Child
permission_required = ('core.view_child',)
template_name = 'dashboard/child.html'