diff --git a/timer/forms.py b/timer/forms.py new file mode 100644 index 0000000..25a9ab9 --- /dev/null +++ b/timer/forms.py @@ -0,0 +1,11 @@ +from django import forms + +import timer.models + + +class OfficeHoursForm(forms.ModelForm): + class Meta: + model = timer.models.OfficeHours + fields = ['user', 'begins_at', 'ends_at'] + + diff --git a/timer/models.py b/timer/models.py index 1a642b6..e65e786 100644 --- a/timer/models.py +++ b/timer/models.py @@ -1,9 +1,27 @@ from django.contrib.auth.models import User import django.db from django.db import models +from django.utils.timezone import localtime +import datetime class OfficeHours(models.Model): begins_at = models.DateTimeField() ends_at = models.DateTimeField() user = models.ForeignKey(User, on_delete=django.db.models.deletion.CASCADE) + + @classmethod + def parse_time_str(cls, time_srt): + return datetime.datetime.strptime(time_srt, '%Y-%m-%d %H:%M') + + @classmethod + def get_ends_at(cls, begins_at): + return begins_at + datetime.timedelta(hours=9.5) + + @property + def get_begins_at_str(self): + return localtime(self.begins_at).strftime('%Y-%m-%d %H:%M') + + @property + def get_ends_at_str(self): + return localtime(self.ends_at).strftime('%Y-%m-%d %H:%M') diff --git a/timer/templates/index.html b/timer/templates/index.html index e69de29..514b8f1 100644 --- a/timer/templates/index.html +++ b/timer/templates/index.html @@ -0,0 +1,9 @@ + + + + Office Hour + + +

office hour ends at: {{ today_oh.get_ends_at_str }}

+ + diff --git a/timer/urls.py b/timer/urls.py index bde11d6..164da41 100644 --- a/timer/urls.py +++ b/timer/urls.py @@ -7,5 +7,6 @@ from timer import views # Wire up our API using automatic URL routing. # Additionally, we include login URLs for the browsable API. urlpatterns = [ - url('office-hours', views.OfficeHoursAPI.as_view()) + url(r'^office-hours/$', views.OfficeHoursAPI.as_view()), + url(r'^office-hours-page/$', views.OfficeHoursFormView.as_view(), name='office-hours-page'), ] diff --git a/timer/views.py b/timer/views.py index 4ee7146..36491f5 100644 --- a/timer/views.py +++ b/timer/views.py @@ -1,5 +1,6 @@ from django.contrib.auth.models import User, Group from django.shortcuts import render +import django.views.generic from rest_framework import authentication, permissions, status, viewsets from rest_framework.generics import CreateAPIView from rest_framework.response import Response @@ -7,33 +8,10 @@ from rest_framework.views import APIView import timer.serializers import timer.models +import timer.forms import datetime - - -# class OfficeHoursViewSet(viewsets.ModelViewSet): -# """ -# API endpoint that allows office hours to be viewed or edited. -# """ - -# queryset = timer.models.OfficeHours.objects.order_by('-id') -# serializer_class = timer.serializers.OfficeHoursSerializer - - -# class UserViewSet(viewsets.ModelViewSet): -# """ -# API endpoint that allows users to be viewed or edited. -# """ -# queryset = User.objects.all().order_by('-date_joined') -# serializer_class = timer.serializers.UserSerializer - - -# class GroupViewSet(viewsets.ModelViewSet): -# """ -# API endpoint that allows groups to be viewed or edited. -# """ -# queryset = Group.objects.all() -# serializer_class = timer.serializers.GroupSerializer +from django.utils.timezone import localtime class OfficeHoursAPI(CreateAPIView): @@ -44,14 +22,15 @@ class OfficeHoursAPI(CreateAPIView): permission_classes = (permissions.IsAuthenticated,) queryset = timer.models.OfficeHours.objects.all() + # serializer_class = timer.serializers.GroupSerializer def create(self, request, *args, **kwargs): begins_at = request.data.get('begins_at') if not begins_at: raise try: - begins_at = datetime.datetime.strptime(begins_at, '%Y-%m-%d %H:%M') - ends_at = begins_at + datetime.timedelta(hours=9.5) + begins_at = timer.models.OfficeHours.parse_time_str(begins_at) + ends_at = timer.models.OfficeHours.get_ends_at(begins_at) oh, __ = timer.models.OfficeHours.objects.get_or_create( begins_at=begins_at, ends_at=ends_at, @@ -60,9 +39,19 @@ class OfficeHoursAPI(CreateAPIView): raise resp_data = { - 'begins_at': begins_at.strftime('%Y-%m-%d %H:%M'), - 'ends_at': ends_at.strftime('%H:%M'), + 'begins_at': oh.get_begins_at_str, + 'ends_at': oh.get_ends_at_str, } return Response(resp_data, status=status.HTTP_201_CREATED) + +class OfficeHoursFormView(django.views.generic.FormView): + template_name = 'index.html' + form_class = timer.forms.OfficeHoursForm + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + today_oh = timer.models.OfficeHours.objects.filter(begins_at__date=localtime().date()).last() + context['today_oh'] = today_oh + return context